@genesislcap/design-system-configurator 14.413.0 → 14.415.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/dist/{106.106.99ad223d647b2aa6a446.js → 106.106.ef859bd84cff7d70996b.js} +1 -1
  2. package/dist/151.151.dc8ca32e561059859788.js +2 -0
  3. package/dist/{151.68605fb2475becdbde3e7b42592f70ae.js.map → 151.bf0f55a4e61c4d3cd4b3bf6c54d42de0.js.map} +1 -1
  4. package/dist/{163.163.5142ebbd128eee6f7d6d.js → 163.163.df87ec05a65b347f51ad.js} +2 -2
  5. package/dist/{163.12375be7b4a17f8f1d32daa493765ffd.js.map → 163.dd15ce98cea123bcf0f7f0338134c901.js.map} +1 -1
  6. package/dist/{182.182.5c84aa94492ef968916b.js → 182.182.c0b1512a67e3507f2639.js} +4 -4
  7. package/dist/{182.c15755e4ac38e3712367f92f45d81198.js.map → 182.70385159eae8fbfdbf1f00f72dec4aae.js.map} +1 -1
  8. package/dist/{3.3.b30621410cc2fae63681.js → 3.3.45186e1fb651a1f5c85e.js} +3 -3
  9. package/dist/{3.4ed0e7adb4821da5960b3c8720b7fd07.js.map → 3.683e57a531943fdcd3e3f95959b0b217.js.map} +1 -1
  10. package/dist/{445.445.dfa92951d1e04b2162d7.js → 445.445.736d9a3a72f05960c28a.js} +3 -3
  11. package/dist/{445.8e1ea19ee8727c9d66c46328d4e5eba4.js.map → 445.b12fa5f7e0dde66ba22d93a24a7c160d.js.map} +1 -1
  12. package/dist/{715.715.686ea10aebfc2267dfd4.js → 715.715.802cebfedf86dad07745.js} +3 -3
  13. package/dist/715.8c225110dfb8acc1fb95e378b3417dde.js.map +1 -0
  14. package/dist/{72.3027c7a9ce2aca8c7e34630d9937c7a9.js.map → 72.49c400624bd7ec5a251fa2882f16a4bc.js.map} +1 -1
  15. package/dist/{72.72.3317c2fc6adc41a567cd.js → 72.72.b1b60049169bb53723ad.js} +2 -2
  16. package/dist/772.07f3ff4a7865d9a4203c774fcbf8a35d.js.map +1 -0
  17. package/dist/{94.94.5f7e055f866fe506f68f.js → 772.772.bb6d7a37a59ee7254cb4.js} +660 -543
  18. package/dist/designSystemConfigurator.f4917ff88ef71c55c991a22326029097.js.map +1 -0
  19. package/dist/index.html +1 -1
  20. package/dist/main.b36cc30476e66e990cca2571df428035.js.map +1 -0
  21. package/dist/main.bf6e125413c018dc20b4.js +2 -0
  22. package/dist/remoteEntry.js +2 -2
  23. package/package.json +13 -13
  24. package/dist/151.151.30e598f658e9867d4e8e.js +0 -2
  25. package/dist/715.be6cd4d948e1c7ca5842f246b54267f1.js.map +0 -1
  26. package/dist/94.fd268efd6d35e7f3275ef3f0706707a9.js.map +0 -1
  27. package/dist/designSystemConfigurator.1ebcad3b376ed092bd44032860849c4a.js.map +0 -1
  28. package/dist/main.c230083c5abcaade1c96.js +0 -2
  29. package/dist/main.c3c4676675a73032ba99533ef813d977.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"445.445.xxxxxxxxxxxxxxxxxxxx.js","mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBCDtB,MAAMmvB,EAA0B,EAAAnvB,GAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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CA,UACA,sBACA,oBACA,qBACA,eACA,eACA,aACA,cACA,mBACA,sBACA,cACA,WACA,YACA,kBACA,YACA,eACA,oBACA,wBACA,oBACA,yBACA,uBACA,2BACA,6BACA,kBACA,mBACA,kCACA,mBACA,mBACA,oBACA,qBACA,iBACA,0BACA,4BACA,iBACA,6BACA,0BACA,sBACA,2BACA,iBACA,gBACA,WACA,wCACA,4BACA,wBACA,oBACA,2BACA,6BACA,2BACA,QACA,wBACA,wBACA,uBACA,qBACA,0BACA,2BACA,mBACA,yBACA,aACA,oBACA,kBACA,kBACA,yBACA,wBACA,mBACA,uBACA,4BACA,8BACA,yBACA,2BACA,uBACA,oBACA,mBACA,+BACA,YACA,gBACA,sBACA,iCACA,sBACA,gCACA,wBACA,gCACA,+BACA,6BACA,qCACA,8BACA,yBACA,8BACA,YACA,0BACA,+BACA,yBACA,4BACA,mBACA,oBACA,cACA,uBACA,4BACA,kCACA,YACA,oBACA,mBACA,iBACA,kBACA,8BACA,kBACA,kBACA,qBACA,0BACA,uBACA,uBACA,aACA,yBACA,0BACA,kCACA,sBACA,mBACA,sCACA,iBACA,eACA,0BACA,aACA,yBACA,8BACA,yBACA,sBACA,oBACA,WACA,eACA,8BACA,0BACA,iBACA,6BACA,0BACA,4BACA,uBACA,yBACA,+BACA,eACA,8BACA,gCACA,gCACA,0BACA,gCACA,oCACA,uCACA,oBACA,iBACA,oBACA,8BACA,sBACA,gCACA,gBACA,0BACA,gCACA,4BACA,sBACA,kCACA,gCACA,0BACA,4BACA,yBACA,2BACA,0BACA,kBACA,uBACA,4CACA,gCACA,sBACA,qBACA,uBACA,UACA,kBACA,eACA,4BACA,+BACA,uBACA,4CACA,+BACA,kBACA,mCACA,4BACA,6BACA,yBACA,iBACA,yBACA,mBACA,kBACA,yBACA,8BACA,2BACA,gCACA,wBACA,kBACA,WACA,8BACA,cACA,mBACA,4BACA,wBACA,iCACA,sBACA,+BACA,0BACA,mCACA,yBACA,kCACA,qBACA,8BACA,gBACA,0BACA,eACA,cACA,cACA,sBACA,mBACA,uBACA,0BACA,iBACA,eACA,iBACA,kBACA,uBACA,kBACA,qBACA,gBACA,2BACA,cACA,mBACA,gBACA,cACA,cACA,eACA,4BACA,iCACA,4BACA,2BACA,wBACA,oBACA,uBACA,uBACA,gBACA,+BACA,2BACA,gCACA,iCACA,uBACA,8BACA,8BACA,WACA,qBAOSC,EAAuB,CAChC,YACA,kBACA,YACA,eACA,oBACA,wBACA,oBACA,yBACA,uBACA,2BACA,6BACA,kBACA,mBACA,kCACA,mBACA,mBACA,oBACA,qBACA,iBACA,0BACA,4BACA,iBACA,6BACA,0BACA,sBACA,2BACA,iBACA,gBACA,YAOSC,EAAwB,CACjC,wCACA,4BACA,wBACA,oBACA,2BACA,6BACA,2BACA,QACA,wBACA,wBACA,uBACA,qBACA,0BACA,2BACA,mBACA,yBACA,aACA,oBACA,kBACA,kBACA,yBACA,wBACA,mBACA,uBACA,4BACA,8BACA,yBACA,2BACA,uBACA,oBACA,mBACA,+BACA,YACA,gBACA,sBACA,iCACA,sBACA,gCACA,wBACA,gCACA,+BACA,6BACA,qCACA,8BACA,yBACA,8BACA,YACA,0BACA,+BACA,yBACA,4BACA,mBACA,oBACA,cACA,uBACA,4BACA,kCACA,YACA,oBACA,mBACA,iBACA,kBACA,8BACA,kBACA,kBACA,qBACA,0BACA,uBACA,uBACA,aACA,yBACA,0BACA,kCACA,sBACA,mBACA,sCACA,iBACA,eACA,0BACA,aACA,yBACA,8BACA,yBACA,sBACA,oBACA,WACA,eACA,8BACA,0BACA,iBACA,6BACA,0BACA,4BACA,uBACA,yBACA,+BACA,eACA,8BACA,gCACA,gCACA,0BACA,gCACA,oCACA,uCACA,oBACA,iBACA,oBACA,8BACA,sBACA,gCACA,gBACA,0BACA,gCACA,4BACA,sBACA,kCACA,gCACA,0BACA,4BACA,yBACA,2BACA,0BACA,kBACA,uBACA,4CACA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","sources":["webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-editors/date.editor.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-editors/multiselect.editor.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-editors/number.editor.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-editors/select.editor.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-editors/string.editor.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/action.renderer.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/actions-menu.renderer.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/boolean.renderer.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/editable.renderer.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/icon.renderer.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/select.renderer.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/status-pill.renderer.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/text-field.renderer.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/text.renderer.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/utils/accessor.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell/cell.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell/cell.template.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/column/column.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/column/column.template.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/base.datasource.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/base.types.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/client-side.datasource.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/error-handler.dialog.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/server-side.grid-definitions.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/server-side.resource-base.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/server-side.resource-dataserver.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/server-side.resource-reqrep.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/server-side.datasource.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/external/ag-head-css.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/external/fonts.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/external/ag-grid-css.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/external/ag-theme-alpine-no-font-css.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/external/ag-theme-balham-no-font-css.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/external/ag-theme-material-no-font-css.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/external/index.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/grid-pro-genesis-datasource/datasource-events.types.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/grid-pro-genesis-datasource/grid-pro-genesis-datasource.config.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/client-side.grid-definitions.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/grid-pro-genesis-datasource/grid-pro-genesis-datasource.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/grid-pro.definitions.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/grid-pro.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/grid-pro.styles.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/grid-pro.template.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/grid-pro.types.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/state-persistence/local-state.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/state-persistence/state-persistence.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/status-bar-components/label-value.status-bar.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/status-bar-components/load-more.status-bar.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/status-bar-components/pagination.status-bar.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/status-bar-components/reload.status-bar.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/status-bar-components/row-count.status-bar.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/tooltips/error-tooltip.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/utils/array.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/utils/error.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/utils/logger.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/utils/map.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/utils/string.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-utils/dist/esm/mixins/lifecycle/lifecycle.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-utils/dist/esm/utils/delay.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-utils/dist/esm/utils/dom.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-utils/dist/esm/utils/logger.js"],"sourcesContent":["import { __decorate } from \"tslib\";\nimport { css, html, observable, ref } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\nimport { EDITED_COLUMN_FIELD } from '../grid-pro.types';\ndayjs.extend(utc);\n/**\n * The AG Date Editor element.\n * @public\n * @tagname %%prefix%%-date-editor\n */\nexport class DateEditor extends FoundationElement {\n init(params) {\n if (!params)\n return;\n this.params = params;\n this.value = params.value;\n this.dateFormat = params.withTime ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD';\n this.inputType = params.withTime ? 'datetime-local' : 'date';\n this.actualWidth = params.column.getActualWidth();\n }\n getGui() {\n return this;\n }\n refresh(params) {\n return true;\n }\n getValue() {\n return this.value;\n }\n isPopup() {\n return true;\n }\n changeHandler(event) {\n const dateValue = event.target.control.valueAsNumber;\n this.value = !isNaN(dateValue) ? dateValue : undefined;\n }\n afterGuiAttached() {\n this.input.focus();\n }\n isCancelBeforeStart() {\n return !!this.params.data[EDITED_COLUMN_FIELD];\n }\n}\n__decorate([\n observable\n], DateEditor.prototype, \"value\", void 0);\n__decorate([\n observable\n], DateEditor.prototype, \"actualWidth\", void 0);\n/**\n * The AG Select Renderer Styles.\n * @public\n */\nexport const agDateEditorStyles = css `\n :host {\n display: flex;\n }\n`;\n/**\n * Get a Design System prefixed Select template.\n * @param prefix - The design system prefix to use. Defaults to 'foundation'.\n * @returns A Select component template prefixed with the correct design system.\n * @public\n */\nexport const getDateEditorTemplate = (prefix = 'foundation') => html `\n <${prefix}-text-field\n ${ref('input')}\n :value=${(x) => x.value === undefined || x.value === null ? '' : dayjs.utc(x.value).format(x.dateFormat)}\n type=${(x) => x.inputType}\n @input=${(x, c) => x.changeHandler(c.event)}\n style=\"width: ${(x) => x.actualWidth}px\"\n ></${prefix}-text-field>\n`;\n/**\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-select-editor\\>\n */\nexport const foundationDateEditor = DateEditor.compose({\n baseName: 'date-editor',\n styles: agDateEditorStyles,\n template: getDateEditorTemplate(),\n});\n","import { __decorate } from \"tslib\";\nimport { css, html, observable } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { EDITED_COLUMN_FIELD } from '../grid-pro.types';\n/**\n * The AG Multiselect Editor element.\n * @public\n * @tagname %%prefix%%-multiselect-editor\n */\nexport class MultiselectEditor extends FoundationElement {\n init(params) {\n if (!params)\n return;\n this.params = params;\n this.selectedOptions = params.value;\n // DATASERVER does not support array type so selected options could be fetched from another resource\n if (this.params.selectedOptionsCallback) {\n this.params.selectedOptionsCallback(this.params.data).then((selectedOptions) => {\n this.selectedOptions = selectedOptions;\n });\n }\n // if value was provided as string component will assume it's in csv syntax\n if (typeof params.value === 'string') {\n this.selectedOptions = params.value.split(',');\n }\n }\n getGui() {\n return this;\n }\n destroy() { }\n refresh(params) {\n return true;\n }\n getValue() {\n return this.selectedOptions;\n }\n isPopup() {\n return true;\n }\n changeHandler(event) {\n this.selectedOptions = event.detail;\n }\n isCancelBeforeStart() {\n return !!this.params.data[EDITED_COLUMN_FIELD];\n }\n}\n__decorate([\n observable\n], MultiselectEditor.prototype, \"params\", void 0);\n__decorate([\n observable\n], MultiselectEditor.prototype, \"selectedOptions\", void 0);\n/**\n * The AG Select Renderer Styles.\n * @public\n */\nexport const agMultiselectEditorStyles = css ``;\n/**\n * Get a Design System prefixed Select template.\n * @param designSystem - The design system prefix to use. Defaults to 'foundation'.\n * @returns A Select component template prefixed with the correct design system.\n * @public\n */\nexport const getMultiselectEditorTemplate = (designSystem = 'foundation') => html `\n <${designSystem}-multiselect\n style=\"width: 100%\"\n ?async=${(x) => x.params.async}\n :selectedOptions=${(x) => x.selectedOptions || []}\n @selectionChange=${(x, c) => x.changeHandler(c.event)}\n >\n <multiselect-datasource\n resourceName=${(x) => x.params.allOptionsResourceName}\n value-field=${(x) => x.params.valueField}\n label-field=${(x) => x.params.labelField}\n :datasourceConfig=${(x) => x.params.datasourceOptions}\n ></multiselect-datasource>\n </${designSystem}-multiselect>\n`;\n/**\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-multiselect-editor\\>\n */\nexport const foundationMultiselectEditor = MultiselectEditor.compose({\n baseName: 'multiselect-editor',\n styles: agMultiselectEditorStyles,\n template: getMultiselectEditorTemplate(),\n});\n","import { __decorate } from \"tslib\";\nimport { css, html, observable, ref } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { EDITED_COLUMN_FIELD } from '../grid-pro.types';\n/**\n * The AG Number Editor element.\n * @public\n * @tagname %%prefix%%-number-editor\n */\nexport class NumberEditor extends FoundationElement {\n init(params) {\n if (!params)\n return;\n this.params = params;\n this.value = params.value;\n this.actualWidth = params.column.getActualWidth();\n }\n getGui() {\n return this;\n }\n refresh(params) {\n return true;\n }\n getValue() {\n return this.value;\n }\n isPopup() {\n return true;\n }\n afterGuiAttached() {\n this.input.focus();\n }\n changeHandler(event) {\n const value = parseFloat(event.target.value);\n this.value = !isNaN(value) ? value : undefined;\n if (this.params.onChange)\n this.params.onChange(this.value, this.params);\n }\n isCancelBeforeStart() {\n return !!this.params.data[EDITED_COLUMN_FIELD];\n }\n}\n__decorate([\n observable\n], NumberEditor.prototype, \"params\", void 0);\n__decorate([\n observable\n], NumberEditor.prototype, \"value\", void 0);\n__decorate([\n observable\n], NumberEditor.prototype, \"actualWidth\", void 0);\n/**\n * The AG Number Editor Styles.\n * @public\n */\nexport const agNumberEditorStyles = css `\n :host {\n display: flex;\n }\n`;\n/**\n * Get a Design System prefixed Select template.\n * @param designSystem - The design system prefix to use. Defaults to 'foundation'.\n * @returns A Select component template prefixed with the correct design system.\n * @public\n */\nexport const getNumberEditorTemplate = (designSystem = 'foundation') => html `\n <${designSystem}-number-field\n ${ref('input')}\n withFormatting=${(x) => x.params.withFormatting}\n :options=${(x) => x.params.formatOptions}\n :value=${(x) => (x.value === undefined ? '' : String(x.value))}\n @input=${(x, c) => {\n x.changeHandler(c.event);\n}}\n placeholder=${(x) => x.params.placeholder}\n ?disabled=${(x) => x.params.disabled}\n hideStep\n style=\"width: ${(x) => x.actualWidth}px\"\n ></${designSystem}-number-field>\n`;\n/**\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-number-editor\\>\n */\nexport const foundationNumberEditor = NumberEditor.compose({\n baseName: 'number-editor',\n styles: agNumberEditorStyles,\n template: getNumberEditorTemplate(),\n});\n","import { __decorate } from \"tslib\";\nimport { css, html, observable, ref } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { EDITED_COLUMN_FIELD } from '../grid-pro.types';\n/**\n * The AG Select Editor element.\n * @public\n * @tagname %%prefix%%-select-editor\n */\nexport class SelectEditor extends FoundationElement {\n init(params) {\n if (!params)\n return;\n this.params = params;\n this.value = params.value;\n this.actualWidth = params.column.getActualWidth();\n }\n getGui() {\n return this;\n }\n refresh(params) {\n return true;\n }\n getValue() {\n return this.value;\n }\n isPopup() {\n return true;\n }\n afterGuiAttached() {\n this.combobox.open = true;\n }\n changeHandler(event) {\n var _a;\n this.value = (_a = event.detail) === null || _a === void 0 ? void 0 : _a.value;\n }\n isCancelBeforeStart() {\n return !!this.params.data[EDITED_COLUMN_FIELD];\n }\n}\n__decorate([\n observable\n], SelectEditor.prototype, \"params\", void 0);\n__decorate([\n observable\n], SelectEditor.prototype, \"value\", void 0);\n__decorate([\n observable\n], SelectEditor.prototype, \"actualWidth\", void 0);\n/**\n * The AG Select Renderer Styles.\n * @public\n */\nexport const agSelectEditorStyles = css ``;\n/**\n * Get a Design System prefixed Select template.\n * @param designSystem - The design system prefix to use. Defaults to 'foundation'.\n * @returns A Select component template prefixed with the correct design system.\n * @public\n */\nexport const getSelectEditorTemplate = (designSystem = 'foundation') => html `\n <${designSystem}-combobox\n style=\"width: ${(x) => x.actualWidth}px\"\n ${ref('combobox')}\n position=${(x) => (x.params.position ? x.params.position(x.params.data) : '')}\n ?async=${(x) => x.params.async}\n @value-change=${(x, c) => x.changeHandler(c.event)}\n >\n <options-datasource\n resourceName=${(x) => x.params.allOptionsResourceName}\n value-field=${(x) => x.params.valueField}\n label-field=${(x) => x.params.labelField}\n option-element=\"${designSystem}-option\"\n ?allow-custom-options=${(x) => x.params.allowCustomOptions}\n :datasourceConfig=${(x) => x.params.datasourceOptions}\n :data=${(x) => x.params.values}\n :initialSelectedValue=${(x) => x.params.value}\n ></options-datasource>\n </${designSystem}-combobox>\n`;\n/**\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-select-editor\\>\n */\nexport const foundationSelectEditor = SelectEditor.compose({\n baseName: 'select-editor',\n styles: agSelectEditorStyles,\n template: getSelectEditorTemplate(),\n});\n","import { __decorate } from \"tslib\";\nimport { css, html, observable, ref } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { EDITED_COLUMN_FIELD } from '../grid-pro.types';\n/**\n * The AG String Editor element.\n * @public\n * @tagname %%prefix%%-string-editor\n */\nexport class StringEditor extends FoundationElement {\n init(params) {\n if (!params)\n return;\n this.params = params;\n this.value = params.value;\n this.actualWidth = params.column.getActualWidth();\n }\n getGui() {\n return this;\n }\n refresh(params) {\n return true;\n }\n getValue() {\n return this.value;\n }\n isPopup() {\n return true;\n }\n afterGuiAttached() {\n this.input.focus();\n }\n changeHandler(event) {\n this.value = event.target.value;\n }\n isCancelBeforeStart() {\n return !!this.params.data[EDITED_COLUMN_FIELD];\n }\n}\n__decorate([\n observable\n], StringEditor.prototype, \"params\", void 0);\n__decorate([\n observable\n], StringEditor.prototype, \"value\", void 0);\n__decorate([\n observable\n], StringEditor.prototype, \"actualWidth\", void 0);\n/**\n * The AG String Renderer Styles.\n * @public\n */\nexport const agStringEditorStyles = css `\n :host {\n display: flex;\n }\n`;\n/**\n * Get a Design System prefixed String template.\n * @param designSystem - The design system prefix to use. Defaults to 'foundation'.\n * @returns A String component template prefixed with the correct design system.\n * @public\n */\nexport const getStringEditorTemplate = (designSystem = 'foundation') => html `\n <${designSystem}-text-field\n ${ref('input')}\n :value=${(x) => (x.value === undefined ? '' : x.value)}\n @input=${(x, c) => {\n x.changeHandler(c.event);\n}}\n placeholder=${(x) => x.params.placeholder}\n style=\"width: ${(x) => x.actualWidth}px\"\n >\n </${designSystem}-text-field>\n`;\n/**\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-string-editor\\>\n */\nexport const foundationStringEditor = StringEditor.compose({\n baseName: 'string-editor',\n styles: agStringEditorStyles,\n template: getStringEditorTemplate(),\n});\n","import { __awaiter, __decorate } from \"tslib\";\nimport { KeyCode } from '@ag-grid-community/core';\nimport { css, html, observable } from '@microsoft/fast-element';\nimport { DesignToken, FoundationElement } from '@microsoft/fast-foundation';\nimport { logger } from '../utils';\n/**\n * The AG Action Renderer element.\n * @public\n * @tagname %%prefix%%-grid-pro-action-renderer\n */\nexport class ActionRenderer extends FoundationElement {\n init(params) {\n if (!params)\n return;\n this.params = params;\n params.eGridCell.addEventListener('keydown', (event) => {\n if (event.key === KeyCode.ENTER) {\n this.clickHandler();\n }\n });\n }\n getGui() {\n return this;\n }\n refresh(params) {\n this.params = params;\n return true;\n }\n isDisabled(data) {\n var _a;\n if (typeof ((_a = this.params) === null || _a === void 0 ? void 0 : _a.isDisabled) === 'function') {\n try {\n return this.params.isDisabled(data);\n }\n catch (error) {\n logger.error('Error executing grid action cell renderer isDisabled callback:', error);\n }\n }\n return false;\n }\n clickHandler() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.params.actionClick)\n return;\n this.pendingAction = true;\n yield this.params.actionClick(this.params.data);\n this.pendingAction = false;\n });\n }\n get dataTestId() {\n var _a, _b;\n if ((_a = this.params) === null || _a === void 0 ? void 0 : _a.dataTestId) {\n return this.params.dataTestId + ((_b = this.params.data[this.params.uniqueFieldName]) !== null && _b !== void 0 ? _b : '');\n }\n return undefined;\n }\n}\n__decorate([\n observable\n], ActionRenderer.prototype, \"params\", void 0);\n__decorate([\n observable\n], ActionRenderer.prototype, \"pendingAction\", void 0);\nconst { create } = DesignToken;\n/**\n * The base height multiplier for the action renderer.\n * @remarks Results in `--action-height-multiplier`. This is a DesignToken {@link https://www.fast.design/docs/design-systems/design-tokens/#what-is-a-design-token} value. Defaults to `0.6px`. May have other values depending on the design system or can be set to a different value.\n * @public\n */\nexport const actionHeightMultiplier = create('action-height-multiplier').withDefault('0.6px');\n/**\n * The AG Action Renderer Styles.\n * @public\n */\nexport const agActionRendererStyles = css `\n .action-container {\n align-items: center;\n display: flex;\n height: 100%;\n justify-content: center;\n }\n .action-renderer {\n align-self: center;\n display: flex;\n height: calc(\n (var(--base-height-multiplier) + var(--density)) * var(--design-unit) *\n var(--action-height-multiplier)\n );\n }\n`;\n/**\n * A function that returns a Foundation Action Renderer for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-grid-pro-action-renderer\\>\n */\nexport const foundationGridProActionRenderer = ActionRenderer.compose({\n baseName: 'grid-pro-action-renderer',\n styles: css `\n ${agActionRendererStyles}\n `,\n template: html `\n <div class=\"action-container\" part=\"action-container\">\n <foundation-button\n class=\"action-renderer\"\n part=\"action-renderer\"\n style=\"${(x) => x.params.actionButtonStyle || ''}\"\n data-test-id=\"${(x) => x.dataTestId}\"\n ?disabled=${(x) => { var _a; return x.pendingAction || x.isDisabled((_a = x.params) === null || _a === void 0 ? void 0 : _a.data); }}\n appearance=\"${(x) => x.params.appearance}\"\n @click=${(x) => x.clickHandler()}\">${(x) => x.params.actionName}</foundation-button>\n </div>`,\n});\n","import { __decorate } from \"tslib\";\nimport { html, observable } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { GridProRendererTypes } from '../grid-pro.types';\nimport { convertToKebabCase } from '../utils';\n/**\n * The Actions Menu Renderer element.\n * @remarks For multiple actions scenarios.\n * @public\n * @tagname %%prefix%%-grid-pro-actions-menu-renderer\n */\nexport class ActionsMenuRenderer extends FoundationElement {\n init(params) {\n if (!params)\n return;\n this.params = params;\n }\n getGui() {\n return this;\n }\n refresh(params) {\n return false;\n }\n}\n__decorate([\n observable\n], ActionsMenuRenderer.prototype, \"params\", void 0);\n/**\n * A function that returns a Foundation Actions Menu for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-grid-pro-actions-menu-renderer\\>\n */\nexport const foundationGridProActionsMenuRenderer = ActionsMenuRenderer.compose({\n baseName: 'grid-pro-actions-menu-renderer',\n template: html `\n <foundation-actions-menu\n name=\"${(x) => x.params.headerName}\"\n :definition=${(x) => x.params}\n ></foundation-actions-menu>\n `,\n});\n/**\n * Helper function to get ColDef {@link https://www.ag-grid.com/javascript-data-grid/column-properties/} for Actions Menu Renderer.\n * Will take the parameter values for a base ColDef and merge them with the overrideDef (if specified).\n * @param actions - Array of `ActionMenuItem` to be displayed in the menu.\n * @param overrideDef - Optional override for the ColDef. Will override any of the default values. Default is an empty object.\n * @param customActionsOpenerName - Optional custom name for the button that opens the menu. Default is '⋮'.\n * @param isVertical - Optional flag to display the menu vertically. Default is false (displays the menu horizontally, follow the rowHeight).\n * @param buttonAppearance - Optional appearance for the button that opens the menu. Default is 'outline'.\n * @returns Merged ColDef (base ColDef created from the parameters + overrideDef) for Actions Menu Renderer.\n * @example\n * ```ts\n * public exampleActionsMenuDef: ColDef = getActionsMenuDef(\n * [\n * {\n * name: 'View',\n * callback: (rowData) => logger.debug('VIEWW!!!', rowData),\n * },\n * {\n * name: 'Delete',\n * callback: (rowData) => logger.debug('DELETE!!!', rowData),\n * },\n * ],\n * {\n * headerName: 'Instrument Actions',\n * width: 180,\n * },\n * '+',\n * true,\n * 'primary-gradient'\n * );\n * ```\n * @public\n */\nexport const getActionsMenuDef = (actions, overrideDef = {}, customActionsOpenerName = '⋮', isVertical = false, buttonAppearance) => {\n const actionsMenuDef = {\n cellRenderer: GridProRendererTypes.actionsMenu,\n cellRendererParams: {\n actions,\n buttonAppearance,\n isVertical,\n buttonText: customActionsOpenerName,\n },\n cellStyle: { border: 'none', overflow: 'visible' },\n field: `${convertToKebabCase(overrideDef.headerName) || 'actions-menu'}`,\n headerName: 'Actions',\n // valueGetter: (params: ValueGetterParams) => {\n // params.data.actions = actions;\n // params.data.buttonText = customActionsOpenerName;\n // return null;\n // },\n width: 150,\n };\n return Object.assign(Object.assign({}, actionsMenuDef), overrideDef);\n};\n","import { __decorate } from \"tslib\";\nimport { css, html, observable } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { EDITED_COLUMN_FIELD } from '../grid-pro.types';\nimport { logger } from '../utils';\n/**\n * The AG Boolean Renderer element.\n * @public\n * @tagname %%prefix%%-boolean-renderer\n */\nexport class BooleanRenderer extends FoundationElement {\n isDisabled(data) {\n var _a, _b;\n if (typeof ((_a = this.params) === null || _a === void 0 ? void 0 : _a.isDisabled) === 'function') {\n try {\n return this.params.isDisabled(data);\n }\n catch (error) {\n logger.error('Error executing grid action cell renderer isDisabled callback:', error);\n }\n }\n return !((_b = this.params) === null || _b === void 0 ? void 0 : _b.colDef.editable);\n }\n init(params) {\n if (!params)\n return;\n this.params = params;\n this.selected = params.value;\n }\n /** @internal */\n userInputHandler(e) {\n // Strictly prevent any event dispatch or value change if not editable\n if (!this.params.colDef ||\n (typeof this.params.colDef.editable === 'function'\n ? !('column' in this.params &&\n this.params.colDef.editable(this.params))\n : this.params.colDef.editable !== true)) {\n return;\n }\n if (e instanceof MouseEvent) {\n if (e.type !== 'click' || e.button !== 0)\n return;\n this.selected = !this.selected;\n }\n if (e instanceof KeyboardEvent) {\n if (e.type !== 'keydown' || (e.key !== ' ' && e.key !== 'Enter'))\n return;\n this.selected = !this.selected;\n }\n const editedCells = this.params.api.getEditingCells();\n const changingCurrentlyEditedCell = !!editedCells.find((cell) => cell.rowIndex === this.params.node.rowIndex &&\n cell.column.getInstanceId() === this.params.column.getInstanceId());\n if (!changingCurrentlyEditedCell) {\n // below section allows grid renderer to act as grid editor so users can edit data without requesting edit\n // heavily inspired by https://github.com/ag-grid/ag-grid/blob/latest/grid-community-modules/core/src/ts/rendering/cellRenderers/checkboxCellRenderer.ts#L104\n const { column, node, value } = this.params;\n const eventStarted = {\n type: 'cellEditingStarted',\n column: column,\n colDef: column === null || column === void 0 ? void 0 : column.getColDef(),\n data: node.data,\n node,\n rowIndex: node.rowIndex,\n rowPinned: node.rowPinned,\n value,\n };\n this.params.api.dispatchEvent(eventStarted);\n const valueChanged = this.params.node.setDataValue(this.params.column, this.selected, 'edit');\n if (this.params.onChange)\n this.params.onChange(node.data);\n const eventStopped = {\n type: 'cellEditingStopped',\n column: column,\n colDef: column === null || column === void 0 ? void 0 : column.getColDef(),\n data: node.data,\n node,\n rowIndex: node.rowIndex,\n rowPinned: node.rowPinned,\n value,\n oldValue: value,\n newValue: this.selected,\n valueChanged,\n };\n this.params.api.dispatchEvent(eventStopped);\n }\n }\n getGui() {\n return this;\n }\n destroy() { }\n refresh(params) {\n this.selected = params.value;\n return true;\n }\n getValue() {\n return this.selected;\n }\n isCancelBeforeStart() {\n return !!this.params.data[EDITED_COLUMN_FIELD];\n }\n /** @internal */\n getDataTestId() {\n var _a;\n if (!((_a = this.params) === null || _a === void 0 ? void 0 : _a.dataTestId))\n return undefined;\n if (typeof this.params.dataTestId === 'function')\n return this.params.dataTestId(this.params.node.data);\n return this.params.dataTestId;\n }\n}\n__decorate([\n observable\n], BooleanRenderer.prototype, \"params\", void 0);\n__decorate([\n observable\n], BooleanRenderer.prototype, \"selected\", void 0);\n/**\n * The AG Boolean Renderer Styles.\n * @public\n */\nexport const agBooleanRendererStyles = css `\n :host {\n align-center: center;\n display: flex;\n height: 100%;\n }\n`;\n/**\n * Get a Design System prefixed Checkbox template.\n * @param designSystem - The design system prefix to use. Defaults to 'foundation'.\n * @returns A Checkbox component template prefixed with the correct design system.\n * @public\n */\nexport const getAgBooleanRendererTemplate = (designSystem = 'foundation') => {\n const checkboxComponent = `${designSystem}-checkbox`;\n return html `\n <${checkboxComponent}\n @click=${(x, c) => x.userInputHandler(c.event)}\n @keydown=${(x, c) => x.userInputHandler(c.event)}\n :checked=${(x) => x.selected}\n ?disabled=${(x) => { var _a; return x.isDisabled((_a = x.params) === null || _a === void 0 ? void 0 : _a.data); }}\n data-test-id=\"${(x) => x.getDataTestId()}\"\n ></${checkboxComponent}>\n `;\n};\n/**\n * A function that returns a Foundation Boolean Renderer registration for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-boolean-renderer\\>\n */\nexport const foundationAgBooleanRenderer = BooleanRenderer.compose({\n baseName: 'boolean-renderer',\n styles: agBooleanRendererStyles,\n template: getAgBooleanRendererTemplate(),\n});\n","import { __decorate } from \"tslib\";\nimport { css, html, observable } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\n/**\n * The AG Editable Renderer element.\n * @public\n * @tagname %%prefix%%-editable-renderer\n */\nexport class EditableRenderer extends FoundationElement {\n init(params) {\n if (!params)\n return;\n this.valueFormatted = params.formatValue(params.value);\n }\n getGui() {\n return this;\n }\n refresh(params) {\n this.valueFormatted = params.formatValue(params.value);\n return true;\n }\n}\n__decorate([\n observable\n], EditableRenderer.prototype, \"valueFormatted\", void 0);\n/**\n * The AG Editable Renderer Styles.\n * @public\n */\nexport const agEditableRendererStyles = css `\n :host {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n`;\n/**\n * Get a Design System prefixed Checkbox template.\n * @param designSystem - The design system prefix to use. Defaults to 'foundation'.\n * @returns A Checkbox component template prefixed with the correct design system.\n * @public\n */\nexport const getAgEditableRendererTemplate = (designSystem = 'foundation') => {\n return html `\n <span>${(x) => x.valueFormatted}</span>\n <${designSystem}-progress-ring style=\"margin: 0; width: 20px; height: 20px\"></${designSystem}-progress-ring>\n `;\n};\n/**\n * A function that returns a Foundation Editable Renderer registration for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-editable-renderer\\>\n */\nexport const foundationAgEditableRenderer = EditableRenderer.compose({\n baseName: 'editable-renderer',\n styles: agEditableRendererStyles,\n template: getAgEditableRendererTemplate(),\n});\n","import { __decorate } from \"tslib\";\nimport { css, html, observable, when } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { classNames } from '@microsoft/fast-web-utilities';\n/**\n * The AG Icon Renderer Styles.\n * @public\n */\nexport const agIconRendererStyles = css `\n :host {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 100%;\n position: relative;\n }\n\n .icon-container {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 5px;\n }\n\n .icon-container.with-hover {\n padding: 5px;\n line-height: 1;\n }\n\n .icon-container.with-hover:hover {\n cursor: pointer;\n background-color: var(--neutral-stroke-hover);\n }\n\n .icon-container.disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n .secondary-icon {\n position: absolute;\n top: 50%;\n bottom: 0px;\n right: -5px;\n z-index: 2;\n line-height: 1;\n }\n`;\nfunction hasIconSrc(params) {\n return (!!params && typeof params.iconSrc === 'string' && params.iconSrc.length > 0);\n}\nfunction hasIconName(params) {\n return (!!params && typeof params.iconName === 'string' && params.iconName.length > 0);\n}\n/**\n * Get a Design System prefixed Icon template.\n * @param designSystem - The design system prefix to use. Defaults to 'foundation'.\n * @returns An Icon component template prefixed with the correct design system.\n * @public\n */\nexport const getIconRendererTemplate = (designSystem = 'rapid') => {\n const iconComponent = `${designSystem}-icon`;\n return html `\n <div\n class=\"icon-container ${(x) => { var _a, _b; return classNames(['with-hover', (_a = x.params) === null || _a === void 0 ? void 0 : _a.showHover], ['disabled', (_b = x.params) === null || _b === void 0 ? void 0 : _b.disabled]); }}\"\n @click=${(x, c) => {\n var _a, _b, _c;\n return !((_a = x.params) === null || _a === void 0 ? void 0 : _a.disabled) && ((_b = x.params) === null || _b === void 0 ? void 0 : _b.clickHandler)\n ? (_c = x.params) === null || _c === void 0 ? void 0 : _c.clickHandler(c.event, x.params.data)\n : null;\n }}\n >\n ${when((x) => hasIconSrc(x.params), html `\n <img\n class=\"icon-image\"\n src=\"${(x) => (hasIconSrc(x.params) ? x.params.iconSrc : '')}\"\n style=\"${(x) => {\n if (!hasIconSrc(x.params))\n return '';\n let styles = `height: ${x.params.iconHeight || '14px'}; width: auto;`;\n if (x.params.iconColor)\n styles += ` color: ${x.params.iconColor};`;\n return styles;\n }}\"\n />\n `)}\n ${when((x) => hasIconName(x.params), html `\n <${iconComponent}\n class=\"${(x) => {\n var _a;\n let classes = 'icon-element';\n if ((_a = x.params) === null || _a === void 0 ? void 0 : _a.showHover)\n classes += ' with-hover';\n return classes;\n }}\"\n name=\"${(x) => (hasIconName(x.params) ? x.params.iconName : '')}\"\n size=\"${(x) => (hasIconName(x.params) ? x.params.iconSize || 'md' : 'md')}\"\n style=\"${(x) => (x.params.iconColor ? `color: ${x.params.iconColor};` : '')}\"\n variant=\"${(x) => x.params.variant}\"\n ></${iconComponent}>\n `)}\n ${when((x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.secondaryIcon; }, html `\n <${iconComponent}\n class=\"secondary-icon\"\n name=\"${(x) => x.params.secondaryIcon}\"\n size=\"xs\"\n style=\"${(x) => (x.params.secondaryIconColor ? `color: ${x.params.secondaryIconColor};` : '')}\"\n ></${iconComponent}>\n `)}\n </div>\n `;\n};\n/**\n * Plain ag-Grid cell renderer for icons.\n * This renderer creates the FAST custom element using document.createElement.\n *\n * @public\n */\nexport class IconRenderer extends FoundationElement {\n // private element: HTMLElement;\n init(params) {\n this.params = params;\n }\n getGui() {\n return this;\n }\n refresh(params) {\n this.params = params;\n return true;\n }\n destroy() { }\n}\n__decorate([\n observable\n], IconRenderer.prototype, \"params\", void 0);\n/**\n * A function that returns a Foundation Icon Renderer registration for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-icon-renderer\\>\n */\nexport const foundationIconRenderer = IconRenderer.compose({\n baseName: 'icon-renderer',\n template: getIconRendererTemplate(),\n styles: agIconRendererStyles,\n});\n","import { __decorate } from \"tslib\";\nimport { css, html, observable, repeat } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { logger } from '../utils';\nimport { setValueWithAccessor } from './utils';\n/**\n * The AG Select Renderer element.\n * @public\n * @tagname %%prefix%%-select-renderer\n */\nexport class SelectRenderer extends FoundationElement {\n constructor() {\n super(...arguments);\n this.selectionChanged = (e) => {\n this.value = e.target.value;\n this.params.onSelect(e.target.value, this.params);\n };\n }\n init(params) {\n var _a;\n if (!params)\n return;\n this.params = params;\n this.value = setValueWithAccessor((_a = params.node) === null || _a === void 0 ? void 0 : _a.data, params.accessor) || undefined;\n }\n getGui() {\n return this;\n }\n destroy() { }\n refresh(params) {\n return true;\n }\n isDisabled(data) {\n var _a;\n if (typeof ((_a = this.params) === null || _a === void 0 ? void 0 : _a.isDisabled) === 'function') {\n try {\n return this.params.isDisabled(data);\n }\n catch (error) {\n logger.error('Error executing grid action cell renderer isDisabled callback:', error);\n }\n }\n return false;\n }\n}\n__decorate([\n observable\n], SelectRenderer.prototype, \"params\", void 0);\n__decorate([\n observable\n], SelectRenderer.prototype, \"value\", void 0);\n/**\n * The AG Select Renderer Styles.\n * @public\n */\nexport const agSelectRendererStyles = css `\n :host,\n .select-renderer,\n zero-option,\n ::part(listbox),\n ::part(control) {\n max-width: var(--select-renderer-max-width);\n min-width: 100%;\n }\n\n .select-renderer {\n --listbox-max-height: 4;\n --select-renderer-max-width: 100%;\n }\n`;\n/**\n * Get a Design System prefixed Select template.\n * @param designSystem - The design system prefix to use. Defaults to 'foundation'.\n * @returns A Select component template prefixed with the correct design system.\n * @public\n */\nexport const getSelectRendererTemplate = (designSystem = 'foundation') => {\n const selectComponent = `${designSystem}-select`;\n const optionComponent = `${designSystem}-option`;\n return html `\n <${selectComponent}\n class=\"select-renderer\"\n position=${(x) => (x.params.position ? x.params.position(x.params.node.data) : '')}\n ?disabled=${(x) => { var _a; return x.isDisabled((_a = x.params) === null || _a === void 0 ? void 0 : _a.data); }}\n @change=${(x, c) => x.selectionChanged(c.event)}\n :value=${(x) => x.value}\n >\n <${optionComponent}\n defaultSelected\n style=\"display: none;\"\n >\n ${(x) => x.params.defaultValue || 'Select option'}\n </${optionComponent}>\n ${repeat((x) => x.params.options(x.params.node.data), html `\n <${optionComponent}\n value=${(x) => x.name}\n ?disabled=${(x, c) => { var _a; return typeof x.isDisabled === 'function' ? x.isDisabled((_a = c.parent.params) === null || _a === void 0 ? void 0 : _a.data) : false; }}\n title=\"${(x) => (x.tooltip ? x.tooltip : null)}\"\n >${(x) => x.displayName}</${optionComponent}>\n `)}\n </${selectComponent}>\n `;\n};\n/**\n * A function that returns a Foundation Select Renderer registration for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-select-renderer\\>\n */\nexport const foundationAgSelectRenderer = SelectRenderer.compose({\n baseName: 'select-renderer', // TODO: others have 'grid-pro' in the name, why not this one?\n styles: agSelectRendererStyles,\n template: getSelectRendererTemplate(),\n});\n","import { __decorate } from \"tslib\";\nimport { css, html, observable } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\n/**\n * The Status Pill Renderer Styles.\n * @public\n */\nexport const agStatusPillRendererStyles = css `\n :host {\n width: 100%;\n display: flex;\n align-items: center;\n height: 100%;\n }\n`;\n/**\n * Get a Design System prefixed Status Pill template.\n * @param designSystem - The design system prefix to use. Defaults to 'rapid'.\n * @returns A Staus Pill component template prefixed with the correct design system.\n * @public\n */\nexport const getStatusPillRendererTemplate = (designSystem = 'rapid') => {\n return html `\n <${designSystem}-status-pill\n background-color=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.backgroundColor; }}\"\n icon-name=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.iconName; }}\"\n icon-src=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.iconSrc; }}\"\n icon-initial=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.iconInitial; }}\"\n icon-initial-background-color=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.iconInitialBackgroundColor; }}\"\n icon-size=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.iconSize; }}\"\n text-color=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.textColor; }}\"\n text=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.text; }}\"\n date-countdown-unit=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.dateCountdownUnit; }}\"\n date-countdown=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.dateCountdown; }}\"\n date-countdown-completed-message=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.dateCountdownCompletedMessage; }}\"\n ?hide-when-countdown-completed=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.hideWhenCountdownCompleted; }}\"\n date-countdown-visible-after=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.dateCountdownVisibleAfter; }}\"\n >\n </${designSystem}-status-pill>\n `;\n};\n/**\n * The AG Status Pill Renderer element.\n * @public\n * @tagname %%prefix%%-status-pill-renderer\n */\nexport class StatusPillRenderer extends FoundationElement {\n init(params) {\n this.params = params;\n }\n getGui() {\n return this;\n }\n refresh(params) {\n this.params = params;\n return true;\n }\n destroy() { }\n}\n__decorate([\n observable\n], StatusPillRenderer.prototype, \"params\", void 0);\n/**\n * A function that returns a Foundation Status Pill Renderer registration for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-status-pill-renderer\\>\n */\nexport const foundationStatusPillRenderer = StatusPillRenderer.compose({\n baseName: 'status-pill-renderer',\n template: getStatusPillRendererTemplate(),\n styles: agStatusPillRendererStyles,\n});\n","import { __decorate } from \"tslib\";\nimport { sync } from '@genesislcap/foundation-utils';\nimport { css, html, observable, ref } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { logger } from '../utils';\nimport { setValueWithAccessor } from './utils';\n/**\n * The AG Text Field Renderer element.\n * @public\n * @tagname %%prefix%%-grid-text-field-renderer\n */\nexport class AgTextFieldRenderer extends FoundationElement {\n constructor() {\n super(...arguments);\n // Text field value\n this.textValue = '';\n /**\n * On text change handler\n * @param e - CustomEvent\n */\n this.textChanged = (e) => {\n this.textValue = e.target.value;\n this.params.onChange(e.target.value, this.params);\n };\n }\n init(params) {\n var _a;\n if (!params)\n return;\n this.params = params;\n this.textValue =\n this.textValue === ''\n ? setValueWithAccessor((_a = params === null || params === void 0 ? void 0 : params.node) === null || _a === void 0 ? void 0 : _a.data, params.accessor)\n : this.textValue;\n // Intercept keyboard events on the text field element\n this.addEventListener('keydown', (event) => {\n // Check if the key pressed is an arrow key\n if (['ArrowLeft', 'ArrowRight'].includes(event.key)) {\n // Only stop propagation if cursor isn't at the boundaries\n const input = this.textField.control;\n const caretPos = input.selectionStart;\n if (event.key === 'ArrowLeft' && caretPos > 0) {\n event.stopPropagation();\n }\n else if (event.key === 'ArrowRight' && caretPos < input.value.length) {\n event.stopPropagation();\n }\n }\n });\n }\n getGui() {\n return this;\n }\n destroy() { }\n refresh(params) {\n return true;\n }\n isDisabled(data) {\n var _a;\n if (typeof ((_a = this.params) === null || _a === void 0 ? void 0 : _a.isDisabled) === 'function') {\n try {\n return this.params.isDisabled(data);\n }\n catch (error) {\n logger.error('Error executing grid action cell renderer isDisabled callback:', error);\n }\n }\n return false;\n }\n}\n__decorate([\n observable\n], AgTextFieldRenderer.prototype, \"textValue\", void 0);\n__decorate([\n observable\n], AgTextFieldRenderer.prototype, \"params\", void 0);\n/**\n * The AG Text Field Renderer Styles.\n * @public\n */\nexport const textFieldRendererStyles = css `\n :host {\n display: flex;\n width: 100%;\n height: 100%;\n align-items: center;\n }\n .text-renderer {\n width: 100%;\n }\n`;\n/**\n * Get a Design System prefixed Text Field template.\n * @param designSystem - The design system prefix to use. Defaults to 'foundation'.\n * @returns A Text Field component template prefixed with the correct design system.\n * @public\n */\nexport const getTextFieldRendererTemplate = (designSystem = 'foundation') => {\n const textComponent = `${designSystem}-text-field`;\n return html `\n <${textComponent}\n ${ref('textField')}\n type=\"text\"\n class=\"text-renderer\"\n prefix=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.prefix; }}\"\n suffix=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.suffix; }}\"\n ?hide-affix-from-screen-reader=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.hideAffixFromScreenReader; }}\"\n :maxlength=\"${(x) => x.params.maxLength}\"\n ?disabled=${(x) => { var _a; return x.isDisabled((_a = x.params) === null || _a === void 0 ? void 0 : _a.data); }}\n :value=\"${sync((x) => x.textValue)}\"\n @change=\"${(x, c) => x.textChanged(c.event)}\"\n ></${textComponent}>\n `;\n};\n/**\n * A function that returns a Foundation Text Field Renderer registration for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-grid-pro-text-field-renderer\\>\n */\nexport const foundationAgTextFieldRenderer = AgTextFieldRenderer.compose({\n baseName: 'grid-pro-text-renderer',\n styles: textFieldRendererStyles,\n template: getTextFieldRendererTemplate(),\n});\n","// TODO: DEPRECATED due the incorrect \"text\" name\nimport { AgTextFieldRenderer, getTextFieldRendererTemplate, textFieldRendererStyles, } from './text-field.renderer';\n/**\n * @public\n * @deprecated - Use AgTextFieldRenderer instead\n * @tagname %%prefix%%-grid-text-renderer\n */\nexport class AgTextRenderer extends AgTextFieldRenderer {\n}\n/**\n * @public\n * @deprecated - Use textFieldRendererStyles instead\n */\nexport const textRendererStyles = textFieldRendererStyles;\n/**\n * @public\n * @deprecated - Use getTextFieldRendererTemplate instead\n */\nexport const getTextRendererTemplate = getTextFieldRendererTemplate;\n/**\n * A function that returns a Foundation Text Renderer registration for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-grid-text-renderer\\>\n * @deprecated - Use foundationAgTextFieldRenderer instead\n */\nexport const foundationAgTextRenderer = AgTextRenderer.compose({\n baseName: 'grid-text-renderer',\n styles: textRendererStyles,\n template: getTextRendererTemplate(),\n});\n","export const setValueWithAccessor = (data, accessor) => {\n // if no '.', then it's not a deep value\n if (accessor.indexOf('.') < 0) {\n // data[field] = newValue;\n return data[accessor];\n }\n else {\n // otherwise it is a deep value, so need to dig for it\n const accessorPieces = accessor.split('.');\n let currentObject = data;\n while (accessorPieces.length > 0 && currentObject) {\n const fieldPiece = accessorPieces.shift();\n if (accessorPieces.length === 0) {\n return currentObject[fieldPiece];\n }\n else {\n currentObject = currentObject[fieldPiece];\n }\n }\n }\n};\n","import { __decorate } from \"tslib\";\nimport { customElement, observable } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { CellTemplate as template } from './cell.template';\n/**\n * The Grid Pro Cell element.\n * @remarks Used inside the Grid Pro Column element, to define a cell renderer from the template.\n * @public\n */\nlet GridProCell = class GridProCell extends FoundationElement {\n connectedCallback() {\n super.connectedCallback();\n const wrapperGridProColumn = this.parentElement;\n if (this.renderer) {\n wrapperGridProColumn.definition.cellRenderer = this.renderer;\n }\n if (this.rendererParams) {\n wrapperGridProColumn.definition.cellRendererParams = this.rendererParams;\n }\n }\n init(params) {\n this.rendererParams = params;\n }\n getGui() {\n if (typeof this.renderer !== 'string') {\n return this.renderer(this.rendererParams);\n }\n return this;\n }\n destroy() { }\n refresh(params) {\n return false;\n }\n slottedAgRendererChanged() { }\n};\n__decorate([\n observable\n], GridProCell.prototype, \"renderer\", void 0);\n__decorate([\n observable\n], GridProCell.prototype, \"rendererParams\", void 0);\n__decorate([\n observable\n], GridProCell.prototype, \"slottedRenderer\", void 0);\nGridProCell = __decorate([\n customElement({\n name: 'grid-pro-cell',\n template,\n })\n], GridProCell);\nexport { GridProCell };\n","import { html, slotted } from '@microsoft/fast-element';\n/**\n * The Grid Pro Cell Template.\n * @public\n */\nexport const CellTemplate = html `\n <template>\n <slot ${slotted('slottedRenderer')} @slotchange=\"${(x) => x.slottedAgRendererChanged()}\"></slot>\n </template>\n`;\n","import { __decorate } from \"tslib\";\nimport { LifecycleMixin } from '@genesislcap/foundation-utils';\nimport { customElement, observable } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { ColumnTemplate as template } from './column.template';\n/**\n * The Grid Pro Column element.\n * @remarks Used insde the Grid Pro element, to specify the column definitions (ColDef) for a given column.\n * @public\n */\nlet GridProColumn = class GridProColumn extends LifecycleMixin(FoundationElement) {\n constructor() {\n super(...arguments);\n this.definition = {};\n }\n slottedAgCellChanged() { }\n deepClone() {\n const copy = super.deepClone();\n copy.definition = {};\n if (this.definition) {\n Object.keys(this.definition).forEach((key) => {\n if (typeof this.definition[key] === 'function') {\n copy.definition[key] = this.definition[key].bind(copy);\n }\n else {\n copy.definition[key] = structuredClone(this.definition[key]);\n }\n });\n }\n return copy;\n }\n};\n__decorate([\n observable\n], GridProColumn.prototype, \"slottedAgCell\", void 0);\n__decorate([\n observable\n], GridProColumn.prototype, \"definition\", void 0);\nGridProColumn = __decorate([\n customElement({\n name: 'grid-pro-column',\n template,\n })\n], GridProColumn);\nexport { GridProColumn };\n","import { html, slotted } from '@microsoft/fast-element';\n/**\n * The Grid Pro Column Template.\n * @public\n */\nexport const ColumnTemplate = html `\n <template>\n <slot ${slotted('slottedAgCell')} @slotchange=\"${(x) => x.slottedAgCellChanged()}\"></slot>\n </template>\n`;\n","import { __awaiter, __decorate } from \"tslib\";\nimport { Connect, Datasource, DatasourceDefaults, DatasourceEventHandler, FieldTypeEnum, logger, normaliseCriteria, ResourceType, } from '@genesislcap/foundation-comms';\nimport { attr, nullableNumberConverter, observable, volatile } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { BehaviorSubject } from 'rxjs';\nimport { datasourceEventNames, } from '../grid-pro-genesis-datasource/datasource-events.types';\nimport { dateTimeValueFormatter, dateValueFormatter, getColumnType } from '../grid-pro.definitions';\nimport { GridProRendererTypes, GridProStatusBarTypes } from '../grid-pro.types';\nimport { baseDatasourceEventNames } from './base.types';\n/**\n * The delimiter for the criteria string.\n * @public\n */\nexport const criteriaDelimiter = ';';\n/**\n * The join for the criteria string.\n * @public\n */\nexport const criteriaJoin = ' && ';\n/**\n * The base datasource element for the grid-pro element.\n * @public\n */\nexport class GenesisGridDatasourceElement extends DatasourceEventHandler(FoundationElement) {\n constructor() {\n super(...arguments);\n /**\n * Request a snapshot from the server.\n * @remarks Defaults to false.\n */\n this.isSnapshot = false;\n /**\n * Maximum number of rows to be returned as part of the initial message, and as part of any additional MORE_ROWS messages.\n * @remarks This will not affect the number of rows displayed. Defaults to 250.\n */\n this.maxRows = DatasourceDefaults.MAX_ROWS_250;\n /**\n * Maximum number of rows to track as part of a client \"view\".\n * @remarks DATASERVER only. Defaults to 1000.\n */\n this.maxView = DatasourceDefaults.MAX_VIEW_1000;\n /**\n * If true, when the maximum number of rows defined in max-view is reached, the Data Server will start discarding the oldest rows (in terms of timestamp) and sending newer rows.\n * @remarks DATASERVER only. If false, the updates in the server will be sent to the front end regardless of order. Note that this will only update the UI; no changes will be performed in the database. Defaults to false.\n */\n this.movingView = false;\n /**\n * Option that changes the Data Server index iteration.\n * @remarks DATASERVER only. For example, if you are using the default index, the query will return rows in order from the newest database records to the oldest. Defaults to false.\n */\n this.reverse = false;\n // REQUEST_SERVER only\n /**\n * Disables polling if set to true (data updates for the grid will not be fetched automatically).\n * @remarks REQUEST_SERVER only. Defaults to false.\n */\n this.disablePolling = false;\n /**\n * The offset for pagination in REQUEST_SERVER scenarios.\n * @remarks REQUEST_SERVER only.\n */\n this.offset = DatasourceDefaults.DEFAULT_REQ_REP_OFFSET;\n /**\n * Custom polling frequency (in milliseconds) for a Request Server resource.\n * @remarks REQUEST_SERVER only. Note that this option only works with Request Server resources; if your resource is a Data Server query, your grid is updated in real time. Defaults to 5000ms.\n */\n this.pollingInterval = DatasourceDefaults.REQ_REP_POLLING_INTERVAL_MS;\n /**\n * Array of event names that will trigger a poll when received as commit responses.\n * @remarks REQUEST_SERVER only.\n */\n this.pollTriggerEvents = [];\n /**\n * Attribute to set whether the REQUEST object should be automatically set up.\n * @remarks Defaults to `true`. Only applies to REQUEST_SERVER (REQ-REP) resources.\n * @privateRemarks To avoid breaking changes for now, once V15 is out this will be removed and the default behavior will be the same as `false` here.\n */\n this.requestAutoSetup = true;\n /**\n * Attribute to set whether the datasource should restart when it reconnects.\n * @remarks Defaults to `true`.\n * @privateRemarks This attribute is shared across all datasources to ensure consistent behavior.\n */\n this.restartOnReconnection = true;\n this.criteriaFromFilters = new Map();\n this.update = new BehaviorSubject(new Map());\n }\n /**\n * Returns the `row-id` attribute, depending on the resource type.\n * @remarks Will favour the `row-id` attribute if set.\n * @internal\n */\n get rowId() {\n if (this.rowIdAttr)\n return this.rowIdAttr;\n if (this.isRequestServer)\n return DatasourceDefaults.REQUEST_SERVER_ROW_ID;\n return DatasourceDefaults.DATASERVER_ROW_ID;\n }\n /**\n * Returns whether the `row-id` attribute is the default one, depending on the resource type.\n * @internal\n */\n get hasDefaultRowId() {\n return (!this.rowIdAttr ||\n this.rowIdAttr === DatasourceDefaults.REQUEST_SERVER_ROW_ID ||\n this.rowIdAttr === DatasourceDefaults.DATASERVER_ROW_ID);\n }\n get defaultRowIdByResourceType() {\n return this.isRequestServer\n ? DatasourceDefaults.REQUEST_SERVER_ROW_ID\n : DatasourceDefaults.DATASERVER_ROW_ID;\n }\n datasourceOptions() {\n return {\n // Common between DATASERVER and REQUEST_SERVER (REQ-REP)\n criteria: this.buildCriteria(),\n isSnapshot: this.isSnapshot,\n maxRows: +this.maxRows,\n orderBy: this.orderBy,\n resourceName: this.resourceName,\n viewNumber: +this.viewNumber,\n // DATASERVER only\n fields: this.fields,\n maxView: +this.maxView,\n movingView: this.movingView,\n reverse: this.reverse,\n // REQUEST_SERVER only\n disablePolling: this.disablePolling,\n offset: this.offset,\n pollingInterval: this.pollingInterval,\n pollTriggerEvents: this.pollTriggerEvents,\n request: this.request,\n requestAutoSetup: this.requestAutoSetup,\n };\n }\n buildCriteria() {\n var _a;\n const initialCriteria = ((_a = this.criteria) === null || _a === void 0 ? void 0 : _a.split(criteriaDelimiter)) || [];\n const criteria = initialCriteria.concat(Array.from(this.criteriaFromFilters.values()));\n const normalisedCriteria = normaliseCriteria(criteria.join(criteriaJoin), criteriaDelimiter);\n return normalisedCriteria ? normalisedCriteria : undefined;\n }\n setFilter(fieldName, newFilter) {\n this.criteriaFromFilters.set(fieldName, newFilter);\n this.update.next(this.criteriaFromFilters);\n }\n removeFilter(fieldName) {\n this.criteriaFromFilters.delete(fieldName);\n this.update.next(this.criteriaFromFilters);\n }\n get isRequestServer() {\n var _a;\n return ((_a = this.datasource.status) === null || _a === void 0 ? void 0 : _a.type) === ResourceType.REQUEST_SERVER;\n }\n // protected isRequestServer = false;\n datasourceStatusChanged(prev, next) {\n // this.isRequestServer = next.type === ResourceType.REQUEST_SERVER;\n // TODO: this is not triggered after first init :(\n }\n /**\n * Handles errors and emits appropriate error events.\n * @param errors - The error message or array of error messages\n * @param type - The type of error that occurred\n * @public\n */\n handleErrors(errors, type = 'unknown') {\n let message;\n if (Array.isArray(errors)) {\n const stringArray = errors.map((item) => {\n if (typeof item === 'string') {\n return item;\n }\n else if (typeof item === 'object' && item !== null && 'TEXT' in item) {\n return item.TEXT;\n }\n else {\n return String(item);\n }\n });\n message = stringArray.join(', ');\n }\n else if (typeof errors === 'string') {\n message = errors;\n }\n else {\n message = String(errors);\n }\n if (message) {\n logger.error(`${type}: ${message}`);\n // Emit both the old event for backward compatibility and the new event for grid handling\n this.$emit(baseDatasourceEventNames.error, { message, type });\n this.$emit(datasourceEventNames.error, { message, type });\n }\n }\n /**\n * Clears error state and emits connected event.\n * @public\n */\n clearErrors() {\n this.$emit(baseDatasourceEventNames.connected);\n }\n /**\n * Override datasource initialization to handle errors properly.\n * @internal\n */\n initializeDatasource(options_1) {\n return __awaiter(this, arguments, void 0, function* (options, fetchMeta = true, startStream = true) {\n try {\n const success = yield this.datasource.init(options, fetchMeta, startStream);\n if (success) {\n this.clearErrors();\n return true;\n }\n else {\n // Determine error type based on the initialization failure\n const resourceName = options.resourceName;\n if (!resourceName) {\n this.handleErrors('Resource name is required', 'resource-validation');\n }\n else if (!this.connect.isConnected) {\n this.handleErrors(`Unable to connect to ${this.connect.host}`, 'connection');\n }\n else {\n // Check if it's a resource validation issue\n const isValidResource = yield this.connect.getMetadata(resourceName).catch(() => null);\n if (!isValidResource) {\n this.handleErrors(`Resource '${resourceName}' does not exist on ${this.connect.host}`, 'resource-validation');\n }\n else {\n this.handleErrors(`Failed to initialize datasource for ${resourceName}`, 'unknown');\n }\n }\n return false;\n }\n }\n catch (error) {\n let errorMessage = 'Unknown initialization error';\n let errorType = 'unknown';\n if (error instanceof Error) {\n errorMessage = error.message;\n // Categorize error types based on message content\n if (errorMessage.includes('connect') || errorMessage.includes('connection')) {\n errorType = 'connection';\n }\n else if (errorMessage.includes('resource') || errorMessage.includes('does not exist')) {\n errorType = 'resource-validation';\n }\n else if (errorMessage.includes('metadata')) {\n errorType = 'metadata';\n }\n else if (errorMessage.includes('stream')) {\n errorType = 'stream';\n }\n else if (errorMessage.includes('criteria')) {\n errorType = 'criteria';\n }\n }\n this.handleErrors(errorMessage, errorType);\n return false;\n }\n });\n }\n}\n__decorate([\n Connect\n], GenesisGridDatasourceElement.prototype, \"connect\", void 0);\n__decorate([\n Datasource\n], GenesisGridDatasourceElement.prototype, \"datasource\", void 0);\n__decorate([\n observable\n], GenesisGridDatasourceElement.prototype, \"deferredGridOptions\", void 0);\n__decorate([\n observable\n], GenesisGridDatasourceElement.prototype, \"deferredColumnStates\", void 0);\n__decorate([\n observable\n], GenesisGridDatasourceElement.prototype, \"rowDataMapper\", void 0);\n__decorate([\n attr\n], GenesisGridDatasourceElement.prototype, \"criteria\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'is-snapshot' })\n], GenesisGridDatasourceElement.prototype, \"isSnapshot\", void 0);\n__decorate([\n attr({ attribute: 'max-rows', converter: nullableNumberConverter })\n], GenesisGridDatasourceElement.prototype, \"maxRows\", void 0);\n__decorate([\n attr({ attribute: 'order-by' })\n], GenesisGridDatasourceElement.prototype, \"orderBy\", void 0);\n__decorate([\n attr({ attribute: 'resource-name' })\n], GenesisGridDatasourceElement.prototype, \"resourceName\", void 0);\n__decorate([\n attr({ attribute: 'view-number', converter: nullableNumberConverter })\n], GenesisGridDatasourceElement.prototype, \"viewNumber\", void 0);\n__decorate([\n attr\n], GenesisGridDatasourceElement.prototype, \"fields\", void 0);\n__decorate([\n attr({ attribute: 'max-view', converter: nullableNumberConverter })\n], GenesisGridDatasourceElement.prototype, \"maxView\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'moving-view' })\n], GenesisGridDatasourceElement.prototype, \"movingView\", void 0);\n__decorate([\n attr({ mode: 'boolean' })\n], GenesisGridDatasourceElement.prototype, \"reverse\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'disable-polling' })\n], GenesisGridDatasourceElement.prototype, \"disablePolling\", void 0);\n__decorate([\n attr({ converter: nullableNumberConverter })\n], GenesisGridDatasourceElement.prototype, \"offset\", void 0);\n__decorate([\n attr({ attribute: 'polling-interval' })\n], GenesisGridDatasourceElement.prototype, \"pollingInterval\", void 0);\n__decorate([\n observable\n], GenesisGridDatasourceElement.prototype, \"pollTriggerEvents\", void 0);\n__decorate([\n observable\n], GenesisGridDatasourceElement.prototype, \"request\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'request-auto-setup' })\n], GenesisGridDatasourceElement.prototype, \"requestAutoSetup\", void 0);\n__decorate([\n attr({ attribute: 'row-id' })\n], GenesisGridDatasourceElement.prototype, \"rowIdAttr\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'restart-on-reconnection' })\n], GenesisGridDatasourceElement.prototype, \"restartOnReconnection\", void 0);\n__decorate([\n volatile\n], GenesisGridDatasourceElement.prototype, \"isRequestServer\", null);\n/**\n * The operation type for the {@link GridProBaseDatasource.mapTransaction} method.\n * @internal\n */\nexport var OperationType;\n(function (OperationType) {\n OperationType[\"Add\"] = \"add\";\n OperationType[\"Update\"] = \"update\";\n OperationType[\"Remove\"] = \"remove\";\n})(OperationType || (OperationType = {}));\nexport class GridProBaseDatasource extends GenesisGridDatasourceElement {\n constructor() {\n super(...arguments);\n this.dataSubWasLoggedOff = false;\n this.keepColDefsOnClearRowData = false;\n this.rowData = new Map();\n this.transactionData = {\n add: [],\n remove: [],\n update: [],\n };\n this._isDisconnected = false;\n }\n subscribeToConnection() {\n var _a;\n if (this.connect && this.connect.isConnected$) {\n (_a = this.connectionSub) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n this.connectionSub = this.connect.isConnected$.subscribe((isConnected) => {\n if (isConnected && this.isDisconnected()) {\n this.setDisconnected(false);\n if (this.restartOnReconnection) {\n this.reloadResourceData();\n }\n }\n else if (!isConnected) {\n this.setDisconnected(true);\n }\n });\n }\n }\n unsubscribeFromConnection() {\n var _a;\n (_a = this.connectionSub) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n this.connectionSub = undefined;\n }\n generateColumnDefsFromMetadata(fieldsMetadata, getFilterParamsByFieldType, getFilterByFieldType) {\n return fieldsMetadata === null || fieldsMetadata === void 0 ? void 0 : fieldsMetadata.flatMap((field) => {\n const colDefBase = {};\n colDefBase.filterParams = getFilterParamsByFieldType(field);\n switch (field.type) {\n case FieldTypeEnum.STRING:\n colDefBase.cellEditor = GridProRendererTypes.stringEditor;\n break;\n case FieldTypeEnum.NUMBER:\n colDefBase.cellEditor = GridProRendererTypes.numberEditor;\n break;\n case FieldTypeEnum.BOOLEAN:\n colDefBase.cellRenderer = GridProRendererTypes.boolean;\n colDefBase.cellEditor = GridProRendererTypes.boolean;\n break;\n case FieldTypeEnum.DATE:\n colDefBase.valueFormatter = dateValueFormatter;\n colDefBase.cellEditor = GridProRendererTypes.dateEditor;\n break;\n case FieldTypeEnum.DATETIME:\n colDefBase.valueFormatter = dateTimeValueFormatter;\n colDefBase.cellEditor = GridProRendererTypes.dateEditor;\n colDefBase.cellEditorParams = {\n withTime: true,\n };\n break;\n case FieldTypeEnum.ENUM:\n if (field.enumOptions) {\n colDefBase.cellEditor = GridProRendererTypes.selectEditor;\n colDefBase.cellEditorParams = {\n values: field.enumOptions.map((option) => ({ value: option, label: option })),\n valueField: 'value',\n labelField: 'label',\n };\n }\n else {\n logger.warn(`No enumOptions found for field ${field.name}. Default cell editor applied.`);\n }\n break;\n default:\n break;\n }\n if (this.fields && !this.fields.includes(field.name)) {\n return [];\n }\n return Object.assign({ field: field.name, type: getColumnType(field.type), filter: getFilterByFieldType(field.type) }, colDefBase);\n });\n }\n handleStreamInserts(insertedRows, addIndex = 0) {\n // Create a local counter for the insertion index when we need to do sequential inserts\n let currentAddIndex = addIndex;\n insertedRows === null || insertedRows === void 0 ? void 0 : insertedRows.forEach((insertData) => {\n const rowId = insertData[this.rowId];\n if (!rowId) {\n logger.warn('Attempted to insert row without valid rowId', insertData);\n return;\n }\n const existsInInternalState = this.rowData.has(rowId);\n if (existsInInternalState || this.dataSubWasLoggedOff) {\n const existingData = this.rowData.get(rowId);\n const updatedRow = Object.assign(Object.assign({}, existingData), insertData);\n this.transactionData.update.push(updatedRow);\n this.rowData.set(rowId, updatedRow);\n }\n else {\n this.transactionData.add.push(insertData);\n // Use the current add index for this insertion\n this.transactionData.addIndex = currentAddIndex;\n this.rowData.set(rowId, insertData);\n // Only increment the index if we're not inserting at the beginning (addIndex > 0)\n // This ensures rows are inserted in sequence when appending to the end of the grid\n if (addIndex > 0) {\n // Increment for the next insertion\n currentAddIndex += 1;\n }\n }\n });\n }\n handleStreamDeletes(deletedRows) {\n deletedRows === null || deletedRows === void 0 ? void 0 : deletedRows.forEach((deleteData) => {\n if (this.hasDefaultRowId || this.isRequestServer) {\n this.transactionData.remove.push({ [this.rowId]: deleteData[this.rowId] });\n }\n else {\n const rowToBeDeleted = Object.values(Object.fromEntries(this.rowData)).find((obj) => obj[this.defaultRowIdByResourceType] === deleteData[this.defaultRowIdByResourceType]);\n this.transactionData.remove.push({ [this.rowId]: rowToBeDeleted[this.rowId] });\n }\n this.rowData.delete(deleteData[this.rowId]);\n });\n }\n handleStreamUpdates(updatedRows) {\n updatedRows === null || updatedRows === void 0 ? void 0 : updatedRows.forEach((updateData) => {\n let updatedRow;\n if (this.hasDefaultRowId || this.isRequestServer) {\n const rowToBeUpdated = this.rowData.get(updateData[this.rowId]);\n updatedRow = Object.assign(Object.assign({}, rowToBeUpdated), updateData);\n this.transactionData.update.push(updatedRow);\n }\n else {\n const rowToBeUpdated = Object.values(Object.fromEntries(this.rowData)).find((obj) => obj[this.defaultRowIdByResourceType] === updateData[this.defaultRowIdByResourceType]);\n updatedRow = Object.assign(Object.assign({}, rowToBeUpdated), updateData);\n this.transactionData.update.push(updatedRow);\n }\n this.rowData.set(updateData[this.rowId], updatedRow);\n });\n }\n applyAllTransactions() {\n var _a, _b, _c, _d, _e, _f;\n if (!((_a = this.transactionData.add) === null || _a === void 0 ? void 0 : _a.length) &&\n !((_b = this.transactionData.update) === null || _b === void 0 ? void 0 : _b.length) &&\n !((_c = this.transactionData.remove) === null || _c === void 0 ? void 0 : _c.length)) {\n this.$emit(datasourceEventNames.loadingFinished);\n if (this.rowData.size === 0) {\n this.$emit(datasourceEventNames.noDataAvailable);\n }\n return;\n }\n if (((_d = this.transactionData.add) === null || _d === void 0 ? void 0 : _d.length) > 0) {\n this.applyMappedTransaction({\n add: this.transactionData.add,\n addIndex: this.transactionData.addIndex,\n }, OperationType.Add);\n }\n if (((_e = this.transactionData.remove) === null || _e === void 0 ? void 0 : _e.length) > 0) {\n this.applyMappedTransaction({ remove: this.transactionData.remove }, OperationType.Remove);\n }\n if (((_f = this.transactionData.update) === null || _f === void 0 ? void 0 : _f.length) > 0) {\n this.applyMappedTransaction({ update: this.transactionData.update }, OperationType.Update);\n }\n }\n applyMappedTransaction(transaction, operation) {\n const mappedTransaction = this.mapTransaction(transaction, [operation]);\n this.$emit(datasourceEventNames.dataChanged, {\n changes: mappedTransaction,\n });\n }\n applyTransaction(transaction) {\n throw new Error('Method not implemented.');\n }\n /**\n * Maps the transaction data to the row data mapper function, if it exists.\n * @param transaction - The transaction data to be mapped.\n * @param operations - The operations to be mapped. Can be 'add', 'update' or 'remove'.\n * @returns The mapped transaction (if the row data mapper function exists), or the original transaction.\n */\n mapTransaction(transaction, operations = Object.values(OperationType)) {\n if (!this.rowDataMapper) {\n return transaction;\n }\n const mappedTransaction = {};\n if (operations.includes(OperationType.Add)) {\n mappedTransaction.add = this.rowDataMapper(transaction.add, this.rowData);\n }\n if (operations.includes(OperationType.Remove)) {\n mappedTransaction.remove = this.rowDataMapper(transaction.remove, this.rowData);\n }\n if (operations.includes(OperationType.Update)) {\n mappedTransaction.update = this.rowDataMapper(transaction.update, this.rowData);\n }\n if (transaction.addIndex !== undefined) {\n mappedTransaction.addIndex = transaction.addIndex;\n }\n return mappedTransaction;\n }\n loadMore() {\n throw new Error('loadMore() method must be implemented by subclass');\n }\n restart() {\n throw new Error('restart() method must be implemented by subclass');\n }\n reloadResourceData() {\n throw new Error('reloadResourceData() method must be implemented by subclass');\n }\n destroy() {\n throw new Error('destroy() method must be implemented by subclass');\n }\n /**\n * Sets the disconnected state and emits appropriate events.\n * @param disconnected - true to set, false to remove\n */\n setDisconnected(disconnected) {\n this._isDisconnected = disconnected;\n if (disconnected) {\n this.$emit(datasourceEventNames.error, {\n message: 'Datasource disconnected',\n type: 'connection',\n });\n }\n else {\n this.clearErrors();\n }\n }\n /**\n * Returns true if the datasource is disconnected.\n */\n isDisconnected() {\n return this._isDisconnected;\n }\n /**\n * Helper function to extract configuration for status bar actions\n * @internal\n */\n getStatusBarActionConfig(configValue) {\n if (typeof configValue === 'boolean') {\n return { enabled: configValue };\n }\n if (typeof configValue === 'object' && configValue !== null) {\n return {\n enabled: true,\n config: configValue,\n };\n }\n return { enabled: false };\n }\n /**\n * Gets datasource-specific status bar component configurations.\n * This method should be called by the grid to get status bar panels specific to this datasource.\n * @public\n */\n getDatasourceStatusBarPanels(isServerSide, statusBarConfig) {\n var _a, _b, _c, _d, _e, _f;\n const additionalPanels = [];\n // Extract loadMore configuration\n const loadMoreConfig = this.getStatusBarActionConfig(statusBarConfig === null || statusBarConfig === void 0 ? void 0 : statusBarConfig.loadMore);\n // Add load more button if enabled and not server-side\n if (loadMoreConfig.enabled && !isServerSide) {\n const loadMoreParams = {};\n // Use custom callback if provided, otherwise leave undefined for default behavior\n if ((_a = loadMoreConfig.config) === null || _a === void 0 ? void 0 : _a.onLoadMore) {\n loadMoreParams.onLoadMore = loadMoreConfig.config.onLoadMore;\n }\n else {\n loadMoreParams.onLoadMore = this.loadMore.bind(this);\n }\n // Add custom styling parameters\n if ((_b = loadMoreConfig.config) === null || _b === void 0 ? void 0 : _b.appearance) {\n loadMoreParams.appearance = loadMoreConfig.config.appearance;\n }\n // Add tooltip - use custom tooltip if provided, otherwise use default\n loadMoreParams.tooltip = ((_c = loadMoreConfig.config) === null || _c === void 0 ? void 0 : _c.tooltip) || 'Load More';\n additionalPanels.push({\n statusPanel: GridProStatusBarTypes.loadMore,\n statusPanelParams: loadMoreParams,\n align: this.pagination ? 'left' : 'right',\n });\n }\n // Extract reload configuration\n const reloadConfig = this.getStatusBarActionConfig(statusBarConfig === null || statusBarConfig === void 0 ? void 0 : statusBarConfig.reload);\n // Add reload button if enabled\n if (reloadConfig.enabled) {\n const reloadParams = {};\n // Use custom callback if provided, otherwise use default datasource reload\n if ((_d = reloadConfig.config) === null || _d === void 0 ? void 0 : _d.onReload) {\n reloadParams.onReload = reloadConfig.config.onReload;\n }\n else {\n reloadParams.onReload = this.reloadResourceData.bind(this);\n }\n // Add custom styling parameters\n if ((_e = reloadConfig.config) === null || _e === void 0 ? void 0 : _e.icon) {\n reloadParams.icon = reloadConfig.config.icon;\n }\n // Add tooltip - use custom tooltip if provided, otherwise use default\n reloadParams.tooltip = ((_f = reloadConfig.config) === null || _f === void 0 ? void 0 : _f.tooltip) || 'Reload';\n additionalPanels.push({\n statusPanel: GridProStatusBarTypes.reload,\n statusPanelParams: reloadParams,\n align: 'right',\n });\n }\n return additionalPanels;\n }\n}\n","/**\n * Base datasource error event names.\n * @public\n */\nexport const baseDatasourceEventNames = {\n error: 'base-datasource-error',\n connected: 'base-datasource-connected',\n};\n","import { __decorate } from \"tslib\";\nimport { customElement } from '@microsoft/fast-element';\nimport { GridProGenesisDatasource } from '../grid-pro-genesis-datasource';\n/**\n * The Genesis Datasource element, for client-side | CSRM-compatible data fetching and used exclusively by the GridPro element.\n * @remarks Only supports Client-Side Row Model.\n * @public\n */\nlet GridProClientSideDatasource = class GridProClientSideDatasource extends GridProGenesisDatasource {\n};\nGridProClientSideDatasource = __decorate([\n customElement({\n name: 'grid-pro-client-side-datasource',\n })\n], GridProClientSideDatasource);\nexport { GridProClientSideDatasource };\n","import { css, html, when, repeat } from '@microsoft/fast-element';\nimport { extractErrorMessage } from '../utils';\nexport const errorHandlerDialogStyles = css `\n .overlay {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n background-color: var(--datasource-error-background-color, var(--neutral-layer-4));\n opacity: var(--datasource-error-background-opacity, 0.5);\n z-index: 1000;\n pointer-events: auto;\n border-radius: 2px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n .dialog-container {\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n z-index: 1001;\n max-width: 90vw;\n max-height: 90vh;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n opacity: 1 !important;\n filter: none !important;\n box-sizing: border-box;\n }\n .grid-datasource-error-dialog {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n margin: 0 auto;\n max-width: 600px;\n width: 100%;\n box-sizing: border-box;\n background: var(--dialog-background, #2d2533);\n box-shadow: 0 4px 32px 0 rgba(0, 0, 0, 0.45);\n overflow: visible;\n min-height: 120px;\n }\n\n .grid-datasource-error-dialog div {\n width: 600px;\n }\n\n .grid-datasource-error-dialog [slot='top'] {\n margin-bottom: 0;\n }\n\n .grid-datasource-error-dialog [slot='bottom'] {\n display: flex;\n justify-content: flex-end;\n width: 100%;\n }\n\n .error-details {\n max-height: 120px;\n overflow: auto;\n width: 100%;\n margin-top: 8px;\n }\n`;\nexport function getErrorHandlerDialogTemplate(prefix, gridErrorItems) {\n const dialogTag = `${prefix}-dialog`;\n const buttonTag = `${prefix}-button`;\n return html `\n ${when(() => gridErrorItems && gridErrorItems.length > 0, html `\n <div class=\"overlay\"></div>\n <div class=\"dialog-container\">\n <${dialogTag}\n class=\"grid-datasource-error-dialog\"\n type=\"error\"\n show-close-icon=\"false\"\n open\n >\n <h2 slot=\"top\" class=\"title\">Grid unavailable</h2>\n <div>\n <p>\n This may be due to a network, server, or configuration issue.\n </p>\n <details class=\"error-details\">\n <summary>Show details</summary>\n <ul>\n ${repeat(() => gridErrorItems, html `\n <li>\n ${(x) => extractErrorMessage(x.detail) || 'Unknown error occurred'}\n </li>\n `)}\n </ul>\n </details>\n </div>\n <div slot=\"bottom\">\n <${buttonTag} appearance=\"lightweight\" @click=${(x) => {\n var _a;\n x.hideDatasourceError();\n (_a = x.gridProDatasource) === null || _a === void 0 ? void 0 : _a.restart();\n }}>\n Reload\n </${buttonTag}>\n </div>\n </${dialogTag}>\n </div>\n `)}\n `;\n}\n","import { FieldTypeEnum } from '@genesislcap/foundation-comms';\nimport { getEnumFilterParams } from '../grid-pro.definitions';\n/**\n * Returns a filter type based on the Grid Pro field/column type.\n * @param type - The type of the field/column\n * @returns The ag-grid filter type\n */\nexport function getFilterByFieldType(type) {\n switch (type === null || type === void 0 ? void 0 : type.toLowerCase()) {\n case 'int':\n case 'long':\n case 'double':\n case 'bigdecimal':\n case 'number':\n return 'agNumberColumnFilter';\n case 'date':\n case 'datetime':\n return 'agDateColumnFilter';\n case 'enum':\n return 'agSetColumnFilter';\n default:\n return 'agTextColumnFilter';\n }\n}\n/**\n * Returns the filter params based on the Grid Pro field/column type.\n * @param field - The field metadata\n * @returns the filter params for the specified field type\n * @remarks Currently only returns a default filter params object, for all field types\n * @beta\n */\nexport function getServerSideFilterParamsByFieldType(field) {\n switch (field.type) {\n case FieldTypeEnum.BOOLEAN: {\n return {\n buttons: ['reset', 'apply'],\n closeOnApply: true,\n closeOnClear: true,\n maxNumConditions: 1,\n filterOptions: [\n 'contains',\n {\n displayKey: 'true',\n displayName: 'True',\n predicate: (_, cellValue) => cellValue === 'true' || cellValue === true,\n numberOfInputs: 0,\n },\n {\n displayKey: 'false',\n displayName: 'False',\n predicate: (_, cellValue) => cellValue === 'false' || cellValue === false,\n numberOfInputs: 0,\n },\n {\n displayKey: 'true-false',\n displayName: 'True/False',\n predicate: (_, cellValue) => cellValue === 'true' ||\n cellValue === true ||\n cellValue === 'false' ||\n cellValue === false,\n numberOfInputs: 0,\n },\n ],\n };\n }\n case FieldTypeEnum.ENUM: {\n return getEnumFilterParams(field, getFilterByFieldType(field.type));\n }\n case FieldTypeEnum.DATE:\n case FieldTypeEnum.DATETIME: {\n return {\n comparator: (filterLocalDateAtMidnight, cellValue) => {\n if (!cellValue)\n return -1;\n const cellValueTime = new Date(cellValue).setHours(0, 0, 0, 0);\n const filterValueTime = filterLocalDateAtMidnight.getTime();\n if (cellValueTime === filterValueTime) {\n return 0;\n }\n if (cellValueTime < filterValueTime) {\n return -1;\n }\n if (cellValueTime > filterValueTime) {\n return 1;\n }\n },\n buttons: ['reset', 'apply'],\n closeOnApply: true,\n closeOnClear: true,\n maxNumConditions: 1,\n browserDatePicker: true,\n filterOptions: [\n 'equals',\n 'lessThan',\n 'greaterThan',\n 'inRange',\n {\n displayKey: 'isToday',\n displayName: 'Is today',\n numberOfInputs: 0,\n predicate: () => true,\n },\n 'blank',\n 'notBlank',\n ],\n };\n }\n case FieldTypeEnum.NUMBER: {\n return {\n buttons: ['reset', 'apply'],\n closeOnApply: true,\n closeOnClear: true,\n maxNumConditions: 1,\n filterOptions: [\n 'equals',\n 'notEqual',\n 'greaterThan',\n 'greaterThanOrEqual',\n 'lessThan',\n 'lessThanOrEqual',\n 'inRange',\n 'blank',\n 'notBlank',\n ],\n };\n }\n default: {\n return {\n buttons: ['reset', 'apply'],\n closeOnApply: true,\n closeOnClear: true,\n maxNumConditions: 1,\n filterOptions: [\n 'contains',\n 'equals',\n 'notEqual',\n {\n displayKey: 'wordStartsWith',\n displayName: 'Word starts with',\n numberOfInputs: 1,\n predicate: () => true,\n },\n 'blank',\n 'notBlank',\n ],\n };\n }\n }\n}\n","import { __awaiter, __decorate } from \"tslib\";\nimport { Auth, Connect, logger, } from '@genesislcap/foundation-comms';\nimport { UUID } from '@genesislcap/foundation-utils';\n/**\n * Base class for server-side resource datasources used in Grid Pro SSRM implementations.\n * Provides common logic for filtering, sorting, and pagination.\n *\n * @beta\n */\nexport class BaseServerSideDatasource {\n constructor(options) {\n var _a;\n this.rowData = new Map();\n /**\n * The number of rows in the grid. THIS DO NOT CONSIDER CRITERIA_MATCH scenarios.\n * @internal\n */\n this.serverRowsCount = 0;\n /**\n * The number of rows in the grid. THIS IS A LOCAL COUNT CONSIDERING CONSIDER CRITERIA_MATCH scenarios.\n * @internal\n */\n this.clientRowsCount = 0;\n this.moreRows = false;\n this.calculatedRowsCount = 0;\n this.currentSequenceId = null;\n this.reloadResourceDataFunc = options.reloadResourceDataFunc;\n this.errorHandlerFunc = options.errorHandlerFunc;\n this.resourceName = options.resourceName;\n this.resourceParams = options.resourceParams;\n this.originalCriteriaMatch = this.getResourceParam('CRITERIA_MATCH');\n this.resourceIndexes = options.resourceIndexes;\n this.resourceColDefs = options.resourceColDefs;\n this.maxRows = options.maxRows;\n this.maxView = options.maxView;\n this.rowId = options.rowId;\n this.pagination = options.pagination;\n this.zeroBasedViewNumber = options.zeroBasedViewNumber;\n this.pagingMode = options.pagingMode;\n this.criteriaOnlyRequest = (_a = options.criteriaOnlyRequest) !== null && _a !== void 0 ? _a : false;\n }\n /**\n * Gets a resource parameter, handling both REQUEST_SERVER (DETAILS structure) and DATASERVER (flat structure)\n * @param key - The parameter key to retrieve\n * @returns The parameter value, or undefined if not found\n * @internal\n */\n getResourceParam(key) {\n var _a, _b;\n // Check if this is a REQUEST_SERVER structure with DETAILS\n if (((_a = this.resourceParams) === null || _a === void 0 ? void 0 : _a.DETAILS) && typeof this.resourceParams.DETAILS === 'object') {\n return this.resourceParams.DETAILS[key];\n }\n // Otherwise, it's a DATASERVER flat structure\n return (_b = this.resourceParams) === null || _b === void 0 ? void 0 : _b[key];\n }\n /**\n * Sets a resource parameter, handling both REQUEST_SERVER (DETAILS structure) and DATASERVER (flat structure)\n * @param key - The parameter key to set\n * @param value - The value to set\n * @internal\n */\n setResourceParam(key, value) {\n var _a;\n // Check if this is a REQUEST_SERVER structure with DETAILS\n if (((_a = this.resourceParams) === null || _a === void 0 ? void 0 : _a.DETAILS) && typeof this.resourceParams.DETAILS === 'object') {\n this.resourceParams.DETAILS[key] = value;\n }\n else {\n // Otherwise, it's a DATASERVER flat structure\n this.resourceParams[key] = value;\n }\n }\n getRows(params) {\n throw new Error('Method not implemented.');\n }\n /**\n * Handles filtering setup for server-side datasources.\n * Common logic used by both dataserver and req-rep implementations.\n */\n setupFiltering(params) {\n return __awaiter(this, void 0, void 0, function* () {\n const filterModelBeingApplied = params.request.filterModel;\n const filtersAreBeingApplied = Object.keys(filterModelBeingApplied).length > 0;\n const filtersAreGettingCleaned = Object.keys(filterModelBeingApplied).length === 0;\n const filterModelBeingAppliedDiffersFromCurrent = JSON.stringify(filterModelBeingApplied) !== JSON.stringify(this.currentFilterModel);\n if (filterModelBeingAppliedDiffersFromCurrent || filtersAreBeingApplied) {\n if (filtersAreGettingCleaned && this.currentFilterModel) {\n this.currentFilterModel = null;\n this.setResourceParam('CRITERIA_MATCH', this.originalCriteriaMatch);\n yield this.refreshDatasource(params);\n return;\n }\n else if (filterModelBeingAppliedDiffersFromCurrent && filtersAreBeingApplied) {\n this.currentFilterModel = filterModelBeingApplied;\n this.setResourceParam('CRITERIA_MATCH', this.buildCriteriaMatchFromFilters());\n yield this.refreshDatasource(params);\n return;\n }\n }\n });\n }\n /**\n * Legacy method that combines filtering and sorting.\n * Kept for backward compatibility. New implementations should use setupFiltering and setupSorting directly.\n * @deprecated Use setupFiltering() and setupSorting() separately instead\n */\n setupFilteringAndSorting(params) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.setupFiltering(params);\n yield this.setupSorting(params);\n });\n }\n destroy() {\n this.rowData = new Map();\n this.clientRowsCount = 0;\n this.calculatedRowsCount = 0;\n this.serverRowsCount = 0;\n this.currentSequenceId = 0;\n this.moreRows = false;\n this.sourceRef = undefined;\n this.lastSuccessRowData = undefined;\n }\n refreshDatasource(params) {\n return __awaiter(this, void 0, void 0, function* () {\n this.destroy();\n this.updateResourceParams(params);\n yield this.reloadResourceDataFunc({\n criteria: this.getResourceParam('CRITERIA_MATCH'),\n orderBy: this.getResourceParam('ORDER_BY'),\n reverse: this.getResourceParam('REVERSE'),\n });\n });\n }\n updateResourceParams(params) {\n if (params.criteria !== undefined) {\n this.originalCriteriaMatch = params.criteria;\n this.setResourceParam('CRITERIA_MATCH', this.buildCriteriaMatchFromFilters());\n }\n if (params.orderBy !== undefined) {\n this.setResourceParam('ORDER_BY', params.orderBy);\n }\n if (params.reverse !== undefined) {\n this.setResourceParam('REVERSE', params.reverse);\n }\n }\n getOrderByAndToBeSortedColIds(map, searchValue) {\n for (const [key, value] of map.entries()) {\n const searchIndex = value.findIndex((x) => x === searchValue);\n if (searchIndex !== -1) {\n const copy = [...value];\n const toBeSorted = copy.splice(searchIndex, 1);\n return { orderBy: key, toBeSorted };\n }\n }\n }\n buildCriteriaMatchFromFilters() {\n this.setResourceParam('CRITERIA_MATCH', this.originalCriteriaMatch);\n let criteriaMatch = this.getResourceParam('CRITERIA_MATCH');\n if (criteriaMatch && typeof criteriaMatch === 'string') {\n criteriaMatch = criteriaMatch.split(';');\n this.setResourceParam('CRITERIA_MATCH', criteriaMatch);\n }\n if (!criteriaMatch) {\n criteriaMatch = [];\n this.setResourceParam('CRITERIA_MATCH', criteriaMatch);\n }\n const criteria = criteriaMatch.concat(this.criteriaFromFilters());\n return criteria.join(' && ');\n }\n criteriaFromFilters() {\n const filters = [];\n this.getFiltersByType('text').forEach((k) => {\n if (!this.currentFilterModel[k].filter &&\n (this.currentFilterModel[k].type === 'false' || this.currentFilterModel[k].type === 'true')) {\n filters.push(`${k} == ${this.currentFilterModel[k].type}`);\n }\n else {\n switch (this.currentFilterModel[k].type) {\n case 'blank':\n filters.push(`(${k} == '' || ${k} == null)`);\n break;\n case 'contains':\n filters.push(`Expr.containsIgnoreCase(${k}, '${this.currentFilterModel[k].filter}')`);\n break;\n case 'equals':\n filters.push(`${k} == '${this.currentFilterModel[k].filter}'`);\n break;\n case 'notBlank':\n filters.push(`(${k} != '' && ${k} != null)`);\n break;\n case 'notEqual':\n filters.push(`${k} != '${this.currentFilterModel[k].filter}'`);\n break;\n case 'wordStartsWith':\n filters.push(`Expr.containsWordsStartingWithIgnoreCase(${k}, '${this.currentFilterModel[k].filter}')`);\n break;\n }\n }\n });\n // TODO: Handle multi filters if we decide we want to use them in SSRM\n // Handle set filters (typically used for enum fields with ag-set-column-filter)\n this.getFiltersByType('set').forEach((k) => {\n var _a, _b, _c;\n const model = (_a = this.currentFilterModel) === null || _a === void 0 ? void 0 : _a[k];\n const selectedValues = ((_b = model === null || model === void 0 ? void 0 : model.values) !== null && _b !== void 0 ? _b : []);\n if (!selectedValues || selectedValues.length === 0) {\n // Nothing selected means no additional criteria\n return;\n }\n // Try to detect \"all values selected\" using VALID_VALUES from metadata.\n // In that case we don't want to send any criteria, as it would be equivalent\n // to no filter at all.\n const colMeta = (_c = this.resourceColDefs) === null || _c === void 0 ? void 0 : _c.find((o) => o.NAME === k);\n let allValues;\n if (colMeta === null || colMeta === void 0 ? void 0 : colMeta.VALID_VALUES) {\n try {\n allValues = Array.isArray(colMeta.VALID_VALUES)\n ? colMeta.VALID_VALUES\n : colMeta.VALID_VALUES.split('|');\n }\n catch (_d) {\n allValues = undefined;\n }\n }\n if (allValues &&\n allValues.length === selectedValues.length &&\n allValues.every((v) => selectedValues.includes(v))) {\n // All enum options are selected – skip adding criteria for this column\n return;\n }\n const orConditions = selectedValues.map((val) => {\n const safeVal = String(val).replace(/'/g, \"\\\\'\");\n return `${k} == '${safeVal}'`;\n });\n if (orConditions.length > 0) {\n filters.push(`(${orConditions.join(' || ')})`);\n }\n });\n this.getFiltersByType('number').forEach((k) => {\n const value = this.currentFilterModel[k].filter;\n const valueTwo = this.currentFilterModel[k].filterTo;\n switch (this.currentFilterModel[k].type) {\n case 'equals':\n !isNaN(value) && filters.push(`${k} == ${value}`);\n break;\n case 'notEqual':\n !isNaN(value) && filters.push(`${k} != ${value}`);\n break;\n case 'greaterThan':\n !isNaN(value) && filters.push(`${k} > ${value}`);\n break;\n case 'greaterThanOrEqual':\n !isNaN(value) && filters.push(`${k} >= ${value}`);\n break;\n case 'lessThan':\n !isNaN(value) && filters.push(`${k} < ${value}`);\n break;\n case 'lessThanOrEqual':\n !isNaN(value) && filters.push(`${k} <= ${value}`);\n break;\n case 'inRange':\n !isNaN(value) &&\n !isNaN(valueTwo) &&\n filters.push(`${k} >= ${value} && ${k} <= ${valueTwo}`);\n break;\n case 'blank':\n filters.push(`${k} == 0`);\n break;\n case 'notBlank':\n filters.push(`${k} != 0`);\n break;\n }\n });\n this.getFiltersByType('date').forEach((k) => {\n var _a, _b;\n const dateFrom = (_a = this.currentFilterModel[k].dateFrom) === null || _a === void 0 ? void 0 : _a.replace(/-/g, '').replace('T', '-').split(' ')[0];\n const dateTo = (_b = this.currentFilterModel[k].dateTo) === null || _b === void 0 ? void 0 : _b.replace(/-/g, '').replace('T', '-').split(' ')[0];\n switch (this.currentFilterModel[k].type) {\n case 'equals':\n filters.push(`Expr.dateIsEqual(${k}, '${dateFrom}')`);\n break;\n case 'lessThan':\n filters.push(`Expr.dateIsBefore(${k}, '${dateFrom}')`);\n break;\n case 'greaterThan':\n filters.push(`Expr.dateIsAfter(${k}, '${dateFrom}')`);\n break;\n case 'inRange':\n filters.push(`Expr.dateIsAfter(${k}, '${dateFrom}') && Expr.dateIsBefore(${k}, '${dateTo}')`);\n break;\n case 'isToday':\n const now = new Date();\n const year = now.getFullYear();\n const month = (now.getMonth() + 1).toString().padStart(2, '0');\n const day = now.getDate().toString().padStart(2, '0');\n const todayStr = `${year}-${month}-${day} 00:00:00`;\n filters.push(`Expr.dateIsEqual(${k}, '${todayStr}')`);\n break;\n case 'blank':\n filters.push(`${k} == null`);\n break;\n case 'notBlank':\n filters.push(`${k} != null`);\n break;\n }\n });\n return filters;\n }\n getFiltersByType(filterType) {\n var _a;\n return Object.keys((_a = this.currentFilterModel) !== null && _a !== void 0 ? _a : {})\n .filter((k) => this.resourceColDefs.findIndex((o) => o.NAME === k) !== -1)\n .filter((k) => this.currentFilterModel[k].filterType === filterType);\n }\n getPageNumber(start, recordsPerPage, totalRecords, zeroBasedViewNumber = true) {\n if (totalRecords !== undefined && start > totalRecords) {\n start = Math.floor((totalRecords - 1) / recordsPerPage) * recordsPerPage + 1;\n }\n const currentPageIndex = Math.ceil(start / recordsPerPage);\n return zeroBasedViewNumber ? currentPageIndex : currentPageIndex + 1;\n }\n getCorrectRowCount(params) {\n const currentLastRowNumber = params.request.endRow;\n this.calculatedRowsCount = this.clientRowsCount || currentLastRowNumber;\n const defaultCount = Math.min(this.serverRowsCount, this.maxView);\n let rowCount;\n const criteriaMatch = this.getResourceParam('CRITERIA_MATCH');\n if (this.pagination) {\n rowCount = !criteriaMatch ? Math.min(this.serverRowsCount, this.maxView) : undefined;\n if (criteriaMatch) {\n rowCount = defaultCount;\n }\n return rowCount;\n }\n if (currentLastRowNumber === this.serverRowsCount) {\n rowCount = this.serverRowsCount;\n }\n else if (currentLastRowNumber > this.maxView ||\n currentLastRowNumber > this.calculatedRowsCount) {\n rowCount = Math.min(defaultCount, this.calculatedRowsCount);\n }\n else if (!this.moreRows && this.serverRowsCount > this.calculatedRowsCount) {\n rowCount = this.calculatedRowsCount;\n }\n return rowCount;\n }\n get isNotFirstViewNumber() {\n return this.zeroBasedViewNumber ? this.currentSequenceId > 0 : this.currentSequenceId > 1;\n }\n /**\n * Determines the effective paging mode based on criteriaOnlyRequest availability and user settings\n */\n getEffectivePagingMode() {\n // If user explicitly set a paging mode\n if (this.pagingMode) {\n // If criteriaOnlyRequest is not available but user wants offsetBased, warn and use viewBased\n if (this.pagingMode === 'offsetBased' && !this.criteriaOnlyRequest) {\n logger.warn('offsetBased paging mode requires criteriaOnlyRequest support. Falling back to viewBased mode.');\n return 'viewBased';\n }\n return this.pagingMode;\n }\n // Auto-determine based on criteriaOnlyRequest availability\n return this.criteriaOnlyRequest ? 'offsetBased' : 'viewBased';\n }\n}\n__decorate([\n Auth\n], BaseServerSideDatasource.prototype, \"auth\", void 0);\n__decorate([\n Connect\n], BaseServerSideDatasource.prototype, \"connect\", void 0);\n__decorate([\n UUID\n], BaseServerSideDatasource.prototype, \"uuid\", void 0);\n","import { __awaiter } from \"tslib\";\nimport { MessageType, dataServerResultFilter, logger, } from '@genesislcap/foundation-comms';\nimport { DOM } from '@microsoft/fast-element';\nimport { getAvailableIndexes, getAvailableIndexFields } from '../utils';\nimport { BaseServerSideDatasource } from './server-side.resource-base';\n/**\n * The DATASERVER IServerSideDatasource implementation, used for SSRM (Server-Side Row Model) in the grid.\n * @beta\n */\nexport class DataserverServerSideDatasource extends BaseServerSideDatasource {\n constructor(options) {\n super(options);\n this.createDataserverStreamFunc = options.createDataserverStreamFunc;\n }\n refreshDatasource(params) {\n const _super = Object.create(null, {\n refreshDatasource: { get: () => super.refreshDatasource }\n });\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n (_a = this.dataserverStreamSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n this.dataserverStreamSubscription = undefined;\n yield _super.refreshDatasource.call(this, params);\n });\n }\n getRows(params) {\n return __awaiter(this, void 0, void 0, function* () {\n // Use separated filtering and sorting setup\n yield this.setupFiltering(params);\n yield this.setupSorting(params);\n if (this.pagination && !this.isNewPageSize && this.currentSequenceId > 0) {\n params.success(this.lastSuccessRowData);\n return;\n }\n if (!this.dataserverStream) {\n this.dataserverStream = yield this.createDataserverStreamFunc(this.resourceParams);\n }\n if (this.currentSequenceId >= 1 &&\n (this.moreRows ||\n params.request.startRow >= Number(this.maxRows) ||\n params.request.startRow === 0)) {\n if (this.pagination) {\n this.resourceParams.VIEW_NUMBER = this.getPageNumber(params.request.startRow, this.maxRows, this.maxView, this.zeroBasedViewNumber);\n // if (this.resourceParams.VIEW_NUMBER === 1) {\n // await this.refreshDatasource(params);\n // return;\n // }\n }\n this.connect.getMoreRows(this.sourceRef, this.resourceParams.VIEW_NUMBER);\n }\n let applyResult = true;\n this.dataserverStreamSubscription = this.dataserverStream.subscribe((dataserverResult) => {\n if (applyResult) {\n DOM.queueUpdate(() => __awaiter(this, void 0, void 0, function* () {\n // TODO: this is a bit of hack, due GSF not returning a different ROWS_COUNT when there is a CRITERIA_MATCH\n if (this.resourceParams.CRITERIA_MATCH && this.pagination) {\n const updatedInfo = yield this.connect.snapshot(this.resourceName, {\n MAX_ROWS: this.maxView,\n MAX_VIEW: this.maxView,\n CRITERIA_MATCH: this.resourceParams.CRITERIA_MATCH,\n });\n if (!updatedInfo.ROW && !updatedInfo.ROWS_COUNT) {\n logger.warn('No data returned when criteria is applied.');\n this.serverRowsCount = 0;\n this.clientRowsCount = 0;\n }\n else {\n this.serverRowsCount = this.resourceParams.CRITERIA_MATCH\n ? updatedInfo.ROW.length\n : updatedInfo.ROWS_COUNT;\n }\n }\n this.applyServerSideData(params, dataserverResult);\n applyResult = false;\n }));\n }\n });\n });\n }\n applyServerSideData(params, result) {\n var _a;\n const messageType = result.MESSAGE_TYPE;\n if (messageType &&\n (messageType === MessageType.LOGOFF_ACK || messageType === MessageType.MSG_NACK)) {\n // Trigger error dialog for connection/authentication errors\n if (this.errorHandlerFunc) {\n const errorMessage = messageType === MessageType.LOGOFF_ACK\n ? `Connection lost to ${this.resourceName}`\n : `Authentication failed for ${this.resourceName}`;\n this.errorHandlerFunc(errorMessage, 'connection');\n }\n params.fail();\n return;\n }\n this.moreRows = result.MORE_ROWS;\n if (result.ROW) {\n const nextMessage = dataServerResultFilter(result);\n this.handleCurrentStreamLoad(nextMessage);\n }\n else {\n this.rowData = new Map();\n const successRowData = { rowData: [] };\n successRowData.rowCount = 0;\n params.success(successRowData);\n return;\n }\n this.currentSequenceId = result.SEQUENCE_ID;\n if (this.currentSequenceId === 1) {\n this.sourceRef = result.SOURCE_REF;\n if (this.serverRowsCount === 0) {\n this.serverRowsCount = (_a = result.ROWS_COUNT) !== null && _a !== void 0 ? _a : this.rowData.size;\n }\n }\n const successRowData = {\n rowData: Array.from(this.rowData.values()),\n };\n successRowData.rowCount = this.getCorrectRowCount(params);\n this.lastSuccessRowData = successRowData;\n params.success(successRowData);\n }\n /**\n * Dataserver-specific sorting setup that validates columns are part of an index.\n * This is required because dataserver needs indexed columns for efficient sorting.\n */\n setupSorting(params) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const toBeAppliedSortModel = params.request.sortModel;\n if (((_a = this.currentSortModel) === null || _a === void 0 ? void 0 : _a.length) !== toBeAppliedSortModel.length ||\n toBeAppliedSortModel.length > 0) {\n if (toBeAppliedSortModel.length === 0 && this.currentSortModel) {\n this.calculatedRowsCount = 0;\n this.currentSortModel = null;\n this.resourceParams.ORDER_BY = null;\n this.resourceParams.REVERSE = null;\n yield this.refreshDatasource(params);\n return;\n }\n else if (toBeAppliedSortModel.length > 0) {\n const coldIdBeingSorted = toBeAppliedSortModel[0].colId; // Not allowing multiple sorts by user\n const sortTypeBeingApplied = toBeAppliedSortModel[0].sort;\n const orderByAndToBeSortedColIds = this.getOrderByAndToBeSortedColIds(this.resourceIndexes, coldIdBeingSorted);\n if (!orderByAndToBeSortedColIds) {\n this.calculatedRowsCount = 0;\n const availableIndexes = getAvailableIndexes(this.resourceIndexes);\n const availableIndexFields = getAvailableIndexFields(this.resourceIndexes);\n logger.warn(`The FIELD/column (${coldIdBeingSorted}) being sorted is not part of an INDEX, required for the [orderBy] operation. See https://learn.genesis.global/docs/database/data-types/index-entities/`);\n logger.debug('Available indexes:', availableIndexes);\n logger.debug('Columns that can be sorted with the available indexes:', availableIndexFields);\n params.fail();\n return;\n }\n else if (JSON.stringify(toBeAppliedSortModel) !== JSON.stringify(this.currentSortModel)) {\n this.currentSortModel = toBeAppliedSortModel;\n this.resourceParams.ORDER_BY = orderByAndToBeSortedColIds.orderBy;\n this.resourceParams.REVERSE = sortTypeBeingApplied === 'desc' ? true : false;\n yield this.refreshDatasource(params);\n return;\n }\n }\n }\n });\n }\n destroy() {\n const _super = Object.create(null, {\n destroy: { get: () => super.destroy }\n });\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n this.dataserverStream = undefined;\n (_a = this.dataserverStreamSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n this.dataserverStreamSubscription = undefined;\n yield _super.destroy.call(this);\n });\n }\n handleCurrentStreamLoad(result) {\n var _a, _b;\n if (!result)\n return;\n const rows = new Map();\n (_a = result.inserts) === null || _a === void 0 ? void 0 : _a.forEach((insertData) => {\n rows.set(insertData[this.rowId], insertData);\n });\n this.clientRowsCount += (_b = result.inserts.length) !== null && _b !== void 0 ? _b : 0;\n this.rowData = rows;\n }\n}\n","import { __awaiter } from \"tslib\";\nimport { MessageType, } from '@genesislcap/foundation-comms';\nimport debounce from 'lodash.debounce';\nimport { logger } from '../utils';\nimport { BaseServerSideDatasource } from './server-side.resource-base';\n/**\n * Debounce time for stream creation after user stops scrolling (in ms)\n */\nconst POLLING_STREAM_DEBOUNCE_MS = 300;\n/**\n * The REQUEST_SERVER IServerSideDatasource implementation, used for SSRM (Server-Side Row Model) in the grid.\n * @beta\n */\nexport class ReqRepServerSideDatasource extends BaseServerSideDatasource {\n constructor(options) {\n var _a, _b, _c, _d, _e;\n super(options);\n // Track the total discovered row count when we reach the last page\n this.discoveredTotalRowCount = null;\n this.currentNextOffset = 0;\n this.createReqRepRequestFunc = options.createReqRepRequestFunc;\n this.createReqRepStreamFunc = options.createReqRepStreamFunc;\n this.onPollingUpdate = options.onPollingUpdateFunc;\n this.resetPreviousPollResult = options.resetPreviousPollResultFunc;\n this.usePolling = (_a = options.usePolling) !== null && _a !== void 0 ? _a : false;\n // Initialize debounced stream creation function\n this.debouncedCreateStream = debounce((params) => this.createPollingStream(params), POLLING_STREAM_DEBOUNCE_MS);\n const effectivePagingMode = this.getEffectivePagingMode();\n // Initialize based on paging mode\n if (effectivePagingMode === 'viewBased') {\n if (!((_c = (_b = options.resourceParams) === null || _b === void 0 ? void 0 : _b.DETAILS) === null || _c === void 0 ? void 0 : _c.VIEW_NUMBER)) {\n this.resourceParams.DETAILS.VIEW_NUMBER = this.zeroBasedViewNumber ? 0 : 1;\n }\n }\n else {\n // offsetBased\n if (!((_e = (_d = options.resourceParams) === null || _d === void 0 ? void 0 : _d.DETAILS) === null || _e === void 0 ? void 0 : _e.OFFSET)) {\n this.resourceParams.DETAILS.OFFSET = 0;\n }\n }\n }\n getRows(params) {\n return __awaiter(this, void 0, void 0, function* () {\n // Use custom filtering and sorting setup for req-rep\n yield this.setupFiltering(params);\n yield this.setupSorting(params);\n if (this.pagination && !this.isNewPageSize && this.currentSequenceId > 0) {\n params.success(this.lastSuccessRowData);\n return;\n }\n const effectivePagingMode = this.getEffectivePagingMode();\n // Update pagination params based on paging mode\n this.updatePaginationParams(params, effectivePagingMode);\n const requestParams = {\n DETAILS: this.buildRequestDetails(effectivePagingMode),\n };\n const requestResult = yield this.createReqRepRequestFunc(requestParams);\n // Determine if this is the last view/page\n const isLastView = yield this.determineIsLastView(requestResult, requestParams, effectivePagingMode);\n // Apply the result to the grid\n this.applyServerSideData(params, requestResult, isLastView);\n // If polling enabled, schedule stream creation after user stops scrolling\n this.schedulePollingStream(requestParams);\n });\n }\n /**\n * Update pagination params based on paging mode\n */\n updatePaginationParams(params, effectivePagingMode) {\n if (effectivePagingMode === 'viewBased') {\n if (this.currentSequenceId !== null && this.currentSequenceId >= 0 && this.moreRows) {\n if (this.pagination) {\n this.resourceParams.DETAILS.VIEW_NUMBER = this.getPageNumber(params.request.startRow, this.maxRows, undefined, // Don't pass maxView as totalRecords since it's not a valid total count\n this.zeroBasedViewNumber);\n }\n else {\n this.resourceParams.DETAILS.VIEW_NUMBER += 1;\n }\n }\n }\n else {\n // offsetBased: use startRow as the OFFSET to ensure correct block-to-offset mapping,\n // even when blocks are re-requested out of order (e.g. polling refresh of block 0)\n this.resourceParams.DETAILS.OFFSET = params.request.startRow;\n }\n }\n /**\n * Determine if this is the last view/page\n */\n determineIsLastView(requestResult, requestParams, effectivePagingMode) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const hasMoreRowsInResult = 'MORE_ROWS' in requestResult;\n let isLastView = false;\n if (effectivePagingMode === 'viewBased') {\n if (hasMoreRowsInResult) {\n isLastView = !requestResult.MORE_ROWS;\n }\n else if (requestResult.NEXT_VIEW !== -1) {\n const preCheckRequestParams = Object.assign(Object.assign({}, requestParams), { DETAILS: Object.assign(Object.assign({}, requestParams.DETAILS), { VIEW_NUMBER: requestResult.NEXT_VIEW }) });\n const moreRowsPreCheck = yield this.createReqRepRequestFunc(preCheckRequestParams);\n isLastView = moreRowsPreCheck.NEXT_VIEW === -1 && ((_a = moreRowsPreCheck.REPLY) === null || _a === void 0 ? void 0 : _a.length) === 0;\n }\n }\n else {\n // offsetBased\n isLastView = hasMoreRowsInResult && !requestResult.MORE_ROWS;\n if ('NEXT_OFFSET' in requestResult && requestResult.NEXT_OFFSET !== -1) {\n this.currentNextOffset = requestResult.NEXT_OFFSET;\n }\n else {\n this.currentNextOffset = 0;\n }\n }\n return isLastView;\n });\n }\n /**\n * Schedules polling stream creation if enabled.\n * @remarks\n * Destroys any existing stream and schedules a new one after the user stops scrolling (debounced).\n * This prevents excessive stream recreation during rapid scrolling.\n */\n schedulePollingStream(requestParams) {\n if (this.usePolling && this.createReqRepStreamFunc) {\n this.destroyPollingStream();\n this.debouncedCreateStream(requestParams);\n }\n }\n applyServerSideData(params, result, isLastView) {\n var _a, _b;\n const messageType = result.MESSAGE_TYPE;\n if (messageType &&\n (messageType === MessageType.LOGOFF_ACK || messageType === MessageType.MSG_NACK)) {\n // Trigger error dialog for connection/authentication errors\n if (this.errorHandlerFunc) {\n const errorMessage = messageType === MessageType.LOGOFF_ACK\n ? `Connection lost to ${this.resourceName}`\n : `Authentication failed for ${this.resourceName}`;\n this.errorHandlerFunc(errorMessage, 'connection');\n }\n params.fail();\n return;\n }\n const effectivePagingMode = this.getEffectivePagingMode();\n // TODO: the code below will be tweaked/removed when gsf <8.14 is no longer supported\n if ('MORE_ROWS' in result) {\n this.moreRows = result.MORE_ROWS;\n }\n else {\n // Fall back to the existing logic for backwards compatibility\n if (effectivePagingMode === 'viewBased') {\n this.moreRows =\n !isLastView &&\n result.NEXT_VIEW !== -1 &&\n result.NEXT_VIEW > this.resourceParams.DETAILS.VIEW_NUMBER;\n }\n else {\n // offsetBased\n this.moreRows =\n !isLastView &&\n result.NEXT_OFFSET !== -1 &&\n result.NEXT_OFFSET > this.resourceParams.DETAILS.OFFSET;\n }\n }\n if (result.REPLY) {\n this.handleCurrentStreamLoad(result.REPLY);\n }\n else {\n this.rowData = new Map();\n const successRowData = { rowData: [] };\n successRowData.rowCount = 0;\n params.success(successRowData);\n return;\n }\n // Update current sequence ID based on paging mode\n if (effectivePagingMode === 'viewBased') {\n this.currentSequenceId = this.resourceParams.DETAILS.VIEW_NUMBER;\n }\n else {\n // For offsetBased, use OFFSET / maxRows to get the sequence\n this.currentSequenceId = Math.floor(this.resourceParams.DETAILS.OFFSET / this.maxRows);\n }\n this.sourceRef = result.SOURCE_REF;\n // For req-rep, store the total row count when we reach the last page\n if (!this.moreRows) {\n const currentBatchSize = this.rowData.size;\n this.discoveredTotalRowCount = params.request.startRow + currentBatchSize;\n }\n // Reset serverRowsCount accumulation for req-rep pagination\n if (this.pagination) {\n this.serverRowsCount = (_a = result.ROWS_COUNT) !== null && _a !== void 0 ? _a : this.rowData.size;\n }\n else {\n this.serverRowsCount += (_b = result.ROWS_COUNT) !== null && _b !== void 0 ? _b : this.rowData.size;\n }\n const successRowData = {\n rowData: Array.from(this.rowData.values()),\n };\n successRowData.rowCount = this.getCorrectRowCount(params);\n this.lastSuccessRowData = successRowData;\n params.success(successRowData);\n }\n getCorrectRowCount(params) {\n let rowCount;\n if (this.pagination) {\n if (this.moreRows) {\n // More data available, return -1 to indicate unknown total\n rowCount = -1;\n }\n else {\n // Use discovered total if available, otherwise calculate from current position\n rowCount = this.discoveredTotalRowCount || params.request.startRow + this.rowData.size;\n }\n return rowCount;\n }\n // Non-pagination mode (streaming)\n if (this.moreRows) {\n rowCount = -1; // More data available, unknown total\n }\n else {\n // Use discovered total or calculate from current batch\n rowCount = this.discoveredTotalRowCount || params.request.startRow + this.rowData.size;\n }\n return rowCount;\n }\n handleCurrentStreamLoad(reply) {\n if (!reply || reply.length == 0)\n return;\n const rows = new Map();\n reply.forEach((insertData) => {\n const insertDataRowId = insertData[this.rowId];\n if (insertDataRowId) {\n rows.set(insertDataRowId, insertData);\n return;\n }\n const noRowIdMessage = `The specified rowId (${this.rowId}) is not present in the data. Since this is a snapshot (isSnapshot=true), an auto-generated UUID will be used. For custom identifiers, use the 'row-id' attribute.`;\n logger.error(noRowIdMessage);\n const tempId = this.uuid.createId();\n insertData[this.rowId] = tempId;\n rows.set(tempId, insertData);\n });\n this.rowData = rows;\n }\n /**\n * Req-rep specific sorting setup that allows any column to be sorted\n * (unlike dataserver which requires indexed columns only)\n */\n setupSorting(params) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const toBeAppliedSortModel = params.request.sortModel;\n if (((_a = this.currentSortModel) === null || _a === void 0 ? void 0 : _a.length) !== toBeAppliedSortModel.length ||\n toBeAppliedSortModel.length > 0) {\n if (toBeAppliedSortModel.length === 0 && this.currentSortModel) {\n this.calculatedRowsCount = 0;\n this.currentSortModel = null;\n this.resourceParams.DETAILS.ORDER_BY = undefined;\n yield this.refreshDatasource(params);\n return;\n }\n else if (toBeAppliedSortModel.length > 0) {\n const coldIdBeingSorted = toBeAppliedSortModel[0].colId; // Not allowing multiple sorts by user\n const sortTypeBeingApplied = toBeAppliedSortModel[0].sort;\n // For req-rep, we can sort by any column without requiring it to be part of an index\n if (JSON.stringify(toBeAppliedSortModel) !== JSON.stringify(this.currentSortModel)) {\n this.currentSortModel = toBeAppliedSortModel;\n this.resourceParams.DETAILS.ORDER_BY =\n coldIdBeingSorted + (sortTypeBeingApplied === 'desc' ? ' DESC' : ' ASC'); // Use the column directly\n yield this.refreshDatasource(params);\n return;\n }\n }\n }\n });\n }\n refreshDatasource(params) {\n const _super = Object.create(null, {\n refreshDatasource: { get: () => super.refreshDatasource }\n });\n return __awaiter(this, void 0, void 0, function* () {\n this.destroyPollingStream();\n if (this.debouncedCreateStream) {\n this.debouncedCreateStream.cancel();\n }\n this.discoveredTotalRowCount = null;\n this.currentNextOffset = 0;\n this.resourceParams.DETAILS.VIEW_NUMBER = this.zeroBasedViewNumber ? 0 : 1;\n this.resourceParams.DETAILS.OFFSET = 0;\n yield _super.refreshDatasource.call(this, params);\n });\n }\n destroy() {\n const _super = Object.create(null, {\n destroy: { get: () => super.destroy }\n });\n return __awaiter(this, void 0, void 0, function* () {\n this.destroyPollingStream();\n if (this.debouncedCreateStream) {\n this.debouncedCreateStream.cancel();\n }\n yield _super.destroy.call(this);\n });\n }\n /**\n * Creates a polling stream for the currently loaded data.\n * @remarks\n * This method creates a separate datasource instance that polls all currently loaded rows\n * (from offset 0 to current offset + maxRows). The polling results are sent to the parent\n * datasource via the `onPollingUpdate` callback for change detection and grid updates.\n *\n * The stream will only apply updates if the request params haven't changed (user hasn't\n * scrolled away or changed filters/sorting).\n * @param requestParams - The request parameters for the current view\n */\n createPollingStream(requestParams) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n this.destroyPollingStream();\n this.currentStreamParams = requestParams;\n const { stream, datasource } = yield this.createReqRepStreamFunc(requestParams);\n this.reqRepPollingStream = stream;\n this.reqRepPollingDatasource = datasource;\n this.reqRepPollingSubscription = this.reqRepPollingStream.subscribe({\n next: (result) => {\n if (this.currentStreamParams &&\n JSON.stringify(this.currentStreamParams) === JSON.stringify(requestParams)) {\n if (this.onPollingUpdate) {\n this.onPollingUpdate(result);\n }\n }\n },\n error: (error) => {\n var _a;\n logger.error('Polling stream error:', error);\n if (this.errorHandlerFunc) {\n this.errorHandlerFunc(((_a = error === null || error === void 0 ? void 0 : error.receivedMessage) === null || _a === void 0 ? void 0 : _a.ERROR) || (error === null || error === void 0 ? void 0 : error.message), 'stream');\n }\n },\n });\n logger.debug('Polling stream created for params:', requestParams);\n }\n catch (error) {\n logger.error('Failed to create polling stream:', error);\n }\n });\n }\n /**\n * Destroys the current polling stream and associated datasource.\n * @remarks\n * Cleans up the polling subscription, destroys the separate polling datasource instance,\n * and resets the previous poll comparison state. Called when:\n * - User scrolls to a new page\n * - Filters or sorting changes\n * - The datasource is being destroyed\n */\n destroyPollingStream() {\n if (this.reqRepPollingSubscription) {\n this.reqRepPollingSubscription.unsubscribe();\n this.reqRepPollingSubscription = undefined;\n logger.debug('Polling subscription destroyed');\n }\n if (this.reqRepPollingDatasource) {\n this.reqRepPollingDatasource.destroy();\n this.reqRepPollingDatasource = undefined;\n logger.debug('Polling datasource destroyed');\n }\n this.reqRepPollingStream = undefined;\n this.currentStreamParams = undefined;\n if (this.resetPreviousPollResult) {\n this.resetPreviousPollResult();\n }\n }\n buildRequestDetails(effectivePagingMode) {\n const baseDetails = {\n CRITERIA_MATCH: this.resourceParams.DETAILS.CRITERIA_MATCH,\n MAX_ROWS: this.resourceParams.DETAILS.MAX_ROWS,\n ORDER_BY: this.resourceParams.DETAILS.ORDER_BY,\n };\n if (effectivePagingMode === 'viewBased') {\n return Object.assign(Object.assign({}, baseDetails), { VIEW_NUMBER: this.resourceParams.DETAILS.VIEW_NUMBER });\n }\n else {\n // offsetBased\n return Object.assign(Object.assign({}, baseDetails), { OFFSET: this.resourceParams.DETAILS.OFFSET });\n }\n }\n}\n","import { __awaiter, __decorate } from \"tslib\";\nimport { dataServerResultFilter, Datasource, MessageType, normaliseCriteria, toFieldMetadata, } from '@genesislcap/foundation-comms';\nimport { insertDocumentCSSRule, JSONSerializer, LifecycleMixin, } from '@genesislcap/foundation-utils';\nimport { attr, customElement, DOM, observable } from '@microsoft/fast-element';\nimport { gridProGenesisDatasourceEventNames } from '../grid-pro-genesis-datasource';\nimport { datasourceEventNames, } from '../grid-pro-genesis-datasource/datasource-events.types';\nimport { logger } from '../utils';\nimport { GridProBaseDatasource } from './base.datasource';\nimport { getFilterByFieldType, getServerSideFilterParamsByFieldType, } from './server-side.grid-definitions';\nimport { DataserverServerSideDatasource } from './server-side.resource-dataserver';\nimport { ReqRepServerSideDatasource } from './server-side.resource-reqrep';\nconst criteriaDelimiter = ';';\nconst withoutColumnDefs = null;\n/**\n * Custom CSS for server-side datasource sort indicators\n * Makes sort indicators always visible with custom styling\n */\nconst serverSideSortIndicatorCSS = `\n .grid-pro-server-side .ag-header-cell-sortable .ag-sort-indicator-container {\n opacity: 1 !important;\n visibility: visible !important;\n }\n \n .grid-pro-server-side .ag-header-cell-sortable:not(.ag-header-cell-sorted) .ag-sort-indicator-container {\n opacity: 0.4 !important;\n }\n \n .grid-pro-server-side .ag-header-cell-sorted .ag-sort-indicator-container {\n opacity: 1 !important;\n }\n \n .grid-pro-server-side .ag-sort-ascending-icon::before,\n .grid-pro-server-side .ag-sort-descending-icon::before,\n .grid-pro-server-side .ag-header-cell-sortable:not(.ag-header-cell-sorted) .ag-sort-indicator-icon::before {\n font-family: var(--ag-icon-font-family, agGridAlpine) !important;\n font-size: var(--ag-icon-size, 16px) !important;\n color: var(--ag-header-foreground-color, var(--ag-foreground-color)) !important;\n }\n \n .grid-pro-server-side .ag-sort-ascending-icon::before {\n content: \"\\\\e90d\" !important; /* AG Grid sort up icon */\n }\n \n .grid-pro-server-side .ag-sort-descending-icon::before {\n content: \"\\\\e90c\" !important; /* AG Grid sort down icon */\n }\n \n .grid-pro-server-side .ag-header-cell-sortable:not(.ag-header-cell-sorted) .ag-sort-indicator-icon::before {\n content: \"\\\\e90b\" !important; /* AG Grid sort icon */\n opacity: 0.6 !important;\n }\n \n /* Ensure the sort indicator is always visible for sortable columns in server-side mode */\n .grid-pro-server-side .ag-header-cell-sortable .ag-sort-indicator-icon {\n display: inline-block !important;\n }\n`;\n/**\n * A Genesis Datasource element, for server-side | SSRM-compatible data fetching and used exclusively by the GridPro element.\n * @remarks Only supports Server-Side Row Model. Requires `@ag-grid-enterprise/server-side-row-model` setup and valid AG Grid Enterprise license.\n *\n * **Custom Sort Indicators**: This datasource automatically applies custom sort indicators that are always visible (instead of only on hover).\n * Sortable columns will show a subtle sort icon even when not sorted, and active sort indicators will be more prominent.\n * The custom styling uses AG Grid's native icon font for consistency with the grid theme.\n *\n * @beta\n */\nlet GridProServerSideDatasource = class GridProServerSideDatasource extends LifecycleMixin(GridProBaseDatasource) {\n constructor() {\n super(...arguments);\n /**\n * The starting VIEW_NUMBER of the data to be fetched.\n * @remarks The VIEW_NUMBER isincremented by the grid as the user scrolls or changes pages.\n */\n this.zeroBasedViewNumber = false;\n /**\n * Enable live updates for the grid.\n * @remarks Only works with DATASERVER resources (StreamDatasource) right now.\n */\n this.liveUpdates = false;\n this.request = {};\n this.sortIndicatorCSSDestroy = null;\n /**\n * Stores the previous poll result for comparison (poll N vs poll N-1).\n * @remarks\n * This enables efficient change detection by comparing consecutive polls instead of\n * maintaining the entire dataset in memory. Only stores the last poll result.\n * @internal\n */\n this.previousPollResult = new Map();\n }\n resourceNameChanged(oldValue, newValue) {\n if (!oldValue || oldValue === newValue)\n return;\n DOM.queueUpdate(() => __awaiter(this, void 0, void 0, function* () {\n yield this.restart();\n }));\n }\n criteriaChanged(oldCriteria, newCriteria) {\n const criteriaIsNotDuplicate = oldCriteria !== normaliseCriteria(newCriteria, criteriaDelimiter);\n if (this.ssrmDatasource && criteriaIsNotDuplicate) {\n DOM.queueUpdate(() => __awaiter(this, void 0, void 0, function* () {\n yield this.ssrmDatasource.refreshDatasource({\n criteria: newCriteria,\n });\n }));\n }\n }\n connectedCallback() {\n super.connectedCallback();\n const shouldRunConnect = this.shouldRunConnect;\n DOM.queueUpdate(() => {\n if (!shouldRunConnect)\n return;\n this.init();\n this.subscribeToConnection();\n });\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n const shouldRunDisconnect = this.shouldRunDisconnect;\n DOM.queueUpdate(() => __awaiter(this, void 0, void 0, function* () {\n if (!shouldRunDisconnect)\n return;\n yield this.destroy();\n this.unsubscribeFromConnection();\n }));\n }\n deepClone() {\n const copy = super.deepClone();\n copy.deferredGridOptions = structuredClone(this.deferredGridOptions);\n copy.deferredColumnStates = structuredClone(this.deferredColumnStates);\n return copy;\n }\n /**\n * Resets the grid data while keeping columnDefs and reloads data.\n * @remarks This is used when the grid is already initialized and we want to reload the data due to a criteria/filter change.\n * @beta\n */\n reloadResourceData(params) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n this.datasource.destroy();\n (_a = this.liveUpdatesStream) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n this.liveUpdatesStream = undefined;\n // Emit event to cache current filter model before clearing data\n this.$emit(datasourceEventNames.cacheFilterConfig);\n this.clearRowData(withoutColumnDefs);\n this.setDisconnected(false);\n // Emit event to refresh server side with purge\n this.$emit(datasourceEventNames.refreshServerSide, { purge: true });\n if (params) {\n const options = Object.assign(Object.assign({}, this.datasourceOptions()), params);\n const initOK = yield this.initializeDatasource(options, true, false);\n if (!initOK) {\n // Emit event to set server side datasource to null\n this.$emit(datasourceEventNames.setServerSideDatasource, { datasource: null });\n logger.error('Genesis Datasource re-init failed on filtering/sorting.');\n }\n }\n else {\n if (this.ssrmDatasource) {\n yield this.ssrmDatasource.destroy();\n this.ssrmDatasource = undefined;\n }\n // Emit events instead of direct grid access\n this.$emit(datasourceEventNames.setServerSideDatasource, { datasource: null });\n this.$emit(datasourceEventNames.loadingStarted);\n yield this.init();\n }\n });\n }\n /**\n * Applies custom sort indicator styling for server-side datasource\n * @internal\n */\n applyServerSideSortIndicatorStyling() {\n // Remove existing styling if present\n this.removeServerSideSortIndicatorStyling();\n // Emit event to add CSS class to grid element\n this.$emit(datasourceEventNames.addGridCssClass, { className: 'grid-pro-server-side' });\n // Insert custom CSS rules\n this.sortIndicatorCSSDestroy = insertDocumentCSSRule(serverSideSortIndicatorCSS, 'grid-pro-server-side-sort');\n }\n /**\n * Removes custom sort indicator styling\n * @internal\n */\n removeServerSideSortIndicatorStyling() {\n // Emit event to remove CSS class from grid element\n this.$emit(datasourceEventNames.removeGridCssClass, { className: 'grid-pro-server-side' });\n // Remove custom CSS rules\n if (this.sortIndicatorCSSDestroy) {\n this.sortIndicatorCSSDestroy();\n this.sortIndicatorCSSDestroy = null;\n }\n }\n init() {\n return __awaiter(this, void 0, void 0, function* () {\n // Emit event to initialize grid with server-side options\n const gridOptions = Object.assign({ getRowId: (params) => {\n if (!params.data) {\n return null;\n }\n return String(params.data[this.rowId]);\n }, getRowStyle(params) {\n var _a, _b;\n if ((_b = (_a = params.data) === null || _a === void 0 ? void 0 : _a.ROW_REF) === null || _b === void 0 ? void 0 : _b.includes('_deleted')) {\n return { color: 'grey' };\n }\n }, cacheBlockSize: this.maxRows, defaultColDef: {\n filter: true,\n resizable: true,\n sortable: false,\n unSortIcon: true,\n }, rowBuffer: 0, rowModelType: 'serverSide', suppressServerSideInfiniteScroll: false, suppressMultiSort: true, onFilterChanged: (params) => { }, onSortChanged: (params) => { }, onPaginationChanged: (event) => this.onPaginationChanged(event) }, this.deferredGridOptions);\n this.$emit(datasourceEventNames.initialize, {\n options: gridOptions,\n keepColDefsOnClearRowData: this.keepColDefsOnClearRowData,\n });\n // TODO: refactor this to prevent rendering datasource component until grid is ready\n this.addEventListener(datasourceEventNames.ready, (event) => __awaiter(this, void 0, void 0, function* () {\n const { pagination } = event.detail;\n this.pagination = pagination;\n const initOK = yield this.initializeDatasource(this.datasourceOptions(), true, false);\n if (!initOK) {\n logger.debug(`Genesis Datasource init failed for ${this.resourceName}`);\n this.clearRowData();\n this.setDisconnected(true);\n return;\n }\n this.$emit(gridProGenesisDatasourceEventNames.dataInit);\n this.setDisconnected(false);\n this.indexes = this.getResourceIndexes(this.datasource.availableIndexes, this.datasource.availableSortableFields);\n const fieldMetadata = toFieldMetadata(this.datasource.originalFieldDef);\n const agColumnDefs = yield this.getAgColumnDefs(fieldMetadata);\n // Emit event to set column definitions\n this.$emit(datasourceEventNames.schemaUpdated, {\n schema: agColumnDefs,\n metadata: fieldMetadata,\n });\n if (this.isRequestServer) {\n // Enable polling if not in snapshot mode and polling is not disabled\n const usePolling = !this.isSnapshot && !this.disablePolling;\n this.ssrmDatasource = new ReqRepServerSideDatasource({\n createReqRepRequestFunc: this.createReqRepRequest.bind(this),\n createReqRepStreamFunc: usePolling ? this.createReqRepStream.bind(this) : undefined,\n onPollingUpdateFunc: usePolling ? this.applyReqRepPollingUpdate.bind(this) : undefined,\n resetPreviousPollResultFunc: usePolling\n ? this.resetPreviousPollResult.bind(this)\n : undefined,\n usePolling: usePolling,\n reloadResourceDataFunc: this.reloadResourceData.bind(this),\n errorHandlerFunc: this.handleErrors.bind(this),\n resourceName: this.resourceName,\n resourceParams: this.datasource.requestOnlyParams,\n resourceIndexes: this.indexes,\n resourceColDefs: this.datasource.originalFieldDef,\n maxRows: +this.maxRows,\n maxView: +this.maxView,\n rowId: this.rowId,\n pagination: this.pagination,\n zeroBasedViewNumber: this.zeroBasedViewNumber,\n pagingMode: this.pagingMode,\n criteriaOnlyRequest: this.datasource.criteriaOnlyRequest,\n });\n }\n else {\n this.ssrmDatasource = new DataserverServerSideDatasource({\n createDataserverStreamFunc: this.createDataserverStream.bind(this),\n reloadResourceDataFunc: this.reloadResourceData.bind(this),\n errorHandlerFunc: this.handleErrors.bind(this),\n resourceName: this.resourceName,\n resourceParams: this.datasource.dataserverOnlyParams,\n resourceIndexes: this.indexes,\n resourceColDefs: this.datasource.originalFieldDef,\n maxRows: +this.maxRows,\n maxView: +this.maxView,\n rowId: this.rowId,\n pagination: this.pagination,\n zeroBasedViewNumber: this.zeroBasedViewNumber,\n });\n }\n // Emit event to set server side datasource\n this.$emit(datasourceEventNames.setServerSideDatasource, {\n datasource: this.ssrmDatasource,\n });\n // Emit event to restore cached filter config\n this.$emit(datasourceEventNames.filtersRestored);\n // Apply custom sort indicator styling for server-side datasource\n this.applyServerSideSortIndicatorStyling();\n }), { once: true });\n if (!this.resourceName) {\n this.handleErrors('Application not connected or invalid resource name, datasource will not work.', 'unknown');\n }\n });\n }\n onPaginationChanged(event) {\n var _a;\n if (this.ssrmDatasource) {\n this.ssrmDatasource.isNewPageSize = (_a = event.newPage) !== null && _a !== void 0 ? _a : false;\n }\n }\n destroy() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b;\n this.datasource.destroy();\n (_a = this.liveUpdatesStream) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n this.liveUpdatesStream = undefined;\n this.clearRowData();\n if (this.ssrmDatasource) {\n yield this.ssrmDatasource.destroy();\n (_b = this.pollingDatasource) === null || _b === void 0 ? void 0 : _b.destroy();\n this.ssrmDatasource = undefined;\n }\n // Remove custom sort indicator styling\n this.removeServerSideSortIndicatorStyling();\n // Emit events instead of direct grid access\n this.$emit(datasourceEventNames.setServerSideDatasource, { datasource: null });\n this.$emit(datasourceEventNames.refreshServerSide, { purge: true });\n });\n }\n restart() {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.destroy();\n yield this.init();\n });\n }\n clearRowData(withColumnDefs = true) {\n this.rowData = new Map();\n if (withColumnDefs) {\n // Emit event to clear column definitions\n this.$emit(datasourceEventNames.dataCleared, {\n includeSchema: true,\n });\n }\n this.transactionData = { remove: [] };\n // Emit event to apply server side transaction for removing all data\n this.$emit(datasourceEventNames.applyServerSideTransaction, {\n transaction: this.transactionData,\n });\n this.transactionData = undefined;\n }\n getResourceIndexes(avaialbleIndexes, availableSortableFields) {\n const resourceIndexesMap = new Map();\n const allSortableFields = new Set();\n // Add indexes from INDEXES metadata\n avaialbleIndexes === null || avaialbleIndexes === void 0 ? void 0 : avaialbleIndexes.forEach((index) => {\n const fields = index.FIELDS.split(' ');\n resourceIndexesMap.set(index.NAME, fields);\n fields.forEach((field) => allSortableFields.add(field));\n });\n // Add fields from SORTABLE_FIELDS metadata if available\n if (availableSortableFields && availableSortableFields.length > 0) {\n availableSortableFields.forEach((field) => allSortableFields.add(field));\n }\n // If we have SORTABLE_FIELDS but no indexes, create a synthetic index entry\n // This ensures compatibility with existing code that expects a Map structure\n if (resourceIndexesMap.size === 0 && allSortableFields.size > 0) {\n resourceIndexesMap.set('SORTABLE_FIELDS', Array.from(allSortableFields));\n }\n else if (availableSortableFields &&\n availableSortableFields.length > 0 &&\n resourceIndexesMap.size > 0) {\n // If we have both indexes and SORTABLE_FIELDS, merge them\n // Add any additional fields from SORTABLE_FIELDS that aren't already in any index\n const fieldsFromIndexes = new Set();\n resourceIndexesMap.forEach((fields) => {\n fields.forEach((field) => fieldsFromIndexes.add(field));\n });\n const additionalFields = availableSortableFields.filter((field) => !fieldsFromIndexes.has(field));\n if (additionalFields.length > 0) {\n // Add additional sortable fields as a separate entry\n resourceIndexesMap.set('SORTABLE_FIELDS', additionalFields);\n }\n }\n return resourceIndexesMap;\n }\n createReqRepRequest() {\n return __awaiter(this, arguments, void 0, function* (existingParams = null) {\n const reqRep = yield this.datasource.snapshot(existingParams);\n return reqRep;\n });\n }\n /**\n * Creates a polling stream for REQUEST_SERVER resources.\n * @remarks\n * Creates a separate `Datasource` instance configured to poll all currently loaded rows\n * (from offset 0 to current offset + maxRows). This enables change detection across all\n * loaded data, not just the current page.\n *\n * The separate datasource instance has built-in polling logic (pollingInterval, pollTriggerEvents)\n * and manages its own lifecycle independently of the snapshot datasource.\n * @param existingParams - The current request parameters (includes OFFSET, MAX_ROWS, etc.)\n * @returns Object containing the polling stream and the datasource instance\n * @internal\n */\n createReqRepStream() {\n return __awaiter(this, arguments, void 0, function* (existingParams = null) {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n const currentOffset = (_b = (_a = existingParams === null || existingParams === void 0 ? void 0 : existingParams.DETAILS) === null || _a === void 0 ? void 0 : _a.OFFSET) !== null && _b !== void 0 ? _b : 0;\n const baseMaxRows = (_d = (_c = existingParams === null || existingParams === void 0 ? void 0 : existingParams.DETAILS) === null || _c === void 0 ? void 0 : _c.MAX_ROWS) !== null && _d !== void 0 ? _d : this.maxRows;\n const totalRowsToFetch = baseMaxRows + currentOffset;\n const datasourceOptions = Object.assign(Object.assign({}, this.datasourceOptions()), { criteria: (_f = (_e = existingParams === null || existingParams === void 0 ? void 0 : existingParams.DETAILS) === null || _e === void 0 ? void 0 : _e.CRITERIA_MATCH) !== null && _f !== void 0 ? _f : this.criteria, maxRows: totalRowsToFetch, orderBy: (_h = (_g = existingParams === null || existingParams === void 0 ? void 0 : existingParams.DETAILS) === null || _g === void 0 ? void 0 : _g.ORDER_BY) !== null && _h !== void 0 ? _h : this.orderBy });\n logger.debug('Creating polling datasource for all loaded rows:', {\n currentOffset,\n baseMaxRows,\n totalRowsToFetch,\n });\n // Initialize the polling datasource\n const initOK = yield this.pollingDatasource.init(datasourceOptions, true, true);\n if (!initOK) {\n logger.error('Polling datasource init failed');\n return;\n }\n return { stream: this.pollingDatasource.stream, datasource: this.pollingDatasource };\n });\n }\n /**\n * Resets the previous poll result comparison state.\n * @remarks\n * Called when the polling stream is destroyed or recreated with new parameters\n * (e.g., user scrolls to a different page, or filters/sorting changes).\n * @internal\n */\n resetPreviousPollResult() {\n this.previousPollResult.clear();\n logger.debug('Previous poll result cleared');\n }\n /**\n * Applies polling updates for REQUEST_SERVER resources in SSRM.\n * @remarks\n * Compares the current poll result (poll N) with the previous poll result (poll N-1)\n * to detect inserts, updates, and deletes. Changes are applied to the grid using\n * `applyServerSideTransaction` to avoid interfering with SSRM's cache management.\n *\n * The first poll is stored without applying changes (nothing to compare yet).\n * Subsequent polls are compared to detect changes efficiently.\n * @param result - The polling result from the REQUEST_SERVER resource\n * @internal\n */\n applyReqRepPollingUpdate(result) {\n var _a;\n if (!this.ssrmDatasource || !result.REPLY) {\n return;\n }\n const polledData = result.REPLY;\n if (!Array.isArray(polledData) || !((_a = result.MESSAGE_TYPE) === null || _a === void 0 ? void 0 : _a.startsWith('REP_'))) {\n logger.error('received invalid RequestServerResult for polling update', result);\n return;\n }\n if (this.previousPollResult.size === 0) {\n polledData.forEach((row) => {\n this.previousPollResult.set(row[this.rowId], row);\n });\n logger.debug('First poll result stored for future comparison', {\n rowCount: this.previousPollResult.size,\n });\n return;\n }\n const currentPollMap = new Map();\n polledData.forEach((row) => {\n currentPollMap.set(row[this.rowId], row);\n });\n const rowsToUpdate = [];\n const rowsToInsert = [];\n const rowsToDelete = [];\n polledData.forEach((row) => {\n const rowId = row[this.rowId];\n if (this.previousPollResult.has(rowId)) {\n const previousRow = this.previousPollResult.get(rowId);\n if (this.serializer.serialize(previousRow) !== this.serializer.serialize(row)) {\n rowsToUpdate.push(row);\n }\n }\n else {\n rowsToInsert.push(row);\n }\n });\n this.previousPollResult.forEach((previousRow, rowId) => {\n if (!currentPollMap.has(rowId)) {\n rowsToDelete.push(previousRow);\n }\n });\n if (rowsToUpdate.length > 0 || rowsToDelete.length > 0 || rowsToInsert.length > 0) {\n this.previousPollResult = currentPollMap;\n logger.debug('Applying reqRep polling update via applyServerSideTransaction:', {\n added: rowsToInsert.length,\n updated: rowsToUpdate.length,\n removed: rowsToDelete.length,\n totalInPoll: currentPollMap.size,\n });\n this.$emit(datasourceEventNames.applyServerSideTransaction, {\n transaction: {\n add: rowsToInsert,\n update: rowsToUpdate,\n remove: rowsToDelete,\n },\n });\n }\n }\n createDataserverStream() {\n return __awaiter(this, arguments, void 0, function* (existingParams = null) {\n if (this.liveUpdates) {\n const streamOnMessage = (message) => __awaiter(this, void 0, void 0, function* () {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n const messageType = message.MESSAGE_TYPE;\n if (messageType === MessageType.QUERY_UPDATE && message.ROW) {\n if (!this.ssrmDatasource) {\n return;\n }\n const nextMessage = dataServerResultFilter(message);\n this.transactionData = { add: [], remove: [], update: [] };\n this.handleStreamInserts(nextMessage.inserts);\n this.handleStreamUpdates(nextMessage.updates);\n this.handleStreamDeletes(nextMessage.deletes);\n if (message.SEQUENCE_ID > 1) {\n // Calculate net row count change (inserts - deletes)\n const netRowChange = ((_b = (_a = nextMessage.inserts) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) - ((_d = (_c = nextMessage.deletes) === null || _c === void 0 ? void 0 : _c.length) !== null && _d !== void 0 ? _d : 0);\n this.ssrmDatasource.serverRowsCount += netRowChange;\n // Calculate net row count change for client (inserts - loaded deletes)\n const clientNetRowChange = ((_f = (_e = nextMessage.inserts) === null || _e === void 0 ? void 0 : _e.length) !== null && _f !== void 0 ? _f : 0) - ((_h = (_g = nextMessage.deletes) === null || _g === void 0 ? void 0 : _g.length) !== null && _h !== void 0 ? _h : 0);\n this.ssrmDatasource.clientRowsCount += clientNetRowChange;\n this.applyAllTransactions();\n }\n }\n });\n const onError = (error) => {\n var _a;\n logger.error(error);\n this.handleErrors(((_a = error.receivedMessage) === null || _a === void 0 ? void 0 : _a.ERROR) || error.message, 'stream');\n };\n this.liveUpdatesStream = this.connect\n .stream(this.resourceName, () => { }, onError, existingParams !== null && existingParams !== void 0 ? existingParams : this.datasource.dataserverOnlyParams)\n .subscribe((message) => streamOnMessage(message));\n }\n yield this.datasource.startStream();\n return this.datasource.stream;\n });\n }\n getAgColumnDefs(fieldsMetadata) {\n return __awaiter(this, void 0, void 0, function* () {\n const colDefsFromGenesisData = this.generateColumnDefsFromMetadata(fieldsMetadata, getServerSideFilterParamsByFieldType, getFilterByFieldType);\n colDefsFromGenesisData.forEach((colDef) => {\n colDef.sortable = [].concat(...this.indexes.values()).includes(colDef.field);\n if (this.datasource.criteriaOnlyRequest) {\n colDef.filter = this.datasource.availableCriteriaFields.includes(colDef.field)\n ? colDef.filter\n : null;\n }\n });\n return colDefsFromGenesisData;\n });\n }\n applyTransaction(transaction) {\n this.$emit(datasourceEventNames.applyServerSideTransaction, { transaction });\n }\n loadMore() {\n throw new Error('loadMore() method is not supported for server-side datasource');\n }\n};\n__decorate([\n JSONSerializer\n], GridProServerSideDatasource.prototype, \"serializer\", void 0);\n__decorate([\n Datasource\n], GridProServerSideDatasource.prototype, \"pollingDatasource\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'zero-based-view-number' })\n], GridProServerSideDatasource.prototype, \"zeroBasedViewNumber\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'live-updates' })\n], GridProServerSideDatasource.prototype, \"liveUpdates\", void 0);\n__decorate([\n attr({ attribute: 'paging-mode' })\n], GridProServerSideDatasource.prototype, \"pagingMode\", void 0);\n__decorate([\n observable\n], GridProServerSideDatasource.prototype, \"request\", void 0);\nGridProServerSideDatasource = __decorate([\n customElement({\n name: 'grid-pro-server-side-datasource',\n })\n], GridProServerSideDatasource);\nexport { GridProServerSideDatasource };\n","import { css } from '@microsoft/fast-element';\n/**\n * Custom Drag n Drop CSS for Grid Pro.\n * @remarks helps with color and background issues when dragging a column.\n * @public\n */\nexport const agHeadCSS = css `\n .ag-dnd-ghost {\n background: var(--ag-header-background-color, var(--ag-background-color, #1f2126));\n border: solid 1px;\n border-color: var(--ag-header-foreground-color, var(--ag-foreground-color, #879ba6));\n border-radius: calc(var(--control-corner-radius) * 1px);\n color: var(--ag-header-foreground-color, var(--ag-foreground-color, #879ba6));\n font-family: var(--ag-font-family, var(--body-font));\n font-size: 12px;\n height: 32px;\n line-height: 28px;\n margin: 0;\n padding: 0 12px;\n position: absolute;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n`;\n","import { AgGridTheme } from '../grid-pro.types';\n/**\n * The AG Alpine font face used on ag-theme-alpine/ag-theme-alpine-dark Grid Pro themes.\n * @public\n */\nexport const agGridAlpineFontFace = `\n @font-face {\n font-family: \"agGridAlpine\";\n src: url(data:font/woff2;charset=utf-8;base64,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);\n font-weight: normal;\n font-style: normal;\n }\n`;\n/**\n * The AG Balham font face used on ag-theme-balham/ag-theme-balham-dark Grid Pro themes.\n * @public\n */\nexport const agGridBalhamFontFace = `\n @font-face {\n font-family: \"agGridBalham\";\n src: url(data:font/woff2;charset=utf-8;base64,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);\n font-weight: normal;\n font-style: normal;\n }\n`;\n/**\n * The AG Material font face used on ag-theme-material Grid Pro theme.\n * @public\n */\nexport const agGridMaterialFontFace = `\n @font-face {\n font-family: \"agGridMaterial\";\n src: url(data:font/woff2;charset=utf-8;base64,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);\n font-weight: normal;\n font-style: normal;\n }\n`;\n/**\n * Font Face map with all the font faces for each theme.\n * @public\n */\nexport const agThemeFontFaceMap = {\n [AgGridTheme.alpine]: agGridAlpineFontFace,\n [AgGridTheme.alpineDark]: agGridAlpineFontFace,\n [AgGridTheme.balham]: agGridBalhamFontFace,\n [AgGridTheme.balhamDark]: agGridBalhamFontFace,\n [AgGridTheme.material]: agGridMaterialFontFace,\n};\n/**\n * The default font face for Grid Pro (agGridAlpine).\n * @remarks this will change to Roboto.\n * @public\n */\nexport const defaultAgGridFontFace = agGridAlpineFontFace;\n","import { css } from '@microsoft/fast-element';\n/**\n * AG Grid core CSS.\n * @remarks without this grid will not show up.\n * @public\n */\nexport const agGridCSS = css `\n .ag-icon {\n font-family: var(--ag-icon-font-family);\n font-size: var(--ag-icon-size);\n line-height: var(--ag-icon-size);\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n }\n\n .ag-icon-aggregation::before {\n content: var(--ag-icon-font-code-aggregation, '\\\\f101');\n }\n\n .ag-icon-arrows::before {\n content: var(--ag-icon-font-code-arrows, '\\\\f102');\n }\n\n .ag-icon-asc::before {\n content: var(--ag-icon-font-code-asc, '\\\\f103');\n }\n\n .ag-icon-cancel::before {\n content: var(--ag-icon-font-code-cancel, '\\\\f104');\n }\n\n .ag-icon-chart::before {\n content: var(--ag-icon-font-code-chart, '\\\\f105');\n }\n\n .ag-icon-checkbox-checked::before {\n content: var(--ag-icon-font-code-checkbox-checked, '\\\\f106');\n }\n\n .ag-icon-checkbox-indeterminate::before {\n content: var(--ag-icon-font-code-checkbox-indeterminate, '\\\\f107');\n }\n\n .ag-icon-checkbox-unchecked::before {\n content: var(--ag-icon-font-code-checkbox-unchecked, '\\\\f108');\n }\n\n .ag-icon-color-picker::before {\n content: var(--ag-icon-font-code-color-picker, '\\\\f109');\n }\n\n .ag-icon-columns::before {\n content: var(--ag-icon-font-code-columns, '\\\\f10a');\n }\n\n .ag-icon-contracted::before {\n content: var(--ag-icon-font-code-contracted, '\\\\f10b');\n }\n\n .ag-icon-copy::before {\n content: var(--ag-icon-font-code-copy, '\\\\f10c');\n }\n\n .ag-icon-cross::before {\n content: var(--ag-icon-font-code-cross, '\\\\f10d');\n }\n\n .ag-icon-csv::before {\n content: var(--ag-icon-font-code-csv, '\\\\f10e');\n }\n\n .ag-icon-desc::before {\n content: var(--ag-icon-font-code-desc, '\\\\f10f');\n }\n\n .ag-icon-excel::before {\n content: var(--ag-icon-font-code-excel, '\\\\f110');\n }\n\n .ag-icon-expanded::before {\n content: var(--ag-icon-font-code-expanded, '\\\\f111');\n }\n\n .ag-icon-eye-slash::before {\n content: var(--ag-icon-font-code-eye-slash, '\\\\f112');\n }\n\n .ag-icon-eye::before {\n content: var(--ag-icon-font-code-eye, '\\\\f113');\n }\n\n .ag-icon-filter::before {\n content: var(--ag-icon-font-code-filter, '\\\\f114');\n }\n\n .ag-icon-first::before {\n content: var(--ag-icon-font-code-first, '\\\\f115');\n }\n\n .ag-icon-grip::before {\n content: var(--ag-icon-font-code-grip, '\\\\f116');\n }\n\n .ag-icon-group::before {\n content: var(--ag-icon-font-code-group, '\\\\f117');\n }\n\n .ag-icon-last::before {\n content: var(--ag-icon-font-code-last, '\\\\f118');\n }\n\n .ag-icon-left::before {\n content: var(--ag-icon-font-code-left, '\\\\f119');\n }\n\n .ag-icon-linked::before {\n content: var(--ag-icon-font-code-linked, '\\\\f11a');\n }\n\n .ag-icon-loading::before {\n content: var(--ag-icon-font-code-loading, '\\\\f11b');\n }\n\n .ag-icon-maximize::before {\n content: var(--ag-icon-font-code-maximize, '\\\\f11c');\n }\n\n .ag-icon-menu::before {\n content: var(--ag-icon-font-code-menu, '\\\\f11d');\n }\n\n .ag-icon-minimize::before {\n content: var(--ag-icon-font-code-minimize, '\\\\f11e');\n }\n\n .ag-icon-next::before {\n content: var(--ag-icon-font-code-next, '\\\\f11f');\n }\n\n .ag-icon-none::before {\n content: var(--ag-icon-font-code-none, '\\\\f120');\n }\n\n .ag-icon-not-allowed::before {\n content: var(--ag-icon-font-code-not-allowed, '\\\\f121');\n }\n\n .ag-icon-paste::before {\n content: var(--ag-icon-font-code-paste, '\\\\f122');\n }\n\n .ag-icon-pin::before {\n content: var(--ag-icon-font-code-pin, '\\\\f123');\n }\n\n .ag-icon-pivot::before {\n content: var(--ag-icon-font-code-pivot, '\\\\f124');\n }\n\n .ag-icon-previous::before {\n content: var(--ag-icon-font-code-previous, '\\\\f125');\n }\n\n .ag-icon-radio-button-off::before {\n content: var(--ag-icon-font-code-radio-button-off, '\\\\f126');\n }\n\n .ag-icon-radio-button-on::before {\n content: var(--ag-icon-font-code-radio-button-on, '\\\\f127');\n }\n\n .ag-icon-right::before {\n content: var(--ag-icon-font-code-right, '\\\\f128');\n }\n\n .ag-icon-save::before {\n content: var(--ag-icon-font-code-save, '\\\\f129');\n }\n\n .ag-icon-small-down::before {\n content: var(--ag-icon-font-code-small-down, '\\\\f12a');\n }\n\n .ag-icon-small-left::before {\n content: var(--ag-icon-font-code-small-left, '\\\\f12b');\n }\n\n .ag-icon-small-right::before {\n content: var(--ag-icon-font-code-small-right, '\\\\f12c');\n }\n\n .ag-icon-small-up::before {\n content: var(--ag-icon-font-code-small-up, '\\\\f12d');\n }\n\n .ag-icon-tick::before {\n content: var(--ag-icon-font-code-tick, '\\\\f12e');\n }\n\n .ag-icon-tree-closed::before {\n content: var(--ag-icon-font-code-tree-closed, '\\\\f12f');\n }\n\n .ag-icon-tree-indeterminate::before {\n content: var(--ag-icon-font-code-tree-indeterminate, '\\\\f130');\n }\n\n .ag-icon-tree-open::before {\n content: var(--ag-icon-font-code-tree-open, '\\\\f131');\n }\n\n .ag-icon-unlinked::before {\n content: var(--ag-icon-font-code-unlinked, '\\\\f132');\n }\n\n .ag-icon-row-drag::before {\n content: var(--ag-icon-font-code-grip);\n }\n\n .ag-left-arrow::before {\n content: var(--ag-icon-font-code-left);\n }\n\n .ag-right-arrow::before {\n content: var(--ag-icon-font-code-right);\n }\n\n [class*='ag-theme-'] {\n --ag-foreground-color: #000;\n --ag-data-color: var(--ag-foreground-color);\n --ag-secondary-foreground-color: var(--ag-foreground-color);\n --ag-header-foreground-color: var(--ag-secondary-foreground-color);\n --ag-disabled-foreground-color: rgba(0, 0, 0, 0.5);\n --ag-background-color: #fff;\n --ag-header-background-color: transparent;\n --ag-tooltip-background-color: transparent;\n --ag-subheader-background-color: transparent;\n --ag-subheader-toolbar-background-color: transparent;\n --ag-control-panel-background-color: transparent;\n --ag-side-button-selected-background-color: var(--ag-control-panel-background-color);\n --ag-selected-row-background-color: #bbb;\n --ag-odd-row-background-color: var(--ag-background-color);\n --ag-modal-overlay-background-color: rgba(255, 255, 255, 0.66);\n --ag-row-hover-color: transparent;\n --ag-column-hover-color: transparent;\n --ag-range-selection-border-color: var(--ag-foreground-color);\n --ag-range-selection-border-style: solid;\n --ag-range-selection-background-color: rgba(0, 0, 0, 0.2);\n --ag-range-selection-background-color-2: var(--ag-range-selection-background-color);\n --ag-range-selection-background-color-3: var(--ag-range-selection-background-color);\n --ag-range-selection-background-color-4: var(--ag-range-selection-background-color);\n --ag-range-selection-highlight-color: var(--ag-range-selection-border-color);\n --ag-selected-tab-underline-color: var(--ag-range-selection-border-color);\n --ag-selected-tab-underline-width: 0;\n --ag-selected-tab-underline-transition-speed: 0s;\n --ag-range-selection-chart-category-background-color: rgba(0, 255, 132, 0.1);\n --ag-range-selection-chart-background-color: rgba(0, 88, 255, 0.1);\n --ag-header-cell-hover-background-color: transparent;\n --ag-header-cell-moving-background-color: var(--ag-background-color);\n --ag-value-change-value-highlight-background-color: rgba(22, 160, 133, 0.5);\n --ag-value-change-delta-up-color: #43a047;\n --ag-value-change-delta-down-color: #e53935;\n --ag-chip-background-color: transparent;\n --ag-borders: solid 1px;\n --ag-border-color: rgba(0, 0, 0, 0.25);\n --ag-borders-critical: var(--ag-borders);\n --ag-borders-secondary: var(--ag-borders);\n --ag-secondary-border-color: var(--ag-border-color);\n --ag-row-border-style: solid;\n --ag-row-border-color: var(--ag-secondary-border-color);\n --ag-row-border-width: 1px;\n --ag-cell-horizontal-border: solid transparent;\n --ag-borders-input: var(--ag-borders-secondary);\n --ag-input-border-color: var(--ag-secondary-border-color);\n --ag-borders-input-invalid: solid 2px;\n --ag-input-border-color-invalid: var(--ag-invalid-color);\n --ag-borders-side-button: var(--ag-borders);\n --ag-border-radius: 0px;\n --ag-row-border-color: var(--ag-secondary-border-color);\n --ag-header-column-separator-display: none;\n --ag-header-column-separator-height: 100%;\n --ag-header-column-separator-width: 1px;\n --ag-header-column-separator-color: var(--ag-secondary-border-color);\n --ag-header-column-resize-handle-display: none;\n --ag-header-column-resize-handle-height: 50%;\n --ag-header-column-resize-handle-width: 1px;\n --ag-header-column-resize-handle-color: var(--ag-secondary-border-color);\n --ag-invalid-color: red;\n --ag-input-disabled-border-color: var(--ag-input-border-color);\n --ag-input-disabled-background-color: transparent;\n --ag-checkbox-background-color: transparent;\n --ag-checkbox-border-radius: var(--ag-border-radius);\n --ag-checkbox-checked-color: var(--ag-foreground-color);\n --ag-checkbox-unchecked-color: var(--ag-foreground-color);\n --ag-checkbox-indeterminate-color: var(--ag-checkbox-unchecked-color);\n --ag-toggle-button-off-border-color: var(--ag-checkbox-unchecked-color);\n --ag-toggle-button-off-background-color: var(--ag-checkbox-unchecked-color);\n --ag-toggle-button-on-border-color: var(--ag-checkbox-checked-color);\n --ag-toggle-button-on-background-color: var(--ag-checkbox-checked-color);\n --ag-toggle-button-switch-background-color: var(--ag-background-color);\n --ag-toggle-button-switch-border-color: var(--ag-toggle-button-off-border-color);\n --ag-toggle-button-border-width: 1px;\n --ag-toggle-button-height: var(--ag-icon-size);\n --ag-toggle-button-width: calc(var(--ag-toggle-button-height) * 2);\n --ag-input-focus-box-shadow: none;\n --ag-input-focus-border-color: none;\n --ag-minichart-selected-chart-color: var(--ag-checkbox-checked-color);\n --ag-minichart-selected-page-color: var(--ag-checkbox-checked-color);\n --ag-grid-size: 4px;\n --ag-icon-size: 12px;\n --ag-widget-container-horizontal-padding: calc(var(--ag-grid-size) * 1.5);\n --ag-widget-container-vertical-padding: calc(var(--ag-grid-size) * 1.5);\n --ag-widget-horizontal-spacing: calc(var(--ag-grid-size) * 2);\n --ag-widget-vertical-spacing: var(--ag-grid-size);\n --ag-cell-horizontal-padding: calc(var(--ag-grid-size) * 3);\n --ag-cell-widget-spacing: var(--ag-cell-horizontal-padding);\n --ag-row-height: calc(var(--ag-grid-size) * 6 + 1px);\n --ag-header-height: var(--ag-row-height);\n --ag-list-item-height: calc(var(--ag-grid-size) * 5);\n --ag-column-select-indent-size: calc(var(--ag-grid-size) + var(--ag-icon-size));\n --ag-set-filter-indent-size: calc(var(--ag-grid-size) + var(--ag-icon-size));\n --ag-row-group-indent-size: calc(var(--ag-cell-widget-spacing) + var(--ag-icon-size));\n --ag-filter-tool-panel-group-indent: 16px;\n --ag-tab-min-width: 220px;\n --ag-menu-min-width: 181px;\n --ag-side-bar-panel-width: 200px;\n --ag-font-family: 'Helvetica Neue', sans-serif;\n --ag-font-size: 14px;\n --ag-card-radius: var(--ag-border-radius);\n --ag-card-shadow: none;\n --ag-popup-shadow: 5px 5px 10px rgba(0, 0, 0, 0.3);\n }\n\n .ag-root-wrapper,\n .ag-sticky-top,\n .ag-dnd-ghost {\n background-color: var(--ag-background-color);\n }\n\n [class*='ag-theme-'] {\n -webkit-font-smoothing: antialiased;\n font-family: var(--ag-font-family);\n font-size: var(--ag-font-size);\n line-height: normal;\n color: var(--ag-foreground-color);\n }\n\n ag-grid,\n ag-grid-angular,\n ag-grid-ng2,\n ag-grid-polymer,\n ag-grid-aurelia {\n display: block;\n }\n\n .ag-hidden {\n display: none !important;\n }\n\n .ag-invisible {\n visibility: hidden !important;\n }\n\n .ag-no-transition {\n transition: none !important;\n }\n\n .ag-drag-handle {\n cursor: grab;\n }\n\n .ag-column-drop-wrapper {\n display: flex;\n }\n\n .ag-column-drop-horizontal-half-width {\n display: inline-block;\n width: 50% !important;\n }\n\n .ag-unselectable {\n -moz-user-select: none;\n -webkit-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n\n .ag-selectable {\n -moz-user-select: text;\n -webkit-user-select: text;\n -ms-user-select: text;\n user-select: text;\n }\n\n .ag-tab {\n position: relative;\n }\n\n .ag-tab-guard {\n position: absolute;\n width: 0;\n height: 0;\n display: block;\n }\n\n .ag-select-agg-func-popup {\n position: absolute;\n }\n\n .ag-input-wrapper,\n .ag-picker-field-wrapper {\n display: flex;\n flex: 1 1 auto;\n align-items: center;\n line-height: normal;\n position: relative;\n }\n\n .ag-shake-left-to-right {\n animation-direction: alternate;\n animation-duration: 0.2s;\n animation-iteration-count: infinite;\n animation-name: ag-shake-left-to-right;\n }\n\n @keyframes ag-shake-left-to-right {\n from {\n padding-left: 6px;\n padding-right: 2px;\n }\n to {\n padding-left: 2px;\n padding-right: 6px;\n }\n }\n .ag-root-wrapper {\n cursor: default;\n position: relative;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n .ag-root-wrapper.ag-layout-normal {\n height: 100%;\n }\n\n .ag-watermark {\n position: absolute;\n bottom: 20px;\n right: 25px;\n opacity: 0.5;\n transition: opacity 1s ease-out 3s;\n }\n .ag-watermark::before {\n content: '';\n background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+Cjxzdmcgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDIzNSA0MCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3BhY2U9InByZXNlcnZlIiB4bWxuczpzZXJpZj0iaHR0cDovL3d3dy5zZXJpZi5jb20vIiBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjI7Ij4KICAgIDxnIHRyYW5zZm9ybT0ibWF0cml4KDAuNjM1NzIzLDAsMCwwLjYzNTcyMywtNDkyLjkyMSwtMzIzLjYwOCkiPgogICAgICAgIDxwYXRoIGQ9Ik0xMDk5LjQsNTQ5LjRMMTA5OS40LDUzNi45TDEwNzguMSw1MzYuOUwxMDY1LjYsNTQ5LjRMMTA5OS40LDU0OS40WiIgc3R5bGU9ImZpbGw6cmdiKDI0LDI5LDMxKTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgICAgICA8cGF0aCBkPSJNMTEyMy40LDUxOC40TDEwOTYuNyw1MTguNEwxMDg0LjEsNTMwLjlMMTEyMy40LDUzMC45TDExMjMuNCw1MTguNFoiIHN0eWxlPSJmaWxsOnJnYigyNCwyOSwzMSk7ZmlsbC1ydWxlOm5vbnplcm87Ii8+CiAgICAgICAgPHBhdGggZD0iTTEwNTMuMiw1NjEuOUwxMDU5LjYsNTU1LjVMMTA4MS4yLDU1NS41TDEwODEuMiw1NjhMMTA1My4yLDU2OEwxMDUzLjIsNTYxLjlaIiBzdHlsZT0iZmlsbDpyZ2IoMjQsMjksMzEpO2ZpbGwtcnVsZTpub256ZXJvOyIvPgogICAgICAgIDxwYXRoIGQ9Ik0xMDU3LjksNTQzLjNMMTA3MS43LDU0My4zTDEwODQuMyw1MzAuOEwxMDU3LjksNTMwLjhMMTA1Ny45LDU0My4zWiIgc3R5bGU9ImZpbGw6cmdiKDI0LDI5LDMxKTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgICAgICA8cGF0aCBkPSJNMTA0Mi44LDU2MS45TDEwNTMuMiw1NjEuOUwxMDY1LjYsNTQ5LjRMMTA0Mi44LDU0OS40TDEwNDIuOCw1NjEuOVoiIHN0eWxlPSJmaWxsOnJnYigyNCwyOSwzMSk7ZmlsbC1ydWxlOm5vbnplcm87Ii8+CiAgICAgICAgPHBhdGggZD0iTTEwOTYuNyw1MTguNEwxMDkwLjMsNTI0LjhMMTA0OS41LDUyNC44TDEwNDkuNSw1MTIuM0wxMDk2LjcsNTEyLjNMMTA5Ni43LDUxOC40WiIgc3R5bGU9ImZpbGw6cmdiKDI0LDI5LDMxKTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgICAgICA8cGF0aCBkPSJNODI4LjYsNTU5LjdMODA5LDU1OS43TDgwNS42LDU2OC4xTDc5Nyw1NjguMUw4MTUuMSw1MjUuN0w4MjIuNiw1MjUuN0w4NDAuNyw1NjguMUw4MzIsNTY4LjFMODI4LjYsNTU5LjdaTTgyNS45LDU1M0w4MTguOCw1MzUuN0w4MTEuNyw1NTNMODI1LjksNTUzWiIgc3R5bGU9ImZpbGw6cmdiKDI0LDI5LDMxKTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgICAgICA8cGF0aCBkPSJNOTYwLjEsNTQxLjNDOTYyLjYsNTM3LjYgOTY4LjksNTM3LjIgOTcxLjUsNTM3LjJMOTcxLjUsNTQ0LjRDOTY4LjMsNTQ0LjQgOTY1LjEsNTQ0LjUgOTYzLjIsNTQ1LjlDOTYxLjMsNTQ3LjMgOTYwLjMsNTQ5LjIgOTYwLjMsNTUxLjVMOTYwLjMsNTY4LjFMOTUyLjUsNTY4LjFMOTUyLjUsNTM3LjJMOTYwLDUzNy4yTDk2MC4xLDU0MS4zWiIgc3R5bGU9ImZpbGw6cmdiKDI0LDI5LDMxKTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgICAgICA8cmVjdCB4PSI5NzUuOCIgeT0iNTM3LjIiIHdpZHRoPSI3LjgiIGhlaWdodD0iMzAuOSIgc3R5bGU9ImZpbGw6cmdiKDI0LDI5LDMxKTsiLz4KICAgICAgICA8cmVjdCB4PSI5NzUuOCIgeT0iNTIzLjQiIHdpZHRoPSI3LjgiIGhlaWdodD0iOS4yIiBzdHlsZT0iZmlsbDpyZ2IoMjQsMjksMzEpOyIvPgogICAgICAgIDxwYXRoIGQ9Ik0xMDIyLjMsNTIzLjRMMTAyMi4zLDU2OC4xTDEwMTQuOCw1NjguMUwxMDE0LjYsNTYzLjRDMTAxMy41LDU2NSAxMDEyLjEsNTY2LjMgMTAxMC40LDU2Ny4zQzEwMDguNyw1NjguMiAxMDA2LjYsNTY4LjcgMTAwNC4yLDU2OC43QzEwMDIuMSw1NjguNyAxMDAwLjEsNTY4LjMgOTk4LjQsNTY3LjZDOTk2LjYsNTY2LjggOTk1LDU2NS44IDk5My43LDU2NC40Qzk5Mi40LDU2MyA5OTEuMyw1NjEuMyA5OTAuNiw1NTkuNEM5ODkuOCw1NTcuNSA5ODkuNSw1NTUuMyA5ODkuNSw1NTIuOUM5ODkuNSw1NTAuNSA5ODkuOSw1NDguMyA5OTAuNiw1NDYuM0M5OTEuNCw1NDQuMyA5OTIuNCw1NDIuNiA5OTMuNyw1NDEuMkM5OTUsNTM5LjggOTk2LjYsNTM4LjcgOTk4LjQsNTM3LjlDMTAwMC4yLDUzNy4xIDEwMDIuMSw1MzYuNyAxMDA0LjIsNTM2LjdDMTAwNi42LDUzNi43IDEwMDguNiw1MzcuMSAxMDEwLjMsNTM4QzEwMTIsNTM4LjkgMTAxMy40LDU0MC4xIDEwMTQuNSw1NDEuOEwxMDE0LjUsNTIzLjVMMTAyMi4zLDUyMy41TDEwMjIuMyw1MjMuNFpNMTAwNS45LDU2MkMxMDA4LjUsNTYyIDEwMTAuNSw1NjEuMSAxMDEyLjEsNTU5LjRDMTAxMy43LDU1Ny43IDEwMTQuNSw1NTUuNCAxMDE0LjUsNTUyLjZDMTAxNC41LDU0OS44IDEwMTMuNyw1NDcuNiAxMDEyLjEsNTQ1LjhDMTAxMC41LDU0NC4xIDEwMDguNSw1NDMuMiAxMDA1LjksNTQzLjJDMTAwMy40LDU0My4yIDEwMDEuMyw1NDQuMSA5OTkuOCw1NDUuOEM5OTguMiw1NDcuNSA5OTcuNCw1NDkuOCA5OTcuNCw1NTIuNkM5OTcuNCw1NTUuNCA5OTguMiw1NTcuNiA5OTkuOCw1NTkuM0MxMDAxLjQsNTYxLjEgMTAwMy40LDU2MiAxMDA1LjksNTYyIiBzdHlsZT0iZmlsbDpyZ2IoMjQsMjksMzEpO2ZpbGwtcnVsZTpub256ZXJvOyIvPgogICAgICAgIDxwYXRoIGQ9Ik04ODUuOCw1NDQuMkw4NjYuNSw1NDQuMkw4NjYuNSw1NTAuOUw4NzcuNSw1NTAuOUM4NzcuMiw1NTQuMyA4NzUuOSw1NTYuOSA4NzMuNyw1NTlDODcxLjUsNTYxIDg2OC43LDU2MiA4NjUuMSw1NjJDODYzLjEsNTYyIDg2MS4yLDU2MS42IDg1OS42LDU2MC45Qzg1Ny45LDU2MC4yIDg1Ni41LDU1OS4yIDg1NS4zLDU1Ny44Qzg1NC4xLDU1Ni41IDg1My4yLDU1NC45IDg1Mi41LDU1M0M4NTEuOCw1NTEuMSA4NTEuNSw1NDkuMSA4NTEuNSw1NDYuOEM4NTEuNSw1NDQuNSA4NTEuOCw1NDIuNSA4NTIuNSw1NDAuNkM4NTMuMSw1MzguNyA4NTQuMSw1MzcuMiA4NTUuMyw1MzUuOEM4NTYuNSw1MzQuNSA4NTcuOSw1MzMuNSA4NTkuNiw1MzIuN0M4NjEuMyw1MzIgODYzLjEsNTMxLjYgODY1LjIsNTMxLjZDODY5LjQsNTMxLjYgODcyLjYsNTMyLjYgODc0LjgsNTM0LjZMODgwLDUyOS40Qzg3Ni4xLDUyNi40IDg3MS4xLDUyNC44IDg2NS4yLDUyNC44Qzg2MS45LDUyNC44IDg1OC45LDUyNS4zIDg1Ni4yLDUyNi40Qzg1My41LDUyNy41IDg1MS4yLDUyOC45IDg0OS4zLDUzMC44Qzg0Ny40LDUzMi43IDg0NS45LDUzNSA4NDQuOSw1MzcuN0M4NDMuOSw1NDAuNCA4NDMuNCw1NDMuNCA4NDMuNCw1NDYuNkM4NDMuNCw1NDkuOCA4NDMuOSw1NTIuOCA4NDUsNTU1LjVDODQ2LjEsNTU4LjIgODQ3LjUsNTYwLjUgODQ5LjQsNTYyLjRDODUxLjMsNTY0LjMgODUzLjYsNTY1LjggODU2LjMsNTY2LjhDODU5LDU2Ny45IDg2Miw1NjguNCA4NjUuMiw1NjguNEM4NjguNCw1NjguNCA4NzEuMyw1NjcuOSA4NzMuOSw1NjYuOEM4NzYuNSw1NjUuNyA4NzguNyw1NjQuMyA4ODAuNSw1NjIuNEM4ODIuMyw1NjAuNSA4ODMuNyw1NTguMiA4ODQuNyw1NTUuNUM4ODUuNyw1NTIuOCA4ODYuMiw1NDkuOCA4ODYuMiw1NDYuNkw4ODYuMiw1NDUuM0M4ODUuOSw1NDUuMSA4ODUuOCw1NDQuNiA4ODUuOCw1NDQuMiIgc3R5bGU9ImZpbGw6cmdiKDI0LDI5LDMxKTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgICAgICA8cGF0aCBkPSJNOTQ2LjgsNTQ0LjJMOTI3LjUsNTQ0LjJMOTI3LjUsNTUwLjlMOTM4LjUsNTUwLjlDOTM4LjIsNTU0LjMgOTM2LjksNTU2LjkgOTM0LjcsNTU5QzkzMi41LDU2MSA5MjkuNyw1NjIgOTI2LjEsNTYyQzkyNC4xLDU2MiA5MjIuMiw1NjEuNiA5MjAuNiw1NjAuOUM5MTguOSw1NjAuMiA5MTcuNSw1NTkuMiA5MTYuMyw1NTcuOEM5MTUuMSw1NTYuNSA5MTQuMiw1NTQuOSA5MTMuNSw1NTNDOTEyLjgsNTUxLjEgOTEyLjUsNTQ5LjEgOTEyLjUsNTQ2LjhDOTEyLjUsNTQ0LjUgOTEyLjgsNTQyLjUgOTEzLjUsNTQwLjZDOTE0LjEsNTM4LjcgOTE1LjEsNTM3LjIgOTE2LjMsNTM1LjhDOTE3LjUsNTM0LjUgOTE4LjksNTMzLjUgOTIwLjYsNTMyLjdDOTIyLjMsNTMyIDkyNC4xLDUzMS42IDkyNi4yLDUzMS42QzkzMC40LDUzMS42IDkzMy42LDUzMi42IDkzNS44LDUzNC42TDk0MSw1MjkuNEM5MzcuMSw1MjYuNCA5MzIuMSw1MjQuOCA5MjYuMiw1MjQuOEM5MjIuOSw1MjQuOCA5MTkuOSw1MjUuMyA5MTcuMiw1MjYuNEM5MTQuNSw1MjcuNSA5MTIuMiw1MjguOSA5MTAuMyw1MzAuOEM5MDguNCw1MzIuNyA5MDYuOSw1MzUgOTA1LjksNTM3LjdDOTA0LjksNTQwLjQgOTA0LjQsNTQzLjQgOTA0LjQsNTQ2LjZDOTA0LjQsNTQ5LjggOTA0LjksNTUyLjggOTA2LDU1NS41QzkwNy4xLDU1OC4yIDkwOC41LDU2MC41IDkxMC40LDU2Mi40QzkxMi4zLDU2NC4zIDkxNC42LDU2NS44IDkxNy4zLDU2Ni44QzkyMCw1NjcuOSA5MjMsNTY4LjQgOTI2LjIsNTY4LjRDOTI5LjQsNTY4LjQgOTMyLjMsNTY3LjkgOTM0LjksNTY2LjhDOTM3LjUsNTY1LjcgOTM5LjcsNTY0LjMgOTQxLjUsNTYyLjRDOTQzLjMsNTYwLjUgOTQ0LjcsNTU4LjIgOTQ1LjcsNTU1LjVDOTQ2LjcsNTUyLjggOTQ3LjIsNTQ5LjggOTQ3LjIsNTQ2LjZMOTQ3LjIsNTQ1LjNDOTQ2LjksNTQ1LjEgOTQ2LjgsNTQ0LjYgOTQ2LjgsNTQ0LjIiIHN0eWxlPSJmaWxsOnJnYigyNCwyOSwzMSk7ZmlsbC1ydWxlOm5vbnplcm87Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);\n background-repeat: no-repeat;\n background-size: 170px 40px;\n display: block;\n height: 40px;\n width: 170px;\n opacity: 0.5;\n }\n\n .ag-watermark-text {\n opacity: 0.5;\n font-weight: bold;\n font-family: Impact, sans-serif;\n font-size: 19px;\n padding-left: 0.7rem;\n }\n\n .ag-root-wrapper-body {\n display: flex;\n flex-direction: row;\n }\n .ag-root-wrapper-body.ag-layout-normal {\n flex: 1 1 auto;\n height: 0;\n min-height: 0;\n }\n\n .ag-root {\n position: relative;\n display: flex;\n flex-direction: column;\n }\n .ag-root.ag-layout-normal,\n .ag-root.ag-layout-auto-height {\n overflow: hidden;\n flex: 1 1 auto;\n width: 0;\n }\n .ag-root.ag-layout-normal {\n height: 100%;\n }\n\n .ag-header-viewport,\n .ag-floating-top-viewport,\n .ag-body-viewport,\n .ag-center-cols-viewport,\n .ag-floating-bottom-viewport,\n .ag-body-horizontal-scroll-viewport,\n .ag-body-vertical-scroll-viewport,\n .ag-virtual-list-viewport,\n .ag-sticky-top-viewport {\n position: relative;\n height: 100%;\n min-width: 0px;\n overflow: hidden;\n flex: 1 1 auto;\n }\n\n .ag-body-viewport {\n display: flex;\n }\n .ag-body-viewport.ag-layout-normal {\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n }\n\n .ag-center-cols-viewport {\n width: 100%;\n overflow-x: auto;\n }\n\n .ag-body-horizontal-scroll-viewport {\n overflow-x: scroll;\n }\n\n .ag-body-vertical-scroll-viewport {\n overflow-y: scroll;\n }\n\n .ag-virtual-list-viewport {\n overflow: auto;\n width: 100%;\n }\n\n .ag-header-container,\n .ag-floating-top-container,\n .ag-body-container,\n .ag-pinned-right-cols-container,\n .ag-center-cols-container,\n .ag-pinned-left-cols-container,\n .ag-floating-bottom-container,\n .ag-body-horizontal-scroll-container,\n .ag-body-vertical-scroll-container,\n .ag-full-width-container,\n .ag-floating-bottom-full-width-container,\n .ag-virtual-list-container,\n .ag-sticky-top-container {\n position: relative;\n }\n\n .ag-header-container,\n .ag-floating-top-container,\n .ag-floating-bottom-container,\n .ag-sticky-top-container {\n height: 100%;\n white-space: nowrap;\n }\n\n .ag-center-cols-container {\n display: block;\n }\n\n .ag-pinned-right-cols-container {\n display: block;\n }\n\n .ag-body-horizontal-scroll-container {\n height: 100%;\n }\n\n .ag-body-vertical-scroll-container {\n width: 100%;\n }\n\n .ag-full-width-container,\n .ag-floating-top-full-width-container,\n .ag-floating-bottom-full-width-container,\n .ag-sticky-top-full-width-container {\n position: absolute;\n top: 0px;\n left: 0px;\n pointer-events: none;\n }\n\n .ag-full-width-container {\n width: 100%;\n }\n\n .ag-floating-bottom-full-width-container,\n .ag-floating-top-full-width-container {\n display: inline-block;\n overflow: hidden;\n height: 100%;\n width: 100%;\n }\n\n .ag-virtual-list-container {\n overflow: hidden;\n }\n\n .ag-center-cols-clipper {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n min-height: 100%;\n transform: translate3d(0, 0, 0);\n }\n\n .ag-body {\n position: relative;\n display: flex;\n flex: 1 1 auto;\n flex-direction: row !important;\n min-height: 0;\n }\n\n .ag-body-clipper {\n overflow: hidden;\n min-width: 0px;\n flex: 1 1 auto;\n height: 100%;\n transform: translate3d(0, 0, 0);\n }\n\n .ag-body-horizontal-scroll,\n .ag-body-vertical-scroll {\n min-height: 0;\n min-width: 0;\n display: flex;\n position: relative;\n }\n .ag-body-horizontal-scroll.ag-scrollbar-invisible,\n .ag-body-vertical-scroll.ag-scrollbar-invisible {\n position: absolute;\n bottom: 0;\n }\n .ag-body-horizontal-scroll.ag-scrollbar-invisible.ag-apple-scrollbar,\n .ag-body-vertical-scroll.ag-scrollbar-invisible.ag-apple-scrollbar {\n opacity: 0;\n transition: opacity 400ms;\n visibility: hidden;\n }\n .ag-body-horizontal-scroll.ag-scrollbar-invisible.ag-apple-scrollbar.ag-scrollbar-scrolling,\n .ag-body-horizontal-scroll.ag-scrollbar-invisible.ag-apple-scrollbar.ag-scrollbar-active,\n .ag-body-vertical-scroll.ag-scrollbar-invisible.ag-apple-scrollbar.ag-scrollbar-scrolling,\n .ag-body-vertical-scroll.ag-scrollbar-invisible.ag-apple-scrollbar.ag-scrollbar-active {\n visibility: visible;\n opacity: 1;\n }\n\n .ag-body-horizontal-scroll {\n width: 100%;\n }\n .ag-body-horizontal-scroll.ag-scrollbar-invisible {\n left: 0;\n right: 0;\n }\n\n .ag-body-vertical-scroll {\n height: 100%;\n }\n .ag-body-vertical-scroll.ag-scrollbar-invisible {\n top: 0;\n z-index: 10;\n }\n .ag-ltr .ag-body-vertical-scroll.ag-scrollbar-invisible {\n right: 0;\n }\n .ag-rtl .ag-body-vertical-scroll.ag-scrollbar-invisible {\n left: 0;\n }\n\n .ag-force-vertical-scroll {\n overflow-y: scroll !important;\n }\n\n .ag-horizontal-left-spacer,\n .ag-horizontal-right-spacer {\n height: 100%;\n min-width: 0;\n overflow-x: scroll;\n }\n .ag-horizontal-left-spacer.ag-scroller-corner,\n .ag-horizontal-right-spacer.ag-scroller-corner {\n overflow-x: hidden;\n }\n\n .ag-header,\n .ag-pinned-left-header,\n .ag-pinned-right-header {\n display: inline-block;\n overflow: hidden;\n position: relative;\n }\n\n .ag-header-cell-sortable {\n cursor: pointer;\n }\n\n .ag-header {\n display: flex;\n width: 100%;\n white-space: nowrap;\n }\n\n .ag-pinned-left-header {\n height: 100%;\n }\n\n .ag-pinned-right-header {\n height: 100%;\n }\n\n .ag-header-row {\n position: absolute;\n overflow: hidden;\n }\n\n .ag-header-cell {\n display: inline-flex;\n align-items: center;\n position: absolute;\n height: 100%;\n overflow: hidden;\n }\n\n .ag-header-cell.ag-header-active .ag-header-cell-menu-button {\n opacity: 1;\n }\n\n .ag-header-cell-menu-button:not(.ag-header-menu-always-show) {\n transition: opacity 0.2s;\n opacity: 0;\n }\n\n .ag-header-group-cell-label,\n .ag-header-cell-label {\n display: flex;\n flex: 1 1 auto;\n overflow: hidden;\n align-items: center;\n text-overflow: ellipsis;\n align-self: stretch;\n }\n\n .ag-header-cell-text {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .ag-header-cell:not(.ag-header-cell-auto-height) .ag-header-cell-comp-wrapper {\n height: 100%;\n display: flex;\n align-items: center;\n }\n\n .ag-header-cell-comp-wrapper {\n width: 100%;\n overflow: hidden;\n }\n\n .ag-header-cell-wrap-text .ag-header-cell-comp-wrapper {\n white-space: normal;\n }\n\n .ag-right-aligned-header .ag-header-cell-label {\n flex-direction: row-reverse;\n }\n\n .ag-header-group-text {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .ag-header-cell-resize {\n position: absolute;\n z-index: 2;\n height: 100%;\n width: 8px;\n top: 0;\n cursor: ew-resize;\n }\n .ag-ltr .ag-header-cell-resize {\n right: -4px;\n }\n .ag-rtl .ag-header-cell-resize {\n left: -4px;\n }\n\n .ag-pinned-left-header .ag-header-cell-resize {\n right: -4px;\n }\n\n .ag-pinned-right-header .ag-header-cell-resize {\n left: -4px;\n }\n\n .ag-header-select-all {\n display: flex;\n }\n\n .ag-column-moving .ag-cell {\n transition: left 0.2s;\n }\n .ag-column-moving .ag-header-cell {\n transition: left 0.2s;\n }\n .ag-column-moving .ag-header-group-cell {\n transition:\n left 0.2s,\n width 0.2s;\n }\n\n .ag-column-panel {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n flex: 1 1 auto;\n }\n\n .ag-column-select {\n position: relative;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n flex: 3 1 0px;\n }\n\n .ag-column-select-header {\n position: relative;\n display: flex;\n flex: none;\n }\n\n .ag-column-select-header-icon {\n position: relative;\n }\n\n .ag-column-select-header-filter-wrapper {\n flex: 1 1 auto;\n }\n\n .ag-column-select-header-filter {\n width: 100%;\n }\n\n .ag-column-select-list {\n flex: 1 1 0px;\n overflow: hidden;\n }\n\n .ag-column-drop {\n position: relative;\n display: inline-flex;\n align-items: center;\n overflow: auto;\n width: 100%;\n }\n\n .ag-column-drop-list {\n display: flex;\n align-items: center;\n }\n\n .ag-column-drop-cell {\n position: relative;\n display: flex;\n align-items: center;\n }\n\n .ag-column-drop-cell-text {\n overflow: hidden;\n flex: 1 1 auto;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .ag-column-drop-vertical {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n align-items: stretch;\n flex: 1 1 0px;\n }\n\n .ag-column-drop-vertical-title-bar {\n display: flex;\n align-items: center;\n flex: none;\n }\n\n .ag-column-drop-vertical-list {\n position: relative;\n align-items: stretch;\n flex-grow: 1;\n flex-direction: column;\n overflow-x: auto;\n }\n .ag-column-drop-vertical-list > * {\n flex: none;\n }\n\n .ag-column-drop-empty .ag-column-drop-vertical-list {\n overflow: hidden;\n }\n\n .ag-column-drop-vertical-empty-message {\n display: block;\n }\n\n .ag-column-drop.ag-column-drop-horizontal {\n white-space: nowrap;\n overflow: hidden;\n }\n\n .ag-column-drop-cell-button {\n cursor: pointer;\n }\n\n .ag-filter-toolpanel {\n flex: 1 1 0px;\n min-width: 0;\n }\n\n .ag-filter-toolpanel-header {\n position: relative;\n }\n\n .ag-filter-toolpanel-header,\n .ag-filter-toolpanel-search {\n display: flex;\n align-items: center;\n }\n .ag-filter-toolpanel-header > *,\n .ag-filter-toolpanel-search > * {\n display: flex;\n align-items: center;\n }\n\n .ag-filter-apply-panel {\n display: flex;\n justify-content: flex-end;\n overflow: hidden;\n }\n\n .ag-row-animation .ag-row {\n transition:\n transform 0.4s,\n top 0.4s,\n background-color 0.1s,\n opacity 0.2s;\n }\n\n .ag-row-animation .ag-row.ag-after-created {\n transition:\n transform 0.4s,\n top 0.4s,\n height 0.4s,\n background-color 0.1s,\n opacity 0.2s;\n }\n\n .ag-row-no-animation .ag-row {\n transition: background-color 0.1s;\n }\n\n .ag-row {\n white-space: nowrap;\n width: 100%;\n }\n\n .ag-row-loading {\n display: flex;\n align-items: center;\n }\n\n .ag-row-position-absolute {\n position: absolute;\n }\n\n .ag-row-position-relative {\n position: relative;\n }\n\n .ag-full-width-row {\n overflow: hidden;\n pointer-events: all;\n }\n\n .ag-row-inline-editing {\n z-index: 1;\n }\n\n .ag-row-dragging {\n z-index: 2;\n }\n\n .ag-stub-cell {\n display: flex;\n align-items: center;\n }\n\n .ag-cell {\n display: inline-block;\n position: absolute;\n white-space: nowrap;\n height: 100%;\n }\n\n .ag-cell-value {\n flex: 1 1 auto;\n }\n\n .ag-cell-value,\n .ag-group-value {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .ag-cell-wrap-text {\n white-space: normal;\n word-break: break-all;\n }\n\n .ag-cell-wrapper {\n display: flex;\n align-items: center;\n }\n .ag-cell-wrapper.ag-row-group {\n align-items: flex-start;\n }\n\n .ag-sparkline-wrapper {\n position: absolute;\n height: 100%;\n width: 100%;\n left: 0;\n top: 0;\n }\n\n .ag-full-width-row .ag-cell-wrapper.ag-row-group {\n height: 100%;\n align-items: center;\n }\n\n .ag-cell-inline-editing {\n z-index: 1;\n }\n .ag-cell-inline-editing .ag-cell-wrapper,\n .ag-cell-inline-editing .ag-cell-edit-wrapper,\n .ag-cell-inline-editing .ag-cell-editor,\n .ag-cell-inline-editing .ag-cell-editor .ag-wrapper,\n .ag-cell-inline-editing .ag-cell-editor input {\n height: 100%;\n width: 100%;\n line-height: normal;\n }\n\n .ag-cell .ag-icon {\n display: inline-block;\n vertical-align: middle;\n }\n\n .ag-set-filter-item {\n display: flex;\n align-items: center;\n height: 100%;\n }\n\n .ag-set-filter-item-checkbox {\n display: flex;\n overflow: hidden;\n }\n\n .ag-set-filter-group-icons {\n display: block;\n }\n .ag-set-filter-group-icons > * {\n cursor: pointer;\n }\n\n .ag-filter-body-wrapper {\n display: flex;\n flex-direction: column;\n }\n\n .ag-filter-filter {\n flex: 1 1 0px;\n }\n\n .ag-filter-condition {\n display: flex;\n justify-content: center;\n }\n\n .ag-floating-filter-body {\n position: relative;\n display: flex;\n flex: 1 1 auto;\n height: 100%;\n }\n\n .ag-floating-filter-full-body {\n display: flex;\n flex: 1 1 auto;\n height: 100%;\n width: 100%;\n align-items: center;\n overflow: hidden;\n }\n\n .ag-floating-filter-full-body > div {\n flex: 1 1 auto;\n }\n\n .ag-floating-filter-input {\n align-items: center;\n display: flex;\n width: 100%;\n }\n .ag-floating-filter-input > * {\n flex: 1 1 auto;\n }\n\n .ag-floating-filter-button {\n display: flex;\n flex: none;\n }\n\n .ag-dnd-ghost {\n position: absolute;\n display: inline-flex;\n align-items: center;\n cursor: move;\n white-space: nowrap;\n z-index: 9999;\n }\n\n .ag-overlay {\n height: 100%;\n left: 0;\n pointer-events: none;\n position: absolute;\n top: 0;\n width: 100%;\n }\n\n .ag-overlay-panel {\n display: flex;\n height: 100%;\n width: 100%;\n }\n\n .ag-overlay-wrapper {\n display: flex;\n flex: none;\n width: 100%;\n height: 100%;\n align-items: center;\n justify-content: center;\n text-align: center;\n }\n\n .ag-overlay-loading-wrapper {\n pointer-events: all;\n }\n\n .ag-popup-child {\n z-index: 5;\n top: 0;\n }\n\n .ag-popup-editor {\n position: absolute;\n user-select: none;\n z-index: 1;\n }\n\n .ag-large-text-input {\n display: block;\n }\n\n .ag-virtual-list-item {\n position: absolute;\n width: 100%;\n }\n\n .ag-floating-top {\n overflow: hidden;\n white-space: nowrap;\n width: 100%;\n position: relative;\n display: flex;\n }\n\n .ag-pinned-left-floating-top {\n display: inline-block;\n overflow: hidden;\n position: relative;\n min-width: 0px;\n }\n\n .ag-pinned-right-floating-top {\n display: inline-block;\n overflow: hidden;\n position: relative;\n min-width: 0px;\n }\n\n .ag-floating-bottom {\n overflow: hidden;\n white-space: nowrap;\n width: 100%;\n position: relative;\n display: flex;\n }\n\n .ag-pinned-left-floating-bottom {\n display: inline-block;\n overflow: hidden;\n position: relative;\n min-width: 0px;\n }\n\n .ag-pinned-right-floating-bottom {\n display: inline-block;\n overflow: hidden;\n position: relative;\n min-width: 0px;\n }\n\n .ag-sticky-top {\n position: absolute;\n display: flex;\n width: 100%;\n }\n\n .ag-pinned-left-sticky-top,\n .ag-pinned-right-sticky-top {\n position: relative;\n height: 100%;\n overflow: hidden;\n }\n\n .ag-sticky-top-full-width-container {\n overflow: hidden;\n width: 100%;\n height: 100%;\n }\n\n .ag-dialog,\n .ag-panel {\n display: flex;\n flex-direction: column;\n position: relative;\n overflow: hidden;\n }\n\n .ag-panel-title-bar {\n display: flex;\n flex: none;\n align-items: center;\n cursor: default;\n }\n\n .ag-panel-title-bar-title {\n flex: 1 1 auto;\n }\n\n .ag-panel-title-bar-buttons {\n display: flex;\n }\n\n .ag-panel-title-bar-button {\n cursor: pointer;\n }\n\n .ag-panel-content-wrapper {\n display: flex;\n flex: 1 1 auto;\n position: relative;\n overflow: hidden;\n }\n\n .ag-dialog {\n position: absolute;\n }\n\n .ag-resizer {\n position: absolute;\n pointer-events: none;\n user-select: none;\n z-index: 1;\n }\n .ag-resizer.ag-resizer-topLeft {\n top: 0;\n left: 0;\n height: 5px;\n width: 5px;\n cursor: nwse-resize;\n }\n .ag-resizer.ag-resizer-top {\n top: 0;\n left: 5px;\n right: 5px;\n height: 5px;\n cursor: ns-resize;\n }\n .ag-resizer.ag-resizer-topRight {\n top: 0;\n right: 0;\n height: 5px;\n width: 5px;\n cursor: nesw-resize;\n }\n .ag-resizer.ag-resizer-right {\n top: 5px;\n right: 0;\n bottom: 5px;\n width: 5px;\n cursor: ew-resize;\n }\n .ag-resizer.ag-resizer-bottomRight {\n bottom: 0;\n right: 0;\n height: 5px;\n width: 5px;\n cursor: nwse-resize;\n }\n .ag-resizer.ag-resizer-bottom {\n bottom: 0;\n left: 5px;\n right: 5px;\n height: 5px;\n cursor: ns-resize;\n }\n .ag-resizer.ag-resizer-bottomLeft {\n bottom: 0;\n left: 0;\n height: 5px;\n width: 5px;\n cursor: nesw-resize;\n }\n .ag-resizer.ag-resizer-left {\n left: 0;\n top: 5px;\n bottom: 5px;\n width: 5px;\n cursor: ew-resize;\n }\n\n .ag-tooltip {\n position: absolute;\n pointer-events: none;\n z-index: 99999;\n }\n\n .ag-tooltip-custom {\n position: absolute;\n pointer-events: none;\n z-index: 99999;\n }\n\n .ag-value-slide-out {\n margin-right: 5px;\n opacity: 1;\n transition:\n opacity 3s,\n margin-right 3s;\n transition-timing-function: linear;\n }\n\n .ag-value-slide-out-end {\n margin-right: 10px;\n opacity: 0;\n }\n\n .ag-opacity-zero {\n opacity: 0 !important;\n }\n\n .ag-menu {\n max-height: 100%;\n overflow-y: auto;\n position: absolute;\n user-select: none;\n }\n\n .ag-menu-column-select-wrapper {\n height: 265px;\n overflow: auto;\n }\n .ag-menu-column-select-wrapper .ag-column-select {\n height: 100%;\n }\n\n .ag-menu-list {\n display: table;\n width: 100%;\n }\n\n .ag-menu-option,\n .ag-menu-separator {\n display: table-row;\n }\n\n .ag-menu-option-part,\n .ag-menu-separator-part {\n display: table-cell;\n vertical-align: middle;\n }\n\n .ag-menu-option-text {\n white-space: nowrap;\n }\n\n .ag-compact-menu-option {\n width: 100%;\n display: flex;\n flex-wrap: nowrap;\n }\n\n .ag-compact-menu-option-text {\n white-space: nowrap;\n flex: 1 1 auto;\n }\n\n .ag-rich-select {\n cursor: default;\n outline: none;\n }\n\n .ag-rich-select-value {\n display: flex;\n align-items: center;\n }\n\n .ag-rich-select-value-icon {\n flex: 1 1 auto;\n order: 1;\n }\n .ag-ltr .ag-rich-select-value-icon {\n text-align: right;\n }\n .ag-rtl .ag-rich-select-value-icon {\n text-align: left;\n }\n\n .ag-rich-select-list {\n position: relative;\n }\n\n .ag-rich-select-virtual-list-item {\n display: flex;\n }\n\n .ag-rich-select-row {\n display: flex;\n flex: 1 1 auto;\n align-items: center;\n white-space: nowrap;\n }\n\n .ag-paging-panel {\n align-items: center;\n display: flex;\n justify-content: flex-end;\n }\n\n .ag-paging-page-summary-panel {\n display: flex;\n align-items: center;\n }\n\n .ag-paging-button {\n position: relative;\n }\n\n .ag-disabled .ag-paging-page-summary-panel {\n pointer-events: none;\n }\n\n .ag-tool-panel-wrapper {\n display: flex;\n overflow-y: auto;\n overflow-x: hidden;\n cursor: default;\n user-select: none;\n }\n\n .ag-column-select-column,\n .ag-column-select-column-group,\n .ag-select-agg-func-item {\n position: relative;\n align-items: center;\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n text-overflow: ellipsis;\n white-space: nowrap;\n height: 100%;\n }\n .ag-column-select-column > *,\n .ag-column-select-column-group > *,\n .ag-select-agg-func-item > * {\n flex: none;\n }\n\n .ag-column-select-checkbox {\n display: flex;\n }\n\n .ag-tool-panel-horizontal-resize {\n cursor: ew-resize;\n height: 100%;\n position: absolute;\n top: 0;\n width: 5px;\n z-index: 1;\n }\n\n .ag-ltr .ag-side-bar-left .ag-tool-panel-horizontal-resize {\n right: -3px;\n }\n .ag-rtl .ag-side-bar-left .ag-tool-panel-horizontal-resize {\n left: -3px;\n }\n\n .ag-ltr .ag-side-bar-right .ag-tool-panel-horizontal-resize {\n left: -3px;\n }\n .ag-rtl .ag-side-bar-right .ag-tool-panel-horizontal-resize {\n right: -3px;\n }\n\n .ag-details-row {\n width: 100%;\n }\n\n .ag-details-row-fixed-height {\n height: 100%;\n }\n\n .ag-details-grid {\n width: 100%;\n }\n\n .ag-details-grid-fixed-height {\n height: 100%;\n }\n\n .ag-header-group-cell {\n display: flex;\n align-items: center;\n height: 100%;\n position: absolute;\n }\n\n .ag-cell-label-container {\n display: flex;\n justify-content: space-between;\n flex-direction: row-reverse;\n align-items: center;\n height: 100%;\n width: 100%;\n overflow: hidden;\n padding: 5px 0px;\n }\n\n .ag-right-aligned-header .ag-cell-label-container {\n flex-direction: row;\n }\n\n .ag-side-bar {\n display: flex;\n flex-direction: row-reverse;\n }\n\n .ag-side-bar-left {\n order: -1;\n flex-direction: row;\n }\n\n .ag-side-button-button {\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n flex-wrap: nowrap;\n white-space: nowrap;\n outline: none;\n cursor: pointer;\n }\n\n .ag-side-button-label {\n writing-mode: vertical-lr;\n }\n\n .ag-status-bar {\n display: flex;\n justify-content: space-between;\n overflow: hidden;\n }\n\n .ag-status-panel {\n display: inline-flex;\n }\n\n .ag-status-name-value {\n white-space: nowrap;\n }\n\n .ag-status-bar-left {\n display: inline-flex;\n }\n\n .ag-status-bar-center {\n display: inline-flex;\n }\n\n .ag-status-bar-right {\n display: inline-flex;\n }\n\n .ag-icon {\n display: block;\n speak: none;\n }\n\n .ag-group {\n position: relative;\n width: 100%;\n }\n\n .ag-group-title-bar {\n display: flex;\n align-items: center;\n }\n\n .ag-group-title {\n display: block;\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n .ag-group-title-bar .ag-group-title {\n cursor: default;\n }\n\n .ag-group-toolbar {\n display: flex;\n align-items: center;\n }\n\n .ag-group-container {\n display: flex;\n }\n\n .ag-disabled .ag-group-container {\n pointer-events: none;\n }\n\n .ag-group-container-horizontal {\n flex-direction: row;\n flex-wrap: wrap;\n }\n\n .ag-group-container-vertical {\n flex-direction: column;\n }\n\n .ag-column-group-icons {\n display: block;\n }\n .ag-column-group-icons > * {\n cursor: pointer;\n }\n\n .ag-group-item-alignment-stretch .ag-group-item {\n align-items: stretch;\n }\n\n .ag-group-item-alignment-start .ag-group-item {\n align-items: flex-start;\n }\n\n .ag-group-item-alignment-end .ag-group-item {\n align-items: flex-end;\n }\n\n .ag-toggle-button-icon {\n transition: right 0.3s;\n position: absolute;\n top: -1px;\n }\n\n .ag-input-field,\n .ag-select {\n display: flex;\n flex-direction: row;\n align-items: center;\n }\n\n .ag-input-field-input {\n flex: 1 1 auto;\n }\n\n .ag-floating-filter-input .ag-input-field-input[type='date'] {\n width: 1px;\n }\n\n .ag-range-field {\n display: flex;\n align-items: center;\n }\n\n .ag-angle-select {\n display: flex;\n align-items: center;\n }\n\n .ag-angle-select-wrapper {\n display: flex;\n }\n\n .ag-angle-select-parent-circle {\n display: block;\n position: relative;\n }\n\n .ag-angle-select-child-circle {\n position: absolute;\n }\n\n .ag-slider-wrapper {\n display: flex;\n }\n .ag-slider-wrapper .ag-input-field {\n flex: 1 1 auto;\n }\n\n .ag-picker-field-display {\n flex: 1 1 auto;\n }\n\n .ag-picker-field {\n display: flex;\n align-items: center;\n }\n\n .ag-picker-field-icon {\n display: flex;\n border: 0;\n padding: 0;\n margin: 0;\n cursor: pointer;\n }\n\n .ag-picker-field-wrapper {\n overflow: hidden;\n }\n\n .ag-label-align-right .ag-label {\n order: 1;\n }\n .ag-label-align-right > * {\n flex: none;\n }\n\n .ag-label-align-top {\n flex-direction: column;\n align-items: flex-start;\n }\n .ag-label-align-top > * {\n align-self: stretch;\n }\n\n .ag-label-ellipsis {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n flex: 1;\n }\n\n .ag-color-panel {\n width: 100%;\n display: flex;\n flex-direction: column;\n text-align: center;\n }\n\n .ag-spectrum-color {\n flex: 1 1 auto;\n position: relative;\n overflow: hidden;\n cursor: default;\n }\n\n .ag-spectrum-fill {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n\n .ag-spectrum-val {\n cursor: pointer;\n }\n\n .ag-spectrum-dragger {\n position: absolute;\n pointer-events: none;\n cursor: pointer;\n }\n\n .ag-spectrum-hue {\n cursor: default;\n background: linear-gradient(\n to left,\n #ff0000 3%,\n #ffff00 17%,\n #00ff00 33%,\n #00ffff 50%,\n #0000ff 67%,\n #ff00ff 83%,\n #ff0000 100%\n );\n }\n\n .ag-spectrum-alpha {\n cursor: default;\n }\n\n .ag-spectrum-hue-background {\n width: 100%;\n height: 100%;\n }\n\n .ag-spectrum-alpha-background {\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0), rgb(0, 0, 0));\n width: 100%;\n height: 100%;\n }\n\n .ag-spectrum-tool {\n cursor: pointer;\n }\n\n .ag-spectrum-slider {\n position: absolute;\n pointer-events: none;\n }\n\n .ag-recent-colors {\n display: flex;\n }\n\n .ag-recent-color {\n cursor: pointer;\n }\n\n .ag-ltr .ag-column-select-indent-1 {\n padding-left: 20px;\n }\n .ag-rtl .ag-column-select-indent-1 {\n padding-right: 20px;\n }\n\n .ag-ltr .ag-set-filter-indent-1 {\n padding-left: 20px;\n }\n .ag-rtl .ag-set-filter-indent-1 {\n padding-right: 20px;\n }\n\n .ag-ltr .ag-row-group-indent-1 {\n padding-left: 20px;\n }\n .ag-rtl .ag-row-group-indent-1 {\n padding-right: 20px;\n }\n\n .ag-ltr .ag-column-select-indent-2 {\n padding-left: 40px;\n }\n .ag-rtl .ag-column-select-indent-2 {\n padding-right: 40px;\n }\n\n .ag-ltr .ag-set-filter-indent-2 {\n padding-left: 40px;\n }\n .ag-rtl .ag-set-filter-indent-2 {\n padding-right: 40px;\n }\n\n .ag-ltr .ag-row-group-indent-2 {\n padding-left: 40px;\n }\n .ag-rtl .ag-row-group-indent-2 {\n padding-right: 40px;\n }\n\n .ag-ltr .ag-column-select-indent-3 {\n padding-left: 60px;\n }\n .ag-rtl .ag-column-select-indent-3 {\n padding-right: 60px;\n }\n\n .ag-ltr .ag-set-filter-indent-3 {\n padding-left: 60px;\n }\n .ag-rtl .ag-set-filter-indent-3 {\n padding-right: 60px;\n }\n\n .ag-ltr .ag-row-group-indent-3 {\n padding-left: 60px;\n }\n .ag-rtl .ag-row-group-indent-3 {\n padding-right: 60px;\n }\n\n .ag-ltr .ag-column-select-indent-4 {\n padding-left: 80px;\n }\n .ag-rtl .ag-column-select-indent-4 {\n padding-right: 80px;\n }\n\n .ag-ltr .ag-set-filter-indent-4 {\n padding-left: 80px;\n }\n .ag-rtl .ag-set-filter-indent-4 {\n padding-right: 80px;\n }\n\n .ag-ltr .ag-row-group-indent-4 {\n padding-left: 80px;\n }\n .ag-rtl .ag-row-group-indent-4 {\n padding-right: 80px;\n }\n\n .ag-ltr .ag-column-select-indent-5 {\n padding-left: 100px;\n }\n .ag-rtl .ag-column-select-indent-5 {\n padding-right: 100px;\n }\n\n .ag-ltr .ag-set-filter-indent-5 {\n padding-left: 100px;\n }\n .ag-rtl .ag-set-filter-indent-5 {\n padding-right: 100px;\n }\n\n .ag-ltr .ag-row-group-indent-5 {\n padding-left: 100px;\n }\n .ag-rtl .ag-row-group-indent-5 {\n padding-right: 100px;\n }\n\n .ag-ltr .ag-column-select-indent-6 {\n padding-left: 120px;\n }\n .ag-rtl .ag-column-select-indent-6 {\n padding-right: 120px;\n }\n\n .ag-ltr .ag-set-filter-indent-6 {\n padding-left: 120px;\n }\n .ag-rtl .ag-set-filter-indent-6 {\n padding-right: 120px;\n }\n\n .ag-ltr .ag-row-group-indent-6 {\n padding-left: 120px;\n }\n .ag-rtl .ag-row-group-indent-6 {\n padding-right: 120px;\n }\n\n .ag-ltr .ag-column-select-indent-7 {\n padding-left: 140px;\n }\n .ag-rtl .ag-column-select-indent-7 {\n padding-right: 140px;\n }\n\n .ag-ltr .ag-set-filter-indent-7 {\n padding-left: 140px;\n }\n .ag-rtl .ag-set-filter-indent-7 {\n padding-right: 140px;\n }\n\n .ag-ltr .ag-row-group-indent-7 {\n padding-left: 140px;\n }\n .ag-rtl .ag-row-group-indent-7 {\n padding-right: 140px;\n }\n\n .ag-ltr .ag-column-select-indent-8 {\n padding-left: 160px;\n }\n .ag-rtl .ag-column-select-indent-8 {\n padding-right: 160px;\n }\n\n .ag-ltr .ag-set-filter-indent-8 {\n padding-left: 160px;\n }\n .ag-rtl .ag-set-filter-indent-8 {\n padding-right: 160px;\n }\n\n .ag-ltr .ag-row-group-indent-8 {\n padding-left: 160px;\n }\n .ag-rtl .ag-row-group-indent-8 {\n padding-right: 160px;\n }\n\n .ag-ltr .ag-column-select-indent-9 {\n padding-left: 180px;\n }\n .ag-rtl .ag-column-select-indent-9 {\n padding-right: 180px;\n }\n\n .ag-ltr .ag-set-filter-indent-9 {\n padding-left: 180px;\n }\n .ag-rtl .ag-set-filter-indent-9 {\n padding-right: 180px;\n }\n\n .ag-ltr .ag-row-group-indent-9 {\n padding-left: 180px;\n }\n .ag-rtl .ag-row-group-indent-9 {\n padding-right: 180px;\n }\n\n .ag-ltr {\n direction: ltr;\n }\n .ag-ltr .ag-body,\n .ag-ltr .ag-floating-top,\n .ag-ltr .ag-floating-bottom,\n .ag-ltr .ag-header,\n .ag-ltr .ag-body-viewport,\n .ag-ltr .ag-body-horizontal-scroll {\n flex-direction: row;\n }\n\n .ag-rtl {\n direction: rtl;\n }\n .ag-rtl .ag-body,\n .ag-rtl .ag-floating-top,\n .ag-rtl .ag-floating-bottom,\n .ag-rtl .ag-header,\n .ag-rtl .ag-body-viewport,\n .ag-rtl .ag-body-horizontal-scroll {\n flex-direction: row-reverse;\n }\n .ag-rtl .ag-icon-contracted,\n .ag-rtl .ag-icon-expanded,\n .ag-rtl .ag-icon-tree-closed {\n display: block;\n transform: rotate(180deg);\n }\n\n .ag-body .ag-body-viewport {\n -webkit-overflow-scrolling: touch;\n }\n\n .ag-layout-print.ag-body {\n display: block;\n height: unset;\n }\n .ag-layout-print.ag-body-clipper {\n height: unset;\n }\n .ag-layout-print.ag-root-wrapper {\n display: inline-flex;\n }\n .ag-layout-print .ag-center-cols-clipper {\n min-width: 100%;\n }\n .ag-layout-print .ag-body-vertical-scroll {\n display: none;\n }\n .ag-layout-print .ag-body-horizontal-scroll {\n display: none;\n }\n .ag-layout-print.ag-force-vertical-scroll {\n overflow-y: visible !important;\n }\n\n @media print {\n .ag-root-wrapper.ag-layout-print {\n display: table;\n }\n .ag-root-wrapper.ag-layout-print .ag-root-wrapper-body,\n .ag-root-wrapper.ag-layout-print .ag-root,\n .ag-root-wrapper.ag-layout-print .ag-body-viewport,\n .ag-root-wrapper.ag-layout-print .ag-center-cols-container,\n .ag-root-wrapper.ag-layout-print .ag-center-cols-viewport,\n .ag-root-wrapper.ag-layout-print .ag-center-cols-clipper,\n .ag-root-wrapper.ag-layout-print .ag-body-horizontal-scroll-viewport,\n .ag-root-wrapper.ag-layout-print .ag-virtual-list-viewport {\n height: auto !important;\n overflow: hidden !important;\n display: block !important;\n }\n .ag-root-wrapper.ag-layout-print .ag-row,\n .ag-root-wrapper.ag-layout-print .ag-cell {\n break-inside: avoid;\n }\n }\n [class^='ag-'],\n [class^='ag-']:focus,\n [class^='ag-']:after,\n [class^='ag-']:before {\n box-sizing: border-box;\n outline: none;\n }\n\n [class^='ag-']::-ms-clear {\n display: none;\n }\n\n .ag-checkbox .ag-input-wrapper,\n .ag-radio-button .ag-input-wrapper {\n overflow: visible;\n }\n\n .ag-range-field .ag-input-wrapper {\n height: 100%;\n }\n\n .ag-toggle-button {\n flex: none;\n width: unset;\n min-width: unset;\n }\n\n .ag-ltr .ag-label-align-right .ag-label {\n margin-left: var(--ag-grid-size);\n }\n .ag-rtl .ag-label-align-right .ag-label {\n margin-right: var(--ag-grid-size);\n }\n\n input[class^='ag-'] {\n margin: 0;\n background-color: var(--ag-background-color);\n }\n\n textarea[class^='ag-'],\n select[class^='ag-'] {\n background-color: var(--ag-background-color);\n }\n\n input[class^='ag-']:not([type]),\n input[class^='ag-'][type='text'],\n input[class^='ag-'][type='number'],\n input[class^='ag-'][type='tel'],\n input[class^='ag-'][type='date'],\n input[class^='ag-'][type='datetime-local'],\n textarea[class^='ag-'] {\n font-size: inherit;\n line-height: inherit;\n color: inherit;\n border: var(--ag-borders-input) var(--ag-input-border-color);\n }\n input[class^='ag-']:not([type]):disabled,\n input[class^='ag-'][type='text']:disabled,\n input[class^='ag-'][type='number']:disabled,\n input[class^='ag-'][type='tel']:disabled,\n input[class^='ag-'][type='date']:disabled,\n input[class^='ag-'][type='datetime-local']:disabled,\n textarea[class^='ag-']:disabled {\n color: var(--ag-disabled-foreground-color);\n background-color: var(--ag-input-disabled-background-color);\n border-color: var(--ag-input-disabled-border-color);\n }\n input[class^='ag-']:not([type]):focus,\n input[class^='ag-'][type='text']:focus,\n input[class^='ag-'][type='number']:focus,\n input[class^='ag-'][type='tel']:focus,\n input[class^='ag-'][type='date']:focus,\n input[class^='ag-'][type='datetime-local']:focus,\n textarea[class^='ag-']:focus {\n outline: none;\n box-shadow: var(--ag-input-focus-box-shadow);\n border-color: var(--ag-input-focus-border-color);\n }\n input[class^='ag-']:not([type]):invalid,\n input[class^='ag-'][type='text']:invalid,\n input[class^='ag-'][type='number']:invalid,\n input[class^='ag-'][type='tel']:invalid,\n input[class^='ag-'][type='date']:invalid,\n input[class^='ag-'][type='datetime-local']:invalid,\n textarea[class^='ag-']:invalid {\n border: var(--ag-borders-input-invalid) var(--ag-input-border-color-invalid);\n }\n\n input[class^='ag-'][type='number'] {\n -moz-appearance: textfield;\n }\n input[class^='ag-'][type='number']::-webkit-outer-spin-button,\n input[class^='ag-'][type='number']::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n input[class^='ag-'][type='range'] {\n padding: 0;\n }\n\n input[class^='ag-'][type='button']:focus,\n button[class^='ag-']:focus {\n box-shadow: var(--ag-input-focus-box-shadow);\n }\n\n .ag-drag-handle {\n color: var(--ag-secondary-foreground-color);\n }\n\n .ag-list-item,\n .ag-virtual-list-item {\n height: var(--ag-list-item-height);\n }\n\n .ag-keyboard-focus .ag-virtual-list-item:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-virtual-list-item:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 4px;\n left: 4px;\n display: block;\n width: calc(100% - 8px);\n height: calc(100% - 8px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-select-list {\n background-color: var(--ag-background-color);\n overflow-y: auto;\n overflow-x: hidden;\n }\n\n .ag-list-item {\n display: flex;\n align-items: center;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n .ag-list-item.ag-active-item {\n background-color: var(--ag-row-hover-color);\n }\n\n .ag-select-list-item {\n padding-left: 4px;\n padding-right: 4px;\n cursor: default;\n -moz-user-select: none;\n -webkit-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n .ag-select-list-item span {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n .ag-select .ag-picker-field-wrapper {\n background-color: var(--ag-background-color);\n min-height: var(--ag-list-item-height);\n cursor: default;\n }\n .ag-select.ag-disabled .ag-picker-field-wrapper:focus {\n box-shadow: none;\n }\n .ag-select:not(.ag-cell-editor) {\n height: var(--ag-list-item-height);\n }\n .ag-select .ag-picker-field-display {\n margin: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n .ag-select .ag-picker-field-icon {\n display: flex;\n align-items: center;\n }\n .ag-select.ag-disabled {\n opacity: 0.5;\n }\n\n .ag-rich-select {\n background-color: var(--ag-control-panel-background-color);\n }\n\n .ag-rich-select-list {\n width: 100%;\n min-width: 200px;\n height: calc(var(--ag-row-height) * 6.5);\n }\n\n .ag-rich-select-value {\n height: var(--ag-row-height);\n border-bottom: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n padding-top: 0;\n padding-bottom: 0;\n }\n .ag-ltr .ag-rich-select-value {\n padding-left: var(--ag-cell-horizontal-padding);\n }\n .ag-rtl .ag-rich-select-value {\n padding-right: var(--ag-cell-horizontal-padding);\n }\n .ag-ltr .ag-rich-select-value {\n padding-right: var(--ag-grid-size);\n }\n .ag-rtl .ag-rich-select-value {\n padding-left: var(--ag-grid-size);\n }\n\n .ag-rich-select-virtual-list-item {\n cursor: default;\n height: var(--ag-list-item-height);\n }\n .ag-keyboard-focus .ag-rich-select-virtual-list-item:focus::after {\n content: none;\n }\n .ag-rich-select-virtual-list-item:hover {\n background-color: var(--ag-row-hover-color);\n }\n\n .ag-ltr .ag-rich-select-row {\n padding-left: var(--ag-cell-horizontal-padding);\n }\n .ag-rtl .ag-rich-select-row {\n padding-right: var(--ag-cell-horizontal-padding);\n }\n\n .ag-rich-select-row-selected {\n background-color: var(--ag-selected-row-background-color);\n }\n\n .ag-row-drag,\n .ag-selection-checkbox,\n .ag-group-expanded,\n .ag-group-contracted {\n color: var(--ag-secondary-foreground-color);\n }\n .ag-ltr .ag-row-drag,\n .ag-ltr .ag-selection-checkbox,\n .ag-ltr .ag-group-expanded,\n .ag-ltr .ag-group-contracted {\n margin-right: var(--ag-cell-widget-spacing);\n }\n .ag-rtl .ag-row-drag,\n .ag-rtl .ag-selection-checkbox,\n .ag-rtl .ag-group-expanded,\n .ag-rtl .ag-group-contracted {\n margin-left: var(--ag-cell-widget-spacing);\n }\n\n .ag-cell-wrapper > *:not(.ag-cell-value):not(.ag-group-value) {\n --ag-internal-calculated-line-height: var(\n --ag-line-height,\n calc(var(--ag-row-height) - var(--ag-row-border-width))\n );\n --ag-internal-padded-row-height: calc(var(--ag-row-height) - var(--ag-row-border-width));\n height: min(var(--ag-internal-calculated-line-height), var(--ag-internal-padded-row-height));\n display: flex;\n align-items: center;\n flex: none;\n }\n\n .ag-group-expanded,\n .ag-group-contracted {\n cursor: pointer;\n }\n\n .ag-group-title-bar-icon {\n cursor: pointer;\n flex: none;\n color: var(--ag-secondary-foreground-color);\n }\n\n .ag-ltr .ag-group-child-count {\n margin-left: 2px;\n }\n .ag-rtl .ag-group-child-count {\n margin-right: 2px;\n }\n\n .ag-group-title-bar {\n background-color: var(--ag-subheader-background-color);\n padding: var(--ag-grid-size);\n }\n\n .ag-group-toolbar {\n padding: var(--ag-grid-size);\n background-color: var(--ag-subheader-toolbar-background-color);\n }\n\n .ag-disabled-group-title-bar,\n .ag-disabled-group-container {\n opacity: 0.5;\n }\n\n .group-item {\n margin: calc(var(--ag-grid-size) * 0.5) 0;\n }\n\n .ag-label {\n white-space: nowrap;\n }\n .ag-ltr .ag-label {\n margin-right: var(--ag-grid-size);\n }\n .ag-rtl .ag-label {\n margin-left: var(--ag-grid-size);\n }\n\n .ag-label-align-top .ag-label {\n margin-bottom: calc(var(--ag-grid-size) * 0.5);\n }\n\n .ag-angle-select[disabled] {\n color: var(--ag-disabled-foreground-color);\n pointer-events: none;\n }\n .ag-angle-select[disabled] .ag-angle-select-field {\n opacity: 0.4;\n }\n\n .ag-ltr .ag-slider-field,\n .ag-ltr .ag-angle-select-field {\n margin-right: calc(var(--ag-grid-size) * 2);\n }\n .ag-rtl .ag-slider-field,\n .ag-rtl .ag-angle-select-field {\n margin-left: calc(var(--ag-grid-size) * 2);\n }\n\n .ag-angle-select-parent-circle {\n width: 24px;\n height: 24px;\n border-radius: 12px;\n border: solid 1px;\n border-color: var(--ag-border-color);\n background-color: var(--ag-background-color);\n }\n\n .ag-angle-select-child-circle {\n top: 4px;\n left: 12px;\n width: 6px;\n height: 6px;\n margin-left: -3px;\n margin-top: -4px;\n border-radius: 3px;\n background-color: var(--ag-secondary-foreground-color);\n }\n\n .ag-picker-field-wrapper {\n border: 1px solid;\n border-color: var(--ag-border-color);\n border-radius: 5px;\n }\n .ag-picker-field-wrapper:focus {\n box-shadow: var(--ag-input-focus-box-shadow);\n }\n\n .ag-picker-field-button {\n background-color: var(--ag-background-color);\n color: var(--ag-secondary-foreground-color);\n }\n\n .ag-dialog.ag-color-dialog {\n border-radius: 5px;\n }\n\n .ag-color-picker .ag-picker-field-display {\n height: var(--ag-icon-size);\n }\n\n .ag-color-panel {\n padding: var(--ag-grid-size);\n }\n\n .ag-spectrum-color {\n background-color: rgb(255, 0, 0);\n border-radius: 2px;\n }\n\n .ag-spectrum-tools {\n padding: 10px;\n }\n\n .ag-spectrum-sat {\n background-image: linear-gradient(to right, white, rgba(204, 154, 129, 0));\n }\n\n .ag-spectrum-val {\n background-image: linear-gradient(to top, black, rgba(204, 154, 129, 0));\n }\n\n .ag-spectrum-dragger {\n border-radius: 12px;\n height: 12px;\n width: 12px;\n border: 1px solid white;\n background: black;\n box-shadow: 0 0 2px 0px rgba(0, 0, 0, 0.24);\n }\n\n .ag-spectrum-hue-background {\n border-radius: 2px;\n }\n\n .ag-spectrum-alpha-background {\n border-radius: 2px;\n }\n\n .ag-spectrum-tool {\n margin-bottom: 10px;\n height: 11px;\n border-radius: 2px;\n }\n\n .ag-spectrum-slider {\n margin-top: -12px;\n width: 13px;\n height: 13px;\n border-radius: 13px;\n background-color: rgb(248, 248, 248);\n box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.37);\n }\n\n .ag-recent-color {\n margin: 0 3px;\n }\n .ag-recent-color:first-child {\n margin-left: 0;\n }\n .ag-recent-color:last-child {\n margin-right: 0;\n }\n\n .ag-dnd-ghost {\n border: var(--ag-borders) var(--ag-border-color);\n background: var(--ag-background-color);\n border-radius: var(--ag-card-radius);\n box-shadow: var(--ag-card-shadow);\n padding: var(--ag-grid-size);\n overflow: hidden;\n text-overflow: ellipsis;\n border: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n color: var(--ag-secondary-foreground-color);\n height: var(--ag-header-height) !important;\n line-height: var(--ag-header-height);\n margin: 0;\n padding: 0 calc(var(--ag-grid-size) * 2);\n transform: translateY(calc(var(--ag-grid-size) * 2));\n }\n\n .ag-dnd-ghost-icon {\n margin-right: var(--ag-grid-size);\n color: var(--ag-foreground-color);\n }\n\n .ag-popup-child:not(.ag-tooltip-custom) {\n box-shadow: var(--ag-popup-shadow);\n }\n\n .ag-dragging-range-handle .ag-dialog,\n .ag-dragging-fill-handle .ag-dialog {\n opacity: 0.7;\n pointer-events: none;\n }\n\n .ag-dialog {\n border-radius: var(--ag-border-radius);\n border: var(--ag-borders) var(--ag-border-color);\n }\n\n .ag-panel {\n background-color: var(--ag-background-color);\n }\n\n .ag-panel-title-bar {\n background-color: var(--ag-header-background-color);\n color: var(--ag-header-foreground-color);\n height: var(--ag-header-height);\n padding: var(--ag-grid-size) var(--ag-cell-horizontal-padding);\n border-bottom: var(--ag-borders) var(--ag-border-color);\n }\n\n .ag-ltr .ag-panel-title-bar-button {\n margin-left: var(--ag-grid-size);\n }\n .ag-rtl .ag-panel-title-bar-button {\n margin-right: var(--ag-grid-size);\n }\n\n .ag-tooltip {\n background-color: var(--ag-tooltip-background-color);\n color: var(--ag-foreground-color);\n padding: var(--ag-grid-size);\n border: var(--ag-borders) var(--ag-border-color);\n border-radius: var(--ag-card-radius);\n transition: opacity 1s;\n white-space: normal;\n }\n .ag-tooltip.ag-tooltip-hiding {\n opacity: 0;\n }\n\n .ag-tooltip-custom {\n transition: opacity 1s;\n }\n .ag-tooltip-custom.ag-tooltip-hiding {\n opacity: 0;\n }\n\n .ag-ltr .ag-column-select-indent-1 {\n padding-left: calc(1 * var(--ag-column-select-indent-size));\n }\n .ag-rtl .ag-column-select-indent-1 {\n padding-right: calc(1 * var(--ag-column-select-indent-size));\n }\n\n .ag-ltr .ag-column-select-indent-2 {\n padding-left: calc(2 * var(--ag-column-select-indent-size));\n }\n .ag-rtl .ag-column-select-indent-2 {\n padding-right: calc(2 * var(--ag-column-select-indent-size));\n }\n\n .ag-ltr .ag-column-select-indent-3 {\n padding-left: calc(3 * var(--ag-column-select-indent-size));\n }\n .ag-rtl .ag-column-select-indent-3 {\n padding-right: calc(3 * var(--ag-column-select-indent-size));\n }\n\n .ag-ltr .ag-column-select-indent-4 {\n padding-left: calc(4 * var(--ag-column-select-indent-size));\n }\n .ag-rtl .ag-column-select-indent-4 {\n padding-right: calc(4 * var(--ag-column-select-indent-size));\n }\n\n .ag-ltr .ag-column-select-indent-5 {\n padding-left: calc(5 * var(--ag-column-select-indent-size));\n }\n .ag-rtl .ag-column-select-indent-5 {\n padding-right: calc(5 * var(--ag-column-select-indent-size));\n }\n\n .ag-ltr .ag-column-select-indent-6 {\n padding-left: calc(6 * var(--ag-column-select-indent-size));\n }\n .ag-rtl .ag-column-select-indent-6 {\n padding-right: calc(6 * var(--ag-column-select-indent-size));\n }\n\n .ag-ltr .ag-column-select-indent-7 {\n padding-left: calc(7 * var(--ag-column-select-indent-size));\n }\n .ag-rtl .ag-column-select-indent-7 {\n padding-right: calc(7 * var(--ag-column-select-indent-size));\n }\n\n .ag-ltr .ag-column-select-indent-8 {\n padding-left: calc(8 * var(--ag-column-select-indent-size));\n }\n .ag-rtl .ag-column-select-indent-8 {\n padding-right: calc(8 * var(--ag-column-select-indent-size));\n }\n\n .ag-ltr .ag-column-select-indent-9 {\n padding-left: calc(9 * var(--ag-column-select-indent-size));\n }\n .ag-rtl .ag-column-select-indent-9 {\n padding-right: calc(9 * var(--ag-column-select-indent-size));\n }\n\n .ag-column-select-header-icon {\n cursor: pointer;\n }\n\n .ag-keyboard-focus .ag-column-select-header-icon:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-column-select-header-icon:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 0px;\n left: 0px;\n display: block;\n width: calc(100% - 0px);\n height: calc(100% - 0px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-ltr .ag-column-group-icons:not(:last-child),\n .ag-ltr .ag-column-select-header-icon:not(:last-child),\n .ag-ltr .ag-column-select-header-checkbox:not(:last-child),\n .ag-ltr .ag-column-select-header-filter-wrapper:not(:last-child),\n .ag-ltr .ag-column-select-checkbox:not(:last-child),\n .ag-ltr .ag-column-select-column-drag-handle:not(:last-child),\n .ag-ltr .ag-column-select-column-group-drag-handle:not(:last-child),\n .ag-ltr .ag-column-select-column-label:not(:last-child) {\n margin-right: var(--ag-widget-horizontal-spacing);\n }\n .ag-rtl .ag-column-group-icons:not(:last-child),\n .ag-rtl .ag-column-select-header-icon:not(:last-child),\n .ag-rtl .ag-column-select-header-checkbox:not(:last-child),\n .ag-rtl .ag-column-select-header-filter-wrapper:not(:last-child),\n .ag-rtl .ag-column-select-checkbox:not(:last-child),\n .ag-rtl .ag-column-select-column-drag-handle:not(:last-child),\n .ag-rtl .ag-column-select-column-group-drag-handle:not(:last-child),\n .ag-rtl .ag-column-select-column-label:not(:last-child) {\n margin-left: var(--ag-widget-horizontal-spacing);\n }\n\n .ag-keyboard-focus .ag-column-select-virtual-list-item:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-column-select-virtual-list-item:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 1px;\n left: 1px;\n display: block;\n width: calc(100% - 2px);\n height: calc(100% - 2px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-column-select-column-group:not(:last-child),\n .ag-column-select-column:not(:last-child) {\n margin-bottom: var(--ag-widget-vertical-spacing);\n }\n\n .ag-column-select-column-readonly,\n .ag-column-select-column-group-readonly {\n color: var(--ag-disabled-foreground-color);\n pointer-events: none;\n }\n\n .ag-ltr .ag-column-select-add-group-indent {\n margin-left: calc(var(--ag-icon-size) + var(--ag-grid-size) * 2);\n }\n .ag-rtl .ag-column-select-add-group-indent {\n margin-right: calc(var(--ag-icon-size) + var(--ag-grid-size) * 2);\n }\n\n .ag-column-select-virtual-list-viewport {\n padding: calc(var(--ag-widget-container-vertical-padding) * 0.5) 0px;\n }\n\n .ag-column-select-virtual-list-item {\n padding: 0 var(--ag-widget-container-horizontal-padding);\n }\n\n .ag-rtl {\n text-align: right;\n }\n\n .ag-root-wrapper {\n border: var(--ag-borders) var(--ag-border-color);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-1 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 1);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-1 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 1);\n }\n\n .ag-ltr .ag-row-group-indent-1 {\n padding-left: calc(1 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-1 {\n padding-right: calc(1 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-1 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-1 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-2 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 2);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-2 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 2);\n }\n\n .ag-ltr .ag-row-group-indent-2 {\n padding-left: calc(2 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-2 {\n padding-right: calc(2 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-2 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-2 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-3 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 3);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-3 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 3);\n }\n\n .ag-ltr .ag-row-group-indent-3 {\n padding-left: calc(3 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-3 {\n padding-right: calc(3 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-3 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-3 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-4 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 4);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-4 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 4);\n }\n\n .ag-ltr .ag-row-group-indent-4 {\n padding-left: calc(4 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-4 {\n padding-right: calc(4 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-4 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-4 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-5 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 5);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-5 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 5);\n }\n\n .ag-ltr .ag-row-group-indent-5 {\n padding-left: calc(5 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-5 {\n padding-right: calc(5 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-5 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-5 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-6 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 6);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-6 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 6);\n }\n\n .ag-ltr .ag-row-group-indent-6 {\n padding-left: calc(6 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-6 {\n padding-right: calc(6 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-6 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-6 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-7 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 7);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-7 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 7);\n }\n\n .ag-ltr .ag-row-group-indent-7 {\n padding-left: calc(7 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-7 {\n padding-right: calc(7 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-7 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-7 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-8 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 8);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-8 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 8);\n }\n\n .ag-ltr .ag-row-group-indent-8 {\n padding-left: calc(8 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-8 {\n padding-right: calc(8 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-8 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-8 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-9 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 9);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-9 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 9);\n }\n\n .ag-ltr .ag-row-group-indent-9 {\n padding-left: calc(9 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-9 {\n padding-right: calc(9 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-9 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-9 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-10 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 10);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-10 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 10);\n }\n\n .ag-ltr .ag-row-group-indent-10 {\n padding-left: calc(10 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-10 {\n padding-right: calc(10 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-10 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-10 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-11 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 11);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-11 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 11);\n }\n\n .ag-ltr .ag-row-group-indent-11 {\n padding-left: calc(11 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-11 {\n padding-right: calc(11 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-11 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-11 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-12 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 12);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-12 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 12);\n }\n\n .ag-ltr .ag-row-group-indent-12 {\n padding-left: calc(12 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-12 {\n padding-right: calc(12 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-12 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-12 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-13 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 13);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-13 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 13);\n }\n\n .ag-ltr .ag-row-group-indent-13 {\n padding-left: calc(13 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-13 {\n padding-right: calc(13 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-13 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-13 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-14 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 14);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-14 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 14);\n }\n\n .ag-ltr .ag-row-group-indent-14 {\n padding-left: calc(14 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-14 {\n padding-right: calc(14 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-14 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-14 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-15 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 15);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-15 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 15);\n }\n\n .ag-ltr .ag-row-group-indent-15 {\n padding-left: calc(15 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-15 {\n padding-right: calc(15 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-15 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-15 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-16 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 16);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-16 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 16);\n }\n\n .ag-ltr .ag-row-group-indent-16 {\n padding-left: calc(16 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-16 {\n padding-right: calc(16 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-16 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-16 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-17 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 17);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-17 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 17);\n }\n\n .ag-ltr .ag-row-group-indent-17 {\n padding-left: calc(17 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-17 {\n padding-right: calc(17 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-17 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-17 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-18 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 18);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-18 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 18);\n }\n\n .ag-ltr .ag-row-group-indent-18 {\n padding-left: calc(18 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-18 {\n padding-right: calc(18 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-18 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-18 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-19 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 19);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-19 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 19);\n }\n\n .ag-ltr .ag-row-group-indent-19 {\n padding-left: calc(19 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-19 {\n padding-right: calc(19 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-19 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-19 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-20 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 20);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-20 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 20);\n }\n\n .ag-ltr .ag-row-group-indent-20 {\n padding-left: calc(20 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-20 {\n padding-right: calc(20 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-20 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-20 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-21 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 21);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-21 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 21);\n }\n\n .ag-ltr .ag-row-group-indent-21 {\n padding-left: calc(21 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-21 {\n padding-right: calc(21 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-21 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-21 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-22 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 22);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-22 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 22);\n }\n\n .ag-ltr .ag-row-group-indent-22 {\n padding-left: calc(22 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-22 {\n padding-right: calc(22 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-22 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-22 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-23 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 23);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-23 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 23);\n }\n\n .ag-ltr .ag-row-group-indent-23 {\n padding-left: calc(23 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-23 {\n padding-right: calc(23 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-23 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-23 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-24 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 24);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-24 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 24);\n }\n\n .ag-ltr .ag-row-group-indent-24 {\n padding-left: calc(24 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-24 {\n padding-right: calc(24 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-24 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-24 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-25 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 25);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-25 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 25);\n }\n\n .ag-ltr .ag-row-group-indent-25 {\n padding-left: calc(25 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-25 {\n padding-right: calc(25 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-25 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-25 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-26 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 26);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-26 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 26);\n }\n\n .ag-ltr .ag-row-group-indent-26 {\n padding-left: calc(26 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-26 {\n padding-right: calc(26 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-26 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-26 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-27 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 27);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-27 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 27);\n }\n\n .ag-ltr .ag-row-group-indent-27 {\n padding-left: calc(27 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-27 {\n padding-right: calc(27 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-27 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-27 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-28 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 28);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-28 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 28);\n }\n\n .ag-ltr .ag-row-group-indent-28 {\n padding-left: calc(28 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-28 {\n padding-right: calc(28 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-28 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-28 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-29 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 29);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-29 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 29);\n }\n\n .ag-ltr .ag-row-group-indent-29 {\n padding-left: calc(29 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-29 {\n padding-right: calc(29 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-29 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-29 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-30 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 30);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-30 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 30);\n }\n\n .ag-ltr .ag-row-group-indent-30 {\n padding-left: calc(30 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-30 {\n padding-right: calc(30 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-30 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-30 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-31 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 31);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-31 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 31);\n }\n\n .ag-ltr .ag-row-group-indent-31 {\n padding-left: calc(31 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-31 {\n padding-right: calc(31 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-31 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-31 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-32 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 32);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-32 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 32);\n }\n\n .ag-ltr .ag-row-group-indent-32 {\n padding-left: calc(32 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-32 {\n padding-right: calc(32 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-32 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-32 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-33 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 33);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-33 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 33);\n }\n\n .ag-ltr .ag-row-group-indent-33 {\n padding-left: calc(33 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-33 {\n padding-right: calc(33 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-33 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-33 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-34 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 34);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-34 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 34);\n }\n\n .ag-ltr .ag-row-group-indent-34 {\n padding-left: calc(34 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-34 {\n padding-right: calc(34 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-34 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-34 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-35 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 35);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-35 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 35);\n }\n\n .ag-ltr .ag-row-group-indent-35 {\n padding-left: calc(35 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-35 {\n padding-right: calc(35 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-35 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-35 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-36 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 36);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-36 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 36);\n }\n\n .ag-ltr .ag-row-group-indent-36 {\n padding-left: calc(36 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-36 {\n padding-right: calc(36 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-36 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-36 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-37 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 37);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-37 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 37);\n }\n\n .ag-ltr .ag-row-group-indent-37 {\n padding-left: calc(37 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-37 {\n padding-right: calc(37 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-37 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-37 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-38 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 38);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-38 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 38);\n }\n\n .ag-ltr .ag-row-group-indent-38 {\n padding-left: calc(38 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-38 {\n padding-right: calc(38 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-38 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-38 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-39 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 39);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-39 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 39);\n }\n\n .ag-ltr .ag-row-group-indent-39 {\n padding-left: calc(39 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-39 {\n padding-right: calc(39 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-39 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-39 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-40 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 40);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-40 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 40);\n }\n\n .ag-ltr .ag-row-group-indent-40 {\n padding-left: calc(40 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-40 {\n padding-right: calc(40 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-40 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-40 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-41 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 41);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-41 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 41);\n }\n\n .ag-ltr .ag-row-group-indent-41 {\n padding-left: calc(41 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-41 {\n padding-right: calc(41 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-41 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-41 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-42 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 42);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-42 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 42);\n }\n\n .ag-ltr .ag-row-group-indent-42 {\n padding-left: calc(42 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-42 {\n padding-right: calc(42 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-42 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-42 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-43 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 43);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-43 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 43);\n }\n\n .ag-ltr .ag-row-group-indent-43 {\n padding-left: calc(43 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-43 {\n padding-right: calc(43 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-43 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-43 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-44 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 44);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-44 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 44);\n }\n\n .ag-ltr .ag-row-group-indent-44 {\n padding-left: calc(44 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-44 {\n padding-right: calc(44 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-44 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-44 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-45 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 45);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-45 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 45);\n }\n\n .ag-ltr .ag-row-group-indent-45 {\n padding-left: calc(45 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-45 {\n padding-right: calc(45 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-45 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-45 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-46 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 46);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-46 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 46);\n }\n\n .ag-ltr .ag-row-group-indent-46 {\n padding-left: calc(46 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-46 {\n padding-right: calc(46 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-46 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-46 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-47 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 47);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-47 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 47);\n }\n\n .ag-ltr .ag-row-group-indent-47 {\n padding-left: calc(47 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-47 {\n padding-right: calc(47 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-47 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-47 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-48 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 48);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-48 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 48);\n }\n\n .ag-ltr .ag-row-group-indent-48 {\n padding-left: calc(48 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-48 {\n padding-right: calc(48 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-48 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-48 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-49 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 49);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-49 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 49);\n }\n\n .ag-ltr .ag-row-group-indent-49 {\n padding-left: calc(49 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-49 {\n padding-right: calc(49 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-49 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-49 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-50 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 50);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-50 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 50);\n }\n\n .ag-ltr .ag-row-group-indent-50 {\n padding-left: calc(50 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-50 {\n padding-right: calc(50 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-50 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-50 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-51 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 51);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-51 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 51);\n }\n\n .ag-ltr .ag-row-group-indent-51 {\n padding-left: calc(51 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-51 {\n padding-right: calc(51 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-51 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-51 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-52 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 52);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-52 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 52);\n }\n\n .ag-ltr .ag-row-group-indent-52 {\n padding-left: calc(52 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-52 {\n padding-right: calc(52 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-52 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-52 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-53 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 53);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-53 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 53);\n }\n\n .ag-ltr .ag-row-group-indent-53 {\n padding-left: calc(53 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-53 {\n padding-right: calc(53 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-53 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-53 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-54 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 54);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-54 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 54);\n }\n\n .ag-ltr .ag-row-group-indent-54 {\n padding-left: calc(54 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-54 {\n padding-right: calc(54 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-54 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-54 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-55 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 55);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-55 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 55);\n }\n\n .ag-ltr .ag-row-group-indent-55 {\n padding-left: calc(55 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-55 {\n padding-right: calc(55 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-55 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-55 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-56 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 56);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-56 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 56);\n }\n\n .ag-ltr .ag-row-group-indent-56 {\n padding-left: calc(56 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-56 {\n padding-right: calc(56 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-56 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-56 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-57 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 57);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-57 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 57);\n }\n\n .ag-ltr .ag-row-group-indent-57 {\n padding-left: calc(57 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-57 {\n padding-right: calc(57 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-57 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-57 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-58 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 58);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-58 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 58);\n }\n\n .ag-ltr .ag-row-group-indent-58 {\n padding-left: calc(58 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-58 {\n padding-right: calc(58 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-58 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-58 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-59 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 59);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-59 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 59);\n }\n\n .ag-ltr .ag-row-group-indent-59 {\n padding-left: calc(59 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-59 {\n padding-right: calc(59 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-59 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-59 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-60 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 60);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-60 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 60);\n }\n\n .ag-ltr .ag-row-group-indent-60 {\n padding-left: calc(60 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-60 {\n padding-right: calc(60 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-60 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-60 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-61 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 61);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-61 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 61);\n }\n\n .ag-ltr .ag-row-group-indent-61 {\n padding-left: calc(61 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-61 {\n padding-right: calc(61 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-61 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-61 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-62 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 62);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-62 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 62);\n }\n\n .ag-ltr .ag-row-group-indent-62 {\n padding-left: calc(62 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-62 {\n padding-right: calc(62 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-62 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-62 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-63 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 63);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-63 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 63);\n }\n\n .ag-ltr .ag-row-group-indent-63 {\n padding-left: calc(63 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-63 {\n padding-right: calc(63 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-63 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-63 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-64 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 64);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-64 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 64);\n }\n\n .ag-ltr .ag-row-group-indent-64 {\n padding-left: calc(64 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-64 {\n padding-right: calc(64 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-64 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-64 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-65 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 65);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-65 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 65);\n }\n\n .ag-ltr .ag-row-group-indent-65 {\n padding-left: calc(65 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-65 {\n padding-right: calc(65 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-65 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-65 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-66 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 66);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-66 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 66);\n }\n\n .ag-ltr .ag-row-group-indent-66 {\n padding-left: calc(66 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-66 {\n padding-right: calc(66 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-66 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-66 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-67 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 67);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-67 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 67);\n }\n\n .ag-ltr .ag-row-group-indent-67 {\n padding-left: calc(67 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-67 {\n padding-right: calc(67 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-67 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-67 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-68 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 68);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-68 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 68);\n }\n\n .ag-ltr .ag-row-group-indent-68 {\n padding-left: calc(68 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-68 {\n padding-right: calc(68 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-68 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-68 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-69 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 69);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-69 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 69);\n }\n\n .ag-ltr .ag-row-group-indent-69 {\n padding-left: calc(69 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-69 {\n padding-right: calc(69 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-69 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-69 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-70 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 70);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-70 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 70);\n }\n\n .ag-ltr .ag-row-group-indent-70 {\n padding-left: calc(70 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-70 {\n padding-right: calc(70 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-70 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-70 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-71 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 71);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-71 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 71);\n }\n\n .ag-ltr .ag-row-group-indent-71 {\n padding-left: calc(71 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-71 {\n padding-right: calc(71 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-71 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-71 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-72 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 72);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-72 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 72);\n }\n\n .ag-ltr .ag-row-group-indent-72 {\n padding-left: calc(72 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-72 {\n padding-right: calc(72 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-72 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-72 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-73 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 73);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-73 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 73);\n }\n\n .ag-ltr .ag-row-group-indent-73 {\n padding-left: calc(73 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-73 {\n padding-right: calc(73 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-73 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-73 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-74 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 74);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-74 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 74);\n }\n\n .ag-ltr .ag-row-group-indent-74 {\n padding-left: calc(74 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-74 {\n padding-right: calc(74 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-74 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-74 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-75 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 75);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-75 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 75);\n }\n\n .ag-ltr .ag-row-group-indent-75 {\n padding-left: calc(75 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-75 {\n padding-right: calc(75 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-75 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-75 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-76 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 76);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-76 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 76);\n }\n\n .ag-ltr .ag-row-group-indent-76 {\n padding-left: calc(76 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-76 {\n padding-right: calc(76 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-76 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-76 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-77 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 77);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-77 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 77);\n }\n\n .ag-ltr .ag-row-group-indent-77 {\n padding-left: calc(77 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-77 {\n padding-right: calc(77 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-77 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-77 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-78 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 78);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-78 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 78);\n }\n\n .ag-ltr .ag-row-group-indent-78 {\n padding-left: calc(78 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-78 {\n padding-right: calc(78 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-78 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-78 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-79 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 79);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-79 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 79);\n }\n\n .ag-ltr .ag-row-group-indent-79 {\n padding-left: calc(79 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-79 {\n padding-right: calc(79 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-79 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-79 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-80 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 80);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-80 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 80);\n }\n\n .ag-ltr .ag-row-group-indent-80 {\n padding-left: calc(80 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-80 {\n padding-right: calc(80 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-80 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-80 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-81 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 81);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-81 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 81);\n }\n\n .ag-ltr .ag-row-group-indent-81 {\n padding-left: calc(81 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-81 {\n padding-right: calc(81 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-81 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-81 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-82 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 82);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-82 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 82);\n }\n\n .ag-ltr .ag-row-group-indent-82 {\n padding-left: calc(82 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-82 {\n padding-right: calc(82 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-82 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-82 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-83 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 83);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-83 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 83);\n }\n\n .ag-ltr .ag-row-group-indent-83 {\n padding-left: calc(83 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-83 {\n padding-right: calc(83 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-83 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-83 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-84 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 84);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-84 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 84);\n }\n\n .ag-ltr .ag-row-group-indent-84 {\n padding-left: calc(84 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-84 {\n padding-right: calc(84 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-84 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-84 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-85 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 85);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-85 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 85);\n }\n\n .ag-ltr .ag-row-group-indent-85 {\n padding-left: calc(85 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-85 {\n padding-right: calc(85 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-85 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-85 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-86 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 86);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-86 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 86);\n }\n\n .ag-ltr .ag-row-group-indent-86 {\n padding-left: calc(86 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-86 {\n padding-right: calc(86 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-86 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-86 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-87 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 87);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-87 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 87);\n }\n\n .ag-ltr .ag-row-group-indent-87 {\n padding-left: calc(87 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-87 {\n padding-right: calc(87 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-87 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-87 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-88 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 88);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-88 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 88);\n }\n\n .ag-ltr .ag-row-group-indent-88 {\n padding-left: calc(88 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-88 {\n padding-right: calc(88 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-88 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-88 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-89 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 89);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-89 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 89);\n }\n\n .ag-ltr .ag-row-group-indent-89 {\n padding-left: calc(89 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-89 {\n padding-right: calc(89 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-89 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-89 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-90 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 90);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-90 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 90);\n }\n\n .ag-ltr .ag-row-group-indent-90 {\n padding-left: calc(90 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-90 {\n padding-right: calc(90 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-90 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-90 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-91 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 91);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-91 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 91);\n }\n\n .ag-ltr .ag-row-group-indent-91 {\n padding-left: calc(91 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-91 {\n padding-right: calc(91 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-91 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-91 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-92 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 92);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-92 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 92);\n }\n\n .ag-ltr .ag-row-group-indent-92 {\n padding-left: calc(92 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-92 {\n padding-right: calc(92 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-92 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-92 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-93 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 93);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-93 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 93);\n }\n\n .ag-ltr .ag-row-group-indent-93 {\n padding-left: calc(93 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-93 {\n padding-right: calc(93 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-93 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-93 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-94 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 94);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-94 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 94);\n }\n\n .ag-ltr .ag-row-group-indent-94 {\n padding-left: calc(94 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-94 {\n padding-right: calc(94 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-94 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-94 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-95 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 95);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-95 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 95);\n }\n\n .ag-ltr .ag-row-group-indent-95 {\n padding-left: calc(95 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-95 {\n padding-right: calc(95 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-95 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-95 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-96 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 96);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-96 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 96);\n }\n\n .ag-ltr .ag-row-group-indent-96 {\n padding-left: calc(96 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-96 {\n padding-right: calc(96 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-96 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-96 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-97 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 97);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-97 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 97);\n }\n\n .ag-ltr .ag-row-group-indent-97 {\n padding-left: calc(97 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-97 {\n padding-right: calc(97 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-97 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-97 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-98 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 98);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-98 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 98);\n }\n\n .ag-ltr .ag-row-group-indent-98 {\n padding-left: calc(98 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-98 {\n padding-right: calc(98 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-98 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-98 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-99 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 99);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-99 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 99);\n }\n\n .ag-ltr .ag-row-group-indent-99 {\n padding-left: calc(99 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-99 {\n padding-right: calc(99 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-99 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-99 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row-group-leaf-indent {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-group-leaf-indent {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-value-change-delta {\n padding-right: 2px;\n }\n\n .ag-value-change-delta-up {\n color: var(--ag-value-change-delta-up-color);\n }\n\n .ag-value-change-delta-down {\n color: var(--ag-value-change-delta-down-color);\n }\n\n .ag-value-change-value {\n background-color: transparent;\n border-radius: 1px;\n padding-left: 1px;\n padding-right: 1px;\n transition: background-color 1s;\n }\n\n .ag-value-change-value-highlight {\n background-color: var(--ag-value-change-value-highlight-background-color);\n transition: background-color 0.1s;\n }\n\n .ag-cell-data-changed {\n background-color: var(--ag-value-change-value-highlight-background-color) !important;\n }\n\n .ag-cell-data-changed-animation {\n background-color: transparent;\n }\n\n .ag-cell-highlight {\n background-color: var(--ag-range-selection-highlight-color) !important;\n }\n\n .ag-row {\n height: var(--ag-row-height);\n background-color: var(--ag-background-color);\n color: var(--ag-data-color);\n border-bottom: var(--ag-row-border-style) var(--ag-row-border-color) var(--ag-row-border-width);\n }\n\n .ag-row-highlight-above::after,\n .ag-row-highlight-below::after {\n content: '';\n position: absolute;\n width: calc(100% - 1px);\n height: 1px;\n background-color: var(--ag-range-selection-border-color);\n left: 1px;\n }\n\n .ag-row-highlight-above::after {\n top: -1px;\n }\n\n .ag-row-highlight-above.ag-row-first::after {\n top: 0;\n }\n\n .ag-row-highlight-below::after {\n bottom: 0px;\n }\n\n .ag-row-odd {\n background-color: var(--ag-odd-row-background-color);\n }\n\n .ag-body-horizontal-scroll:not(.ag-scrollbar-invisible)\n .ag-horizontal-left-spacer:not(.ag-scroller-corner) {\n border-right: var(--ag-borders-critical) var(--ag-border-color);\n }\n .ag-body-horizontal-scroll:not(.ag-scrollbar-invisible)\n .ag-horizontal-right-spacer:not(.ag-scroller-corner) {\n border-left: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-row-selected::before {\n content: '';\n background-color: var(--ag-selected-row-background-color);\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n\n .ag-row-hover:not(.ag-full-width-row)::before,\n .ag-row-hover.ag-full-width-row.ag-row-group::before {\n content: '';\n background-color: var(--ag-row-hover-color);\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n pointer-events: none;\n }\n\n .ag-row-hover.ag-full-width-row.ag-row-group > * {\n position: relative;\n }\n\n .ag-row-hover.ag-row-selected::before {\n background-color: var(--ag-row-hover-color);\n background-image: linear-gradient(\n var(--ag-selected-row-background-color),\n var(--ag-selected-row-background-color)\n );\n }\n\n .ag-column-hover {\n background-color: var(--ag-column-hover-color);\n }\n\n .ag-ltr .ag-right-aligned-cell {\n text-align: right;\n }\n .ag-rtl .ag-right-aligned-cell {\n text-align: left;\n }\n\n .ag-ltr .ag-right-aligned-cell .ag-cell-value,\n .ag-ltr .ag-right-aligned-cell .ag-group-value {\n margin-left: auto;\n }\n .ag-rtl .ag-right-aligned-cell .ag-cell-value,\n .ag-rtl .ag-right-aligned-cell .ag-group-value {\n margin-right: auto;\n }\n\n .ag-cell,\n .ag-full-width-row .ag-cell-wrapper.ag-row-group {\n --ag-internal-calculated-line-height: var(\n --ag-line-height,\n calc(var(--ag-row-height) - var(--ag-row-border-width))\n );\n --ag-internal-padded-row-height: calc(var(--ag-row-height) - var(--ag-row-border-width));\n border: 1px solid transparent;\n line-height: min(\n var(--ag-internal-calculated-line-height),\n var(--ag-internal-padded-row-height)\n );\n padding-left: calc(var(--ag-cell-horizontal-padding) - 1px);\n padding-right: calc(var(--ag-cell-horizontal-padding) - 1px);\n -webkit-font-smoothing: subpixel-antialiased;\n }\n\n .ag-row > .ag-cell-wrapper {\n padding-left: calc(var(--ag-cell-horizontal-padding) - 1px);\n padding-right: calc(var(--ag-cell-horizontal-padding) - 1px);\n }\n\n .ag-row-dragging {\n cursor: move;\n opacity: 0.5;\n }\n\n .ag-cell-inline-editing {\n border: var(--ag-borders) var(--ag-border-color);\n background: var(--ag-background-color);\n border-radius: var(--ag-card-radius);\n box-shadow: var(--ag-card-shadow);\n padding: var(--ag-grid-size);\n padding: 0;\n height: var(--ag-row-height);\n background-color: var(--ag-control-panel-background-color);\n }\n\n .ag-popup-editor {\n border: var(--ag-borders) var(--ag-border-color);\n background: var(--ag-background-color);\n border-radius: var(--ag-card-radius);\n box-shadow: var(--ag-card-shadow);\n padding: var(--ag-grid-size);\n background-color: var(--ag-control-panel-background-color);\n padding: 0;\n }\n\n .ag-large-text-input {\n height: auto;\n padding: var(--ag-cell-horizontal-padding);\n }\n\n .ag-rtl .ag-large-text-input textarea {\n resize: none;\n }\n\n .ag-details-row {\n padding: calc(var(--ag-grid-size) * 5);\n background-color: var(--ag-background-color);\n }\n\n .ag-layout-auto-height .ag-center-cols-clipper,\n .ag-layout-auto-height .ag-center-cols-container,\n .ag-layout-print .ag-center-cols-clipper,\n .ag-layout-print .ag-center-cols-container {\n min-height: 50px;\n }\n\n .ag-overlay-loading-wrapper {\n background-color: var(--ag-modal-overlay-background-color);\n }\n\n .ag-overlay-loading-center {\n border: var(--ag-borders) var(--ag-border-color);\n background: var(--ag-background-color);\n border-radius: var(--ag-card-radius);\n box-shadow: var(--ag-card-shadow);\n padding: var(--ag-grid-size);\n }\n\n .ag-overlay-no-rows-wrapper.ag-layout-auto-height {\n padding-top: 30px;\n }\n\n .ag-loading {\n display: flex;\n height: 100%;\n align-items: center;\n }\n .ag-ltr .ag-loading {\n padding-left: var(--ag-cell-horizontal-padding);\n }\n .ag-rtl .ag-loading {\n padding-right: var(--ag-cell-horizontal-padding);\n }\n\n .ag-ltr .ag-loading-icon {\n padding-right: var(--ag-cell-widget-spacing);\n }\n .ag-rtl .ag-loading-icon {\n padding-left: var(--ag-cell-widget-spacing);\n }\n\n .ag-icon-loading {\n animation-name: spin;\n animation-duration: 1000ms;\n animation-iteration-count: infinite;\n animation-timing-function: linear;\n }\n\n @keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n }\n .ag-floating-top {\n border-bottom: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-floating-bottom {\n border-top: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-ltr .ag-cell {\n border-right: var(--ag-cell-horizontal-border);\n }\n .ag-rtl .ag-cell {\n border-left: var(--ag-cell-horizontal-border);\n }\n .ag-ltr .ag-cell {\n border-right-width: 1px;\n }\n .ag-rtl .ag-cell {\n border-left-width: 1px;\n }\n\n .ag-cell.ag-cell-first-right-pinned:not(.ag-cell-range-left):not(.ag-cell-range-single-cell) {\n border-left: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-cell.ag-cell-last-left-pinned:not(.ag-cell-range-right):not(.ag-cell-range-single-cell) {\n border-right: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-cell-range-selected:not(.ag-cell-focus),\n .ag-body-viewport:not(.ag-has-focus) .ag-cell-range-single-cell:not(.ag-cell-inline-editing) {\n background-color: var(--ag-range-selection-background-color);\n }\n .ag-cell-range-selected:not(.ag-cell-focus).ag-cell-range-chart,\n .ag-body-viewport:not(.ag-has-focus)\n .ag-cell-range-single-cell:not(.ag-cell-inline-editing).ag-cell-range-chart {\n background-color: var(--ag-range-selection-chart-background-color) !important;\n }\n .ag-cell-range-selected:not(.ag-cell-focus).ag-cell-range-chart.ag-cell-range-chart-category,\n .ag-body-viewport:not(.ag-has-focus)\n .ag-cell-range-single-cell:not(\n .ag-cell-inline-editing\n ).ag-cell-range-chart.ag-cell-range-chart-category {\n background-color: var(--ag-range-selection-chart-category-background-color) !important;\n }\n\n .ag-cell-range-selected-1:not(.ag-cell-focus),\n .ag-root:not(.ag-context-menu-open)\n .ag-body-viewport:not(.ag-has-focus)\n .ag-cell-range-selected-1:not(.ag-cell-inline-editing) {\n background-color: var(--ag-range-selection-background-color);\n }\n\n .ag-cell-range-selected-2:not(.ag-cell-focus),\n .ag-body-viewport:not(.ag-has-focus) .ag-cell-range-selected-2 {\n background-color: var(--ag-range-selection-background-color-2);\n }\n\n .ag-cell-range-selected-3:not(.ag-cell-focus),\n .ag-body-viewport:not(.ag-has-focus) .ag-cell-range-selected-3 {\n background-color: var(--ag-range-selection-background-color-3);\n }\n\n .ag-cell-range-selected-4:not(.ag-cell-focus),\n .ag-body-viewport:not(.ag-has-focus) .ag-cell-range-selected-4 {\n background-color: var(--ag-range-selection-background-color-4);\n }\n\n .ag-cell.ag-cell-range-selected:not(.ag-cell-range-single-cell).ag-cell-range-top {\n border-top-color: var(--ag-range-selection-border-color);\n border-top-style: var(--ag-range-selection-border-style);\n }\n .ag-cell.ag-cell-range-selected:not(.ag-cell-range-single-cell).ag-cell-range-right {\n border-right-color: var(--ag-range-selection-border-color);\n border-right-style: var(--ag-range-selection-border-style);\n }\n .ag-cell.ag-cell-range-selected:not(.ag-cell-range-single-cell).ag-cell-range-bottom {\n border-bottom-color: var(--ag-range-selection-border-color);\n border-bottom-style: var(--ag-range-selection-border-style);\n }\n .ag-cell.ag-cell-range-selected:not(.ag-cell-range-single-cell).ag-cell-range-left {\n border-left-color: var(--ag-range-selection-border-color);\n border-left-style: var(--ag-range-selection-border-style);\n }\n\n .ag-ltr .ag-cell-focus:not(.ag-cell-range-selected):focus-within,\n .ag-ltr .ag-context-menu-open .ag-cell-focus:not(.ag-cell-range-selected),\n .ag-ltr .ag-full-width-row.ag-row-focus:focus .ag-cell-wrapper.ag-row-group,\n .ag-ltr .ag-cell-range-single-cell,\n .ag-ltr .ag-cell-range-single-cell.ag-cell-range-handle,\n .ag-rtl .ag-cell-focus:not(.ag-cell-range-selected):focus-within,\n .ag-rtl .ag-context-menu-open .ag-cell-focus:not(.ag-cell-range-selected),\n .ag-rtl .ag-full-width-row.ag-row-focus:focus .ag-cell-wrapper.ag-row-group,\n .ag-rtl .ag-cell-range-single-cell,\n .ag-rtl .ag-cell-range-single-cell.ag-cell-range-handle {\n border: 1px solid;\n border-color: var(--ag-range-selection-border-color);\n border-style: var(--ag-range-selection-border-style);\n outline: initial;\n }\n\n .ag-cell.ag-selection-fill-top,\n .ag-cell.ag-selection-fill-top.ag-cell-range-selected {\n border-top: 1px dashed;\n border-top-color: var(--ag-range-selection-border-color);\n }\n\n .ag-ltr .ag-cell.ag-selection-fill-right,\n .ag-ltr .ag-cell.ag-selection-fill-right.ag-cell-range-selected {\n border-right: 1px dashed var(--ag-range-selection-border-color) !important;\n }\n .ag-rtl .ag-cell.ag-selection-fill-right,\n .ag-rtl .ag-cell.ag-selection-fill-right.ag-cell-range-selected {\n border-left: 1px dashed var(--ag-range-selection-border-color) !important;\n }\n\n .ag-cell.ag-selection-fill-bottom,\n .ag-cell.ag-selection-fill-bottom.ag-cell-range-selected {\n border-bottom: 1px dashed;\n border-bottom-color: var(--ag-range-selection-border-color);\n }\n\n .ag-ltr .ag-cell.ag-selection-fill-left,\n .ag-ltr .ag-cell.ag-selection-fill-left.ag-cell-range-selected {\n border-left: 1px dashed var(--ag-range-selection-border-color) !important;\n }\n .ag-rtl .ag-cell.ag-selection-fill-left,\n .ag-rtl .ag-cell.ag-selection-fill-left.ag-cell-range-selected {\n border-right: 1px dashed var(--ag-range-selection-border-color) !important;\n }\n\n .ag-fill-handle,\n .ag-range-handle {\n position: absolute;\n width: 6px;\n height: 6px;\n bottom: -1px;\n background-color: var(--ag-range-selection-border-color);\n }\n .ag-ltr .ag-fill-handle,\n .ag-ltr .ag-range-handle {\n right: -1px;\n }\n .ag-rtl .ag-fill-handle,\n .ag-rtl .ag-range-handle {\n left: -1px;\n }\n\n .ag-fill-handle {\n cursor: cell;\n }\n\n .ag-range-handle {\n cursor: nwse-resize;\n }\n\n .ag-cell-inline-editing {\n border-color: var(--ag-input-focus-border-color) !important;\n }\n\n .ag-menu {\n border: var(--ag-borders) var(--ag-border-color);\n background: var(--ag-background-color);\n border-radius: var(--ag-card-radius);\n box-shadow: var(--ag-card-shadow);\n padding: var(--ag-grid-size);\n padding: 0;\n }\n\n .ag-menu-list {\n cursor: default;\n padding: var(--ag-grid-size) 0;\n }\n\n .ag-menu-separator {\n height: calc(var(--ag-grid-size) * 2 + 1px);\n }\n\n .ag-menu-separator-part::after {\n content: '';\n display: block;\n border-top: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-menu-option-active,\n .ag-compact-menu-option-active {\n background-color: var(--ag-row-hover-color);\n }\n\n .ag-menu-option-part,\n .ag-compact-menu-option-part {\n line-height: var(--ag-icon-size);\n padding: calc(var(--ag-grid-size) + 2px) 0;\n }\n\n .ag-menu-option-disabled,\n .ag-compact-menu-option-disabled {\n opacity: 0.5;\n }\n\n .ag-menu-option-icon,\n .ag-compact-menu-option-icon {\n width: var(--ag-icon-size);\n }\n .ag-ltr .ag-menu-option-icon,\n .ag-ltr .ag-compact-menu-option-icon {\n padding-left: calc(var(--ag-grid-size) * 2);\n }\n .ag-rtl .ag-menu-option-icon,\n .ag-rtl .ag-compact-menu-option-icon {\n padding-right: calc(var(--ag-grid-size) * 2);\n }\n\n .ag-menu-option-text,\n .ag-compact-menu-option-text {\n padding-left: calc(var(--ag-grid-size) * 2);\n padding-right: calc(var(--ag-grid-size) * 2);\n }\n\n .ag-ltr .ag-menu-option-shortcut,\n .ag-ltr .ag-compact-menu-option-shortcut {\n padding-right: var(--ag-grid-size);\n }\n .ag-rtl .ag-menu-option-shortcut,\n .ag-rtl .ag-compact-menu-option-shortcut {\n padding-left: var(--ag-grid-size);\n }\n\n .ag-menu-option-popup-pointer,\n .ag-compact-menu-option-popup-pointer {\n padding-right: var(--ag-grid-size);\n }\n\n .ag-tabs {\n min-width: var(--ag-tab-min-width);\n }\n\n .ag-tabs-header {\n width: 100%;\n display: flex;\n }\n\n .ag-tab {\n border-bottom: var(--ag-selected-tab-underline-width) solid transparent;\n transition: border-bottom var(--ag-selected-tab-underline-transition-speed);\n display: flex;\n flex: none;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n }\n\n .ag-keyboard-focus .ag-tab:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-tab:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 4px;\n left: 4px;\n display: block;\n width: calc(100% - 8px);\n height: calc(100% - 8px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-tab-selected {\n border-bottom-color: var(--ag-selected-tab-underline-color);\n }\n\n .ag-menu-header {\n color: var(--ag-secondary-foreground-color);\n }\n\n .ag-filter-separator {\n border-top: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-menu:not(.ag-tabs) .ag-filter-select {\n min-width: calc(\n var(--ag-menu-min-width) - 2 * var(--ag-widget-container-horizontal-padding) - 2px\n );\n }\n\n .ag-tabs .ag-filter-select {\n min-width: calc(\n var(--ag-tab-min-width) - 2 * var(--ag-widget-container-horizontal-padding) - 2px\n );\n }\n\n .ag-filter-select .ag-picker-field-wrapper {\n width: 0;\n }\n\n .ag-filter-condition-operator {\n height: 17px;\n }\n\n .ag-ltr .ag-filter-condition-operator-or {\n margin-left: calc(var(--ag-grid-size) * 2);\n }\n .ag-rtl .ag-filter-condition-operator-or {\n margin-right: calc(var(--ag-grid-size) * 2);\n }\n\n .ag-set-filter-select-all {\n padding-top: var(--ag-widget-container-vertical-padding);\n }\n\n .ag-set-filter-list,\n .ag-filter-no-matches {\n height: calc(var(--ag-list-item-height) * 6);\n }\n\n .ag-set-filter-tree-list {\n height: calc(var(--ag-list-item-height) * 10);\n }\n\n .ag-set-filter-filter {\n margin-top: var(--ag-widget-container-vertical-padding);\n margin-left: var(--ag-widget-container-horizontal-padding);\n margin-right: var(--ag-widget-container-horizontal-padding);\n }\n\n .ag-filter-to {\n margin-top: var(--ag-widget-vertical-spacing);\n }\n\n .ag-mini-filter {\n margin: var(--ag-widget-container-vertical-padding)\n var(--ag-widget-container-horizontal-padding);\n }\n\n .ag-set-filter-item {\n margin: 0px var(--ag-widget-container-horizontal-padding);\n }\n\n .ag-ltr .ag-set-filter-add-group-indent {\n margin-left: calc(\n var(--ag-widget-container-horizontal-padding) + var(--ag-icon-size) + var(--ag-grid-size) * 2\n );\n }\n .ag-rtl .ag-set-filter-add-group-indent {\n margin-right: calc(\n var(--ag-widget-container-horizontal-padding) + var(--ag-icon-size) + var(--ag-grid-size) * 2\n );\n }\n\n .ag-ltr .ag-set-filter-indent-1 {\n padding-left: calc(1 * var(--ag-set-filter-indent-size));\n }\n .ag-rtl .ag-set-filter-indent-1 {\n padding-right: calc(1 * var(--ag-set-filter-indent-size));\n }\n\n .ag-ltr .ag-set-filter-indent-2 {\n padding-left: calc(2 * var(--ag-set-filter-indent-size));\n }\n .ag-rtl .ag-set-filter-indent-2 {\n padding-right: calc(2 * var(--ag-set-filter-indent-size));\n }\n\n .ag-ltr .ag-set-filter-indent-3 {\n padding-left: calc(3 * var(--ag-set-filter-indent-size));\n }\n .ag-rtl .ag-set-filter-indent-3 {\n padding-right: calc(3 * var(--ag-set-filter-indent-size));\n }\n\n .ag-ltr .ag-set-filter-indent-4 {\n padding-left: calc(4 * var(--ag-set-filter-indent-size));\n }\n .ag-rtl .ag-set-filter-indent-4 {\n padding-right: calc(4 * var(--ag-set-filter-indent-size));\n }\n\n .ag-ltr .ag-set-filter-indent-5 {\n padding-left: calc(5 * var(--ag-set-filter-indent-size));\n }\n .ag-rtl .ag-set-filter-indent-5 {\n padding-right: calc(5 * var(--ag-set-filter-indent-size));\n }\n\n .ag-ltr .ag-set-filter-indent-6 {\n padding-left: calc(6 * var(--ag-set-filter-indent-size));\n }\n .ag-rtl .ag-set-filter-indent-6 {\n padding-right: calc(6 * var(--ag-set-filter-indent-size));\n }\n\n .ag-ltr .ag-set-filter-indent-7 {\n padding-left: calc(7 * var(--ag-set-filter-indent-size));\n }\n .ag-rtl .ag-set-filter-indent-7 {\n padding-right: calc(7 * var(--ag-set-filter-indent-size));\n }\n\n .ag-ltr .ag-set-filter-indent-8 {\n padding-left: calc(8 * var(--ag-set-filter-indent-size));\n }\n .ag-rtl .ag-set-filter-indent-8 {\n padding-right: calc(8 * var(--ag-set-filter-indent-size));\n }\n\n .ag-ltr .ag-set-filter-indent-9 {\n padding-left: calc(9 * var(--ag-set-filter-indent-size));\n }\n .ag-rtl .ag-set-filter-indent-9 {\n padding-right: calc(9 * var(--ag-set-filter-indent-size));\n }\n\n .ag-ltr .ag-set-filter-group-icons {\n margin-right: var(--ag-widget-container-horizontal-padding);\n }\n .ag-rtl .ag-set-filter-group-icons {\n margin-left: var(--ag-widget-container-horizontal-padding);\n }\n\n .ag-filter-apply-panel {\n padding: var(--ag-widget-container-vertical-padding)\n var(--ag-widget-container-horizontal-padding);\n border-top: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n }\n\n .ag-filter-apply-panel-button {\n line-height: 1.5;\n }\n .ag-ltr .ag-filter-apply-panel-button {\n margin-left: calc(var(--ag-grid-size) * 2);\n }\n .ag-rtl .ag-filter-apply-panel-button {\n margin-right: calc(var(--ag-grid-size) * 2);\n }\n\n .ag-simple-filter-body-wrapper {\n padding: var(--ag-widget-container-vertical-padding)\n var(--ag-widget-container-horizontal-padding);\n padding-bottom: calc(\n var(--ag-widget-container-vertical-padding) - var(--ag-widget-vertical-spacing)\n );\n }\n .ag-simple-filter-body-wrapper > * {\n margin-bottom: var(--ag-widget-vertical-spacing);\n }\n\n .ag-filter-no-matches {\n padding: var(--ag-widget-container-vertical-padding)\n var(--ag-widget-container-horizontal-padding);\n }\n\n .ag-multi-filter-menu-item {\n margin: var(--ag-grid-size) 0;\n }\n\n .ag-multi-filter-group-title-bar {\n padding: calc(var(--ag-grid-size) * 2) var(--ag-grid-size);\n background-color: transparent;\n }\n\n .ag-keyboard-focus .ag-multi-filter-group-title-bar:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-multi-filter-group-title-bar:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 4px;\n left: 4px;\n display: block;\n width: calc(100% - 8px);\n height: calc(100% - 8px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-side-bar {\n position: relative;\n }\n\n .ag-tool-panel-wrapper {\n width: var(--ag-side-bar-panel-width);\n background-color: var(--ag-control-panel-background-color);\n }\n\n .ag-side-buttons {\n padding-top: calc(var(--ag-grid-size) * 4);\n width: calc(var(--ag-icon-size) + 4px);\n position: relative;\n color: var(--ag-foreground-color);\n overflow: hidden;\n }\n\n button.ag-side-button-button {\n color: inherit;\n font-family: inherit;\n font-size: inherit;\n font-weight: inherit;\n line-height: inherit;\n background: transparent;\n padding: calc(var(--ag-grid-size) * 2) 0 calc(var(--ag-grid-size) * 2) 0;\n width: 100%;\n margin: 0;\n min-height: calc(var(--ag-grid-size) * 18);\n background-position-y: center;\n background-position-x: center;\n background-repeat: no-repeat;\n border: none;\n border-top: var(--ag-borders-side-button) var(--ag-border-color);\n border-bottom: var(--ag-borders-side-button) var(--ag-border-color);\n }\n button.ag-side-button-button:focus {\n box-shadow: none;\n }\n\n .ag-keyboard-focus .ag-side-button-button:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-side-button-button:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 4px;\n left: 4px;\n display: block;\n width: calc(100% - 8px);\n height: calc(100% - 8px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-selected button.ag-side-button-button {\n background-color: var(--ag-side-button-selected-background-color);\n }\n\n .ag-side-button-icon-wrapper {\n margin-bottom: 3px;\n }\n\n .ag-ltr .ag-side-bar-left,\n .ag-rtl .ag-side-bar-right {\n border-right: var(--ag-borders) var(--ag-border-color);\n }\n .ag-ltr .ag-side-bar-left .ag-tool-panel-wrapper,\n .ag-rtl .ag-side-bar-right .ag-tool-panel-wrapper {\n border-left: var(--ag-borders) var(--ag-border-color);\n }\n .ag-ltr .ag-side-bar-left .ag-side-button-button,\n .ag-rtl .ag-side-bar-right .ag-side-button-button {\n border-right: var(--ag-selected-tab-underline-width) solid transparent;\n transition: border-right var(--ag-selected-tab-underline-transition-speed);\n }\n .ag-ltr .ag-side-bar-left .ag-selected .ag-side-button-button,\n .ag-rtl .ag-side-bar-right .ag-selected .ag-side-button-button {\n border-right-color: var(--ag-selected-tab-underline-color);\n }\n\n .ag-rtl .ag-side-bar-left,\n .ag-ltr .ag-side-bar-right {\n border-left: var(--ag-borders) var(--ag-border-color);\n }\n .ag-rtl .ag-side-bar-left .ag-tool-panel-wrapper,\n .ag-ltr .ag-side-bar-right .ag-tool-panel-wrapper {\n border-right: var(--ag-borders) var(--ag-border-color);\n }\n .ag-rtl .ag-side-bar-left .ag-side-button-button,\n .ag-ltr .ag-side-bar-right .ag-side-button-button {\n border-left: var(--ag-selected-tab-underline-width) solid transparent;\n transition: border-left var(--ag-selected-tab-underline-transition-speed);\n }\n .ag-rtl .ag-side-bar-left .ag-selected .ag-side-button-button,\n .ag-ltr .ag-side-bar-right .ag-selected .ag-side-button-button {\n border-left-color: var(--ag-selected-tab-underline-color);\n }\n\n .ag-filter-toolpanel-header {\n height: calc(var(--ag-grid-size) * 6);\n }\n\n .ag-ltr .ag-filter-toolpanel-header,\n .ag-ltr .ag-filter-toolpanel-search {\n padding-left: var(--ag-grid-size);\n }\n .ag-rtl .ag-filter-toolpanel-header,\n .ag-rtl .ag-filter-toolpanel-search {\n padding-right: var(--ag-grid-size);\n }\n\n .ag-keyboard-focus .ag-filter-toolpanel-header:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-filter-toolpanel-header:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 4px;\n left: 4px;\n display: block;\n width: calc(100% - 8px);\n height: calc(100% - 8px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-filter-toolpanel-group.ag-has-filter > .ag-group-title-bar .ag-group-title::after {\n font-family: var(--ag-icon-font-family);\n font-size: var(--ag-icon-size);\n line-height: var(--ag-icon-size);\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n content: var(--ag-icon-font-code-filter, '\\\\f114');\n position: absolute;\n }\n .ag-ltr .ag-filter-toolpanel-group.ag-has-filter > .ag-group-title-bar .ag-group-title::after {\n padding-left: var(--ag-grid-size);\n }\n .ag-rtl .ag-filter-toolpanel-group.ag-has-filter > .ag-group-title-bar .ag-group-title::after {\n padding-right: var(--ag-grid-size);\n }\n\n .ag-filter-toolpanel-group-level-0-header {\n height: calc(var(--ag-grid-size) * 8);\n }\n\n .ag-filter-toolpanel-group-item {\n margin-top: calc(var(--ag-grid-size) * 0.5);\n margin-bottom: calc(var(--ag-grid-size) * 0.5);\n }\n\n .ag-filter-toolpanel-search {\n height: var(--ag-header-height);\n }\n\n .ag-filter-toolpanel-search-input {\n flex-grow: 1;\n height: calc(var(--ag-grid-size) * 4);\n }\n .ag-ltr .ag-filter-toolpanel-search-input {\n margin-right: var(--ag-grid-size);\n }\n .ag-rtl .ag-filter-toolpanel-search-input {\n margin-left: var(--ag-grid-size);\n }\n\n .ag-filter-toolpanel-group-level-0 {\n border-top: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n }\n\n .ag-ltr .ag-filter-toolpanel-expand,\n .ag-ltr .ag-filter-toolpanel-group-title-bar-icon {\n margin-right: var(--ag-grid-size);\n }\n .ag-rtl .ag-filter-toolpanel-expand,\n .ag-rtl .ag-filter-toolpanel-group-title-bar-icon {\n margin-left: var(--ag-grid-size);\n }\n\n .ag-filter-toolpanel-group-level-1\n .ag-filter-toolpanel-group-level-1-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-1 .ag-filter-toolpanel-group-level-2-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 1 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-1 .ag-filter-toolpanel-group-level-2-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 1 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-group-level-2\n .ag-filter-toolpanel-group-level-2-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-2 .ag-filter-toolpanel-group-level-3-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 2 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-2 .ag-filter-toolpanel-group-level-3-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 2 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-group-level-3\n .ag-filter-toolpanel-group-level-3-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-3 .ag-filter-toolpanel-group-level-4-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 3 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-3 .ag-filter-toolpanel-group-level-4-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 3 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-group-level-4\n .ag-filter-toolpanel-group-level-4-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-4 .ag-filter-toolpanel-group-level-5-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 4 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-4 .ag-filter-toolpanel-group-level-5-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 4 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-group-level-5\n .ag-filter-toolpanel-group-level-5-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-5 .ag-filter-toolpanel-group-level-6-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 5 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-5 .ag-filter-toolpanel-group-level-6-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 5 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-group-level-6\n .ag-filter-toolpanel-group-level-6-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-6 .ag-filter-toolpanel-group-level-7-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 6 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-6 .ag-filter-toolpanel-group-level-7-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 6 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-group-level-7\n .ag-filter-toolpanel-group-level-7-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-7 .ag-filter-toolpanel-group-level-8-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 7 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-7 .ag-filter-toolpanel-group-level-8-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 7 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-group-level-8\n .ag-filter-toolpanel-group-level-8-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-8 .ag-filter-toolpanel-group-level-9-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 8 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-8 .ag-filter-toolpanel-group-level-9-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 8 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-group-level-9\n .ag-filter-toolpanel-group-level-9-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-9 .ag-filter-toolpanel-group-level-10-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 9 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-9 .ag-filter-toolpanel-group-level-10-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 9 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-group-level-10\n .ag-filter-toolpanel-group-level-10-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-10 .ag-filter-toolpanel-group-level-11-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 10 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-10 .ag-filter-toolpanel-group-level-11-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 10 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-instance-header.ag-filter-toolpanel-group-level-1-header {\n padding-left: var(--ag-grid-size);\n }\n\n .ag-filter-toolpanel-instance-filter {\n border-bottom: var(--ag-borders) var(--ag-border-color);\n border-top: var(--ag-borders) var(--ag-border-color);\n margin-top: var(--ag-grid-size);\n }\n\n .ag-ltr .ag-filter-toolpanel-instance-header-icon {\n margin-left: var(--ag-grid-size);\n }\n .ag-rtl .ag-filter-toolpanel-instance-header-icon {\n margin-right: var(--ag-grid-size);\n }\n\n .ag-set-filter-group-icons {\n color: var(--ag-secondary-foreground-color);\n }\n\n .ag-pivot-mode-panel {\n min-height: var(--ag-header-height);\n height: var(--ag-header-height);\n display: flex;\n }\n\n .ag-pivot-mode-select {\n display: flex;\n align-items: center;\n }\n .ag-ltr .ag-pivot-mode-select {\n margin-left: var(--ag-widget-container-horizontal-padding);\n }\n .ag-rtl .ag-pivot-mode-select {\n margin-right: var(--ag-widget-container-horizontal-padding);\n }\n\n .ag-keyboard-focus .ag-column-select-header:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-column-select-header:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 4px;\n left: 4px;\n display: block;\n width: calc(100% - 8px);\n height: calc(100% - 8px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-column-select-header {\n height: var(--ag-header-height);\n align-items: center;\n padding: 0 var(--ag-widget-container-horizontal-padding);\n border-bottom: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n }\n\n .ag-column-panel-column-select {\n border-bottom: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n border-top: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n }\n\n .ag-column-group-icons,\n .ag-column-select-header-icon {\n color: var(--ag-secondary-foreground-color);\n }\n\n .ag-column-select-list .ag-list-item-hovered::after {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n height: 1px;\n background-color: var(--ag-range-selection-border-color);\n }\n .ag-column-select-list .ag-item-highlight-top::after {\n top: 0;\n }\n .ag-column-select-list .ag-item-highlight-bottom::after {\n bottom: 0;\n }\n\n .ag-header {\n background-color: var(--ag-header-background-color);\n border-bottom: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-header-row {\n color: var(--ag-header-foreground-color);\n height: var(--ag-header-height);\n }\n\n .ag-pinned-right-header {\n border-left: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-pinned-left-header {\n border-right: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-ltr .ag-header-cell:not(.ag-right-aligned-header) .ag-header-label-icon {\n margin-left: var(--ag-grid-size);\n }\n .ag-rtl .ag-header-cell:not(.ag-right-aligned-header) .ag-header-label-icon {\n margin-right: var(--ag-grid-size);\n }\n\n .ag-ltr .ag-header-cell.ag-right-aligned-header .ag-header-label-icon {\n margin-right: var(--ag-grid-size);\n }\n .ag-rtl .ag-header-cell.ag-right-aligned-header .ag-header-label-icon {\n margin-left: var(--ag-grid-size);\n }\n\n .ag-header-cell,\n .ag-header-group-cell {\n padding-left: var(--ag-cell-horizontal-padding);\n padding-right: var(--ag-cell-horizontal-padding);\n }\n .ag-header-cell.ag-header-cell-moving,\n .ag-header-group-cell.ag-header-cell-moving {\n background-color: var(--ag-header-cell-moving-background-color);\n }\n\n .ag-keyboard-focus .ag-header-cell:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-header-cell:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 4px;\n left: 4px;\n display: block;\n width: calc(100% - 8px);\n height: calc(100% - 8px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n .ag-keyboard-focus .ag-header-group-cell:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-header-group-cell:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 4px;\n left: 4px;\n display: block;\n width: calc(100% - 8px);\n height: calc(100% - 8px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-header-icon {\n color: var(--ag-secondary-foreground-color);\n }\n\n .ag-header-expand-icon {\n cursor: pointer;\n }\n .ag-ltr .ag-header-expand-icon {\n padding-left: 4px;\n }\n .ag-rtl .ag-header-expand-icon {\n padding-right: 4px;\n }\n\n .ag-header-row:not(:first-child) .ag-header-cell,\n .ag-header-row:not(:first-child) .ag-header-group-cell.ag-header-group-cell-with-group {\n border-top: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-header-group-cell:not(.ag-column-resizing)\n + .ag-header-group-cell:not(.ag-column-hover):not(.ag-header-cell-moving):hover,\n .ag-header-group-cell:not(.ag-column-resizing)\n + .ag-header-group-cell:not(.ag-column-hover).ag-column-resizing,\n .ag-header-cell:not(.ag-column-resizing)\n + .ag-header-cell:not(.ag-column-hover):not(.ag-header-cell-moving):hover,\n .ag-header-cell:not(.ag-column-resizing)\n + .ag-header-cell:not(.ag-column-hover).ag-column-resizing,\n .ag-header-group-cell:first-of-type:not(.ag-header-cell-moving):hover,\n .ag-header-group-cell:first-of-type.ag-column-resizing,\n .ag-header-cell:not(.ag-column-hover):first-of-type:not(.ag-header-cell-moving):hover,\n .ag-header-cell:not(.ag-column-hover):first-of-type.ag-column-resizing {\n background-color: var(--ag-header-cell-hover-background-color);\n }\n\n .ag-header-cell::after,\n .ag-header-group-cell::after {\n content: '';\n position: absolute;\n z-index: 1;\n display: var(--ag-header-column-separator-display);\n width: var(--ag-header-column-separator-width);\n height: var(--ag-header-column-separator-height);\n top: calc(50% - var(--ag-header-column-separator-height) * 0.5);\n background-color: var(--ag-header-column-separator-color);\n }\n .ag-ltr .ag-header-cell::after,\n .ag-ltr .ag-header-group-cell::after {\n right: 0;\n }\n .ag-rtl .ag-header-cell::after,\n .ag-rtl .ag-header-group-cell::after {\n left: 0;\n }\n\n .ag-header-cell-resize {\n display: flex;\n align-items: center;\n }\n\n .ag-header-cell-resize::after {\n content: '';\n position: absolute;\n z-index: 1;\n display: var(--ag-header-column-resize-handle-display);\n width: var(--ag-header-column-resize-handle-width);\n height: var(--ag-header-column-resize-handle-height);\n top: calc(50% - var(--ag-header-column-resize-handle-height) * 0.5);\n background-color: var(--ag-header-column-resize-handle-color);\n }\n\n .ag-ltr .ag-header-viewport .ag-header-cell-resize::after {\n left: calc(50% - var(--ag-header-column-resize-handle-width));\n }\n .ag-rtl .ag-header-viewport .ag-header-cell-resize::after {\n right: calc(50% - var(--ag-header-column-resize-handle-width));\n }\n\n .ag-pinned-left-header .ag-header-cell-resize::after {\n left: calc(50% - var(--ag-header-column-resize-handle-width));\n }\n\n .ag-pinned-right-header .ag-header-cell-resize::after {\n left: 50%;\n }\n\n .ag-ltr .ag-header-select-all {\n margin-right: var(--ag-cell-horizontal-padding);\n }\n .ag-rtl .ag-header-select-all {\n margin-left: var(--ag-cell-horizontal-padding);\n }\n\n .ag-ltr .ag-floating-filter-button {\n margin-left: calc(var(--ag-grid-size) * 3);\n }\n .ag-rtl .ag-floating-filter-button {\n margin-right: calc(var(--ag-grid-size) * 3);\n }\n\n .ag-floating-filter-button-button {\n color: inherit;\n font-family: inherit;\n font-size: inherit;\n font-weight: inherit;\n line-height: inherit;\n appearance: none;\n background: transparent;\n border: none;\n height: var(--ag-icon-size);\n padding: 0;\n width: var(--ag-icon-size);\n }\n\n .ag-filter-loading {\n background-color: var(--ag-control-panel-background-color);\n height: 100%;\n padding: var(--ag-widget-container-vertical-padding)\n var(--ag-widget-container-horizontal-padding);\n position: absolute;\n width: 100%;\n z-index: 1;\n }\n\n .ag-paging-panel {\n border-top: 1px solid;\n border-top-color: var(--ag-border-color);\n color: var(--ag-secondary-foreground-color);\n height: var(--ag-header-height);\n }\n .ag-paging-panel > * {\n margin: 0 var(--ag-cell-horizontal-padding);\n }\n\n .ag-paging-button {\n cursor: pointer;\n }\n\n .ag-paging-button.ag-disabled {\n cursor: default;\n color: var(--ag-disabled-foreground-color);\n }\n\n .ag-keyboard-focus .ag-paging-button:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-paging-button:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 0px;\n left: 0px;\n display: block;\n width: calc(100% - 0px);\n height: calc(100% - 0px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-paging-button,\n .ag-paging-description {\n margin: 0 var(--ag-grid-size);\n }\n\n .ag-status-bar {\n border-top: var(--ag-borders) var(--ag-border-color);\n color: var(--ag-disabled-foreground-color);\n padding-right: calc(var(--ag-grid-size) * 4);\n padding-left: calc(var(--ag-grid-size) * 4);\n line-height: 1.5;\n }\n\n .ag-status-name-value-value {\n color: var(--ag-foreground-color);\n }\n\n .ag-status-bar-center {\n text-align: center;\n }\n\n .ag-status-name-value {\n margin-left: var(--ag-grid-size);\n margin-right: var(--ag-grid-size);\n padding-top: calc(var(--ag-grid-size) * 2);\n padding-bottom: calc(var(--ag-grid-size) * 2);\n }\n\n .ag-column-drop-cell {\n background: var(--ag-chip-background-color);\n border-radius: calc(var(--ag-grid-size) * 4);\n height: calc(var(--ag-grid-size) * 4);\n padding: 0 calc(var(--ag-grid-size) * 0.5);\n border: 1px solid transparent;\n }\n\n .ag-keyboard-focus .ag-column-drop-cell:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-column-drop-cell:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 2px;\n left: 2px;\n display: block;\n width: calc(100% - 4px);\n height: calc(100% - 4px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-column-drop-cell-text {\n margin: 0 var(--ag-grid-size);\n }\n\n .ag-column-drop-cell-button {\n min-width: calc(var(--ag-grid-size) * 4);\n margin: 0 calc(var(--ag-grid-size) * 0.5);\n color: var(--ag-secondary-foreground-color);\n }\n\n .ag-column-drop-cell-drag-handle {\n margin-left: calc(var(--ag-grid-size) * 2);\n }\n\n .ag-column-drop-cell-ghost {\n opacity: 0.5;\n }\n\n .ag-column-drop-horizontal {\n background-color: var(--ag-control-panel-background-color);\n color: var(--ag-secondary-foreground-color);\n height: var(--ag-row-height);\n border-bottom: var(--ag-borders) var(--ag-border-color);\n }\n .ag-ltr .ag-column-drop-horizontal {\n padding-left: var(--ag-cell-horizontal-padding);\n }\n .ag-rtl .ag-column-drop-horizontal {\n padding-right: var(--ag-cell-horizontal-padding);\n }\n\n .ag-ltr .ag-column-drop-horizontal-half-width:not(:last-child) {\n border-right: var(--ag-borders) var(--ag-border-color);\n }\n .ag-rtl .ag-column-drop-horizontal-half-width:not(:last-child) {\n border-left: var(--ag-borders) var(--ag-border-color);\n }\n\n .ag-column-drop-horizontal-cell-separator {\n margin: 0 var(--ag-grid-size);\n color: var(--ag-secondary-foreground-color);\n }\n\n .ag-column-drop-horizontal-empty-message {\n color: var(--ag-disabled-foreground-color);\n }\n\n .ag-ltr .ag-column-drop-horizontal-icon {\n margin-right: var(--ag-cell-horizontal-padding);\n }\n .ag-rtl .ag-column-drop-horizontal-icon {\n margin-left: var(--ag-cell-horizontal-padding);\n }\n\n .ag-column-drop-vertical-list {\n padding-bottom: var(--ag-grid-size);\n padding-right: var(--ag-grid-size);\n padding-left: var(--ag-grid-size);\n }\n\n .ag-column-drop-vertical-cell {\n margin-top: var(--ag-grid-size);\n }\n\n .ag-column-drop-vertical {\n min-height: 50px;\n border-bottom: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n }\n .ag-column-drop-vertical.ag-last-column-drop {\n border-bottom: none;\n }\n\n .ag-column-drop-vertical-icon {\n margin-left: var(--ag-grid-size);\n margin-right: var(--ag-grid-size);\n }\n\n .ag-column-drop-vertical-empty-message {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n overflow: hidden;\n color: var(--ag-disabled-foreground-color);\n margin-top: var(--ag-grid-size);\n }\n\n .ag-select-agg-func-popup {\n border: var(--ag-borders) var(--ag-border-color);\n background: var(--ag-background-color);\n border-radius: var(--ag-card-radius);\n box-shadow: var(--ag-card-shadow);\n padding: var(--ag-grid-size);\n background: var(--ag-background-color);\n height: calc(var(--ag-grid-size) * 5 * 3.5);\n padding: 0;\n }\n\n .ag-select-agg-func-virtual-list-item {\n cursor: default;\n padding-left: calc(var(--ag-grid-size) * 2);\n }\n .ag-select-agg-func-virtual-list-item:hover {\n background-color: var(--ag-selected-row-background-color);\n }\n\n .ag-keyboard-focus .ag-select-agg-func-virtual-list-item:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-select-agg-func-virtual-list-item:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 1px;\n left: 1px;\n display: block;\n width: calc(100% - 2px);\n height: calc(100% - 2px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-sort-indicator-container {\n display: flex;\n }\n\n .ag-ltr .ag-sort-indicator-icon {\n padding-left: var(--ag-grid-size);\n }\n .ag-rtl .ag-sort-indicator-icon {\n padding-right: var(--ag-grid-size);\n }\n\n .ag-chart {\n position: relative;\n display: flex;\n overflow: hidden;\n width: 100%;\n height: 100%;\n }\n\n .ag-chart-components-wrapper {\n position: relative;\n display: flex;\n flex: 1 1 auto;\n overflow: hidden;\n }\n\n .ag-chart-title-edit {\n position: absolute;\n display: none;\n top: 0;\n left: 0;\n text-align: center;\n }\n\n .ag-chart-title-edit.currently-editing {\n display: inline-block;\n }\n\n .ag-chart-canvas-wrapper {\n position: relative;\n flex: 1 1 auto;\n overflow: hidden;\n }\n\n .ag-charts-canvas {\n display: block;\n }\n\n .ag-chart-menu {\n position: absolute;\n top: 10px;\n width: 24px;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n }\n .ag-ltr .ag-chart-menu {\n right: 20px;\n }\n .ag-rtl .ag-chart-menu {\n left: 20px;\n }\n\n .ag-chart-docked-container {\n position: relative;\n width: 0;\n min-width: 0;\n transition: min-width 0.4s;\n }\n\n .ag-chart-menu-hidden ~ .ag-chart-docked-container {\n max-width: 0;\n overflow: hidden;\n }\n\n .ag-chart-tabbed-menu {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n .ag-chart-tabbed-menu-header {\n flex: none;\n user-select: none;\n cursor: default;\n }\n\n .ag-chart-tabbed-menu-body {\n display: flex;\n flex: 1 1 auto;\n align-items: stretch;\n overflow: hidden;\n }\n\n .ag-chart-tab {\n width: 100%;\n overflow: hidden;\n overflow-y: auto;\n }\n\n .ag-chart-settings {\n overflow-x: hidden;\n }\n\n .ag-chart-settings-wrapper {\n position: relative;\n flex-direction: column;\n width: 100%;\n height: 100%;\n display: flex;\n overflow: hidden;\n }\n\n .ag-chart-settings-nav-bar {\n display: flex;\n align-items: center;\n width: 100%;\n height: 30px;\n padding: 0 10px;\n user-select: none;\n }\n\n .ag-chart-settings-card-selector {\n display: flex;\n align-items: center;\n justify-content: space-around;\n flex: 1 1 auto;\n height: 100%;\n padding: 0 10px;\n }\n\n .ag-chart-settings-card-item {\n cursor: pointer;\n width: 10px;\n height: 10px;\n background-color: #000;\n position: relative;\n }\n .ag-chart-settings-card-item.ag-not-selected {\n opacity: 0.2;\n }\n .ag-chart-settings-card-item::before {\n content: ' ';\n display: block;\n position: absolute;\n background-color: transparent;\n left: 50%;\n top: 50%;\n margin-left: -10px;\n margin-top: -10px;\n width: 20px;\n height: 20px;\n }\n\n .ag-chart-settings-prev,\n .ag-chart-settings-next {\n position: relative;\n flex: none;\n }\n\n .ag-chart-settings-prev-button,\n .ag-chart-settings-next-button {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n cursor: pointer;\n opacity: 0;\n }\n\n .ag-chart-settings-mini-charts-container {\n position: relative;\n flex: 1 1 auto;\n overflow-x: hidden;\n overflow-y: auto;\n }\n\n .ag-chart-settings-mini-wrapper {\n position: absolute;\n top: 0;\n left: 0;\n display: flex;\n flex-direction: column;\n width: 100%;\n min-height: 100%;\n overflow: hidden;\n }\n .ag-chart-settings-mini-wrapper.ag-animating {\n transition: left 0.3s;\n transition-timing-function: ease-in-out;\n }\n\n .ag-chart-mini-thumbnail {\n cursor: pointer;\n }\n\n .ag-chart-mini-thumbnail-canvas {\n display: block;\n }\n\n .ag-chart-data-wrapper,\n .ag-chart-format-wrapper {\n display: flex;\n flex-direction: column;\n position: relative;\n user-select: none;\n }\n\n .ag-chart-data-wrapper {\n height: 100%;\n overflow-y: auto;\n }\n\n .ag-chart-data-section,\n .ag-chart-format-section {\n display: flex;\n margin: 0;\n }\n\n .ag-chart-empty-text {\n display: flex;\n top: 0;\n width: 100%;\n height: 100%;\n align-items: center;\n justify-content: center;\n }\n\n .ag-chart .ag-chart-menu {\n display: none;\n }\n\n .ag-chart-menu-hidden:hover .ag-chart-menu {\n display: block;\n }\n\n .ag-chart .ag-chart-tool-panel-button-enable .ag-chart-menu {\n display: flex;\n flex-direction: row;\n overflow: auto;\n top: 5px;\n gap: calc(var(--ag-grid-size) * 3 - 8px);\n width: auto;\n }\n .ag-ltr .ag-chart .ag-chart-tool-panel-button-enable .ag-chart-menu {\n right: calc(var(--ag-cell-horizontal-padding) + var(--ag-grid-size) - 4px);\n justify-content: right;\n }\n .ag-rtl .ag-chart .ag-chart-tool-panel-button-enable .ag-chart-menu {\n left: calc(var(--ag-cell-horizontal-padding) + var(--ag-grid-size) - 4px);\n justify-content: left;\n }\n\n .ag-chart-menu-close {\n display: none;\n }\n\n .ag-chart-tool-panel-button-enable .ag-chart-menu-close {\n position: absolute;\n top: 50%;\n transition: transform 0.33s ease-in-out;\n padding: 0;\n display: block;\n cursor: pointer;\n border: none;\n }\n .ag-ltr .ag-chart-tool-panel-button-enable .ag-chart-menu-close {\n right: 0px;\n }\n .ag-rtl .ag-chart-tool-panel-button-enable .ag-chart-menu-close {\n left: 0px;\n }\n .ag-chart-tool-panel-button-enable .ag-chart-menu-close .ag-icon {\n padding: 14px 5px 14px 2px;\n }\n .ag-chart-tool-panel-button-enable .ag-chart-menu-close:before {\n content: '';\n position: absolute;\n top: -40px;\n bottom: -40px;\n }\n .ag-ltr .ag-chart-tool-panel-button-enable .ag-chart-menu-close:before {\n right: 0px;\n }\n .ag-rtl .ag-chart-tool-panel-button-enable .ag-chart-menu-close:before {\n left: 0px;\n }\n .ag-ltr .ag-chart-tool-panel-button-enable .ag-chart-menu-close:before {\n left: -10px;\n }\n .ag-rtl .ag-chart-tool-panel-button-enable .ag-chart-menu-close:before {\n right: -10px;\n }\n .ag-chart-tool-panel-button-enable .ag-icon-menu {\n display: none;\n }\n\n .ag-ltr .ag-chart-tool-panel-button-enable .ag-chart-menu-close {\n transform: translate(3px, -50%);\n }\n .ag-ltr .ag-chart-tool-panel-button-enable .ag-chart-menu-close:hover {\n transform: translate(0, -50%);\n }\n .ag-ltr .ag-chart-menu-visible .ag-chart-tool-panel-button-enable .ag-chart-menu-close:hover {\n transform: translate(5px, -50%);\n }\n\n .ag-rtl .ag-chart-tool-panel-button-enable .ag-chart-menu-close {\n transform: translate(-3px, -50%);\n }\n .ag-rtl .ag-chart-tool-panel-button-enable .ag-chart-menu-close:hover {\n transform: translate(0, -50%);\n }\n .ag-rtl .ag-chart-menu-visible .ag-chart-tool-panel-button-enable .ag-chart-menu-close:hover {\n transform: translate(-5px, -50%);\n }\n\n .ag-charts-font-size-color {\n display: flex;\n align-self: stretch;\n justify-content: space-between;\n }\n\n .ag-charts-data-group-item {\n position: relative;\n }\n\n .ag-chart-menu {\n border-radius: var(--ag-card-radius);\n background: var(--ag-background-color);\n }\n\n .ag-chart-menu-icon {\n opacity: 0.5;\n line-height: 24px;\n font-size: 24px;\n width: 24px;\n height: 24px;\n margin: 2px 0;\n cursor: pointer;\n border-radius: var(--ag-card-radius);\n color: var(--ag-secondary-foreground-color);\n }\n .ag-chart-menu-icon:hover {\n opacity: 1;\n }\n\n .ag-chart-mini-thumbnail {\n border: 1px solid var(--ag-secondary-border-color);\n border-radius: 5px;\n margin: 5px;\n }\n .ag-chart-mini-thumbnail:nth-last-child(3),\n .ag-chart-mini-thumbnail:nth-last-child(3) ~ .ag-chart-mini-thumbnail {\n margin-left: auto;\n margin-right: auto;\n }\n .ag-ltr .ag-chart-mini-thumbnail:first-child {\n margin-left: 0;\n }\n .ag-rtl .ag-chart-mini-thumbnail:first-child {\n margin-right: 0;\n }\n .ag-ltr .ag-chart-mini-thumbnail:last-child {\n margin-right: 0;\n }\n .ag-rtl .ag-chart-mini-thumbnail:last-child {\n margin-left: 0;\n }\n .ag-chart-mini-thumbnail.ag-selected {\n border-color: var(--ag-minichart-selected-chart-color);\n }\n\n .ag-chart-settings-card-item {\n background: var(--ag-foreground-color);\n width: 8px;\n height: 8px;\n border-radius: 4px;\n }\n .ag-chart-settings-card-item.ag-selected {\n background-color: var(--ag-minichart-selected-page-color);\n }\n\n .ag-chart-data-column-drag-handle {\n margin-left: var(--ag-grid-size);\n }\n\n .ag-charts-settings-group-title-bar,\n .ag-charts-data-group-title-bar,\n .ag-charts-format-top-level-group-title-bar {\n border-top: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n }\n\n .ag-charts-settings-group-container {\n padding: var(--ag-grid-size);\n }\n\n .ag-charts-data-group-container {\n padding: calc(var(--ag-widget-container-vertical-padding) * 0.5)\n var(--ag-widget-container-horizontal-padding);\n }\n .ag-charts-data-group-container\n .ag-charts-data-group-item:not(.ag-charts-format-sub-level-group) {\n height: var(--ag-list-item-height);\n }\n .ag-charts-data-group-container .ag-list-item-hovered::after {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n height: 1px;\n background-color: var(--ag-range-selection-border-color);\n }\n .ag-charts-data-group-container .ag-item-highlight-top::after {\n top: 0;\n }\n .ag-charts-data-group-container .ag-item-highlight-bottom::after {\n bottom: 0;\n }\n\n .ag-charts-format-top-level-group-container {\n margin-left: calc(var(--ag-grid-size) * 2);\n padding: var(--ag-grid-size);\n }\n\n .ag-charts-format-top-level-group-item {\n margin: var(--ag-grid-size) 0;\n }\n\n .ag-charts-format-sub-level-group-container {\n padding: var(--ag-widget-container-vertical-padding)\n var(--ag-widget-container-horizontal-padding);\n padding-bottom: calc(\n var(--ag-widget-container-vertical-padding) - var(--ag-widget-vertical-spacing)\n );\n }\n .ag-charts-format-sub-level-group-container > * {\n margin-bottom: var(--ag-widget-vertical-spacing);\n }\n\n .ag-charts-group-container.ag-group-container-horizontal {\n padding: var(--ag-grid-size);\n }\n\n .ag-chart-data-section,\n .ag-chart-format-section {\n display: flex;\n margin: 0;\n }\n\n .ag-chart-menu-panel {\n background-color: var(--ag-control-panel-background-color);\n }\n .ag-ltr .ag-chart-menu-panel {\n border-left: solid 1px var(--ag-border-color);\n }\n .ag-rtl .ag-chart-menu-panel {\n border-right: solid 1px var(--ag-border-color);\n }\n\n .ag-date-time-list-page-title-bar {\n display: flex;\n }\n\n .ag-date-time-list-page-title {\n flex-grow: 1;\n text-align: center;\n }\n\n .ag-date-time-list-page-column-labels-row,\n .ag-date-time-list-page-entries-row {\n display: flex;\n }\n\n .ag-date-time-list-page-column-label,\n .ag-date-time-list-page-entry {\n flex-basis: 0;\n flex-grow: 1;\n }\n\n .ag-date-time-list-page-entry {\n cursor: pointer;\n text-align: center;\n }\n\n .ag-date-time-list-page-column-label {\n text-align: center;\n }\n\n .ag-input-field-input {\n width: 100%;\n min-width: 0;\n }\n\n .ag-checkbox-input-wrapper {\n font-family: var(--ag-icon-font-family);\n font-size: var(--ag-icon-size);\n line-height: var(--ag-icon-size);\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n width: var(--ag-icon-size);\n height: var(--ag-icon-size);\n background-color: var(--ag-checkbox-background-color);\n border-radius: var(--ag-checkbox-border-radius);\n display: inline-block;\n vertical-align: middle;\n flex: none;\n }\n .ag-checkbox-input-wrapper input,\n .ag-checkbox-input-wrapper input {\n -webkit-appearance: none;\n opacity: 0;\n width: 100%;\n height: 100%;\n }\n .ag-checkbox-input-wrapper:focus-within,\n .ag-checkbox-input-wrapper:active {\n outline: none;\n box-shadow: var(--ag-input-focus-box-shadow);\n }\n .ag-checkbox-input-wrapper.ag-disabled {\n opacity: 0.5;\n }\n .ag-checkbox-input-wrapper::after {\n content: var(--ag-icon-font-code-checkbox-unchecked, '\\\\f108');\n color: var(--ag-checkbox-unchecked-color);\n position: absolute;\n top: 0;\n left: 0;\n pointer-events: none;\n }\n .ag-checkbox-input-wrapper.ag-checked::after {\n content: var(--ag-icon-font-code-checkbox-checked, '\\\\f106');\n color: var(--ag-checkbox-checked-color);\n position: absolute;\n top: 0;\n left: 0;\n pointer-events: none;\n }\n .ag-checkbox-input-wrapper.ag-indeterminate::after {\n content: var(--ag-icon-font-code-checkbox-indeterminate, '\\\\f107');\n color: var(--ag-checkbox-indeterminate-color);\n position: absolute;\n top: 0;\n left: 0;\n pointer-events: none;\n }\n\n .ag-toggle-button-input-wrapper {\n box-sizing: border-box;\n width: var(--ag-toggle-button-width);\n height: var(--ag-toggle-button-height);\n background-color: var(--ag-toggle-button-off-background-color);\n border-radius: calc(var(--ag-toggle-button-height) * 0.5);\n position: relative;\n flex: none;\n border: var(--ag-toggle-button-border-width) solid;\n border-color: var(--ag-toggle-button-off-border-color);\n }\n .ag-toggle-button-input-wrapper input {\n opacity: 0;\n height: 100%;\n width: 100%;\n }\n .ag-toggle-button-input-wrapper:focus-within {\n outline: none;\n box-shadow: var(--ag-input-focus-box-shadow);\n }\n .ag-toggle-button-input-wrapper.ag-disabled {\n opacity: 0.5;\n }\n .ag-toggle-button-input-wrapper.ag-checked {\n background-color: var(--ag-toggle-button-on-background-color);\n border-color: var(--ag-toggle-button-on-border-color);\n }\n .ag-toggle-button-input-wrapper::before {\n content: ' ';\n position: absolute;\n top: calc(0px - var(--ag-toggle-button-border-width));\n left: calc(0px - var(--ag-toggle-button-border-width));\n display: block;\n box-sizing: border-box;\n height: var(--ag-toggle-button-height);\n width: var(--ag-toggle-button-height);\n background-color: var(--ag-toggle-button-switch-background-color);\n border-radius: 100%;\n transition: left 100ms;\n border: var(--ag-toggle-button-border-width) solid;\n border-color: var(--ag-toggle-button-switch-border-color);\n }\n .ag-toggle-button-input-wrapper.ag-checked::before {\n left: calc(100% - var(--ag-toggle-button-height));\n border-color: var(--ag-toggle-button-on-border-color);\n }\n\n .ag-radio-button-input-wrapper {\n font-family: var(--ag-icon-font-family);\n font-size: var(--ag-icon-size);\n line-height: var(--ag-icon-size);\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n width: var(--ag-icon-size);\n height: var(--ag-icon-size);\n background-color: var(--ag-checkbox-background-color);\n border-radius: var(--ag-checkbox-border-radius);\n display: inline-block;\n vertical-align: middle;\n flex: none;\n border-radius: var(--ag-icon-size);\n }\n .ag-radio-button-input-wrapper input,\n .ag-radio-button-input-wrapper input {\n -webkit-appearance: none;\n opacity: 0;\n width: 100%;\n height: 100%;\n }\n .ag-radio-button-input-wrapper:focus-within,\n .ag-radio-button-input-wrapper:active {\n outline: none;\n box-shadow: var(--ag-input-focus-box-shadow);\n }\n .ag-radio-button-input-wrapper.ag-disabled {\n opacity: 0.5;\n }\n .ag-radio-button-input-wrapper::after {\n content: var(--ag-icon-font-code-radio-button-off, '\\\\f126');\n color: var(--ag-checkbox-unchecked-color);\n position: absolute;\n top: 0;\n left: 0;\n pointer-events: none;\n }\n .ag-radio-button-input-wrapper.ag-checked::after {\n content: var(--ag-icon-font-code-radio-button-on, '\\\\f127');\n color: var(--ag-checkbox-checked-color);\n position: absolute;\n top: 0;\n left: 0;\n pointer-events: none;\n }\n\n input[class^='ag-'][type='range'] {\n -webkit-appearance: none;\n width: 100%;\n height: 100%;\n background: none;\n overflow: visible;\n }\n input[class^='ag-'][type='range']::-webkit-slider-runnable-track {\n margin: 0;\n padding: 0;\n width: 100%;\n height: 3px;\n background-color: var(--ag-border-color);\n border-radius: var(--ag-border-radius);\n border-radius: var(--ag-checkbox-border-radius);\n }\n input[class^='ag-'][type='range']::-moz-range-track {\n margin: 0;\n padding: 0;\n width: 100%;\n height: 3px;\n background-color: var(--ag-border-color);\n border-radius: var(--ag-border-radius);\n border-radius: var(--ag-checkbox-border-radius);\n }\n input[class^='ag-'][type='range']::-ms-track {\n margin: 0;\n padding: 0;\n width: 100%;\n height: 3px;\n background-color: var(--ag-border-color);\n border-radius: var(--ag-border-radius);\n border-radius: var(--ag-checkbox-border-radius);\n color: transparent;\n width: calc(100% - 2px);\n }\n input[class^='ag-'][type='range']::-webkit-slider-thumb {\n margin: 0;\n padding: 0;\n -webkit-appearance: none;\n width: var(--ag-icon-size);\n height: var(--ag-icon-size);\n background-color: var(--ag-background-color);\n border: 1px solid;\n border-color: var(--ag-checkbox-unchecked-color);\n border-radius: var(--ag-icon-size);\n transform: translateY(calc(var(--ag-icon-size) * -0.5 + 1.5px));\n }\n input[class^='ag-'][type='range']::-ms-thumb {\n margin: 0;\n padding: 0;\n -webkit-appearance: none;\n width: var(--ag-icon-size);\n height: var(--ag-icon-size);\n background-color: var(--ag-background-color);\n border: 1px solid;\n border-color: var(--ag-checkbox-unchecked-color);\n border-radius: var(--ag-icon-size);\n }\n input[class^='ag-'][type='range']::-moz-ag-range-thumb {\n margin: 0;\n padding: 0;\n -webkit-appearance: none;\n width: var(--ag-icon-size);\n height: var(--ag-icon-size);\n background-color: var(--ag-background-color);\n border: 1px solid;\n border-color: var(--ag-checkbox-unchecked-color);\n border-radius: var(--ag-icon-size);\n }\n input[class^='ag-'][type='range']:focus {\n outline: none;\n }\n input[class^='ag-'][type='range']:focus::-webkit-slider-thumb {\n box-shadow: var(--ag-input-focus-box-shadow);\n border-color: var(--ag-checkbox-checked-color);\n }\n input[class^='ag-'][type='range']:focus::-ms-thumb {\n box-shadow: var(--ag-input-focus-box-shadow);\n border-color: var(--ag-checkbox-checked-color);\n }\n input[class^='ag-'][type='range']:focus::-moz-ag-range-thumb {\n box-shadow: var(--ag-input-focus-box-shadow);\n border-color: var(--ag-checkbox-checked-color);\n }\n input[class^='ag-'][type='range']:active::-webkit-slider-runnable-track {\n background-color: var(--ag-input-focus-border-color);\n }\n input[class^='ag-'][type='range']:active::-moz-ag-range-track {\n background-color: var(--ag-input-focus-border-color);\n }\n input[class^='ag-'][type='range']:active::-ms-track {\n background-color: var(--ag-input-focus-border-color);\n }\n input[class^='ag-'][type='range']:disabled {\n opacity: 0.5;\n }\n`;\n","import { css } from '@microsoft/fast-element';\n/**\n * AG Alpine Theme (no fonts) CSS.\n * @public\n */\nexport const agThemeAlpineNofontsCSS = css `\n .ag-theme-alpine,\n .ag-theme-alpine-dark {\n --ag-alpine-active-color: #2196f3;\n --ag-selected-row-background-color: rgba(33, 150, 243, 0.3);\n --ag-row-hover-color: rgba(33, 150, 243, 0.1);\n --ag-column-hover-color: rgba(33, 150, 243, 0.1);\n --ag-input-focus-border-color: rgba(33, 150, 243, 0.4);\n --ag-range-selection-background-color: rgba(33, 150, 243, 0.2);\n --ag-range-selection-background-color-2: rgba(33, 150, 243, 0.36);\n --ag-range-selection-background-color-3: rgba(33, 150, 243, 0.49);\n --ag-range-selection-background-color-4: rgba(33, 150, 243, 0.59);\n --ag-background-color: #fff;\n --ag-foreground-color: #181d1f;\n --ag-border-color: #babfc7;\n --ag-secondary-border-color: #dde2eb;\n --ag-header-background-color: #f8f8f8;\n --ag-tooltip-background-color: #f8f8f8;\n --ag-odd-row-background-color: #fcfcfc;\n --ag-control-panel-background-color: #f8f8f8;\n --ag-subheader-background-color: #fff;\n --ag-invalid-color: #e02525;\n --ag-checkbox-unchecked-color: #999;\n --ag-checkbox-background-color: var(--ag-background-color);\n --ag-checkbox-checked-color: var(--ag-alpine-active-color);\n --ag-range-selection-border-color: var(--ag-alpine-active-color);\n --ag-secondary-foreground-color: var(--ag-foreground-color);\n --ag-input-border-color: var(--ag-border-color);\n --ag-input-border-color-invalid: var(--ag-invalid-color);\n --ag-input-focus-box-shadow: 0 0 2px 0.1rem var(--ag-input-focus-border-color);\n --ag-disabled-foreground-color: rgba(24, 29, 31, 0.5);\n --ag-chip-background-color: rgba(24, 29, 31, 0.07);\n --ag-input-disabled-border-color: rgba(186, 191, 199, 0.3);\n --ag-input-disabled-background-color: rgba(186, 191, 199, 0.15);\n --ag-borders: solid 1px;\n --ag-border-radius: 3px;\n --ag-borders-side-button: none;\n --ag-side-button-selected-background-color: transparent;\n --ag-header-column-resize-handle-display: block;\n --ag-header-column-resize-handle-width: 2px;\n --ag-header-column-resize-handle-height: 30%;\n --ag-grid-size: 6px;\n --ag-icon-size: 16px;\n --ag-row-height: calc(var(--ag-grid-size) * 7);\n --ag-header-height: calc(var(--ag-grid-size) * 8);\n --ag-list-item-height: calc(var(--ag-grid-size) * 4);\n --ag-column-select-indent-size: var(--ag-icon-size);\n --ag-set-filter-indent-size: var(--ag-icon-size);\n --ag-cell-horizontal-padding: calc(var(--ag-grid-size) * 3);\n --ag-cell-widget-spacing: calc(var(--ag-grid-size) * 2);\n --ag-widget-container-vertical-padding: calc(var(--ag-grid-size) * 2);\n --ag-widget-container-horizontal-padding: calc(var(--ag-grid-size) * 2);\n --ag-widget-vertical-spacing: calc(var(--ag-grid-size) * 1.5);\n --ag-toggle-button-height: 18px;\n --ag-toggle-button-width: 28px;\n --ag-font-family:\n -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell,\n 'Helvetica Neue', sans-serif;\n --ag-font-size: 13px;\n --ag-icon-font-family: agGridAlpine;\n --ag-selected-tab-underline-color: var(--ag-alpine-active-color);\n --ag-selected-tab-underline-width: 2px;\n --ag-selected-tab-underline-transition-speed: 0.3s;\n --ag-tab-min-width: 240px;\n --ag-card-shadow: 0 1px 4px 1px rgba(186, 191, 199, 0.4);\n --ag-popup-shadow: var(--ag-card-shadow);\n --ag-side-bar-panel-width: 250px;\n }\n\n .ag-theme-alpine-dark {\n --ag-background-color: #181d1f;\n --ag-foreground-color: #fff;\n --ag-border-color: #68686e;\n --ag-secondary-border-color: rgba(88, 86, 82, 0.5);\n --ag-modal-overlay-background-color: rgba(24, 29, 31, 0.66);\n --ag-header-background-color: #222628;\n --ag-tooltip-background-color: #222628;\n --ag-odd-row-background-color: #222628;\n --ag-control-panel-background-color: #222628;\n --ag-subheader-background-color: #000;\n --ag-input-disabled-background-color: #282c2f;\n --ag-input-focus-box-shadow:\n 0 0 2px 0.5px rgba(255, 255, 255, 0.5), 0 0 4px 3px var(--ag-input-focus-border-color);\n --ag-card-shadow: 0 1px 20px 1px black;\n --ag-disabled-foreground-color: rgba(255, 255, 255, 0.5);\n --ag-chip-background-color: rgba(255, 255, 255, 0.07);\n --ag-input-disabled-border-color: rgba(104, 104, 110, 0.3);\n --ag-input-disabled-background-color: rgba(104, 104, 110, 0.07);\n }\n\n .ag-theme-alpine .ag-filter-toolpanel-header,\n .ag-theme-alpine .ag-filter-toolpanel-search,\n .ag-theme-alpine .ag-status-bar,\n .ag-theme-alpine .ag-header-row,\n .ag-theme-alpine .ag-panel-title-bar-title,\n .ag-theme-alpine .ag-multi-filter-group-title-bar,\n .ag-theme-alpine-dark .ag-filter-toolpanel-header,\n .ag-theme-alpine-dark .ag-filter-toolpanel-search,\n .ag-theme-alpine-dark .ag-status-bar,\n .ag-theme-alpine-dark .ag-header-row,\n .ag-theme-alpine-dark .ag-panel-title-bar-title,\n .ag-theme-alpine-dark .ag-multi-filter-group-title-bar {\n font-weight: 700;\n color: var(--ag-header-foreground-color);\n }\n .ag-theme-alpine .ag-row,\n .ag-theme-alpine-dark .ag-row {\n font-size: calc(var(--ag-font-size) + 1px);\n }\n .ag-theme-alpine input[class^='ag-']:not([type]),\n .ag-theme-alpine input[class^='ag-'][type='text'],\n .ag-theme-alpine input[class^='ag-'][type='number'],\n .ag-theme-alpine input[class^='ag-'][type='tel'],\n .ag-theme-alpine input[class^='ag-'][type='date'],\n .ag-theme-alpine input[class^='ag-'][type='datetime-local'],\n .ag-theme-alpine textarea[class^='ag-'],\n .ag-theme-alpine-dark input[class^='ag-']:not([type]),\n .ag-theme-alpine-dark input[class^='ag-'][type='text'],\n .ag-theme-alpine-dark input[class^='ag-'][type='number'],\n .ag-theme-alpine-dark input[class^='ag-'][type='tel'],\n .ag-theme-alpine-dark input[class^='ag-'][type='date'],\n .ag-theme-alpine-dark input[class^='ag-'][type='datetime-local'],\n .ag-theme-alpine-dark textarea[class^='ag-'] {\n min-height: calc(var(--ag-grid-size) * 4);\n border-radius: var(--ag-border-radius);\n }\n .ag-theme-alpine .ag-ltr input[class^='ag-']:not([type]),\n .ag-theme-alpine .ag-ltr input[class^='ag-'][type='text'],\n .ag-theme-alpine .ag-ltr input[class^='ag-'][type='number'],\n .ag-theme-alpine .ag-ltr input[class^='ag-'][type='tel'],\n .ag-theme-alpine .ag-ltr input[class^='ag-'][type='date'],\n .ag-theme-alpine .ag-ltr input[class^='ag-'][type='datetime-local'],\n .ag-theme-alpine .ag-ltr textarea[class^='ag-'],\n .ag-theme-alpine-dark .ag-ltr input[class^='ag-']:not([type]),\n .ag-theme-alpine-dark .ag-ltr input[class^='ag-'][type='text'],\n .ag-theme-alpine-dark .ag-ltr input[class^='ag-'][type='number'],\n .ag-theme-alpine-dark .ag-ltr input[class^='ag-'][type='tel'],\n .ag-theme-alpine-dark .ag-ltr input[class^='ag-'][type='date'],\n .ag-theme-alpine-dark .ag-ltr input[class^='ag-'][type='datetime-local'],\n .ag-theme-alpine-dark .ag-ltr textarea[class^='ag-'] {\n padding-left: var(--ag-grid-size);\n }\n\n .ag-theme-alpine .ag-rtl input[class^='ag-']:not([type]),\n .ag-theme-alpine .ag-rtl input[class^='ag-'][type='text'],\n .ag-theme-alpine .ag-rtl input[class^='ag-'][type='number'],\n .ag-theme-alpine .ag-rtl input[class^='ag-'][type='tel'],\n .ag-theme-alpine .ag-rtl input[class^='ag-'][type='date'],\n .ag-theme-alpine .ag-rtl input[class^='ag-'][type='datetime-local'],\n .ag-theme-alpine .ag-rtl textarea[class^='ag-'],\n .ag-theme-alpine-dark .ag-rtl input[class^='ag-']:not([type]),\n .ag-theme-alpine-dark .ag-rtl input[class^='ag-'][type='text'],\n .ag-theme-alpine-dark .ag-rtl input[class^='ag-'][type='number'],\n .ag-theme-alpine-dark .ag-rtl input[class^='ag-'][type='tel'],\n .ag-theme-alpine-dark .ag-rtl input[class^='ag-'][type='date'],\n .ag-theme-alpine-dark .ag-rtl input[class^='ag-'][type='datetime-local'],\n .ag-theme-alpine-dark .ag-rtl textarea[class^='ag-'] {\n padding-right: var(--ag-grid-size);\n }\n\n .ag-theme-alpine .ag-tab,\n .ag-theme-alpine-dark .ag-tab {\n padding: calc(var(--ag-grid-size) * 1.5);\n transition: color 0.4s;\n flex: 1 1 auto;\n }\n .ag-theme-alpine .ag-tab-selected,\n .ag-theme-alpine-dark .ag-tab-selected {\n color: var(--ag-alpine-active-color);\n }\n .ag-theme-alpine .ag-menu,\n .ag-theme-alpine-dark .ag-menu {\n background-color: var(--ag-control-panel-background-color);\n }\n .ag-theme-alpine .ag-menu-header,\n .ag-theme-alpine-dark .ag-menu-header {\n background-color: var(--ag-control-panel-background-color);\n padding-top: 1px;\n }\n .ag-theme-alpine .ag-tabs-header,\n .ag-theme-alpine-dark .ag-tabs-header {\n border-bottom: var(--ag-borders) var(--ag-border-color);\n }\n .ag-theme-alpine .ag-charts-settings-group-title-bar,\n .ag-theme-alpine .ag-charts-data-group-title-bar,\n .ag-theme-alpine .ag-charts-format-top-level-group-title-bar,\n .ag-theme-alpine-dark .ag-charts-settings-group-title-bar,\n .ag-theme-alpine-dark .ag-charts-data-group-title-bar,\n .ag-theme-alpine-dark .ag-charts-format-top-level-group-title-bar {\n padding: var(--ag-grid-size) calc(var(--ag-grid-size) * 2);\n line-height: calc(var(--ag-icon-size) + var(--ag-grid-size) - 2px);\n }\n .ag-theme-alpine .ag-chart-mini-thumbnail,\n .ag-theme-alpine-dark .ag-chart-mini-thumbnail {\n background-color: var(--ag-background-color);\n }\n .ag-theme-alpine .ag-chart-settings-nav-bar,\n .ag-theme-alpine-dark .ag-chart-settings-nav-bar {\n border-top: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n }\n .ag-theme-alpine .ag-ltr .ag-group-title-bar-icon,\n .ag-theme-alpine-dark .ag-ltr .ag-group-title-bar-icon {\n margin-right: var(--ag-grid-size);\n }\n\n .ag-theme-alpine .ag-rtl .ag-group-title-bar-icon,\n .ag-theme-alpine-dark .ag-rtl .ag-group-title-bar-icon {\n margin-left: var(--ag-grid-size);\n }\n\n .ag-theme-alpine .ag-charts-format-top-level-group-toolbar,\n .ag-theme-alpine-dark .ag-charts-format-top-level-group-toolbar {\n margin-top: var(--ag-grid-size);\n }\n .ag-theme-alpine .ag-ltr .ag-charts-format-top-level-group-toolbar,\n .ag-theme-alpine-dark .ag-ltr .ag-charts-format-top-level-group-toolbar {\n padding-left: calc(var(--ag-icon-size) * 0.5 + var(--ag-grid-size) * 2);\n }\n\n .ag-theme-alpine .ag-rtl .ag-charts-format-top-level-group-toolbar,\n .ag-theme-alpine-dark .ag-rtl .ag-charts-format-top-level-group-toolbar {\n padding-right: calc(var(--ag-icon-size) * 0.5 + var(--ag-grid-size) * 2);\n }\n\n .ag-theme-alpine .ag-charts-format-sub-level-group,\n .ag-theme-alpine-dark .ag-charts-format-sub-level-group {\n border-left: dashed 1px;\n border-left-color: var(--ag-border-color);\n padding-left: var(--ag-grid-size);\n margin-bottom: calc(var(--ag-grid-size) * 2);\n }\n .ag-theme-alpine .ag-charts-format-sub-level-group-title-bar,\n .ag-theme-alpine-dark .ag-charts-format-sub-level-group-title-bar {\n padding-top: 0;\n padding-bottom: 0;\n background: none;\n font-weight: 700;\n }\n .ag-theme-alpine .ag-charts-format-sub-level-group-container,\n .ag-theme-alpine-dark .ag-charts-format-sub-level-group-container {\n padding-bottom: 0;\n }\n .ag-theme-alpine .ag-charts-format-sub-level-group-item:last-child,\n .ag-theme-alpine-dark .ag-charts-format-sub-level-group-item:last-child {\n margin-bottom: 0;\n }\n .ag-theme-alpine.ag-dnd-ghost,\n .ag-theme-alpine-dark.ag-dnd-ghost {\n font-size: calc(var(--ag-font-size) - 1px);\n font-weight: 700;\n }\n .ag-theme-alpine .ag-side-buttons,\n .ag-theme-alpine-dark .ag-side-buttons {\n width: calc(var(--ag-grid-size) * 5);\n }\n .ag-theme-alpine .ag-standard-button,\n .ag-theme-alpine-dark .ag-standard-button {\n appearance: none;\n -webkit-appearance: none;\n border-radius: var(--ag-border-radius);\n border: 1px solid;\n border-color: var(--ag-alpine-active-color);\n color: var(--ag-alpine-active-color);\n background-color: var(--ag-background-color);\n font-weight: 600;\n padding: var(--ag-grid-size) calc(var(--ag-grid-size) * 2);\n }\n .ag-theme-alpine .ag-standard-button:hover,\n .ag-theme-alpine-dark .ag-standard-button:hover {\n border-color: var(--ag-alpine-active-color);\n background-color: var(--ag-row-hover-color);\n }\n .ag-theme-alpine .ag-standard-button:active,\n .ag-theme-alpine-dark .ag-standard-button:active {\n border-color: var(--ag-alpine-active-color);\n background-color: var(--ag-alpine-active-color);\n color: var(--ag-background-color);\n }\n .ag-theme-alpine .ag-standard-button:disabled,\n .ag-theme-alpine-dark .ag-standard-button:disabled {\n color: var(--ag-disabled-foreground-color);\n background-color: var(--ag-input-disabled-background-color);\n border-color: var(--ag-input-disabled-border-color);\n }\n .ag-theme-alpine .ag-column-drop-vertical,\n .ag-theme-alpine-dark .ag-column-drop-vertical {\n min-height: 75px;\n }\n .ag-theme-alpine .ag-column-drop-vertical-title-bar,\n .ag-theme-alpine-dark .ag-column-drop-vertical-title-bar {\n padding: calc(var(--ag-grid-size) * 2);\n padding-bottom: 0px;\n }\n .ag-theme-alpine .ag-column-drop-vertical-empty-message,\n .ag-theme-alpine-dark .ag-column-drop-vertical-empty-message {\n display: flex;\n align-items: center;\n border: dashed 1px;\n border-color: var(--ag-border-color);\n margin: calc(var(--ag-grid-size) * 2);\n padding: calc(var(--ag-grid-size) * 2);\n }\n .ag-theme-alpine .ag-column-drop-empty-message,\n .ag-theme-alpine-dark .ag-column-drop-empty-message {\n color: var(--ag-foreground-color);\n opacity: 0.75;\n }\n .ag-theme-alpine .ag-status-bar,\n .ag-theme-alpine-dark .ag-status-bar {\n font-weight: normal;\n }\n .ag-theme-alpine .ag-status-name-value-value,\n .ag-theme-alpine-dark .ag-status-name-value-value {\n font-weight: 700;\n }\n .ag-theme-alpine .ag-paging-number,\n .ag-theme-alpine .ag-paging-row-summary-panel-number,\n .ag-theme-alpine-dark .ag-paging-number,\n .ag-theme-alpine-dark .ag-paging-row-summary-panel-number {\n font-weight: 700;\n }\n .ag-theme-alpine .ag-column-drop-cell-button,\n .ag-theme-alpine-dark .ag-column-drop-cell-button {\n opacity: 0.5;\n }\n .ag-theme-alpine .ag-column-drop-cell-button:hover,\n .ag-theme-alpine-dark .ag-column-drop-cell-button:hover {\n opacity: 0.75;\n }\n .ag-theme-alpine .ag-header-cell-menu-button:hover,\n .ag-theme-alpine .ag-side-button-button:hover,\n .ag-theme-alpine .ag-tab:hover,\n .ag-theme-alpine .ag-panel-title-bar-button:hover,\n .ag-theme-alpine .ag-header-expand-icon:hover,\n .ag-theme-alpine .ag-column-group-icons:hover,\n .ag-theme-alpine .ag-set-filter-group-icons:hover,\n .ag-theme-alpine .ag-group-expanded .ag-icon:hover,\n .ag-theme-alpine .ag-group-contracted .ag-icon:hover,\n .ag-theme-alpine .ag-chart-settings-prev:hover,\n .ag-theme-alpine .ag-chart-settings-next:hover,\n .ag-theme-alpine .ag-group-title-bar-icon:hover,\n .ag-theme-alpine .ag-column-select-header-icon:hover,\n .ag-theme-alpine .ag-floating-filter-button-button:hover,\n .ag-theme-alpine .ag-filter-toolpanel-expand:hover,\n .ag-theme-alpine .ag-chart-menu-icon:hover,\n .ag-theme-alpine .ag-chart-menu-close:hover,\n .ag-theme-alpine-dark .ag-header-cell-menu-button:hover,\n .ag-theme-alpine-dark .ag-side-button-button:hover,\n .ag-theme-alpine-dark .ag-tab:hover,\n .ag-theme-alpine-dark .ag-panel-title-bar-button:hover,\n .ag-theme-alpine-dark .ag-header-expand-icon:hover,\n .ag-theme-alpine-dark .ag-column-group-icons:hover,\n .ag-theme-alpine-dark .ag-set-filter-group-icons:hover,\n .ag-theme-alpine-dark .ag-group-expanded .ag-icon:hover,\n .ag-theme-alpine-dark .ag-group-contracted .ag-icon:hover,\n .ag-theme-alpine-dark .ag-chart-settings-prev:hover,\n .ag-theme-alpine-dark .ag-chart-settings-next:hover,\n .ag-theme-alpine-dark .ag-group-title-bar-icon:hover,\n .ag-theme-alpine-dark .ag-column-select-header-icon:hover,\n .ag-theme-alpine-dark .ag-floating-filter-button-button:hover,\n .ag-theme-alpine-dark .ag-filter-toolpanel-expand:hover,\n .ag-theme-alpine-dark .ag-chart-menu-icon:hover,\n .ag-theme-alpine-dark .ag-chart-menu-close:hover {\n color: var(--ag-alpine-active-color);\n }\n .ag-theme-alpine .ag-chart-menu-close,\n .ag-theme-alpine-dark .ag-chart-menu-close {\n background: var(--ag-background-color);\n }\n .ag-theme-alpine .ag-chart-menu-close:hover .ag-icon,\n .ag-theme-alpine-dark .ag-chart-menu-close:hover .ag-icon {\n border-color: var(--ag-alpine-active-color);\n }\n .ag-theme-alpine .ag-chart-menu-close .ag-icon,\n .ag-theme-alpine-dark .ag-chart-menu-close .ag-icon {\n background: var(--ag-header-background-color);\n border: 1px solid var(--ag-border-color);\n border-right: none;\n }\n .ag-theme-alpine .ag-chart-settings-card-item.ag-not-selected:hover,\n .ag-theme-alpine-dark .ag-chart-settings-card-item.ag-not-selected:hover {\n opacity: 0.35;\n }\n .ag-theme-alpine .ag-ltr .ag-panel-title-bar-button,\n .ag-theme-alpine-dark .ag-ltr .ag-panel-title-bar-button {\n margin-left: calc(var(--ag-grid-size) * 2);\n margin-right: var(--ag-grid-size);\n }\n\n .ag-theme-alpine .ag-rtl .ag-panel-title-bar-button,\n .ag-theme-alpine-dark .ag-rtl .ag-panel-title-bar-button {\n margin-right: calc(var(--ag-grid-size) * 2);\n margin-left: var(--ag-grid-size);\n }\n\n .ag-theme-alpine .ag-ltr .ag-filter-toolpanel-group-container,\n .ag-theme-alpine-dark .ag-ltr .ag-filter-toolpanel-group-container {\n padding-left: var(--ag-grid-size);\n }\n\n .ag-theme-alpine .ag-rtl .ag-filter-toolpanel-group-container,\n .ag-theme-alpine-dark .ag-rtl .ag-filter-toolpanel-group-container {\n padding-right: var(--ag-grid-size);\n }\n\n .ag-theme-alpine .ag-filter-toolpanel-instance-filter,\n .ag-theme-alpine-dark .ag-filter-toolpanel-instance-filter {\n border: none;\n background-color: var(--ag-control-panel-background-color);\n }\n .ag-theme-alpine .ag-ltr .ag-filter-toolpanel-instance-filter,\n .ag-theme-alpine-dark .ag-ltr .ag-filter-toolpanel-instance-filter {\n border-left: dashed 1px;\n border-left-color: var(--ag-border-color);\n margin-left: calc(var(--ag-icon-size) * 0.5);\n }\n\n .ag-theme-alpine .ag-rtl .ag-filter-toolpanel-instance-filter,\n .ag-theme-alpine-dark .ag-rtl .ag-filter-toolpanel-instance-filter {\n border-right: dashed 1px;\n border-right-color: var(--ag-border-color);\n margin-right: calc(var(--ag-icon-size) * 0.5);\n }\n\n .ag-theme-alpine .ag-set-filter-list,\n .ag-theme-alpine-dark .ag-set-filter-list {\n padding-top: calc(var(--ag-grid-size) * 0.5);\n padding-bottom: calc(var(--ag-grid-size) * 0.5);\n }\n .ag-theme-alpine .ag-layout-auto-height .ag-center-cols-clipper,\n .ag-theme-alpine .ag-layout-auto-height .ag-center-cols-container,\n .ag-theme-alpine .ag-layout-print .ag-center-cols-clipper,\n .ag-theme-alpine .ag-layout-print .ag-center-cols-container,\n .ag-theme-alpine-dark .ag-layout-auto-height .ag-center-cols-clipper,\n .ag-theme-alpine-dark .ag-layout-auto-height .ag-center-cols-container,\n .ag-theme-alpine-dark .ag-layout-print .ag-center-cols-clipper,\n .ag-theme-alpine-dark .ag-layout-print .ag-center-cols-container {\n min-height: 150px;\n }\n .ag-theme-alpine .ag-overlay-no-rows-wrapper.ag-layout-auto-height,\n .ag-theme-alpine-dark .ag-overlay-no-rows-wrapper.ag-layout-auto-height {\n padding-top: 60px;\n }\n .ag-theme-alpine .ag-date-time-list-page-entry-is-current,\n .ag-theme-alpine-dark .ag-date-time-list-page-entry-is-current {\n background-color: var(--ag-alpine-active-color);\n }\n\n .ag-theme-alpine-dark {\n color-scheme: dark;\n }\n`;\n","import { css } from '@microsoft/fast-element';\n/**\n * AG Balham Theme (no fonts) CSS.\n * @public\n */\nexport const agThemeBalhamNofontsCSS = css `\n .ag-theme-balham,\n .ag-theme-balham-dark {\n --ag-balham-active-color: #0091ea;\n --ag-foreground-color: #000;\n --ag-background-color: #fff;\n --ag-header-background-color: #f5f7f7;\n --ag-tooltip-background-color: #cbd0d3;\n --ag-subheader-background-color: #e2e9eb;\n --ag-control-panel-background-color: #f5f7f7;\n --ag-border-color: #bdc3c7;\n --ag-odd-row-background-color: #fcfdfe;\n --ag-row-hover-color: #ecf0f1;\n --ag-column-hover-color: #ecf0f1;\n --ag-input-border-color: #95a5a6;\n --ag-invalid-color: #e02525;\n --ag-input-disabled-background-color: #ebebeb;\n --ag-checkbox-unchecked-color: #7f8c8d;\n --ag-input-focus-border-color: #719ece;\n --ag-input-focus-box-shadow: 0 0 2px 1px var(--ag-input-focus-border-color);\n --ag-range-selection-border-color: var(--ag-balham-active-color);\n --ag-checkbox-checked-color: var(--ag-balham-active-color);\n --ag-checkbox-background-color: var(--ag-background-color);\n --ag-secondary-foreground-color: rgba(0, 0, 0, 0.54);\n --ag-disabled-foreground-color: rgba(0, 0, 0, 0.38);\n --ag-subheader-toolbar-background-color: rgba(226, 233, 235, 0.5);\n --ag-row-border-color: rgba(189, 195, 199, 0.58);\n --ag-chip-background-color: rgba(0, 0, 0, 0.1);\n --ag-range-selection-background-color: rgba(0, 145, 234, 0.2);\n --ag-range-selection-background-color-2: rgba(0, 145, 234, 0.36);\n --ag-range-selection-background-color-3: rgba(0, 145, 234, 0.49);\n --ag-range-selection-background-color-4: rgba(0, 145, 234, 0.59);\n --ag-selected-row-background-color: rgba(0, 145, 234, 0.28);\n --ag-header-column-separator-color: rgba(189, 195, 199, 0.5);\n --ag-input-disabled-border-color: rgba(149, 165, 166, 0.3);\n --ag-header-column-separator-display: block;\n --ag-header-column-separator-height: 50%;\n --ag-grid-size: 4px;\n --ag-icon-size: 16px;\n --ag-row-height: calc(var(--ag-grid-size) * 7);\n --ag-header-height: calc(var(--ag-grid-size) * 8);\n --ag-list-item-height: calc(var(--ag-grid-size) * 6);\n --ag-row-group-indent-size: calc(var(--ag-grid-size) * 3 + var(--ag-icon-size));\n --ag-cell-horizontal-padding: calc(var(--ag-grid-size) * 3);\n --ag-input-height: calc(var(--ag-grid-size) * 4);\n --ag-font-family:\n -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell,\n 'Helvetica Neue', sans-serif;\n --ag-font-size: 12px;\n --ag-icon-font-family: agGridBalham;\n --ag-border-radius: 2px;\n --ag-checkbox-border-radius: 3px;\n --ag-card-shadow: none;\n }\n\n .ag-theme-balham-dark {\n --ag-balham-active-color: #00b0ff;\n --ag-foreground-color: #f5f5f5;\n --ag-background-color: #2d3436;\n --ag-header-background-color: #1c1c1c;\n --ag-tooltip-background-color: #1c1f20;\n --ag-subheader-background-color: #111;\n --ag-control-panel-background-color: #202020;\n --ag-border-color: #424242;\n --ag-odd-row-background-color: #262c2e;\n --ag-row-hover-color: #3d4749;\n --ag-column-hover-color: #3d4749;\n --ag-input-border-color: #f0f0f0;\n --ag-input-disabled-background-color: rgba(48, 46, 46, 0.3);\n --ag-modal-overlay-background-color: rgba(45, 52, 54, 0.66);\n --ag-checkbox-unchecked-color: #ecf0f1;\n --ag-secondary-foreground-color: var(--ag-foreground-color);\n --ag-disabled-foreground-color: rgba(245, 245, 245, 0.38);\n --ag-subheader-toolbar-background-color: rgba(17, 17, 17, 0.5);\n --ag-row-border-color: #5c5c5c;\n --ag-chip-background-color: rgba(245, 245, 245, 0.08);\n --ag-range-selection-background-color: rgba(0, 176, 255, 0.2);\n --ag-range-selection-background-color-2: rgba(0, 176, 255, 0.36);\n --ag-range-selection-background-color-3: rgba(0, 176, 255, 0.49);\n --ag-range-selection-background-color-4: rgba(0, 176, 255, 0.59);\n --ag-selected-row-background-color: rgba(0, 176, 255, 0.28);\n --ag-header-column-separator-color: rgba(66, 66, 66, 0.5);\n --ag-input-disabled-border-color: rgba(240, 240, 240, 0.3);\n --ag-header-foreground-color: rgba(245, 245, 245, 0.64);\n --ag-toggle-button-off-background-color: transparent;\n --ag-toggle-button-off-border-color: var(--ag-foreground-color);\n --ag-range-selection-chart-category-background-color: rgba(26, 177, 74, 0.5);\n --ag-range-selection-chart-background-color: rgba(45, 166, 255, 0.5);\n --ag-input-focus-box-shadow: 0 0 4px 1.5px var(--ag-input-focus-border-color);\n }\n\n .ag-theme-balham .ag-filter-toolpanel-header,\n .ag-theme-balham .ag-filter-toolpanel-search,\n .ag-theme-balham .ag-status-bar,\n .ag-theme-balham .ag-header-row,\n .ag-theme-balham .ag-multi-filter-group-title-bar,\n .ag-theme-balham-dark .ag-filter-toolpanel-header,\n .ag-theme-balham-dark .ag-filter-toolpanel-search,\n .ag-theme-balham-dark .ag-status-bar,\n .ag-theme-balham-dark .ag-header-row,\n .ag-theme-balham-dark .ag-multi-filter-group-title-bar {\n font-weight: 600;\n color: var(--ag-header-foreground-color);\n }\n .ag-theme-balham .ag-ltr input[class^='ag-']:not([type]),\n .ag-theme-balham .ag-ltr input[class^='ag-'][type='text'],\n .ag-theme-balham .ag-ltr input[class^='ag-'][type='number'],\n .ag-theme-balham .ag-ltr input[class^='ag-'][type='tel'],\n .ag-theme-balham .ag-ltr input[class^='ag-'][type='date'],\n .ag-theme-balham .ag-ltr input[class^='ag-'][type='datetime-local'],\n .ag-theme-balham .ag-ltr textarea[class^='ag-'],\n .ag-theme-balham-dark .ag-ltr input[class^='ag-']:not([type]),\n .ag-theme-balham-dark .ag-ltr input[class^='ag-'][type='text'],\n .ag-theme-balham-dark .ag-ltr input[class^='ag-'][type='number'],\n .ag-theme-balham-dark .ag-ltr input[class^='ag-'][type='tel'],\n .ag-theme-balham-dark .ag-ltr input[class^='ag-'][type='date'],\n .ag-theme-balham-dark .ag-ltr input[class^='ag-'][type='datetime-local'],\n .ag-theme-balham-dark .ag-ltr textarea[class^='ag-'] {\n padding-left: var(--ag-grid-size);\n }\n\n .ag-theme-balham .ag-rtl input[class^='ag-']:not([type]),\n .ag-theme-balham .ag-rtl input[class^='ag-'][type='text'],\n .ag-theme-balham .ag-rtl input[class^='ag-'][type='number'],\n .ag-theme-balham .ag-rtl input[class^='ag-'][type='tel'],\n .ag-theme-balham .ag-rtl input[class^='ag-'][type='date'],\n .ag-theme-balham .ag-rtl input[class^='ag-'][type='datetime-local'],\n .ag-theme-balham .ag-rtl textarea[class^='ag-'],\n .ag-theme-balham-dark .ag-rtl input[class^='ag-']:not([type]),\n .ag-theme-balham-dark .ag-rtl input[class^='ag-'][type='text'],\n .ag-theme-balham-dark .ag-rtl input[class^='ag-'][type='number'],\n .ag-theme-balham-dark .ag-rtl input[class^='ag-'][type='tel'],\n .ag-theme-balham-dark .ag-rtl input[class^='ag-'][type='date'],\n .ag-theme-balham-dark .ag-rtl input[class^='ag-'][type='datetime-local'],\n .ag-theme-balham-dark .ag-rtl textarea[class^='ag-'] {\n padding-right: var(--ag-grid-size);\n }\n\n .ag-theme-balham .ag-column-drop-vertical-empty-message,\n .ag-theme-balham .ag-status-bar,\n .ag-theme-balham-dark .ag-column-drop-vertical-empty-message,\n .ag-theme-balham-dark .ag-status-bar {\n font-weight: 600;\n color: var(--ag-disabled-foreground-color);\n }\n .ag-theme-balham.ag-dnd-ghost,\n .ag-theme-balham-dark.ag-dnd-ghost {\n font-size: var(--ag-font-size);\n font-weight: 600;\n }\n .ag-theme-balham .ag-tab,\n .ag-theme-balham-dark .ag-tab {\n border: 1px solid transparent;\n padding: var(--ag-grid-size) calc(var(--ag-grid-size) * 2);\n margin: var(--ag-grid-size);\n margin-bottom: -1px;\n }\n .ag-theme-balham .ag-tab-selected,\n .ag-theme-balham-dark .ag-tab-selected {\n background-color: var(--ag-background-color);\n border-color: var(--ag-border-color);\n border-bottom-color: transparent;\n }\n .ag-theme-balham .ag-tabs-header,\n .ag-theme-balham-dark .ag-tabs-header {\n border-bottom: 1px solid var(--ag-border-color);\n }\n .ag-theme-balham .ag-column-drop-cell,\n .ag-theme-balham-dark .ag-column-drop-cell {\n height: calc(var(--ag-grid-size) * 6);\n }\n .ag-theme-balham .ag-column-drop-vertical-title,\n .ag-theme-balham-dark .ag-column-drop-vertical-title {\n color: var(--ag-foreground-color);\n }\n .ag-theme-balham .ag-column-drop-vertical-cell,\n .ag-theme-balham-dark .ag-column-drop-vertical-cell {\n margin-left: calc(var(--ag-grid-size) * 2);\n margin-right: calc(var(--ag-grid-size) * 2);\n }\n .ag-theme-balham .ag-column-drop-vertical-cell-text,\n .ag-theme-balham-dark .ag-column-drop-vertical-cell-text {\n margin-left: calc(var(--ag-grid-size) * 2);\n }\n .ag-theme-balham .ag-column-drop-vertical-icon,\n .ag-theme-balham-dark .ag-column-drop-vertical-icon {\n color: var(--ag-secondary-foreground-color);\n }\n .ag-theme-balham .ag-ltr .ag-column-drop-vertical-empty-message,\n .ag-theme-balham-dark .ag-ltr .ag-column-drop-vertical-empty-message {\n padding-left: calc(var(--ag-icon-size) + var(--ag-grid-size) * 2);\n padding-right: var(--ag-grid-size);\n }\n\n .ag-theme-balham .ag-rtl .ag-column-drop-vertical-empty-message,\n .ag-theme-balham-dark .ag-rtl .ag-column-drop-vertical-empty-message {\n padding-right: calc(var(--ag-icon-size) + var(--ag-grid-size) * 2);\n padding-left: var(--ag-grid-size);\n }\n\n .ag-theme-balham .ag-column-drop-horizontal,\n .ag-theme-balham-dark .ag-column-drop-horizontal {\n height: var(--ag-header-height);\n }\n .ag-theme-balham .ag-column-drop-empty,\n .ag-theme-balham-dark .ag-column-drop-empty {\n color: var(--ag-disabled-foreground-color);\n }\n .ag-theme-balham .ag-column-drop-horizontal-cell-text,\n .ag-theme-balham-dark .ag-column-drop-horizontal-cell-text {\n margin-left: calc(var(--ag-grid-size) * 2);\n }\n .ag-theme-balham .ag-column-drop-vertical,\n .ag-theme-balham-dark .ag-column-drop-vertical {\n padding-top: calc(var(--ag-grid-size) * 2);\n }\n .ag-theme-balham .ag-menu-header,\n .ag-theme-balham-dark .ag-menu-header {\n background-color: var(--ag-header-background-color);\n }\n .ag-theme-balham .ag-overlay-loading-center,\n .ag-theme-balham-dark .ag-overlay-loading-center {\n background-color: var(--ag-background-color);\n border: 1px solid var(--ag-border-color);\n color: var(--ag-foreground-color);\n padding: calc(var(--ag-grid-size) * 4);\n }\n .ag-theme-balham .ag-tooltip,\n .ag-theme-balham-dark .ag-tooltip {\n border: none;\n }\n .ag-theme-balham .ag-panel-title-bar-button-icon,\n .ag-theme-balham-dark .ag-panel-title-bar-button-icon {\n font-size: calc(var(--ag-icon-size) + var(--ag-grid-size));\n }\n .ag-theme-balham .ag-chart-data-section,\n .ag-theme-balham .ag-chart-format-section,\n .ag-theme-balham-dark .ag-chart-data-section,\n .ag-theme-balham-dark .ag-chart-format-section {\n padding-bottom: calc(var(--ag-grid-size) * 0.5);\n }\n .ag-theme-balham .ag-group-toolbar,\n .ag-theme-balham-dark .ag-group-toolbar {\n background-color: var(--ag-subheader-toolbar-background-color);\n }\n .ag-theme-balham .ag-chart-tab,\n .ag-theme-balham-dark .ag-chart-tab {\n padding-top: calc(var(--ag-grid-size) * 0.5);\n }\n .ag-theme-balham .ag-charts-format-sub-level-group-item,\n .ag-theme-balham-dark .ag-charts-format-sub-level-group-item {\n margin-bottom: calc(var(--ag-grid-size) * 1.5);\n }\n .ag-theme-balham .ag-chart-menu-close,\n .ag-theme-balham-dark .ag-chart-menu-close {\n background: var(--ag-background-color);\n }\n .ag-theme-balham .ag-chart-menu-close:hover .ag-icon,\n .ag-theme-balham-dark .ag-chart-menu-close:hover .ag-icon {\n border-color: var(--ag-border-color);\n }\n .ag-theme-balham .ag-chart-menu-close .ag-icon,\n .ag-theme-balham-dark .ag-chart-menu-close .ag-icon {\n background: var(--ag-header-background-color);\n border: 1px solid var(--ag-secondary-border-color);\n border-right: none;\n }\n\n .ag-theme-balham-dark {\n color-scheme: dark;\n }\n`;\n","import { css } from '@microsoft/fast-element';\n/**\n * AG Material Theme (no fonts) CSS.\n * @public\n */\nexport const agThemeMaterialNofontsCSS = css `\n .ag-theme-material {\n --ag-material-primary-color: #3f51b5;\n --ag-material-accent-color: #ff4081;\n --ag-foreground-color: rgba(0, 0, 0, 0.87);\n --ag-secondary-foreground-color: rgba(0, 0, 0, 0.54);\n --ag-disabled-foreground-color: rgba(0, 0, 0, 0.38);\n --ag-background-color: #fff;\n --ag-header-background-color: #fff;\n --ag-tooltip-background-color: #fff;\n --ag-subheader-background-color: #eee;\n --ag-subheader-toolbar-background-color: rgba(238, 238, 238, 0.5);\n --ag-header-cell-hover-background-color: #f2f2f2;\n --ag-chip-background-color: #e2e2e2;\n --ag-range-selection-background-color: rgba(122, 134, 203, 0.1);\n --ag-range-selection-background-color-2: rgba(122, 134, 203, 0.19);\n --ag-range-selection-background-color-3: rgba(122, 134, 203, 0.27);\n --ag-range-selection-background-color-4: rgba(122, 134, 203, 0.34);\n --ag-range-selection-highlight-color: #fce4ec;\n --ag-row-hover-color: #fafafa;\n --ag-column-hover-color: #fafafa;\n --ag-control-panel-background-color: #fafafa;\n --ag-selected-row-background-color: #eee;\n --ag-checkbox-unchecked-color: #333;\n --ag-value-change-value-highlight-background-color: #00acc1;\n --ag-side-button-selected-background-color: transparent;\n --ag-range-selection-border-color: var(--ag-material-primary-color);\n --ag-checkbox-checked-color: var(--ag-material-accent-color);\n --ag-borders: none;\n --ag-borders-critical: solid 1px;\n --ag-border-color: #e2e2e2;\n --ag-grid-size: 8px;\n --ag-icon-size: 18px;\n --ag-header-height: calc(var(--ag-grid-size) * 7);\n --ag-row-height: calc(var(--ag-grid-size) * 6);\n --ag-cell-horizontal-padding: calc(var(--ag-grid-size) * 3);\n --ag-list-item-height: calc(var(--ag-grid-size) * 4);\n --ag-row-group-indent-size: calc(var(--ag-grid-size) * 3 + var(--ag-icon-size));\n --ag-filter-tool-panel-sub-level-row-height: calc(var(--ag-grid-size) * 4);\n --ag-checkbox-border-radius: 2px;\n --ag-toggle-button-switch-border-width: 2px;\n --ag-toggle-button-height: var(--ag-icon-size);\n --ag-widget-container-horizontal-padding: calc(var(--ag-grid-size) * 1.5);\n --ag-widget-container-vertical-padding: calc(var(--ag-grid-size) * 2);\n --ag-widget-vertical-spacing: calc(var(--ag-grid-size) * 1.75);\n --ag-font-family: 'Roboto', sans-serif;\n --ag-font-size: 13px;\n --ag-icon-font-family: agGridMaterial;\n --ag-selected-tab-underline-color: var(--ag-material-primary-color);\n --ag-selected-tab-underline-width: 2px;\n --ag-input-focus-border-color: var(--ag-material-primary-color);\n --ag-input-focus-box-shadow: 0 0 0 5px rgba(32, 33, 36, 0.122);\n --ag-card-shadow:\n 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14),\n 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n --ag-card-radius: 2px;\n --ag-invalid-color: #e02525;\n }\n\n .ag-theme-material .ag-filter-toolpanel-header,\n .ag-theme-material .ag-filter-toolpanel-search,\n .ag-theme-material .ag-status-bar,\n .ag-theme-material .ag-header-row,\n .ag-theme-material .ag-panel-title-bar-title,\n .ag-theme-material .ag-multi-filter-group-title-bar {\n font-size: calc(var(--ag-font-size) - 1px);\n font-weight: 600;\n color: var(--ag-header-foreground-color);\n }\n .ag-theme-material .ag-tab {\n height: calc(var(--ag-grid-size) * 4.5);\n flex: 1 1 auto;\n }\n .ag-theme-material .ag-tabs-header,\n .ag-theme-material .ag-column-drop-horizontal {\n background-color: var(--ag-subheader-background-color);\n }\n .ag-theme-material .ag-tabs-body {\n padding: calc(var(--ag-grid-size) * 0.5) 0;\n }\n .ag-theme-material .ag-tabs-body .ag-menu-list {\n padding-top: 0;\n padding-bottom: 0;\n }\n .ag-theme-material .ag-header-cell,\n .ag-theme-material .ag-header-group-cell {\n transition: background-color 0.5s;\n }\n .ag-theme-material .ag-row-last:not(.ag-row-first) .ag-cell-inline-editing {\n bottom: 0;\n }\n .ag-theme-material .ag-cell-inline-editing {\n padding: var(--ag-grid-size);\n height: calc(var(--ag-row-height) + var(--ag-grid-size) * 3);\n border-color: var(--ag-border-color) !important;\n }\n .ag-theme-material .ag-has-focus .ag-cell-inline-editing {\n border-color: var(--ag-input-focus-border-color) !important;\n }\n .ag-theme-material .ag-side-button-button {\n color: var(--ag-foreground-color);\n }\n .ag-theme-material .ag-column-drop-vertical {\n border-bottom: solid 1px;\n border-bottom-color: var(--ag-border-color);\n padding-top: var(--ag-grid-size);\n }\n .ag-theme-material .ag-column-drop-vertical.ag-last-column-drop {\n border-bottom: none;\n }\n .ag-theme-material .ag-column-drop-vertical-cell {\n margin-left: 0;\n }\n .ag-theme-material .ag-column-drop-vertical-empty-message {\n font-size: calc(var(--ag-font-size) - 1px);\n font-weight: 600;\n color: var(--ag-disabled-foreground-color);\n }\n .ag-theme-material .ag-ltr .ag-column-drop-vertical-empty-message {\n padding-left: calc(var(--ag-icon-size) + var(--ag-grid-size) * 2);\n padding-right: var(--ag-grid-size);\n }\n\n .ag-theme-material .ag-rtl .ag-column-drop-vertical-empty-message {\n padding-right: calc(var(--ag-icon-size) + var(--ag-grid-size) * 2);\n padding-left: var(--ag-grid-size);\n }\n\n .ag-theme-material .ag-status-bar {\n border: solid 1px;\n border-color: var(--ag-border-color);\n }\n .ag-theme-material .ag-column-panel-column-select {\n border-top: solid 1px;\n border-top-color: var(--ag-border-color);\n }\n .ag-theme-material .ag-column-select,\n .ag-theme-material .ag-column-select-header {\n border-bottom: solid 1px;\n border-bottom-color: var(--ag-border-color);\n }\n .ag-theme-material .ag-column-select-header {\n height: var(--ag-header-height);\n }\n .ag-theme-material .ag-group-title-bar {\n padding: calc(var(--ag-grid-size) * 0.75) var(--ag-grid-size);\n }\n .ag-theme-material .ag-charts-format-sub-level-group-title-bar {\n padding: calc(var(--ag-grid-size) * 0.5) var(--ag-grid-size);\n }\n .ag-theme-material .ag-chart-data-section,\n .ag-theme-material .ag-chart-format-section {\n padding-bottom: calc(var(--ag-grid-size) * 0.5);\n }\n .ag-theme-material .ag-chart-menu-close {\n background: var(--ag-background-color);\n }\n .ag-theme-material .ag-chart-menu-close .ag-icon {\n background: var(--ag-subheader-background-color);\n }\n .ag-theme-material input[class^='ag-']:not([type]),\n .ag-theme-material input[class^='ag-'][type='text'],\n .ag-theme-material input[class^='ag-'][type='number'],\n .ag-theme-material input[class^='ag-'][type='tel'],\n .ag-theme-material input[class^='ag-'][type='date'],\n .ag-theme-material input[class^='ag-'][type='datetime-local'],\n .ag-theme-material textarea[class^='ag-'] {\n background: transparent;\n color: var(--ag-foreground-color);\n font-family: inherit;\n font-size: inherit;\n height: calc(var(--ag-grid-size) * 5);\n padding-bottom: var(--ag-grid-size);\n border-width: 0;\n border-bottom: 2px solid;\n border-bottom-color: var(--ag-border-color);\n }\n .ag-theme-material input[class^='ag-']:not([type]):focus,\n .ag-theme-material input[class^='ag-'][type='text']:focus,\n .ag-theme-material input[class^='ag-'][type='number']:focus,\n .ag-theme-material input[class^='ag-'][type='tel']:focus,\n .ag-theme-material input[class^='ag-'][type='date']:focus,\n .ag-theme-material input[class^='ag-'][type='datetime-local']:focus,\n .ag-theme-material textarea[class^='ag-']:focus {\n border-bottom: 2px solid;\n border-bottom-color: var(--ag-material-primary-color);\n outline: none;\n box-shadow: none;\n }\n .ag-theme-material input[class^='ag-']:not([type])::placeholder,\n .ag-theme-material input[class^='ag-'][type='text']::placeholder,\n .ag-theme-material input[class^='ag-'][type='number']::placeholder,\n .ag-theme-material input[class^='ag-'][type='tel']::placeholder,\n .ag-theme-material input[class^='ag-'][type='date']::placeholder,\n .ag-theme-material input[class^='ag-'][type='datetime-local']::placeholder,\n .ag-theme-material textarea[class^='ag-']::placeholder {\n color: var(--ag-disabled-foreground-color);\n }\n .ag-theme-material input[class^='ag-']:not([type]):disabled,\n .ag-theme-material input[class^='ag-'][type='text']:disabled,\n .ag-theme-material input[class^='ag-'][type='number']:disabled,\n .ag-theme-material input[class^='ag-'][type='tel']:disabled,\n .ag-theme-material input[class^='ag-'][type='date']:disabled,\n .ag-theme-material input[class^='ag-'][type='datetime-local']:disabled,\n .ag-theme-material textarea[class^='ag-']:disabled {\n border-bottom: 1px solid;\n border-bottom-color: var(--ag-border-color);\n }\n .ag-theme-material input[class^='ag-']:not([type]):invalid,\n .ag-theme-material input[class^='ag-'][type='text']:invalid,\n .ag-theme-material input[class^='ag-'][type='number']:invalid,\n .ag-theme-material input[class^='ag-'][type='tel']:invalid,\n .ag-theme-material input[class^='ag-'][type='date']:invalid,\n .ag-theme-material input[class^='ag-'][type='datetime-local']:invalid,\n .ag-theme-material textarea[class^='ag-']:invalid {\n border-width: 0;\n border-bottom: 1px solid;\n border-bottom-color: var(--ag-invalid-color);\n color: var(--ag-invalid-color);\n }\n .ag-theme-material .ag-standard-button {\n appearance: none;\n background-color: transparent;\n border: 0;\n color: var(--ag-material-primary-color);\n font-family: inherit;\n font-size: inherit;\n margin: 0;\n padding: 0;\n text-transform: uppercase;\n }\n .ag-theme-material .ag-standard-button:disabled {\n color: var(--ag-disabled-foreground-color);\n background-color: var(--ag-input-disabled-background-color);\n border-color: var(--ag-input-disabled-border-color);\n }\n .ag-theme-material.ag-dnd-ghost {\n font-size: calc(var(--ag-font-size) - 1px);\n font-weight: 600;\n }\n .ag-theme-material .ag-filter-toolpanel-header {\n height: calc(var(--ag-grid-size) * 4);\n }\n .ag-theme-material .ag-filter-toolpanel-group-level-0-header {\n height: calc(var(--ag-grid-size) * 7);\n }\n .ag-theme-material .ag-ltr .ag-filter-apply-panel-button {\n margin-left: var(--ag-grid-size);\n }\n\n .ag-theme-material .ag-rtl .ag-filter-apply-panel-button {\n margin-right: var(--ag-grid-size);\n }\n\n .ag-theme-material .ag-layout-auto-height .ag-center-cols-clipper,\n .ag-theme-material .ag-layout-auto-height .ag-center-cols-container,\n .ag-theme-material .ag-layout-print .ag-center-cols-clipper,\n .ag-theme-material .ag-layout-print .ag-center-cols-container {\n min-height: 150px;\n }\n .ag-theme-material .ag-overlay-no-rows-wrapper.ag-layout-auto-height {\n padding-top: 60px;\n }\n .ag-theme-material .ag-picker-field-wrapper:focus {\n box-shadow: 0 0 0 1px var(--ag-material-primary-color);\n }\n`;\n","import { css } from '@microsoft/fast-element';\nimport { agGridCSS } from './ag-grid-css';\nimport { agHeadCSS } from './ag-head-css';\nimport { agThemeAlpineNofontsCSS } from './ag-theme-alpine-no-font-css';\nimport { agThemeBalhamNofontsCSS } from './ag-theme-balham-no-font-css';\nimport { agThemeMaterialNofontsCSS } from './ag-theme-material-no-font-css';\nexport * from './fonts';\n/**\n * All External AG Grid Stock in one CSS.\n * @remarks This is a collection of multiple AG themes, only needed if the target element needs more than one stock theme.\n * @public\n */\nexport const agExternalStockStyles = css `\n ${agGridCSS}\n ${agHeadCSS}\n ${agThemeAlpineNofontsCSS}\n ${agThemeBalhamNofontsCSS}\n ${agThemeMaterialNofontsCSS}\n`;\n/**\n * All available External AG Grid Stock CSS.\n * @public\n */\nexport { agGridCSS, agHeadCSS, agThemeAlpineNofontsCSS, agThemeBalhamNofontsCSS, agThemeMaterialNofontsCSS, };\n","/**\n * Event names for datasource-grid communication\n * These represent datasource operations, not grid-specific actions\n */\nexport const datasourceEventNames = {\n // Initialization events\n initialize: 'datasource-initialize',\n ready: 'datasource-ready',\n // Data events\n dataLoaded: 'datasource-data-loaded',\n dataChanged: 'datasource-data-changed',\n dataCleared: 'datasource-data-cleared',\n // Schema events\n schemaUpdated: 'datasource-schema-updated',\n // Status events\n loadingStarted: 'datasource-loading-started',\n loadingFinished: 'datasource-loading-finished',\n noDataAvailable: 'datasource-no-data-available',\n moreDataAvailable: 'datasource-more-data-available',\n // Filter events\n filtersRestored: 'datasource-filters-restored',\n // Error events\n error: 'datasource-error',\n // Destroy datasource events\n destroy: 'datasource-destroy',\n // Size events\n sizeChanged: 'datasource-size-changed',\n // Server-side specific events\n cacheFilterConfig: 'cache-filter-config',\n refreshServerSide: 'refresh-server-side',\n setServerSideDatasource: 'set-server-side-datasource',\n addGridCssClass: 'add-grid-css-class',\n removeGridCssClass: 'remove-grid-css-class',\n applyServerSideTransaction: 'apply-server-side-transaction',\n};\n","/**\n * The Genesis Datasource events names.\n * @public\n */\nexport const gridProGenesisDatasourceEventNames = {\n error: 'datasource-error',\n dataInit: 'datasource-init',\n sizeChanged: 'datasource-size-changed',\n moreRowsChanged: 'more-rows-changed',\n};\n","import { FieldTypeEnum } from '@genesislcap/foundation-comms';\nimport { getEnumFilterParams } from '../grid-pro.definitions';\n/**\n * Returns a filter type based on the Grid Pro field/column type.\n * @param type - The type of the field/column\n * @returns The ag-grid filter type\n */\nexport function getFilterByFieldType(type) {\n switch (type === null || type === void 0 ? void 0 : type.toLowerCase()) {\n case 'int':\n case 'long':\n case 'double':\n case 'bigdecimal':\n case 'number':\n return 'agNumberColumnFilter';\n case 'date':\n case 'datetime':\n return 'agDateColumnFilter';\n case 'string':\n case 'enum':\n return 'agMultiColumnFilter';\n default:\n return 'agTextColumnFilter';\n }\n}\n/**\n * Returns the filter params based on the Grid Pro field/column type.\n * @param field - The field metadata\n * @returns the filter params for the specified field type\n * @remarks Currently only returns a default filter params object, for all field types\n * @alpha\n */\nexport function getClientSideFilterParamsByFieldType(field) {\n switch (field.type) {\n case FieldTypeEnum.DATE:\n case FieldTypeEnum.DATETIME: {\n return {\n comparator: function (filterLocalDateAtMidnight, cellValue) {\n if (!cellValue)\n return -1;\n const cellValueTime = new Date(cellValue).setHours(0, 0, 0, 0);\n const filterValueTime = filterLocalDateAtMidnight.getTime();\n if (cellValueTime === filterValueTime) {\n return 0;\n }\n if (cellValueTime < filterValueTime) {\n return -1;\n }\n if (cellValueTime > filterValueTime) {\n return 1;\n }\n },\n buttons: ['reset', 'apply'],\n closeOnApply: true,\n closeOnClear: true,\n maxNumConditions: 1,\n browserDatePicker: true,\n };\n }\n case FieldTypeEnum.ENUM: {\n return getEnumFilterParams(field, getFilterByFieldType(field.type));\n }\n }\n}\n","import { __awaiter, __decorate } from \"tslib\";\nimport { MessageType, ResourceType, dataServerResultFilter, normaliseCriteria, } from '@genesislcap/foundation-comms';\nimport { LifecycleMixin } from '@genesislcap/foundation-utils';\nimport { DOM, attr, customElement } from '@microsoft/fast-element';\nimport { BehaviorSubject, EMPTY } from 'rxjs';\nimport { catchError, debounceTime, skip, tap } from 'rxjs/operators';\nimport { GridProBaseDatasource, criteriaDelimiter } from '../datasource/base.datasource';\nimport { getClientSideFilterParamsByFieldType, getFilterByFieldType, } from '../datasource/client-side.grid-definitions';\nimport { logger } from '../utils/logger';\nimport { datasourceEventNames, } from './datasource-events.types';\nimport { gridProGenesisDatasourceEventNames } from './grid-pro-genesis-datasource.config';\nconst withoutFullInit = null;\nconst withoutColumnDefs = null;\n/**\n * The Genesis Datasource element, for CSRM-compatible data fetching and used exclusively by the GridPro element.\n * @remarks Only supports Client-Side Row Model.\n * @public\n */\nlet GridProGenesisDatasource = class GridProGenesisDatasource extends LifecycleMixin(GridProBaseDatasource) {\n constructor() {\n super(...arguments);\n // Cache for rowData array to avoid repeated Array.from() calls\n this.cachedRowArray = [];\n // Transaction data for grid operations\n this.transactionData = {\n add: [],\n remove: [],\n update: [],\n addIndex: 0,\n };\n this.keepColDefsOnClearRowData = false;\n this.requiresFullRowDataAndColDefs = true;\n this._lastMoreRows = false;\n this._isMoreRowsResult = false;\n this._nextOffset = 0;\n this._loadMoreCount = 0;\n }\n // DatasourceOptions\n criteriaChanged(oldCriteria, newCriteria) {\n return __awaiter(this, void 0, void 0, function* () {\n const criteriaIsNotDuplicate = oldCriteria !== normaliseCriteria(newCriteria, criteriaDelimiter);\n if (this.datasource.initialized && criteriaIsNotDuplicate) {\n yield this.reloadResourceData();\n }\n });\n }\n requestChanged(oldRequest, newRequest) {\n const requestIsNotDuplicate = oldRequest !== newRequest;\n if (this.datasource.initialized && requestIsNotDuplicate) {\n this.reloadResourceData();\n }\n }\n resourceNameChanged(oldValue, newValue) {\n if (!oldValue || oldValue === newValue)\n return;\n this.restart();\n }\n connectedCallback() {\n super.connectedCallback();\n const shouldRunConnect = this.shouldRunConnect;\n DOM.queueUpdate(() => {\n if (!shouldRunConnect)\n return;\n this.init();\n this.subscribeToConnection();\n });\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n const shouldRunDisconnect = this.shouldRunDisconnect;\n DOM.queueUpdate(() => {\n if (!shouldRunDisconnect)\n return;\n this.destroy();\n this.unsubscribeFromConnection();\n });\n }\n deepClone() {\n const copy = super.deepClone();\n copy.deferredGridOptions = {};\n if (this.deferredGridOptions) {\n Object.keys(this.deferredGridOptions).forEach((key) => {\n if (typeof this.deferredGridOptions[key] === 'function') {\n copy.deferredGridOptions[key] = this.deferredGridOptions[key].bind(copy);\n }\n else if (key === 'columnDefs' && this.deferredGridOptions[key].length) {\n copy.deferredGridOptions[key] = this.colDefsDeepClone(key, copy);\n }\n else {\n copy.deferredGridOptions[key] = structuredClone(this.deferredGridOptions[key]);\n }\n });\n }\n copy.deferredColumnStates = structuredClone(this.deferredColumnStates);\n copy.request = structuredClone(this.request);\n return copy;\n }\n colDefsDeepClone(key, copy) {\n return this.deferredGridOptions[key].map((columnDefinition) => {\n const definitionCopy = {};\n Object.keys(columnDefinition).forEach((fieldKey) => {\n if (typeof columnDefinition[fieldKey] === 'function') {\n definitionCopy[fieldKey] = columnDefinition[fieldKey].bind(copy);\n }\n else {\n definitionCopy[fieldKey] = structuredClone(columnDefinition[fieldKey]);\n }\n });\n return definitionCopy;\n });\n }\n // Genesis Specific\n /**\n * Initializes the datasource.\n * @public\n * @param columnDefinitions - Optionally set the `gridOptions` up with column definitions\n * @param columnStates - Optionally set the grid up with column state\n * @remarks This method is called automatically when the element is connected to the DOM.\n */\n init(keepColDefsOnClearRowData) {\n return __awaiter(this, void 0, void 0, function* () {\n this.$emit(datasourceEventNames.initialize, {\n keepColDefsOnClearRowData,\n options: Object.assign({ getRowId: (params) => params.data[this.rowId] }, this.deferredGridOptions),\n });\n // TODO: instead of listening to ready event, we should only render the datasource slot when the grid is ready\n this.addEventListener(datasourceEventNames.ready, (event) => __awaiter(this, void 0, void 0, function* () {\n const { pagination } = event.detail;\n this.pagination = pagination;\n yield this.loadResourceData();\n }), { once: true });\n const filterDebounceTime = 600;\n this.updateSub = this.update\n .pipe(skip(1), debounceTime(filterDebounceTime), tap((f) => logger.debug('filters (debounced): ', f)))\n .subscribe((_) => {\n this.reloadResourceData();\n });\n });\n }\n /**\n * Destroys the datasource, resetting it to its initial state.\n * @public\n */\n destroy() {\n var _a;\n logger.debug('GridProGenesisDatasource.destroy()', this.resourceName);\n if (this.dataSub) {\n this.dataSub.unsubscribe();\n this.dataSub = undefined;\n }\n if (this.updateSub) {\n this.updateSub.unsubscribe();\n this.updateSub = undefined;\n }\n if (this.connectionSub) {\n this.connectionSub.unsubscribe();\n this.connectionSub = undefined;\n }\n this._sourceRef = undefined;\n this.clearRowData();\n this._lastMoreRows = false;\n this._isMoreRowsResult = false;\n this._nextOffset = 0;\n this._loadMoreCount = 0;\n this.$emit(datasourceEventNames.destroy);\n this.requiresFullRowDataAndColDefs = true;\n this.dataSubWasLoggedOff = false;\n this.criteriaFromFilters = new Map();\n (_a = this.update) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n this.update = new BehaviorSubject(new Map());\n this.setDisconnected(false);\n // TODO: There may need to be a full destroy path. Datasources need some love!\n this.datasource.destroy();\n }\n /**\n * Deinitialises the datasource, resetting it to its initial state.\n * @deprecated Use `destroy` instead\n * @public\n */\n deinit() {\n logger.debug('GridProGenesisDatasource.deinit()', this.resourceName);\n this.destroy();\n }\n /**\n * Resets the datasource to its initial state.\n * @public\n * @deprecated Use `destroy` instead\n */\n reset() {\n logger.debug('GridProGenesisDatasource.reset()', this.resourceName);\n this.destroy();\n }\n /**\n * Restarts the datasource, uses `destroy` and `init` in sequence.\n * @public\n */\n restart() {\n return __awaiter(this, void 0, void 0, function* () {\n this.destroy();\n yield this.init(this.keepColDefsOnClearRowData);\n });\n }\n /**\n * Force the grid to redispatch the current rows\n */\n refreshRows() {\n this.updateCachedRowArray(); // Ensure the cache is up-to-date\n this.emitDataLoaded(this.cachedRowArray);\n }\n /**\n * Clears the rowData and columnDefs for the grid.\n * @remarks This is called when `reloadResourceData` happens, on criteria and filters change or full `reset`.\n * @param withColumnDefs - Whether to clear the columnDefs as well. Defaults to true.\n * @internal\n */\n clearRowData(withColumnDefs = true) {\n this.rowData = new Map();\n this.cachedRowArray = []; // Clear the cached array\n this.transactionData = { add: [], remove: [], update: [], addIndex: 0 };\n // Emit event to clear data\n this.$emit(datasourceEventNames.dataCleared, {\n includeSchema: withColumnDefs && !this.keepColDefsOnClearRowData,\n });\n }\n /**\n * Sets the columnDefs and rowData for the grid.\n * @remarks This should only happen once, when the grid is first initialized. Follow up updates will use transactions.\n * @internal\n */\n setRowData(rowData) {\n return __awaiter(this, void 0, void 0, function* () {\n const agColumnDefs = yield this.getAgColumnDefs(this.datasource.fieldMetadata);\n if (agColumnDefs) {\n this.$emit(datasourceEventNames.schemaUpdated, {\n schema: agColumnDefs,\n metadata: this.datasource.fieldMetadata,\n });\n }\n const data = this.rowDataMapper ? this.rowDataMapper(rowData) : rowData;\n this.$emit(datasourceEventNames.filtersRestored);\n // Use transactions for adding data\n this.transactionData = { add: data ? [...data] : [], remove: [], update: [], addIndex: 0 };\n this.emitDataChanged(this.transactionData);\n // Update the cached row array\n this.updateCachedRowArray();\n this.requiresFullRowDataAndColDefs = false;\n });\n }\n /**\n * Updates the cached row array from the rowData Map\n * @internal\n */\n updateCachedRowArray() {\n this.cachedRowArray = Array.from(this.rowData.values());\n }\n /**\n * Emits event to notify data has been loaded\n * @internal\n */\n emitDataLoaded(data, isInitialLoad = false) {\n this.$emit(datasourceEventNames.dataLoaded, {\n data,\n isInitialLoad,\n });\n }\n /**\n * Emits event to notify data has changed\n * @internal\n */\n emitDataChanged(transaction) {\n this.$emit(datasourceEventNames.dataChanged, {\n changes: transaction,\n });\n if (this.rowData.size === 0 &&\n !transaction.add.length &&\n !transaction.update.length &&\n !transaction.remove.length) {\n this.$emit(datasourceEventNames.noDataAvailable);\n }\n else {\n this.$emit(datasourceEventNames.loadingFinished);\n }\n }\n /**\n * Resets the grid data while keeping columnDefs and sends a DATA_LOGOFF message if it's a stream.\n * Loads resource data without full initialization (no metadata fetch).\n * @remarks This is used when the grid is already initialized and we want to reload the data due to a criteria/filter change.\n * @see loadResourceData\n * @public\n */\n reloadResourceData() {\n return __awaiter(this, void 0, void 0, function* () {\n logger.debug('GridProGenesisDatasource.reloadResourceData()', this.resourceName);\n if (this.dataSub) {\n this.dataSub.unsubscribe();\n this.dataSub = undefined;\n }\n // Reset load more tracking on reload\n this._nextOffset = 0;\n this._loadMoreCount = 0;\n this.datasource.updateLoadMoreCount(0);\n this.datasource.stream = undefined;\n this.clearRowData(withoutColumnDefs);\n this.$emit(datasourceEventNames.loadingStarted);\n this.setDisconnected(false);\n yield this.loadResourceData(withoutFullInit);\n });\n }\n /**\n * Initializes the datasource and loads the data for the grid.\n * Handles both snapshot and stream data (for both REQUEST_SERVER and DATASERVER resource types).\n *\n * @param withFullInit - if true, will call datasource.init() with requiresMetadataFetch = true, fetching fresh metadata\n * @see reloadResourceData\n * @internal\n */\n loadResourceData() {\n return __awaiter(this, arguments, void 0, function* (withFullInit = true) {\n const requiresMetadataFetch = withFullInit || !this.datasource.initialized;\n try {\n // Use the base datasource error handling\n const initOK = yield this.initializeDatasource(this.datasourceOptions(), requiresMetadataFetch, false);\n if (!initOK) {\n logger.debug(`Genesis Datasource init failed for ${this.resourceName}`);\n this.clearRowData();\n return;\n }\n this.$emit(gridProGenesisDatasourceEventNames.dataInit);\n if (this.isSnapshot) {\n const result = yield this.datasource.snapshot();\n if (result) {\n const rowData = this.handleSnapshot(result);\n this.setRowData(rowData);\n }\n return;\n }\n logger.debug(`starting stream for ${this.resourceName}`);\n yield this.datasource.startStream();\n this.dataSub = this.datasource.stream\n .pipe(catchError((err) => {\n var _a;\n // Use base error handling for stream errors\n this.handleErrors(((_a = err === null || err === void 0 ? void 0 : err.receivedMessage) === null || _a === void 0 ? void 0 : _a.ERROR) || (err === null || err === void 0 ? void 0 : err.message) || err, 'stream');\n return EMPTY;\n }))\n .subscribe((result) => {\n this._sourceRef = result.SOURCE_REF;\n const hasMoreRowsInResult = 'MORE_ROWS' in result;\n const hasRowsCountInResult = 'ROWS_COUNT' in result;\n const hasNextOffsetInResult = this.datasource.resourceType === ResourceType.REQUEST_SERVER && 'NEXT_OFFSET' in result;\n this._isMoreRowsResult = hasMoreRowsInResult && !hasRowsCountInResult;\n // Store NEXT_OFFSET for RequestServer load more functionality\n if (hasNextOffsetInResult) {\n this._nextOffset = result.NEXT_OFFSET;\n }\n if (result === null || result === void 0 ? void 0 : result.ERROR) {\n this.handleErrors(result.ERROR, 'criteria');\n }\n const messageType = result.MESSAGE_TYPE;\n if (messageType && messageType === MessageType.LOGOFF_ACK) {\n this.handleErrors(`Genesis datasource for ${this.resourceName} disconnected.`, 'connection');\n this.dataSubWasLoggedOff = true;\n return;\n }\n this.dataSubWasLoggedOff = false;\n if (hasMoreRowsInResult) {\n this.updateLoadMoreStatus(result.MORE_ROWS, result.SOURCE_REF);\n }\n if (result.ROW) {\n const nextMessage = dataServerResultFilter(result);\n this.handleStreamResult(nextMessage);\n if (hasMoreRowsInResult && result.MORE_ROWS !== this._lastMoreRows) {\n const moreRowsDetail = {\n moreRows: result.MORE_ROWS,\n sourceRef: result.SOURCE_REF,\n };\n this.$emit(gridProGenesisDatasourceEventNames.moreRowsChanged, moreRowsDetail);\n this._lastMoreRows = result.MORE_ROWS;\n }\n }\n else {\n this.handleStreamResult(result);\n }\n });\n }\n catch (error) {\n let { message } = error;\n if (error.receivedMessage) {\n message = error.receivedMessage.ERROR;\n }\n logger.error(message);\n // Use base error handling for general errors\n this.handleErrors(message, 'unknown');\n }\n });\n }\n handleSnapshot(result) {\n if (Array.isArray(result))\n return result;\n if (result.REPLY) {\n return result.REPLY;\n }\n if (result.ROW) {\n return dataServerResultFilter(result).inserts;\n }\n return result.inserts;\n }\n handleStreamResult(result) {\n if (!result)\n return;\n if (this.isRequestServer) {\n this.applyRequestServerData(result);\n }\n else {\n this.applyDataserverData(result);\n }\n }\n /**\n * Updates the status bar based on more rows status\n * @param moreRows - Whether more rows are available\n * @param sourceRef - The source reference\n * @param rowsCount - The total number of rows\n * @remarks\n * This method emits an event for the grid to handle status bar updates.\n */\n updateLoadMoreStatus(moreRows, sourceRef) {\n this.$emit(datasourceEventNames.moreDataAvailable, {\n hasMoreData: moreRows,\n sourceRef,\n });\n }\n applyRequestServerData(requestServerResult) {\n var _a;\n const previousSize = this.rowData.size;\n const requestServerData = requestServerResult.REPLY;\n if (!Array.isArray(requestServerData) ||\n !((_a = requestServerResult.MESSAGE_TYPE) === null || _a === void 0 ? void 0 : _a.startsWith('REP_'))) {\n logger.error('received invalid RequestServerResult', requestServerResult);\n return;\n }\n if (this.requiresFullRowDataAndColDefs) {\n let noRowIdError = false;\n for (const insertData of requestServerData || []) {\n const insertDataRowId = insertData[this.rowId];\n if (!insertDataRowId) {\n if (!noRowIdError) {\n const noRowIdMessage = `The specified rowId (${this.rowId}) is not present in the data. Since this is not a snapshot (isSnapshot=false), the data will not be loaded. Please provide a valid 'row-id' attribute.`;\n logger.error(noRowIdMessage);\n noRowIdError = true;\n }\n break;\n }\n this.rowData.set(insertDataRowId, insertData);\n }\n if (noRowIdError) {\n this.destroy();\n return;\n }\n // Update cache and use it if available\n this.updateCachedRowArray();\n const rowData = this.rowData.size > 0 ? this.cachedRowArray : requestServerData;\n this.handleSizeChanged(previousSize, this.rowData.size);\n this.setRowData(rowData);\n return;\n }\n const rowsToUpdate = [];\n // Update cache before using it\n this.updateCachedRowArray();\n const rowsToDelete = this.cachedRowArray.filter((row) => {\n const match = requestServerData.find((data) => data[this.rowId] === row[this.rowId]);\n if (match) {\n rowsToUpdate.push(match);\n return false; // don't delete rows that need to be updated\n }\n return true; // delete rows that don't exist in requestServerData\n });\n const rowsToInsert = requestServerData.filter((data) => !this.rowData.has(data[this.rowId]));\n this.transactionData = { add: [], remove: [], update: [] };\n this.handleStreamInserts(rowsToInsert);\n this.handleStreamDeletes(rowsToDelete);\n this.handleStreamUpdates(rowsToUpdate);\n this.emitDataChanged(this.transactionData);\n this.handleSizeChanged(previousSize, this.rowData.size);\n }\n applyDataserverData(dataServerResult) {\n var _a;\n const previousSize = this.rowData.size;\n if (this.requiresFullRowDataAndColDefs) {\n (_a = dataServerResult.inserts) === null || _a === void 0 ? void 0 : _a.forEach((insertData) => {\n this.rowData.set(insertData[this.rowId], insertData);\n });\n // Update and use the cached array\n this.updateCachedRowArray();\n this.setRowData(this.cachedRowArray);\n this.handleSizeChanged(previousSize, this.rowData.size);\n return;\n }\n this.transactionData = { add: [], remove: [], update: [] };\n this.handleStreamInserts(dataServerResult.inserts);\n this.handleStreamDeletes(dataServerResult.deletes);\n this.handleStreamUpdates(dataServerResult.updates);\n this.emitDataChanged(this.transactionData);\n this.handleSizeChanged(previousSize, this.rowData.size);\n }\n // FUTURE: Work with the field types vs ag grid column def types!\n getAgColumnDefs(fieldsMetadata) {\n return __awaiter(this, void 0, void 0, function* () {\n const columnDefsFromMetadata = this.generateColumnDefsFromMetadata(fieldsMetadata, getClientSideFilterParamsByFieldType, getFilterByFieldType);\n // Return the base column definitions - the grid will handle merging with template definitions\n return columnDefsFromMetadata;\n });\n }\n setFilter(fieldName, newFilter) {\n this.criteriaFromFilters.set(fieldName, newFilter);\n this.update.next(this.criteriaFromFilters);\n }\n removeFilter(fieldName) {\n this.criteriaFromFilters.delete(fieldName);\n this.update.next(this.criteriaFromFilters);\n }\n applyTransaction(transaction) {\n this.emitDataChanged(transaction);\n }\n handleSizeChanged(oldSize, newSize) {\n if (oldSize === newSize)\n return;\n this.$emit(gridProGenesisDatasourceEventNames.sizeChanged, {\n value: newSize,\n oldValue: oldSize,\n });\n }\n handleStreamInserts(inserts = []) {\n super.handleStreamInserts(inserts, this._isMoreRowsResult ? this.cachedRowArray.length : 0);\n this.updateCachedRowArray();\n }\n handleStreamUpdates(updates = []) {\n super.handleStreamUpdates(updates);\n this.updateCachedRowArray();\n }\n /**\n * Handles stream deletes by removing records from the grid.\n * @param deletes - List of records to remove from the grid stream\n */\n handleStreamDeletes(deletes = []) {\n super.handleStreamDeletes(deletes);\n this.updateCachedRowArray();\n }\n loadMore() {\n switch (this.datasource.resourceType) {\n case ResourceType.DATASERVER:\n let viewNumber;\n if (this.viewNumber) {\n this._loadMoreCount = +this.viewNumber + 1;\n viewNumber = this._loadMoreCount;\n }\n else {\n this._loadMoreCount += 1;\n }\n this.connect.getMoreRows(this._sourceRef, viewNumber);\n break;\n case ResourceType.REQUEST_SERVER:\n this._loadMoreCount += 1;\n // TODO: Will get back to this soon, want to improve loadMore for isSnapshot + extras\n // const requestParams = this.datasource.requestOnlyParams;\n // // Set OFFSET for the next request\n // if (requestParams.DETAILS) {\n // requestParams.DETAILS.OFFSET = this._nextOffset;\n // }\n // this.datasource.snapshot(requestParams).then((result) => {\n // this.applyRequestServerData(result as RequestServerResult);\n // });\n break;\n }\n this.datasource.updateLoadMoreCount(this._loadMoreCount);\n }\n};\n__decorate([\n attr({ mode: 'boolean', attribute: 'keep-col-defs-on-clear-row-data' })\n], GridProGenesisDatasource.prototype, \"keepColDefsOnClearRowData\", void 0);\nGridProGenesisDatasource = __decorate([\n customElement({\n name: 'grid-pro-genesis-datasource',\n })\n], GridProGenesisDatasource);\nexport { GridProGenesisDatasource };\n","import { formatDateTimestamp, formatDateTimeTimestamp } from '@genesislcap/foundation-utils';\n/**\n * Returns the filter params for enum fields based on the detected filter type.\n * @param field - The field metadata\n * @returns the filter params for enum fields, or undefined if not applicable\n */\nexport function getEnumFilterParams(field, filterType) {\n if (filterType === 'agMultiColumnFilter') {\n return {\n filters: [\n {\n filter: 'agTextColumnFilter',\n },\n {\n filter: 'agSetColumnFilter',\n filterParams: {\n values: field.enumOptions,\n },\n },\n ],\n };\n }\n if (filterType === 'agSetColumnFilter') {\n return {\n values: field.enumOptions,\n };\n }\n return undefined;\n}\n/**\n * Return a column type base on each field's metadata from the selected resource.\n * @param metadataType - The type of the field/column\n * @returns the column type\n * @remarks Currently only handles numeric columns\n * @alpha\n */\nexport function getColumnType(metadataType) {\n switch (metadataType === null || metadataType === void 0 ? void 0 : metadataType.toLowerCase()) {\n case 'int':\n case 'long':\n case 'double':\n case 'bigdecimal':\n case 'number':\n return 'numericColumn';\n }\n}\n/**\n * Returns a formatted date value from the Grid Pro cell value.\n * @param param - A ValueFormatterParams object.\n * @returns A formatted date value.\n * @public\n */\nexport function dateValueFormatter({ value }) {\n return formatDateTimestamp(value);\n}\n/**\n * Returns a formatted date time value from the Grid Pro cell value.\n * @param param - A ValueFormatterParams object.\n * @returns A formatted date time value.\n * @public\n */\nexport function dateTimeValueFormatter({ value }) {\n return formatDateTimeTimestamp(value);\n}\n// TODO: possible duplicate - need to evaluate the differences\nconst isoDateTimeSliceEnd = 19;\n/**\n * Returns a formatted date value from an epoch number.\n * @param epoch - A number representing the number of milliseconds since the Unix epoch (1 January 1970 00:00:00 UTC).\n * @returns A formatted date value.\n * @alpha\n * @deprecated No longer used in the Grid Pro package.\n */\nexport function formatDateExtra(epoch) {\n return new Date(epoch)\n .toISOString()\n .slice(0, isoDateTimeSliceEnd)\n .replace(/-/g, '')\n .replace('T', '-');\n}\n/**\n * The time between allowing the grids to automatically resize.\n * @internal\n */\nexport const DEBOUNCED_RESIZE_TIME = 5;\n/**\n * The event names for the Grid Pro component.\n * @public\n */\nexport const gridProEventNames = {\n datasourceErrorClose: 'datasource-error-close',\n};\n/**\n * The error names for the Grid Pro component.\n * @public\n */\nexport const gridProErrorNames = {\n datasource: 'datasource',\n unknown: 'unknown',\n};\n/**\n * @remarks List of AG properties without rowData\n * @privateRemarks This is was removed from ag-grid v35 but we need to support it for backwards compatibility.\n * @internal\n */\nexport const AG_PROPERTIES = [\n 'rowSelection',\n 'overlayLoadingTemplate',\n 'overlayNoRowsTemplate',\n 'quickFilterText',\n 'rowModelType',\n 'editType',\n 'domLayout',\n 'clipboardDelimiter',\n 'rowGroupPanelShow',\n 'multiSortKey',\n 'pivotColumnGroupTotals',\n 'pivotRowTotals',\n 'pivotPanelShow',\n 'fillHandleDirection',\n 'serverSideStoreType',\n 'groupDisplayType',\n 'treeDataDisplayType',\n 'colResizeDefault',\n 'components',\n 'frameworkComponents',\n 'rowStyle',\n 'context',\n 'autoGroupColumnDef',\n 'localeText',\n 'icons',\n 'datasource',\n 'serverSideDatasource',\n 'viewportDatasource',\n 'groupRowRendererParams',\n 'aggFuncs',\n 'fullWidthCellRendererParams',\n 'defaultColGroupDef',\n 'defaultColDef',\n 'defaultCsvExportParams',\n 'defaultExcelExportParams',\n 'columnTypes',\n 'rowClassRules',\n 'detailCellRendererParams',\n 'loadingCellRendererParams',\n 'loadingOverlayComponentParams',\n 'noRowsOverlayComponentParams',\n 'popupParent',\n 'statusBar',\n 'sideBar',\n 'chartThemeOverrides',\n 'customChartThemes',\n 'chartToolPanelsDef',\n 'sortingOrder',\n 'alignedGrids',\n 'columnDefs',\n 'excelStyles',\n 'pinnedTopRowData',\n 'pinnedBottomRowData',\n 'chartThemes',\n 'rowClass',\n 'rowHeight',\n 'detailRowHeight',\n 'rowBuffer',\n 'headerHeight',\n 'groupHeaderHeight',\n 'floatingFiltersHeight',\n 'pivotHeaderHeight',\n 'pivotGroupHeaderHeight',\n 'groupDefaultExpanded',\n 'viewportRowModelPageSize',\n 'viewportRowModelBufferSize',\n 'autoSizePadding',\n 'maxBlocksInCache',\n 'maxConcurrentDatasourceRequests',\n 'tooltipShowDelay',\n 'tooltipHideDelay',\n 'cacheOverflowSize',\n 'paginationPageSize',\n 'cacheBlockSize',\n 'infiniteInitialRowCount',\n 'serverSideInitialRowCount',\n 'scrollbarWidth',\n 'asyncTransactionWaitMillis',\n 'blockLoadDebounceMillis',\n 'keepDetailRowsCount',\n 'undoRedoCellEditingLimit',\n 'cellFlashDelay',\n 'cellFadeDelay',\n 'tabIndex',\n 'suppressMakeColumnVisibleAfterUnGroup',\n 'suppressRowClickSelection',\n 'suppressCellSelection',\n 'suppressCellFocus',\n 'suppressHorizontalScroll',\n 'alwaysShowHorizontalScroll',\n 'alwaysShowVerticalScroll',\n 'debug',\n 'enableBrowserTooltips',\n 'enableCellExpressions',\n 'groupSelectsChildren',\n 'groupIncludeFooter',\n 'groupIncludeTotalFooter',\n 'groupSuppressBlankHeader',\n 'suppressMenuHide',\n 'suppressRowDeselection',\n 'unSortIcon',\n 'suppressMultiSort',\n 'alwaysMultiSort',\n 'singleClickEdit',\n 'suppressLoadingOverlay',\n 'suppressNoRowsOverlay',\n 'suppressAutoSize',\n 'skipHeaderOnAutoSize',\n 'suppressParentsInRowNodes',\n 'suppressColumnMoveAnimation',\n 'suppressMovableColumns',\n 'suppressFieldDotNotation',\n 'enableRangeSelection',\n 'enableRangeHandle',\n 'enableFillHandle',\n 'suppressClearOnFillReduction',\n 'deltaSort',\n 'suppressTouch',\n 'suppressAsyncEvents',\n 'allowContextMenuWithControlKey',\n 'suppressContextMenu',\n 'rememberGroupStateWhenNewData',\n 'enableCellChangeFlash',\n 'suppressDragLeaveHidesColumns',\n 'suppressRowGroupHidesColumns',\n 'suppressMiddleClickScrolls',\n 'suppressPreventDefaultOnMouseWheel',\n 'suppressCopyRowsToClipboard',\n 'copyHeadersToClipboard',\n 'copyGroupHeadersToClipboard',\n 'pivotMode',\n 'suppressAggFuncInHeader',\n 'suppressColumnVirtualisation',\n 'suppressAggAtRootLevel',\n 'suppressFocusAfterRefresh',\n 'functionsPassive',\n 'functionsReadOnly',\n 'animateRows',\n 'groupSelectsFiltered',\n 'groupRemoveSingleChildren',\n 'groupRemoveLowestSingleChildren',\n 'enableRtl',\n 'suppressClickEdit',\n 'rowDragEntireRow',\n 'rowDragManaged',\n 'suppressRowDrag',\n 'suppressMoveWhenRowDragging',\n 'rowDragMultiRow',\n 'enableGroupEdit',\n 'embedFullWidthRows',\n 'suppressPaginationPanel',\n 'groupHideOpenParents',\n 'groupAllowUnbalanced',\n 'pagination',\n 'paginationAutoPageSize',\n 'suppressScrollOnNewData',\n 'suppressScrollWhenPopupsAreOpen',\n 'purgeClosedRowNodes',\n 'cacheQuickFilter',\n 'excludeHiddenColumnsFromQuickFilter',\n 'ensureDomOrder',\n 'accentedSort',\n 'suppressChangeDetection',\n 'valueCache',\n 'valueCacheNeverExpires',\n 'aggregateOnlyChangedColumns',\n 'suppressAnimationFrame',\n 'suppressExcelExport',\n 'suppressCsvExport',\n 'treeData',\n 'masterDetail',\n 'suppressMultiRangeSelection',\n 'enterMovesDownAfterEdit',\n 'enterMovesDown',\n 'suppressPropertyNamesCheck',\n 'rowMultiSelectWithClick',\n 'suppressRowHoverHighlight',\n 'suppressRowTransform',\n 'suppressClipboardPaste',\n 'suppressLastEmptyLineOnPaste',\n 'enableCharts',\n 'enableChartToolPanelsButton',\n 'suppressChartToolPanelsButton',\n 'suppressMaintainUnsortedOrder',\n 'enableCellTextSelection',\n 'suppressBrowserResizeObserver',\n 'suppressMaxRenderedRowRestriction',\n 'excludeChildrenWhenTreeDataFiltering',\n 'tooltipMouseTrack',\n 'keepDetailRows',\n 'paginateChildRows',\n 'preventDefaultOnContextMenu',\n 'undoRedoCellEditing',\n 'allowDragFromColumnsToolPanel',\n 'immutableData',\n 'pivotSuppressAutoColumn',\n 'suppressExpandablePivotGroups',\n 'debounceVerticalScrollbar',\n 'detailRowAutoHeight',\n 'serverSideFilteringAlwaysResets',\n 'serverSideSortingAlwaysResets',\n 'serverSideSortAllLevels',\n 'serverSideFilterAllLevels',\n 'serverSideSortOnServer',\n 'serverSideFilterOnServer',\n 'suppressAggFilteredOnly',\n 'showOpenedGroup',\n 'suppressClipboardApi',\n 'suppressModelUpdateAfterUpdateTransaction',\n 'stopEditingWhenCellsLoseFocus',\n 'maintainColumnOrder',\n 'groupMaintainOrder',\n 'columnHoverHighlight',\n 'reactUi',\n 'suppressReactUi',\n 'readOnlyEdit',\n 'suppressRowVirtualisation',\n 'enableCellEditingOnBackspace',\n 'resetRowDataOnUpdate',\n 'removePivotHeaderRowWhenSingleValueColumn',\n 'suppressCopySingleCellRanges',\n 'groupRowsSticky',\n 'suppressServerSideInfiniteScroll',\n 'rowGroupPanelSuppressSort',\n 'allowShowChangeAfterFilter',\n 'suppressCutToClipboard',\n 'localeTextFunc',\n 'doesExternalFilterPass',\n 'groupRowAggNodes',\n 'isFullWidthCell',\n 'processSecondaryColDef',\n 'processSecondaryColGroupDef',\n 'processPivotResultColDef',\n 'processPivotResultColGroupDef',\n 'getBusinessKeyForNode',\n 'isRowSelectable',\n 'postSort',\n 'defaultGroupOrderComparator',\n 'rowDragText',\n 'groupRowRenderer',\n 'groupRowRendererFramework',\n 'fullWidthCellRenderer',\n 'fullWidthCellRendererFramework',\n 'loadingCellRenderer',\n 'loadingCellRendererFramework',\n 'loadingOverlayComponent',\n 'loadingOverlayComponentFramework',\n 'noRowsOverlayComponent',\n 'noRowsOverlayComponentFramework',\n 'detailCellRenderer',\n 'detailCellRendererFramework',\n 'getLocaleText',\n 'isExternalFilterPresent',\n 'getRowHeight',\n 'getRowClass',\n 'getRowStyle',\n 'getContextMenuItems',\n 'getMainMenuItems',\n 'processRowPostCreate',\n 'processCellForClipboard',\n 'getGroupRowAgg',\n 'getRowNodeId',\n 'isFullWidthRow',\n 'sendToClipboard',\n 'navigateToNextHeader',\n 'tabToNextHeader',\n 'navigateToNextCell',\n 'tabToNextCell',\n 'processCellFromClipboard',\n 'getDocument',\n 'postProcessPopup',\n 'getChildCount',\n 'getDataPath',\n 'isRowMaster',\n 'postSortRows',\n 'processHeaderForClipboard',\n 'processGroupHeaderForClipboard',\n 'paginationNumberFormatter',\n 'processDataFromClipboard',\n 'getServerSideGroupKey',\n 'isServerSideGroup',\n 'createChartContainer',\n 'getChartToolbarItems',\n 'fillOperation',\n 'isApplyServerSideTransaction',\n 'getServerSideStoreParams',\n 'getServerSideGroupLevelParams',\n 'isServerSideGroupOpenByDefault',\n 'isGroupOpenByDefault',\n 'initialGroupOrderComparator',\n 'loadingCellRendererSelector',\n 'getRowId',\n 'groupAggFiltering',\n];\n/**\n * @remarks Copied from AG Grid `PropertyKeys.NUMBER_PROPERTIES` (v29.2.0) to support\n * attribute-to-gridOptions coercion without relying on `ComponentUtil.copyAttributesToGridOptions`.\n * @internal\n */\nexport const AG_NUMBER_PROPERTIES = [\n 'rowHeight',\n 'detailRowHeight',\n 'rowBuffer',\n 'headerHeight',\n 'groupHeaderHeight',\n 'floatingFiltersHeight',\n 'pivotHeaderHeight',\n 'pivotGroupHeaderHeight',\n 'groupDefaultExpanded',\n 'viewportRowModelPageSize',\n 'viewportRowModelBufferSize',\n 'autoSizePadding',\n 'maxBlocksInCache',\n 'maxConcurrentDatasourceRequests',\n 'tooltipShowDelay',\n 'tooltipHideDelay',\n 'cacheOverflowSize',\n 'paginationPageSize',\n 'cacheBlockSize',\n 'infiniteInitialRowCount',\n 'serverSideInitialRowCount',\n 'scrollbarWidth',\n 'asyncTransactionWaitMillis',\n 'blockLoadDebounceMillis',\n 'keepDetailRowsCount',\n 'undoRedoCellEditingLimit',\n 'cellFlashDelay',\n 'cellFadeDelay',\n 'tabIndex',\n];\n/**\n * @remarks Copied from AG Grid `PropertyKeys.BOOLEAN_PROPERTIES` (v29.2.0) to support\n * attribute-to-gridOptions coercion without relying on `ComponentUtil.copyAttributesToGridOptions`.\n * @internal\n */\nexport const AG_BOOLEAN_PROPERTIES = [\n 'suppressMakeColumnVisibleAfterUnGroup',\n 'suppressRowClickSelection',\n 'suppressCellSelection',\n 'suppressCellFocus',\n 'suppressHorizontalScroll',\n 'alwaysShowHorizontalScroll',\n 'alwaysShowVerticalScroll',\n 'debug',\n 'enableBrowserTooltips',\n 'enableCellExpressions',\n 'groupSelectsChildren',\n 'groupIncludeFooter',\n 'groupIncludeTotalFooter',\n 'groupSuppressBlankHeader',\n 'suppressMenuHide',\n 'suppressRowDeselection',\n 'unSortIcon',\n 'suppressMultiSort',\n 'alwaysMultiSort',\n 'singleClickEdit',\n 'suppressLoadingOverlay',\n 'suppressNoRowsOverlay',\n 'suppressAutoSize',\n 'skipHeaderOnAutoSize',\n 'suppressParentsInRowNodes',\n 'suppressColumnMoveAnimation',\n 'suppressMovableColumns',\n 'suppressFieldDotNotation',\n 'enableRangeSelection',\n 'enableRangeHandle',\n 'enableFillHandle',\n 'suppressClearOnFillReduction',\n 'deltaSort',\n 'suppressTouch',\n 'suppressAsyncEvents',\n 'allowContextMenuWithControlKey',\n 'suppressContextMenu',\n 'rememberGroupStateWhenNewData',\n 'enableCellChangeFlash',\n 'suppressDragLeaveHidesColumns',\n 'suppressRowGroupHidesColumns',\n 'suppressMiddleClickScrolls',\n 'suppressPreventDefaultOnMouseWheel',\n 'suppressCopyRowsToClipboard',\n 'copyHeadersToClipboard',\n 'copyGroupHeadersToClipboard',\n 'pivotMode',\n 'suppressAggFuncInHeader',\n 'suppressColumnVirtualisation',\n 'suppressAggAtRootLevel',\n 'suppressFocusAfterRefresh',\n 'functionsPassive',\n 'functionsReadOnly',\n 'animateRows',\n 'groupSelectsFiltered',\n 'groupRemoveSingleChildren',\n 'groupRemoveLowestSingleChildren',\n 'enableRtl',\n 'suppressClickEdit',\n 'rowDragEntireRow',\n 'rowDragManaged',\n 'suppressRowDrag',\n 'suppressMoveWhenRowDragging',\n 'rowDragMultiRow',\n 'enableGroupEdit',\n 'embedFullWidthRows',\n 'suppressPaginationPanel',\n 'groupHideOpenParents',\n 'groupAllowUnbalanced',\n 'pagination',\n 'paginationAutoPageSize',\n 'suppressScrollOnNewData',\n 'suppressScrollWhenPopupsAreOpen',\n 'purgeClosedRowNodes',\n 'cacheQuickFilter',\n 'excludeHiddenColumnsFromQuickFilter',\n 'ensureDomOrder',\n 'accentedSort',\n 'suppressChangeDetection',\n 'valueCache',\n 'valueCacheNeverExpires',\n 'aggregateOnlyChangedColumns',\n 'suppressAnimationFrame',\n 'suppressExcelExport',\n 'suppressCsvExport',\n 'treeData',\n 'masterDetail',\n 'suppressMultiRangeSelection',\n 'enterMovesDownAfterEdit',\n 'enterMovesDown',\n 'suppressPropertyNamesCheck',\n 'rowMultiSelectWithClick',\n 'suppressRowHoverHighlight',\n 'suppressRowTransform',\n 'suppressClipboardPaste',\n 'suppressLastEmptyLineOnPaste',\n 'enableCharts',\n 'enableChartToolPanelsButton',\n 'suppressChartToolPanelsButton',\n 'suppressMaintainUnsortedOrder',\n 'enableCellTextSelection',\n 'suppressBrowserResizeObserver',\n 'suppressMaxRenderedRowRestriction',\n 'excludeChildrenWhenTreeDataFiltering',\n 'tooltipMouseTrack',\n 'keepDetailRows',\n 'paginateChildRows',\n 'preventDefaultOnContextMenu',\n 'undoRedoCellEditing',\n 'allowDragFromColumnsToolPanel',\n 'immutableData',\n 'pivotSuppressAutoColumn',\n 'suppressExpandablePivotGroups',\n 'debounceVerticalScrollbar',\n 'detailRowAutoHeight',\n 'serverSideFilteringAlwaysResets',\n 'serverSideSortingAlwaysResets',\n 'serverSideSortAllLevels',\n 'serverSideFilterAllLevels',\n 'serverSideSortOnServer',\n 'serverSideFilterOnServer',\n 'suppressAggFilteredOnly',\n 'showOpenedGroup',\n 'suppressClipboardApi',\n 'suppressModelUpdateAfterUpdateTransaction',\n 'stopEditingWhenCellsLoseFocus',\n 'maintainColumnOrder',\n 'groupMaintainOrder',\n 'columnHoverHighlight',\n 'reactUi',\n 'suppressReactUi',\n 'readOnlyEdit',\n 'suppressRowVirtualisation',\n 'enableCellEditingOnBackspace',\n 'resetRowDataOnUpdate',\n 'removePivotHeaderRowWhenSingleValueColumn',\n 'suppressCopySingleCellRanges',\n 'groupRowsSticky',\n 'suppressServerSideInfiniteScroll',\n 'rowGroupPanelSuppressSort',\n 'allowShowChangeAfterFilter',\n 'suppressCutToClipboard',\n];\nconst AG_NUMBER_PROPERTIES_SET = new Set(AG_NUMBER_PROPERTIES);\nconst AG_BOOLEAN_PROPERTIES_SET = new Set(AG_BOOLEAN_PROPERTIES);\nconst AG_PROPERTIES_SET = new Set(AG_PROPERTIES);\nfunction toBoolean(value) {\n if (typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'string') {\n // for boolean, compare to empty String to allow attributes appearing with\n // no value to be treated as 'true'\n return value.toUpperCase() === 'TRUE' || value === '';\n }\n return false;\n}\nfunction toNumber(value) {\n if (typeof value === 'number') {\n return value;\n }\n if (typeof value === 'string') {\n return Number(value);\n }\n}\n/**\n * @remarks Copied from AG Grid `ComponentUtil.copyAttributesToGridOptions` (v29.2.0).\n * This is used to coerce string/attribute values into the correct types for gridOptions.\n * @internal\n */\nexport function copyAttributesToGridOptions(gridOptions, component) {\n // create empty grid options if none were passed\n if (typeof gridOptions !== 'object') {\n gridOptions = {};\n }\n // to allow array style lookup in TypeScript, take type away from 'gridOptions'\n const pGridOptions = gridOptions;\n const keys = Object.keys(component);\n // Loop through component props, if they are not undefined and a valid gridOption copy to gridOptions\n keys.forEach((key) => {\n if (!AG_PROPERTIES_SET.has(key)) {\n return;\n }\n const value = component[key];\n if (typeof value === 'undefined') {\n return;\n }\n // Match ComponentUtil.getValue behaviour (limited to our local boolean/number sets + special-case)\n let coercedValue = value;\n if (AG_NUMBER_PROPERTIES_SET.has(key)) {\n coercedValue = toNumber(value);\n }\n else if (AG_BOOLEAN_PROPERTIES_SET.has(key)) {\n coercedValue = toBoolean(value);\n }\n else if (key === 'groupAggFiltering' && typeof value !== 'function') {\n coercedValue = toBoolean(value);\n }\n if (coercedValue !== undefined) {\n pGridOptions[key] = coercedValue;\n }\n });\n return gridOptions;\n}\n","import { __awaiter, __decorate, __rest } from \"tslib\";\nimport { ClientSideRowModelModule } from '@ag-grid-community/client-side-row-model';\nimport { ComponentUtil, Events, Grid, ModuleRegistry } from '@ag-grid-community/core';\nimport { CsvExportModule } from '@ag-grid-community/csv-export';\nimport { DatasourceDefaults } from '@genesislcap/foundation-comms';\nimport { insertDocumentCSSRule, LifecycleMixin, avoidTreeShaking, respondToVisibility, } from '@genesislcap/foundation-utils';\nimport { attr, DOM, observable } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { classNames } from '@microsoft/fast-web-utilities';\nimport * as changeCase from 'change-case';\nimport debounce from 'lodash.debounce';\nimport { GridProCell } from './cell';\nimport { DateEditor, MultiselectEditor, NumberEditor, SelectEditor, StringEditor, } from './cell-editors';\nimport { ActionRenderer, ActionsMenuRenderer, BooleanRenderer, EditableRenderer, IconRenderer, SelectRenderer, StatusPillRenderer, } from './cell-renderers';\nimport { GridProColumn } from './column';\nimport { GridProClientSideDatasource, GridProServerSideDatasource } from './datasource';\nimport { baseDatasourceEventNames } from './datasource/base.types';\nimport { agThemeFontFaceMap, defaultAgGridFontFace } from './external';\nimport { GridProGenesisDatasource, gridProGenesisDatasourceEventNames, } from './grid-pro-genesis-datasource';\nimport { datasourceEventNames, } from './grid-pro-genesis-datasource/datasource-events.types';\nimport { AG_PROPERTIES, copyAttributesToGridOptions, DEBOUNCED_RESIZE_TIME, gridProErrorNames, gridProEventNames, } from './grid-pro.definitions';\nimport { foundationGridProStyles as styles } from './grid-pro.styles';\nimport { gridProTemplate as template } from './grid-pro.template';\nimport { AgGridTheme, agThemeFontsId, agThemeTokenMapClassname, DEFAULT_STATUS_BAR_CONFIG, EDITED_COLUMN_FIELD, ERROR_COLUMN_FIELD, GRID_READY_EVENT, GridOptionsConfig, GridProRendererTypes, GridProStatusBarTypes, } from './grid-pro.types';\nimport { StatePersistence } from './state-persistence';\nimport { LabelValueStatusBarComponent, LoadMoreStatusBarComponent, PaginationStatusBarComponent, ReloadStatusBarComponent, RowCountStatusBarComponent, } from './status-bar-components';\nimport { ErrorTooltip } from './tooltips';\nimport { convertColDefsToColumnStates, convertToKebabCase, logger, mergeAndDedupColDefWithColumnState, } from './utils';\navoidTreeShaking(GridProGenesisDatasource, GridProClientSideDatasource, GridProServerSideDatasource, GridProCell, GridProColumn);\nModuleRegistry.registerModules([CsvExportModule, ClientSideRowModelModule]);\nconst DEBOUNCE_TIME = 400;\n// Re-export AG_PROPERTIES from definitions for backwards compatibility\nexport { AG_PROPERTIES };\n/**\n * The Grid Pro element.\n * @remarks Grid Pro is a Web Component wrapper around the AG Grid Community library.\n * @public\n * @tagname %%prefix%%-grid-pro\n */\nexport class GridPro extends LifecycleMixin(FoundationElement) {\n rowDataChanged(_, rowData) {\n if (this.initialised) {\n this.gridApi.setRowData(rowData);\n }\n }\n themeChanged(oldValue, newValue) {\n if (!newValue) {\n this.classNames = '';\n this.destroyFontFace();\n return;\n }\n this.classNames = classNames(agThemeTokenMapClassname(newValue), newValue);\n this.insertFontFace(newValue);\n }\n getfilterModel() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.persistFilterModelKey) {\n return this._filterConfig;\n }\n const filterModel = yield this.statePersistence.getFilterModel(this.persistFilterModelKey);\n return filterModel;\n });\n }\n setFilterModel(value) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.persistFilterModelKey) {\n this._filterConfig = value;\n return;\n }\n yield this.statePersistence.saveFilterModel(this.persistFilterModelKey, value);\n });\n }\n constructor() {\n super();\n // Cache for total column width to avoid repeated calculations\n this.cachedTotalColumnWidth = null;\n this.columnCount = 0;\n this.gridErrorItems = [];\n // Genesis-specific attrs\n this.autoCellRendererByType = false;\n this.onlyTemplateColDefs = false;\n // AG-specific attrs\n /**\n * Boolean attribute to control whether the grid autosizes the columns upon interaction.\n * This will disable the column widths from being manually set, and doesn't save the widths\n * in local storage if you are using `persist-column-state-key`.\n */\n this.gridAutosizingEnabled = false;\n /**\n * Boolean attribute to control whether the grid automatically sizes columns to fit their content.\n * This will call AG Grid's autoSizeColumns() method to automatically adjust column widths based on content.\n * @public\n */\n this.sizeColumnsToContent = false;\n /**\n * Boolean attribute to adjust the size of columns to fit the available horizontal space.\n * This will call AG Grid's sizeColumnsToFit() method.\n * @public\n */\n this.sizeColumnsToFit = false;\n /**\n * The index to add new rows to when using `applyTransaction` or `applyTransactionAsync`\n */\n this.addIndex = 0;\n /**\n * Whether to use the `applyTransactionAsync` function for *add* transactions\n * @remarks Defaults to false\n */\n this.asyncAdd = false;\n /**\n * Whether to use the `applyTransactionAsync` function for *remove* transactions\n * @remarks Defaults to false\n */\n this.asyncRemove = false;\n /**\n * Whether to use the `applyTransactionAsync` function for *update* transactions\n * @remarks Defaults to true\n */\n this.asyncUpdate = true;\n /**\n * If false, will disable cell flashing for all cells by default, unless otherwise defined in custom colDef\n * @remarks Defaults to true\n */\n this.enableCellFlashing = false;\n /**\n * @deprecated - use `enableRowFlashing` instead.\n */\n this.enabledRowFlashing = false;\n /**\n * If true, will enable row flashing for all rows for `add` async transactions\n */\n this.enableRowFlashing = false;\n /**\n * The default column config to reset to when deleteColumnState is called.\n */\n this.defaultColumnConfig = [];\n this.gridFontFace = defaultAgGridFontFace;\n this.columnComponentName = 'grid-pro-column';\n this.theme = AgGridTheme.alpine;\n this.themeMode = 'dark';\n /**\n * Enable pagination for the grid.\n * @remarks\n * When enabled, the grid will automatically configure pagination settings.\n * Note that AG Grid's full pagination functionality requires the Enterprise module.\n * While basic pagination will work in Community edition, advanced features like\n * custom pagination components require Enterprise.\n * @see https://www.ag-grid.com/javascript-data-grid/row-pagination/\n * @see https://www.ag-grid.com/javascript-data-grid/server-side-model-pagination/\n */\n this.pagination = false;\n /**\n * Configuration for the grid status bar components.\n * @remarks\n * This requires AG Grid Enterprise module to be enabled.\n * The status bar will only be displayed if the Enterprise module is available.\n * @see https://www.ag-grid.com/javascript-data-grid/component-status-bar/\n */\n this.statusBarConfig = DEFAULT_STATUS_BAR_CONFIG;\n /**\n * Enables or disables the grid status bar.\n * @remarks\n * Default is false.\n * When disabled, no status bar will be displayed regardless of statusBarConfig.\n * This requires AG Grid Enterprise module to be available for the status bar to be displayed when enabled.\n */\n this.withStatusBar = false;\n this.rehydrationAttempted = false;\n this.eventHandlers = [];\n this.gridEventsQueue = [];\n this.registeredGridEvents = new Set();\n this._filterConfig = undefined;\n this.agAttributes = {};\n this.agPropertiesMap = AG_PROPERTIES.reduce((map, property) => {\n map[property.toLowerCase()] = property;\n map[convertToKebabCase(property)] = property;\n return map;\n }, {});\n const hideDataSourceError = this.hideDatasourceError.bind(this);\n // Bind all event handlers once to ensure proper add/remove of listeners\n this.eventHandlers.push(\n // Root event listeners\n [gridProGenesisDatasourceEventNames.dataInit, hideDataSourceError], [gridProEventNames.datasourceErrorClose, hideDataSourceError], [baseDatasourceEventNames.error, this.handleBaseDatasourceError.bind(this)], [baseDatasourceEventNames.connected, hideDataSourceError], \n // Datasource event listeners\n [datasourceEventNames.initialize, this.handleInitialize.bind(this)], [datasourceEventNames.dataLoaded, this.handleDataLoaded.bind(this)], [datasourceEventNames.dataChanged, this.handleDataChanged.bind(this)], [datasourceEventNames.schemaUpdated, this.handleSchemaUpdated.bind(this)], [datasourceEventNames.dataCleared, this.handleDataCleared.bind(this)], [datasourceEventNames.loadingStarted, this.handleLoadingStarted.bind(this)], [datasourceEventNames.loadingFinished, this.handleLoadingFinished.bind(this)], [datasourceEventNames.noDataAvailable, this.handleNoDataAvailable.bind(this)], [datasourceEventNames.filtersRestored, this.handleFiltersRestored.bind(this)], [datasourceEventNames.moreDataAvailable, this.handleMoreDataAvailable.bind(this)], [datasourceEventNames.error, this.handleDatasourceError.bind(this)], [datasourceEventNames.destroy, this.handleDatasourceDestroy.bind(this)], \n // Server-side specific events\n [datasourceEventNames.cacheFilterConfig, this.cacheFilterConfig.bind(this)], [datasourceEventNames.refreshServerSide, this.handleRefreshServerSide.bind(this)], [datasourceEventNames.setServerSideDatasource, this.handleSetServerSideDatasource.bind(this)], [datasourceEventNames.addGridCssClass, this.handleAddGridCssClass.bind(this)], [datasourceEventNames.removeGridCssClass, this.handleRemoveGridCssClass.bind(this)], [\n datasourceEventNames.applyServerSideTransaction,\n this.handleApplyServerSideTransaction.bind(this),\n ]);\n }\n /**\n * Adds an event listener to the grid element.\n * @param eventType - The event type to listen for. Recommened to use the `Events` from AG Grid.\n * @param listener - The event listener to call when the event is fired.\n * @param options - An options object that specifies characteristics about the event listener.\n * @privateRemarks\n * This will change once we do the AG Upgrade and `eventType` will be correctly typed.\n */\n addEventListener(eventType, listener, options) {\n super.addEventListener(eventType, listener, options);\n if (ComponentUtil.PUBLIC_EVENTS.includes(eventType)) {\n if (this.gridApi) {\n this.addGridEventListener(eventType);\n }\n else {\n if (!this.gridEventsQueue.includes(eventType)) {\n this.gridEventsQueue.push(eventType);\n }\n }\n }\n }\n addGridEventListener(eventType) {\n if (this.registeredGridEvents.has(eventType)) {\n return;\n }\n this.registeredGridEvents.add(eventType);\n this.gridApi.addEventListener(eventType, (e) => {\n this.$emit(eventType, e);\n });\n }\n handleError(type, event) {\n this.gridErrorItems = [...this.gridErrorItems, { detail: event.detail, type }];\n }\n handleBaseDatasourceError(event) {\n // Map base datasource errors to grid-pro error format\n const gridProError = {\n detail: { message: event.detail.message },\n type: gridProErrorNames.datasource,\n };\n this.gridErrorItems = [\n ...this.gridErrorItems,\n { detail: gridProError.detail, type: gridProError.type },\n ];\n }\n hideDatasourceError() {\n this.gridErrorItems = this.gridErrorItems.filter((item) => item.type !== gridProErrorNames.datasource);\n this.removeAttribute('ds-disconnected');\n }\n connectedCallback() {\n super.connectedCallback();\n if (this.gridAutosizingEnabled) {\n this.visibilityObserverCleanup = respondToVisibility(this, (gridVisible) => {\n if (gridVisible) {\n this.debouncedColumnAutosize.bind(this)();\n }\n });\n }\n this.rehydrationAttempted = false;\n this.eventHandlers.forEach(([eventName, handler]) => {\n this.addEventListener(eventName, handler);\n });\n if (!this.shouldRunConnect)\n return;\n AG_PROPERTIES.forEach((key) => {\n Object.defineProperty(this, key, {\n set: (v) => {\n this.agAttributeChangedCallback(convertToKebabCase(key), undefined, v);\n },\n enumerable: true,\n configurable: true,\n });\n });\n this.paginationPageSize = this.isServerSide\n ? this.gridProDatasource.maxRows\n : DatasourceDefaults.DEFAULT_PAGINATION_PAGE_SIZE;\n }\n disconnectedCallback() {\n if (this.visibilityObserverCleanup) {\n this.visibilityObserverCleanup();\n this.visibilityObserverCleanup = undefined;\n }\n super.disconnectedCallback();\n this.rehydrationAttempted = false;\n const shouldRunDisconnect = this.shouldRunDisconnect;\n this.eventHandlers.forEach(([eventName, handler]) => {\n this.removeEventListener(eventName, handler);\n });\n DOM.queueUpdate(() => {\n if (!shouldRunDisconnect)\n return;\n this.initialised = false;\n this.gridApi.setRowData([]);\n this.gridApi.refreshCells({ force: true });\n this.gridApi.destroy();\n this.invalidateColumnWidthCache();\n // Clear registered events when grid is destroyed\n this.registeredGridEvents.clear();\n });\n }\n /**\n * Handles datasource initialization\n * @internal\n */\n handleInitialize(event) {\n const { options, keepColDefsOnClearRowData } = event.detail;\n let columnDefinitions;\n if (keepColDefsOnClearRowData) {\n columnDefinitions = this.gridApi.getColumnDefs();\n this.columnState = this.columnApi.getColumnState();\n }\n const gridOptions = Object.assign(Object.assign(Object.assign({}, this.agGridOptions), (columnDefinitions && { columnDefs: columnDefinitions })), options);\n this.gridOptions = Object.assign({}, gridOptions);\n this.initGrid();\n }\n /**\n * Handles data loading from datasource\n * @internal\n */\n handleDataLoaded(event) {\n const { data } = event.detail;\n if (this.gridApi) {\n this.gridApi.setRowData(data);\n }\n }\n /**\n * Handles data changes from datasource\n * @internal\n */\n handleDataChanged(event) {\n var _a, _b, _c;\n const { changes } = event.detail;\n if (!this.gridApi)\n return;\n if (((_a = changes.add) === null || _a === void 0 ? void 0 : _a.length) > 0) {\n if (this.asyncAdd) {\n this.gridApi.applyTransactionAsync({ add: changes.add, addIndex: this.addIndex }, (result) => {\n this.flashAddedCells(result === null || result === void 0 ? void 0 : result.add);\n });\n }\n else {\n const result = this.gridApi.applyTransaction({ add: changes.add, addIndex: this.addIndex });\n this.flashAddedCells(result === null || result === void 0 ? void 0 : result.add);\n }\n }\n if (((_b = changes.update) === null || _b === void 0 ? void 0 : _b.length) > 0) {\n if (this.asyncUpdate) {\n this.gridApi.applyTransactionAsync({ update: changes.update });\n }\n else {\n this.gridApi.applyTransaction({ update: changes.update });\n }\n }\n if (((_c = changes.remove) === null || _c === void 0 ? void 0 : _c.length) > 0) {\n if (this.asyncRemove) {\n this.gridApi.applyTransactionAsync({ remove: changes.remove });\n }\n else {\n this.gridApi.applyTransaction({ remove: changes.remove });\n }\n }\n }\n flashAddedCells(rowNodes) {\n if (this.enableRowFlashing && (rowNodes === null || rowNodes === void 0 ? void 0 : rowNodes.length)) {\n this.gridApi.flashCells({ rowNodes });\n }\n }\n /**\n * Handles schema updates from datasource\n * @internal\n */\n handleSchemaUpdated(event) {\n return __awaiter(this, void 0, void 0, function* () {\n const { schema, metadata } = event.detail;\n const preSetColumnDefs = this.gridApi.getColumnDefs();\n if (!preSetColumnDefs || preSetColumnDefs.length === 0) {\n const colDefs = metadata\n .map((field) => {\n var _a;\n return (Object.assign(Object.assign({}, schema.find((colDef) => colDef.field === field.name)), (_a = this.gridApi) === null || _a === void 0 ? void 0 : _a.getColumnDef(field.name)));\n })\n .map((colDef) => (Object.assign(Object.assign({}, colDef), { cellRenderer: this.autoCellRendererByType ? colDef.cellRenderer : undefined, cellEditor: this.autoCellRendererByType ? colDef.cellEditor : undefined })));\n const colDefsMergedWithTemplateDefs = yield this.mergeAllColumnDefsAndStates(colDefs, true);\n if (colDefsMergedWithTemplateDefs) {\n // AG's internals will check if group/pivot are NOT NULL to trigger module registration warning for `row-grouping`.\n // When using gridApi to get the currentState to save, all boolean will return false when they were not set at all.\n // ColDef type is `boolean` while ColumnState is `boolean | null`.\n colDefsMergedWithTemplateDefs.forEach((col) => {\n if (!col.rowGroup) {\n col.rowGroup = null;\n }\n if (!col.pivot) {\n col.pivot = null;\n }\n });\n this.gridApi.setColumnDefs(colDefsMergedWithTemplateDefs);\n }\n }\n });\n }\n /**\n * Handles data clearing from datasource\n * @internal\n */\n handleDataCleared(event) {\n var _a, _b;\n const { includeSchema } = event.detail;\n if (!this.gridApi)\n return;\n // For server-side, these methods are handled via server-side transactions\n // Only flush async transactions for client-side row model\n if (!this.isServerSide) {\n // Flush any pending async transactions\n if (this.asyncAdd || this.asyncUpdate || this.asyncRemove) {\n (_b = (_a = this.gridApi).flushAsyncTransactions) === null || _b === void 0 ? void 0 : _b.call(_a);\n }\n }\n if (includeSchema) {\n this.gridApi.setColumnDefs([]);\n }\n // setRowData only works for client-side row model\n // For server-side, data clearing is handled via server-side transactions\n if (!this.isServerSide) {\n this.gridApi.setRowData([]);\n this.gridApi.refreshCells({ force: true });\n }\n }\n /**\n * Handles loading started from datasource\n * @internal\n */\n handleLoadingStarted() {\n if (this.gridApi) {\n this.gridApi.showLoadingOverlay();\n }\n }\n /**\n * Handles loading finished from datasource\n * @internal\n */\n handleLoadingFinished() {\n if (this.gridApi) {\n this.gridApi.hideOverlay();\n }\n }\n /**\n * Handles no data available from datasource\n * @internal\n */\n handleNoDataAvailable() {\n if (this.gridApi) {\n this.gridApi.showNoRowsOverlay();\n }\n }\n /**\n * Handles filter restoration from datasource\n * @internal\n */\n handleFiltersRestored() {\n this.restoreCachedFilterConfig();\n }\n /**\n * Handles more data availability from datasource\n * @internal\n */\n handleMoreDataAvailable(event) {\n var _a, _b, _c, _d;\n const { hasMoreData, sourceRef } = event.detail;\n if (!this.gridApi)\n return;\n const statusBar = (_b = (_a = this.gridApi).getStatusPanel) === null || _b === void 0 ? void 0 : _b.call(_a, GridProStatusBarTypes.loadMore);\n if (statusBar) {\n (_d = (_c = statusBar).updateParams) === null || _d === void 0 ? void 0 : _d.call(_c, {\n moreRows: hasMoreData,\n sourceRef,\n });\n }\n }\n /**\n * Handles datasource errors\n * @internal\n */\n handleDatasourceError(event) {\n // Set visual indicator on grid\n this.setAttribute('ds-disconnected', 'ds-disconnected');\n }\n /**\n * Handles datasource destroy\n * @internal\n */\n handleDatasourceDestroy() {\n this.clearLocalGridOptions();\n }\n /**\n * Handles refreshing server-side data\n * @internal\n */\n handleRefreshServerSide(event) {\n const { purge } = event.detail;\n if (this.gridApi) {\n this.gridApi.refreshServerSide({ purge });\n }\n }\n /**\n * Handles setting server-side datasource\n * @internal\n */\n handleSetServerSideDatasource(event) {\n const { datasource } = event.detail;\n if (this.gridApi) {\n this.gridApi.setServerSideDatasource(datasource);\n }\n }\n /**\n * Handles adding CSS class to grid element\n * @internal\n */\n handleAddGridCssClass(event) {\n var _a;\n const { className } = event.detail;\n // Add CSS class to grid element\n const gridElement = ((_a = this.gridSlot) === null || _a === void 0 ? void 0 : _a.parentElement) || this;\n if (gridElement) {\n gridElement.classList.add(className);\n }\n }\n /**\n * Handles removing CSS class from grid element\n * @internal\n */\n handleRemoveGridCssClass(event) {\n var _a;\n const { className } = event.detail;\n // Remove CSS class from grid element\n const gridElement = ((_a = this.gridSlot) === null || _a === void 0 ? void 0 : _a.parentElement) || this;\n if (gridElement) {\n gridElement.classList.remove(className);\n }\n }\n /**\n * Handles applying server-side transactions\n * @internal\n */\n handleApplyServerSideTransaction(event) {\n const { transaction, async, callback } = event.detail;\n if (!this.gridApi)\n return;\n if (async) {\n this.gridApi.applyServerSideTransactionAsync(transaction, callback);\n }\n else {\n const result = this.gridApi.applyServerSideTransaction(transaction);\n if (callback) {\n callback(result);\n }\n }\n }\n combineAllGridComponents(gridOptionsComponents) {\n const defaultFoundationAgComponents = {\n [GridProRendererTypes.action]: ActionRenderer,\n [GridProRendererTypes.actionsMenu]: ActionsMenuRenderer,\n [GridProRendererTypes.boolean]: BooleanRenderer,\n [GridProRendererTypes.editable]: EditableRenderer,\n [GridProRendererTypes.icon]: IconRenderer,\n [GridProRendererTypes.statusPill]: StatusPillRenderer,\n [GridProRendererTypes.select]: SelectRenderer,\n [GridProRendererTypes.selectEditor]: SelectEditor,\n [GridProRendererTypes.numberEditor]: NumberEditor,\n [GridProRendererTypes.multiselectEditor]: MultiselectEditor,\n [GridProRendererTypes.dateEditor]: DateEditor,\n [GridProRendererTypes.stringEditor]: StringEditor,\n [GridProStatusBarTypes.labelValue]: LabelValueStatusBarComponent,\n [GridProStatusBarTypes.loadMore]: LoadMoreStatusBarComponent,\n [GridProStatusBarTypes.pagination]: PaginationStatusBarComponent,\n [GridProStatusBarTypes.reload]: ReloadStatusBarComponent,\n [GridProStatusBarTypes.rowCount]: RowCountStatusBarComponent,\n };\n return Object.assign(Object.assign(Object.assign({}, defaultFoundationAgComponents), gridOptionsComponents), this.gridComponents);\n }\n statePersistanceEnabled() {\n if (!this.persistColumnStateKey || this.persistColumnStateKey.length === 0) {\n return false;\n }\n return true;\n }\n /**\n * Gets the currently selected rows from the grid\n * @public\n * @returns Array of selected row data\n */\n getSelectedRows() {\n var _a, _b, _c, _d;\n try {\n if (!this.initialised || !this.gridApi) {\n return [];\n }\n const rowSelectionMode = (_a = this.gridOptions) === null || _a === void 0 ? void 0 : _a.rowSelection;\n // If row selection is enabled (single or multiple), use row selection only\n if (rowSelectionMode === 'single' || rowSelectionMode === 'multiple') {\n if (this.gridApi.getSelectedRows && this.gridApi.getSelectedRows().length > 0) {\n return this.gridApi.getSelectedRows();\n }\n return [];\n }\n // If row selection is disabled (undefined/none), use cell range selection\n if (((_b = this.gridApi) === null || _b === void 0 ? void 0 : _b.getCellRanges) && this.gridApi.getCellRanges().length > 0) {\n return this.getCellRangeRowData();\n }\n // Fallback: if no cell ranges but range selection is disabled,\n // check for focused cell (single cell selection)\n if (!((_c = this.gridOptions) === null || _c === void 0 ? void 0 : _c.enableRangeSelection)) {\n const focusedCell = (_d = this.gridApi) === null || _d === void 0 ? void 0 : _d.getFocusedCell();\n if (focusedCell) {\n const rowNode = this.gridApi.getDisplayedRowAtIndex(focusedCell.rowIndex);\n if (rowNode === null || rowNode === void 0 ? void 0 : rowNode.data) {\n return [rowNode.data];\n }\n }\n }\n return [];\n }\n catch (error) {\n logger.error('Grid Pro: Error getting selected rows:', error);\n return [];\n }\n }\n /**\n * Gets the row data from selected cell ranges\n * @internal\n * @returns Array containing the row data from selected cell ranges, or empty array if none\n */\n getCellRangeRowData() {\n var _a;\n if (!((_a = this.gridApi) === null || _a === void 0 ? void 0 : _a.getCellRanges)) {\n return [];\n }\n const cellRanges = this.gridApi.getCellRanges();\n if (cellRanges.length === 0) {\n return [];\n }\n const rowData = [];\n // Collect unique row data from all selected cell ranges\n cellRanges.forEach((range) => {\n const startIndex = range.startRow.rowIndex;\n const endIndex = range.endRow.rowIndex;\n // Iterate over indices directly for better performance\n for (let rowIndex = startIndex; rowIndex <= endIndex; rowIndex += 1) {\n const rowNode = this.gridApi.getDisplayedRowAtIndex(rowIndex);\n if ((rowNode === null || rowNode === void 0 ? void 0 : rowNode.data) && !rowData.some((existing) => existing === rowNode.data)) {\n rowData.push(rowNode.data);\n }\n }\n });\n return rowData;\n }\n /**\n * Checks if any rows are currently selected\n * @public\n * @returns True if rows are selected, false otherwise\n */\n hasSelectedRows() {\n const selectedRows = this.getSelectedRows();\n return selectedRows.length > 0;\n }\n /**\n * Updates the label-value status bar component with new label and value\n * @public\n * @param params - Object containing label, value, and optionally hide flag\n * @example\n * ```ts\n * gridPro.updateLabelValueStatusBar({\n * label: 'Total Records',\n * value: '1,234',\n * hide: false\n * });\n * ```\n */\n updateLabelValueStatusBar(params) {\n var _a, _b;\n if (!this.gridApi) {\n logger.warn('Grid Pro: Cannot update label-value status bar - grid API not available');\n return;\n }\n const statusBar = (_b = (_a = this.gridApi).getStatusPanel) === null || _b === void 0 ? void 0 : _b.call(_a, GridProStatusBarTypes.labelValue);\n if (statusBar && typeof statusBar.updateParams === 'function') {\n statusBar.updateParams(params);\n }\n else {\n logger.warn('Grid Pro: Label-value status bar component not found or updateParams method not available');\n }\n }\n /**\n * Because we try and resize the grid to fit using callbacks on events, this will cause\n * a stack overflow of calls to resize, so we need to debounce it.\n * @internal\n */\n debouncedColumnAutosize() {\n if (!this.gridAutosizingEnabled)\n return;\n if (this.debounced) {\n clearTimeout(this.debounced);\n this.debounced = null;\n }\n this.debounced = setTimeout(() => {\n var _a;\n (_a = this.gridApi) === null || _a === void 0 ? void 0 : _a.sizeColumnsToFit();\n }, DEBOUNCED_RESIZE_TIME);\n }\n /**\n * If {@link @genesislcap/grid-pro#GridPro.gridAutosizingEnabled} is true, will remove the widths from the column states.\n * @internal\n */\n removeConfigWidthsToAutosize(colState) {\n return colState.map((col) => (Object.assign(Object.assign({}, col), { width: null })));\n }\n saveColumnState() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.rehydrationAttempted && this.statePersistanceEnabled()) {\n let colState = this.columnApi.getColumnState();\n colState = this.gridAutosizingEnabled\n ? this.removeConfigWidthsToAutosize(colState)\n : colState;\n const allHeadersHidden = colState.filter((c) => {\n if (c.hide)\n return false;\n const col = this.columnApi.getColumn(c.colId);\n return Boolean(col.getColDef().headerName);\n }).length === 0;\n if (colState.length === 0 ||\n JSON.stringify(colState) === JSON.stringify(this.columnState) ||\n allHeadersHidden)\n return;\n yield this.statePersistence.saveColumnState(this.persistColumnStateKey, colState);\n this.columnState = colState;\n }\n });\n }\n /**\n * Gets the saved grid ColumnState[] from storage\n * @remarks This is used to restore the grid state when the grid is rehydrated\n * @privateRemarks Not using `columnApi.get|setColumnState()` for these flows as it doesn't work setting new columnDefs vs different ordering.\n * @public\n */\n getSavedColumnState() {\n return __awaiter(this, void 0, void 0, function* () {\n this.columnState = [];\n if (this.statePersistanceEnabled()) {\n this.columnState = yield this.statePersistence.getColumnState(this.persistColumnStateKey);\n }\n return this.columnState;\n });\n }\n /**\n * Deletes the saved column state for the current grid\n * @param resetToDefault - Whether to reset columns to their default configuration. Defaults to true.\n * @remarks This removes the persisted column state from storage, allowing the grid to use default column configuration\n * @public\n */\n deleteColumnState() {\n return __awaiter(this, arguments, void 0, function* (resetToDefault = true) {\n var _a;\n if (this.statePersistanceEnabled()) {\n yield this.statePersistence.deleteColumnState(this.persistColumnStateKey);\n this.columnState = [];\n }\n if (resetToDefault && this.columnApi) {\n if (((_a = this.defaultColumnConfig) === null || _a === void 0 ? void 0 : _a.length) > 0) {\n // Convert ColDef[] to ColumnState[] using utility function\n const columnState = convertColDefsToColumnStates(this.defaultColumnConfig);\n this.columnApi.applyColumnState({\n state: columnState,\n applyOrder: true,\n });\n }\n else {\n this.columnApi.resetColumnState();\n }\n this.handleColumnSizing();\n }\n });\n }\n restoreColumnState() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n this.rehydrationAttempted = true;\n const colState = yield this.getSavedColumnState();\n if (colState && colState.length > 0) {\n (_a = this.columnApi) === null || _a === void 0 ? void 0 : _a.applyColumnState({\n state: colState,\n applyOrder: true,\n });\n }\n });\n }\n cacheFilterConfig() {\n var _a;\n this.setFilterModel(((_a = this.gridApi) === null || _a === void 0 ? void 0 : _a.getFilterModel()) || undefined);\n }\n restoreCachedFilterConfig() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b;\n const filterModel = yield this.getfilterModel();\n if (typeof filterModel !== 'undefined') {\n (_a = this.gridApi) === null || _a === void 0 ? void 0 : _a.setFilterModel(filterModel);\n (_b = this.gridApi) === null || _b === void 0 ? void 0 : _b.onFilterChanged();\n }\n });\n }\n /**\n * @public\n */\n get gridOptions() {\n return this.agGridOptions;\n }\n /**\n * @public\n */\n get isServerSide() {\n return this.gridProDatasource instanceof GridProServerSideDatasource;\n }\n /**\n * @public\n */\n get gridParams() {\n return {\n globalEventListener: this.globalEventListener.bind(this),\n };\n }\n /**\n * Get the datasource element.\n * @remarks This will return the first datasource element found in the light DOM, wrapping all concrete datasource implementations.\n * @public\n */\n get gridProDatasource() {\n return (this.querySelector('grid-pro-genesis-datasource') ||\n this.querySelector('grid-pro-client-side-datasource') ||\n this.querySelector('grid-pro-server-side-datasource'));\n }\n set gridOptions(options) {\n const debounceSaveColumnState = debounce(this.saveColumnState.bind(this), DEBOUNCE_TIME);\n const debouceSaveFiltermodel = debounce(this.cacheFilterConfig.bind(this), DEBOUNCE_TIME);\n const gridOnChangeCallback = () => {\n debounceSaveColumnState();\n this.debouncedColumnAutosize.bind(this)();\n this.invalidateColumnWidthCache();\n };\n Array.from(this.attributes).forEach((attribute) => {\n const attrName = this.agPropertiesMap[attribute.name];\n if (!attrName)\n return;\n this.agAttributes[attrName] = attribute.value;\n });\n const { columnDefs, components, defaultColDef, getRowId, onGridReady, onFilterChanged, onFirstDataRendered } = options, rest = __rest(options, [\"columnDefs\", \"components\", \"defaultColDef\", \"getRowId\", \"onGridReady\", \"onFilterChanged\", \"onFirstDataRendered\"]);\n const derivedOptions = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, this.gridOptionsConfig), { defaultColDef: Object.assign({ enableCellChangeFlash: this.enableCellFlashing, filter: true, resizable: true, sortable: true }, defaultColDef), components: this.combineAllGridComponents(components), suppressDragLeaveHidesColumns: true }), this.eventsAndCallbacks), { onGridReady: (event) => {\n var _a, _b;\n this.gridApi = event.api;\n this.columnApi = event.columnApi;\n if (this.gridEventsQueue.length) {\n this.gridEventsQueue.forEach((type) => {\n this.addGridEventListener(type);\n });\n }\n if (this.rowData) {\n this.gridApi.setRowData(this.rowData);\n }\n if (onGridReady) {\n onGridReady(event);\n }\n if (this.columnState && ((_a = this.columnState) === null || _a === void 0 ? void 0 : _a.length) > 0) {\n this.columnApi.applyColumnState({\n state: this.columnState,\n applyOrder: true,\n });\n }\n this.$emit(Events.EVENT_GRID_READY, {\n event,\n gridId: this.id,\n });\n // TODO: Remove this event when we do the AG Upgrade\n this.$emit(GRID_READY_EVENT, {\n event,\n gridId: this.id,\n });\n // Emit datasource ready event, signals that the datasource is ready to be used\n // TODO: prevent rendering datasource slot until grid is ready\n // so there is no need for this even and handling it in datasources\n (_b = this.gridProDatasource) === null || _b === void 0 ? void 0 : _b.$emit(datasourceEventNames.ready, { pagination: this.pagination });\n this.restoreColumnState.bind(this)();\n this.restoreCachedFilterConfig.bind(this)();\n this.debouncedColumnAutosize.bind(this)();\n }, onFirstDataRendered: (event) => {\n // Handle column sizing\n this.handleColumnSizing();\n // Call the original onFirstDataRendered if provided\n if (onFirstDataRendered) {\n onFirstDataRendered(event);\n }\n }, onColumnPinned: gridOnChangeCallback, onColumnResized: gridOnChangeCallback, onColumnMoved: gridOnChangeCallback, onDisplayedColumnsChanged: gridOnChangeCallback, onFilterChanged: (filterChangedEvent) => {\n debouceSaveFiltermodel();\n if (onFilterChanged) {\n onFilterChanged(filterChangedEvent);\n }\n }, onGridSizeChanged: gridOnChangeCallback, onSortChanged: gridOnChangeCallback }), rest);\n const hasGetRowId = 'getRowId' in (options !== null && options !== void 0 ? options : {});\n if (this.gridProDatasource) {\n derivedOptions.columnDefs = columnDefs;\n if (hasGetRowId) {\n derivedOptions.getRowId = getRowId;\n }\n this.setupPaginationAndStatusBar(derivedOptions);\n this.setLocalGridOptions(derivedOptions);\n }\n else {\n this.mergeAllColumnDefsAndStates(columnDefs).then((value) => {\n derivedOptions.columnDefs = value;\n if (hasGetRowId) {\n derivedOptions.getRowId = getRowId;\n }\n this.setupPaginationAndStatusBar(derivedOptions);\n this.setLocalGridOptions(derivedOptions);\n this.initGrid();\n });\n }\n }\n setLocalGridOptions(derivedOptions) {\n this.agGridOptions = Object.assign(Object.assign({}, this.agGridOptions), copyAttributesToGridOptions(derivedOptions, this.agAttributes));\n }\n /**\n * Clears the local grid options, this is used to clear the grid options when the grid is restarted.\n * @public\n */\n clearLocalGridOptions() {\n this.agGridOptions = undefined;\n }\n initGrid() {\n DOM.queueUpdate(() => {\n if (this.initialised) {\n // Needed due gridSlot children cleanup\n if (this.gridSlot.firstChild) {\n // prevent re-instantiating the grid using the same slot content\n this.gridSlot.removeChild(this.gridSlot.firstChild);\n }\n }\n this.agGrid = new Grid(this.gridSlot, this.agGridOptions, this.gridParams);\n this.initialised = true;\n });\n }\n /**\n * Will merge templated column definitions with `columnDefs` plus localStorage's column state or `deferredColumnStates`.\n * @deprecated use `applyTemplateDefinitions` instead.\n * @param columnDefs - The column definitions to apply to the grid.\n * @param deferredColumnDefsOrState - If true, will merge the column definitions with the saved column state or the `deferredColumnStates` property on the `grid-pro-genesis-datasource` element.\n * @returns The merged column definitions.\n */\n applyTemplateDefinitions(columnDefs, deferredColumnDefsOrState = false) {\n logger.deprecated('applyTemplateDefinitions', 'Use `mergeAllColumnDefsAndStates` instead.');\n return this.mergeAllColumnDefsAndStates(columnDefs, deferredColumnDefsOrState);\n }\n /**\n * Will merge templated column definitions with `columnDefs` plus localStorage's column state or `deferredColumnStates`.\n * @public\n * @remarks This will favor the column state from the browser's local storage over the `deferredColumnStates` property on the `grid-pro-genesis-datasource` element.\n * @param columnDefs - The column definitions to apply to the grid.\n * @param deferredColumnDefsOrState - If true, will merge the column definitions with the saved column state or the `deferredColumnStates` property\n * on the `grid-pro-genesis-datasource` element. Defaults to false but `grid-pro-genesis-datasource` will set this to true.\n * @returns The merged column definitions.\n */\n mergeAllColumnDefsAndStates(columnDefs_1) {\n return __awaiter(this, arguments, void 0, function* (columnDefs, deferredColumnDefsOrState = false) {\n var _a;\n const columnDefinitionsFromMetadata = columnDefs || [];\n columnDefinitionsFromMetadata.forEach((colDefFromMetadata) => {\n if (this.headerCaseType && colDefFromMetadata.field && !colDefFromMetadata.headerName) {\n const changeCaseByType = changeCase[this.headerCaseType];\n if (changeCaseByType) {\n colDefFromMetadata.headerName = changeCaseByType(colDefFromMetadata.field);\n }\n else {\n logger.warn(`Invalid header-case-type attribute value: ${this.headerCaseType}. Please use one of the following: camelCase, capitalCase, dotCase, headerCase, noCase, paramCase, pascalCase, pathCase, sentenceCase, snakeCase.`);\n }\n }\n });\n const templateColumnDefs = Array.from(this.querySelectorAll(this.columnComponentName))\n .map((templateColumn) => templateColumn.definition)\n .map((columnDef) => {\n var _a, _b;\n // enable cell flashing for each column if unspecified on column level but enabled on grid level\n if (this.enableCellFlashing && columnDef.enableCellChangeFlash === undefined) {\n columnDef.enableCellChangeFlash = true;\n }\n /**\n * If the column has a set filter, merge filter params with metadata values.\n * If the template column explicitly sets 'values' in filterParams (even to undefined),\n * respect that choice and don't inject metadata values. This allows consumers to\n * opt out of metadata values and let AG Grid extract values from row data instead.\n */\n if (columnDef.filter === 'agSetColumnFilter') {\n const hasExplicitValues = columnDef.filterParams != null && 'values' in columnDef.filterParams;\n if (!hasExplicitValues) {\n const metadataValues = (_b = (_a = columnDefinitionsFromMetadata.find((colDef) => colDef.field === columnDef.field)) === null || _a === void 0 ? void 0 : _a.filterParams) === null || _b === void 0 ? void 0 : _b.values;\n if (metadataValues) {\n columnDef.filterParams = Object.assign(Object.assign({}, columnDef.filterParams), { values: metadataValues });\n }\n }\n }\n if (columnDef.editable) {\n if (!columnDef.cellRenderer && !columnDef.cellRendererSelector) {\n columnDef.cellRendererSelector = (params) => {\n if (!(params === null || params === void 0 ? void 0 : params.data)) {\n return undefined;\n }\n if (params.data[EDITED_COLUMN_FIELD] === columnDef.field) {\n return {\n component: GridProRendererTypes.editable,\n };\n }\n };\n }\n if (!columnDef.tooltipComponent && !columnDef.tooltipValueGetter) {\n columnDef.tooltipComponent = ErrorTooltip;\n columnDef.tooltipValueGetter = (params) => {\n if (!(params === null || params === void 0 ? void 0 : params.data)) {\n return undefined;\n }\n const error = params.data[ERROR_COLUMN_FIELD];\n if (error && error.column === columnDef.field) {\n return error.message;\n }\n };\n }\n if (!columnDef.cellClassRules) {\n columnDef.cellClassRules = {\n error: (params) => {\n var _a;\n if (!(params === null || params === void 0 ? void 0 : params.colDef) || !(params === null || params === void 0 ? void 0 : params.data)) {\n return false;\n }\n return ((_a = params.data[ERROR_COLUMN_FIELD]) === null || _a === void 0 ? void 0 : _a.column) === params.colDef.field;\n },\n };\n }\n }\n const metadataColumnDef = columnDefinitionsFromMetadata.find((colDef) => columnDef.field === colDef.field);\n return Object.assign(Object.assign({}, metadataColumnDef), columnDef);\n });\n const templateColumnKeys = templateColumnDefs.map((x) => x.field);\n const colDefsToReturn = [\n ...templateColumnDefs,\n ...(this.onlyTemplateColDefs\n ? []\n : columnDefinitionsFromMetadata.filter((g) => !templateColumnKeys.includes(g.field))),\n ];\n if (this.gridProDatasource && deferredColumnDefsOrState) {\n const savedColumnState = yield this.getSavedColumnState();\n if ((savedColumnState === null || savedColumnState === void 0 ? void 0 : savedColumnState.length) > 0) {\n return mergeAndDedupColDefWithColumnState(colDefsToReturn, savedColumnState);\n }\n else if (((_a = this.gridProDatasource.deferredColumnStates) === null || _a === void 0 ? void 0 : _a.length) > 0) {\n return mergeAndDedupColDefWithColumnState(colDefsToReturn, this.gridProDatasource.deferredColumnStates);\n }\n }\n return colDefsToReturn;\n });\n }\n panelExists(statusPanelType, panels) {\n return panels.some((panel) => panel.statusPanel === statusPanelType);\n }\n addRowCountPanel(statusPanels, gridOptions) {\n // Row count is handled by pagination status bar component when pagination is enabled.\n // This component is only used for server-side infinite scroll (load more) scenarios\n // where pagination is disabled.\n if (this.statusBarConfig && this.statusBarConfig.rows === true) {\n const isServerSide = this.isServerSide || (gridOptions === null || gridOptions === void 0 ? void 0 : gridOptions.rowModelType) === 'serverSide';\n const isPaginationEnabled = this['_pagination'] || (gridOptions === null || gridOptions === void 0 ? void 0 : gridOptions.pagination) === true;\n if (isServerSide && !isPaginationEnabled) {\n if (!this.panelExists(GridProStatusBarTypes.rowCount, statusPanels)) {\n statusPanels.push({\n statusPanel: GridProStatusBarTypes.rowCount,\n align: 'left',\n });\n }\n }\n else if (!isServerSide) {\n const rowCountStatusPanel = 'agTotalAndFilteredRowCountComponent';\n if (!this.panelExists(rowCountStatusPanel, statusPanels)) {\n statusPanels.push({\n statusPanel: rowCountStatusPanel,\n align: 'left',\n });\n }\n }\n }\n }\n addMaxRowsPanel(statusPanels) {\n if (this.statusBarConfig && this.statusBarConfig.maxRows === true) {\n if (!this.panelExists(GridProStatusBarTypes.labelValue, statusPanels)) {\n statusPanels.push({\n statusPanel: GridProStatusBarTypes.labelValue,\n statusPanelParams: {\n label: 'Max Rows',\n value: this.gridProDatasource.maxRows || DatasourceDefaults.MAX_ROWS_250,\n hide: false,\n },\n align: 'left',\n });\n }\n }\n }\n addAggregationPanel(statusPanels) {\n if (this.statusBarConfig && this.statusBarConfig.aggregation === true) {\n if (!this.panelExists('agAggregationComponent', statusPanels)) {\n statusPanels.push({\n statusPanel: 'agAggregationComponent',\n align: 'right',\n });\n }\n }\n }\n addDatasourcePanels(statusPanels) {\n if (this.gridProDatasource) {\n const datasourceStatusPanels = this.gridProDatasource.getDatasourceStatusBarPanels(this.isServerSide, this.statusBarConfig);\n // Filter out duplicate datasource panels\n const newDatasourcePanels = datasourceStatusPanels.filter((panel) => !this.panelExists(panel.statusPanel, statusPanels));\n statusPanels.push(...newDatasourcePanels);\n }\n }\n addPaginationPanel(statusPanels) {\n if (this['_pagination']) {\n if (!this.panelExists(GridProStatusBarTypes.pagination, statusPanels)) {\n statusPanels.push({\n statusPanel: GridProStatusBarTypes.pagination,\n align: 'right',\n });\n }\n }\n }\n setupPaginationAndStatusBar(gridOptions) {\n // Keep the guard for production code, but allow override for testing\n // if (this.initialised && !allowDuplicateCheck) return;\n var _a, _b;\n if (this['_pagination']) {\n gridOptions.pagination = true;\n gridOptions.suppressScrollOnNewData = true;\n gridOptions.paginationPageSize = this.paginationPageSize;\n }\n // Set default status bar with components based on configuration\n if (this.withStatusBar && this.statusBarConfig) {\n // For duplicate checking (testing scenario), clear existing status panels to prevent duplicates\n // unless they are user-defined panels that we want to preserve\n const existingPanels = ((_a = gridOptions.statusBar) === null || _a === void 0 ? void 0 : _a.statusPanels) || [];\n const statusPanels = [...existingPanels];\n this.addRowCountPanel(statusPanels, gridOptions);\n this.addMaxRowsPanel(statusPanels);\n this.addAggregationPanel(statusPanels);\n this.addDatasourcePanels(statusPanels);\n if (this['_pagination']) {\n gridOptions.suppressPaginationPanel = true;\n this.addPaginationPanel(statusPanels);\n }\n const userDefinedStatusPanels = ((_b = gridOptions.statusBar) === null || _b === void 0 ? void 0 : _b.statusPanels) || [];\n const newUserDefinedPanels = userDefinedStatusPanels.filter((panel) => !this.panelExists(panel.statusPanel, statusPanels));\n statusPanels.push(...newUserDefinedPanels);\n gridOptions.statusBar = {\n statusPanels: statusPanels,\n };\n }\n }\n /**\n * Handles column sizing based on sizeColumnsToContent and sizeColumnsToFit attributes\n * @private\n */\n handleColumnSizing() {\n if (!this.sizeColumnsToContent && !this.sizeColumnsToFit)\n return;\n if (this.sizeColumnsToContent && this.sizeColumnsToFit && this.columnApi && this.gridApi) {\n this.handleBothSizingModes();\n }\n else {\n this.handleIndividualSizingModes();\n }\n }\n /**\n * Handles when both sizeColumnsToContent and sizeColumnsToFit are enabled\n * @private\n */\n handleBothSizingModes() {\n const totalColumnWidth = this.calculateTotalColumnWidth();\n const gridWidth = this.getGridWidth();\n if (totalColumnWidth > gridWidth) {\n if (!this.columnApi)\n return;\n this.columnApi.autoSizeAllColumns();\n }\n else {\n if (!this.gridApi)\n return;\n this.gridApi.sizeColumnsToFit();\n }\n }\n /**\n * Handles individual sizing modes when only one is enabled\n * @private\n */\n handleIndividualSizingModes() {\n if (this.sizeColumnsToContent && this.columnApi) {\n this.columnApi.autoSizeAllColumns();\n }\n if (this.sizeColumnsToFit && this.gridApi) {\n this.gridApi.sizeColumnsToFit();\n }\n }\n /**\n * Calculates the total width of all columns\n * @private\n */\n calculateTotalColumnWidth() {\n if (!this.columnApi) {\n return 0;\n }\n const allColumns = this.columnApi.getAllGridColumns();\n const currentColumnCount = allColumns.length;\n // Check if cache is still valid (same number of columns)\n if (this.cachedTotalColumnWidth !== null && this.columnCount === currentColumnCount) {\n return this.cachedTotalColumnWidth;\n }\n // Calculate and cache the total width\n this.cachedTotalColumnWidth = allColumns.reduce((sum, col) => sum + (col.getActualWidth() || 0), 0);\n this.columnCount = currentColumnCount;\n return this.cachedTotalColumnWidth;\n }\n /**\n * Invalidates the cached column width calculation\n * @private\n * @remarks This method is called automatically when column changes occur (resize, move, pin, etc.)\n * to ensure the cached width calculation remains accurate.\n */\n invalidateColumnWidthCache() {\n this.cachedTotalColumnWidth = null;\n this.columnCount = 0;\n }\n /**\n * Gets the available grid width with fallbacks\n * @private\n */\n getGridWidth() {\n const gridElement = this;\n let gridWidth = (gridElement === null || gridElement === void 0 ? void 0 : gridElement.clientWidth) || 0;\n if (gridWidth === 0 && this.gridSlot) {\n gridWidth = this.gridSlot.clientWidth || 0;\n }\n if (gridWidth === 0) {\n gridWidth = this.clientWidth || 0;\n }\n return gridWidth;\n }\n get observedAttributes() {\n // allow properties to be supplied either lowercased or kebab-cased\n // this allows the user to either supply (for example) enableSorting or enabled-sorting\n // properties lowercased\n const lowerCasedPropertyNames = AG_PROPERTIES.map((property) => property.toLowerCase());\n // properties kebab-cased\n const kebabCasePropertyNames = AG_PROPERTIES.map((property) => convertToKebabCase(property));\n return lowerCasedPropertyNames.concat(kebabCasePropertyNames);\n }\n agAttributeChangedCallback(attName, oldValue, newValue) {\n if (oldValue === newValue) {\n return;\n }\n const gridPropertyName = this.agPropertiesMap[attName];\n if (gridPropertyName) {\n // for properties set before gridOptions is called\n this.agAttributes[gridPropertyName] = newValue;\n if (this.initialised) {\n // for subsequent (post gridOptions) changes\n const changeObject = {};\n changeObject[gridPropertyName] = { currentValue: newValue };\n ComponentUtil.processOnChange(changeObject, this.gridApi);\n }\n }\n }\n globalEventListener(eventType, event) {\n const eventLowerCase = eventType.toLowerCase();\n const browserEvent = new Event(eventLowerCase);\n const browserEventNoType = browserEvent;\n browserEventNoType.agGridDetails = event;\n // for when defining events via myGrid.addEventListener('columnresized', function (event) {...\n this.dispatchEvent(browserEvent);\n // for when defining events via myGrid.oncolumnresized = function (event) {....\n const callbackMethod = 'on' + eventLowerCase;\n if (typeof this[callbackMethod] === 'function') {\n this[callbackMethod](browserEvent);\n }\n }\n insertFontFace(newValue) {\n const fontFaceRule = agThemeFontFaceMap[newValue] || this.gridFontFace;\n this.destroyFontFace();\n const newDestroy = insertDocumentCSSRule(fontFaceRule, agThemeFontsId(newValue));\n if (newDestroy) {\n this.fontFaceDestroy = newDestroy;\n }\n }\n destroyFontFace() {\n if (this.fontFaceDestroy) {\n this.fontFaceDestroy();\n this.fontFaceDestroy = null;\n }\n }\n}\n__decorate([\n observable\n], GridPro.prototype, \"columnApi\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"gridApi\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"gridErrorItems\", void 0);\n__decorate([\n StatePersistence\n], GridPro.prototype, \"statePersistence\", void 0);\n__decorate([\n attr({ attribute: 'auto-cell-renderer-by-type', mode: 'boolean' })\n], GridPro.prototype, \"autoCellRendererByType\", void 0);\n__decorate([\n attr({ attribute: 'only-template-col-defs', mode: 'boolean' })\n], GridPro.prototype, \"onlyTemplateColDefs\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'grid-autosizing' })\n], GridPro.prototype, \"gridAutosizingEnabled\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'size-columns-to-content' })\n], GridPro.prototype, \"sizeColumnsToContent\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'size-columns-to-fit' })\n], GridPro.prototype, \"sizeColumnsToFit\", void 0);\n__decorate([\n attr({ attribute: 'add-index' })\n], GridPro.prototype, \"addIndex\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'async-add' })\n], GridPro.prototype, \"asyncAdd\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'async-remove' })\n], GridPro.prototype, \"asyncRemove\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'async-update' })\n], GridPro.prototype, \"asyncUpdate\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'enable-cell-flashing' })\n], GridPro.prototype, \"enableCellFlashing\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'enabled-row-flashing' })\n], GridPro.prototype, \"enabledRowFlashing\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'enable-row-flashing' })\n], GridPro.prototype, \"enableRowFlashing\", void 0);\n__decorate([\n attr({ attribute: 'persist-column-state-key' })\n], GridPro.prototype, \"persistColumnStateKey\", void 0);\n__decorate([\n attr({ attribute: 'persist-filter-model-key' })\n], GridPro.prototype, \"persistFilterModelKey\", void 0);\n__decorate([\n attr({ attribute: 'default-column-config' })\n], GridPro.prototype, \"defaultColumnConfig\", void 0);\n__decorate([\n attr({ attribute: 'header-case-type' })\n], GridPro.prototype, \"headerCaseType\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"rowData\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"gridFontFace\", void 0);\n__decorate([\n attr\n], GridPro.prototype, \"columnComponentName\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"eventsAndCallbacks\", void 0);\n__decorate([\n attr\n], GridPro.prototype, \"headerHeight\", void 0);\n__decorate([\n attr\n], GridPro.prototype, \"rowHeight\", void 0);\n__decorate([\n attr\n], GridPro.prototype, \"theme\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"classNames\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"agGrid\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"gridSlot\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"themeMode\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"gridComponents\", void 0);\n__decorate([\n attr({ mode: 'boolean' })\n], GridPro.prototype, \"pagination\", void 0);\n__decorate([\n attr({ attribute: 'pagination-page-size' })\n], GridPro.prototype, \"paginationPageSize\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"statusBarConfig\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'with-status-bar' })\n], GridPro.prototype, \"withStatusBar\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"customErrorHandlerTemplate\", void 0);\n__decorate([\n GridOptionsConfig\n], GridPro.prototype, \"gridOptionsConfig\", void 0);\n/**\n * GridPro shadow root options.\n * @public\n * @remarks\n * For extensibility, this can be used to set the shadow root mode and delegatesFocus\n */\nexport const foundationGridProShadowOptions = undefined;\n/**\n * Grid Pro default configuration.\n * @public\n */\nexport const defaultGridProConfig = {\n shadowOptions: undefined,\n};\n/**\n * A function that returns a Foundation Grid Pro registration for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-grid-pro\\>\n */\nexport const foundationGridPro = GridPro.compose(Object.assign({ baseName: 'grid-pro', styles,\n template, shadowOptions: foundationGridProShadowOptions }, defaultGridProConfig));\n","import { css } from '@microsoft/fast-element';\nimport { errorHandlerDialogStyles } from './datasource/error-handler.dialog';\nimport { agExternalStockStyles } from './external';\n/**\n * The Grid Pro styles.\n * @public\n * @remarks this is the default CSS, bundles Alpine/Balham/Material AG themes.\n */\nexport const foundationGridProStyles = css `\n ${agExternalStockStyles}\n ${errorHandlerDialogStyles}\n :host {\n --datasource-error-background-color: var(--neutral-layer-4);\n --datasource-error-background-opacity: 0.5;\n --datasource-error-dialog-max-width: 50%;\n --datasource-error-dialog-min-width: auto;\n --ag-status-bar-height: 32.5px;\n\n position: relative;\n width: 100%;\n height: 100%;\n }\n\n :host([ds-disconnected]) {\n display: block;\n }\n\n :host([ds-disconnected])::part(grid) {\n cursor: not-allowed;\n opacity: 40%;\n pointer-events: none;\n }\n\n .ag-side-bar,\n .ag-menu {\n --ag-subheader-background-color: var(--ag-background-color);\n --ag-control-panel-background-color: var(--ag-background-color);\n }\n\n .ag-cell-inline-editing {\n height: inherit !important;\n }\n\n .hidden {\n display: none;\n }\n\n .error {\n border-color: var(--error-color) !important;\n }\n\n .ag-status-bar {\n height: var(--ag-status-bar-height);\n }\n\n .ag-status-name-value {\n padding-top: var(--ag-grid-size);\n padding-bottom: var(--ag-grid-size);\n }\n\n /* Custom styling for the unsort icon (sortNone) - only for sortable columns */\n .ag-header-cell.ag-header-cell-sortable .ag-icon-none {\n opacity: 100%;\n color: var(--rapid-ag-header-foreground-color, var(--ag-foreground-color, #fff));\n font-size: calc(var(--ag-icon-size, 12px) * 1.2);\n font-weight: bold;\n }\n\n .ag-header-cell.ag-header-cell-sortable:hover .ag-icon-none {\n opacity: 100%;\n color: var(--rapid-ag-header-foreground-color, var(--ag-foreground-color, #fff));\n transform: scale(1.1);\n transition: transform 0.2s ease;\n }\n`;\n","import { html, ref } from '@microsoft/fast-element';\nimport { getErrorHandlerDialogTemplate } from './datasource/error-handler.dialog';\n/**\n * Get a Design System prefixed The Grid Pro template.\n * @param prefix - The design system prefix to use. Defaults to 'foundation'.\n * @returns A grid Pro template prefixed with the correct design system.\n * @public\n */\nexport const getGridProTemplate = (prefix = 'foundation') => html `\n <template>\n <span part=\"grid\" data-ag-theme-mode=${(x) => x.themeMode} class=\"${(x) => x.classNames}\">\n <slot name=\"grid\" ${ref('gridSlot')}></slot>\n <slot></slot>\n </span>\n ${(x) => x.customErrorHandlerTemplate\n ? x.customErrorHandlerTemplate(prefix, x.gridErrorItems.filter(({ type }) => type === 'datasource'))\n : getErrorHandlerDialogTemplate(prefix, x.gridErrorItems.filter(({ type }) => type === 'datasource'))}\n </template>\n`;\n/**\n *\n * @public\n * @remarks\n * HTML Element: <foundation-grid-pro>\n */\nexport const gridProTemplate = getGridProTemplate();\n","import { CSSVarsTokenMapper } from '@genesislcap/foundation-ui';\nimport { css } from '@microsoft/fast-element';\nimport { DI } from '@microsoft/fast-foundation';\n/**\n * All official AG CSS variables\n * @public\n */\nexport var AgGridCSSVars;\n(function (AgGridCSSVars) {\n AgGridCSSVars[\"foregroundColor\"] = \"--ag-foreground-color\";\n AgGridCSSVars[\"dataColor\"] = \"--ag-data-color\";\n AgGridCSSVars[\"secondaryForegroundColor\"] = \"--ag-secondary-foreground-color\";\n AgGridCSSVars[\"headerForegroundColor\"] = \"--ag-header-foreground-color\";\n AgGridCSSVars[\"disabledForegroundColor\"] = \"--ag-disabled-foreground-color\";\n AgGridCSSVars[\"backgroundColor\"] = \"--ag-background-color\";\n AgGridCSSVars[\"headerBackgroundColor\"] = \"--ag-header-background-color\";\n AgGridCSSVars[\"subheaderBackgroundColor\"] = \"--ag-subheader-background-color\";\n AgGridCSSVars[\"subheaderToolbarBackgroundColor\"] = \"--ag-subheader-toolbar-background-color\";\n AgGridCSSVars[\"controlPanelBackgroundColor\"] = \"--ag-control-panel-background-color\";\n AgGridCSSVars[\"selectedRowBackgroundColor\"] = \"--ag-selected-row-background-color\";\n AgGridCSSVars[\"oddRowBackgroundColor\"] = \"--ag-odd-row-background-color\";\n AgGridCSSVars[\"rowHoverColor\"] = \"--ag-row-hover-color\";\n AgGridCSSVars[\"rangeSelectionBorderColor\"] = \"--ag-range-selection-border-color\";\n AgGridCSSVars[\"rangeSelectionBackgroundColor\"] = \"--ag-range-selection-background-color\";\n AgGridCSSVars[\"selectedTabUnderlineColor\"] = \"--ag-selected-tab-underline-color\";\n AgGridCSSVars[\"rangeSelectionChartCategoryBackgroundColor\"] = \"--ag-range-selection-chart-category-background-color\";\n AgGridCSSVars[\"rangeSelectionChartBackgroundColor\"] = \"--ag-range-selection-chart-background-color\";\n AgGridCSSVars[\"headerCellHoverBackgroundColor\"] = \"--ag-header-cell-hover-background-color\";\n AgGridCSSVars[\"headerCellMovingBackgroundColor\"] = \"--ag-header-cell-moving-background-color\";\n AgGridCSSVars[\"chipBackgroundColor\"] = \"--ag-chip-background-color\";\n AgGridCSSVars[\"borderColor\"] = \"--ag-border-color\";\n AgGridCSSVars[\"secondaryBorderColor\"] = \"--ag-secondary-border-color\";\n AgGridCSSVars[\"rowBorderColor\"] = \"--ag-row-border-color\";\n AgGridCSSVars[\"headerColumnSeparatorColor\"] = \"--ag-header-column-separator-color\";\n AgGridCSSVars[\"headerColumnResizeHandleColor\"] = \"--ag-header-column-resize-handle-color\";\n AgGridCSSVars[\"inputBorderColor\"] = \"--ag-input-border-color\";\n AgGridCSSVars[\"inputDisabledBorderColor\"] = \"--ag-input-disabled-border-color\";\n AgGridCSSVars[\"inputDisabledBackgroundColor\"] = \"--ag-input-disabled-background-color\";\n AgGridCSSVars[\"checkboxBackgroundColor\"] = \"--ag-checkbox-background-color\";\n AgGridCSSVars[\"checkboxCheckedColor\"] = \"--ag-checkbox-checked-color\";\n AgGridCSSVars[\"checkboxUncheckedColor\"] = \"--ag-checkbox-unchecked-color\";\n AgGridCSSVars[\"checkboxIndeterminateColor\"] = \"--ag-checkbox-indeterminate-color\";\n AgGridCSSVars[\"toggleButtonOffBorderColor\"] = \"--ag-toggle-button-off-border-color\";\n AgGridCSSVars[\"toggleButtonOffBackgroundColor\"] = \"--ag-toggle-button-off-background-color\";\n AgGridCSSVars[\"toggleButtonOnBorderColor\"] = \"--ag-toggle-button-on-border-color\";\n AgGridCSSVars[\"toggleButtonOnBackgroundColor\"] = \"--ag-toggle-button-on-background-color\";\n AgGridCSSVars[\"toggleButtonSwitchBackgroundColor\"] = \"--ag-toggle-button-switch-background-color\";\n AgGridCSSVars[\"toggleButtonSwitchBorderColor\"] = \"--ag-toggle-button-switch-border-color\";\n AgGridCSSVars[\"minichartSelectedChartColor\"] = \"--ag-minichart-selected-chart-color\";\n AgGridCSSVars[\"minichartSelectedPageColor\"] = \"--ag-minichart-selected-page-color\";\n AgGridCSSVars[\"modalOverlayBackgroundColor\"] = \"--ag-modal-overlay-background-color\";\n AgGridCSSVars[\"inputFocusBoxShadow\"] = \"--ag-input-focus-box-shadow\";\n AgGridCSSVars[\"inputFocusBorderColor\"] = \"--ag-input-focus-border-color\";\n})(AgGridCSSVars || (AgGridCSSVars = {}));\n/**\n * The available Grid Pro themes.\n * @public\n */\nexport var AgGridTheme;\n(function (AgGridTheme) {\n AgGridTheme[\"alpine\"] = \"ag-theme-alpine\";\n AgGridTheme[\"alpineDark\"] = \"ag-theme-alpine-dark\";\n AgGridTheme[\"balham\"] = \"ag-theme-balham\";\n AgGridTheme[\"balhamDark\"] = \"ag-theme-balham-dark\";\n AgGridTheme[\"material\"] = \"ag-theme-material\";\n})(AgGridTheme || (AgGridTheme = {}));\n/**\n * Generates the class name for a given Grid Pro theme name.\n * @param themeName - the Grid Pro theme name\n * @returns the class name for the Grid Pro token map\n * @public\n * @example The result of this will be a class name that is applied to the grid part of GridPro template (actual content of the class comes from agThemeTokenMapCSS):\n * ```html\n * <span part=\"grid\" class=\"ag-theme-genesis-rapid-dark\">\n * ```\n */\nexport const agThemeTokenMapClassname = (themeName) => `${themeName}-token-map`;\n/**\n * Generates the id name for custom Grid Pro fonts.\n * @param themeName - the Grid Pro theme name\n * @returns the id name for the Grid Pro fonts\n * @public\n * @example The result of this is used in the id of style tag:\n * ```html\n * <style id=\"ag-theme-alpine-fonts\"></style>\n * ```\n */\nexport const agThemeFontsId = (themeName) => `${themeName}-fonts`;\n/**\n * Generates the CSS for a given GridPro theme name and token map\n * @param themeName - the GridPro theme name\n * @param tokenMap - a map of CSS variables {@link @genesislcap/grid-pro#AgGridCSSVars} and custom token values\n * @returns the CSS for the Grid Pro token map\n * @public\n * @example\n * ```ts\n * export const agThemeGenesisRapidTokens = {\n * backgroundColor: create<Swatch>('rapid-ag-background-color').withDefault((elem: HTMLElement) =>\n * baseLayerLuminance.getValueFor(elem) === StandardLuminance.LightMode\n * ? lightColors.backgroundSwatch\n * : darkColors.backgroundSwatch\n * ),\n * foregroundColor: create<Swatch>('rapid-ag-foreground-color').withDefault((elem: HTMLElement) =>\n * baseLayerLuminance.getValueFor(elem) === StandardLuminance.LightMode\n * ? lightColors.foregroundSwatch\n * : darkColors.foregroundSwatch\n * ),\n * };\n * export const agThemeGenesisRapidTokenMap: CSSVarTokenMap<AgGridCSSVars | string> = {\n * [AgGridCSSVars.backgroundColor]: agThemeGenesisRapidTokens.backgroundColor,\n * [AgGridCSSVars.foregroundColor]: agThemeGenesisRapidTokens.foregroundColor,\n * };\n * ```\n */\nexport const agThemeTokenMapCSS = (themeName, tokenMap) => css `\n .${agThemeTokenMapClassname(themeName)} {\n ${new CSSVarsTokenMapper(tokenMap)}\n }\n`;\n/**\n * The available Grid Pro Renderer Types\n * @public\n */\nexport var GridProRendererTypes;\n(function (GridProRendererTypes) {\n GridProRendererTypes[\"action\"] = \"action\";\n GridProRendererTypes[\"actionsMenu\"] = \"actionsMenu\";\n GridProRendererTypes[\"boolean\"] = \"boolean\";\n GridProRendererTypes[\"editable\"] = \"editable\";\n GridProRendererTypes[\"icon\"] = \"icon\";\n GridProRendererTypes[\"text\"] = \"text\";\n GridProRendererTypes[\"select\"] = \"select\";\n GridProRendererTypes[\"statusPill\"] = \"statusPill\";\n GridProRendererTypes[\"dateEditor\"] = \"dateEditor\";\n GridProRendererTypes[\"selectEditor\"] = \"selectEditor\";\n GridProRendererTypes[\"numberEditor\"] = \"numberEditor\";\n GridProRendererTypes[\"stringEditor\"] = \"stringEditor\";\n GridProRendererTypes[\"multiselectEditor\"] = \"multiselectEditor\";\n})(GridProRendererTypes || (GridProRendererTypes = {}));\n/**\n * The available Grid Pro Status Bar Types\n * @public\n * @remarks\n * These status bar components require AG Grid Enterprise module to be enabled.\n * Status bar components will only be displayed if the Enterprise module is available.\n * @see https://www.ag-grid.com/javascript-data-grid/component-status-bar/\n */\nexport var GridProStatusBarTypes;\n(function (GridProStatusBarTypes) {\n GridProStatusBarTypes[\"labelValue\"] = \"labelValue\";\n GridProStatusBarTypes[\"pagination\"] = \"pagination\";\n GridProStatusBarTypes[\"loadMore\"] = \"loadMore\";\n GridProStatusBarTypes[\"reload\"] = \"reload\";\n GridProStatusBarTypes[\"rowCount\"] = \"rowCount\";\n})(GridProStatusBarTypes || (GridProStatusBarTypes = {}));\n/**\n * Event fired when grid is ready\n * @public\n * @deprecated - Use `Events.EVENT_GRID_READY` from `@ag-grid-community/core` instead\n * @privateRemarks\n * This will be removed when we do the AG Upgrade.\n */\nexport const GRID_READY_EVENT = 'onGridReady';\n/**\n * Key used to store currently edited column when it being synced with server side data\n * @public\n */\nexport const EDITED_COLUMN_FIELD = '__editedColumn';\n/**\n * Key used to store error details (column, message) when inline edit fails sync with server side data\n * @public\n */\nexport const ERROR_COLUMN_FIELD = '__errorColumn';\n/**\n * Default grid options\n * @public\n */\nexport const defaultGridOptionsConfig = {};\n/**\n * Grid options config used to inject into grids in application\n * @internal\n */\nexport const GridOptionsConfig = DI.createInterface((x) => x.instance(defaultGridOptionsConfig));\n/**\n * The available Grid Pro header case types\n * @public\n */\nexport var GridProCaseType;\n(function (GridProCaseType) {\n GridProCaseType[\"camelCase\"] = \"camelCase\";\n GridProCaseType[\"capitalCase\"] = \"capitalCase\";\n GridProCaseType[\"dotCase\"] = \"dotCase\";\n GridProCaseType[\"headerCase\"] = \"headerCase\";\n GridProCaseType[\"noCase\"] = \"noCase\";\n GridProCaseType[\"paramCase\"] = \"paramCase\";\n GridProCaseType[\"pascalCase\"] = \"pascalCase\";\n GridProCaseType[\"pathCase\"] = \"pathCase\";\n GridProCaseType[\"sentenceCase\"] = \"sentenceCase\";\n GridProCaseType[\"snakeCase\"] = \"snakeCase\";\n})(GridProCaseType || (GridProCaseType = {}));\n/**\n * Default status bar configuration\n * @public\n */\nexport const DEFAULT_STATUS_BAR_CONFIG = {\n rows: true,\n maxRows: false,\n aggregation: true,\n loadMore: {\n tooltip: 'Load more rows from server',\n },\n reload: {\n tooltip: 'Reload the datasource.',\n },\n};\n","import { __awaiter, __decorate } from \"tslib\";\nimport { Session } from '@genesislcap/foundation-comms';\n/**\n * Implementation for the Local Storage State Persistence interface.\n * @public\n */\nexport class LocalStorageStatePersistence {\n getColumnState(persistColumnStateKey) {\n return __awaiter(this, void 0, void 0, function* () {\n const localStorageGridOptions = this.session.getLocalStorageItem('gridOptions');\n if (localStorageGridOptions) {\n const allGridOptions = JSON.parse(localStorageGridOptions);\n if (persistColumnStateKey in allGridOptions) {\n return JSON.parse(allGridOptions[persistColumnStateKey]);\n }\n }\n return [];\n });\n }\n saveColumnState(persistColumnStateKey, columnState) {\n return __awaiter(this, void 0, void 0, function* () {\n const existingOptions = JSON.parse(this.session.getLocalStorageItem('gridOptions') || '{}');\n existingOptions[persistColumnStateKey] = JSON.stringify(columnState);\n this.session.setLocalStorageItem('gridOptions', JSON.stringify(existingOptions));\n });\n }\n deleteColumnState(persistColumnStateKey) {\n return __awaiter(this, void 0, void 0, function* () {\n const existingOptions = JSON.parse(this.session.getLocalStorageItem('gridOptions') || '{}');\n delete existingOptions[persistColumnStateKey];\n this.session.setLocalStorageItem('gridOptions', JSON.stringify(existingOptions));\n });\n }\n getFilterModel(persistFilterModelKey) {\n return __awaiter(this, void 0, void 0, function* () {\n const localStorageGridOptions = this.session.getLocalStorageItem('gridOptions');\n if (localStorageGridOptions) {\n const allGridOptions = JSON.parse(localStorageGridOptions);\n if (persistFilterModelKey in allGridOptions) {\n return JSON.parse(allGridOptions[persistFilterModelKey]);\n }\n }\n return {};\n });\n }\n saveFilterModel(persistFilterModelKey, filterModel) {\n return __awaiter(this, void 0, void 0, function* () {\n const existingOptions = JSON.parse(this.session.getLocalStorageItem('gridOptions') || '{}');\n existingOptions[persistFilterModelKey] = JSON.stringify(filterModel);\n this.session.setLocalStorageItem('gridOptions', JSON.stringify(existingOptions));\n });\n }\n}\n__decorate([\n Session\n], LocalStorageStatePersistence.prototype, \"session\", void 0);\n","import { DI } from '@microsoft/fast-foundation';\nimport { LocalStorageStatePersistence } from './local-state';\n/**\n * The DI token for the StatePersistence interface.\n * @internal\n */\nexport const StatePersistence = DI.createInterface((x) => x.singleton(LocalStorageStatePersistence));\n","/**\n * Label Value Status Bar Component\n * @public\n */\nexport class LabelValueStatusBarComponent {\n init(params) {\n this.element = document.createElement('div');\n this.element.classList.add('ag-status-name-value', 'ag-status-panel');\n this.element.setAttribute('data-test-id', 'grid-label-value-panel');\n this.element.setAttribute('role', 'status');\n this.currentParams = params;\n this.updateDisplay();\n }\n updateParams(params) {\n this.currentParams = Object.assign(Object.assign({}, this.currentParams), params);\n this.updateDisplay();\n }\n updateDisplay() {\n if (!this.element)\n return;\n if (this.currentParams.hide) {\n this.element.style.display = 'none';\n return;\n }\n else {\n this.element.style.display = '';\n }\n // Set accessible label for the entire component\n this.element.setAttribute('aria-label', `${this.currentParams.label}: ${this.currentParams.value}`);\n // Create or update label element\n if (!this.labelElement) {\n this.labelElement = document.createElement('span');\n this.labelElement.setAttribute('data-test-id', 'grid-label-value-label');\n this.labelElement.setAttribute('aria-hidden', 'true');\n this.element.appendChild(this.labelElement);\n }\n this.labelElement.innerHTML = `${this.currentParams.label}:&nbsp; `;\n // Create or update value element\n if (!this.valueElement) {\n this.valueElement = document.createElement('span');\n this.valueElement.classList.add('ag-status-name-value-value');\n this.valueElement.setAttribute('data-test-id', 'grid-label-value-value');\n this.valueElement.setAttribute('aria-hidden', 'true');\n this.element.appendChild(this.valueElement);\n }\n this.valueElement.innerHTML = this.currentParams.value;\n }\n getGui() {\n return this.element;\n }\n destroy() { }\n}\n","import { __awaiter } from \"tslib\";\nimport { delay, getCurrentDesignSystemPrefix } from '@genesislcap/foundation-utils';\nconst LOADING_DELAY = 500;\n/**\n * A status bar component that shows a \"Load More\" button when more rows are available\n * @public\n */\nexport class LoadMoreStatusBarComponent {\n constructor() {\n this.buttonLabel = 'Load More';\n this.isLoading = false;\n this.isLeftAligned = false;\n }\n init(params) {\n var _a, _b, _c;\n this.params = params;\n this.gridApi = params.api;\n this.element = document.createElement('div');\n this.element.classList.add('ag-status-panel', 'ag-load-more-panel');\n this.element.setAttribute('data-test-id', 'grid-load-more-panel');\n this.element.setAttribute('role', 'region');\n this.element.setAttribute('aria-label', 'Load more data controls');\n this.element.style.display = 'flex';\n this.element.style.alignItems = 'center';\n // Determine alignment based on pagination status\n // When pagination is enabled, load more is aligned left, otherwise right\n this.isLeftAligned = ((_c = (_b = (_a = this.gridApi) === null || _a === void 0 ? void 0 : _a.gridOptionsService) === null || _b === void 0 ? void 0 : _b.gridOptions) === null || _c === void 0 ? void 0 : _c.pagination) || false;\n this.element.style.justifyContent = this.isLeftAligned ? 'flex-start' : 'flex-end';\n // Only add padding on the side where the button is\n this.element.style.paddingLeft = 'var(--ag-grid-size)';\n this.element.style.paddingRight = 'var(--ag-grid-size)';\n this.element.style.height = 'var(--ag-status-bar-height)';\n // Detect the current design system prefix (rapid or zero)\n this.designSystemPrefix = getCurrentDesignSystemPrefix(this.element, 'zero');\n this.createProgressRing();\n this.createLoadMoreButton();\n this.updateButtonVisibility();\n // Remove all children first to ensure correct ordering\n while (this.element.firstChild) {\n this.element.removeChild(this.element.firstChild);\n }\n // Add elements in the correct order based on alignment\n if (this.isLeftAligned) {\n // Left-aligned: Button first, then progress ring\n this.element.appendChild(this.loadMoreButton);\n this.element.appendChild(this.progressRing);\n }\n else {\n // Right-aligned: Progress ring first, then button\n this.element.appendChild(this.progressRing);\n this.element.appendChild(this.loadMoreButton);\n }\n }\n createProgressRing() {\n // Create the progress ring with the appropriate design system prefix\n this.progressRing = document.createElement(`${this.designSystemPrefix}-progress-ring`);\n this.progressRing.setAttribute('data-test-id', 'grid-load-more-progress');\n this.progressRing.setAttribute('aria-label', 'Loading more data');\n // Set styles for the progress ring\n this.progressRing.style.width = '20px';\n this.progressRing.style.height = '20px';\n // Different margin based on alignment - when left-aligned, progress ring goes after button\n this.progressRing.style.margin = this.isLeftAligned ? '0 0 0 8px' : '0 8px 0 0';\n this.progressRing.style.display = 'none'; // Hidden by default\n }\n createLoadMoreButton() {\n var _a, _b;\n // Create the button with the appropriate design system prefix\n this.loadMoreButton = document.createElement(`${this.designSystemPrefix}-button`);\n this.loadMoreButton.setAttribute('data-test-id', 'grid-load-more-button');\n // Set button appearance - use custom appearance if provided, otherwise default to 'outline'\n const appearance = ((_a = this.params) === null || _a === void 0 ? void 0 : _a.appearance) || 'outline';\n this.loadMoreButton.setAttribute('appearance', appearance);\n // Set button label - use default\n this.loadMoreButton.textContent = this.buttonLabel;\n // Set button styles - improve sizing to match UI better\n this.loadMoreButton.style.margin = '2px 8px';\n this.loadMoreButton.style.minWidth = '120px';\n this.loadMoreButton.style.textAlign = 'center';\n this.loadMoreButton.style.height = '24px';\n this.loadMoreButton.style.lineHeight = '20px';\n // Add native tooltip if provided\n if ((_b = this.params) === null || _b === void 0 ? void 0 : _b.tooltip) {\n this.loadMoreButton.setAttribute('title', this.params.tooltip);\n this.loadMoreButton.setAttribute('aria-describedby', 'grid-load-more-tooltip');\n }\n // Set initial ARIA attributes - use tooltip as aria-label if available, otherwise use default\n this.updateAriaLabel();\n this.loadMoreButton.setAttribute('role', 'button');\n // Add event listener for the load more action\n this.clickHandler = () => __awaiter(this, void 0, void 0, function* () {\n if (this.isLoading)\n return; // Prevent multiple clicks\n try {\n this.showLoading(true);\n yield delay(LOADING_DELAY);\n // Execute the load more action\n if (this.params.onLoadMore) {\n this.params.onLoadMore();\n }\n // After the action completes, hide the loading state\n // this.showLoading(false);\n }\n catch (error) {\n // In case of error, ensure loading state is hidden\n this.showLoading(false);\n }\n });\n this.loadMoreButton.addEventListener('click', this.clickHandler);\n }\n /**\n * Update the aria-label based on current state and tooltip\n */\n updateAriaLabel() {\n var _a, _b;\n let ariaLabel;\n if ((_a = this.params) === null || _a === void 0 ? void 0 : _a.tooltip) {\n // Use tooltip as primary aria-label\n ariaLabel = this.params.tooltip;\n }\n else {\n // Fall back to descriptive labels based on state\n if (this.isLoading) {\n ariaLabel = 'Loading more data';\n }\n else if ((_b = this.params) === null || _b === void 0 ? void 0 : _b.moreRows) {\n ariaLabel = 'Load more rows from server';\n }\n else {\n ariaLabel = 'No more rows available';\n }\n }\n this.loadMoreButton.setAttribute('aria-label', ariaLabel);\n }\n /**\n * Show or hide the loading state\n */\n showLoading(loading) {\n var _a;\n this.isLoading = loading;\n if (loading) {\n // Show loading state\n this.progressRing.style.display = 'inline-block';\n this.loadMoreButton.setAttribute('disabled', 'true');\n this.loadMoreButton.textContent = 'Loading...';\n }\n else {\n // Hide loading state\n this.progressRing.style.display = 'none';\n // Reset button state based on moreRows parameter\n if ((_a = this.params) === null || _a === void 0 ? void 0 : _a.moreRows) {\n this.loadMoreButton.textContent = 'Load More';\n this.loadMoreButton.removeAttribute('disabled');\n }\n else {\n this.loadMoreButton.textContent = 'No More Rows';\n this.loadMoreButton.setAttribute('disabled', 'true');\n }\n }\n // Update aria-label to reflect current state\n this.updateAriaLabel();\n }\n updateButtonVisibility() {\n // If we don't have params or during loading, don't update\n if (!this.params || this.isLoading) {\n return;\n }\n // Reset loading state (safeguard)\n this.progressRing.style.display = 'none';\n // If we have more rows, enable the button\n if (this.params.moreRows) {\n this.loadMoreButton.style.display = 'inline-flex';\n this.loadMoreButton.textContent = 'Load More';\n this.loadMoreButton.removeAttribute('disabled');\n }\n else {\n // No more rows available\n this.loadMoreButton.style.display = 'inline-flex';\n this.loadMoreButton.textContent = 'No More Rows';\n this.loadMoreButton.setAttribute('disabled', 'true');\n }\n // Update aria-label to reflect current state\n this.updateAriaLabel();\n }\n updateParams(params) {\n var _a, _b;\n const prevParams = this.params;\n this.params = Object.assign(Object.assign({}, this.params), params);\n // If tooltip changed, update the title attribute\n if ((prevParams === null || prevParams === void 0 ? void 0 : prevParams.tooltip) !== ((_a = this.params) === null || _a === void 0 ? void 0 : _a.tooltip) && ((_b = this.params) === null || _b === void 0 ? void 0 : _b.tooltip)) {\n this.loadMoreButton.setAttribute('title', this.params.tooltip);\n }\n // If we were loading, but got an update that says no more rows,\n // we need to stop the loading state immediately\n if (this.isLoading) {\n this.showLoading(false);\n }\n this.updateButtonVisibility();\n }\n getGui() {\n return this.element;\n }\n destroy() {\n // Clean up event listeners\n if (this.loadMoreButton && this.clickHandler) {\n this.loadMoreButton.removeEventListener('click', this.clickHandler);\n }\n }\n}\n","/**\n * Pagination Status Bar Component for AG Grid\n * Displays pagination controls and information about current page and total rows\n * @public\n */\nexport class PaginationStatusBarComponent {\n init(params) {\n this.api = params.api;\n this.element = document.createElement('div');\n this.element.className = 'ag-status-panel';\n this.element.setAttribute('data-test-id', 'grid-pagination-panel');\n this.element.setAttribute('role', 'navigation');\n this.element.setAttribute('aria-label', 'Pagination controls');\n this.element.style.display = 'flex';\n this.element.style.alignItems = 'center';\n this.element.style.justifyContent = 'flex-end';\n this.element.style.height = 'var(--ag-status-bar-height)';\n this.createPaginationPanel();\n // Initial update\n this.updateDisplay();\n // Listen to pagination changes\n this.paginationChangedHandler = () => {\n this.updateDisplay();\n };\n this.api.addEventListener('paginationChanged', this.paginationChangedHandler);\n }\n getGui() {\n return this.element;\n }\n createPaginationPanel() {\n // Create the main pagination panel\n this.paginationPanel = document.createElement('div');\n this.paginationPanel.className = 'ag-paging-panel ag-unselectable';\n this.paginationPanel.setAttribute('id', 'ag-pagination-clone');\n this.paginationPanel.setAttribute('data-test-id', 'grid-pagination-controls');\n // Row summary panel\n this.paginationSummaryPanel = document.createElement('span');\n this.paginationSummaryPanel.className = 'ag-paging-row-summary-panel';\n this.paginationSummaryPanel.setAttribute('role', 'status');\n this.paginationSummaryPanel.setAttribute('data-test-id', 'grid-pagination-summary');\n this.paginationSummaryPanel.setAttribute('aria-label', 'Row count summary');\n // First page button\n this.firstPageButton = this.createPaginationButton('btFirst', 'ag-paging-button ag-disabled', 'First Page', true);\n this.firstPageButton.setAttribute('data-test-id', 'grid-pagination-first');\n // Previous page button\n this.prevPageButton = this.createPaginationButton('btPrevious', 'ag-paging-button ag-disabled', 'Previous Page', true);\n this.prevPageButton.setAttribute('data-test-id', 'grid-pagination-previous');\n // Create the description panel\n this.descriptionPanel = document.createElement('span');\n this.descriptionPanel.className = 'ag-paging-description';\n this.descriptionPanel.setAttribute('role', 'status');\n this.descriptionPanel.setAttribute('data-test-id', 'grid-pagination-description');\n this.descriptionPanel.setAttribute('aria-label', 'Current page information');\n // Page information elements\n this.pageStartDisplay = document.createElement('span');\n this.pageStartDisplay.className = 'ag-paging-number';\n this.pageStartDisplay.setAttribute('id', 'ag-pagination-clone-start-page');\n this.pageStartDisplay.setAttribute('data-test-id', 'grid-pagination-page-label');\n this.pageStartDisplay.textContent = 'Page';\n this.pageNumberDisplay = document.createElement('span');\n this.pageNumberDisplay.className = 'ag-paging-number';\n this.pageNumberDisplay.setAttribute('id', 'ag-pagination-clone-start-page-number');\n this.pageNumberDisplay.setAttribute('ref', 'lbCurrent');\n this.pageNumberDisplay.setAttribute('data-test-id', 'grid-pagination-current-page');\n this.pageNumberDisplay.setAttribute('aria-label', 'Current page number');\n this.pageNumberDisplay.textContent = '1';\n this.pageOfDisplay = document.createElement('span');\n this.pageOfDisplay.className = 'ag-paging-number';\n this.pageOfDisplay.setAttribute('id', 'ag-pagination-clone-of-page');\n this.pageOfDisplay.setAttribute('data-test-id', 'grid-pagination-of-label');\n this.pageOfDisplay.textContent = 'of';\n this.pageNumberTotalDisplay = document.createElement('span');\n this.pageNumberTotalDisplay.className = 'ag-paging-number';\n this.pageNumberTotalDisplay.setAttribute('id', 'ag-pagination-clone-of-page-number');\n this.pageNumberTotalDisplay.setAttribute('ref', 'lbTotal');\n this.pageNumberTotalDisplay.setAttribute('data-test-id', 'grid-pagination-total-pages');\n this.pageNumberTotalDisplay.setAttribute('aria-label', 'Total number of pages');\n this.pageNumberTotalDisplay.textContent = '1';\n // Next page button\n this.nextPageButton = this.createPaginationButton('btNext', 'ag-paging-button', 'Next Page', false);\n this.nextPageButton.setAttribute('data-test-id', 'grid-pagination-next');\n // Last page button\n this.lastPageButton = this.createPaginationButton('btLast', 'ag-paging-button', 'Last Page', false);\n this.lastPageButton.setAttribute('data-test-id', 'grid-pagination-last');\n // Assemble the description panel\n this.descriptionPanel.appendChild(this.pageStartDisplay);\n this.descriptionPanel.appendChild(document.createTextNode(' '));\n this.descriptionPanel.appendChild(this.pageNumberDisplay);\n this.descriptionPanel.appendChild(document.createTextNode(' '));\n this.descriptionPanel.appendChild(this.pageOfDisplay);\n this.descriptionPanel.appendChild(document.createTextNode(' '));\n this.descriptionPanel.appendChild(this.pageNumberTotalDisplay);\n // Assemble the pagination panel\n this.paginationPanel.appendChild(this.paginationSummaryPanel);\n this.paginationPanel.appendChild(this.firstPageButton);\n this.paginationPanel.appendChild(this.prevPageButton);\n this.paginationPanel.appendChild(this.descriptionPanel);\n this.paginationPanel.appendChild(this.nextPageButton);\n this.paginationPanel.appendChild(this.lastPageButton);\n // Add to main container\n this.element.appendChild(this.paginationPanel);\n // Add event listeners with keyboard support\n this.addPaginationEventListeners();\n }\n addPaginationEventListeners() {\n // Click event listeners\n this.firstPageButton.addEventListener('click', () => this.goToPage('first'));\n this.prevPageButton.addEventListener('click', () => this.goToPage('previous'));\n this.nextPageButton.addEventListener('click', () => this.goToPage('next'));\n this.lastPageButton.addEventListener('click', () => this.goToPage('last'));\n // Keyboard event listeners for accessibility\n this.firstPageButton.addEventListener('keydown', (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.goToPage('first');\n }\n });\n this.prevPageButton.addEventListener('keydown', (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.goToPage('previous');\n }\n });\n this.nextPageButton.addEventListener('keydown', (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.goToPage('next');\n }\n });\n this.lastPageButton.addEventListener('keydown', (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.goToPage('last');\n }\n });\n }\n createPaginationButton(ref, className, ariaLabel, disabled) {\n const button = document.createElement('div');\n button.setAttribute('ref', ref);\n button.className = className;\n button.setAttribute('role', 'button');\n button.setAttribute('aria-label', ariaLabel);\n button.setAttribute('tabindex', disabled ? '-1' : '0');\n if (disabled) {\n button.setAttribute('aria-disabled', 'true');\n }\n const iconSpan = document.createElement('span');\n iconSpan.className = `ag-icon ag-icon-${ref.substring(2).toLowerCase()}`;\n iconSpan.setAttribute('unselectable', 'on');\n iconSpan.setAttribute('role', 'presentation');\n button.appendChild(iconSpan);\n return button;\n }\n goToPage(page) {\n var _a;\n const apiAny = this.api;\n const methodMap = {\n first: ['paginationGoToFirstPage', 'goToFirstPage'],\n previous: ['paginationGoToPreviousPage', 'goToPreviousPage'],\n next: ['paginationGoToNextPage', 'goToNextPage'],\n last: ['paginationGoToLastPage', 'goToLastPage'],\n };\n const [directMethod, proxyMethod] = methodMap[page];\n if (typeof apiAny[directMethod] === 'function') {\n apiAny[directMethod]();\n }\n else if (typeof ((_a = apiAny.paginationProxy) === null || _a === void 0 ? void 0 : _a[proxyMethod]) === 'function') {\n apiAny.paginationProxy[proxyMethod]();\n }\n }\n updateDisplay() {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;\n // Use compatibility layer for v34 pagination API\n const apiAny = this.api;\n const currentPage = ((_e = (_b = (_a = apiAny.paginationGetCurrentPage) === null || _a === void 0 ? void 0 : _a.call(apiAny)) !== null && _b !== void 0 ? _b : (_d = (_c = apiAny.paginationProxy) === null || _c === void 0 ? void 0 : _c.getCurrentPage) === null || _d === void 0 ? void 0 : _d.call(_c)) !== null && _e !== void 0 ? _e : 0) + 1; // 1-based for display\n const totalPages = (_k = (_g = (_f = apiAny.paginationGetTotalPages) === null || _f === void 0 ? void 0 : _f.call(apiAny)) !== null && _g !== void 0 ? _g : (_j = (_h = apiAny.paginationProxy) === null || _h === void 0 ? void 0 : _h.getTotalPages) === null || _j === void 0 ? void 0 : _j.call(_h)) !== null && _k !== void 0 ? _k : 1;\n const pageSize = (_m = (_l = apiAny.paginationGetPageSize) === null || _l === void 0 ? void 0 : _l.call(apiAny)) !== null && _m !== void 0 ? _m : (_p = (_o = apiAny.paginationProxy) === null || _o === void 0 ? void 0 : _o.getPageSize) === null || _p === void 0 ? void 0 : _p.call(_o);\n const rowCount = (_r = (_q = apiAny.paginationGetRowCount) === null || _q === void 0 ? void 0 : _q.call(apiAny)) !== null && _r !== void 0 ? _r : (_t = (_s = apiAny.paginationProxy) === null || _s === void 0 ? void 0 : _s.getMasterRowCount) === null || _t === void 0 ? void 0 : _t.call(_s);\n // Check if we're in server-side mode and if the total count is uncertain\n // Add null checks for test environment compatibility\n const isServerSide = ((_x = (_w = (_v = (_u = this.api).getModel) === null || _v === void 0 ? void 0 : _v.call(_u)) === null || _w === void 0 ? void 0 : _w.getType) === null || _x === void 0 ? void 0 : _x.call(_w)) === 'serverSide';\n const hasUncertainTotal = isServerSide && apiAny.paginationIsLastPageFound && !apiAny.paginationIsLastPageFound();\n // Update the page numbers\n this.pageNumberDisplay.textContent = currentPage.toString();\n this.pageNumberTotalDisplay.textContent = hasUncertainTotal ? 'more' : totalPages.toString();\n // Update accessibility attributes when showing \"more\"\n if (hasUncertainTotal) {\n this.pageNumberTotalDisplay.setAttribute('aria-label', 'More pages available');\n this.paginationSummaryPanel.setAttribute('aria-label', 'Row count summary with more data available');\n }\n else {\n this.pageNumberTotalDisplay.setAttribute('aria-label', 'Total number of pages');\n this.paginationSummaryPanel.setAttribute('aria-label', 'Row count summary');\n }\n // Update the row summary panel\n const startRow = (currentPage - 1) * pageSize + 1;\n const endRow = Math.min(currentPage * pageSize, rowCount);\n const totalDisplay = hasUncertainTotal ? 'more' : rowCount.toString();\n this.paginationSummaryPanel.textContent = `${rowCount > 0 ? startRow : 0} to ${endRow} of ${totalDisplay}`;\n // Update button states\n const isFirstPage = currentPage === 1;\n const isLastPage = hasUncertainTotal ? false : currentPage >= totalPages;\n this.updateButtonState(this.firstPageButton, isFirstPage);\n this.updateButtonState(this.prevPageButton, isFirstPage);\n this.updateButtonState(this.nextPageButton, isLastPage);\n // Disable \"last page\" button when we don't know the total (showing \"more\")\n this.updateButtonState(this.lastPageButton, hasUncertainTotal || isLastPage);\n // Update last page button accessibility when uncertain total\n if (hasUncertainTotal) {\n this.lastPageButton.setAttribute('aria-label', 'Last page unavailable - total number of pages unknown');\n this.lastPageButton.setAttribute('title', 'Cannot jump to last page when total is unknown');\n }\n else {\n this.lastPageButton.setAttribute('aria-label', 'Last Page');\n this.lastPageButton.removeAttribute('title');\n }\n }\n updateButtonState(button, disabled) {\n if (disabled) {\n button.classList.add('ag-disabled');\n button.setAttribute('aria-disabled', 'true');\n button.setAttribute('tabindex', '-1');\n }\n else {\n button.classList.remove('ag-disabled');\n button.setAttribute('aria-disabled', 'false');\n button.setAttribute('tabindex', '0');\n }\n }\n destroy() {\n // Remove event listeners\n if (this.api && this.paginationChangedHandler) {\n this.api.removeEventListener('paginationChanged', this.paginationChangedHandler);\n }\n this.api = null;\n this.paginationChangedHandler = null;\n }\n}\n","import { __awaiter } from \"tslib\";\nimport { delay, getCurrentDesignSystemPrefix } from '@genesislcap/foundation-utils';\n// Delay in milliseconds to keep the icon in disabled state for visual feedback\nconst RELOAD_DELAY = 500;\n/**\n * A status bar component that shows a refresh icon to reload the grid data\n * @public\n */\nexport class ReloadStatusBarComponent {\n constructor() {\n this.isReloading = false;\n }\n init(params) {\n this.params = params;\n this.element = document.createElement('div');\n this.element.classList.add('ag-status-panel', 'ag-reload-panel');\n this.element.setAttribute('data-test-id', 'grid-reload-panel');\n this.element.setAttribute('role', 'region');\n this.element.setAttribute('aria-label', 'Reload data controls');\n this.element.style.display = 'flex';\n this.element.style.alignItems = 'center';\n this.element.style.justifyContent = 'center';\n this.element.style.paddingLeft = 'var(--ag-grid-size)';\n this.element.style.height = 'var(--ag-status-bar-height)';\n // Detect the current design system prefix (rapid or zero)\n this.designSystemPrefix = getCurrentDesignSystemPrefix(this.element, 'zero');\n this.createRefreshIcon();\n this.createProgressRing();\n // Initially show the icon, hide the progress ring\n this.element.appendChild(this.refreshIcon);\n this.element.appendChild(this.progressRing);\n this.progressRing.style.display = 'none';\n }\n createProgressRing() {\n // Create the progress ring with the appropriate design system prefix\n this.progressRing = document.createElement(`${this.designSystemPrefix}-progress-ring`);\n this.progressRing.setAttribute('data-test-id', 'grid-reload-progress');\n this.progressRing.setAttribute('aria-label', 'Reloading data');\n // Set styles for the progress ring\n this.progressRing.style.width = '20px';\n this.progressRing.style.height = '20px';\n this.progressRing.style.margin = '4px';\n this.progressRing.style.display = 'none'; // Hidden by default\n }\n createRefreshIcon() {\n var _a, _b, _c, _d;\n // For design systems that support icons\n if (this.designSystemPrefix === 'zero' || this.designSystemPrefix === 'rapid') {\n this.refreshIcon = document.createElement(`${this.designSystemPrefix}-icon`);\n // Use custom icon if provided, otherwise default to 'refresh'\n const iconName = ((_a = this.params) === null || _a === void 0 ? void 0 : _a.icon) || 'refresh';\n this.refreshIcon.setAttribute('name', iconName);\n this.refreshIcon.setAttribute('aria-label', ((_b = this.params) === null || _b === void 0 ? void 0 : _b.tooltip) || 'Reload grid data');\n }\n else {\n // Fallback for systems without icon components\n this.refreshIcon = document.createElement('div');\n this.refreshIcon.textContent = '↻'; // Unicode refresh symbol\n this.refreshIcon.setAttribute('aria-label', ((_c = this.params) === null || _c === void 0 ? void 0 : _c.tooltip) || 'Reload grid data');\n }\n // Add accessibility attributes\n this.refreshIcon.setAttribute('data-test-id', 'grid-reload-button');\n this.refreshIcon.setAttribute('role', 'button');\n this.refreshIcon.setAttribute('tabindex', '0');\n // Set common styles for the icon - make it larger\n this.refreshIcon.style.cursor = 'pointer';\n this.refreshIcon.style.width = '28px';\n this.refreshIcon.style.height = '28px';\n this.refreshIcon.style.display = 'flex';\n this.refreshIcon.style.alignItems = 'center';\n this.refreshIcon.style.justifyContent = 'center';\n this.refreshIcon.style.fontSize = '20px'; // Increase text size for fallback icon\n // Add native tooltip if provided\n if ((_d = this.params) === null || _d === void 0 ? void 0 : _d.tooltip) {\n this.refreshIcon.setAttribute('title', this.params.tooltip);\n }\n // Add hover effect\n this.mouseoverHandler = () => {\n if (!this.isReloading) {\n this.refreshIcon.style.opacity = '0.7';\n }\n };\n this.refreshIcon.addEventListener('mouseover', this.mouseoverHandler);\n this.mouseoutHandler = () => {\n if (!this.isReloading) {\n this.refreshIcon.style.opacity = '1';\n }\n };\n this.refreshIcon.addEventListener('mouseout', this.mouseoutHandler);\n // Add click event listener\n this.clickHandler = () => __awaiter(this, void 0, void 0, function* () {\n if (this.isReloading)\n return; // Prevent multiple clicks\n try {\n this.showReloading(true);\n yield delay(RELOAD_DELAY);\n // Execute the reload action if provided\n if (this.params.onReload) {\n this.params.onReload();\n }\n // Reset the icon state\n this.showReloading(false);\n }\n catch (error) {\n // In case of error, ensure icon state is reset\n this.showReloading(false);\n }\n });\n this.refreshIcon.addEventListener('click', this.clickHandler);\n // Add keyboard support for accessibility\n this.refreshIcon.addEventListener('keydown', (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n // Trigger the same click handler\n this.clickHandler(new MouseEvent('click'));\n }\n });\n }\n /**\n * Show or hide the reloading state\n */\n showReloading(reloading) {\n this.isReloading = reloading;\n if (reloading) {\n // Hide the icon and show the progress ring\n this.refreshIcon.style.display = 'none';\n this.progressRing.style.display = 'inline-block';\n }\n else {\n // Show the icon and hide the progress ring\n this.refreshIcon.style.display = 'inline-flex';\n this.progressRing.style.display = 'none';\n }\n }\n updateParams(params) {\n var _a, _b;\n const prevParams = this.params;\n this.params = Object.assign(Object.assign({}, this.params), params);\n // If tooltip changed, update the title attribute and aria-label\n if ((prevParams === null || prevParams === void 0 ? void 0 : prevParams.tooltip) !== ((_a = this.params) === null || _a === void 0 ? void 0 : _a.tooltip)) {\n if ((_b = this.params) === null || _b === void 0 ? void 0 : _b.tooltip) {\n this.refreshIcon.setAttribute('title', this.params.tooltip);\n this.refreshIcon.setAttribute('aria-label', this.params.tooltip);\n }\n else {\n this.refreshIcon.removeAttribute('title');\n this.refreshIcon.setAttribute('aria-label', 'Reload grid data');\n }\n }\n }\n getGui() {\n return this.element;\n }\n destroy() {\n // Clean up event listeners\n if (this.refreshIcon) {\n this.refreshIcon.removeEventListener('mouseover', this.mouseoverHandler);\n this.refreshIcon.removeEventListener('mouseout', this.mouseoutHandler);\n this.refreshIcon.removeEventListener('click', this.clickHandler);\n }\n }\n}\n","/**\n * Row Count Status Bar Component for Server-Side Infinite Scroll\n * Displays current row count information for server-side grids without pagination.\n * For pagination scenarios, use PaginationStatusBarComponent instead.\n * @public\n */\nexport class RowCountStatusBarComponent {\n init(params) {\n this.api = params.api;\n this.element = document.createElement('div');\n this.element.classList.add('ag-status-name-value', 'ag-status-panel');\n this.element.setAttribute('data-test-id', 'grid-row-count-panel');\n this.element.setAttribute('role', 'status');\n const labelElement = document.createElement('span');\n labelElement.setAttribute('data-test-id', 'grid-row-count-label');\n labelElement.setAttribute('aria-hidden', 'true');\n labelElement.innerHTML = 'Rows:&nbsp;';\n this.rowCountDisplay = document.createElement('span');\n this.rowCountDisplay.classList.add('ag-status-name-value-value');\n this.rowCountDisplay.setAttribute('data-test-id', 'grid-row-count-value');\n this.rowCountDisplay.setAttribute('aria-hidden', 'true');\n this.element.appendChild(labelElement);\n this.element.appendChild(this.rowCountDisplay);\n this.updateDisplay();\n this.modelUpdatedHandler = () => {\n this.updateDisplay();\n };\n this.api.addEventListener('modelUpdated', this.modelUpdatedHandler);\n this.api.addEventListener('rowDataUpdated', this.modelUpdatedHandler);\n }\n updateDisplay() {\n var _a, _b, _c;\n if (!this.api || !this.rowCountDisplay)\n return;\n const apiAny = this.api;\n const rowCount = (_c = (_b = (_a = this.api).getDisplayedRowCount) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : 0;\n // Check if total count is uncertain (more data available)\n // Only show uncertain total if we have rows and there might be more\n const hasMoreRows = apiAny.paginationIsLastPageFound !== undefined && !apiAny.paginationIsLastPageFound();\n const hasUncertainTotal = hasMoreRows && rowCount > 0;\n const displayText = hasUncertainTotal ? `${rowCount - 1}+` : rowCount.toString();\n this.rowCountDisplay.textContent = displayText;\n const ariaLabel = hasUncertainTotal\n ? `Row count: ${rowCount} or more rows`\n : `Row count: ${rowCount} rows`;\n this.element.setAttribute('aria-label', ariaLabel);\n }\n getGui() {\n return this.element;\n }\n destroy() {\n if (this.api && this.modelUpdatedHandler) {\n this.api.removeEventListener('modelUpdated', this.modelUpdatedHandler);\n this.api.removeEventListener('rowDataUpdated', this.modelUpdatedHandler);\n }\n this.api = null;\n this.modelUpdatedHandler = null;\n }\n}\n","/**\n * Tooltip for errors that happen while syncing data with server after inline editing\n * @internal\n */\nexport class ErrorTooltip {\n init(params) {\n const eGui = (this.eGui = document.createElement('div'));\n const message = params.value;\n eGui.classList.add('custom-tooltip');\n eGui.style['background-color'] = '#f14376';\n eGui.style['border'] = '1px inside';\n eGui.style['border-color'] = '#2e3339';\n eGui.style['border-radius'] = '4px';\n eGui.style['padding'] = '5px';\n eGui.style['box-shadow'] = '0px 4px 10px 0px rgba(0, 0, 0, 0.25);';\n eGui.innerHTML = `<span style='color: #000000; font-size: 10px'>${message}</span>`;\n }\n getGui() {\n return this.eGui;\n }\n}\n","/**\n * Converts a ColDef to a ColumnState\n * @param colDef - The column definition to convert\n * @returns The corresponding ColumnState\n * @public\n */\nexport function convertColDefToColumnState(colDef) {\n return {\n colId: colDef.field || colDef.colId || '',\n hide: colDef.hide || false,\n width: colDef.width || null,\n pinned: colDef.pinned || null,\n sort: colDef.sort || null,\n sortIndex: colDef.sortIndex || null,\n aggFunc: colDef.aggFunc || null,\n rowGroup: colDef.rowGroup || false,\n rowGroupIndex: colDef.rowGroupIndex || null,\n pivot: colDef.pivot || false,\n pivotIndex: colDef.pivotIndex || null,\n flex: colDef.flex || null,\n };\n}\n/**\n * Converts an array of ColDef to an array of ColumnState\n * @param colDefs - The column definitions to convert\n * @returns The corresponding ColumnState array\n * @public\n */\nexport function convertColDefsToColumnStates(colDefs) {\n return colDefs.map(convertColDefToColumnState);\n}\n/**\n * Merges two arrays, one of `ColDef` and one of `ColumnState`, and deduplicates them.\n * @remarks ColDef uses `field` and ColumnState uses `colId` to identify columns.\n * @privateRemarks For restoring saved `ColumnState` but also keep custom renderers and other `ColDef` properties.\n * @public\n */\nexport function mergeAndDedupColDefWithColumnState(colDefs, columnStates) {\n const merged = {};\n const deduplicated = [];\n const fieldProp = 'field';\n const colIdProp = 'colId';\n columnStates.forEach((state) => {\n const matchingColDef = colDefs.find((item) => item[fieldProp] === state[colIdProp] ||\n (item[colIdProp] && item[colIdProp] === state[colIdProp]));\n if (matchingColDef) {\n const colDefStateMerge = Object.assign(Object.assign({}, matchingColDef), state);\n merged[matchingColDef[fieldProp]] = colDefStateMerge;\n deduplicated.push(colDefStateMerge);\n }\n });\n colDefs.forEach((def) => {\n if (!merged.hasOwnProperty(def[fieldProp])) {\n const newObj = Object.assign({}, def);\n merged[def[fieldProp]] = newObj;\n deduplicated.push(newObj);\n }\n });\n return deduplicated;\n}\n","/**\n * Extracts a user-friendly error message from a given error detail.\n * @param detail - The error detail, which can be a string, array, or object.\n * @returns A user-friendly error message.\n * @public\n */\nexport const extractErrorMessage = (detail) => {\n if (!detail)\n return '';\n if (typeof detail === 'string')\n return detail;\n if (Array.isArray(detail)) {\n return detail.map(extractErrorMessage).join(', ');\n }\n if (typeof detail === 'object') {\n if ('message' in detail && typeof detail.message === 'string')\n return detail.message;\n if ('TEXT' in detail && typeof detail.TEXT === 'string')\n return detail.TEXT;\n return JSON.stringify(detail);\n }\n return String(detail);\n};\n","import { createLogger } from '@genesislcap/foundation-logger';\n/**\n * Logger for the grid-pro package\n * @public\n */\nexport const logger = createLogger('grid-pro');\n","/**\n * Get the keys of the Metadata indexes map\n * @remarks This function will return a flat string array of all the keys in the \"metadata indexes\" map\n * @param data - the map data to have the keys extracted from\n * @returns the keys of the map\n * @public\n */\nexport function getAvailableIndexes(data) {\n const availabeIndexes = [];\n for (const [key] of data) {\n if (key) {\n availabeIndexes.push(key);\n }\n }\n return availabeIndexes;\n}\n/**\n * Get the values of the Metadata indexes map\n * @remarks This function will return a flat string array of all the values in the \"metadata indexes\" map\n * @param data - the map data to have the values extracted from\n * @returns the values of the map\n * @public\n */\nexport function getAvailableIndexFields(data) {\n const availableIndexFields = [];\n function traverse(items) {\n for (const item of items) {\n if (item !== null) {\n availableIndexFields.push(item);\n }\n }\n }\n for (const [key, value] of data) {\n if (key !== null && value !== null) {\n traverse(value);\n }\n }\n return availableIndexFields;\n}\n","/**\n * Convert string values from 'camelCase' to 'kebab-case'\n * @param value - The value to convert to Kebab case.\n * @returns The Kebab case result.\n * @public\n */\nexport const convertToKebabCase = (value) => value.replace(/([a-z])([A-Z])|\\s+/g, '$1-$2').toLowerCase();\n","import { __classPrivateFieldGet, __classPrivateFieldSet } from \"tslib\";\n/** @internal **/\nconst CLEANUP_TIMEOUT_MS = 10000;\n/**\n * @beta\n * Mixin class to expose `shouldRunConnect` and `shouldRunDisconnect`\n *\n * @remarks These can be used to control what lifecycle functionality is ran when the elements\n * are part of a custom layout. The class itself handles all events\n * @privateRemarks\n * #_ syntax is used for a javascript private method/variable\n * we can't use private/protected from typescript in an anonymous class like this\n */\nexport const LifecycleMixin = (Base) => { var _instances, __container, __latestTokenCode, __hasFirstLoaded, __cleanupTimeout, __shouldForceLifecycle, __blockLifecycleDueToTokenChange, __tryFindContainingLayout, _a; return _a = class extends Base {\n constructor(...args) {\n super(args);\n _instances.add(this);\n /** @internal **/\n __container.set(this, { _key: 'dom' });\n /**\n * If the token changes we suggest blocking the lifecycle methods\n * @internal\n **/\n __latestTokenCode.set(this, '');\n /**\n * Track first loaded to allow us to always run the connect lifecycle on the first load\n * @internal\n **/\n __hasFirstLoaded.set(this, false);\n /**\n * When you request to delete an item from the layout it will be removed from the DOM,\n * but the lifecycle might be blocked due to the same mechanism that we block the other\n * items.\n * This would block cleanup of the item, so we need to force a disconnection after a timeout\n * if this item hasn't reconnected within `CLEANUP_TIMEOUT_MS`.\n * @internal\n **/\n __cleanupTimeout.set(this, void 0);\n /**\n * Used to force lifecycle to run even if the token has changed, such as in instances where\n * we are forcing a disconnection due to this item being remove from the layout.\n * @internal\n **/\n __shouldForceLifecycle.set(this, false);\n }\n /**\n * @privateRemarks\n * Rather than using the basic implementation of cloning we run a copy constructor (deepClone)\n * and then manually clone the children too so they can intercept with an overriden cloneNode\n * if they want to\n */\n cloneNode(deep) {\n const thisClone = this.deepClone();\n if (deep) {\n Array.from(this.childNodes).forEach((child) => {\n thisClone.appendChild(child.cloneNode(true));\n });\n }\n return thisClone;\n }\n /**\n * @privateRemarks\n * Basic implementation of a copy constructor which creates a new element of the same class\n * and copies all attributes over.\n * None-trivial elements will likely want to override this function, call it using super.deepClone(),\n * and then perform extra setup such as copying properties, setting up event listeners\n */\n deepClone() {\n const copy = document.createElement(this.tagName.toLowerCase());\n this.getAttributeNames().forEach((at) => copy.setAttribute(at, this.getAttribute(at)));\n return copy;\n }\n /**\n * @beta\n * @returns - boolean controlling whether to run all disconnectedCallback lifecycle functionality\n */\n get shouldRunDisconnect() {\n if (__classPrivateFieldGet(this, __shouldForceLifecycle, \"f\")) {\n return true;\n }\n if (__classPrivateFieldGet(this, __container, \"f\")._key === 'dom') {\n return true;\n }\n if (__classPrivateFieldGet(this, __container, \"f\")._key === 'foundation-layout-cache') {\n return false;\n }\n // _key === 'foundation-layout'\n return !(__classPrivateFieldGet(this, __container, \"f\").dragging ||\n !__classPrivateFieldGet(this, __container, \"f\").hasFirstLoaded ||\n __classPrivateFieldGet(this, _instances, \"m\", __blockLifecycleDueToTokenChange).call(this, 'disconnect'));\n }\n /**\n * @beta\n * @returns - boolean controlling whether to run all connectedCallback lifecycle functionality\n * @privateRemarks\n * For now its just the same logic as shouldRunDisconnect\n */\n get shouldRunConnect() {\n if (__classPrivateFieldGet(this, __shouldForceLifecycle, \"f\")) {\n return true;\n }\n if (__classPrivateFieldGet(this, __container, \"f\")._key === 'dom') {\n return true;\n }\n if (__classPrivateFieldGet(this, __container, \"f\")._key === 'foundation-layout-cache') {\n return false;\n }\n // _key === 'foundation-layout'\n let connectionType = 'reconnect';\n if (__classPrivateFieldGet(this, __hasFirstLoaded, \"f\") === false) {\n __classPrivateFieldSet(this, __hasFirstLoaded, true, \"f\");\n connectionType = 'connect';\n }\n return !(__classPrivateFieldGet(this, __container, \"f\").dragging ||\n !__classPrivateFieldGet(this, __container, \"f\").hasFirstLoaded ||\n __classPrivateFieldGet(this, _instances, \"m\", __blockLifecycleDueToTokenChange).call(this, connectionType));\n }\n connectedCallback() {\n super.connectedCallback();\n if (__classPrivateFieldGet(this, __container, \"f\")._key !== 'foundation-layout') {\n __classPrivateFieldSet(this, __container, __classPrivateFieldGet(this, _instances, \"m\", __tryFindContainingLayout).call(this, this), \"f\");\n }\n }\n },\n __container = new WeakMap(),\n __latestTokenCode = new WeakMap(),\n __hasFirstLoaded = new WeakMap(),\n __cleanupTimeout = new WeakMap(),\n __shouldForceLifecycle = new WeakMap(),\n _instances = new WeakSet(),\n __blockLifecycleDueToTokenChange = function __blockLifecycleDueToTokenChange(lifecycleType) {\n var _b, _c;\n if (__classPrivateFieldGet(this, __container, \"f\")._key !== 'foundation-layout') {\n throw new Error('LifecycleMixin: should not be checking a token change if container not in the layout');\n }\n const tokensDifferent = __classPrivateFieldGet(this, __latestTokenCode, \"f\") !== __classPrivateFieldGet(this, __container, \"f\").lifecycleUpdateToken;\n let result = false;\n if (lifecycleType === 'connect') {\n // We always want to allow a first connection in the layout\n __classPrivateFieldSet(this, __latestTokenCode, (_b = __classPrivateFieldGet(this, __container, \"f\").lifecycleUpdateToken) !== null && _b !== void 0 ? _b : '', \"f\");\n }\n else if (lifecycleType === 'disconnect') {\n result = tokensDifferent;\n __classPrivateFieldSet(this, __cleanupTimeout, setTimeout(() => {\n __classPrivateFieldSet(this, __shouldForceLifecycle, result, \"f\");\n if (__classPrivateFieldGet(this, __shouldForceLifecycle, \"f\")) {\n this.disconnectedCallback();\n }\n }, CLEANUP_TIMEOUT_MS), \"f\");\n }\n else if (lifecycleType === 'reconnect') {\n result = tokensDifferent;\n __classPrivateFieldSet(this, __latestTokenCode, (_c = __classPrivateFieldGet(this, __container, \"f\").lifecycleUpdateToken) !== null && _c !== void 0 ? _c : '', \"f\");\n clearTimeout(__classPrivateFieldGet(this, __cleanupTimeout, \"f\"));\n }\n return result;\n },\n __tryFindContainingLayout = function __tryFindContainingLayout(e) {\n var _b;\n /**\n * This is a special case where the element is part of the layout cache\n * signified by a symbol put on the document cache root\n */\n if (e.getRootNode()[layoutCacheDocument] === true) {\n return { _key: 'foundation-layout-cache' };\n }\n /**\n * If this happens we have found the root of the document\n * without finding a containing FoundationLayout\n * hence, this item is not in a custom layout\n */\n if (e.getRootNode() instanceof Document || !((_b = e.getRootNode()) === null || _b === void 0 ? void 0 : _b.host)) {\n return { _key: 'dom' };\n }\n const shadowHost = e.getRootNode().host;\n if (shadowHost.class === 'FoundationLayoutMain') {\n const layoutHost = shadowHost;\n layoutHost._key = 'foundation-layout';\n return layoutHost;\n }\n return __classPrivateFieldGet(this, _instances, \"m\", __tryFindContainingLayout).call(this, shadowHost);\n },\n _a; };\n/**\n * Stored on the layout's internal cache to signify that the document is not part of the DOM\n * @public\n */\nexport const layoutCacheDocument = Symbol('layout-cache-document');\n","/**\n * Delay for a given number of milliseconds\n * @param ms - The number of milliseconds to delay\n * @returns A promise that resolves after the given number of milliseconds\n * @public\n * @example\n * ```ts\n * await delay(1000);\n * console.log('1 second later');\n * ```\n */\nexport const delay = (ms) => new Promise((resolve) => {\n setTimeout(resolve, ms);\n});\n","import { logger } from './logger';\n/**\n * Inserts a CSS rule into the document by creating a new style element or using an existing one with the specified ID.\n * Returns a function that can be called to remove the rule from the document.\n * @public\n * @param cssRule - The CSS rule to insert.\n * @param styleElementId - The ID of the style element to use or create.\n * @returns A function that removes the rule from the document.\n */\nexport const insertDocumentCSSRule = (cssRule, styleElementId) => {\n var _a;\n let styleElement = document.getElementById(styleElementId);\n if (styleElement) {\n logger.debug(`\n An element with the id of '${styleElementId}' already exists and likely has the css rules applied.\n `);\n return;\n }\n const headElement = (_a = document.head) !== null && _a !== void 0 ? _a : document.getElementsByTagName('head')[0];\n styleElement = document.createElement('style');\n styleElement.id = styleElementId;\n headElement.appendChild(styleElement);\n // Check if the CSS rule contains multiple rules (contains multiple closing braces)\n const ruleCount = (cssRule.match(/}/g) || []).length;\n if (ruleCount > 1) {\n // Multiple rules: use textContent to avoid insertRule limitations\n styleElement.textContent = cssRule;\n return () => {\n if (!styleElement) {\n return;\n }\n headElement.removeChild(styleElement);\n };\n }\n else {\n // Single rule: use insertRule for consistency with existing behavior\n const styleIndex = styleElement.sheet.insertRule(cssRule);\n return () => {\n if (!styleElement) {\n return;\n }\n styleElement.sheet.deleteRule(styleIndex);\n headElement.removeChild(styleElement);\n };\n }\n};\n/**\n * Inserts a CSS link into the document if it doesn't already exist.\n * @public\n * @param href - The URL of the CSS file to insert.\n */\nexport const insertDocumentLink = (href) => {\n const links = document.head.querySelectorAll('link');\n // Already been injected\n for (const index in links)\n if (links[index].href === href)\n return;\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = href;\n document.head.appendChild(link);\n};\n/**\n * Recursively gather all elements including those in shadow DOM\n * @public\n */\nexport function getAllElements(root) {\n const elements = [];\n const processedShadowRoots = new Set();\n function collectElements(node) {\n // Get all elements in the current node\n const nodeElements = Array.from(node.querySelectorAll('*'));\n elements.push(...nodeElements);\n // Process shadow roots\n nodeElements.forEach((el) => {\n if (el.shadowRoot && !processedShadowRoots.has(el.shadowRoot)) {\n processedShadowRoots.add(el.shadowRoot);\n collectElements(el.shadowRoot);\n }\n });\n }\n collectElements(root);\n return elements;\n}\n","import { createLogger } from '@genesislcap/foundation-logger';\n/**\n * Logger for the foundation-utils package\n * @public\n */\nexport const logger = createLogger('foundation-utils');\n"],"names":["DateEditor","FoundationElement","init","params","this","value","dateFormat","withTime","inputType","actualWidth","column","getActualWidth","getGui","refresh","getValue","isPopup","changeHandler","event","dateValue","target","control","valueAsNumber","isNaN","undefined","afterGuiAttached","input","focus","isCancelBeforeStart","data","observable","prototype","agDateEditorStyles","css","getDateEditorTemplate","prefix","html","ref","x","format","c","foundationDateEditor","compose","baseName","styles","template","MultiselectEditor","selectedOptions","selectedOptionsCallback","then","split","destroy","detail","agMultiselectEditorStyles","getMultiselectEditorTemplate","designSystem","async","allOptionsResourceName","valueField","labelField","datasourceOptions","foundationMultiselectEditor","NumberEditor","parseFloat","onChange","agNumberEditorStyles","getNumberEditorTemplate","withFormatting","formatOptions","String","placeholder","disabled","foundationNumberEditor","SelectEditor","combobox","open","_a","agSelectEditorStyles","getSelectEditorTemplate","position","allowCustomOptions","values","foundationSelectEditor","StringEditor","agStringEditorStyles","getStringEditorTemplate","foundationStringEditor","ActionRenderer","eGridCell","addEventListener","key","ENTER","clickHandler","isDisabled","error","actionClick","pendingAction","dataTestId","_b","uniqueFieldName","create","DesignToken","actionHeightMultiplier","withDefault","agActionRendererStyles","foundationGridProActionRenderer","actionButtonStyle","appearance","actionName","ActionsMenuRenderer","foundationGridProActionsMenuRenderer","headerName","getActionsMenuDef","actions","overrideDef","customActionsOpenerName","isVertical","buttonAppearance","actionsMenuDef","cellRenderer","actionsMenu","cellRendererParams","buttonText","cellStyle","border","overflow","field","width","Object","assign","BooleanRenderer","colDef","editable","selected","userInputHandler","e","MouseEvent","type","button","KeyboardEvent","api","getEditingCells","find","cell","rowIndex","node","getInstanceId","eventStarted","getColDef","rowPinned","dispatchEvent","valueChanged","setDataValue","eventStopped","oldValue","newValue","getDataTestId","agBooleanRendererStyles","getAgBooleanRendererTemplate","checkboxComponent","foundationAgBooleanRenderer","EditableRenderer","valueFormatted","formatValue","agEditableRendererStyles","getAgEditableRendererTemplate","foundationAgEditableRenderer","agIconRendererStyles","hasIconSrc","iconSrc","length","hasIconName","iconName","getIconRendererTemplate","iconComponent","showHover","_c","when","iconHeight","iconColor","classes","iconSize","variant","secondaryIcon","secondaryIconColor","IconRenderer","foundationIconRenderer","SelectRenderer","constructor","super","arguments","selectionChanged","onSelect","accessor","agSelectRendererStyles","getSelectRendererTemplate","selectComponent","optionComponent","defaultValue","repeat","options","name","parent","tooltip","displayName","foundationAgSelectRenderer","agStatusPillRendererStyles","getStatusPillRendererTemplate","backgroundColor","iconInitial","iconInitialBackgroundColor","textColor","text","dateCountdownUnit","dateCountdown","dateCountdownCompletedMessage","hideWhenCountdownCompleted","dateCountdownVisibleAfter","StatusPillRenderer","foundationStatusPillRenderer","AgTextFieldRenderer","textValue","textChanged","includes","textField","caretPos","selectionStart","stopPropagation","textFieldRendererStyles","getTextFieldRendererTemplate","textComponent","suffix","hideAffixFromScreenReader","maxLength","foundationAgTextFieldRenderer","AgTextRenderer","textRendererStyles","getTextRendererTemplate","foundationAgTextRenderer","setValueWithAccessor","indexOf","accessorPieces","currentObject","fieldPiece","shift","GridProCell","connectedCallback","wrapperGridProColumn","parentElement","renderer","definition","rendererParams","slottedAgRendererChanged","customElement","CellTemplate","slotted","GridProColumn","slottedAgCellChanged","deepClone","copy","keys","forEach","bind","structuredClone","ColumnTemplate","criteriaDelimiter","criteriaJoin","GenesisGridDatasourceElement","isSnapshot","maxRows","MAX_ROWS_250","maxView","MAX_VIEW_1000","movingView","reverse","disablePolling","offset","DEFAULT_REQ_REP_OFFSET","pollingInterval","REQ_REP_POLLING_INTERVAL_MS","pollTriggerEvents","requestAutoSetup","restartOnReconnection","criteriaFromFilters","Map","update","rowId","rowIdAttr","isRequestServer","REQUEST_SERVER_ROW_ID","DATASERVER_ROW_ID","hasDefaultRowId","defaultRowIdByResourceType","criteria","buildCriteria","orderBy","resourceName","viewNumber","fields","request","concat","Array","from","normalisedCriteria","join","setFilter","fieldName","newFilter","set","next","removeFilter","delete","datasource","status","REQUEST_SERVER","datasourceStatusChanged","prev","handleErrors","errors","message","isArray","map","item","TEXT","$emit","clearErrors","connected","initializeDatasource","options_1","fetchMeta","startStream","connect","isConnected","getMetadata","catch","host","errorMessage","errorType","Error","OperationType","attr","mode","attribute","converter","nullableNumberConverter","volatile","GridProBaseDatasource","dataSubWasLoggedOff","keepColDefsOnClearRowData","rowData","transactionData","add","remove","_isDisconnected","subscribeToConnection","isConnected$","connectionSub","unsubscribe","subscribe","isDisconnected","setDisconnected","reloadResourceData","unsubscribeFromConnection","generateColumnDefsFromMetadata","fieldsMetadata","getFilterParamsByFieldType","getFilterByFieldType","flatMap","colDefBase","filterParams","STRING","cellEditor","stringEditor","NUMBER","numberEditor","BOOLEAN","boolean","DATE","valueFormatter","dateEditor","DATETIME","cellEditorParams","ENUM","enumOptions","selectEditor","option","label","warn","filter","handleStreamInserts","insertedRows","addIndex","currentAddIndex","insertData","has","existingData","get","updatedRow","push","handleStreamDeletes","deletedRows","deleteData","rowToBeDeleted","fromEntries","obj","handleStreamUpdates","updatedRows","updateData","rowToBeUpdated","applyAllTransactions","_d","_e","_f","loadingFinished","size","noDataAvailable","applyMappedTransaction","Add","Remove","Update","transaction","operation","mappedTransaction","mapTransaction","dataChanged","changes","applyTransaction","operations","rowDataMapper","loadMore","restart","disconnected","getStatusBarActionConfig","configValue","enabled","config","getDatasourceStatusBarPanels","isServerSide","statusBarConfig","additionalPanels","loadMoreConfig","loadMoreParams","onLoadMore","statusPanel","statusPanelParams","align","pagination","reloadConfig","reload","reloadParams","onReload","icon","baseDatasourceEventNames","GridProClientSideDatasource","errorHandlerDialogStyles","getErrorHandlerDialogTemplate","gridErrorItems","dialogTag","buttonTag","hideDatasourceError","gridProDatasource","toLowerCase","getServerSideFilterParamsByFieldType","buttons","closeOnApply","closeOnClear","maxNumConditions","filterOptions","displayKey","predicate","_","cellValue","numberOfInputs","comparator","filterLocalDateAtMidnight","cellValueTime","Date","setHours","filterValueTime","getTime","browserDatePicker","BaseServerSideDatasource","serverRowsCount","clientRowsCount","moreRows","calculatedRowsCount","currentSequenceId","reloadResourceDataFunc","errorHandlerFunc","resourceParams","originalCriteriaMatch","getResourceParam","resourceIndexes","resourceColDefs","zeroBasedViewNumber","pagingMode","criteriaOnlyRequest","DETAILS","setResourceParam","getRows","setupFiltering","filterModelBeingApplied","filterModel","filtersAreBeingApplied","filtersAreGettingCleaned","filterModelBeingAppliedDiffersFromCurrent","JSON","stringify","currentFilterModel","refreshDatasource","buildCriteriaMatchFromFilters","setupFilteringAndSorting","setupSorting","sourceRef","lastSuccessRowData","updateResourceParams","getOrderByAndToBeSortedColIds","searchValue","entries","searchIndex","findIndex","toBeSorted","splice","criteriaMatch","filters","getFiltersByType","k","model","selectedValues","colMeta","o","NAME","allValues","VALID_VALUES","every","v","orConditions","val","safeVal","replace","valueTwo","filterTo","dateFrom","dateTo","now","todayStr","getFullYear","getMonth","toString","padStart","getDate","filterType","getPageNumber","start","recordsPerPage","totalRecords","Math","floor","currentPageIndex","ceil","getCorrectRowCount","currentLastRowNumber","endRow","defaultCount","min","rowCount","isNotFirstViewNumber","getEffectivePagingMode","DataserverServerSideDatasource","createDataserverStreamFunc","_super","dataserverStreamSubscription","call","isNewPageSize","success","dataserverStream","startRow","Number","VIEW_NUMBER","getMoreRows","applyResult","dataserverResult","DOM","queueUpdate","CRITERIA_MATCH","updatedInfo","snapshot","MAX_ROWS","MAX_VIEW","ROW","ROWS_COUNT","applyServerSideData","result","messageType","MESSAGE_TYPE","LOGOFF_ACK","MSG_NACK","fail","MORE_ROWS","successRowData","nextMessage","dataServerResultFilter","d","handleCurrentStreamLoad","SEQUENCE_ID","SOURCE_REF","toBeAppliedSortModel","sortModel","currentSortModel","ORDER_BY","REVERSE","coldIdBeingSorted","colId","sortTypeBeingApplied","sort","orderByAndToBeSortedColIds","availableIndexes","availableIndexFields","debug","rows","inserts","ReqRepServerSideDatasource","discoveredTotalRowCount","currentNextOffset","createReqRepRequestFunc","createReqRepStreamFunc","onPollingUpdate","onPollingUpdateFunc","resetPreviousPollResult","resetPreviousPollResultFunc","usePolling","debouncedCreateStream","createPollingStream","OFFSET","effectivePagingMode","updatePaginationParams","requestParams","buildRequestDetails","requestResult","isLastView","determineIsLastView","schedulePollingStream","hasMoreRowsInResult","NEXT_VIEW","preCheckRequestParams","moreRowsPreCheck","REPLY","NEXT_OFFSET","destroyPollingStream","currentBatchSize","reply","insertDataRowId","noRowIdMessage","logger","tempId","uuid","createId","cancel","currentStreamParams","stream","reqRepPollingStream","reqRepPollingDatasource","reqRepPollingSubscription","receivedMessage","ERROR","baseDetails","GridProServerSideDatasource","liveUpdates","sortIndicatorCSSDestroy","previousPollResult","resourceNameChanged","criteriaChanged","oldCriteria","newCriteria","criteriaIsNotDuplicate","normaliseCriteria","ssrmDatasource","shouldRunConnect","disconnectedCallback","shouldRunDisconnect","deferredGridOptions","deferredColumnStates","liveUpdatesStream","cacheFilterConfig","clearRowData","refreshServerSide","purge","setServerSideDatasource","loadingStarted","applyServerSideSortIndicatorStyling","removeServerSideSortIndicatorStyling","addGridCssClass","className","removeGridCssClass","gridOptions","getRowId","getRowStyle","ROW_REF","color","cacheBlockSize","defaultColDef","resizable","sortable","unSortIcon","rowBuffer","rowModelType","suppressServerSideInfiniteScroll","suppressMultiSort","onFilterChanged","onSortChanged","onPaginationChanged","initialize","ready","dataInit","indexes","getResourceIndexes","availableSortableFields","fieldMetadata","originalFieldDef","agColumnDefs","getAgColumnDefs","schemaUpdated","schema","metadata","createReqRepRequest","createReqRepStream","applyReqRepPollingUpdate","requestOnlyParams","createDataserverStream","dataserverOnlyParams","filtersRestored","once","newPage","pollingDatasource","withColumnDefs","dataCleared","includeSchema","applyServerSideTransaction","avaialbleIndexes","resourceIndexesMap","allSortableFields","Set","index","FIELDS","fieldsFromIndexes","additionalFields","existingParams","_g","_h","currentOffset","baseMaxRows","totalRowsToFetch","clear","polledData","startsWith","row","currentPollMap","rowsToUpdate","rowsToInsert","rowsToDelete","previousRow","serializer","serialize","added","updated","removed","totalInPoll","streamOnMessage","QUERY_UPDATE","updates","deletes","netRowChange","clientNetRowChange","onError","colDefsFromGenesisData","availableCriteriaFields","agHeadCSS","agGridAlpineFontFace","agGridBalhamFontFace","agGridMaterialFontFace","agThemeFontFaceMap","alpine","alpineDark","balham","balhamDark","material","defaultAgGridFontFace","agGridCSS","agThemeAlpineNofontsCSS","agThemeBalhamNofontsCSS","agThemeMaterialNofontsCSS","agExternalStockStyles","datasourceEventNames","dataLoaded","moreDataAvailable","sizeChanged","gridProGenesisDatasourceEventNames","moreRowsChanged","getClientSideFilterParamsByFieldType","GridProGenesisDatasource","cachedRowArray","requiresFullRowDataAndColDefs","_lastMoreRows","_isMoreRowsResult","_nextOffset","_loadMoreCount","initialized","requestChanged","oldRequest","newRequest","requestIsNotDuplicate","colDefsDeepClone","columnDefinition","definitionCopy","fieldKey","loadResourceData","updateSub","pipe","skip","debounceTime","tap","f","dataSub","_sourceRef","BehaviorSubject","deinit","reset","refreshRows","updateCachedRowArray","emitDataLoaded","setRowData","emitDataChanged","isInitialLoad","updateLoadMoreCount","withFullInit","requiresMetadataFetch","handleSnapshot","catchError","err","hasRowsCountInResult","hasNextOffsetInResult","resourceType","updateLoadMoreStatus","handleStreamResult","moreRowsDetail","applyRequestServerData","applyDataserverData","hasMoreData","requestServerResult","previousSize","requestServerData","noRowIdError","handleSizeChanged","match","dataServerResult","oldSize","newSize","DATASERVER","getEnumFilterParams","getColumnType","metadataType","dateValueFormatter","dateTimeValueFormatter","formatDateExtra","epoch","toISOString","slice","DEBOUNCED_RESIZE_TIME","gridProEventNames","datasourceErrorClose","gridProErrorNames","unknown","AG_PROPERTIES","AG_NUMBER_PROPERTIES","AG_BOOLEAN_PROPERTIES","AG_NUMBER_PROPERTIES_SET","AG_BOOLEAN_PROPERTIES_SET","AG_PROPERTIES_SET","toBoolean","toUpperCase","copyAttributesToGridOptions","component","pGridOptions","coercedValue","toNumber","G","registerModules","GridPro","rowDataChanged","initialised","gridApi","themeChanged","classNames","destroyFontFace","insertFontFace","getfilterModel","persistFilterModelKey","_filterConfig","statePersistence","getFilterModel","setFilterModel","saveFilterModel","cachedTotalColumnWidth","columnCount","autoCellRendererByType","onlyTemplateColDefs","gridAutosizingEnabled","sizeColumnsToContent","sizeColumnsToFit","asyncAdd","asyncRemove","asyncUpdate","enableCellFlashing","enabledRowFlashing","enableRowFlashing","defaultColumnConfig","gridFontFace","columnComponentName","theme","themeMode","withStatusBar","rehydrationAttempted","eventHandlers","gridEventsQueue","registeredGridEvents","agAttributes","agPropertiesMap","reduce","property","hideDataSourceError","handleBaseDatasourceError","handleInitialize","handleDataLoaded","handleDataChanged","handleSchemaUpdated","handleDataCleared","handleLoadingStarted","handleLoadingFinished","handleNoDataAvailable","handleFiltersRestored","handleMoreDataAvailable","handleDatasourceError","handleDatasourceDestroy","handleRefreshServerSide","handleSetServerSideDatasource","handleAddGridCssClass","handleRemoveGridCssClass","handleApplyServerSideTransaction","eventType","listener","PUBLIC_EVENTS","addGridEventListener","handleError","gridProError","removeAttribute","visibilityObserverCleanup","gridVisible","debouncedColumnAutosize","eventName","handler","defineProperty","agAttributeChangedCallback","enumerable","configurable","paginationPageSize","DEFAULT_PAGINATION_PAGE_SIZE","removeEventListener","refreshCells","force","invalidateColumnWidthCache","columnDefinitions","getColumnDefs","columnState","columnApi","getColumnState","agGridOptions","columnDefs","initGrid","applyTransactionAsync","flashAddedCells","rowNodes","flashCells","preSetColumnDefs","colDefs","getColumnDef","colDefsMergedWithTemplateDefs","mergeAllColumnDefsAndStates","col","rowGroup","pivot","setColumnDefs","flushAsyncTransactions","showLoadingOverlay","hideOverlay","showNoRowsOverlay","restoreCachedFilterConfig","statusBar","getStatusPanel","updateParams","setAttribute","clearLocalGridOptions","gridElement","gridSlot","classList","callback","applyServerSideTransactionAsync","combineAllGridComponents","gridOptionsComponents","defaultFoundationAgComponents","action","statusPill","select","multiselectEditor","labelValue","gridComponents","statePersistanceEnabled","persistColumnStateKey","getSelectedRows","rowSelectionMode","rowSelection","getCellRanges","getCellRangeRowData","enableRangeSelection","focusedCell","getFocusedCell","rowNode","getDisplayedRowAtIndex","cellRanges","range","startIndex","endIndex","some","existing","hasSelectedRows","updateLabelValueStatusBar","debounced","clearTimeout","setTimeout","removeConfigWidthsToAutosize","colState","saveColumnState","allHeadersHidden","hide","getColumn","Boolean","getSavedColumnState","deleteColumnState","resetToDefault","applyColumnState","state","applyOrder","resetColumnState","handleColumnSizing","restoreColumnState","gridParams","globalEventListener","querySelector","debounceSaveColumnState","debouceSaveFiltermodel","gridOnChangeCallback","attributes","attrName","components","onGridReady","onFirstDataRendered","rest","derivedOptions","gridOptionsConfig","enableCellChangeFlash","suppressDragLeaveHidesColumns","eventsAndCallbacks","EVENT_GRID_READY","gridId","id","onColumnPinned","onColumnResized","onColumnMoved","onDisplayedColumnsChanged","filterChangedEvent","onGridSizeChanged","hasGetRowId","setupPaginationAndStatusBar","setLocalGridOptions","firstChild","removeChild","agGrid","applyTemplateDefinitions","deferredColumnDefsOrState","deprecated","columnDefs_1","columnDefinitionsFromMetadata","colDefFromMetadata","headerCaseType","changeCaseByType","templateColumnDefs","querySelectorAll","templateColumn","columnDef","metadataValues","cellRendererSelector","tooltipComponent","tooltipValueGetter","cellClassRules","metadataColumnDef","templateColumnKeys","colDefsToReturn","g","savedColumnState","panelExists","statusPanelType","panels","panel","addRowCountPanel","statusPanels","isPaginationEnabled","rowCountStatusPanel","addMaxRowsPanel","addAggregationPanel","aggregation","addDatasourcePanels","newDatasourcePanels","addPaginationPanel","suppressScrollOnNewData","suppressPaginationPanel","newUserDefinedPanels","handleBothSizingModes","handleIndividualSizingModes","calculateTotalColumnWidth","getGridWidth","autoSizeAllColumns","allColumns","getAllGridColumns","currentColumnCount","sum","gridWidth","clientWidth","observedAttributes","lowerCasedPropertyNames","kebabCasePropertyNames","attName","gridPropertyName","changeObject","currentValue","processOnChange","eventLowerCase","browserEvent","Event","agGridDetails","callbackMethod","fontFaceRule","newDestroy","fontFaceDestroy","foundationGridProShadowOptions","defaultGridProConfig","shadowOptions","foundationGridPro","foundationGridProStyles","getGridProTemplate","customErrorHandlerTemplate","gridProTemplate","AgGridCSSVars","AgGridTheme","agThemeTokenMapClassname","themeName","agThemeFontsId","agThemeTokenMapCSS","tokenMap","CSSVarsTokenMapper","GridProRendererTypes","GridProStatusBarTypes","GRID_READY_EVENT","EDITED_COLUMN_FIELD","ERROR_COLUMN_FIELD","defaultGridOptionsConfig","GridOptionsConfig","DI","createInterface","instance","GridProCaseType","DEFAULT_STATUS_BAR_CONFIG","LocalStorageStatePersistence","localStorageGridOptions","session","getLocalStorageItem","allGridOptions","parse","existingOptions","setLocalStorageItem","StatePersistence","singleton","LabelValueStatusBarComponent","element","document","createElement","currentParams","updateDisplay","style","display","labelElement","appendChild","innerHTML","valueElement","LoadMoreStatusBarComponent","buttonLabel","isLoading","isLeftAligned","alignItems","gridOptionsService","justifyContent","paddingLeft","paddingRight","height","designSystemPrefix","createProgressRing","createLoadMoreButton","updateButtonVisibility","loadMoreButton","progressRing","margin","textContent","minWidth","textAlign","lineHeight","updateAriaLabel","showLoading","ariaLabel","loading","prevParams","PaginationStatusBarComponent","createPaginationPanel","paginationChangedHandler","paginationPanel","paginationSummaryPanel","firstPageButton","createPaginationButton","prevPageButton","descriptionPanel","pageStartDisplay","pageNumberDisplay","pageOfDisplay","pageNumberTotalDisplay","nextPageButton","lastPageButton","createTextNode","addPaginationEventListeners","goToPage","preventDefault","iconSpan","substring","page","apiAny","directMethod","proxyMethod","first","previous","last","paginationProxy","_j","_k","_l","_m","_o","_p","_q","_r","_s","_t","_u","_v","_w","_x","currentPage","paginationGetCurrentPage","getCurrentPage","totalPages","paginationGetTotalPages","getTotalPages","pageSize","paginationGetPageSize","getPageSize","paginationGetRowCount","getMasterRowCount","hasUncertainTotal","getModel","getType","paginationIsLastPageFound","totalDisplay","isFirstPage","isLastPage","updateButtonState","ReloadStatusBarComponent","isReloading","createRefreshIcon","refreshIcon","cursor","fontSize","mouseoverHandler","opacity","mouseoutHandler","showReloading","reloading","RowCountStatusBarComponent","rowCountDisplay","modelUpdatedHandler","getDisplayedRowCount","displayText","ErrorTooltip","eGui","convertColDefToColumnState","pinned","sortIndex","aggFunc","rowGroupIndex","pivotIndex","flex","convertColDefsToColumnStates","mergeAndDedupColDefWithColumnState","columnStates","merged","deduplicated","fieldProp","colIdProp","matchingColDef","colDefStateMerge","def","hasOwnProperty","newObj","extractErrorMessage","createLogger","getAvailableIndexes","availabeIndexes","getAvailableIndexFields","traverse","items","convertToKebabCase","LifecycleMixin","Base","_instances","__container","__latestTokenCode","__hasFirstLoaded","__cleanupTimeout","__shouldForceLifecycle","__blockLifecycleDueToTokenChange","__tryFindContainingLayout","args","_key","cloneNode","deep","thisClone","childNodes","child","tagName","getAttributeNames","at","getAttribute","dragging","hasFirstLoaded","connectionType","WeakMap","WeakSet","lifecycleType","tokensDifferent","lifecycleUpdateToken","getRootNode","layoutCacheDocument","Document","shadowHost","class","layoutHost","Symbol","delay","ms","Promise","resolve","insertDocumentCSSRule","cssRule","styleElementId","styleElement","getElementById","headElement","head","getElementsByTagName","styleIndex","sheet","insertRule","deleteRule","getAllElements","root","elements","processedShadowRoots","collectElements","nodeElements","el","shadowRoot"],"sourceRoot":""}
1
+ {"version":3,"file":"445.445.xxxxxxxxxxxxxxxxxxxx.js","mappings":"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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBCDtB,MAAMmvB,EAA0B,EAAAnvB,GAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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CA,UACA,sBACA,oBACA,qBACA,eACA,eACA,aACA,cACA,mBACA,sBACA,cACA,WACA,YACA,kBACA,YACA,eACA,oBACA,wBACA,oBACA,yBACA,uBACA,2BACA,6BACA,kBACA,mBACA,kCACA,mBACA,mBACA,oBACA,qBACA,iBACA,0BACA,4BACA,iBACA,6BACA,0BACA,sBACA,2BACA,iBACA,gBACA,WACA,wCACA,4BACA,wBACA,oBACA,2BACA,6BACA,2BACA,QACA,wBACA,wBACA,uBACA,qBACA,0BACA,2BACA,mBACA,yBACA,aACA,oBACA,kBACA,kBACA,yBACA,wBACA,mBACA,uBACA,4BACA,8BACA,yBACA,2BACA,uBACA,oBACA,mBACA,+BACA,YACA,gBACA,sBACA,iCACA,sBACA,gCACA,wBACA,gCACA,+BACA,6BACA,qCACA,8BACA,yBACA,8BACA,YACA,0BACA,+BACA,yBACA,4BACA,mBACA,oBACA,cACA,uBACA,4BACA,kCACA,YACA,oBACA,mBACA,iBACA,kBACA,8BACA,kBACA,kBACA,qBACA,0BACA,uBACA,uBACA,aACA,yBACA,0BACA,kCACA,sBACA,mBACA,sCACA,iBACA,eACA,0BACA,aACA,yBACA,8BACA,yBACA,sBACA,oBACA,WACA,eACA,8BACA,0BACA,iBACA,6BACA,0BACA,4BACA,uBACA,yBACA,+BACA,eACA,8BACA,gCACA,gCACA,0BACA,gCACA,oCACA,uCACA,oBACA,iBACA,oBACA,8BACA,sBACA,gCACA,gBACA,0BACA,gCACA,4BACA,sBACA,kCACA,gCACA,0BACA,4BACA,yBACA,2BACA,0BACA,kBACA,uBACA,4CACA,gCACA,sBACA,qBACA,uBACA,UACA,kBACA,eACA,4BACA,+BACA,uBACA,4CACA,+BACA,kBACA,mCACA,4BACA,6BACA,yBACA,iBACA,yBACA,mBACA,kBACA,yBACA,8BACA,2BACA,gCACA,wBACA,kBACA,WACA,8BACA,cACA,mBACA,4BACA,wBACA,iCACA,sBACA,+BACA,0BACA,mCACA,yBACA,kCACA,qBACA,8BACA,gBACA,0BACA,eACA,cACA,cACA,sBACA,mBACA,uBACA,0BACA,iBACA,eACA,iBACA,kBACA,uBACA,kBACA,qBACA,gBACA,2BACA,cACA,mBACA,gBACA,cACA,cACA,eACA,4BACA,iCACA,4BACA,2BACA,wBACA,oBACA,uBACA,uBACA,gBACA,+BACA,2BACA,gCACA,iCACA,uBACA,8BACA,8BACA,WACA,qBAOSC,EAAuB,CAChC,YACA,kBACA,YACA,eACA,oBACA,wBACA,oBACA,yBACA,uBACA,2BACA,6BACA,kBACA,mBACA,kCACA,mBACA,mBACA,oBACA,qBACA,iBACA,0BACA,4BACA,iBACA,6BACA,0BACA,sBACA,2BACA,iBACA,gBACA,YAOSC,EAAwB,CACjC,wCACA,4BACA,wBACA,oBACA,2BACA,6BACA,2BACA,QACA,wBACA,wBACA,uBACA,qBACA,0BACA,2BACA,mBACA,yBACA,aACA,oBACA,kBACA,kBACA,yBACA,wBACA,mBACA,uBACA,4BACA,8BACA,yBACA,2BACA,uBACA,oBACA,mBACA,+BACA,YACA,gBACA,sBACA,iCACA,sBACA,gCACA,wBACA,gCACA,+BACA,6BACA,qCACA,8BACA,yBACA,8BACA,YACA,0BACA,+BACA,yBACA,4BACA,mBACA,oBACA,cACA,uBACA,4BACA,kCACA,YACA,oBACA,mBACA,iBACA,kBACA,8BACA,kBACA,kBACA,qBACA,0BACA,uBACA,uBACA,aACA,yBACA,0BACA,kCACA,sBACA,mBACA,sCACA,iBACA,eACA,0BACA,aACA,yBACA,8BACA,yBACA,sBACA,oBACA,WACA,eACA,8BACA,0BACA,iBACA,6BACA,0BACA,4BACA,uBACA,yBACA,+BACA,eACA,8BACA,gCACA,gCACA,0BACA,gCACA,oCACA,uCACA,oBACA,iBACA,oBACA,8BACA,sBACA,gCACA,gBACA,0BACA,gCACA,4BACA,sBACA,kCACA,gCACA,0BACA,4BACA,yBACA,2BACA,0BACA,kBACA,uBACA,4CACA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","sources":["webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-editors/date.editor.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-editors/multiselect.editor.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-editors/number.editor.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-editors/select.editor.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-editors/string.editor.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/action.renderer.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/actions-menu.renderer.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/boolean.renderer.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/editable.renderer.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/icon.renderer.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/select.renderer.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/status-pill.renderer.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/text-field.renderer.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/text.renderer.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell-renderers/utils/accessor.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell/cell.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/cell/cell.template.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/column/column.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/column/column.template.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/base.datasource.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/base.types.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/client-side.datasource.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/error-handler.dialog.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/server-side.grid-definitions.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/server-side.resource-base.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/server-side.resource-dataserver.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/server-side.resource-reqrep.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/server-side.datasource.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/external/ag-head-css.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/external/fonts.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/external/ag-grid-css.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/external/ag-theme-alpine-no-font-css.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/external/ag-theme-balham-no-font-css.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/external/ag-theme-material-no-font-css.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/external/index.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/grid-pro-genesis-datasource/datasource-events.types.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/grid-pro-genesis-datasource/grid-pro-genesis-datasource.config.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/datasource/client-side.grid-definitions.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/grid-pro-genesis-datasource/grid-pro-genesis-datasource.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/grid-pro.definitions.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/grid-pro.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/grid-pro.styles.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/grid-pro.template.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/grid-pro.types.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/state-persistence/local-state.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/state-persistence/state-persistence.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/status-bar-components/label-value.status-bar.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/status-bar-components/load-more.status-bar.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/status-bar-components/pagination.status-bar.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/status-bar-components/reload.status-bar.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/status-bar-components/row-count.status-bar.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/tooltips/error-tooltip.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/utils/array.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/utils/error.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/utils/logger.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/utils/map.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-marketplace/grids/grid-pro/dist/esm/utils/string.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-utils/dist/esm/mixins/lifecycle/lifecycle.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-utils/dist/esm/utils/delay.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-utils/dist/esm/utils/dom.js","webpack://@genesislcap/design-system-configurator/../../foundation/foundation-utils/dist/esm/utils/logger.js"],"sourcesContent":["import { __decorate } from \"tslib\";\nimport { css, html, observable, ref } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\nimport { EDITED_COLUMN_FIELD } from '../grid-pro.types';\ndayjs.extend(utc);\n/**\n * The AG Date Editor element.\n * @public\n * @tagname %%prefix%%-date-editor\n */\nexport class DateEditor extends FoundationElement {\n init(params) {\n if (!params)\n return;\n this.params = params;\n this.value = params.value;\n this.dateFormat = params.withTime ? 'YYYY-MM-DDTHH:mm' : 'YYYY-MM-DD';\n this.inputType = params.withTime ? 'datetime-local' : 'date';\n this.actualWidth = params.column.getActualWidth();\n }\n getGui() {\n return this;\n }\n refresh(params) {\n return true;\n }\n getValue() {\n return this.value;\n }\n isPopup() {\n return true;\n }\n changeHandler(event) {\n const dateValue = event.target.control.valueAsNumber;\n this.value = !isNaN(dateValue) ? dateValue : undefined;\n }\n afterGuiAttached() {\n this.input.focus();\n }\n isCancelBeforeStart() {\n return !!this.params.data[EDITED_COLUMN_FIELD];\n }\n}\n__decorate([\n observable\n], DateEditor.prototype, \"value\", void 0);\n__decorate([\n observable\n], DateEditor.prototype, \"actualWidth\", void 0);\n/**\n * The AG Select Renderer Styles.\n * @public\n */\nexport const agDateEditorStyles = css `\n :host {\n display: flex;\n }\n`;\n/**\n * Get a Design System prefixed Select template.\n * @param prefix - The design system prefix to use. Defaults to 'foundation'.\n * @returns A Select component template prefixed with the correct design system.\n * @public\n */\nexport const getDateEditorTemplate = (prefix = 'foundation') => html `\n <${prefix}-text-field\n ${ref('input')}\n :value=${(x) => x.value === undefined || x.value === null ? '' : dayjs.utc(x.value).format(x.dateFormat)}\n type=${(x) => x.inputType}\n @input=${(x, c) => x.changeHandler(c.event)}\n style=\"width: ${(x) => x.actualWidth}px\"\n ></${prefix}-text-field>\n`;\n/**\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-select-editor\\>\n */\nexport const foundationDateEditor = DateEditor.compose({\n baseName: 'date-editor',\n styles: agDateEditorStyles,\n template: getDateEditorTemplate(),\n});\n","import { __decorate } from \"tslib\";\nimport { css, html, observable } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { EDITED_COLUMN_FIELD } from '../grid-pro.types';\n/**\n * The AG Multiselect Editor element.\n * @public\n * @tagname %%prefix%%-multiselect-editor\n */\nexport class MultiselectEditor extends FoundationElement {\n init(params) {\n if (!params)\n return;\n this.params = params;\n this.selectedOptions = params.value;\n // DATASERVER does not support array type so selected options could be fetched from another resource\n if (this.params.selectedOptionsCallback) {\n this.params.selectedOptionsCallback(this.params.data).then((selectedOptions) => {\n this.selectedOptions = selectedOptions;\n });\n }\n // if value was provided as string component will assume it's in csv syntax\n if (typeof params.value === 'string') {\n this.selectedOptions = params.value.split(',');\n }\n }\n getGui() {\n return this;\n }\n destroy() { }\n refresh(params) {\n return true;\n }\n getValue() {\n return this.selectedOptions;\n }\n isPopup() {\n return true;\n }\n changeHandler(event) {\n this.selectedOptions = event.detail;\n }\n isCancelBeforeStart() {\n return !!this.params.data[EDITED_COLUMN_FIELD];\n }\n}\n__decorate([\n observable\n], MultiselectEditor.prototype, \"params\", void 0);\n__decorate([\n observable\n], MultiselectEditor.prototype, \"selectedOptions\", void 0);\n/**\n * The AG Select Renderer Styles.\n * @public\n */\nexport const agMultiselectEditorStyles = css ``;\n/**\n * Get a Design System prefixed Select template.\n * @param designSystem - The design system prefix to use. Defaults to 'foundation'.\n * @returns A Select component template prefixed with the correct design system.\n * @public\n */\nexport const getMultiselectEditorTemplate = (designSystem = 'foundation') => html `\n <${designSystem}-multiselect\n style=\"width: 100%\"\n ?async=${(x) => x.params.async}\n :selectedOptions=${(x) => x.selectedOptions || []}\n @selectionChange=${(x, c) => x.changeHandler(c.event)}\n >\n <multiselect-datasource\n resourceName=${(x) => x.params.allOptionsResourceName}\n value-field=${(x) => x.params.valueField}\n label-field=${(x) => x.params.labelField}\n :datasourceConfig=${(x) => x.params.datasourceOptions}\n ></multiselect-datasource>\n </${designSystem}-multiselect>\n`;\n/**\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-multiselect-editor\\>\n */\nexport const foundationMultiselectEditor = MultiselectEditor.compose({\n baseName: 'multiselect-editor',\n styles: agMultiselectEditorStyles,\n template: getMultiselectEditorTemplate(),\n});\n","import { __decorate } from \"tslib\";\nimport { css, html, observable, ref } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { EDITED_COLUMN_FIELD } from '../grid-pro.types';\n/**\n * The AG Number Editor element.\n * @public\n * @tagname %%prefix%%-number-editor\n */\nexport class NumberEditor extends FoundationElement {\n init(params) {\n if (!params)\n return;\n this.params = params;\n this.value = params.value;\n this.actualWidth = params.column.getActualWidth();\n }\n getGui() {\n return this;\n }\n refresh(params) {\n return true;\n }\n getValue() {\n return this.value;\n }\n isPopup() {\n return true;\n }\n afterGuiAttached() {\n this.input.focus();\n }\n changeHandler(event) {\n const value = parseFloat(event.target.value);\n this.value = !isNaN(value) ? value : undefined;\n if (this.params.onChange)\n this.params.onChange(this.value, this.params);\n }\n isCancelBeforeStart() {\n return !!this.params.data[EDITED_COLUMN_FIELD];\n }\n}\n__decorate([\n observable\n], NumberEditor.prototype, \"params\", void 0);\n__decorate([\n observable\n], NumberEditor.prototype, \"value\", void 0);\n__decorate([\n observable\n], NumberEditor.prototype, \"actualWidth\", void 0);\n/**\n * The AG Number Editor Styles.\n * @public\n */\nexport const agNumberEditorStyles = css `\n :host {\n display: flex;\n }\n`;\n/**\n * Get a Design System prefixed Select template.\n * @param designSystem - The design system prefix to use. Defaults to 'foundation'.\n * @returns A Select component template prefixed with the correct design system.\n * @public\n */\nexport const getNumberEditorTemplate = (designSystem = 'foundation') => html `\n <${designSystem}-number-field\n ${ref('input')}\n withFormatting=${(x) => x.params.withFormatting}\n :options=${(x) => x.params.formatOptions}\n :value=${(x) => (x.value === undefined ? '' : String(x.value))}\n @input=${(x, c) => {\n x.changeHandler(c.event);\n}}\n placeholder=${(x) => x.params.placeholder}\n ?disabled=${(x) => x.params.disabled}\n hideStep\n style=\"width: ${(x) => x.actualWidth}px\"\n ></${designSystem}-number-field>\n`;\n/**\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-number-editor\\>\n */\nexport const foundationNumberEditor = NumberEditor.compose({\n baseName: 'number-editor',\n styles: agNumberEditorStyles,\n template: getNumberEditorTemplate(),\n});\n","import { __decorate } from \"tslib\";\nimport { css, html, observable, ref } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { EDITED_COLUMN_FIELD } from '../grid-pro.types';\n/**\n * The AG Select Editor element.\n * @public\n * @tagname %%prefix%%-select-editor\n */\nexport class SelectEditor extends FoundationElement {\n init(params) {\n if (!params)\n return;\n this.params = params;\n this.value = params.value;\n this.actualWidth = params.column.getActualWidth();\n }\n getGui() {\n return this;\n }\n refresh(params) {\n return true;\n }\n getValue() {\n return this.value;\n }\n isPopup() {\n return true;\n }\n afterGuiAttached() {\n this.combobox.open = true;\n }\n changeHandler(event) {\n var _a;\n this.value = (_a = event.detail) === null || _a === void 0 ? void 0 : _a.value;\n }\n isCancelBeforeStart() {\n return !!this.params.data[EDITED_COLUMN_FIELD];\n }\n}\n__decorate([\n observable\n], SelectEditor.prototype, \"params\", void 0);\n__decorate([\n observable\n], SelectEditor.prototype, \"value\", void 0);\n__decorate([\n observable\n], SelectEditor.prototype, \"actualWidth\", void 0);\n/**\n * The AG Select Renderer Styles.\n * @public\n */\nexport const agSelectEditorStyles = css ``;\n/**\n * Get a Design System prefixed Select template.\n * @param designSystem - The design system prefix to use. Defaults to 'foundation'.\n * @returns A Select component template prefixed with the correct design system.\n * @public\n */\nexport const getSelectEditorTemplate = (designSystem = 'foundation') => html `\n <${designSystem}-combobox\n style=\"width: ${(x) => x.actualWidth}px\"\n ${ref('combobox')}\n position=${(x) => (x.params.position ? x.params.position(x.params.data) : '')}\n ?async=${(x) => x.params.async}\n @value-change=${(x, c) => x.changeHandler(c.event)}\n >\n <options-datasource\n resourceName=${(x) => x.params.allOptionsResourceName}\n value-field=${(x) => x.params.valueField}\n label-field=${(x) => x.params.labelField}\n option-element=\"${designSystem}-option\"\n ?allow-custom-options=${(x) => x.params.allowCustomOptions}\n :datasourceConfig=${(x) => x.params.datasourceOptions}\n :data=${(x) => x.params.values}\n :initialSelectedValue=${(x) => x.params.value}\n ></options-datasource>\n </${designSystem}-combobox>\n`;\n/**\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-select-editor\\>\n */\nexport const foundationSelectEditor = SelectEditor.compose({\n baseName: 'select-editor',\n styles: agSelectEditorStyles,\n template: getSelectEditorTemplate(),\n});\n","import { __decorate } from \"tslib\";\nimport { css, html, observable, ref } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { EDITED_COLUMN_FIELD } from '../grid-pro.types';\n/**\n * The AG String Editor element.\n * @public\n * @tagname %%prefix%%-string-editor\n */\nexport class StringEditor extends FoundationElement {\n init(params) {\n if (!params)\n return;\n this.params = params;\n this.value = params.value;\n this.actualWidth = params.column.getActualWidth();\n }\n getGui() {\n return this;\n }\n refresh(params) {\n return true;\n }\n getValue() {\n return this.value;\n }\n isPopup() {\n return true;\n }\n afterGuiAttached() {\n this.input.focus();\n }\n changeHandler(event) {\n this.value = event.target.value;\n }\n isCancelBeforeStart() {\n return !!this.params.data[EDITED_COLUMN_FIELD];\n }\n}\n__decorate([\n observable\n], StringEditor.prototype, \"params\", void 0);\n__decorate([\n observable\n], StringEditor.prototype, \"value\", void 0);\n__decorate([\n observable\n], StringEditor.prototype, \"actualWidth\", void 0);\n/**\n * The AG String Renderer Styles.\n * @public\n */\nexport const agStringEditorStyles = css `\n :host {\n display: flex;\n }\n`;\n/**\n * Get a Design System prefixed String template.\n * @param designSystem - The design system prefix to use. Defaults to 'foundation'.\n * @returns A String component template prefixed with the correct design system.\n * @public\n */\nexport const getStringEditorTemplate = (designSystem = 'foundation') => html `\n <${designSystem}-text-field\n ${ref('input')}\n :value=${(x) => (x.value === undefined ? '' : x.value)}\n @input=${(x, c) => {\n x.changeHandler(c.event);\n}}\n placeholder=${(x) => x.params.placeholder}\n style=\"width: ${(x) => x.actualWidth}px\"\n >\n </${designSystem}-text-field>\n`;\n/**\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-string-editor\\>\n */\nexport const foundationStringEditor = StringEditor.compose({\n baseName: 'string-editor',\n styles: agStringEditorStyles,\n template: getStringEditorTemplate(),\n});\n","import { __awaiter, __decorate } from \"tslib\";\nimport { KeyCode } from '@ag-grid-community/core';\nimport { css, html, observable } from '@microsoft/fast-element';\nimport { DesignToken, FoundationElement } from '@microsoft/fast-foundation';\nimport { logger } from '../utils';\n/**\n * The AG Action Renderer element.\n * @public\n * @tagname %%prefix%%-grid-pro-action-renderer\n */\nexport class ActionRenderer extends FoundationElement {\n init(params) {\n if (!params)\n return;\n this.params = params;\n params.eGridCell.addEventListener('keydown', (event) => {\n if (event.key === KeyCode.ENTER) {\n this.clickHandler();\n }\n });\n }\n getGui() {\n return this;\n }\n refresh(params) {\n this.params = params;\n return true;\n }\n isDisabled(data) {\n var _a;\n if (typeof ((_a = this.params) === null || _a === void 0 ? void 0 : _a.isDisabled) === 'function') {\n try {\n return this.params.isDisabled(data);\n }\n catch (error) {\n logger.error('Error executing grid action cell renderer isDisabled callback:', error);\n }\n }\n return false;\n }\n clickHandler() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.params.actionClick)\n return;\n this.pendingAction = true;\n yield this.params.actionClick(this.params.data);\n this.pendingAction = false;\n });\n }\n get dataTestId() {\n var _a, _b;\n if ((_a = this.params) === null || _a === void 0 ? void 0 : _a.dataTestId) {\n return this.params.dataTestId + ((_b = this.params.data[this.params.uniqueFieldName]) !== null && _b !== void 0 ? _b : '');\n }\n return undefined;\n }\n}\n__decorate([\n observable\n], ActionRenderer.prototype, \"params\", void 0);\n__decorate([\n observable\n], ActionRenderer.prototype, \"pendingAction\", void 0);\nconst { create } = DesignToken;\n/**\n * The base height multiplier for the action renderer.\n * @remarks Results in `--action-height-multiplier`. This is a DesignToken {@link https://www.fast.design/docs/design-systems/design-tokens/#what-is-a-design-token} value. Defaults to `0.6px`. May have other values depending on the design system or can be set to a different value.\n * @public\n */\nexport const actionHeightMultiplier = create('action-height-multiplier').withDefault('0.6px');\n/**\n * The AG Action Renderer Styles.\n * @public\n */\nexport const agActionRendererStyles = css `\n .action-container {\n align-items: center;\n display: flex;\n height: 100%;\n justify-content: center;\n }\n .action-renderer {\n align-self: center;\n display: flex;\n height: calc(\n (var(--base-height-multiplier) + var(--density)) * var(--design-unit) *\n var(--action-height-multiplier)\n );\n }\n`;\n/**\n * A function that returns a Foundation Action Renderer for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-grid-pro-action-renderer\\>\n */\nexport const foundationGridProActionRenderer = ActionRenderer.compose({\n baseName: 'grid-pro-action-renderer',\n styles: css `\n ${agActionRendererStyles}\n `,\n template: html `\n <div class=\"action-container\" part=\"action-container\">\n <foundation-button\n class=\"action-renderer\"\n part=\"action-renderer\"\n style=\"${(x) => x.params.actionButtonStyle || ''}\"\n data-test-id=\"${(x) => x.dataTestId}\"\n ?disabled=${(x) => { var _a; return x.pendingAction || x.isDisabled((_a = x.params) === null || _a === void 0 ? void 0 : _a.data); }}\n appearance=\"${(x) => x.params.appearance}\"\n @click=${(x) => x.clickHandler()}\">${(x) => x.params.actionName}</foundation-button>\n </div>`,\n});\n","import { __decorate } from \"tslib\";\nimport { html, observable } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { GridProRendererTypes } from '../grid-pro.types';\nimport { convertToKebabCase } from '../utils';\n/**\n * The Actions Menu Renderer element.\n * @remarks For multiple actions scenarios.\n * @public\n * @tagname %%prefix%%-grid-pro-actions-menu-renderer\n */\nexport class ActionsMenuRenderer extends FoundationElement {\n init(params) {\n if (!params)\n return;\n this.params = params;\n }\n getGui() {\n return this;\n }\n refresh(params) {\n return false;\n }\n}\n__decorate([\n observable\n], ActionsMenuRenderer.prototype, \"params\", void 0);\n/**\n * A function that returns a Foundation Actions Menu for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-grid-pro-actions-menu-renderer\\>\n */\nexport const foundationGridProActionsMenuRenderer = ActionsMenuRenderer.compose({\n baseName: 'grid-pro-actions-menu-renderer',\n template: html `\n <foundation-actions-menu\n name=\"${(x) => x.params.headerName}\"\n :definition=${(x) => x.params}\n ></foundation-actions-menu>\n `,\n});\n/**\n * Helper function to get ColDef {@link https://www.ag-grid.com/javascript-data-grid/column-properties/} for Actions Menu Renderer.\n * Will take the parameter values for a base ColDef and merge them with the overrideDef (if specified).\n * @param actions - Array of `ActionMenuItem` to be displayed in the menu.\n * @param overrideDef - Optional override for the ColDef. Will override any of the default values. Default is an empty object.\n * @param customActionsOpenerName - Optional custom name for the button that opens the menu. Default is '⋮'.\n * @param isVertical - Optional flag to display the menu vertically. Default is false (displays the menu horizontally, follow the rowHeight).\n * @param buttonAppearance - Optional appearance for the button that opens the menu. Default is 'outline'.\n * @returns Merged ColDef (base ColDef created from the parameters + overrideDef) for Actions Menu Renderer.\n * @example\n * ```ts\n * public exampleActionsMenuDef: ColDef = getActionsMenuDef(\n * [\n * {\n * name: 'View',\n * callback: (rowData) => logger.debug('VIEWW!!!', rowData),\n * },\n * {\n * name: 'Delete',\n * callback: (rowData) => logger.debug('DELETE!!!', rowData),\n * },\n * ],\n * {\n * headerName: 'Instrument Actions',\n * width: 180,\n * },\n * '+',\n * true,\n * 'primary-gradient'\n * );\n * ```\n * @public\n */\nexport const getActionsMenuDef = (actions, overrideDef = {}, customActionsOpenerName = '⋮', isVertical = false, buttonAppearance) => {\n const actionsMenuDef = {\n cellRenderer: GridProRendererTypes.actionsMenu,\n cellRendererParams: {\n actions,\n buttonAppearance,\n isVertical,\n buttonText: customActionsOpenerName,\n },\n cellStyle: { border: 'none', overflow: 'visible' },\n field: `${convertToKebabCase(overrideDef.headerName) || 'actions-menu'}`,\n headerName: 'Actions',\n // valueGetter: (params: ValueGetterParams) => {\n // params.data.actions = actions;\n // params.data.buttonText = customActionsOpenerName;\n // return null;\n // },\n width: 150,\n };\n return Object.assign(Object.assign({}, actionsMenuDef), overrideDef);\n};\n","import { __decorate } from \"tslib\";\nimport { css, html, observable } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { EDITED_COLUMN_FIELD } from '../grid-pro.types';\nimport { logger } from '../utils';\n/**\n * The AG Boolean Renderer element.\n * @public\n * @tagname %%prefix%%-boolean-renderer\n */\nexport class BooleanRenderer extends FoundationElement {\n isDisabled(data) {\n var _a, _b;\n if (typeof ((_a = this.params) === null || _a === void 0 ? void 0 : _a.isDisabled) === 'function') {\n try {\n return this.params.isDisabled(data);\n }\n catch (error) {\n logger.error('Error executing grid action cell renderer isDisabled callback:', error);\n }\n }\n return !((_b = this.params) === null || _b === void 0 ? void 0 : _b.colDef.editable);\n }\n init(params) {\n if (!params)\n return;\n this.params = params;\n this.selected = params.value;\n }\n /** @internal */\n userInputHandler(e) {\n // Strictly prevent any event dispatch or value change if not editable\n if (!this.params.colDef ||\n (typeof this.params.colDef.editable === 'function'\n ? !('column' in this.params &&\n this.params.colDef.editable(this.params))\n : this.params.colDef.editable !== true)) {\n return;\n }\n if (e instanceof MouseEvent) {\n if (e.type !== 'click' || e.button !== 0)\n return;\n this.selected = !this.selected;\n }\n if (e instanceof KeyboardEvent) {\n if (e.type !== 'keydown' || (e.key !== ' ' && e.key !== 'Enter'))\n return;\n this.selected = !this.selected;\n }\n const editedCells = this.params.api.getEditingCells();\n const changingCurrentlyEditedCell = !!editedCells.find((cell) => cell.rowIndex === this.params.node.rowIndex &&\n cell.column.getInstanceId() === this.params.column.getInstanceId());\n if (!changingCurrentlyEditedCell) {\n // below section allows grid renderer to act as grid editor so users can edit data without requesting edit\n // heavily inspired by https://github.com/ag-grid/ag-grid/blob/latest/grid-community-modules/core/src/ts/rendering/cellRenderers/checkboxCellRenderer.ts#L104\n const { column, node, value } = this.params;\n const eventStarted = {\n type: 'cellEditingStarted',\n column: column,\n colDef: column === null || column === void 0 ? void 0 : column.getColDef(),\n data: node.data,\n node,\n rowIndex: node.rowIndex,\n rowPinned: node.rowPinned,\n value,\n };\n this.params.api.dispatchEvent(eventStarted);\n const valueChanged = this.params.node.setDataValue(this.params.column, this.selected, 'edit');\n if (this.params.onChange)\n this.params.onChange(node.data);\n const eventStopped = {\n type: 'cellEditingStopped',\n column: column,\n colDef: column === null || column === void 0 ? void 0 : column.getColDef(),\n data: node.data,\n node,\n rowIndex: node.rowIndex,\n rowPinned: node.rowPinned,\n value,\n oldValue: value,\n newValue: this.selected,\n valueChanged,\n };\n this.params.api.dispatchEvent(eventStopped);\n }\n }\n getGui() {\n return this;\n }\n destroy() { }\n refresh(params) {\n this.selected = params.value;\n return true;\n }\n getValue() {\n return this.selected;\n }\n isCancelBeforeStart() {\n return !!this.params.data[EDITED_COLUMN_FIELD];\n }\n /** @internal */\n getDataTestId() {\n var _a;\n if (!((_a = this.params) === null || _a === void 0 ? void 0 : _a.dataTestId))\n return undefined;\n if (typeof this.params.dataTestId === 'function')\n return this.params.dataTestId(this.params.node.data);\n return this.params.dataTestId;\n }\n}\n__decorate([\n observable\n], BooleanRenderer.prototype, \"params\", void 0);\n__decorate([\n observable\n], BooleanRenderer.prototype, \"selected\", void 0);\n/**\n * The AG Boolean Renderer Styles.\n * @public\n */\nexport const agBooleanRendererStyles = css `\n :host {\n align-center: center;\n display: flex;\n height: 100%;\n }\n`;\n/**\n * Get a Design System prefixed Checkbox template.\n * @param designSystem - The design system prefix to use. Defaults to 'foundation'.\n * @returns A Checkbox component template prefixed with the correct design system.\n * @public\n */\nexport const getAgBooleanRendererTemplate = (designSystem = 'foundation') => {\n const checkboxComponent = `${designSystem}-checkbox`;\n return html `\n <${checkboxComponent}\n @click=${(x, c) => x.userInputHandler(c.event)}\n @keydown=${(x, c) => x.userInputHandler(c.event)}\n :checked=${(x) => x.selected}\n ?disabled=${(x) => { var _a; return x.isDisabled((_a = x.params) === null || _a === void 0 ? void 0 : _a.data); }}\n data-test-id=\"${(x) => x.getDataTestId()}\"\n ></${checkboxComponent}>\n `;\n};\n/**\n * A function that returns a Foundation Boolean Renderer registration for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-boolean-renderer\\>\n */\nexport const foundationAgBooleanRenderer = BooleanRenderer.compose({\n baseName: 'boolean-renderer',\n styles: agBooleanRendererStyles,\n template: getAgBooleanRendererTemplate(),\n});\n","import { __decorate } from \"tslib\";\nimport { css, html, observable } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\n/**\n * The AG Editable Renderer element.\n * @public\n * @tagname %%prefix%%-editable-renderer\n */\nexport class EditableRenderer extends FoundationElement {\n init(params) {\n if (!params)\n return;\n this.valueFormatted = params.formatValue(params.value);\n }\n getGui() {\n return this;\n }\n refresh(params) {\n this.valueFormatted = params.formatValue(params.value);\n return true;\n }\n}\n__decorate([\n observable\n], EditableRenderer.prototype, \"valueFormatted\", void 0);\n/**\n * The AG Editable Renderer Styles.\n * @public\n */\nexport const agEditableRendererStyles = css `\n :host {\n display: flex;\n justify-content: space-between;\n align-items: center;\n }\n`;\n/**\n * Get a Design System prefixed Checkbox template.\n * @param designSystem - The design system prefix to use. Defaults to 'foundation'.\n * @returns A Checkbox component template prefixed with the correct design system.\n * @public\n */\nexport const getAgEditableRendererTemplate = (designSystem = 'foundation') => {\n return html `\n <span>${(x) => x.valueFormatted}</span>\n <${designSystem}-progress-ring style=\"margin: 0; width: 20px; height: 20px\"></${designSystem}-progress-ring>\n `;\n};\n/**\n * A function that returns a Foundation Editable Renderer registration for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-editable-renderer\\>\n */\nexport const foundationAgEditableRenderer = EditableRenderer.compose({\n baseName: 'editable-renderer',\n styles: agEditableRendererStyles,\n template: getAgEditableRendererTemplate(),\n});\n","import { __decorate } from \"tslib\";\nimport { css, html, observable, when } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { classNames } from '@microsoft/fast-web-utilities';\n/**\n * The AG Icon Renderer Styles.\n * @public\n */\nexport const agIconRendererStyles = css `\n :host {\n display: flex;\n align-items: center;\n justify-content: center;\n height: 100%;\n width: 100%;\n position: relative;\n }\n\n .icon-container {\n position: relative;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: 5px;\n }\n\n .icon-container.with-hover {\n padding: 5px;\n line-height: 1;\n }\n\n .icon-container.with-hover:hover {\n cursor: pointer;\n background-color: var(--neutral-stroke-hover);\n }\n\n .icon-container.disabled {\n cursor: not-allowed;\n opacity: 0.5;\n }\n\n .secondary-icon {\n position: absolute;\n top: 50%;\n bottom: 0px;\n right: -5px;\n z-index: 2;\n line-height: 1;\n }\n`;\nfunction hasIconSrc(params) {\n return (!!params && typeof params.iconSrc === 'string' && params.iconSrc.length > 0);\n}\nfunction hasIconName(params) {\n return (!!params && typeof params.iconName === 'string' && params.iconName.length > 0);\n}\n/**\n * Get a Design System prefixed Icon template.\n * @param designSystem - The design system prefix to use. Defaults to 'foundation'.\n * @returns An Icon component template prefixed with the correct design system.\n * @public\n */\nexport const getIconRendererTemplate = (designSystem = 'rapid') => {\n const iconComponent = `${designSystem}-icon`;\n return html `\n <div\n class=\"icon-container ${(x) => { var _a, _b; return classNames(['with-hover', (_a = x.params) === null || _a === void 0 ? void 0 : _a.showHover], ['disabled', (_b = x.params) === null || _b === void 0 ? void 0 : _b.disabled]); }}\"\n @click=${(x, c) => {\n var _a, _b, _c;\n return !((_a = x.params) === null || _a === void 0 ? void 0 : _a.disabled) && ((_b = x.params) === null || _b === void 0 ? void 0 : _b.clickHandler)\n ? (_c = x.params) === null || _c === void 0 ? void 0 : _c.clickHandler(c.event, x.params.data)\n : null;\n }}\n >\n ${when((x) => hasIconSrc(x.params), html `\n <img\n class=\"icon-image\"\n src=\"${(x) => (hasIconSrc(x.params) ? x.params.iconSrc : '')}\"\n style=\"${(x) => {\n if (!hasIconSrc(x.params))\n return '';\n let styles = `height: ${x.params.iconHeight || '14px'}; width: auto;`;\n if (x.params.iconColor)\n styles += ` color: ${x.params.iconColor};`;\n return styles;\n }}\"\n />\n `)}\n ${when((x) => hasIconName(x.params), html `\n <${iconComponent}\n class=\"${(x) => {\n var _a;\n let classes = 'icon-element';\n if ((_a = x.params) === null || _a === void 0 ? void 0 : _a.showHover)\n classes += ' with-hover';\n return classes;\n }}\"\n name=\"${(x) => (hasIconName(x.params) ? x.params.iconName : '')}\"\n size=\"${(x) => (hasIconName(x.params) ? x.params.iconSize || 'md' : 'md')}\"\n style=\"${(x) => (x.params.iconColor ? `color: ${x.params.iconColor};` : '')}\"\n variant=\"${(x) => x.params.variant}\"\n ></${iconComponent}>\n `)}\n ${when((x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.secondaryIcon; }, html `\n <${iconComponent}\n class=\"secondary-icon\"\n name=\"${(x) => x.params.secondaryIcon}\"\n size=\"xs\"\n style=\"${(x) => (x.params.secondaryIconColor ? `color: ${x.params.secondaryIconColor};` : '')}\"\n ></${iconComponent}>\n `)}\n </div>\n `;\n};\n/**\n * Plain ag-Grid cell renderer for icons.\n * This renderer creates the FAST custom element using document.createElement.\n *\n * @public\n */\nexport class IconRenderer extends FoundationElement {\n // private element: HTMLElement;\n init(params) {\n this.params = params;\n }\n getGui() {\n return this;\n }\n refresh(params) {\n this.params = params;\n return true;\n }\n destroy() { }\n}\n__decorate([\n observable\n], IconRenderer.prototype, \"params\", void 0);\n/**\n * A function that returns a Foundation Icon Renderer registration for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-icon-renderer\\>\n */\nexport const foundationIconRenderer = IconRenderer.compose({\n baseName: 'icon-renderer',\n template: getIconRendererTemplate(),\n styles: agIconRendererStyles,\n});\n","import { __decorate } from \"tslib\";\nimport { css, html, observable, repeat } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { logger } from '../utils';\nimport { setValueWithAccessor } from './utils';\n/**\n * The AG Select Renderer element.\n * @public\n * @tagname %%prefix%%-select-renderer\n */\nexport class SelectRenderer extends FoundationElement {\n constructor() {\n super(...arguments);\n this.selectionChanged = (e) => {\n this.value = e.target.value;\n this.params.onSelect(e.target.value, this.params);\n };\n }\n init(params) {\n var _a;\n if (!params)\n return;\n this.params = params;\n this.value = setValueWithAccessor((_a = params.node) === null || _a === void 0 ? void 0 : _a.data, params.accessor) || undefined;\n }\n getGui() {\n return this;\n }\n destroy() { }\n refresh(params) {\n return true;\n }\n isDisabled(data) {\n var _a;\n if (typeof ((_a = this.params) === null || _a === void 0 ? void 0 : _a.isDisabled) === 'function') {\n try {\n return this.params.isDisabled(data);\n }\n catch (error) {\n logger.error('Error executing grid action cell renderer isDisabled callback:', error);\n }\n }\n return false;\n }\n}\n__decorate([\n observable\n], SelectRenderer.prototype, \"params\", void 0);\n__decorate([\n observable\n], SelectRenderer.prototype, \"value\", void 0);\n/**\n * The AG Select Renderer Styles.\n * @public\n */\nexport const agSelectRendererStyles = css `\n :host,\n .select-renderer,\n zero-option,\n ::part(listbox),\n ::part(control) {\n max-width: var(--select-renderer-max-width);\n min-width: 100%;\n }\n\n .select-renderer {\n --listbox-max-height: 4;\n --select-renderer-max-width: 100%;\n }\n`;\n/**\n * Get a Design System prefixed Select template.\n * @param designSystem - The design system prefix to use. Defaults to 'foundation'.\n * @returns A Select component template prefixed with the correct design system.\n * @public\n */\nexport const getSelectRendererTemplate = (designSystem = 'foundation') => {\n const selectComponent = `${designSystem}-select`;\n const optionComponent = `${designSystem}-option`;\n return html `\n <${selectComponent}\n class=\"select-renderer\"\n position=${(x) => (x.params.position ? x.params.position(x.params.node.data) : '')}\n ?disabled=${(x) => { var _a; return x.isDisabled((_a = x.params) === null || _a === void 0 ? void 0 : _a.data); }}\n @change=${(x, c) => x.selectionChanged(c.event)}\n :value=${(x) => x.value}\n >\n <${optionComponent}\n defaultSelected\n style=\"display: none;\"\n >\n ${(x) => x.params.defaultValue || 'Select option'}\n </${optionComponent}>\n ${repeat((x) => x.params.options(x.params.node.data), html `\n <${optionComponent}\n value=${(x) => x.name}\n ?disabled=${(x, c) => { var _a; return typeof x.isDisabled === 'function' ? x.isDisabled((_a = c.parent.params) === null || _a === void 0 ? void 0 : _a.data) : false; }}\n title=\"${(x) => (x.tooltip ? x.tooltip : null)}\"\n >${(x) => x.displayName}</${optionComponent}>\n `)}\n </${selectComponent}>\n `;\n};\n/**\n * A function that returns a Foundation Select Renderer registration for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-select-renderer\\>\n */\nexport const foundationAgSelectRenderer = SelectRenderer.compose({\n baseName: 'select-renderer', // TODO: others have 'grid-pro' in the name, why not this one?\n styles: agSelectRendererStyles,\n template: getSelectRendererTemplate(),\n});\n","import { __decorate } from \"tslib\";\nimport { css, html, observable } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\n/**\n * The Status Pill Renderer Styles.\n * @public\n */\nexport const agStatusPillRendererStyles = css `\n :host {\n width: 100%;\n display: flex;\n align-items: center;\n height: 100%;\n }\n`;\n/**\n * Get a Design System prefixed Status Pill template.\n * @param designSystem - The design system prefix to use. Defaults to 'rapid'.\n * @returns A Staus Pill component template prefixed with the correct design system.\n * @public\n */\nexport const getStatusPillRendererTemplate = (designSystem = 'rapid') => {\n return html `\n <${designSystem}-status-pill\n background-color=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.backgroundColor; }}\"\n icon-name=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.iconName; }}\"\n icon-src=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.iconSrc; }}\"\n icon-initial=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.iconInitial; }}\"\n icon-initial-background-color=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.iconInitialBackgroundColor; }}\"\n icon-size=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.iconSize; }}\"\n text-color=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.textColor; }}\"\n text=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.text; }}\"\n date-countdown-unit=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.dateCountdownUnit; }}\"\n date-countdown=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.dateCountdown; }}\"\n date-countdown-completed-message=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.dateCountdownCompletedMessage; }}\"\n ?hide-when-countdown-completed=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.hideWhenCountdownCompleted; }}\"\n date-countdown-visible-after=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.dateCountdownVisibleAfter; }}\"\n >\n </${designSystem}-status-pill>\n `;\n};\n/**\n * The AG Status Pill Renderer element.\n * @public\n * @tagname %%prefix%%-status-pill-renderer\n */\nexport class StatusPillRenderer extends FoundationElement {\n init(params) {\n this.params = params;\n }\n getGui() {\n return this;\n }\n refresh(params) {\n this.params = params;\n return true;\n }\n destroy() { }\n}\n__decorate([\n observable\n], StatusPillRenderer.prototype, \"params\", void 0);\n/**\n * A function that returns a Foundation Status Pill Renderer registration for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-status-pill-renderer\\>\n */\nexport const foundationStatusPillRenderer = StatusPillRenderer.compose({\n baseName: 'status-pill-renderer',\n template: getStatusPillRendererTemplate(),\n styles: agStatusPillRendererStyles,\n});\n","import { __decorate } from \"tslib\";\nimport { sync } from '@genesislcap/foundation-utils';\nimport { css, html, observable, ref } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { logger } from '../utils';\nimport { setValueWithAccessor } from './utils';\n/**\n * The AG Text Field Renderer element.\n * @public\n * @tagname %%prefix%%-grid-text-field-renderer\n */\nexport class AgTextFieldRenderer extends FoundationElement {\n constructor() {\n super(...arguments);\n // Text field value\n this.textValue = '';\n /**\n * On text change handler\n * @param e - CustomEvent\n */\n this.textChanged = (e) => {\n this.textValue = e.target.value;\n this.params.onChange(e.target.value, this.params);\n };\n }\n init(params) {\n var _a;\n if (!params)\n return;\n this.params = params;\n this.textValue =\n this.textValue === ''\n ? setValueWithAccessor((_a = params === null || params === void 0 ? void 0 : params.node) === null || _a === void 0 ? void 0 : _a.data, params.accessor)\n : this.textValue;\n // Intercept keyboard events on the text field element\n this.addEventListener('keydown', (event) => {\n // Check if the key pressed is an arrow key\n if (['ArrowLeft', 'ArrowRight'].includes(event.key)) {\n // Only stop propagation if cursor isn't at the boundaries\n const input = this.textField.control;\n const caretPos = input.selectionStart;\n if (event.key === 'ArrowLeft' && caretPos > 0) {\n event.stopPropagation();\n }\n else if (event.key === 'ArrowRight' && caretPos < input.value.length) {\n event.stopPropagation();\n }\n }\n });\n }\n getGui() {\n return this;\n }\n destroy() { }\n refresh(params) {\n return true;\n }\n isDisabled(data) {\n var _a;\n if (typeof ((_a = this.params) === null || _a === void 0 ? void 0 : _a.isDisabled) === 'function') {\n try {\n return this.params.isDisabled(data);\n }\n catch (error) {\n logger.error('Error executing grid action cell renderer isDisabled callback:', error);\n }\n }\n return false;\n }\n}\n__decorate([\n observable\n], AgTextFieldRenderer.prototype, \"textValue\", void 0);\n__decorate([\n observable\n], AgTextFieldRenderer.prototype, \"params\", void 0);\n/**\n * The AG Text Field Renderer Styles.\n * @public\n */\nexport const textFieldRendererStyles = css `\n :host {\n display: flex;\n width: 100%;\n height: 100%;\n align-items: center;\n }\n .text-renderer {\n width: 100%;\n }\n`;\n/**\n * Get a Design System prefixed Text Field template.\n * @param designSystem - The design system prefix to use. Defaults to 'foundation'.\n * @returns A Text Field component template prefixed with the correct design system.\n * @public\n */\nexport const getTextFieldRendererTemplate = (designSystem = 'foundation') => {\n const textComponent = `${designSystem}-text-field`;\n return html `\n <${textComponent}\n ${ref('textField')}\n type=\"text\"\n class=\"text-renderer\"\n prefix=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.prefix; }}\"\n suffix=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.suffix; }}\"\n ?hide-affix-from-screen-reader=\"${(x) => { var _a; return (_a = x.params) === null || _a === void 0 ? void 0 : _a.hideAffixFromScreenReader; }}\"\n :maxlength=\"${(x) => x.params.maxLength}\"\n ?disabled=${(x) => { var _a; return x.isDisabled((_a = x.params) === null || _a === void 0 ? void 0 : _a.data); }}\n :value=\"${sync((x) => x.textValue)}\"\n @change=\"${(x, c) => x.textChanged(c.event)}\"\n ></${textComponent}>\n `;\n};\n/**\n * A function that returns a Foundation Text Field Renderer registration for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-grid-pro-text-field-renderer\\>\n */\nexport const foundationAgTextFieldRenderer = AgTextFieldRenderer.compose({\n baseName: 'grid-pro-text-renderer',\n styles: textFieldRendererStyles,\n template: getTextFieldRendererTemplate(),\n});\n","// TODO: DEPRECATED due the incorrect \"text\" name\nimport { AgTextFieldRenderer, getTextFieldRendererTemplate, textFieldRendererStyles, } from './text-field.renderer';\n/**\n * @public\n * @deprecated - Use AgTextFieldRenderer instead\n * @tagname %%prefix%%-grid-text-renderer\n */\nexport class AgTextRenderer extends AgTextFieldRenderer {\n}\n/**\n * @public\n * @deprecated - Use textFieldRendererStyles instead\n */\nexport const textRendererStyles = textFieldRendererStyles;\n/**\n * @public\n * @deprecated - Use getTextFieldRendererTemplate instead\n */\nexport const getTextRendererTemplate = getTextFieldRendererTemplate;\n/**\n * A function that returns a Foundation Text Renderer registration for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-grid-text-renderer\\>\n * @deprecated - Use foundationAgTextFieldRenderer instead\n */\nexport const foundationAgTextRenderer = AgTextRenderer.compose({\n baseName: 'grid-text-renderer',\n styles: textRendererStyles,\n template: getTextRendererTemplate(),\n});\n","export const setValueWithAccessor = (data, accessor) => {\n // if no '.', then it's not a deep value\n if (accessor.indexOf('.') < 0) {\n // data[field] = newValue;\n return data[accessor];\n }\n else {\n // otherwise it is a deep value, so need to dig for it\n const accessorPieces = accessor.split('.');\n let currentObject = data;\n while (accessorPieces.length > 0 && currentObject) {\n const fieldPiece = accessorPieces.shift();\n if (accessorPieces.length === 0) {\n return currentObject[fieldPiece];\n }\n else {\n currentObject = currentObject[fieldPiece];\n }\n }\n }\n};\n","import { __decorate } from \"tslib\";\nimport { customElement, observable } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { CellTemplate as template } from './cell.template';\n/**\n * The Grid Pro Cell element.\n * @remarks Used inside the Grid Pro Column element, to define a cell renderer from the template.\n * @public\n */\nlet GridProCell = class GridProCell extends FoundationElement {\n connectedCallback() {\n super.connectedCallback();\n const wrapperGridProColumn = this.parentElement;\n if (this.renderer) {\n wrapperGridProColumn.definition.cellRenderer = this.renderer;\n }\n if (this.rendererParams) {\n wrapperGridProColumn.definition.cellRendererParams = this.rendererParams;\n }\n }\n init(params) {\n this.rendererParams = params;\n }\n getGui() {\n if (typeof this.renderer !== 'string') {\n return this.renderer(this.rendererParams);\n }\n return this;\n }\n destroy() { }\n refresh(params) {\n return false;\n }\n slottedAgRendererChanged() { }\n};\n__decorate([\n observable\n], GridProCell.prototype, \"renderer\", void 0);\n__decorate([\n observable\n], GridProCell.prototype, \"rendererParams\", void 0);\n__decorate([\n observable\n], GridProCell.prototype, \"slottedRenderer\", void 0);\nGridProCell = __decorate([\n customElement({\n name: 'grid-pro-cell',\n template,\n })\n], GridProCell);\nexport { GridProCell };\n","import { html, slotted } from '@microsoft/fast-element';\n/**\n * The Grid Pro Cell Template.\n * @public\n */\nexport const CellTemplate = html `\n <template>\n <slot ${slotted('slottedRenderer')} @slotchange=\"${(x) => x.slottedAgRendererChanged()}\"></slot>\n </template>\n`;\n","import { __decorate } from \"tslib\";\nimport { LifecycleMixin } from '@genesislcap/foundation-utils';\nimport { customElement, observable } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { ColumnTemplate as template } from './column.template';\n/**\n * The Grid Pro Column element.\n * @remarks Used insde the Grid Pro element, to specify the column definitions (ColDef) for a given column.\n * @public\n */\nlet GridProColumn = class GridProColumn extends LifecycleMixin(FoundationElement) {\n constructor() {\n super(...arguments);\n this.definition = {};\n }\n slottedAgCellChanged() { }\n deepClone() {\n const copy = super.deepClone();\n copy.definition = {};\n if (this.definition) {\n Object.keys(this.definition).forEach((key) => {\n if (typeof this.definition[key] === 'function') {\n copy.definition[key] = this.definition[key].bind(copy);\n }\n else {\n copy.definition[key] = structuredClone(this.definition[key]);\n }\n });\n }\n return copy;\n }\n};\n__decorate([\n observable\n], GridProColumn.prototype, \"slottedAgCell\", void 0);\n__decorate([\n observable\n], GridProColumn.prototype, \"definition\", void 0);\nGridProColumn = __decorate([\n customElement({\n name: 'grid-pro-column',\n template,\n })\n], GridProColumn);\nexport { GridProColumn };\n","import { html, slotted } from '@microsoft/fast-element';\n/**\n * The Grid Pro Column Template.\n * @public\n */\nexport const ColumnTemplate = html `\n <template>\n <slot ${slotted('slottedAgCell')} @slotchange=\"${(x) => x.slottedAgCellChanged()}\"></slot>\n </template>\n`;\n","import { __awaiter, __decorate } from \"tslib\";\nimport { Connect, Datasource, DatasourceDefaults, DatasourceEventHandler, FieldTypeEnum, logger, normaliseCriteria, ResourceType, } from '@genesislcap/foundation-comms';\nimport { attr, nullableNumberConverter, observable, volatile } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { BehaviorSubject } from 'rxjs';\nimport { datasourceEventNames, } from '../grid-pro-genesis-datasource/datasource-events.types';\nimport { dateTimeValueFormatter, dateValueFormatter, getColumnType } from '../grid-pro.definitions';\nimport { GridProRendererTypes, GridProStatusBarTypes } from '../grid-pro.types';\nimport { baseDatasourceEventNames } from './base.types';\n/**\n * The delimiter for the criteria string.\n * @public\n */\nexport const criteriaDelimiter = ';';\n/**\n * The join for the criteria string.\n * @public\n */\nexport const criteriaJoin = ' && ';\n/**\n * The base datasource element for the grid-pro element.\n * @public\n */\nexport class GenesisGridDatasourceElement extends DatasourceEventHandler(FoundationElement) {\n constructor() {\n super(...arguments);\n /**\n * Request a snapshot from the server.\n * @remarks Defaults to false.\n */\n this.isSnapshot = false;\n /**\n * Maximum number of rows to be returned as part of the initial message, and as part of any additional MORE_ROWS messages.\n * @remarks This will not affect the number of rows displayed. Defaults to 250.\n */\n this.maxRows = DatasourceDefaults.MAX_ROWS_250;\n /**\n * Maximum number of rows to track as part of a client \"view\".\n * @remarks DATASERVER only. Defaults to 1000.\n */\n this.maxView = DatasourceDefaults.MAX_VIEW_1000;\n /**\n * If true, when the maximum number of rows defined in max-view is reached, the Data Server will start discarding the oldest rows (in terms of timestamp) and sending newer rows.\n * @remarks DATASERVER only. If false, the updates in the server will be sent to the front end regardless of order. Note that this will only update the UI; no changes will be performed in the database. Defaults to false.\n */\n this.movingView = false;\n /**\n * Option that changes the Data Server index iteration.\n * @remarks DATASERVER only. For example, if you are using the default index, the query will return rows in order from the newest database records to the oldest. Defaults to false.\n */\n this.reverse = false;\n // REQUEST_SERVER only\n /**\n * Disables polling if set to true (data updates for the grid will not be fetched automatically).\n * @remarks REQUEST_SERVER only. Defaults to false.\n */\n this.disablePolling = false;\n /**\n * The offset for pagination in REQUEST_SERVER scenarios.\n * @remarks REQUEST_SERVER only.\n */\n this.offset = DatasourceDefaults.DEFAULT_REQ_REP_OFFSET;\n /**\n * Custom polling frequency (in milliseconds) for a Request Server resource.\n * @remarks REQUEST_SERVER only. Note that this option only works with Request Server resources; if your resource is a Data Server query, your grid is updated in real time. Defaults to 5000ms.\n */\n this.pollingInterval = DatasourceDefaults.REQ_REP_POLLING_INTERVAL_MS;\n /**\n * Array of event names that will trigger a poll when received as commit responses.\n * @remarks REQUEST_SERVER only.\n */\n this.pollTriggerEvents = [];\n /**\n * Attribute to set whether the REQUEST object should be automatically set up.\n * @remarks Defaults to `true`. Only applies to REQUEST_SERVER (REQ-REP) resources.\n * @privateRemarks To avoid breaking changes for now, once V15 is out this will be removed and the default behavior will be the same as `false` here.\n */\n this.requestAutoSetup = true;\n /**\n * Attribute to set whether the datasource should restart when it reconnects.\n * @remarks Defaults to `true`.\n * @privateRemarks This attribute is shared across all datasources to ensure consistent behavior.\n */\n this.restartOnReconnection = true;\n this.criteriaFromFilters = new Map();\n this.update = new BehaviorSubject(new Map());\n }\n /**\n * Returns the `row-id` attribute, depending on the resource type.\n * @remarks Will favour the `row-id` attribute if set.\n * @internal\n */\n get rowId() {\n if (this.rowIdAttr)\n return this.rowIdAttr;\n if (this.isRequestServer)\n return DatasourceDefaults.REQUEST_SERVER_ROW_ID;\n return DatasourceDefaults.DATASERVER_ROW_ID;\n }\n /**\n * Returns whether the `row-id` attribute is the default one, depending on the resource type.\n * @internal\n */\n get hasDefaultRowId() {\n return (!this.rowIdAttr ||\n this.rowIdAttr === DatasourceDefaults.REQUEST_SERVER_ROW_ID ||\n this.rowIdAttr === DatasourceDefaults.DATASERVER_ROW_ID);\n }\n get defaultRowIdByResourceType() {\n return this.isRequestServer\n ? DatasourceDefaults.REQUEST_SERVER_ROW_ID\n : DatasourceDefaults.DATASERVER_ROW_ID;\n }\n datasourceOptions() {\n return {\n // Common between DATASERVER and REQUEST_SERVER (REQ-REP)\n criteria: this.buildCriteria(),\n isSnapshot: this.isSnapshot,\n maxRows: +this.maxRows,\n orderBy: this.orderBy,\n resourceName: this.resourceName,\n viewNumber: +this.viewNumber,\n // DATASERVER only\n fields: this.fields,\n maxView: +this.maxView,\n movingView: this.movingView,\n reverse: this.reverse,\n // REQUEST_SERVER only\n disablePolling: this.disablePolling,\n offset: this.offset,\n pollingInterval: this.pollingInterval,\n pollTriggerEvents: this.pollTriggerEvents,\n request: this.request,\n requestAutoSetup: this.requestAutoSetup,\n };\n }\n buildCriteria() {\n var _a;\n const initialCriteria = ((_a = this.criteria) === null || _a === void 0 ? void 0 : _a.split(criteriaDelimiter)) || [];\n const criteria = initialCriteria.concat(Array.from(this.criteriaFromFilters.values()));\n const normalisedCriteria = normaliseCriteria(criteria.join(criteriaJoin), criteriaDelimiter);\n return normalisedCriteria ? normalisedCriteria : undefined;\n }\n setFilter(fieldName, newFilter) {\n this.criteriaFromFilters.set(fieldName, newFilter);\n this.update.next(this.criteriaFromFilters);\n }\n removeFilter(fieldName) {\n this.criteriaFromFilters.delete(fieldName);\n this.update.next(this.criteriaFromFilters);\n }\n get isRequestServer() {\n var _a;\n return ((_a = this.datasource.status) === null || _a === void 0 ? void 0 : _a.type) === ResourceType.REQUEST_SERVER;\n }\n // protected isRequestServer = false;\n datasourceStatusChanged(prev, next) {\n // this.isRequestServer = next.type === ResourceType.REQUEST_SERVER;\n // TODO: this is not triggered after first init :(\n }\n /**\n * Handles errors and emits appropriate error events.\n * @param errors - The error message or array of error messages\n * @param type - The type of error that occurred\n * @public\n */\n handleErrors(errors, type = 'unknown') {\n let message;\n if (Array.isArray(errors)) {\n const stringArray = errors.map((item) => {\n if (typeof item === 'string') {\n return item;\n }\n else if (typeof item === 'object' && item !== null && 'TEXT' in item) {\n return item.TEXT;\n }\n else {\n return String(item);\n }\n });\n message = stringArray.join(', ');\n }\n else if (typeof errors === 'string') {\n message = errors;\n }\n else {\n message = String(errors);\n }\n if (message) {\n logger.error(`${type}: ${message}`);\n // Emit both the old event for backward compatibility and the new event for grid handling\n this.$emit(baseDatasourceEventNames.error, { message, type });\n this.$emit(datasourceEventNames.error, { message, type });\n }\n }\n /**\n * Clears error state and emits connected event.\n * @public\n */\n clearErrors() {\n this.$emit(baseDatasourceEventNames.connected);\n }\n /**\n * Override datasource initialization to handle errors properly.\n * @internal\n */\n initializeDatasource(options_1) {\n return __awaiter(this, arguments, void 0, function* (options, fetchMeta = true, startStream = true) {\n try {\n const success = yield this.datasource.init(options, fetchMeta, startStream);\n if (success) {\n this.clearErrors();\n return true;\n }\n else {\n // Determine error type based on the initialization failure\n const resourceName = options.resourceName;\n if (!resourceName) {\n this.handleErrors('Resource name is required', 'resource-validation');\n }\n else if (!this.connect.isConnected) {\n this.handleErrors(`Unable to connect to ${this.connect.host}`, 'connection');\n }\n else {\n // Check if it's a resource validation issue\n const isValidResource = yield this.connect.getMetadata(resourceName).catch(() => null);\n if (!isValidResource) {\n this.handleErrors(`Resource '${resourceName}' does not exist on ${this.connect.host}`, 'resource-validation');\n }\n else {\n this.handleErrors(`Failed to initialize datasource for ${resourceName}`, 'unknown');\n }\n }\n return false;\n }\n }\n catch (error) {\n let errorMessage = 'Unknown initialization error';\n let errorType = 'unknown';\n if (error instanceof Error) {\n errorMessage = error.message;\n // Categorize error types based on message content\n if (errorMessage.includes('connect') || errorMessage.includes('connection')) {\n errorType = 'connection';\n }\n else if (errorMessage.includes('resource') || errorMessage.includes('does not exist')) {\n errorType = 'resource-validation';\n }\n else if (errorMessage.includes('metadata')) {\n errorType = 'metadata';\n }\n else if (errorMessage.includes('stream')) {\n errorType = 'stream';\n }\n else if (errorMessage.includes('criteria')) {\n errorType = 'criteria';\n }\n }\n this.handleErrors(errorMessage, errorType);\n return false;\n }\n });\n }\n}\n__decorate([\n Connect\n], GenesisGridDatasourceElement.prototype, \"connect\", void 0);\n__decorate([\n Datasource\n], GenesisGridDatasourceElement.prototype, \"datasource\", void 0);\n__decorate([\n observable\n], GenesisGridDatasourceElement.prototype, \"deferredGridOptions\", void 0);\n__decorate([\n observable\n], GenesisGridDatasourceElement.prototype, \"deferredColumnStates\", void 0);\n__decorate([\n observable\n], GenesisGridDatasourceElement.prototype, \"rowDataMapper\", void 0);\n__decorate([\n attr\n], GenesisGridDatasourceElement.prototype, \"criteria\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'is-snapshot' })\n], GenesisGridDatasourceElement.prototype, \"isSnapshot\", void 0);\n__decorate([\n attr({ attribute: 'max-rows', converter: nullableNumberConverter })\n], GenesisGridDatasourceElement.prototype, \"maxRows\", void 0);\n__decorate([\n attr({ attribute: 'order-by' })\n], GenesisGridDatasourceElement.prototype, \"orderBy\", void 0);\n__decorate([\n attr({ attribute: 'resource-name' })\n], GenesisGridDatasourceElement.prototype, \"resourceName\", void 0);\n__decorate([\n attr({ attribute: 'view-number', converter: nullableNumberConverter })\n], GenesisGridDatasourceElement.prototype, \"viewNumber\", void 0);\n__decorate([\n attr\n], GenesisGridDatasourceElement.prototype, \"fields\", void 0);\n__decorate([\n attr({ attribute: 'max-view', converter: nullableNumberConverter })\n], GenesisGridDatasourceElement.prototype, \"maxView\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'moving-view' })\n], GenesisGridDatasourceElement.prototype, \"movingView\", void 0);\n__decorate([\n attr({ mode: 'boolean' })\n], GenesisGridDatasourceElement.prototype, \"reverse\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'disable-polling' })\n], GenesisGridDatasourceElement.prototype, \"disablePolling\", void 0);\n__decorate([\n attr({ converter: nullableNumberConverter })\n], GenesisGridDatasourceElement.prototype, \"offset\", void 0);\n__decorate([\n attr({ attribute: 'polling-interval' })\n], GenesisGridDatasourceElement.prototype, \"pollingInterval\", void 0);\n__decorate([\n observable\n], GenesisGridDatasourceElement.prototype, \"pollTriggerEvents\", void 0);\n__decorate([\n observable\n], GenesisGridDatasourceElement.prototype, \"request\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'request-auto-setup' })\n], GenesisGridDatasourceElement.prototype, \"requestAutoSetup\", void 0);\n__decorate([\n attr({ attribute: 'row-id' })\n], GenesisGridDatasourceElement.prototype, \"rowIdAttr\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'restart-on-reconnection' })\n], GenesisGridDatasourceElement.prototype, \"restartOnReconnection\", void 0);\n__decorate([\n volatile\n], GenesisGridDatasourceElement.prototype, \"isRequestServer\", null);\n/**\n * The operation type for the {@link GridProBaseDatasource.mapTransaction} method.\n * @internal\n */\nexport var OperationType;\n(function (OperationType) {\n OperationType[\"Add\"] = \"add\";\n OperationType[\"Update\"] = \"update\";\n OperationType[\"Remove\"] = \"remove\";\n})(OperationType || (OperationType = {}));\nexport class GridProBaseDatasource extends GenesisGridDatasourceElement {\n constructor() {\n super(...arguments);\n this.dataSubWasLoggedOff = false;\n this.keepColDefsOnClearRowData = false;\n this.rowData = new Map();\n this.transactionData = {\n add: [],\n remove: [],\n update: [],\n };\n this._isDisconnected = false;\n }\n subscribeToConnection() {\n var _a;\n if (this.connect && this.connect.isConnected$) {\n (_a = this.connectionSub) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n this.connectionSub = this.connect.isConnected$.subscribe((isConnected) => {\n if (isConnected && this.isDisconnected()) {\n this.setDisconnected(false);\n if (this.restartOnReconnection) {\n this.reloadResourceData();\n }\n }\n else if (!isConnected) {\n this.setDisconnected(true);\n }\n });\n }\n }\n unsubscribeFromConnection() {\n var _a;\n (_a = this.connectionSub) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n this.connectionSub = undefined;\n }\n generateColumnDefsFromMetadata(fieldsMetadata, getFilterParamsByFieldType, getFilterByFieldType) {\n return fieldsMetadata === null || fieldsMetadata === void 0 ? void 0 : fieldsMetadata.flatMap((field) => {\n const colDefBase = {};\n colDefBase.filterParams = getFilterParamsByFieldType(field);\n switch (field.type) {\n case FieldTypeEnum.STRING:\n colDefBase.cellEditor = GridProRendererTypes.stringEditor;\n break;\n case FieldTypeEnum.NUMBER:\n colDefBase.cellEditor = GridProRendererTypes.numberEditor;\n break;\n case FieldTypeEnum.BOOLEAN:\n colDefBase.cellRenderer = GridProRendererTypes.boolean;\n colDefBase.cellEditor = GridProRendererTypes.boolean;\n break;\n case FieldTypeEnum.DATE:\n colDefBase.valueFormatter = dateValueFormatter;\n colDefBase.cellEditor = GridProRendererTypes.dateEditor;\n break;\n case FieldTypeEnum.DATETIME:\n colDefBase.valueFormatter = dateTimeValueFormatter;\n colDefBase.cellEditor = GridProRendererTypes.dateEditor;\n colDefBase.cellEditorParams = {\n withTime: true,\n };\n break;\n case FieldTypeEnum.ENUM:\n if (field.enumOptions) {\n colDefBase.cellEditor = GridProRendererTypes.selectEditor;\n colDefBase.cellEditorParams = {\n values: field.enumOptions.map((option) => ({ value: option, label: option })),\n valueField: 'value',\n labelField: 'label',\n };\n }\n else {\n logger.warn(`No enumOptions found for field ${field.name}. Default cell editor applied.`);\n }\n break;\n default:\n break;\n }\n if (this.fields && !this.fields.includes(field.name)) {\n return [];\n }\n return Object.assign({ field: field.name, type: getColumnType(field.type), filter: getFilterByFieldType(field.type) }, colDefBase);\n });\n }\n handleStreamInserts(insertedRows, addIndex = 0) {\n // Create a local counter for the insertion index when we need to do sequential inserts\n let currentAddIndex = addIndex;\n insertedRows === null || insertedRows === void 0 ? void 0 : insertedRows.forEach((insertData) => {\n const rowId = insertData[this.rowId];\n if (!rowId) {\n logger.warn('Attempted to insert row without valid rowId', insertData);\n return;\n }\n const existsInInternalState = this.rowData.has(rowId);\n if (existsInInternalState || this.dataSubWasLoggedOff) {\n const existingData = this.rowData.get(rowId);\n const updatedRow = Object.assign(Object.assign({}, existingData), insertData);\n this.transactionData.update.push(updatedRow);\n this.rowData.set(rowId, updatedRow);\n }\n else {\n this.transactionData.add.push(insertData);\n // Use the current add index for this insertion\n this.transactionData.addIndex = currentAddIndex;\n this.rowData.set(rowId, insertData);\n // Only increment the index if we're not inserting at the beginning (addIndex > 0)\n // This ensures rows are inserted in sequence when appending to the end of the grid\n if (addIndex > 0) {\n // Increment for the next insertion\n currentAddIndex += 1;\n }\n }\n });\n }\n handleStreamDeletes(deletedRows) {\n deletedRows === null || deletedRows === void 0 ? void 0 : deletedRows.forEach((deleteData) => {\n if (this.hasDefaultRowId || this.isRequestServer) {\n this.transactionData.remove.push({ [this.rowId]: deleteData[this.rowId] });\n }\n else {\n const rowToBeDeleted = Object.values(Object.fromEntries(this.rowData)).find((obj) => obj[this.defaultRowIdByResourceType] === deleteData[this.defaultRowIdByResourceType]);\n this.transactionData.remove.push({ [this.rowId]: rowToBeDeleted[this.rowId] });\n }\n this.rowData.delete(deleteData[this.rowId]);\n });\n }\n handleStreamUpdates(updatedRows) {\n updatedRows === null || updatedRows === void 0 ? void 0 : updatedRows.forEach((updateData) => {\n let updatedRow;\n if (this.hasDefaultRowId || this.isRequestServer) {\n const rowToBeUpdated = this.rowData.get(updateData[this.rowId]);\n updatedRow = Object.assign(Object.assign({}, rowToBeUpdated), updateData);\n this.transactionData.update.push(updatedRow);\n }\n else {\n const rowToBeUpdated = Object.values(Object.fromEntries(this.rowData)).find((obj) => obj[this.defaultRowIdByResourceType] === updateData[this.defaultRowIdByResourceType]);\n updatedRow = Object.assign(Object.assign({}, rowToBeUpdated), updateData);\n this.transactionData.update.push(updatedRow);\n }\n this.rowData.set(updateData[this.rowId], updatedRow);\n });\n }\n applyAllTransactions() {\n var _a, _b, _c, _d, _e, _f;\n if (!((_a = this.transactionData.add) === null || _a === void 0 ? void 0 : _a.length) &&\n !((_b = this.transactionData.update) === null || _b === void 0 ? void 0 : _b.length) &&\n !((_c = this.transactionData.remove) === null || _c === void 0 ? void 0 : _c.length)) {\n this.$emit(datasourceEventNames.loadingFinished);\n if (this.rowData.size === 0) {\n this.$emit(datasourceEventNames.noDataAvailable);\n }\n return;\n }\n if (((_d = this.transactionData.add) === null || _d === void 0 ? void 0 : _d.length) > 0) {\n this.applyMappedTransaction({\n add: this.transactionData.add,\n addIndex: this.transactionData.addIndex,\n }, OperationType.Add);\n }\n if (((_e = this.transactionData.remove) === null || _e === void 0 ? void 0 : _e.length) > 0) {\n this.applyMappedTransaction({ remove: this.transactionData.remove }, OperationType.Remove);\n }\n if (((_f = this.transactionData.update) === null || _f === void 0 ? void 0 : _f.length) > 0) {\n this.applyMappedTransaction({ update: this.transactionData.update }, OperationType.Update);\n }\n }\n applyMappedTransaction(transaction, operation) {\n const mappedTransaction = this.mapTransaction(transaction, [operation]);\n this.$emit(datasourceEventNames.dataChanged, {\n changes: mappedTransaction,\n });\n }\n applyTransaction(transaction) {\n throw new Error('Method not implemented.');\n }\n /**\n * Maps the transaction data to the row data mapper function, if it exists.\n * @param transaction - The transaction data to be mapped.\n * @param operations - The operations to be mapped. Can be 'add', 'update' or 'remove'.\n * @returns The mapped transaction (if the row data mapper function exists), or the original transaction.\n */\n mapTransaction(transaction, operations = Object.values(OperationType)) {\n if (!this.rowDataMapper) {\n return transaction;\n }\n const mappedTransaction = {};\n if (operations.includes(OperationType.Add)) {\n mappedTransaction.add = this.rowDataMapper(transaction.add, this.rowData);\n }\n if (operations.includes(OperationType.Remove)) {\n mappedTransaction.remove = this.rowDataMapper(transaction.remove, this.rowData);\n }\n if (operations.includes(OperationType.Update)) {\n mappedTransaction.update = this.rowDataMapper(transaction.update, this.rowData);\n }\n if (transaction.addIndex !== undefined) {\n mappedTransaction.addIndex = transaction.addIndex;\n }\n return mappedTransaction;\n }\n loadMore() {\n throw new Error('loadMore() method must be implemented by subclass');\n }\n restart() {\n throw new Error('restart() method must be implemented by subclass');\n }\n reloadResourceData() {\n throw new Error('reloadResourceData() method must be implemented by subclass');\n }\n destroy() {\n throw new Error('destroy() method must be implemented by subclass');\n }\n /**\n * Sets the disconnected state and emits appropriate events.\n * @param disconnected - true to set, false to remove\n */\n setDisconnected(disconnected) {\n this._isDisconnected = disconnected;\n if (disconnected) {\n this.$emit(datasourceEventNames.error, {\n message: 'Datasource disconnected',\n type: 'connection',\n });\n }\n else {\n this.clearErrors();\n }\n }\n /**\n * Returns true if the datasource is disconnected.\n */\n isDisconnected() {\n return this._isDisconnected;\n }\n /**\n * Helper function to extract configuration for status bar actions\n * @internal\n */\n getStatusBarActionConfig(configValue) {\n if (typeof configValue === 'boolean') {\n return { enabled: configValue };\n }\n if (typeof configValue === 'object' && configValue !== null) {\n return {\n enabled: true,\n config: configValue,\n };\n }\n return { enabled: false };\n }\n /**\n * Gets datasource-specific status bar component configurations.\n * This method should be called by the grid to get status bar panels specific to this datasource.\n * @public\n */\n getDatasourceStatusBarPanels(isServerSide, statusBarConfig) {\n var _a, _b, _c, _d, _e, _f;\n const additionalPanels = [];\n // Extract loadMore configuration\n const loadMoreConfig = this.getStatusBarActionConfig(statusBarConfig === null || statusBarConfig === void 0 ? void 0 : statusBarConfig.loadMore);\n // Add load more button if enabled and not server-side\n if (loadMoreConfig.enabled && !isServerSide) {\n const loadMoreParams = {};\n // Use custom callback if provided, otherwise leave undefined for default behavior\n if ((_a = loadMoreConfig.config) === null || _a === void 0 ? void 0 : _a.onLoadMore) {\n loadMoreParams.onLoadMore = loadMoreConfig.config.onLoadMore;\n }\n else {\n loadMoreParams.onLoadMore = this.loadMore.bind(this);\n }\n // Add custom styling parameters\n if ((_b = loadMoreConfig.config) === null || _b === void 0 ? void 0 : _b.appearance) {\n loadMoreParams.appearance = loadMoreConfig.config.appearance;\n }\n // Add tooltip - use custom tooltip if provided, otherwise use default\n loadMoreParams.tooltip = ((_c = loadMoreConfig.config) === null || _c === void 0 ? void 0 : _c.tooltip) || 'Load More';\n additionalPanels.push({\n statusPanel: GridProStatusBarTypes.loadMore,\n statusPanelParams: loadMoreParams,\n align: this.pagination ? 'left' : 'right',\n });\n }\n // Extract reload configuration\n const reloadConfig = this.getStatusBarActionConfig(statusBarConfig === null || statusBarConfig === void 0 ? void 0 : statusBarConfig.reload);\n // Add reload button if enabled\n if (reloadConfig.enabled) {\n const reloadParams = {};\n // Use custom callback if provided, otherwise use default datasource reload\n if ((_d = reloadConfig.config) === null || _d === void 0 ? void 0 : _d.onReload) {\n reloadParams.onReload = reloadConfig.config.onReload;\n }\n else {\n reloadParams.onReload = this.reloadResourceData.bind(this);\n }\n // Add custom styling parameters\n if ((_e = reloadConfig.config) === null || _e === void 0 ? void 0 : _e.icon) {\n reloadParams.icon = reloadConfig.config.icon;\n }\n // Add tooltip - use custom tooltip if provided, otherwise use default\n reloadParams.tooltip = ((_f = reloadConfig.config) === null || _f === void 0 ? void 0 : _f.tooltip) || 'Reload';\n additionalPanels.push({\n statusPanel: GridProStatusBarTypes.reload,\n statusPanelParams: reloadParams,\n align: 'right',\n });\n }\n return additionalPanels;\n }\n}\n","/**\n * Base datasource error event names.\n * @public\n */\nexport const baseDatasourceEventNames = {\n error: 'base-datasource-error',\n connected: 'base-datasource-connected',\n};\n","import { __decorate } from \"tslib\";\nimport { customElement } from '@microsoft/fast-element';\nimport { GridProGenesisDatasource } from '../grid-pro-genesis-datasource';\n/**\n * The Genesis Datasource element, for client-side | CSRM-compatible data fetching and used exclusively by the GridPro element.\n * @remarks Only supports Client-Side Row Model.\n * @public\n */\nlet GridProClientSideDatasource = class GridProClientSideDatasource extends GridProGenesisDatasource {\n};\nGridProClientSideDatasource = __decorate([\n customElement({\n name: 'grid-pro-client-side-datasource',\n })\n], GridProClientSideDatasource);\nexport { GridProClientSideDatasource };\n","import { css, html, when, repeat } from '@microsoft/fast-element';\nimport { extractErrorMessage } from '../utils';\nexport const errorHandlerDialogStyles = css `\n .overlay {\n position: absolute;\n inset: 0;\n width: 100%;\n height: 100%;\n background-color: var(--datasource-error-background-color, var(--neutral-layer-4));\n opacity: var(--datasource-error-background-opacity, 0.5);\n z-index: 1000;\n pointer-events: auto;\n border-radius: 2px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n .dialog-container {\n position: absolute;\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n z-index: 1001;\n max-width: 90vw;\n max-height: 90vh;\n width: 100%;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n opacity: 1 !important;\n filter: none !important;\n box-sizing: border-box;\n }\n .grid-datasource-error-dialog {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n margin: 0 auto;\n max-width: 600px;\n width: 100%;\n box-sizing: border-box;\n background: var(--dialog-background, #2d2533);\n box-shadow: 0 4px 32px 0 rgba(0, 0, 0, 0.45);\n overflow: visible;\n min-height: 120px;\n }\n\n .grid-datasource-error-dialog div {\n width: 600px;\n }\n\n .grid-datasource-error-dialog [slot='top'] {\n margin-bottom: 0;\n }\n\n .grid-datasource-error-dialog [slot='bottom'] {\n display: flex;\n justify-content: flex-end;\n width: 100%;\n }\n\n .error-details {\n max-height: 120px;\n overflow: auto;\n width: 100%;\n margin-top: 8px;\n }\n`;\nexport function getErrorHandlerDialogTemplate(prefix, gridErrorItems) {\n const dialogTag = `${prefix}-dialog`;\n const buttonTag = `${prefix}-button`;\n return html `\n ${when(() => gridErrorItems && gridErrorItems.length > 0, html `\n <div class=\"overlay\"></div>\n <div class=\"dialog-container\">\n <${dialogTag}\n class=\"grid-datasource-error-dialog\"\n type=\"error\"\n show-close-icon=\"false\"\n open\n >\n <h2 slot=\"top\" class=\"title\">Grid unavailable</h2>\n <div>\n <p>\n This may be due to a network, server, or configuration issue.\n </p>\n <details class=\"error-details\">\n <summary>Show details</summary>\n <ul>\n ${repeat(() => gridErrorItems, html `\n <li>\n ${(x) => extractErrorMessage(x.detail) || 'Unknown error occurred'}\n </li>\n `)}\n </ul>\n </details>\n </div>\n <div slot=\"bottom\">\n <${buttonTag} appearance=\"lightweight\" @click=${(x) => {\n var _a;\n x.hideDatasourceError();\n (_a = x.gridProDatasource) === null || _a === void 0 ? void 0 : _a.restart();\n }}>\n Reload\n </${buttonTag}>\n </div>\n </${dialogTag}>\n </div>\n `)}\n `;\n}\n","import { FieldTypeEnum } from '@genesislcap/foundation-comms';\nimport { getEnumFilterParams } from '../grid-pro.definitions';\n/**\n * Returns a filter type based on the Grid Pro field/column type.\n * @param type - The type of the field/column\n * @returns The ag-grid filter type\n */\nexport function getFilterByFieldType(type) {\n switch (type === null || type === void 0 ? void 0 : type.toLowerCase()) {\n case 'int':\n case 'long':\n case 'double':\n case 'bigdecimal':\n case 'number':\n return 'agNumberColumnFilter';\n case 'date':\n case 'datetime':\n return 'agDateColumnFilter';\n case 'enum':\n return 'agSetColumnFilter';\n default:\n return 'agTextColumnFilter';\n }\n}\n/**\n * Returns the filter params based on the Grid Pro field/column type.\n * @param field - The field metadata\n * @returns the filter params for the specified field type\n * @remarks Currently only returns a default filter params object, for all field types\n * @beta\n */\nexport function getServerSideFilterParamsByFieldType(field) {\n switch (field.type) {\n case FieldTypeEnum.BOOLEAN: {\n return {\n buttons: ['reset', 'apply'],\n closeOnApply: true,\n closeOnClear: true,\n maxNumConditions: 1,\n filterOptions: [\n 'contains',\n {\n displayKey: 'true',\n displayName: 'True',\n predicate: (_, cellValue) => cellValue === 'true' || cellValue === true,\n numberOfInputs: 0,\n },\n {\n displayKey: 'false',\n displayName: 'False',\n predicate: (_, cellValue) => cellValue === 'false' || cellValue === false,\n numberOfInputs: 0,\n },\n {\n displayKey: 'true-false',\n displayName: 'True/False',\n predicate: (_, cellValue) => cellValue === 'true' ||\n cellValue === true ||\n cellValue === 'false' ||\n cellValue === false,\n numberOfInputs: 0,\n },\n ],\n };\n }\n case FieldTypeEnum.ENUM: {\n return getEnumFilterParams(field, getFilterByFieldType(field.type));\n }\n case FieldTypeEnum.DATE:\n case FieldTypeEnum.DATETIME: {\n return {\n comparator: (filterLocalDateAtMidnight, cellValue) => {\n if (!cellValue)\n return -1;\n const cellValueTime = new Date(cellValue).setHours(0, 0, 0, 0);\n const filterValueTime = filterLocalDateAtMidnight.getTime();\n if (cellValueTime === filterValueTime) {\n return 0;\n }\n if (cellValueTime < filterValueTime) {\n return -1;\n }\n if (cellValueTime > filterValueTime) {\n return 1;\n }\n },\n buttons: ['reset', 'apply'],\n closeOnApply: true,\n closeOnClear: true,\n maxNumConditions: 1,\n browserDatePicker: true,\n filterOptions: [\n 'equals',\n 'lessThan',\n 'greaterThan',\n 'inRange',\n {\n displayKey: 'isToday',\n displayName: 'Is today',\n numberOfInputs: 0,\n predicate: () => true,\n },\n 'blank',\n 'notBlank',\n ],\n };\n }\n case FieldTypeEnum.NUMBER: {\n return {\n buttons: ['reset', 'apply'],\n closeOnApply: true,\n closeOnClear: true,\n maxNumConditions: 1,\n filterOptions: [\n 'equals',\n 'notEqual',\n 'greaterThan',\n 'greaterThanOrEqual',\n 'lessThan',\n 'lessThanOrEqual',\n 'inRange',\n 'blank',\n 'notBlank',\n ],\n };\n }\n default: {\n return {\n buttons: ['reset', 'apply'],\n closeOnApply: true,\n closeOnClear: true,\n maxNumConditions: 1,\n filterOptions: [\n 'contains',\n 'equals',\n 'notEqual',\n {\n displayKey: 'wordStartsWith',\n displayName: 'Word starts with',\n numberOfInputs: 1,\n predicate: () => true,\n },\n 'blank',\n 'notBlank',\n ],\n };\n }\n }\n}\n","import { __awaiter, __decorate } from \"tslib\";\nimport { Auth, Connect, logger, } from '@genesislcap/foundation-comms';\nimport { UUID } from '@genesislcap/foundation-utils';\n/**\n * Base class for server-side resource datasources used in Grid Pro SSRM implementations.\n * Provides common logic for filtering, sorting, and pagination.\n *\n * @beta\n */\nexport class BaseServerSideDatasource {\n constructor(options) {\n var _a;\n this.rowData = new Map();\n /**\n * The number of rows in the grid. THIS DO NOT CONSIDER CRITERIA_MATCH scenarios.\n * @internal\n */\n this.serverRowsCount = 0;\n /**\n * The number of rows in the grid. THIS IS A LOCAL COUNT CONSIDERING CONSIDER CRITERIA_MATCH scenarios.\n * @internal\n */\n this.clientRowsCount = 0;\n this.moreRows = false;\n this.calculatedRowsCount = 0;\n this.currentSequenceId = null;\n this.reloadResourceDataFunc = options.reloadResourceDataFunc;\n this.errorHandlerFunc = options.errorHandlerFunc;\n this.resourceName = options.resourceName;\n this.resourceParams = options.resourceParams;\n this.originalCriteriaMatch = this.getResourceParam('CRITERIA_MATCH');\n this.resourceIndexes = options.resourceIndexes;\n this.resourceColDefs = options.resourceColDefs;\n this.maxRows = options.maxRows;\n this.maxView = options.maxView;\n this.rowId = options.rowId;\n this.pagination = options.pagination;\n this.zeroBasedViewNumber = options.zeroBasedViewNumber;\n this.pagingMode = options.pagingMode;\n this.criteriaOnlyRequest = (_a = options.criteriaOnlyRequest) !== null && _a !== void 0 ? _a : false;\n }\n /**\n * Gets a resource parameter, handling both REQUEST_SERVER (DETAILS structure) and DATASERVER (flat structure)\n * @param key - The parameter key to retrieve\n * @returns The parameter value, or undefined if not found\n * @internal\n */\n getResourceParam(key) {\n var _a, _b;\n // Check if this is a REQUEST_SERVER structure with DETAILS\n if (((_a = this.resourceParams) === null || _a === void 0 ? void 0 : _a.DETAILS) && typeof this.resourceParams.DETAILS === 'object') {\n return this.resourceParams.DETAILS[key];\n }\n // Otherwise, it's a DATASERVER flat structure\n return (_b = this.resourceParams) === null || _b === void 0 ? void 0 : _b[key];\n }\n /**\n * Sets a resource parameter, handling both REQUEST_SERVER (DETAILS structure) and DATASERVER (flat structure)\n * @param key - The parameter key to set\n * @param value - The value to set\n * @internal\n */\n setResourceParam(key, value) {\n var _a;\n // Check if this is a REQUEST_SERVER structure with DETAILS\n if (((_a = this.resourceParams) === null || _a === void 0 ? void 0 : _a.DETAILS) && typeof this.resourceParams.DETAILS === 'object') {\n this.resourceParams.DETAILS[key] = value;\n }\n else {\n // Otherwise, it's a DATASERVER flat structure\n this.resourceParams[key] = value;\n }\n }\n getRows(params) {\n throw new Error('Method not implemented.');\n }\n /**\n * Handles filtering setup for server-side datasources.\n * Common logic used by both dataserver and req-rep implementations.\n */\n setupFiltering(params) {\n return __awaiter(this, void 0, void 0, function* () {\n const filterModelBeingApplied = params.request.filterModel;\n const filtersAreBeingApplied = Object.keys(filterModelBeingApplied).length > 0;\n const filtersAreGettingCleaned = Object.keys(filterModelBeingApplied).length === 0;\n const filterModelBeingAppliedDiffersFromCurrent = JSON.stringify(filterModelBeingApplied) !== JSON.stringify(this.currentFilterModel);\n if (filterModelBeingAppliedDiffersFromCurrent || filtersAreBeingApplied) {\n if (filtersAreGettingCleaned && this.currentFilterModel) {\n this.currentFilterModel = null;\n this.setResourceParam('CRITERIA_MATCH', this.originalCriteriaMatch);\n yield this.refreshDatasource(params);\n return;\n }\n else if (filterModelBeingAppliedDiffersFromCurrent && filtersAreBeingApplied) {\n this.currentFilterModel = filterModelBeingApplied;\n this.setResourceParam('CRITERIA_MATCH', this.buildCriteriaMatchFromFilters());\n yield this.refreshDatasource(params);\n return;\n }\n }\n });\n }\n /**\n * Legacy method that combines filtering and sorting.\n * Kept for backward compatibility. New implementations should use setupFiltering and setupSorting directly.\n * @deprecated Use setupFiltering() and setupSorting() separately instead\n */\n setupFilteringAndSorting(params) {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.setupFiltering(params);\n yield this.setupSorting(params);\n });\n }\n destroy() {\n this.rowData = new Map();\n this.clientRowsCount = 0;\n this.calculatedRowsCount = 0;\n this.serverRowsCount = 0;\n this.currentSequenceId = 0;\n this.moreRows = false;\n this.sourceRef = undefined;\n this.lastSuccessRowData = undefined;\n }\n refreshDatasource(params) {\n return __awaiter(this, void 0, void 0, function* () {\n this.destroy();\n this.updateResourceParams(params);\n yield this.reloadResourceDataFunc({\n criteria: this.getResourceParam('CRITERIA_MATCH'),\n orderBy: this.getResourceParam('ORDER_BY'),\n reverse: this.getResourceParam('REVERSE'),\n });\n });\n }\n updateResourceParams(params) {\n if (params.criteria !== undefined) {\n this.originalCriteriaMatch = params.criteria;\n this.setResourceParam('CRITERIA_MATCH', this.buildCriteriaMatchFromFilters());\n }\n if (params.orderBy !== undefined) {\n this.setResourceParam('ORDER_BY', params.orderBy);\n }\n if (params.reverse !== undefined) {\n this.setResourceParam('REVERSE', params.reverse);\n }\n }\n getOrderByAndToBeSortedColIds(map, searchValue) {\n for (const [key, value] of map.entries()) {\n const searchIndex = value.findIndex((x) => x === searchValue);\n if (searchIndex !== -1) {\n const copy = [...value];\n const toBeSorted = copy.splice(searchIndex, 1);\n return { orderBy: key, toBeSorted };\n }\n }\n }\n buildCriteriaMatchFromFilters() {\n this.setResourceParam('CRITERIA_MATCH', this.originalCriteriaMatch);\n let criteriaMatch = this.getResourceParam('CRITERIA_MATCH');\n if (criteriaMatch && typeof criteriaMatch === 'string') {\n criteriaMatch = criteriaMatch.split(';');\n this.setResourceParam('CRITERIA_MATCH', criteriaMatch);\n }\n if (!criteriaMatch) {\n criteriaMatch = [];\n this.setResourceParam('CRITERIA_MATCH', criteriaMatch);\n }\n const criteria = criteriaMatch.concat(this.criteriaFromFilters());\n return criteria.join(' && ');\n }\n criteriaFromFilters() {\n const filters = [];\n this.getFiltersByType('text').forEach((k) => {\n if (!this.currentFilterModel[k].filter &&\n (this.currentFilterModel[k].type === 'false' || this.currentFilterModel[k].type === 'true')) {\n filters.push(`${k} == ${this.currentFilterModel[k].type}`);\n }\n else {\n switch (this.currentFilterModel[k].type) {\n case 'blank':\n filters.push(`(${k} == '' || ${k} == null)`);\n break;\n case 'contains':\n filters.push(`Expr.containsIgnoreCase(${k}, '${this.currentFilterModel[k].filter}')`);\n break;\n case 'equals':\n filters.push(`${k} == '${this.currentFilterModel[k].filter}'`);\n break;\n case 'notBlank':\n filters.push(`(${k} != '' && ${k} != null)`);\n break;\n case 'notEqual':\n filters.push(`${k} != '${this.currentFilterModel[k].filter}'`);\n break;\n case 'wordStartsWith':\n filters.push(`Expr.containsWordsStartingWithIgnoreCase(${k}, '${this.currentFilterModel[k].filter}')`);\n break;\n }\n }\n });\n // TODO: Handle multi filters if we decide we want to use them in SSRM\n // Handle set filters (typically used for enum fields with ag-set-column-filter)\n this.getFiltersByType('set').forEach((k) => {\n var _a, _b, _c;\n const model = (_a = this.currentFilterModel) === null || _a === void 0 ? void 0 : _a[k];\n const selectedValues = ((_b = model === null || model === void 0 ? void 0 : model.values) !== null && _b !== void 0 ? _b : []);\n if (!selectedValues || selectedValues.length === 0) {\n // Nothing selected means no additional criteria\n return;\n }\n // Try to detect \"all values selected\" using VALID_VALUES from metadata.\n // In that case we don't want to send any criteria, as it would be equivalent\n // to no filter at all.\n const colMeta = (_c = this.resourceColDefs) === null || _c === void 0 ? void 0 : _c.find((o) => o.NAME === k);\n let allValues;\n if (colMeta === null || colMeta === void 0 ? void 0 : colMeta.VALID_VALUES) {\n try {\n allValues = Array.isArray(colMeta.VALID_VALUES)\n ? colMeta.VALID_VALUES\n : colMeta.VALID_VALUES.split('|');\n }\n catch (_d) {\n allValues = undefined;\n }\n }\n if (allValues &&\n allValues.length === selectedValues.length &&\n allValues.every((v) => selectedValues.includes(v))) {\n // All enum options are selected – skip adding criteria for this column\n return;\n }\n const orConditions = selectedValues.map((val) => {\n const safeVal = String(val).replace(/'/g, \"\\\\'\");\n return `${k} == '${safeVal}'`;\n });\n if (orConditions.length > 0) {\n filters.push(`(${orConditions.join(' || ')})`);\n }\n });\n this.getFiltersByType('number').forEach((k) => {\n const value = this.currentFilterModel[k].filter;\n const valueTwo = this.currentFilterModel[k].filterTo;\n switch (this.currentFilterModel[k].type) {\n case 'equals':\n !isNaN(value) && filters.push(`${k} == ${value}`);\n break;\n case 'notEqual':\n !isNaN(value) && filters.push(`${k} != ${value}`);\n break;\n case 'greaterThan':\n !isNaN(value) && filters.push(`${k} > ${value}`);\n break;\n case 'greaterThanOrEqual':\n !isNaN(value) && filters.push(`${k} >= ${value}`);\n break;\n case 'lessThan':\n !isNaN(value) && filters.push(`${k} < ${value}`);\n break;\n case 'lessThanOrEqual':\n !isNaN(value) && filters.push(`${k} <= ${value}`);\n break;\n case 'inRange':\n !isNaN(value) &&\n !isNaN(valueTwo) &&\n filters.push(`${k} >= ${value} && ${k} <= ${valueTwo}`);\n break;\n case 'blank':\n filters.push(`${k} == 0`);\n break;\n case 'notBlank':\n filters.push(`${k} != 0`);\n break;\n }\n });\n this.getFiltersByType('date').forEach((k) => {\n var _a, _b;\n const dateFrom = (_a = this.currentFilterModel[k].dateFrom) === null || _a === void 0 ? void 0 : _a.replace(/-/g, '').replace('T', '-').split(' ')[0];\n const dateTo = (_b = this.currentFilterModel[k].dateTo) === null || _b === void 0 ? void 0 : _b.replace(/-/g, '').replace('T', '-').split(' ')[0];\n switch (this.currentFilterModel[k].type) {\n case 'equals':\n filters.push(`Expr.dateIsEqual(${k}, '${dateFrom}')`);\n break;\n case 'lessThan':\n filters.push(`Expr.dateIsBefore(${k}, '${dateFrom}')`);\n break;\n case 'greaterThan':\n filters.push(`Expr.dateIsAfter(${k}, '${dateFrom}')`);\n break;\n case 'inRange':\n filters.push(`Expr.dateIsAfter(${k}, '${dateFrom}') && Expr.dateIsBefore(${k}, '${dateTo}')`);\n break;\n case 'isToday':\n const now = new Date();\n const year = now.getFullYear();\n const month = (now.getMonth() + 1).toString().padStart(2, '0');\n const day = now.getDate().toString().padStart(2, '0');\n const todayStr = `${year}-${month}-${day} 00:00:00`;\n filters.push(`Expr.dateIsEqual(${k}, '${todayStr}')`);\n break;\n case 'blank':\n filters.push(`${k} == null`);\n break;\n case 'notBlank':\n filters.push(`${k} != null`);\n break;\n }\n });\n return filters;\n }\n getFiltersByType(filterType) {\n var _a;\n return Object.keys((_a = this.currentFilterModel) !== null && _a !== void 0 ? _a : {})\n .filter((k) => this.resourceColDefs.findIndex((o) => o.NAME === k) !== -1)\n .filter((k) => this.currentFilterModel[k].filterType === filterType);\n }\n getPageNumber(start, recordsPerPage, totalRecords, zeroBasedViewNumber = true) {\n if (totalRecords !== undefined && start > totalRecords) {\n start = Math.floor((totalRecords - 1) / recordsPerPage) * recordsPerPage + 1;\n }\n const currentPageIndex = Math.ceil(start / recordsPerPage);\n return zeroBasedViewNumber ? currentPageIndex : currentPageIndex + 1;\n }\n getCorrectRowCount(params) {\n const currentLastRowNumber = params.request.endRow;\n this.calculatedRowsCount = this.clientRowsCount || currentLastRowNumber;\n const defaultCount = Math.min(this.serverRowsCount, this.maxView);\n let rowCount;\n const criteriaMatch = this.getResourceParam('CRITERIA_MATCH');\n if (this.pagination) {\n rowCount = !criteriaMatch ? Math.min(this.serverRowsCount, this.maxView) : undefined;\n if (criteriaMatch) {\n rowCount = defaultCount;\n }\n return rowCount;\n }\n if (currentLastRowNumber === this.serverRowsCount) {\n rowCount = this.serverRowsCount;\n }\n else if (currentLastRowNumber > this.maxView ||\n currentLastRowNumber > this.calculatedRowsCount) {\n rowCount = Math.min(defaultCount, this.calculatedRowsCount);\n }\n else if (!this.moreRows && this.serverRowsCount > this.calculatedRowsCount) {\n rowCount = this.calculatedRowsCount;\n }\n return rowCount;\n }\n get isNotFirstViewNumber() {\n return this.zeroBasedViewNumber ? this.currentSequenceId > 0 : this.currentSequenceId > 1;\n }\n /**\n * Determines the effective paging mode based on criteriaOnlyRequest availability and user settings\n */\n getEffectivePagingMode() {\n // If user explicitly set a paging mode\n if (this.pagingMode) {\n // If criteriaOnlyRequest is not available but user wants offsetBased, warn and use viewBased\n if (this.pagingMode === 'offsetBased' && !this.criteriaOnlyRequest) {\n logger.warn('offsetBased paging mode requires criteriaOnlyRequest support. Falling back to viewBased mode.');\n return 'viewBased';\n }\n return this.pagingMode;\n }\n // Auto-determine based on criteriaOnlyRequest availability\n return this.criteriaOnlyRequest ? 'offsetBased' : 'viewBased';\n }\n}\n__decorate([\n Auth\n], BaseServerSideDatasource.prototype, \"auth\", void 0);\n__decorate([\n Connect\n], BaseServerSideDatasource.prototype, \"connect\", void 0);\n__decorate([\n UUID\n], BaseServerSideDatasource.prototype, \"uuid\", void 0);\n","import { __awaiter } from \"tslib\";\nimport { MessageType, dataServerResultFilter, logger, } from '@genesislcap/foundation-comms';\nimport { DOM } from '@microsoft/fast-element';\nimport { getAvailableIndexes, getAvailableIndexFields } from '../utils';\nimport { BaseServerSideDatasource } from './server-side.resource-base';\n/**\n * The DATASERVER IServerSideDatasource implementation, used for SSRM (Server-Side Row Model) in the grid.\n * @beta\n */\nexport class DataserverServerSideDatasource extends BaseServerSideDatasource {\n constructor(options) {\n super(options);\n this.createDataserverStreamFunc = options.createDataserverStreamFunc;\n }\n refreshDatasource(params) {\n const _super = Object.create(null, {\n refreshDatasource: { get: () => super.refreshDatasource }\n });\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n (_a = this.dataserverStreamSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n this.dataserverStreamSubscription = undefined;\n yield _super.refreshDatasource.call(this, params);\n });\n }\n getRows(params) {\n return __awaiter(this, void 0, void 0, function* () {\n // Use separated filtering and sorting setup\n yield this.setupFiltering(params);\n yield this.setupSorting(params);\n if (this.pagination && !this.isNewPageSize && this.currentSequenceId > 0) {\n params.success(this.lastSuccessRowData);\n return;\n }\n if (!this.dataserverStream) {\n this.dataserverStream = yield this.createDataserverStreamFunc(this.resourceParams);\n }\n if (this.currentSequenceId >= 1 &&\n (this.moreRows ||\n params.request.startRow >= Number(this.maxRows) ||\n params.request.startRow === 0)) {\n if (this.pagination) {\n this.resourceParams.VIEW_NUMBER = this.getPageNumber(params.request.startRow, this.maxRows, this.maxView, this.zeroBasedViewNumber);\n // if (this.resourceParams.VIEW_NUMBER === 1) {\n // await this.refreshDatasource(params);\n // return;\n // }\n }\n this.connect.getMoreRows(this.sourceRef, this.resourceParams.VIEW_NUMBER);\n }\n let applyResult = true;\n this.dataserverStreamSubscription = this.dataserverStream.subscribe((dataserverResult) => {\n if (applyResult) {\n DOM.queueUpdate(() => __awaiter(this, void 0, void 0, function* () {\n // TODO: this is a bit of hack, due GSF not returning a different ROWS_COUNT when there is a CRITERIA_MATCH\n if (this.resourceParams.CRITERIA_MATCH && this.pagination) {\n const updatedInfo = yield this.connect.snapshot(this.resourceName, {\n MAX_ROWS: this.maxView,\n MAX_VIEW: this.maxView,\n CRITERIA_MATCH: this.resourceParams.CRITERIA_MATCH,\n });\n if (!updatedInfo.ROW && !updatedInfo.ROWS_COUNT) {\n logger.warn('No data returned when criteria is applied.');\n this.serverRowsCount = 0;\n this.clientRowsCount = 0;\n }\n else {\n this.serverRowsCount = this.resourceParams.CRITERIA_MATCH\n ? updatedInfo.ROW.length\n : updatedInfo.ROWS_COUNT;\n }\n }\n this.applyServerSideData(params, dataserverResult);\n applyResult = false;\n }));\n }\n });\n });\n }\n applyServerSideData(params, result) {\n var _a;\n const messageType = result.MESSAGE_TYPE;\n if (messageType &&\n (messageType === MessageType.LOGOFF_ACK || messageType === MessageType.MSG_NACK)) {\n // Trigger error dialog for connection/authentication errors\n if (this.errorHandlerFunc) {\n const errorMessage = messageType === MessageType.LOGOFF_ACK\n ? `Connection lost to ${this.resourceName}`\n : `Authentication failed for ${this.resourceName}`;\n this.errorHandlerFunc(errorMessage, 'connection');\n }\n params.fail();\n return;\n }\n this.moreRows = result.MORE_ROWS;\n if (result.ROW) {\n const nextMessage = dataServerResultFilter(result);\n this.handleCurrentStreamLoad(nextMessage);\n }\n else {\n this.rowData = new Map();\n const successRowData = { rowData: [] };\n successRowData.rowCount = 0;\n params.success(successRowData);\n return;\n }\n this.currentSequenceId = result.SEQUENCE_ID;\n if (this.currentSequenceId === 1) {\n this.sourceRef = result.SOURCE_REF;\n if (this.serverRowsCount === 0) {\n this.serverRowsCount = (_a = result.ROWS_COUNT) !== null && _a !== void 0 ? _a : this.rowData.size;\n }\n }\n const successRowData = {\n rowData: Array.from(this.rowData.values()),\n };\n successRowData.rowCount = this.getCorrectRowCount(params);\n this.lastSuccessRowData = successRowData;\n params.success(successRowData);\n }\n /**\n * Dataserver-specific sorting setup that validates columns are part of an index.\n * This is required because dataserver needs indexed columns for efficient sorting.\n */\n setupSorting(params) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const toBeAppliedSortModel = params.request.sortModel;\n if (((_a = this.currentSortModel) === null || _a === void 0 ? void 0 : _a.length) !== toBeAppliedSortModel.length ||\n toBeAppliedSortModel.length > 0) {\n if (toBeAppliedSortModel.length === 0 && this.currentSortModel) {\n this.calculatedRowsCount = 0;\n this.currentSortModel = null;\n this.resourceParams.ORDER_BY = null;\n this.resourceParams.REVERSE = null;\n yield this.refreshDatasource(params);\n return;\n }\n else if (toBeAppliedSortModel.length > 0) {\n const coldIdBeingSorted = toBeAppliedSortModel[0].colId; // Not allowing multiple sorts by user\n const sortTypeBeingApplied = toBeAppliedSortModel[0].sort;\n const orderByAndToBeSortedColIds = this.getOrderByAndToBeSortedColIds(this.resourceIndexes, coldIdBeingSorted);\n if (!orderByAndToBeSortedColIds) {\n this.calculatedRowsCount = 0;\n const availableIndexes = getAvailableIndexes(this.resourceIndexes);\n const availableIndexFields = getAvailableIndexFields(this.resourceIndexes);\n logger.warn(`The FIELD/column (${coldIdBeingSorted}) being sorted is not part of an INDEX, required for the [orderBy] operation. See https://learn.genesis.global/docs/database/data-types/index-entities/`);\n logger.debug('Available indexes:', availableIndexes);\n logger.debug('Columns that can be sorted with the available indexes:', availableIndexFields);\n params.fail();\n return;\n }\n else if (JSON.stringify(toBeAppliedSortModel) !== JSON.stringify(this.currentSortModel)) {\n this.currentSortModel = toBeAppliedSortModel;\n this.resourceParams.ORDER_BY = orderByAndToBeSortedColIds.orderBy;\n this.resourceParams.REVERSE = sortTypeBeingApplied === 'desc' ? true : false;\n yield this.refreshDatasource(params);\n return;\n }\n }\n }\n });\n }\n destroy() {\n const _super = Object.create(null, {\n destroy: { get: () => super.destroy }\n });\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n this.dataserverStream = undefined;\n (_a = this.dataserverStreamSubscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n this.dataserverStreamSubscription = undefined;\n yield _super.destroy.call(this);\n });\n }\n handleCurrentStreamLoad(result) {\n var _a, _b;\n if (!result)\n return;\n const rows = new Map();\n (_a = result.inserts) === null || _a === void 0 ? void 0 : _a.forEach((insertData) => {\n rows.set(insertData[this.rowId], insertData);\n });\n this.clientRowsCount += (_b = result.inserts.length) !== null && _b !== void 0 ? _b : 0;\n this.rowData = rows;\n }\n}\n","import { __awaiter } from \"tslib\";\nimport { MessageType, } from '@genesislcap/foundation-comms';\nimport debounce from 'lodash.debounce';\nimport { logger } from '../utils';\nimport { BaseServerSideDatasource } from './server-side.resource-base';\n/**\n * Debounce time for stream creation after user stops scrolling (in ms)\n */\nconst POLLING_STREAM_DEBOUNCE_MS = 300;\n/**\n * The REQUEST_SERVER IServerSideDatasource implementation, used for SSRM (Server-Side Row Model) in the grid.\n * @beta\n */\nexport class ReqRepServerSideDatasource extends BaseServerSideDatasource {\n constructor(options) {\n var _a, _b, _c, _d, _e;\n super(options);\n // Track the total discovered row count when we reach the last page\n this.discoveredTotalRowCount = null;\n this.currentNextOffset = 0;\n this.createReqRepRequestFunc = options.createReqRepRequestFunc;\n this.createReqRepStreamFunc = options.createReqRepStreamFunc;\n this.onPollingUpdate = options.onPollingUpdateFunc;\n this.resetPreviousPollResult = options.resetPreviousPollResultFunc;\n this.usePolling = (_a = options.usePolling) !== null && _a !== void 0 ? _a : false;\n // Initialize debounced stream creation function\n this.debouncedCreateStream = debounce((params) => this.createPollingStream(params), POLLING_STREAM_DEBOUNCE_MS);\n const effectivePagingMode = this.getEffectivePagingMode();\n // Initialize based on paging mode\n if (effectivePagingMode === 'viewBased') {\n if (!((_c = (_b = options.resourceParams) === null || _b === void 0 ? void 0 : _b.DETAILS) === null || _c === void 0 ? void 0 : _c.VIEW_NUMBER)) {\n this.resourceParams.DETAILS.VIEW_NUMBER = this.zeroBasedViewNumber ? 0 : 1;\n }\n }\n else {\n // offsetBased\n if (!((_e = (_d = options.resourceParams) === null || _d === void 0 ? void 0 : _d.DETAILS) === null || _e === void 0 ? void 0 : _e.OFFSET)) {\n this.resourceParams.DETAILS.OFFSET = 0;\n }\n }\n }\n getRows(params) {\n return __awaiter(this, void 0, void 0, function* () {\n // Use custom filtering and sorting setup for req-rep\n yield this.setupFiltering(params);\n yield this.setupSorting(params);\n if (this.pagination && !this.isNewPageSize && this.currentSequenceId > 0) {\n params.success(this.lastSuccessRowData);\n return;\n }\n const effectivePagingMode = this.getEffectivePagingMode();\n // Update pagination params based on paging mode\n this.updatePaginationParams(params, effectivePagingMode);\n const requestParams = {\n DETAILS: this.buildRequestDetails(effectivePagingMode),\n };\n const requestResult = yield this.createReqRepRequestFunc(requestParams);\n // Determine if this is the last view/page\n const isLastView = yield this.determineIsLastView(requestResult, requestParams, effectivePagingMode);\n // Apply the result to the grid\n this.applyServerSideData(params, requestResult, isLastView);\n // If polling enabled, schedule stream creation after user stops scrolling\n this.schedulePollingStream(requestParams);\n });\n }\n /**\n * Update pagination params based on paging mode\n */\n updatePaginationParams(params, effectivePagingMode) {\n if (effectivePagingMode === 'viewBased') {\n if (this.currentSequenceId !== null && this.currentSequenceId >= 0 && this.moreRows) {\n if (this.pagination) {\n this.resourceParams.DETAILS.VIEW_NUMBER = this.getPageNumber(params.request.startRow, this.maxRows, undefined, // Don't pass maxView as totalRecords since it's not a valid total count\n this.zeroBasedViewNumber);\n }\n else {\n this.resourceParams.DETAILS.VIEW_NUMBER += 1;\n }\n }\n }\n else {\n // offsetBased: use startRow as the OFFSET to ensure correct block-to-offset mapping,\n // even when blocks are re-requested out of order (e.g. polling refresh of block 0)\n this.resourceParams.DETAILS.OFFSET = params.request.startRow;\n }\n }\n /**\n * Determine if this is the last view/page\n */\n determineIsLastView(requestResult, requestParams, effectivePagingMode) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const hasMoreRowsInResult = 'MORE_ROWS' in requestResult;\n let isLastView = false;\n if (effectivePagingMode === 'viewBased') {\n if (hasMoreRowsInResult) {\n isLastView = !requestResult.MORE_ROWS;\n }\n else if (requestResult.NEXT_VIEW !== -1) {\n const preCheckRequestParams = Object.assign(Object.assign({}, requestParams), { DETAILS: Object.assign(Object.assign({}, requestParams.DETAILS), { VIEW_NUMBER: requestResult.NEXT_VIEW }) });\n const moreRowsPreCheck = yield this.createReqRepRequestFunc(preCheckRequestParams);\n isLastView = moreRowsPreCheck.NEXT_VIEW === -1 && ((_a = moreRowsPreCheck.REPLY) === null || _a === void 0 ? void 0 : _a.length) === 0;\n }\n }\n else {\n // offsetBased\n isLastView = hasMoreRowsInResult && !requestResult.MORE_ROWS;\n if ('NEXT_OFFSET' in requestResult && requestResult.NEXT_OFFSET !== -1) {\n this.currentNextOffset = requestResult.NEXT_OFFSET;\n }\n else {\n this.currentNextOffset = 0;\n }\n }\n return isLastView;\n });\n }\n /**\n * Schedules polling stream creation if enabled.\n * @remarks\n * Destroys any existing stream and schedules a new one after the user stops scrolling (debounced).\n * This prevents excessive stream recreation during rapid scrolling.\n */\n schedulePollingStream(requestParams) {\n if (this.usePolling && this.createReqRepStreamFunc) {\n this.destroyPollingStream();\n this.debouncedCreateStream(requestParams);\n }\n }\n applyServerSideData(params, result, isLastView) {\n var _a, _b;\n const messageType = result.MESSAGE_TYPE;\n if (messageType &&\n (messageType === MessageType.LOGOFF_ACK || messageType === MessageType.MSG_NACK)) {\n // Trigger error dialog for connection/authentication errors\n if (this.errorHandlerFunc) {\n const errorMessage = messageType === MessageType.LOGOFF_ACK\n ? `Connection lost to ${this.resourceName}`\n : `Authentication failed for ${this.resourceName}`;\n this.errorHandlerFunc(errorMessage, 'connection');\n }\n params.fail();\n return;\n }\n const effectivePagingMode = this.getEffectivePagingMode();\n // TODO: the code below will be tweaked/removed when gsf <8.14 is no longer supported\n if ('MORE_ROWS' in result) {\n this.moreRows = result.MORE_ROWS;\n }\n else {\n // Fall back to the existing logic for backwards compatibility\n if (effectivePagingMode === 'viewBased') {\n this.moreRows =\n !isLastView &&\n result.NEXT_VIEW !== -1 &&\n result.NEXT_VIEW > this.resourceParams.DETAILS.VIEW_NUMBER;\n }\n else {\n // offsetBased\n this.moreRows =\n !isLastView &&\n result.NEXT_OFFSET !== -1 &&\n result.NEXT_OFFSET > this.resourceParams.DETAILS.OFFSET;\n }\n }\n if (result.REPLY) {\n this.handleCurrentStreamLoad(result.REPLY);\n }\n else {\n this.rowData = new Map();\n const successRowData = { rowData: [] };\n successRowData.rowCount = 0;\n params.success(successRowData);\n return;\n }\n // Update current sequence ID based on paging mode\n if (effectivePagingMode === 'viewBased') {\n this.currentSequenceId = this.resourceParams.DETAILS.VIEW_NUMBER;\n }\n else {\n // For offsetBased, use OFFSET / maxRows to get the sequence\n this.currentSequenceId = Math.floor(this.resourceParams.DETAILS.OFFSET / this.maxRows);\n }\n this.sourceRef = result.SOURCE_REF;\n // For req-rep, store the total row count when we reach the last page\n if (!this.moreRows) {\n const currentBatchSize = this.rowData.size;\n this.discoveredTotalRowCount = params.request.startRow + currentBatchSize;\n }\n // Reset serverRowsCount accumulation for req-rep pagination\n if (this.pagination) {\n this.serverRowsCount = (_a = result.ROWS_COUNT) !== null && _a !== void 0 ? _a : this.rowData.size;\n }\n else {\n this.serverRowsCount += (_b = result.ROWS_COUNT) !== null && _b !== void 0 ? _b : this.rowData.size;\n }\n const successRowData = {\n rowData: Array.from(this.rowData.values()),\n };\n successRowData.rowCount = this.getCorrectRowCount(params);\n this.lastSuccessRowData = successRowData;\n params.success(successRowData);\n }\n getCorrectRowCount(params) {\n let rowCount;\n if (this.pagination) {\n if (this.moreRows) {\n // More data available, return -1 to indicate unknown total\n rowCount = -1;\n }\n else {\n // Use discovered total if available, otherwise calculate from current position\n rowCount = this.discoveredTotalRowCount || params.request.startRow + this.rowData.size;\n }\n return rowCount;\n }\n // Non-pagination mode (streaming)\n if (this.moreRows) {\n rowCount = -1; // More data available, unknown total\n }\n else {\n // Use discovered total or calculate from current batch\n rowCount = this.discoveredTotalRowCount || params.request.startRow + this.rowData.size;\n }\n return rowCount;\n }\n handleCurrentStreamLoad(reply) {\n if (!reply || reply.length == 0)\n return;\n const rows = new Map();\n reply.forEach((insertData) => {\n const insertDataRowId = insertData[this.rowId];\n if (insertDataRowId) {\n rows.set(insertDataRowId, insertData);\n return;\n }\n const noRowIdMessage = `The specified rowId (${this.rowId}) is not present in the data. Since this is a snapshot (isSnapshot=true), an auto-generated UUID will be used. For custom identifiers, use the 'row-id' attribute.`;\n logger.error(noRowIdMessage);\n const tempId = this.uuid.createId();\n insertData[this.rowId] = tempId;\n rows.set(tempId, insertData);\n });\n this.rowData = rows;\n }\n /**\n * Req-rep specific sorting setup that allows any column to be sorted\n * (unlike dataserver which requires indexed columns only)\n */\n setupSorting(params) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n const toBeAppliedSortModel = params.request.sortModel;\n if (((_a = this.currentSortModel) === null || _a === void 0 ? void 0 : _a.length) !== toBeAppliedSortModel.length ||\n toBeAppliedSortModel.length > 0) {\n if (toBeAppliedSortModel.length === 0 && this.currentSortModel) {\n this.calculatedRowsCount = 0;\n this.currentSortModel = null;\n this.resourceParams.DETAILS.ORDER_BY = undefined;\n yield this.refreshDatasource(params);\n return;\n }\n else if (toBeAppliedSortModel.length > 0) {\n const coldIdBeingSorted = toBeAppliedSortModel[0].colId; // Not allowing multiple sorts by user\n const sortTypeBeingApplied = toBeAppliedSortModel[0].sort;\n // For req-rep, we can sort by any column without requiring it to be part of an index\n if (JSON.stringify(toBeAppliedSortModel) !== JSON.stringify(this.currentSortModel)) {\n this.currentSortModel = toBeAppliedSortModel;\n this.resourceParams.DETAILS.ORDER_BY =\n coldIdBeingSorted + (sortTypeBeingApplied === 'desc' ? ' DESC' : ' ASC'); // Use the column directly\n yield this.refreshDatasource(params);\n return;\n }\n }\n }\n });\n }\n refreshDatasource(params) {\n const _super = Object.create(null, {\n refreshDatasource: { get: () => super.refreshDatasource }\n });\n return __awaiter(this, void 0, void 0, function* () {\n this.destroyPollingStream();\n if (this.debouncedCreateStream) {\n this.debouncedCreateStream.cancel();\n }\n this.discoveredTotalRowCount = null;\n this.currentNextOffset = 0;\n this.resourceParams.DETAILS.VIEW_NUMBER = this.zeroBasedViewNumber ? 0 : 1;\n this.resourceParams.DETAILS.OFFSET = 0;\n yield _super.refreshDatasource.call(this, params);\n });\n }\n destroy() {\n const _super = Object.create(null, {\n destroy: { get: () => super.destroy }\n });\n return __awaiter(this, void 0, void 0, function* () {\n this.destroyPollingStream();\n if (this.debouncedCreateStream) {\n this.debouncedCreateStream.cancel();\n }\n yield _super.destroy.call(this);\n });\n }\n /**\n * Creates a polling stream for the currently loaded data.\n * @remarks\n * This method creates a separate datasource instance that polls all currently loaded rows\n * (from offset 0 to current offset + maxRows). The polling results are sent to the parent\n * datasource via the `onPollingUpdate` callback for change detection and grid updates.\n *\n * The stream will only apply updates if the request params haven't changed (user hasn't\n * scrolled away or changed filters/sorting).\n * @param requestParams - The request parameters for the current view\n */\n createPollingStream(requestParams) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n this.destroyPollingStream();\n this.currentStreamParams = requestParams;\n const { stream, datasource } = yield this.createReqRepStreamFunc(requestParams);\n this.reqRepPollingStream = stream;\n this.reqRepPollingDatasource = datasource;\n this.reqRepPollingSubscription = this.reqRepPollingStream.subscribe({\n next: (result) => {\n if (this.currentStreamParams &&\n JSON.stringify(this.currentStreamParams) === JSON.stringify(requestParams)) {\n if (this.onPollingUpdate) {\n this.onPollingUpdate(result);\n }\n }\n },\n error: (error) => {\n var _a;\n logger.error('Polling stream error:', error);\n if (this.errorHandlerFunc) {\n this.errorHandlerFunc(((_a = error === null || error === void 0 ? void 0 : error.receivedMessage) === null || _a === void 0 ? void 0 : _a.ERROR) || (error === null || error === void 0 ? void 0 : error.message), 'stream');\n }\n },\n });\n logger.debug('Polling stream created for params:', requestParams);\n }\n catch (error) {\n logger.error('Failed to create polling stream:', error);\n }\n });\n }\n /**\n * Destroys the current polling stream and associated datasource.\n * @remarks\n * Cleans up the polling subscription, destroys the separate polling datasource instance,\n * and resets the previous poll comparison state. Called when:\n * - User scrolls to a new page\n * - Filters or sorting changes\n * - The datasource is being destroyed\n */\n destroyPollingStream() {\n if (this.reqRepPollingSubscription) {\n this.reqRepPollingSubscription.unsubscribe();\n this.reqRepPollingSubscription = undefined;\n logger.debug('Polling subscription destroyed');\n }\n if (this.reqRepPollingDatasource) {\n this.reqRepPollingDatasource.destroy();\n this.reqRepPollingDatasource = undefined;\n logger.debug('Polling datasource destroyed');\n }\n this.reqRepPollingStream = undefined;\n this.currentStreamParams = undefined;\n if (this.resetPreviousPollResult) {\n this.resetPreviousPollResult();\n }\n }\n buildRequestDetails(effectivePagingMode) {\n const baseDetails = {\n CRITERIA_MATCH: this.resourceParams.DETAILS.CRITERIA_MATCH,\n MAX_ROWS: this.resourceParams.DETAILS.MAX_ROWS,\n ORDER_BY: this.resourceParams.DETAILS.ORDER_BY,\n };\n if (effectivePagingMode === 'viewBased') {\n return Object.assign(Object.assign({}, baseDetails), { VIEW_NUMBER: this.resourceParams.DETAILS.VIEW_NUMBER });\n }\n else {\n // offsetBased\n return Object.assign(Object.assign({}, baseDetails), { OFFSET: this.resourceParams.DETAILS.OFFSET });\n }\n }\n}\n","import { __awaiter, __decorate } from \"tslib\";\nimport { dataServerResultFilter, Datasource, MessageType, normaliseCriteria, toFieldMetadata, } from '@genesislcap/foundation-comms';\nimport { insertDocumentCSSRule, JSONSerializer, LifecycleMixin, } from '@genesislcap/foundation-utils';\nimport { attr, customElement, DOM, observable } from '@microsoft/fast-element';\nimport { gridProGenesisDatasourceEventNames } from '../grid-pro-genesis-datasource';\nimport { datasourceEventNames, } from '../grid-pro-genesis-datasource/datasource-events.types';\nimport { logger } from '../utils';\nimport { GridProBaseDatasource } from './base.datasource';\nimport { getFilterByFieldType, getServerSideFilterParamsByFieldType, } from './server-side.grid-definitions';\nimport { DataserverServerSideDatasource } from './server-side.resource-dataserver';\nimport { ReqRepServerSideDatasource } from './server-side.resource-reqrep';\nconst criteriaDelimiter = ';';\nconst withoutColumnDefs = null;\n/**\n * Custom CSS for server-side datasource sort indicators\n * Makes sort indicators always visible with custom styling\n */\nconst serverSideSortIndicatorCSS = `\n .grid-pro-server-side .ag-header-cell-sortable .ag-sort-indicator-container {\n opacity: 1 !important;\n visibility: visible !important;\n }\n \n .grid-pro-server-side .ag-header-cell-sortable:not(.ag-header-cell-sorted) .ag-sort-indicator-container {\n opacity: 0.4 !important;\n }\n \n .grid-pro-server-side .ag-header-cell-sorted .ag-sort-indicator-container {\n opacity: 1 !important;\n }\n \n .grid-pro-server-side .ag-sort-ascending-icon::before,\n .grid-pro-server-side .ag-sort-descending-icon::before,\n .grid-pro-server-side .ag-header-cell-sortable:not(.ag-header-cell-sorted) .ag-sort-indicator-icon::before {\n font-family: var(--ag-icon-font-family, agGridAlpine) !important;\n font-size: var(--ag-icon-size, 16px) !important;\n color: var(--ag-header-foreground-color, var(--ag-foreground-color)) !important;\n }\n \n .grid-pro-server-side .ag-sort-ascending-icon::before {\n content: \"\\\\e90d\" !important; /* AG Grid sort up icon */\n }\n \n .grid-pro-server-side .ag-sort-descending-icon::before {\n content: \"\\\\e90c\" !important; /* AG Grid sort down icon */\n }\n \n .grid-pro-server-side .ag-header-cell-sortable:not(.ag-header-cell-sorted) .ag-sort-indicator-icon::before {\n content: \"\\\\e90b\" !important; /* AG Grid sort icon */\n opacity: 0.6 !important;\n }\n \n /* Ensure the sort indicator is always visible for sortable columns in server-side mode */\n .grid-pro-server-side .ag-header-cell-sortable .ag-sort-indicator-icon {\n display: inline-block !important;\n }\n`;\n/**\n * A Genesis Datasource element, for server-side | SSRM-compatible data fetching and used exclusively by the GridPro element.\n * @remarks Only supports Server-Side Row Model. Requires `@ag-grid-enterprise/server-side-row-model` setup and valid AG Grid Enterprise license.\n *\n * **Custom Sort Indicators**: This datasource automatically applies custom sort indicators that are always visible (instead of only on hover).\n * Sortable columns will show a subtle sort icon even when not sorted, and active sort indicators will be more prominent.\n * The custom styling uses AG Grid's native icon font for consistency with the grid theme.\n *\n * @beta\n */\nlet GridProServerSideDatasource = class GridProServerSideDatasource extends LifecycleMixin(GridProBaseDatasource) {\n constructor() {\n super(...arguments);\n /**\n * The starting VIEW_NUMBER of the data to be fetched.\n * @remarks The VIEW_NUMBER isincremented by the grid as the user scrolls or changes pages.\n */\n this.zeroBasedViewNumber = false;\n /**\n * Enable live updates for the grid.\n * @remarks Only works with DATASERVER resources (StreamDatasource) right now.\n */\n this.liveUpdates = false;\n this.request = {};\n this.sortIndicatorCSSDestroy = null;\n /**\n * Stores the previous poll result for comparison (poll N vs poll N-1).\n * @remarks\n * This enables efficient change detection by comparing consecutive polls instead of\n * maintaining the entire dataset in memory. Only stores the last poll result.\n * @internal\n */\n this.previousPollResult = new Map();\n }\n resourceNameChanged(oldValue, newValue) {\n if (!oldValue || oldValue === newValue)\n return;\n DOM.queueUpdate(() => __awaiter(this, void 0, void 0, function* () {\n yield this.restart();\n }));\n }\n criteriaChanged(oldCriteria, newCriteria) {\n const criteriaIsNotDuplicate = oldCriteria !== normaliseCriteria(newCriteria, criteriaDelimiter);\n if (this.ssrmDatasource && criteriaIsNotDuplicate) {\n DOM.queueUpdate(() => __awaiter(this, void 0, void 0, function* () {\n yield this.ssrmDatasource.refreshDatasource({\n criteria: newCriteria,\n });\n }));\n }\n }\n connectedCallback() {\n super.connectedCallback();\n const shouldRunConnect = this.shouldRunConnect;\n DOM.queueUpdate(() => {\n if (!shouldRunConnect)\n return;\n this.init();\n this.subscribeToConnection();\n });\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n const shouldRunDisconnect = this.shouldRunDisconnect;\n DOM.queueUpdate(() => __awaiter(this, void 0, void 0, function* () {\n if (!shouldRunDisconnect)\n return;\n yield this.destroy();\n this.unsubscribeFromConnection();\n }));\n }\n deepClone() {\n const copy = super.deepClone();\n copy.deferredGridOptions = structuredClone(this.deferredGridOptions);\n copy.deferredColumnStates = structuredClone(this.deferredColumnStates);\n return copy;\n }\n /**\n * Resets the grid data while keeping columnDefs and reloads data.\n * @remarks This is used when the grid is already initialized and we want to reload the data due to a criteria/filter change.\n * @beta\n */\n reloadResourceData(params) {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n this.datasource.destroy();\n (_a = this.liveUpdatesStream) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n this.liveUpdatesStream = undefined;\n // Emit event to cache current filter model before clearing data\n this.$emit(datasourceEventNames.cacheFilterConfig);\n this.clearRowData(withoutColumnDefs);\n this.setDisconnected(false);\n // Emit event to refresh server side with purge\n this.$emit(datasourceEventNames.refreshServerSide, { purge: true });\n if (params) {\n const options = Object.assign(Object.assign({}, this.datasourceOptions()), params);\n const initOK = yield this.initializeDatasource(options, true, false);\n if (!initOK) {\n // Emit event to set server side datasource to null\n this.$emit(datasourceEventNames.setServerSideDatasource, { datasource: null });\n logger.error('Genesis Datasource re-init failed on filtering/sorting.');\n }\n }\n else {\n if (this.ssrmDatasource) {\n yield this.ssrmDatasource.destroy();\n this.ssrmDatasource = undefined;\n }\n // Emit events instead of direct grid access\n this.$emit(datasourceEventNames.setServerSideDatasource, { datasource: null });\n this.$emit(datasourceEventNames.loadingStarted);\n yield this.init();\n }\n });\n }\n /**\n * Applies custom sort indicator styling for server-side datasource\n * @internal\n */\n applyServerSideSortIndicatorStyling() {\n // Remove existing styling if present\n this.removeServerSideSortIndicatorStyling();\n // Emit event to add CSS class to grid element\n this.$emit(datasourceEventNames.addGridCssClass, { className: 'grid-pro-server-side' });\n // Insert custom CSS rules\n this.sortIndicatorCSSDestroy = insertDocumentCSSRule(serverSideSortIndicatorCSS, 'grid-pro-server-side-sort');\n }\n /**\n * Removes custom sort indicator styling\n * @internal\n */\n removeServerSideSortIndicatorStyling() {\n // Emit event to remove CSS class from grid element\n this.$emit(datasourceEventNames.removeGridCssClass, { className: 'grid-pro-server-side' });\n // Remove custom CSS rules\n if (this.sortIndicatorCSSDestroy) {\n this.sortIndicatorCSSDestroy();\n this.sortIndicatorCSSDestroy = null;\n }\n }\n init() {\n return __awaiter(this, void 0, void 0, function* () {\n // Emit event to initialize grid with server-side options\n const gridOptions = Object.assign({ getRowId: (params) => {\n if (!params.data) {\n return null;\n }\n return String(params.data[this.rowId]);\n }, getRowStyle(params) {\n var _a, _b;\n if ((_b = (_a = params.data) === null || _a === void 0 ? void 0 : _a.ROW_REF) === null || _b === void 0 ? void 0 : _b.includes('_deleted')) {\n return { color: 'grey' };\n }\n }, cacheBlockSize: this.maxRows, defaultColDef: {\n filter: true,\n resizable: true,\n sortable: false,\n unSortIcon: true,\n }, rowBuffer: 0, rowModelType: 'serverSide', suppressServerSideInfiniteScroll: false, suppressMultiSort: true, onFilterChanged: (params) => { }, onSortChanged: (params) => { }, onPaginationChanged: (event) => this.onPaginationChanged(event) }, this.deferredGridOptions);\n this.$emit(datasourceEventNames.initialize, {\n options: gridOptions,\n keepColDefsOnClearRowData: this.keepColDefsOnClearRowData,\n });\n // TODO: refactor this to prevent rendering datasource component until grid is ready\n this.addEventListener(datasourceEventNames.ready, (event) => __awaiter(this, void 0, void 0, function* () {\n const { pagination } = event.detail;\n this.pagination = pagination;\n const initOK = yield this.initializeDatasource(this.datasourceOptions(), true, false);\n if (!initOK) {\n logger.debug(`Genesis Datasource init failed for ${this.resourceName}`);\n this.clearRowData();\n this.setDisconnected(true);\n return;\n }\n this.$emit(gridProGenesisDatasourceEventNames.dataInit);\n this.setDisconnected(false);\n this.indexes = this.getResourceIndexes(this.datasource.availableIndexes, this.datasource.availableSortableFields);\n const fieldMetadata = toFieldMetadata(this.datasource.originalFieldDef);\n const agColumnDefs = yield this.getAgColumnDefs(fieldMetadata);\n // Emit event to set column definitions\n this.$emit(datasourceEventNames.schemaUpdated, {\n schema: agColumnDefs,\n metadata: fieldMetadata,\n });\n if (this.isRequestServer) {\n // Enable polling if not in snapshot mode and polling is not disabled\n const usePolling = !this.isSnapshot && !this.disablePolling;\n this.ssrmDatasource = new ReqRepServerSideDatasource({\n createReqRepRequestFunc: this.createReqRepRequest.bind(this),\n createReqRepStreamFunc: usePolling ? this.createReqRepStream.bind(this) : undefined,\n onPollingUpdateFunc: usePolling ? this.applyReqRepPollingUpdate.bind(this) : undefined,\n resetPreviousPollResultFunc: usePolling\n ? this.resetPreviousPollResult.bind(this)\n : undefined,\n usePolling: usePolling,\n reloadResourceDataFunc: this.reloadResourceData.bind(this),\n errorHandlerFunc: this.handleErrors.bind(this),\n resourceName: this.resourceName,\n resourceParams: this.datasource.requestOnlyParams,\n resourceIndexes: this.indexes,\n resourceColDefs: this.datasource.originalFieldDef,\n maxRows: +this.maxRows,\n maxView: +this.maxView,\n rowId: this.rowId,\n pagination: this.pagination,\n zeroBasedViewNumber: this.zeroBasedViewNumber,\n pagingMode: this.pagingMode,\n criteriaOnlyRequest: this.datasource.criteriaOnlyRequest,\n });\n }\n else {\n this.ssrmDatasource = new DataserverServerSideDatasource({\n createDataserverStreamFunc: this.createDataserverStream.bind(this),\n reloadResourceDataFunc: this.reloadResourceData.bind(this),\n errorHandlerFunc: this.handleErrors.bind(this),\n resourceName: this.resourceName,\n resourceParams: this.datasource.dataserverOnlyParams,\n resourceIndexes: this.indexes,\n resourceColDefs: this.datasource.originalFieldDef,\n maxRows: +this.maxRows,\n maxView: +this.maxView,\n rowId: this.rowId,\n pagination: this.pagination,\n zeroBasedViewNumber: this.zeroBasedViewNumber,\n });\n }\n // Emit event to set server side datasource\n this.$emit(datasourceEventNames.setServerSideDatasource, {\n datasource: this.ssrmDatasource,\n });\n // Emit event to restore cached filter config\n this.$emit(datasourceEventNames.filtersRestored);\n // Apply custom sort indicator styling for server-side datasource\n this.applyServerSideSortIndicatorStyling();\n }), { once: true });\n if (!this.resourceName) {\n this.handleErrors('Application not connected or invalid resource name, datasource will not work.', 'unknown');\n }\n });\n }\n onPaginationChanged(event) {\n var _a;\n if (this.ssrmDatasource) {\n this.ssrmDatasource.isNewPageSize = (_a = event.newPage) !== null && _a !== void 0 ? _a : false;\n }\n }\n destroy() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b;\n this.datasource.destroy();\n (_a = this.liveUpdatesStream) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n this.liveUpdatesStream = undefined;\n this.clearRowData();\n if (this.ssrmDatasource) {\n yield this.ssrmDatasource.destroy();\n (_b = this.pollingDatasource) === null || _b === void 0 ? void 0 : _b.destroy();\n this.ssrmDatasource = undefined;\n }\n // Remove custom sort indicator styling\n this.removeServerSideSortIndicatorStyling();\n // Emit events instead of direct grid access\n this.$emit(datasourceEventNames.setServerSideDatasource, { datasource: null });\n this.$emit(datasourceEventNames.refreshServerSide, { purge: true });\n });\n }\n restart() {\n return __awaiter(this, void 0, void 0, function* () {\n yield this.destroy();\n yield this.init();\n });\n }\n clearRowData(withColumnDefs = true) {\n this.rowData = new Map();\n if (withColumnDefs) {\n // Emit event to clear column definitions\n this.$emit(datasourceEventNames.dataCleared, {\n includeSchema: true,\n });\n }\n this.transactionData = { remove: [] };\n // Emit event to apply server side transaction for removing all data\n this.$emit(datasourceEventNames.applyServerSideTransaction, {\n transaction: this.transactionData,\n });\n this.transactionData = undefined;\n }\n getResourceIndexes(avaialbleIndexes, availableSortableFields) {\n const resourceIndexesMap = new Map();\n const allSortableFields = new Set();\n // Add indexes from INDEXES metadata\n avaialbleIndexes === null || avaialbleIndexes === void 0 ? void 0 : avaialbleIndexes.forEach((index) => {\n const fields = index.FIELDS.split(' ');\n resourceIndexesMap.set(index.NAME, fields);\n fields.forEach((field) => allSortableFields.add(field));\n });\n // Add fields from SORTABLE_FIELDS metadata if available\n if (availableSortableFields && availableSortableFields.length > 0) {\n availableSortableFields.forEach((field) => allSortableFields.add(field));\n }\n // If we have SORTABLE_FIELDS but no indexes, create a synthetic index entry\n // This ensures compatibility with existing code that expects a Map structure\n if (resourceIndexesMap.size === 0 && allSortableFields.size > 0) {\n resourceIndexesMap.set('SORTABLE_FIELDS', Array.from(allSortableFields));\n }\n else if (availableSortableFields &&\n availableSortableFields.length > 0 &&\n resourceIndexesMap.size > 0) {\n // If we have both indexes and SORTABLE_FIELDS, merge them\n // Add any additional fields from SORTABLE_FIELDS that aren't already in any index\n const fieldsFromIndexes = new Set();\n resourceIndexesMap.forEach((fields) => {\n fields.forEach((field) => fieldsFromIndexes.add(field));\n });\n const additionalFields = availableSortableFields.filter((field) => !fieldsFromIndexes.has(field));\n if (additionalFields.length > 0) {\n // Add additional sortable fields as a separate entry\n resourceIndexesMap.set('SORTABLE_FIELDS', additionalFields);\n }\n }\n return resourceIndexesMap;\n }\n createReqRepRequest() {\n return __awaiter(this, arguments, void 0, function* (existingParams = null) {\n const reqRep = yield this.datasource.snapshot(existingParams);\n return reqRep;\n });\n }\n /**\n * Creates a polling stream for REQUEST_SERVER resources.\n * @remarks\n * Creates a separate `Datasource` instance configured to poll all currently loaded rows\n * (from offset 0 to current offset + maxRows). This enables change detection across all\n * loaded data, not just the current page.\n *\n * The separate datasource instance has built-in polling logic (pollingInterval, pollTriggerEvents)\n * and manages its own lifecycle independently of the snapshot datasource.\n * @param existingParams - The current request parameters (includes OFFSET, MAX_ROWS, etc.)\n * @returns Object containing the polling stream and the datasource instance\n * @internal\n */\n createReqRepStream() {\n return __awaiter(this, arguments, void 0, function* (existingParams = null) {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n const currentOffset = (_b = (_a = existingParams === null || existingParams === void 0 ? void 0 : existingParams.DETAILS) === null || _a === void 0 ? void 0 : _a.OFFSET) !== null && _b !== void 0 ? _b : 0;\n const baseMaxRows = (_d = (_c = existingParams === null || existingParams === void 0 ? void 0 : existingParams.DETAILS) === null || _c === void 0 ? void 0 : _c.MAX_ROWS) !== null && _d !== void 0 ? _d : this.maxRows;\n const totalRowsToFetch = baseMaxRows + currentOffset;\n const datasourceOptions = Object.assign(Object.assign({}, this.datasourceOptions()), { criteria: (_f = (_e = existingParams === null || existingParams === void 0 ? void 0 : existingParams.DETAILS) === null || _e === void 0 ? void 0 : _e.CRITERIA_MATCH) !== null && _f !== void 0 ? _f : this.criteria, maxRows: totalRowsToFetch, orderBy: (_h = (_g = existingParams === null || existingParams === void 0 ? void 0 : existingParams.DETAILS) === null || _g === void 0 ? void 0 : _g.ORDER_BY) !== null && _h !== void 0 ? _h : this.orderBy });\n logger.debug('Creating polling datasource for all loaded rows:', {\n currentOffset,\n baseMaxRows,\n totalRowsToFetch,\n });\n // Initialize the polling datasource\n const initOK = yield this.pollingDatasource.init(datasourceOptions, true, true);\n if (!initOK) {\n logger.error('Polling datasource init failed');\n return;\n }\n return { stream: this.pollingDatasource.stream, datasource: this.pollingDatasource };\n });\n }\n /**\n * Resets the previous poll result comparison state.\n * @remarks\n * Called when the polling stream is destroyed or recreated with new parameters\n * (e.g., user scrolls to a different page, or filters/sorting changes).\n * @internal\n */\n resetPreviousPollResult() {\n this.previousPollResult.clear();\n logger.debug('Previous poll result cleared');\n }\n /**\n * Applies polling updates for REQUEST_SERVER resources in SSRM.\n * @remarks\n * Compares the current poll result (poll N) with the previous poll result (poll N-1)\n * to detect inserts, updates, and deletes. Changes are applied to the grid using\n * `applyServerSideTransaction` to avoid interfering with SSRM's cache management.\n *\n * The first poll is stored without applying changes (nothing to compare yet).\n * Subsequent polls are compared to detect changes efficiently.\n * @param result - The polling result from the REQUEST_SERVER resource\n * @internal\n */\n applyReqRepPollingUpdate(result) {\n var _a;\n if (!this.ssrmDatasource || !result.REPLY) {\n return;\n }\n const polledData = result.REPLY;\n if (!Array.isArray(polledData) || !((_a = result.MESSAGE_TYPE) === null || _a === void 0 ? void 0 : _a.startsWith('REP_'))) {\n logger.error('received invalid RequestServerResult for polling update', result);\n return;\n }\n if (this.previousPollResult.size === 0) {\n polledData.forEach((row) => {\n this.previousPollResult.set(row[this.rowId], row);\n });\n logger.debug('First poll result stored for future comparison', {\n rowCount: this.previousPollResult.size,\n });\n return;\n }\n const currentPollMap = new Map();\n polledData.forEach((row) => {\n currentPollMap.set(row[this.rowId], row);\n });\n const rowsToUpdate = [];\n const rowsToInsert = [];\n const rowsToDelete = [];\n polledData.forEach((row) => {\n const rowId = row[this.rowId];\n if (this.previousPollResult.has(rowId)) {\n const previousRow = this.previousPollResult.get(rowId);\n if (this.serializer.serialize(previousRow) !== this.serializer.serialize(row)) {\n rowsToUpdate.push(row);\n }\n }\n else {\n rowsToInsert.push(row);\n }\n });\n this.previousPollResult.forEach((previousRow, rowId) => {\n if (!currentPollMap.has(rowId)) {\n rowsToDelete.push(previousRow);\n }\n });\n if (rowsToUpdate.length > 0 || rowsToDelete.length > 0 || rowsToInsert.length > 0) {\n this.previousPollResult = currentPollMap;\n logger.debug('Applying reqRep polling update via applyServerSideTransaction:', {\n added: rowsToInsert.length,\n updated: rowsToUpdate.length,\n removed: rowsToDelete.length,\n totalInPoll: currentPollMap.size,\n });\n this.$emit(datasourceEventNames.applyServerSideTransaction, {\n transaction: {\n add: rowsToInsert,\n update: rowsToUpdate,\n remove: rowsToDelete,\n },\n });\n }\n }\n createDataserverStream() {\n return __awaiter(this, arguments, void 0, function* (existingParams = null) {\n if (this.liveUpdates) {\n const streamOnMessage = (message) => __awaiter(this, void 0, void 0, function* () {\n var _a, _b, _c, _d, _e, _f, _g, _h;\n const messageType = message.MESSAGE_TYPE;\n if (messageType === MessageType.QUERY_UPDATE && message.ROW) {\n if (!this.ssrmDatasource) {\n return;\n }\n const nextMessage = dataServerResultFilter(message);\n this.transactionData = { add: [], remove: [], update: [] };\n this.handleStreamInserts(nextMessage.inserts);\n this.handleStreamUpdates(nextMessage.updates);\n this.handleStreamDeletes(nextMessage.deletes);\n if (message.SEQUENCE_ID > 1) {\n // Calculate net row count change (inserts - deletes)\n const netRowChange = ((_b = (_a = nextMessage.inserts) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0) - ((_d = (_c = nextMessage.deletes) === null || _c === void 0 ? void 0 : _c.length) !== null && _d !== void 0 ? _d : 0);\n this.ssrmDatasource.serverRowsCount += netRowChange;\n // Calculate net row count change for client (inserts - loaded deletes)\n const clientNetRowChange = ((_f = (_e = nextMessage.inserts) === null || _e === void 0 ? void 0 : _e.length) !== null && _f !== void 0 ? _f : 0) - ((_h = (_g = nextMessage.deletes) === null || _g === void 0 ? void 0 : _g.length) !== null && _h !== void 0 ? _h : 0);\n this.ssrmDatasource.clientRowsCount += clientNetRowChange;\n this.applyAllTransactions();\n }\n }\n });\n const onError = (error) => {\n var _a;\n logger.error(error);\n this.handleErrors(((_a = error.receivedMessage) === null || _a === void 0 ? void 0 : _a.ERROR) || error.message, 'stream');\n };\n this.liveUpdatesStream = this.connect\n .stream(this.resourceName, () => { }, onError, existingParams !== null && existingParams !== void 0 ? existingParams : this.datasource.dataserverOnlyParams)\n .subscribe((message) => streamOnMessage(message));\n }\n yield this.datasource.startStream();\n return this.datasource.stream;\n });\n }\n getAgColumnDefs(fieldsMetadata) {\n return __awaiter(this, void 0, void 0, function* () {\n const colDefsFromGenesisData = this.generateColumnDefsFromMetadata(fieldsMetadata, getServerSideFilterParamsByFieldType, getFilterByFieldType);\n colDefsFromGenesisData.forEach((colDef) => {\n colDef.sortable = [].concat(...this.indexes.values()).includes(colDef.field);\n if (this.datasource.criteriaOnlyRequest) {\n colDef.filter = this.datasource.availableCriteriaFields.includes(colDef.field)\n ? colDef.filter\n : null;\n }\n });\n return colDefsFromGenesisData;\n });\n }\n applyTransaction(transaction) {\n this.$emit(datasourceEventNames.applyServerSideTransaction, { transaction });\n }\n loadMore() {\n throw new Error('loadMore() method is not supported for server-side datasource');\n }\n};\n__decorate([\n JSONSerializer\n], GridProServerSideDatasource.prototype, \"serializer\", void 0);\n__decorate([\n Datasource\n], GridProServerSideDatasource.prototype, \"pollingDatasource\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'zero-based-view-number' })\n], GridProServerSideDatasource.prototype, \"zeroBasedViewNumber\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'live-updates' })\n], GridProServerSideDatasource.prototype, \"liveUpdates\", void 0);\n__decorate([\n attr({ attribute: 'paging-mode' })\n], GridProServerSideDatasource.prototype, \"pagingMode\", void 0);\n__decorate([\n observable\n], GridProServerSideDatasource.prototype, \"request\", void 0);\nGridProServerSideDatasource = __decorate([\n customElement({\n name: 'grid-pro-server-side-datasource',\n })\n], GridProServerSideDatasource);\nexport { GridProServerSideDatasource };\n","import { css } from '@microsoft/fast-element';\n/**\n * Custom Drag n Drop CSS for Grid Pro.\n * @remarks helps with color and background issues when dragging a column.\n * @public\n */\nexport const agHeadCSS = css `\n .ag-dnd-ghost {\n background: var(--ag-header-background-color, var(--ag-background-color, #1f2126));\n border: solid 1px;\n border-color: var(--ag-header-foreground-color, var(--ag-foreground-color, #879ba6));\n border-radius: calc(var(--control-corner-radius) * 1px);\n color: var(--ag-header-foreground-color, var(--ag-foreground-color, #879ba6));\n font-family: var(--ag-font-family, var(--body-font));\n font-size: 12px;\n height: 32px;\n line-height: 28px;\n margin: 0;\n padding: 0 12px;\n position: absolute;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n`;\n","import { AgGridTheme } from '../grid-pro.types';\n/**\n * The AG Alpine font face used on ag-theme-alpine/ag-theme-alpine-dark Grid Pro themes.\n * @public\n */\nexport const agGridAlpineFontFace = `\n @font-face {\n font-family: \"agGridAlpine\";\n src: url(data:font/woff2;charset=utf-8;base64,d09GMgABAAAAABGYAAsAAAAAJUAAABFHAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHIh2BmAAixwKpXCfGwE2AiQDgiwLgRgABCAFhEYHhRYbjiBFIbBxQJhBP8IiqifF7P9DAp1DWLRF/YtGkJpOTafDolO66hq923HLpBjtKhEisuawXiIEoOjQaGO9OOdNmM/k7y5DCZMHau317e0FCManAAiSyCaunoRkkLFl1/9/c+VPMsnNEtBMGFedLLAjUjWiUlf3+d7r9jXZ9QR298S0qL4ULfAzmTVNTp0mtPCuUzXkB9rmv+OwOMJMsBBtenrY+GctjprYgZGc8X+zSHSRfcvw1zpZ98C2kVXG2W5VN1e6FQaG8JwEf+HchRXcb/Z2hfQ8dNS65LeVddel9vIEBkLLAG+YnEKJNWojAGE6V6EkgmyIn4SZ/+fnUtsboqwa/IGs0PNzOvCvzXv/pcBZSpRymlLWAZIFgrumAmgArDY7BSznJvyER6Hm7NyE1oMAmTOP2W4ovkxHhBjDKOYx0rGd6gY9HsC1iTrjjQhAvisbO3rs5NnKm1fs3qoPidYOoKweNm9YtwIO46CaAQG+y6kDZXNP/PIvsNmO0J44x/o4N66Ot+LG+FSETZ0xCmh8diIJRcgUKg1LIC5GV+kMnGkwBUV1HbzQOxJrQ0SKWJvX3t1aFRHoqOtzRWTyveVTZfGGblRq755mi6egbDIkb+zKVJeTkPgMFsIIrr8G88QITUASqOJ5TBJLAyetqNuvUi9cwsEiSVfknTKJKFwXJEifKEg4TRaVoTf9KidqWxWTaM4Qhckx5sC9WV2VzEdYip117wlE4pFNoTH6pLaKlnSP3jkqCOWFb04+eok58yIR6Fpbc7h7VYskIzvBi/sbie0gREpS0BX75I92Tzz1WaffwH8gR5tNGv6Ou1SeWdaN1SV9UZTp7rskIKhKTKO2KKdINUyJyBebzykRFeRxykSE2WFRIO9B1isS0hgQYcL5JAPPxDZCJCtZJhixKBq5KJYoW69I7cDZt0UMtHEbtDRUHyXnQxNdkxUZZL0p82U+RlTWTIM51d59R0MY4VFM5LyTjGEtU2yJkYKpidT3fINprI68kbyhLdEKti+RzoyqEcMcPwhTspwVIrUtc4FTtliCZlwiUFiTJVoyQlQoYZSR2S1kszlNlkBoGxeSQcn+MEUWSA4mj3A5ffvhux4hAUjwEaKLmr52zGp/dflBYicWpiPxr0NTYFYDQcMRaANSkOTWZ4cEuLyoDScvqoX8RyGuh4WcvPfN7x89Mxl08dZHP36EtfDICIqxc2hNBvPNdJl2K7K5M4rCYRGaDXBjQMR3hzpP4o7B4iA8wQMsJ6+gqKSsoqqmrqGppa2jq6dvYGhkbGJqZm5haWVtY2tn7+Do5Gzi4uoGQjZEY3mkpnoONwMpo7YCzpBQU5/p33+QHKUDvWQiqhYC4hVKJgFdEuVWXwHrCaxkw4FVbDCwmo0C1rA+wFo2AVjHegHr2VBgA+sHbGLDgM1sCLCFjQa2sgHANtYf2M7GAjtZb2AXGwTsZn2BPWwMsJeNB/axgcB+NgI4wMYBB4dPBD9AlBIEgmAQhIAgFARhIAgHQQQIIkEQBYJoEMSAIBYEcSCIB0ECCBJBkASCZBCkgCAVBGkgSAdBBggyQZAFgmwQ5IAgFwR5IMgHQQEICkFQBIJiEJSAoBQEZSAoB0EFCCpBUAWCahDUgKAWBHUgqEcdOg2gbRpB0ATAPwtb4hrOkjUW5HTc5QqbZQn410jBxkUchHndThUwJRfzV20FHctyFSXU8yVnqnjVcqKMwuymhqcMPqkwZdzE7MqlETtSgja1jksLx8X8Ff1H+YGVe2V2Y1zRXllFWHa6TjV57rS1Fpe51MTab1Fp5+GvYSoCnSw+q0Knyg3wYwBdueM78aTNaQ6ZMGc2sJhDyi2UWFKajVUkKlSCUnUildsYqNCuRvJ8qsPqsaZHw1imHnAcswGXqBhwQuXfwCWekgGpGpIvQ0HnSkC+ETQedsQnNkKTvfsVG5ec3sJyonvfOjWhwcfj1Lch7WGTfXN4F1q0h6Nj3YR4YOJK97Vg/47/j0SrZ4f1sK3aBzlN9CTRon4b4djoIDxCx/QHGkSji1mm/Yu5skEao3+MPsfKXW/0BJd6VBlN4SGVVxfdQVMDX/tT7+fInmYWHpk0CyvoG7ZHrlzhFy9dO3bsFDtx/vZzcenpTbAH4kOTZ6/mF++APXk1uT5jaCg5iPbGE35x8eC1vNb40aMHxaXr7MSxS5OXr74V3b6+zItXjx4UeHB2fAXswYOTgi66mP8VCOnwFETZftDCRDnjQL11aLLadfIxMo+GgRzPxihvzAwxhtRR3QOXxaWr01SaKb2Ru7KBXUqoDrZoXYgvTVZrvbMX+MVr7MRmbXyJ64MqXixIsvOqSRPvnItPKAXn8tP8gnrylPsXVU/S6PPKxBIKno8rv4BEVfXo53Ll+leqLs7LmWPanhSZkZ4jpKJLCvLjaCnQpAGG9ooBL6T/6/ZIIKKacTYgjA2a7YoCiVrQOHFEYLIwm9bDhsBkI8BmXT4GCti6DdIBN80cQOmfxcpZF9zRBKNjNeXmRe//xRryXqh55q9DCFp7fSMcCpKfB88fGGag9rWQ0c7rxXns3uip2oiDuBsSoBI2bsOgWIKBCrAcm+hxaZxdx/CeM1ZnSVTPjogm4PXn7ZvdSpZJhVJVUTN3YldHhTwR9SeU7cvL4xyv3JuBbTTRIT4y/6lp2JthwV04Z8cc39G/0rR6YE012woDFoJVqt2G4pdhg3JHmmZ+1JoRK9zKQ9eG7hQTLmaPReFrpYFqAq9d6jzTxYM4JjwSWu62xm8O11PjYsbMNSu8NKl7HmbnfS5rT6TnhLdKHuUXfK/knS4uSu4Wt9Ezevzf72KdnTTvf1EQWzfxpcCYDP1SMYyql4r7XJ74UXJcsMavoX8eFlTaigWK4z/eBIaIEcBmnzojLlnKewNGn/KhYPd0KKPnPve5L/ux+2MzqB5eMo367GnTpPGpWXTqw+QTbzhQdB2nt9+5t7RD8XpB5wMzqfzo2IjRPea2GdyhaUAYu1teYrTbIsaDk6lw9Ol3SHBkyVWiGb+8hrNnSHT/d4gK8MlVexbaI+9GvB32KcrC3w4dTI1BeHwBS+xJHYpLEKxc1ODgfI1GqyFJYbOnnyAhOCx/M9ti+UJ8eWhZnUUj4JdiNhRJC8TiAmnRnUiz7QJxkfTOlnQlzzLPMMwi0pxfAXiVsshYkvpEfibb28kOEiTTLQzfiDO+O/1MhC/vTgCP4eKSnX382LJl2Tn11gRBeFO4OLqLofVFL2ysDQyPDy5cOLukhEZLiD/uqzt+7PiGhLVrJz5WeXAhDbgexJOJEPvfZ0OcYZtxGLFU+zKkowDcWiKkGii5/uksQYDu+80DrpJQvjWOOc0FnpIL3DSDq+SBA84+rTwNb0RaXXKyrmRfRiklaFqcFYjPPKwsb2scSN2EhFSGxIRUhIiT/xtpf275z+tue+dfyLnc0ET7K0jjwgvMSU1nnO0rYz7fT3XhHmlDndxGBDvazS/qim+N47htifXfXe6v0Xj0suc9YHu4u7j6sE/9dsQmFndXNT1hOqgd2Qtr3vVdDJHOd1wdjfQOlwWsannObV9Hlt24lcmurkuPOc4dMTFsN59yDwOXLqw9i2HlLjzr3jDE2bnEPfbvSFvGgnIDCB3eTvMs6f2TO3Nc2zmyZmLdSFcFx4H7YZBOoZv/P3HElhPFdMjKrhvbuW+G40R3Z3eRplfdJfrDypbjz3GEJkqiOOnzU/ziuC0ZppRKVWihek5KS7d3Lj9MnKI/9DdVro+tVcOc1JYur1y5LDO7rMh2eNSYGI/EopJ+ccboDN6q+SJBBp+fLhAxbAo74saWQZVEnFKZLeeNc08sliiYCKi7cqRHOnmoTU5OUYlHovrE8nteuS3dc1LWdbkE37vq8MqV/T4nTJsUaaJUuQHizX3OmLub0naBYsNo/IpqP5t7+Qq8F+7fZ1w9GtupN8RbAubdpCROGRWkYrcxX14svj2GBLmFRgy4FJdQiliFcRupIJWJk5+MmX19u0KqMH6qwra96fByc4fY4VUUOvp+6bSsmjxY9b9sFBa/4Xlu5i3PXS4rlEgKmiMNyNYa4m325K3i5xA57csW6ZAW1qR3oSEAeGYJs/4Mev+3ojBsGaZCFy/MEm7JjNW3rMc9Fu+JifuvUeOwDe/o0F5HkKQkBLmec7bi00d3Ldg1sf/LDLiBNCiSLXED4NvcNftuvHCQjdvYiNXfotFXSSVwz+dlT+pIkuC3Ypa8Al3u3oV54VmCzExBVnierJK36MwZT15llhNRsn1NQcwvtevPfRv17cgGLnDnJJSR2tId/uD9weX5Fz7LmEOQC0kCRpFTp9p6ynPGH59tqSkpmrIyHve95OOTue1OenplmRXdPVCee6zGbL57l7o3KWryZvLdnDn5zY4MD4+2UlebFocZ5pbp2K23bq9enYUYp1VNqXx+qg3qbc2G0gtN2XzQ7bvY9UUmeW71LDcgztH22b9hB45jXMDLQ7vYMx8SxFiC+rMplJ+eFmZo/ZOq3iWCmvVS6DrtvJ3YJ93G2Nu9F36ik334x96ZbXQo6FYo9vQYuxHl5n1oGwdMMfbtMzYpe/tg3avVr3rGqm/fTm5gS4U+WBtkMgVpg/XDkSbaZDrXrw8eFgS2Lv21Xi/WCYU6sf5KSbVtnVAvvrJVG948S21OTm7+kxKj/sz/uJRP3WT7pSSteinzXwjpcM9y9jTmrd2o2Ch9hsficG82O9uZwN+CrkLZkHUv7l6W4NyqPT/8S06Wy3x9k5KASjIUGODVOruMmS0xUiocPnwReWDi1NnDcrw4XjZnPid0mX7sWFtl7UD/kLIqUXa53UrAxeQ3KpUf0VyQn5GxfHnczl1g7PuR+Zp5IypXnseIH1/cIz4bBZgxWU01M/x1gr1udqJlaBGlimhjGsr+uF+bwiOA+zU2oE91TLEeIauP1xWe6rUM/pA81yOYpihiSB7JUXB/oI+iZaGt9tQq2n9Q0derrnU/2o8lgXVDNY1oD9p6TyUb0YWZhdYyCKXNkXqpiKbholwui05d6ymOvr4rvfbvnEuD/2Lt6UJO/LtcDLUAjLO7+6TfmdLsqQ1oX9N1GBdZaqb1U6z/q75SrwQ8/Q0nP38sYCya/8Olal7o7hJgPz+nTjjmCEjw0ihgE3KAue6Ez7v6sQAMBCBRVzH0QE+m7QFOUA8oIHQ7QMAd+l1GAzbMBJSuy4FO132so8Klf1DS9T/b9TcUX2zPj/AL+0JO3/nkAvwE23tJm1M5r/MXKLsYquvmateVvUAAkgy6aucqD/aG2VSGIlbPMayL8j5WieIXKG465nS7Whn3qhsVcU2yXhBHu+MlTgB+gvDA9TyJJGbIMf6CADLvWhRUrjWuJH0vSqp0AYxdq7Tmf+5sYN3g2DCqxCIR5uJZqyIJPoZ4J5LY+gKUazY6BSu5tYrnZWTNhtLC560Aq5pu1Hxm2ADhCAgVDfnVHfDFWv3a/K+boiQrqqYbpmU7rucHYRQnaZYXZVU3bdcP4zQv67Yf53U/r/fn6869B4+ePHvx6s27D59rb8W2BFayi6GUQ3HMm/KqUkVQ4IU6kvi4naC+2zjVWTroy40OXNDAQOiCZDjdldAHKfe+ah+pTq7Sk7buUo8h76oOTFIx6EJ1moWamPOmukOhMysBX7vadsckqTmo3oEf6uxl7jbzzNKUb00TU5syF3ZcEjsz9qnYqzHsabj0FTo92y3fUrtgtzEmh26BAjP024Pka2cbcuIidIC90FxL7+MIWiQNZwmbqYJINUTeTgODi30+piO9mVi3PXMMdTTmaKOpIKhsx0WOAXbzc19S6ziGQukT7aE2oe1becDAJ2Ubp0wARhQ7m5VjgrDdv2N5JuuSRQBzomCUKV7nW2tS/6FeMhsYy1oDAA==);\n font-weight: normal;\n font-style: normal;\n }\n`;\n/**\n * The AG Balham font face used on ag-theme-balham/ag-theme-balham-dark Grid Pro themes.\n * @public\n */\nexport const agGridBalhamFontFace = `\n @font-face {\n font-family: \"agGridBalham\";\n src: url(data:font/woff2;charset=utf-8;base64,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);\n font-weight: normal;\n font-style: normal;\n }\n`;\n/**\n * The AG Material font face used on ag-theme-material Grid Pro theme.\n * @public\n */\nexport const agGridMaterialFontFace = `\n @font-face {\n font-family: \"agGridMaterial\";\n src: url(data:font/woff2;charset=utf-8;base64,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);\n font-weight: normal;\n font-style: normal;\n }\n`;\n/**\n * Font Face map with all the font faces for each theme.\n * @public\n */\nexport const agThemeFontFaceMap = {\n [AgGridTheme.alpine]: agGridAlpineFontFace,\n [AgGridTheme.alpineDark]: agGridAlpineFontFace,\n [AgGridTheme.balham]: agGridBalhamFontFace,\n [AgGridTheme.balhamDark]: agGridBalhamFontFace,\n [AgGridTheme.material]: agGridMaterialFontFace,\n};\n/**\n * The default font face for Grid Pro (agGridAlpine).\n * @remarks this will change to Roboto.\n * @public\n */\nexport const defaultAgGridFontFace = agGridAlpineFontFace;\n","import { css } from '@microsoft/fast-element';\n/**\n * AG Grid core CSS.\n * @remarks without this grid will not show up.\n * @public\n */\nexport const agGridCSS = css `\n .ag-icon {\n font-family: var(--ag-icon-font-family);\n font-size: var(--ag-icon-size);\n line-height: var(--ag-icon-size);\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n }\n\n .ag-icon-aggregation::before {\n content: var(--ag-icon-font-code-aggregation, '\\\\f101');\n }\n\n .ag-icon-arrows::before {\n content: var(--ag-icon-font-code-arrows, '\\\\f102');\n }\n\n .ag-icon-asc::before {\n content: var(--ag-icon-font-code-asc, '\\\\f103');\n }\n\n .ag-icon-cancel::before {\n content: var(--ag-icon-font-code-cancel, '\\\\f104');\n }\n\n .ag-icon-chart::before {\n content: var(--ag-icon-font-code-chart, '\\\\f105');\n }\n\n .ag-icon-checkbox-checked::before {\n content: var(--ag-icon-font-code-checkbox-checked, '\\\\f106');\n }\n\n .ag-icon-checkbox-indeterminate::before {\n content: var(--ag-icon-font-code-checkbox-indeterminate, '\\\\f107');\n }\n\n .ag-icon-checkbox-unchecked::before {\n content: var(--ag-icon-font-code-checkbox-unchecked, '\\\\f108');\n }\n\n .ag-icon-color-picker::before {\n content: var(--ag-icon-font-code-color-picker, '\\\\f109');\n }\n\n .ag-icon-columns::before {\n content: var(--ag-icon-font-code-columns, '\\\\f10a');\n }\n\n .ag-icon-contracted::before {\n content: var(--ag-icon-font-code-contracted, '\\\\f10b');\n }\n\n .ag-icon-copy::before {\n content: var(--ag-icon-font-code-copy, '\\\\f10c');\n }\n\n .ag-icon-cross::before {\n content: var(--ag-icon-font-code-cross, '\\\\f10d');\n }\n\n .ag-icon-csv::before {\n content: var(--ag-icon-font-code-csv, '\\\\f10e');\n }\n\n .ag-icon-desc::before {\n content: var(--ag-icon-font-code-desc, '\\\\f10f');\n }\n\n .ag-icon-excel::before {\n content: var(--ag-icon-font-code-excel, '\\\\f110');\n }\n\n .ag-icon-expanded::before {\n content: var(--ag-icon-font-code-expanded, '\\\\f111');\n }\n\n .ag-icon-eye-slash::before {\n content: var(--ag-icon-font-code-eye-slash, '\\\\f112');\n }\n\n .ag-icon-eye::before {\n content: var(--ag-icon-font-code-eye, '\\\\f113');\n }\n\n .ag-icon-filter::before {\n content: var(--ag-icon-font-code-filter, '\\\\f114');\n }\n\n .ag-icon-first::before {\n content: var(--ag-icon-font-code-first, '\\\\f115');\n }\n\n .ag-icon-grip::before {\n content: var(--ag-icon-font-code-grip, '\\\\f116');\n }\n\n .ag-icon-group::before {\n content: var(--ag-icon-font-code-group, '\\\\f117');\n }\n\n .ag-icon-last::before {\n content: var(--ag-icon-font-code-last, '\\\\f118');\n }\n\n .ag-icon-left::before {\n content: var(--ag-icon-font-code-left, '\\\\f119');\n }\n\n .ag-icon-linked::before {\n content: var(--ag-icon-font-code-linked, '\\\\f11a');\n }\n\n .ag-icon-loading::before {\n content: var(--ag-icon-font-code-loading, '\\\\f11b');\n }\n\n .ag-icon-maximize::before {\n content: var(--ag-icon-font-code-maximize, '\\\\f11c');\n }\n\n .ag-icon-menu::before {\n content: var(--ag-icon-font-code-menu, '\\\\f11d');\n }\n\n .ag-icon-minimize::before {\n content: var(--ag-icon-font-code-minimize, '\\\\f11e');\n }\n\n .ag-icon-next::before {\n content: var(--ag-icon-font-code-next, '\\\\f11f');\n }\n\n .ag-icon-none::before {\n content: var(--ag-icon-font-code-none, '\\\\f120');\n }\n\n .ag-icon-not-allowed::before {\n content: var(--ag-icon-font-code-not-allowed, '\\\\f121');\n }\n\n .ag-icon-paste::before {\n content: var(--ag-icon-font-code-paste, '\\\\f122');\n }\n\n .ag-icon-pin::before {\n content: var(--ag-icon-font-code-pin, '\\\\f123');\n }\n\n .ag-icon-pivot::before {\n content: var(--ag-icon-font-code-pivot, '\\\\f124');\n }\n\n .ag-icon-previous::before {\n content: var(--ag-icon-font-code-previous, '\\\\f125');\n }\n\n .ag-icon-radio-button-off::before {\n content: var(--ag-icon-font-code-radio-button-off, '\\\\f126');\n }\n\n .ag-icon-radio-button-on::before {\n content: var(--ag-icon-font-code-radio-button-on, '\\\\f127');\n }\n\n .ag-icon-right::before {\n content: var(--ag-icon-font-code-right, '\\\\f128');\n }\n\n .ag-icon-save::before {\n content: var(--ag-icon-font-code-save, '\\\\f129');\n }\n\n .ag-icon-small-down::before {\n content: var(--ag-icon-font-code-small-down, '\\\\f12a');\n }\n\n .ag-icon-small-left::before {\n content: var(--ag-icon-font-code-small-left, '\\\\f12b');\n }\n\n .ag-icon-small-right::before {\n content: var(--ag-icon-font-code-small-right, '\\\\f12c');\n }\n\n .ag-icon-small-up::before {\n content: var(--ag-icon-font-code-small-up, '\\\\f12d');\n }\n\n .ag-icon-tick::before {\n content: var(--ag-icon-font-code-tick, '\\\\f12e');\n }\n\n .ag-icon-tree-closed::before {\n content: var(--ag-icon-font-code-tree-closed, '\\\\f12f');\n }\n\n .ag-icon-tree-indeterminate::before {\n content: var(--ag-icon-font-code-tree-indeterminate, '\\\\f130');\n }\n\n .ag-icon-tree-open::before {\n content: var(--ag-icon-font-code-tree-open, '\\\\f131');\n }\n\n .ag-icon-unlinked::before {\n content: var(--ag-icon-font-code-unlinked, '\\\\f132');\n }\n\n .ag-icon-row-drag::before {\n content: var(--ag-icon-font-code-grip);\n }\n\n .ag-left-arrow::before {\n content: var(--ag-icon-font-code-left);\n }\n\n .ag-right-arrow::before {\n content: var(--ag-icon-font-code-right);\n }\n\n [class*='ag-theme-'] {\n --ag-foreground-color: #000;\n --ag-data-color: var(--ag-foreground-color);\n --ag-secondary-foreground-color: var(--ag-foreground-color);\n --ag-header-foreground-color: var(--ag-secondary-foreground-color);\n --ag-disabled-foreground-color: rgba(0, 0, 0, 0.5);\n --ag-background-color: #fff;\n --ag-header-background-color: transparent;\n --ag-tooltip-background-color: transparent;\n --ag-subheader-background-color: transparent;\n --ag-subheader-toolbar-background-color: transparent;\n --ag-control-panel-background-color: transparent;\n --ag-side-button-selected-background-color: var(--ag-control-panel-background-color);\n --ag-selected-row-background-color: #bbb;\n --ag-odd-row-background-color: var(--ag-background-color);\n --ag-modal-overlay-background-color: rgba(255, 255, 255, 0.66);\n --ag-row-hover-color: transparent;\n --ag-column-hover-color: transparent;\n --ag-range-selection-border-color: var(--ag-foreground-color);\n --ag-range-selection-border-style: solid;\n --ag-range-selection-background-color: rgba(0, 0, 0, 0.2);\n --ag-range-selection-background-color-2: var(--ag-range-selection-background-color);\n --ag-range-selection-background-color-3: var(--ag-range-selection-background-color);\n --ag-range-selection-background-color-4: var(--ag-range-selection-background-color);\n --ag-range-selection-highlight-color: var(--ag-range-selection-border-color);\n --ag-selected-tab-underline-color: var(--ag-range-selection-border-color);\n --ag-selected-tab-underline-width: 0;\n --ag-selected-tab-underline-transition-speed: 0s;\n --ag-range-selection-chart-category-background-color: rgba(0, 255, 132, 0.1);\n --ag-range-selection-chart-background-color: rgba(0, 88, 255, 0.1);\n --ag-header-cell-hover-background-color: transparent;\n --ag-header-cell-moving-background-color: var(--ag-background-color);\n --ag-value-change-value-highlight-background-color: rgba(22, 160, 133, 0.5);\n --ag-value-change-delta-up-color: #43a047;\n --ag-value-change-delta-down-color: #e53935;\n --ag-chip-background-color: transparent;\n --ag-borders: solid 1px;\n --ag-border-color: rgba(0, 0, 0, 0.25);\n --ag-borders-critical: var(--ag-borders);\n --ag-borders-secondary: var(--ag-borders);\n --ag-secondary-border-color: var(--ag-border-color);\n --ag-row-border-style: solid;\n --ag-row-border-color: var(--ag-secondary-border-color);\n --ag-row-border-width: 1px;\n --ag-cell-horizontal-border: solid transparent;\n --ag-borders-input: var(--ag-borders-secondary);\n --ag-input-border-color: var(--ag-secondary-border-color);\n --ag-borders-input-invalid: solid 2px;\n --ag-input-border-color-invalid: var(--ag-invalid-color);\n --ag-borders-side-button: var(--ag-borders);\n --ag-border-radius: 0px;\n --ag-row-border-color: var(--ag-secondary-border-color);\n --ag-header-column-separator-display: none;\n --ag-header-column-separator-height: 100%;\n --ag-header-column-separator-width: 1px;\n --ag-header-column-separator-color: var(--ag-secondary-border-color);\n --ag-header-column-resize-handle-display: none;\n --ag-header-column-resize-handle-height: 50%;\n --ag-header-column-resize-handle-width: 1px;\n --ag-header-column-resize-handle-color: var(--ag-secondary-border-color);\n --ag-invalid-color: red;\n --ag-input-disabled-border-color: var(--ag-input-border-color);\n --ag-input-disabled-background-color: transparent;\n --ag-checkbox-background-color: transparent;\n --ag-checkbox-border-radius: var(--ag-border-radius);\n --ag-checkbox-checked-color: var(--ag-foreground-color);\n --ag-checkbox-unchecked-color: var(--ag-foreground-color);\n --ag-checkbox-indeterminate-color: var(--ag-checkbox-unchecked-color);\n --ag-toggle-button-off-border-color: var(--ag-checkbox-unchecked-color);\n --ag-toggle-button-off-background-color: var(--ag-checkbox-unchecked-color);\n --ag-toggle-button-on-border-color: var(--ag-checkbox-checked-color);\n --ag-toggle-button-on-background-color: var(--ag-checkbox-checked-color);\n --ag-toggle-button-switch-background-color: var(--ag-background-color);\n --ag-toggle-button-switch-border-color: var(--ag-toggle-button-off-border-color);\n --ag-toggle-button-border-width: 1px;\n --ag-toggle-button-height: var(--ag-icon-size);\n --ag-toggle-button-width: calc(var(--ag-toggle-button-height) * 2);\n --ag-input-focus-box-shadow: none;\n --ag-input-focus-border-color: none;\n --ag-minichart-selected-chart-color: var(--ag-checkbox-checked-color);\n --ag-minichart-selected-page-color: var(--ag-checkbox-checked-color);\n --ag-grid-size: 4px;\n --ag-icon-size: 12px;\n --ag-widget-container-horizontal-padding: calc(var(--ag-grid-size) * 1.5);\n --ag-widget-container-vertical-padding: calc(var(--ag-grid-size) * 1.5);\n --ag-widget-horizontal-spacing: calc(var(--ag-grid-size) * 2);\n --ag-widget-vertical-spacing: var(--ag-grid-size);\n --ag-cell-horizontal-padding: calc(var(--ag-grid-size) * 3);\n --ag-cell-widget-spacing: var(--ag-cell-horizontal-padding);\n --ag-row-height: calc(var(--ag-grid-size) * 6 + 1px);\n --ag-header-height: var(--ag-row-height);\n --ag-list-item-height: calc(var(--ag-grid-size) * 5);\n --ag-column-select-indent-size: calc(var(--ag-grid-size) + var(--ag-icon-size));\n --ag-set-filter-indent-size: calc(var(--ag-grid-size) + var(--ag-icon-size));\n --ag-row-group-indent-size: calc(var(--ag-cell-widget-spacing) + var(--ag-icon-size));\n --ag-filter-tool-panel-group-indent: 16px;\n --ag-tab-min-width: 220px;\n --ag-menu-min-width: 181px;\n --ag-side-bar-panel-width: 200px;\n --ag-font-family: 'Helvetica Neue', sans-serif;\n --ag-font-size: 14px;\n --ag-card-radius: var(--ag-border-radius);\n --ag-card-shadow: none;\n --ag-popup-shadow: 5px 5px 10px rgba(0, 0, 0, 0.3);\n }\n\n .ag-root-wrapper,\n .ag-sticky-top,\n .ag-dnd-ghost {\n background-color: var(--ag-background-color);\n }\n\n [class*='ag-theme-'] {\n -webkit-font-smoothing: antialiased;\n font-family: var(--ag-font-family);\n font-size: var(--ag-font-size);\n line-height: normal;\n color: var(--ag-foreground-color);\n }\n\n ag-grid,\n ag-grid-angular,\n ag-grid-ng2,\n ag-grid-polymer,\n ag-grid-aurelia {\n display: block;\n }\n\n .ag-hidden {\n display: none !important;\n }\n\n .ag-invisible {\n visibility: hidden !important;\n }\n\n .ag-no-transition {\n transition: none !important;\n }\n\n .ag-drag-handle {\n cursor: grab;\n }\n\n .ag-column-drop-wrapper {\n display: flex;\n }\n\n .ag-column-drop-horizontal-half-width {\n display: inline-block;\n width: 50% !important;\n }\n\n .ag-unselectable {\n -moz-user-select: none;\n -webkit-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n\n .ag-selectable {\n -moz-user-select: text;\n -webkit-user-select: text;\n -ms-user-select: text;\n user-select: text;\n }\n\n .ag-tab {\n position: relative;\n }\n\n .ag-tab-guard {\n position: absolute;\n width: 0;\n height: 0;\n display: block;\n }\n\n .ag-select-agg-func-popup {\n position: absolute;\n }\n\n .ag-input-wrapper,\n .ag-picker-field-wrapper {\n display: flex;\n flex: 1 1 auto;\n align-items: center;\n line-height: normal;\n position: relative;\n }\n\n .ag-shake-left-to-right {\n animation-direction: alternate;\n animation-duration: 0.2s;\n animation-iteration-count: infinite;\n animation-name: ag-shake-left-to-right;\n }\n\n @keyframes ag-shake-left-to-right {\n from {\n padding-left: 6px;\n padding-right: 2px;\n }\n to {\n padding-left: 2px;\n padding-right: 6px;\n }\n }\n .ag-root-wrapper {\n cursor: default;\n position: relative;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n .ag-root-wrapper.ag-layout-normal {\n height: 100%;\n }\n\n .ag-watermark {\n position: absolute;\n bottom: 20px;\n right: 25px;\n opacity: 0.5;\n transition: opacity 1s ease-out 3s;\n }\n .ag-watermark::before {\n content: '';\n background-image: url(data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+Cjxzdmcgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgdmlld0JveD0iMCAwIDIzNSA0MCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3BhY2U9InByZXNlcnZlIiB4bWxuczpzZXJpZj0iaHR0cDovL3d3dy5zZXJpZi5jb20vIiBzdHlsZT0iZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjI7Ij4KICAgIDxnIHRyYW5zZm9ybT0ibWF0cml4KDAuNjM1NzIzLDAsMCwwLjYzNTcyMywtNDkyLjkyMSwtMzIzLjYwOCkiPgogICAgICAgIDxwYXRoIGQ9Ik0xMDk5LjQsNTQ5LjRMMTA5OS40LDUzNi45TDEwNzguMSw1MzYuOUwxMDY1LjYsNTQ5LjRMMTA5OS40LDU0OS40WiIgc3R5bGU9ImZpbGw6cmdiKDI0LDI5LDMxKTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgICAgICA8cGF0aCBkPSJNMTEyMy40LDUxOC40TDEwOTYuNyw1MTguNEwxMDg0LjEsNTMwLjlMMTEyMy40LDUzMC45TDExMjMuNCw1MTguNFoiIHN0eWxlPSJmaWxsOnJnYigyNCwyOSwzMSk7ZmlsbC1ydWxlOm5vbnplcm87Ii8+CiAgICAgICAgPHBhdGggZD0iTTEwNTMuMiw1NjEuOUwxMDU5LjYsNTU1LjVMMTA4MS4yLDU1NS41TDEwODEuMiw1NjhMMTA1My4yLDU2OEwxMDUzLjIsNTYxLjlaIiBzdHlsZT0iZmlsbDpyZ2IoMjQsMjksMzEpO2ZpbGwtcnVsZTpub256ZXJvOyIvPgogICAgICAgIDxwYXRoIGQ9Ik0xMDU3LjksNTQzLjNMMTA3MS43LDU0My4zTDEwODQuMyw1MzAuOEwxMDU3LjksNTMwLjhMMTA1Ny45LDU0My4zWiIgc3R5bGU9ImZpbGw6cmdiKDI0LDI5LDMxKTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgICAgICA8cGF0aCBkPSJNMTA0Mi44LDU2MS45TDEwNTMuMiw1NjEuOUwxMDY1LjYsNTQ5LjRMMTA0Mi44LDU0OS40TDEwNDIuOCw1NjEuOVoiIHN0eWxlPSJmaWxsOnJnYigyNCwyOSwzMSk7ZmlsbC1ydWxlOm5vbnplcm87Ii8+CiAgICAgICAgPHBhdGggZD0iTTEwOTYuNyw1MTguNEwxMDkwLjMsNTI0LjhMMTA0OS41LDUyNC44TDEwNDkuNSw1MTIuM0wxMDk2LjcsNTEyLjNMMTA5Ni43LDUxOC40WiIgc3R5bGU9ImZpbGw6cmdiKDI0LDI5LDMxKTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgICAgICA8cGF0aCBkPSJNODI4LjYsNTU5LjdMODA5LDU1OS43TDgwNS42LDU2OC4xTDc5Nyw1NjguMUw4MTUuMSw1MjUuN0w4MjIuNiw1MjUuN0w4NDAuNyw1NjguMUw4MzIsNTY4LjFMODI4LjYsNTU5LjdaTTgyNS45LDU1M0w4MTguOCw1MzUuN0w4MTEuNyw1NTNMODI1LjksNTUzWiIgc3R5bGU9ImZpbGw6cmdiKDI0LDI5LDMxKTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgICAgICA8cGF0aCBkPSJNOTYwLjEsNTQxLjNDOTYyLjYsNTM3LjYgOTY4LjksNTM3LjIgOTcxLjUsNTM3LjJMOTcxLjUsNTQ0LjRDOTY4LjMsNTQ0LjQgOTY1LjEsNTQ0LjUgOTYzLjIsNTQ1LjlDOTYxLjMsNTQ3LjMgOTYwLjMsNTQ5LjIgOTYwLjMsNTUxLjVMOTYwLjMsNTY4LjFMOTUyLjUsNTY4LjFMOTUyLjUsNTM3LjJMOTYwLDUzNy4yTDk2MC4xLDU0MS4zWiIgc3R5bGU9ImZpbGw6cmdiKDI0LDI5LDMxKTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgICAgICA8cmVjdCB4PSI5NzUuOCIgeT0iNTM3LjIiIHdpZHRoPSI3LjgiIGhlaWdodD0iMzAuOSIgc3R5bGU9ImZpbGw6cmdiKDI0LDI5LDMxKTsiLz4KICAgICAgICA8cmVjdCB4PSI5NzUuOCIgeT0iNTIzLjQiIHdpZHRoPSI3LjgiIGhlaWdodD0iOS4yIiBzdHlsZT0iZmlsbDpyZ2IoMjQsMjksMzEpOyIvPgogICAgICAgIDxwYXRoIGQ9Ik0xMDIyLjMsNTIzLjRMMTAyMi4zLDU2OC4xTDEwMTQuOCw1NjguMUwxMDE0LjYsNTYzLjRDMTAxMy41LDU2NSAxMDEyLjEsNTY2LjMgMTAxMC40LDU2Ny4zQzEwMDguNyw1NjguMiAxMDA2LjYsNTY4LjcgMTAwNC4yLDU2OC43QzEwMDIuMSw1NjguNyAxMDAwLjEsNTY4LjMgOTk4LjQsNTY3LjZDOTk2LjYsNTY2LjggOTk1LDU2NS44IDk5My43LDU2NC40Qzk5Mi40LDU2MyA5OTEuMyw1NjEuMyA5OTAuNiw1NTkuNEM5ODkuOCw1NTcuNSA5ODkuNSw1NTUuMyA5ODkuNSw1NTIuOUM5ODkuNSw1NTAuNSA5ODkuOSw1NDguMyA5OTAuNiw1NDYuM0M5OTEuNCw1NDQuMyA5OTIuNCw1NDIuNiA5OTMuNyw1NDEuMkM5OTUsNTM5LjggOTk2LjYsNTM4LjcgOTk4LjQsNTM3LjlDMTAwMC4yLDUzNy4xIDEwMDIuMSw1MzYuNyAxMDA0LjIsNTM2LjdDMTAwNi42LDUzNi43IDEwMDguNiw1MzcuMSAxMDEwLjMsNTM4QzEwMTIsNTM4LjkgMTAxMy40LDU0MC4xIDEwMTQuNSw1NDEuOEwxMDE0LjUsNTIzLjVMMTAyMi4zLDUyMy41TDEwMjIuMyw1MjMuNFpNMTAwNS45LDU2MkMxMDA4LjUsNTYyIDEwMTAuNSw1NjEuMSAxMDEyLjEsNTU5LjRDMTAxMy43LDU1Ny43IDEwMTQuNSw1NTUuNCAxMDE0LjUsNTUyLjZDMTAxNC41LDU0OS44IDEwMTMuNyw1NDcuNiAxMDEyLjEsNTQ1LjhDMTAxMC41LDU0NC4xIDEwMDguNSw1NDMuMiAxMDA1LjksNTQzLjJDMTAwMy40LDU0My4yIDEwMDEuMyw1NDQuMSA5OTkuOCw1NDUuOEM5OTguMiw1NDcuNSA5OTcuNCw1NDkuOCA5OTcuNCw1NTIuNkM5OTcuNCw1NTUuNCA5OTguMiw1NTcuNiA5OTkuOCw1NTkuM0MxMDAxLjQsNTYxLjEgMTAwMy40LDU2MiAxMDA1LjksNTYyIiBzdHlsZT0iZmlsbDpyZ2IoMjQsMjksMzEpO2ZpbGwtcnVsZTpub256ZXJvOyIvPgogICAgICAgIDxwYXRoIGQ9Ik04ODUuOCw1NDQuMkw4NjYuNSw1NDQuMkw4NjYuNSw1NTAuOUw4NzcuNSw1NTAuOUM4NzcuMiw1NTQuMyA4NzUuOSw1NTYuOSA4NzMuNyw1NTlDODcxLjUsNTYxIDg2OC43LDU2MiA4NjUuMSw1NjJDODYzLjEsNTYyIDg2MS4yLDU2MS42IDg1OS42LDU2MC45Qzg1Ny45LDU2MC4yIDg1Ni41LDU1OS4yIDg1NS4zLDU1Ny44Qzg1NC4xLDU1Ni41IDg1My4yLDU1NC45IDg1Mi41LDU1M0M4NTEuOCw1NTEuMSA4NTEuNSw1NDkuMSA4NTEuNSw1NDYuOEM4NTEuNSw1NDQuNSA4NTEuOCw1NDIuNSA4NTIuNSw1NDAuNkM4NTMuMSw1MzguNyA4NTQuMSw1MzcuMiA4NTUuMyw1MzUuOEM4NTYuNSw1MzQuNSA4NTcuOSw1MzMuNSA4NTkuNiw1MzIuN0M4NjEuMyw1MzIgODYzLjEsNTMxLjYgODY1LjIsNTMxLjZDODY5LjQsNTMxLjYgODcyLjYsNTMyLjYgODc0LjgsNTM0LjZMODgwLDUyOS40Qzg3Ni4xLDUyNi40IDg3MS4xLDUyNC44IDg2NS4yLDUyNC44Qzg2MS45LDUyNC44IDg1OC45LDUyNS4zIDg1Ni4yLDUyNi40Qzg1My41LDUyNy41IDg1MS4yLDUyOC45IDg0OS4zLDUzMC44Qzg0Ny40LDUzMi43IDg0NS45LDUzNSA4NDQuOSw1MzcuN0M4NDMuOSw1NDAuNCA4NDMuNCw1NDMuNCA4NDMuNCw1NDYuNkM4NDMuNCw1NDkuOCA4NDMuOSw1NTIuOCA4NDUsNTU1LjVDODQ2LjEsNTU4LjIgODQ3LjUsNTYwLjUgODQ5LjQsNTYyLjRDODUxLjMsNTY0LjMgODUzLjYsNTY1LjggODU2LjMsNTY2LjhDODU5LDU2Ny45IDg2Miw1NjguNCA4NjUuMiw1NjguNEM4NjguNCw1NjguNCA4NzEuMyw1NjcuOSA4NzMuOSw1NjYuOEM4NzYuNSw1NjUuNyA4NzguNyw1NjQuMyA4ODAuNSw1NjIuNEM4ODIuMyw1NjAuNSA4ODMuNyw1NTguMiA4ODQuNyw1NTUuNUM4ODUuNyw1NTIuOCA4ODYuMiw1NDkuOCA4ODYuMiw1NDYuNkw4ODYuMiw1NDUuM0M4ODUuOSw1NDUuMSA4ODUuOCw1NDQuNiA4ODUuOCw1NDQuMiIgc3R5bGU9ImZpbGw6cmdiKDI0LDI5LDMxKTtmaWxsLXJ1bGU6bm9uemVybzsiLz4KICAgICAgICA8cGF0aCBkPSJNOTQ2LjgsNTQ0LjJMOTI3LjUsNTQ0LjJMOTI3LjUsNTUwLjlMOTM4LjUsNTUwLjlDOTM4LjIsNTU0LjMgOTM2LjksNTU2LjkgOTM0LjcsNTU5QzkzMi41LDU2MSA5MjkuNyw1NjIgOTI2LjEsNTYyQzkyNC4xLDU2MiA5MjIuMiw1NjEuNiA5MjAuNiw1NjAuOUM5MTguOSw1NjAuMiA5MTcuNSw1NTkuMiA5MTYuMyw1NTcuOEM5MTUuMSw1NTYuNSA5MTQuMiw1NTQuOSA5MTMuNSw1NTNDOTEyLjgsNTUxLjEgOTEyLjUsNTQ5LjEgOTEyLjUsNTQ2LjhDOTEyLjUsNTQ0LjUgOTEyLjgsNTQyLjUgOTEzLjUsNTQwLjZDOTE0LjEsNTM4LjcgOTE1LjEsNTM3LjIgOTE2LjMsNTM1LjhDOTE3LjUsNTM0LjUgOTE4LjksNTMzLjUgOTIwLjYsNTMyLjdDOTIyLjMsNTMyIDkyNC4xLDUzMS42IDkyNi4yLDUzMS42QzkzMC40LDUzMS42IDkzMy42LDUzMi42IDkzNS44LDUzNC42TDk0MSw1MjkuNEM5MzcuMSw1MjYuNCA5MzIuMSw1MjQuOCA5MjYuMiw1MjQuOEM5MjIuOSw1MjQuOCA5MTkuOSw1MjUuMyA5MTcuMiw1MjYuNEM5MTQuNSw1MjcuNSA5MTIuMiw1MjguOSA5MTAuMyw1MzAuOEM5MDguNCw1MzIuNyA5MDYuOSw1MzUgOTA1LjksNTM3LjdDOTA0LjksNTQwLjQgOTA0LjQsNTQzLjQgOTA0LjQsNTQ2LjZDOTA0LjQsNTQ5LjggOTA0LjksNTUyLjggOTA2LDU1NS41QzkwNy4xLDU1OC4yIDkwOC41LDU2MC41IDkxMC40LDU2Mi40QzkxMi4zLDU2NC4zIDkxNC42LDU2NS44IDkxNy4zLDU2Ni44QzkyMCw1NjcuOSA5MjMsNTY4LjQgOTI2LjIsNTY4LjRDOTI5LjQsNTY4LjQgOTMyLjMsNTY3LjkgOTM0LjksNTY2LjhDOTM3LjUsNTY1LjcgOTM5LjcsNTY0LjMgOTQxLjUsNTYyLjRDOTQzLjMsNTYwLjUgOTQ0LjcsNTU4LjIgOTQ1LjcsNTU1LjVDOTQ2LjcsNTUyLjggOTQ3LjIsNTQ5LjggOTQ3LjIsNTQ2LjZMOTQ3LjIsNTQ1LjNDOTQ2LjksNTQ1LjEgOTQ2LjgsNTQ0LjYgOTQ2LjgsNTQ0LjIiIHN0eWxlPSJmaWxsOnJnYigyNCwyOSwzMSk7ZmlsbC1ydWxlOm5vbnplcm87Ii8+CiAgICA8L2c+Cjwvc3ZnPgo=);\n background-repeat: no-repeat;\n background-size: 170px 40px;\n display: block;\n height: 40px;\n width: 170px;\n opacity: 0.5;\n }\n\n .ag-watermark-text {\n opacity: 0.5;\n font-weight: bold;\n font-family: Impact, sans-serif;\n font-size: 19px;\n padding-left: 0.7rem;\n }\n\n .ag-root-wrapper-body {\n display: flex;\n flex-direction: row;\n }\n .ag-root-wrapper-body.ag-layout-normal {\n flex: 1 1 auto;\n height: 0;\n min-height: 0;\n }\n\n .ag-root {\n position: relative;\n display: flex;\n flex-direction: column;\n }\n .ag-root.ag-layout-normal,\n .ag-root.ag-layout-auto-height {\n overflow: hidden;\n flex: 1 1 auto;\n width: 0;\n }\n .ag-root.ag-layout-normal {\n height: 100%;\n }\n\n .ag-header-viewport,\n .ag-floating-top-viewport,\n .ag-body-viewport,\n .ag-center-cols-viewport,\n .ag-floating-bottom-viewport,\n .ag-body-horizontal-scroll-viewport,\n .ag-body-vertical-scroll-viewport,\n .ag-virtual-list-viewport,\n .ag-sticky-top-viewport {\n position: relative;\n height: 100%;\n min-width: 0px;\n overflow: hidden;\n flex: 1 1 auto;\n }\n\n .ag-body-viewport {\n display: flex;\n }\n .ag-body-viewport.ag-layout-normal {\n overflow-y: auto;\n -webkit-overflow-scrolling: touch;\n }\n\n .ag-center-cols-viewport {\n width: 100%;\n overflow-x: auto;\n }\n\n .ag-body-horizontal-scroll-viewport {\n overflow-x: scroll;\n }\n\n .ag-body-vertical-scroll-viewport {\n overflow-y: scroll;\n }\n\n .ag-virtual-list-viewport {\n overflow: auto;\n width: 100%;\n }\n\n .ag-header-container,\n .ag-floating-top-container,\n .ag-body-container,\n .ag-pinned-right-cols-container,\n .ag-center-cols-container,\n .ag-pinned-left-cols-container,\n .ag-floating-bottom-container,\n .ag-body-horizontal-scroll-container,\n .ag-body-vertical-scroll-container,\n .ag-full-width-container,\n .ag-floating-bottom-full-width-container,\n .ag-virtual-list-container,\n .ag-sticky-top-container {\n position: relative;\n }\n\n .ag-header-container,\n .ag-floating-top-container,\n .ag-floating-bottom-container,\n .ag-sticky-top-container {\n height: 100%;\n white-space: nowrap;\n }\n\n .ag-center-cols-container {\n display: block;\n }\n\n .ag-pinned-right-cols-container {\n display: block;\n }\n\n .ag-body-horizontal-scroll-container {\n height: 100%;\n }\n\n .ag-body-vertical-scroll-container {\n width: 100%;\n }\n\n .ag-full-width-container,\n .ag-floating-top-full-width-container,\n .ag-floating-bottom-full-width-container,\n .ag-sticky-top-full-width-container {\n position: absolute;\n top: 0px;\n left: 0px;\n pointer-events: none;\n }\n\n .ag-full-width-container {\n width: 100%;\n }\n\n .ag-floating-bottom-full-width-container,\n .ag-floating-top-full-width-container {\n display: inline-block;\n overflow: hidden;\n height: 100%;\n width: 100%;\n }\n\n .ag-virtual-list-container {\n overflow: hidden;\n }\n\n .ag-center-cols-clipper {\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n min-height: 100%;\n transform: translate3d(0, 0, 0);\n }\n\n .ag-body {\n position: relative;\n display: flex;\n flex: 1 1 auto;\n flex-direction: row !important;\n min-height: 0;\n }\n\n .ag-body-clipper {\n overflow: hidden;\n min-width: 0px;\n flex: 1 1 auto;\n height: 100%;\n transform: translate3d(0, 0, 0);\n }\n\n .ag-body-horizontal-scroll,\n .ag-body-vertical-scroll {\n min-height: 0;\n min-width: 0;\n display: flex;\n position: relative;\n }\n .ag-body-horizontal-scroll.ag-scrollbar-invisible,\n .ag-body-vertical-scroll.ag-scrollbar-invisible {\n position: absolute;\n bottom: 0;\n }\n .ag-body-horizontal-scroll.ag-scrollbar-invisible.ag-apple-scrollbar,\n .ag-body-vertical-scroll.ag-scrollbar-invisible.ag-apple-scrollbar {\n opacity: 0;\n transition: opacity 400ms;\n visibility: hidden;\n }\n .ag-body-horizontal-scroll.ag-scrollbar-invisible.ag-apple-scrollbar.ag-scrollbar-scrolling,\n .ag-body-horizontal-scroll.ag-scrollbar-invisible.ag-apple-scrollbar.ag-scrollbar-active,\n .ag-body-vertical-scroll.ag-scrollbar-invisible.ag-apple-scrollbar.ag-scrollbar-scrolling,\n .ag-body-vertical-scroll.ag-scrollbar-invisible.ag-apple-scrollbar.ag-scrollbar-active {\n visibility: visible;\n opacity: 1;\n }\n\n .ag-body-horizontal-scroll {\n width: 100%;\n }\n .ag-body-horizontal-scroll.ag-scrollbar-invisible {\n left: 0;\n right: 0;\n }\n\n .ag-body-vertical-scroll {\n height: 100%;\n }\n .ag-body-vertical-scroll.ag-scrollbar-invisible {\n top: 0;\n z-index: 10;\n }\n .ag-ltr .ag-body-vertical-scroll.ag-scrollbar-invisible {\n right: 0;\n }\n .ag-rtl .ag-body-vertical-scroll.ag-scrollbar-invisible {\n left: 0;\n }\n\n .ag-force-vertical-scroll {\n overflow-y: scroll !important;\n }\n\n .ag-horizontal-left-spacer,\n .ag-horizontal-right-spacer {\n height: 100%;\n min-width: 0;\n overflow-x: scroll;\n }\n .ag-horizontal-left-spacer.ag-scroller-corner,\n .ag-horizontal-right-spacer.ag-scroller-corner {\n overflow-x: hidden;\n }\n\n .ag-header,\n .ag-pinned-left-header,\n .ag-pinned-right-header {\n display: inline-block;\n overflow: hidden;\n position: relative;\n }\n\n .ag-header-cell-sortable {\n cursor: pointer;\n }\n\n .ag-header {\n display: flex;\n width: 100%;\n white-space: nowrap;\n }\n\n .ag-pinned-left-header {\n height: 100%;\n }\n\n .ag-pinned-right-header {\n height: 100%;\n }\n\n .ag-header-row {\n position: absolute;\n overflow: hidden;\n }\n\n .ag-header-cell {\n display: inline-flex;\n align-items: center;\n position: absolute;\n height: 100%;\n overflow: hidden;\n }\n\n .ag-header-cell.ag-header-active .ag-header-cell-menu-button {\n opacity: 1;\n }\n\n .ag-header-cell-menu-button:not(.ag-header-menu-always-show) {\n transition: opacity 0.2s;\n opacity: 0;\n }\n\n .ag-header-group-cell-label,\n .ag-header-cell-label {\n display: flex;\n flex: 1 1 auto;\n overflow: hidden;\n align-items: center;\n text-overflow: ellipsis;\n align-self: stretch;\n }\n\n .ag-header-cell-text {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .ag-header-cell:not(.ag-header-cell-auto-height) .ag-header-cell-comp-wrapper {\n height: 100%;\n display: flex;\n align-items: center;\n }\n\n .ag-header-cell-comp-wrapper {\n width: 100%;\n overflow: hidden;\n }\n\n .ag-header-cell-wrap-text .ag-header-cell-comp-wrapper {\n white-space: normal;\n }\n\n .ag-right-aligned-header .ag-header-cell-label {\n flex-direction: row-reverse;\n }\n\n .ag-header-group-text {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .ag-header-cell-resize {\n position: absolute;\n z-index: 2;\n height: 100%;\n width: 8px;\n top: 0;\n cursor: ew-resize;\n }\n .ag-ltr .ag-header-cell-resize {\n right: -4px;\n }\n .ag-rtl .ag-header-cell-resize {\n left: -4px;\n }\n\n .ag-pinned-left-header .ag-header-cell-resize {\n right: -4px;\n }\n\n .ag-pinned-right-header .ag-header-cell-resize {\n left: -4px;\n }\n\n .ag-header-select-all {\n display: flex;\n }\n\n .ag-column-moving .ag-cell {\n transition: left 0.2s;\n }\n .ag-column-moving .ag-header-cell {\n transition: left 0.2s;\n }\n .ag-column-moving .ag-header-group-cell {\n transition:\n left 0.2s,\n width 0.2s;\n }\n\n .ag-column-panel {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n flex: 1 1 auto;\n }\n\n .ag-column-select {\n position: relative;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n flex: 3 1 0px;\n }\n\n .ag-column-select-header {\n position: relative;\n display: flex;\n flex: none;\n }\n\n .ag-column-select-header-icon {\n position: relative;\n }\n\n .ag-column-select-header-filter-wrapper {\n flex: 1 1 auto;\n }\n\n .ag-column-select-header-filter {\n width: 100%;\n }\n\n .ag-column-select-list {\n flex: 1 1 0px;\n overflow: hidden;\n }\n\n .ag-column-drop {\n position: relative;\n display: inline-flex;\n align-items: center;\n overflow: auto;\n width: 100%;\n }\n\n .ag-column-drop-list {\n display: flex;\n align-items: center;\n }\n\n .ag-column-drop-cell {\n position: relative;\n display: flex;\n align-items: center;\n }\n\n .ag-column-drop-cell-text {\n overflow: hidden;\n flex: 1 1 auto;\n text-overflow: ellipsis;\n white-space: nowrap;\n }\n\n .ag-column-drop-vertical {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n align-items: stretch;\n flex: 1 1 0px;\n }\n\n .ag-column-drop-vertical-title-bar {\n display: flex;\n align-items: center;\n flex: none;\n }\n\n .ag-column-drop-vertical-list {\n position: relative;\n align-items: stretch;\n flex-grow: 1;\n flex-direction: column;\n overflow-x: auto;\n }\n .ag-column-drop-vertical-list > * {\n flex: none;\n }\n\n .ag-column-drop-empty .ag-column-drop-vertical-list {\n overflow: hidden;\n }\n\n .ag-column-drop-vertical-empty-message {\n display: block;\n }\n\n .ag-column-drop.ag-column-drop-horizontal {\n white-space: nowrap;\n overflow: hidden;\n }\n\n .ag-column-drop-cell-button {\n cursor: pointer;\n }\n\n .ag-filter-toolpanel {\n flex: 1 1 0px;\n min-width: 0;\n }\n\n .ag-filter-toolpanel-header {\n position: relative;\n }\n\n .ag-filter-toolpanel-header,\n .ag-filter-toolpanel-search {\n display: flex;\n align-items: center;\n }\n .ag-filter-toolpanel-header > *,\n .ag-filter-toolpanel-search > * {\n display: flex;\n align-items: center;\n }\n\n .ag-filter-apply-panel {\n display: flex;\n justify-content: flex-end;\n overflow: hidden;\n }\n\n .ag-row-animation .ag-row {\n transition:\n transform 0.4s,\n top 0.4s,\n background-color 0.1s,\n opacity 0.2s;\n }\n\n .ag-row-animation .ag-row.ag-after-created {\n transition:\n transform 0.4s,\n top 0.4s,\n height 0.4s,\n background-color 0.1s,\n opacity 0.2s;\n }\n\n .ag-row-no-animation .ag-row {\n transition: background-color 0.1s;\n }\n\n .ag-row {\n white-space: nowrap;\n width: 100%;\n }\n\n .ag-row-loading {\n display: flex;\n align-items: center;\n }\n\n .ag-row-position-absolute {\n position: absolute;\n }\n\n .ag-row-position-relative {\n position: relative;\n }\n\n .ag-full-width-row {\n overflow: hidden;\n pointer-events: all;\n }\n\n .ag-row-inline-editing {\n z-index: 1;\n }\n\n .ag-row-dragging {\n z-index: 2;\n }\n\n .ag-stub-cell {\n display: flex;\n align-items: center;\n }\n\n .ag-cell {\n display: inline-block;\n position: absolute;\n white-space: nowrap;\n height: 100%;\n }\n\n .ag-cell-value {\n flex: 1 1 auto;\n }\n\n .ag-cell-value,\n .ag-group-value {\n overflow: hidden;\n text-overflow: ellipsis;\n }\n\n .ag-cell-wrap-text {\n white-space: normal;\n word-break: break-all;\n }\n\n .ag-cell-wrapper {\n display: flex;\n align-items: center;\n }\n .ag-cell-wrapper.ag-row-group {\n align-items: flex-start;\n }\n\n .ag-sparkline-wrapper {\n position: absolute;\n height: 100%;\n width: 100%;\n left: 0;\n top: 0;\n }\n\n .ag-full-width-row .ag-cell-wrapper.ag-row-group {\n height: 100%;\n align-items: center;\n }\n\n .ag-cell-inline-editing {\n z-index: 1;\n }\n .ag-cell-inline-editing .ag-cell-wrapper,\n .ag-cell-inline-editing .ag-cell-edit-wrapper,\n .ag-cell-inline-editing .ag-cell-editor,\n .ag-cell-inline-editing .ag-cell-editor .ag-wrapper,\n .ag-cell-inline-editing .ag-cell-editor input {\n height: 100%;\n width: 100%;\n line-height: normal;\n }\n\n .ag-cell .ag-icon {\n display: inline-block;\n vertical-align: middle;\n }\n\n .ag-set-filter-item {\n display: flex;\n align-items: center;\n height: 100%;\n }\n\n .ag-set-filter-item-checkbox {\n display: flex;\n overflow: hidden;\n }\n\n .ag-set-filter-group-icons {\n display: block;\n }\n .ag-set-filter-group-icons > * {\n cursor: pointer;\n }\n\n .ag-filter-body-wrapper {\n display: flex;\n flex-direction: column;\n }\n\n .ag-filter-filter {\n flex: 1 1 0px;\n }\n\n .ag-filter-condition {\n display: flex;\n justify-content: center;\n }\n\n .ag-floating-filter-body {\n position: relative;\n display: flex;\n flex: 1 1 auto;\n height: 100%;\n }\n\n .ag-floating-filter-full-body {\n display: flex;\n flex: 1 1 auto;\n height: 100%;\n width: 100%;\n align-items: center;\n overflow: hidden;\n }\n\n .ag-floating-filter-full-body > div {\n flex: 1 1 auto;\n }\n\n .ag-floating-filter-input {\n align-items: center;\n display: flex;\n width: 100%;\n }\n .ag-floating-filter-input > * {\n flex: 1 1 auto;\n }\n\n .ag-floating-filter-button {\n display: flex;\n flex: none;\n }\n\n .ag-dnd-ghost {\n position: absolute;\n display: inline-flex;\n align-items: center;\n cursor: move;\n white-space: nowrap;\n z-index: 9999;\n }\n\n .ag-overlay {\n height: 100%;\n left: 0;\n pointer-events: none;\n position: absolute;\n top: 0;\n width: 100%;\n }\n\n .ag-overlay-panel {\n display: flex;\n height: 100%;\n width: 100%;\n }\n\n .ag-overlay-wrapper {\n display: flex;\n flex: none;\n width: 100%;\n height: 100%;\n align-items: center;\n justify-content: center;\n text-align: center;\n }\n\n .ag-overlay-loading-wrapper {\n pointer-events: all;\n }\n\n .ag-popup-child {\n z-index: 5;\n top: 0;\n }\n\n .ag-popup-editor {\n position: absolute;\n user-select: none;\n z-index: 1;\n }\n\n .ag-large-text-input {\n display: block;\n }\n\n .ag-virtual-list-item {\n position: absolute;\n width: 100%;\n }\n\n .ag-floating-top {\n overflow: hidden;\n white-space: nowrap;\n width: 100%;\n position: relative;\n display: flex;\n }\n\n .ag-pinned-left-floating-top {\n display: inline-block;\n overflow: hidden;\n position: relative;\n min-width: 0px;\n }\n\n .ag-pinned-right-floating-top {\n display: inline-block;\n overflow: hidden;\n position: relative;\n min-width: 0px;\n }\n\n .ag-floating-bottom {\n overflow: hidden;\n white-space: nowrap;\n width: 100%;\n position: relative;\n display: flex;\n }\n\n .ag-pinned-left-floating-bottom {\n display: inline-block;\n overflow: hidden;\n position: relative;\n min-width: 0px;\n }\n\n .ag-pinned-right-floating-bottom {\n display: inline-block;\n overflow: hidden;\n position: relative;\n min-width: 0px;\n }\n\n .ag-sticky-top {\n position: absolute;\n display: flex;\n width: 100%;\n }\n\n .ag-pinned-left-sticky-top,\n .ag-pinned-right-sticky-top {\n position: relative;\n height: 100%;\n overflow: hidden;\n }\n\n .ag-sticky-top-full-width-container {\n overflow: hidden;\n width: 100%;\n height: 100%;\n }\n\n .ag-dialog,\n .ag-panel {\n display: flex;\n flex-direction: column;\n position: relative;\n overflow: hidden;\n }\n\n .ag-panel-title-bar {\n display: flex;\n flex: none;\n align-items: center;\n cursor: default;\n }\n\n .ag-panel-title-bar-title {\n flex: 1 1 auto;\n }\n\n .ag-panel-title-bar-buttons {\n display: flex;\n }\n\n .ag-panel-title-bar-button {\n cursor: pointer;\n }\n\n .ag-panel-content-wrapper {\n display: flex;\n flex: 1 1 auto;\n position: relative;\n overflow: hidden;\n }\n\n .ag-dialog {\n position: absolute;\n }\n\n .ag-resizer {\n position: absolute;\n pointer-events: none;\n user-select: none;\n z-index: 1;\n }\n .ag-resizer.ag-resizer-topLeft {\n top: 0;\n left: 0;\n height: 5px;\n width: 5px;\n cursor: nwse-resize;\n }\n .ag-resizer.ag-resizer-top {\n top: 0;\n left: 5px;\n right: 5px;\n height: 5px;\n cursor: ns-resize;\n }\n .ag-resizer.ag-resizer-topRight {\n top: 0;\n right: 0;\n height: 5px;\n width: 5px;\n cursor: nesw-resize;\n }\n .ag-resizer.ag-resizer-right {\n top: 5px;\n right: 0;\n bottom: 5px;\n width: 5px;\n cursor: ew-resize;\n }\n .ag-resizer.ag-resizer-bottomRight {\n bottom: 0;\n right: 0;\n height: 5px;\n width: 5px;\n cursor: nwse-resize;\n }\n .ag-resizer.ag-resizer-bottom {\n bottom: 0;\n left: 5px;\n right: 5px;\n height: 5px;\n cursor: ns-resize;\n }\n .ag-resizer.ag-resizer-bottomLeft {\n bottom: 0;\n left: 0;\n height: 5px;\n width: 5px;\n cursor: nesw-resize;\n }\n .ag-resizer.ag-resizer-left {\n left: 0;\n top: 5px;\n bottom: 5px;\n width: 5px;\n cursor: ew-resize;\n }\n\n .ag-tooltip {\n position: absolute;\n pointer-events: none;\n z-index: 99999;\n }\n\n .ag-tooltip-custom {\n position: absolute;\n pointer-events: none;\n z-index: 99999;\n }\n\n .ag-value-slide-out {\n margin-right: 5px;\n opacity: 1;\n transition:\n opacity 3s,\n margin-right 3s;\n transition-timing-function: linear;\n }\n\n .ag-value-slide-out-end {\n margin-right: 10px;\n opacity: 0;\n }\n\n .ag-opacity-zero {\n opacity: 0 !important;\n }\n\n .ag-menu {\n max-height: 100%;\n overflow-y: auto;\n position: absolute;\n user-select: none;\n }\n\n .ag-menu-column-select-wrapper {\n height: 265px;\n overflow: auto;\n }\n .ag-menu-column-select-wrapper .ag-column-select {\n height: 100%;\n }\n\n .ag-menu-list {\n display: table;\n width: 100%;\n }\n\n .ag-menu-option,\n .ag-menu-separator {\n display: table-row;\n }\n\n .ag-menu-option-part,\n .ag-menu-separator-part {\n display: table-cell;\n vertical-align: middle;\n }\n\n .ag-menu-option-text {\n white-space: nowrap;\n }\n\n .ag-compact-menu-option {\n width: 100%;\n display: flex;\n flex-wrap: nowrap;\n }\n\n .ag-compact-menu-option-text {\n white-space: nowrap;\n flex: 1 1 auto;\n }\n\n .ag-rich-select {\n cursor: default;\n outline: none;\n }\n\n .ag-rich-select-value {\n display: flex;\n align-items: center;\n }\n\n .ag-rich-select-value-icon {\n flex: 1 1 auto;\n order: 1;\n }\n .ag-ltr .ag-rich-select-value-icon {\n text-align: right;\n }\n .ag-rtl .ag-rich-select-value-icon {\n text-align: left;\n }\n\n .ag-rich-select-list {\n position: relative;\n }\n\n .ag-rich-select-virtual-list-item {\n display: flex;\n }\n\n .ag-rich-select-row {\n display: flex;\n flex: 1 1 auto;\n align-items: center;\n white-space: nowrap;\n }\n\n .ag-paging-panel {\n align-items: center;\n display: flex;\n justify-content: flex-end;\n }\n\n .ag-paging-page-summary-panel {\n display: flex;\n align-items: center;\n }\n\n .ag-paging-button {\n position: relative;\n }\n\n .ag-disabled .ag-paging-page-summary-panel {\n pointer-events: none;\n }\n\n .ag-tool-panel-wrapper {\n display: flex;\n overflow-y: auto;\n overflow-x: hidden;\n cursor: default;\n user-select: none;\n }\n\n .ag-column-select-column,\n .ag-column-select-column-group,\n .ag-select-agg-func-item {\n position: relative;\n align-items: center;\n display: flex;\n flex-direction: row;\n flex-wrap: nowrap;\n text-overflow: ellipsis;\n white-space: nowrap;\n height: 100%;\n }\n .ag-column-select-column > *,\n .ag-column-select-column-group > *,\n .ag-select-agg-func-item > * {\n flex: none;\n }\n\n .ag-column-select-checkbox {\n display: flex;\n }\n\n .ag-tool-panel-horizontal-resize {\n cursor: ew-resize;\n height: 100%;\n position: absolute;\n top: 0;\n width: 5px;\n z-index: 1;\n }\n\n .ag-ltr .ag-side-bar-left .ag-tool-panel-horizontal-resize {\n right: -3px;\n }\n .ag-rtl .ag-side-bar-left .ag-tool-panel-horizontal-resize {\n left: -3px;\n }\n\n .ag-ltr .ag-side-bar-right .ag-tool-panel-horizontal-resize {\n left: -3px;\n }\n .ag-rtl .ag-side-bar-right .ag-tool-panel-horizontal-resize {\n right: -3px;\n }\n\n .ag-details-row {\n width: 100%;\n }\n\n .ag-details-row-fixed-height {\n height: 100%;\n }\n\n .ag-details-grid {\n width: 100%;\n }\n\n .ag-details-grid-fixed-height {\n height: 100%;\n }\n\n .ag-header-group-cell {\n display: flex;\n align-items: center;\n height: 100%;\n position: absolute;\n }\n\n .ag-cell-label-container {\n display: flex;\n justify-content: space-between;\n flex-direction: row-reverse;\n align-items: center;\n height: 100%;\n width: 100%;\n overflow: hidden;\n padding: 5px 0px;\n }\n\n .ag-right-aligned-header .ag-cell-label-container {\n flex-direction: row;\n }\n\n .ag-side-bar {\n display: flex;\n flex-direction: row-reverse;\n }\n\n .ag-side-bar-left {\n order: -1;\n flex-direction: row;\n }\n\n .ag-side-button-button {\n position: relative;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n flex-wrap: nowrap;\n white-space: nowrap;\n outline: none;\n cursor: pointer;\n }\n\n .ag-side-button-label {\n writing-mode: vertical-lr;\n }\n\n .ag-status-bar {\n display: flex;\n justify-content: space-between;\n overflow: hidden;\n }\n\n .ag-status-panel {\n display: inline-flex;\n }\n\n .ag-status-name-value {\n white-space: nowrap;\n }\n\n .ag-status-bar-left {\n display: inline-flex;\n }\n\n .ag-status-bar-center {\n display: inline-flex;\n }\n\n .ag-status-bar-right {\n display: inline-flex;\n }\n\n .ag-icon {\n display: block;\n speak: none;\n }\n\n .ag-group {\n position: relative;\n width: 100%;\n }\n\n .ag-group-title-bar {\n display: flex;\n align-items: center;\n }\n\n .ag-group-title {\n display: block;\n flex: 1 1 auto;\n min-width: 0;\n overflow: hidden;\n white-space: nowrap;\n text-overflow: ellipsis;\n }\n\n .ag-group-title-bar .ag-group-title {\n cursor: default;\n }\n\n .ag-group-toolbar {\n display: flex;\n align-items: center;\n }\n\n .ag-group-container {\n display: flex;\n }\n\n .ag-disabled .ag-group-container {\n pointer-events: none;\n }\n\n .ag-group-container-horizontal {\n flex-direction: row;\n flex-wrap: wrap;\n }\n\n .ag-group-container-vertical {\n flex-direction: column;\n }\n\n .ag-column-group-icons {\n display: block;\n }\n .ag-column-group-icons > * {\n cursor: pointer;\n }\n\n .ag-group-item-alignment-stretch .ag-group-item {\n align-items: stretch;\n }\n\n .ag-group-item-alignment-start .ag-group-item {\n align-items: flex-start;\n }\n\n .ag-group-item-alignment-end .ag-group-item {\n align-items: flex-end;\n }\n\n .ag-toggle-button-icon {\n transition: right 0.3s;\n position: absolute;\n top: -1px;\n }\n\n .ag-input-field,\n .ag-select {\n display: flex;\n flex-direction: row;\n align-items: center;\n }\n\n .ag-input-field-input {\n flex: 1 1 auto;\n }\n\n .ag-floating-filter-input .ag-input-field-input[type='date'] {\n width: 1px;\n }\n\n .ag-range-field {\n display: flex;\n align-items: center;\n }\n\n .ag-angle-select {\n display: flex;\n align-items: center;\n }\n\n .ag-angle-select-wrapper {\n display: flex;\n }\n\n .ag-angle-select-parent-circle {\n display: block;\n position: relative;\n }\n\n .ag-angle-select-child-circle {\n position: absolute;\n }\n\n .ag-slider-wrapper {\n display: flex;\n }\n .ag-slider-wrapper .ag-input-field {\n flex: 1 1 auto;\n }\n\n .ag-picker-field-display {\n flex: 1 1 auto;\n }\n\n .ag-picker-field {\n display: flex;\n align-items: center;\n }\n\n .ag-picker-field-icon {\n display: flex;\n border: 0;\n padding: 0;\n margin: 0;\n cursor: pointer;\n }\n\n .ag-picker-field-wrapper {\n overflow: hidden;\n }\n\n .ag-label-align-right .ag-label {\n order: 1;\n }\n .ag-label-align-right > * {\n flex: none;\n }\n\n .ag-label-align-top {\n flex-direction: column;\n align-items: flex-start;\n }\n .ag-label-align-top > * {\n align-self: stretch;\n }\n\n .ag-label-ellipsis {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n flex: 1;\n }\n\n .ag-color-panel {\n width: 100%;\n display: flex;\n flex-direction: column;\n text-align: center;\n }\n\n .ag-spectrum-color {\n flex: 1 1 auto;\n position: relative;\n overflow: hidden;\n cursor: default;\n }\n\n .ag-spectrum-fill {\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n\n .ag-spectrum-val {\n cursor: pointer;\n }\n\n .ag-spectrum-dragger {\n position: absolute;\n pointer-events: none;\n cursor: pointer;\n }\n\n .ag-spectrum-hue {\n cursor: default;\n background: linear-gradient(\n to left,\n #ff0000 3%,\n #ffff00 17%,\n #00ff00 33%,\n #00ffff 50%,\n #0000ff 67%,\n #ff00ff 83%,\n #ff0000 100%\n );\n }\n\n .ag-spectrum-alpha {\n cursor: default;\n }\n\n .ag-spectrum-hue-background {\n width: 100%;\n height: 100%;\n }\n\n .ag-spectrum-alpha-background {\n background-image: linear-gradient(to right, rgba(0, 0, 0, 0), rgb(0, 0, 0));\n width: 100%;\n height: 100%;\n }\n\n .ag-spectrum-tool {\n cursor: pointer;\n }\n\n .ag-spectrum-slider {\n position: absolute;\n pointer-events: none;\n }\n\n .ag-recent-colors {\n display: flex;\n }\n\n .ag-recent-color {\n cursor: pointer;\n }\n\n .ag-ltr .ag-column-select-indent-1 {\n padding-left: 20px;\n }\n .ag-rtl .ag-column-select-indent-1 {\n padding-right: 20px;\n }\n\n .ag-ltr .ag-set-filter-indent-1 {\n padding-left: 20px;\n }\n .ag-rtl .ag-set-filter-indent-1 {\n padding-right: 20px;\n }\n\n .ag-ltr .ag-row-group-indent-1 {\n padding-left: 20px;\n }\n .ag-rtl .ag-row-group-indent-1 {\n padding-right: 20px;\n }\n\n .ag-ltr .ag-column-select-indent-2 {\n padding-left: 40px;\n }\n .ag-rtl .ag-column-select-indent-2 {\n padding-right: 40px;\n }\n\n .ag-ltr .ag-set-filter-indent-2 {\n padding-left: 40px;\n }\n .ag-rtl .ag-set-filter-indent-2 {\n padding-right: 40px;\n }\n\n .ag-ltr .ag-row-group-indent-2 {\n padding-left: 40px;\n }\n .ag-rtl .ag-row-group-indent-2 {\n padding-right: 40px;\n }\n\n .ag-ltr .ag-column-select-indent-3 {\n padding-left: 60px;\n }\n .ag-rtl .ag-column-select-indent-3 {\n padding-right: 60px;\n }\n\n .ag-ltr .ag-set-filter-indent-3 {\n padding-left: 60px;\n }\n .ag-rtl .ag-set-filter-indent-3 {\n padding-right: 60px;\n }\n\n .ag-ltr .ag-row-group-indent-3 {\n padding-left: 60px;\n }\n .ag-rtl .ag-row-group-indent-3 {\n padding-right: 60px;\n }\n\n .ag-ltr .ag-column-select-indent-4 {\n padding-left: 80px;\n }\n .ag-rtl .ag-column-select-indent-4 {\n padding-right: 80px;\n }\n\n .ag-ltr .ag-set-filter-indent-4 {\n padding-left: 80px;\n }\n .ag-rtl .ag-set-filter-indent-4 {\n padding-right: 80px;\n }\n\n .ag-ltr .ag-row-group-indent-4 {\n padding-left: 80px;\n }\n .ag-rtl .ag-row-group-indent-4 {\n padding-right: 80px;\n }\n\n .ag-ltr .ag-column-select-indent-5 {\n padding-left: 100px;\n }\n .ag-rtl .ag-column-select-indent-5 {\n padding-right: 100px;\n }\n\n .ag-ltr .ag-set-filter-indent-5 {\n padding-left: 100px;\n }\n .ag-rtl .ag-set-filter-indent-5 {\n padding-right: 100px;\n }\n\n .ag-ltr .ag-row-group-indent-5 {\n padding-left: 100px;\n }\n .ag-rtl .ag-row-group-indent-5 {\n padding-right: 100px;\n }\n\n .ag-ltr .ag-column-select-indent-6 {\n padding-left: 120px;\n }\n .ag-rtl .ag-column-select-indent-6 {\n padding-right: 120px;\n }\n\n .ag-ltr .ag-set-filter-indent-6 {\n padding-left: 120px;\n }\n .ag-rtl .ag-set-filter-indent-6 {\n padding-right: 120px;\n }\n\n .ag-ltr .ag-row-group-indent-6 {\n padding-left: 120px;\n }\n .ag-rtl .ag-row-group-indent-6 {\n padding-right: 120px;\n }\n\n .ag-ltr .ag-column-select-indent-7 {\n padding-left: 140px;\n }\n .ag-rtl .ag-column-select-indent-7 {\n padding-right: 140px;\n }\n\n .ag-ltr .ag-set-filter-indent-7 {\n padding-left: 140px;\n }\n .ag-rtl .ag-set-filter-indent-7 {\n padding-right: 140px;\n }\n\n .ag-ltr .ag-row-group-indent-7 {\n padding-left: 140px;\n }\n .ag-rtl .ag-row-group-indent-7 {\n padding-right: 140px;\n }\n\n .ag-ltr .ag-column-select-indent-8 {\n padding-left: 160px;\n }\n .ag-rtl .ag-column-select-indent-8 {\n padding-right: 160px;\n }\n\n .ag-ltr .ag-set-filter-indent-8 {\n padding-left: 160px;\n }\n .ag-rtl .ag-set-filter-indent-8 {\n padding-right: 160px;\n }\n\n .ag-ltr .ag-row-group-indent-8 {\n padding-left: 160px;\n }\n .ag-rtl .ag-row-group-indent-8 {\n padding-right: 160px;\n }\n\n .ag-ltr .ag-column-select-indent-9 {\n padding-left: 180px;\n }\n .ag-rtl .ag-column-select-indent-9 {\n padding-right: 180px;\n }\n\n .ag-ltr .ag-set-filter-indent-9 {\n padding-left: 180px;\n }\n .ag-rtl .ag-set-filter-indent-9 {\n padding-right: 180px;\n }\n\n .ag-ltr .ag-row-group-indent-9 {\n padding-left: 180px;\n }\n .ag-rtl .ag-row-group-indent-9 {\n padding-right: 180px;\n }\n\n .ag-ltr {\n direction: ltr;\n }\n .ag-ltr .ag-body,\n .ag-ltr .ag-floating-top,\n .ag-ltr .ag-floating-bottom,\n .ag-ltr .ag-header,\n .ag-ltr .ag-body-viewport,\n .ag-ltr .ag-body-horizontal-scroll {\n flex-direction: row;\n }\n\n .ag-rtl {\n direction: rtl;\n }\n .ag-rtl .ag-body,\n .ag-rtl .ag-floating-top,\n .ag-rtl .ag-floating-bottom,\n .ag-rtl .ag-header,\n .ag-rtl .ag-body-viewport,\n .ag-rtl .ag-body-horizontal-scroll {\n flex-direction: row-reverse;\n }\n .ag-rtl .ag-icon-contracted,\n .ag-rtl .ag-icon-expanded,\n .ag-rtl .ag-icon-tree-closed {\n display: block;\n transform: rotate(180deg);\n }\n\n .ag-body .ag-body-viewport {\n -webkit-overflow-scrolling: touch;\n }\n\n .ag-layout-print.ag-body {\n display: block;\n height: unset;\n }\n .ag-layout-print.ag-body-clipper {\n height: unset;\n }\n .ag-layout-print.ag-root-wrapper {\n display: inline-flex;\n }\n .ag-layout-print .ag-center-cols-clipper {\n min-width: 100%;\n }\n .ag-layout-print .ag-body-vertical-scroll {\n display: none;\n }\n .ag-layout-print .ag-body-horizontal-scroll {\n display: none;\n }\n .ag-layout-print.ag-force-vertical-scroll {\n overflow-y: visible !important;\n }\n\n @media print {\n .ag-root-wrapper.ag-layout-print {\n display: table;\n }\n .ag-root-wrapper.ag-layout-print .ag-root-wrapper-body,\n .ag-root-wrapper.ag-layout-print .ag-root,\n .ag-root-wrapper.ag-layout-print .ag-body-viewport,\n .ag-root-wrapper.ag-layout-print .ag-center-cols-container,\n .ag-root-wrapper.ag-layout-print .ag-center-cols-viewport,\n .ag-root-wrapper.ag-layout-print .ag-center-cols-clipper,\n .ag-root-wrapper.ag-layout-print .ag-body-horizontal-scroll-viewport,\n .ag-root-wrapper.ag-layout-print .ag-virtual-list-viewport {\n height: auto !important;\n overflow: hidden !important;\n display: block !important;\n }\n .ag-root-wrapper.ag-layout-print .ag-row,\n .ag-root-wrapper.ag-layout-print .ag-cell {\n break-inside: avoid;\n }\n }\n [class^='ag-'],\n [class^='ag-']:focus,\n [class^='ag-']:after,\n [class^='ag-']:before {\n box-sizing: border-box;\n outline: none;\n }\n\n [class^='ag-']::-ms-clear {\n display: none;\n }\n\n .ag-checkbox .ag-input-wrapper,\n .ag-radio-button .ag-input-wrapper {\n overflow: visible;\n }\n\n .ag-range-field .ag-input-wrapper {\n height: 100%;\n }\n\n .ag-toggle-button {\n flex: none;\n width: unset;\n min-width: unset;\n }\n\n .ag-ltr .ag-label-align-right .ag-label {\n margin-left: var(--ag-grid-size);\n }\n .ag-rtl .ag-label-align-right .ag-label {\n margin-right: var(--ag-grid-size);\n }\n\n input[class^='ag-'] {\n margin: 0;\n background-color: var(--ag-background-color);\n }\n\n textarea[class^='ag-'],\n select[class^='ag-'] {\n background-color: var(--ag-background-color);\n }\n\n input[class^='ag-']:not([type]),\n input[class^='ag-'][type='text'],\n input[class^='ag-'][type='number'],\n input[class^='ag-'][type='tel'],\n input[class^='ag-'][type='date'],\n input[class^='ag-'][type='datetime-local'],\n textarea[class^='ag-'] {\n font-size: inherit;\n line-height: inherit;\n color: inherit;\n border: var(--ag-borders-input) var(--ag-input-border-color);\n }\n input[class^='ag-']:not([type]):disabled,\n input[class^='ag-'][type='text']:disabled,\n input[class^='ag-'][type='number']:disabled,\n input[class^='ag-'][type='tel']:disabled,\n input[class^='ag-'][type='date']:disabled,\n input[class^='ag-'][type='datetime-local']:disabled,\n textarea[class^='ag-']:disabled {\n color: var(--ag-disabled-foreground-color);\n background-color: var(--ag-input-disabled-background-color);\n border-color: var(--ag-input-disabled-border-color);\n }\n input[class^='ag-']:not([type]):focus,\n input[class^='ag-'][type='text']:focus,\n input[class^='ag-'][type='number']:focus,\n input[class^='ag-'][type='tel']:focus,\n input[class^='ag-'][type='date']:focus,\n input[class^='ag-'][type='datetime-local']:focus,\n textarea[class^='ag-']:focus {\n outline: none;\n box-shadow: var(--ag-input-focus-box-shadow);\n border-color: var(--ag-input-focus-border-color);\n }\n input[class^='ag-']:not([type]):invalid,\n input[class^='ag-'][type='text']:invalid,\n input[class^='ag-'][type='number']:invalid,\n input[class^='ag-'][type='tel']:invalid,\n input[class^='ag-'][type='date']:invalid,\n input[class^='ag-'][type='datetime-local']:invalid,\n textarea[class^='ag-']:invalid {\n border: var(--ag-borders-input-invalid) var(--ag-input-border-color-invalid);\n }\n\n input[class^='ag-'][type='number'] {\n -moz-appearance: textfield;\n }\n input[class^='ag-'][type='number']::-webkit-outer-spin-button,\n input[class^='ag-'][type='number']::-webkit-inner-spin-button {\n -webkit-appearance: none;\n margin: 0;\n }\n\n input[class^='ag-'][type='range'] {\n padding: 0;\n }\n\n input[class^='ag-'][type='button']:focus,\n button[class^='ag-']:focus {\n box-shadow: var(--ag-input-focus-box-shadow);\n }\n\n .ag-drag-handle {\n color: var(--ag-secondary-foreground-color);\n }\n\n .ag-list-item,\n .ag-virtual-list-item {\n height: var(--ag-list-item-height);\n }\n\n .ag-keyboard-focus .ag-virtual-list-item:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-virtual-list-item:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 4px;\n left: 4px;\n display: block;\n width: calc(100% - 8px);\n height: calc(100% - 8px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-select-list {\n background-color: var(--ag-background-color);\n overflow-y: auto;\n overflow-x: hidden;\n }\n\n .ag-list-item {\n display: flex;\n align-items: center;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n .ag-list-item.ag-active-item {\n background-color: var(--ag-row-hover-color);\n }\n\n .ag-select-list-item {\n padding-left: 4px;\n padding-right: 4px;\n cursor: default;\n -moz-user-select: none;\n -webkit-user-select: none;\n -ms-user-select: none;\n user-select: none;\n }\n .ag-select-list-item span {\n white-space: nowrap;\n text-overflow: ellipsis;\n overflow: hidden;\n }\n\n .ag-select .ag-picker-field-wrapper {\n background-color: var(--ag-background-color);\n min-height: var(--ag-list-item-height);\n cursor: default;\n }\n .ag-select.ag-disabled .ag-picker-field-wrapper:focus {\n box-shadow: none;\n }\n .ag-select:not(.ag-cell-editor) {\n height: var(--ag-list-item-height);\n }\n .ag-select .ag-picker-field-display {\n margin: 4px;\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis;\n }\n .ag-select .ag-picker-field-icon {\n display: flex;\n align-items: center;\n }\n .ag-select.ag-disabled {\n opacity: 0.5;\n }\n\n .ag-rich-select {\n background-color: var(--ag-control-panel-background-color);\n }\n\n .ag-rich-select-list {\n width: 100%;\n min-width: 200px;\n height: calc(var(--ag-row-height) * 6.5);\n }\n\n .ag-rich-select-value {\n height: var(--ag-row-height);\n border-bottom: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n padding-top: 0;\n padding-bottom: 0;\n }\n .ag-ltr .ag-rich-select-value {\n padding-left: var(--ag-cell-horizontal-padding);\n }\n .ag-rtl .ag-rich-select-value {\n padding-right: var(--ag-cell-horizontal-padding);\n }\n .ag-ltr .ag-rich-select-value {\n padding-right: var(--ag-grid-size);\n }\n .ag-rtl .ag-rich-select-value {\n padding-left: var(--ag-grid-size);\n }\n\n .ag-rich-select-virtual-list-item {\n cursor: default;\n height: var(--ag-list-item-height);\n }\n .ag-keyboard-focus .ag-rich-select-virtual-list-item:focus::after {\n content: none;\n }\n .ag-rich-select-virtual-list-item:hover {\n background-color: var(--ag-row-hover-color);\n }\n\n .ag-ltr .ag-rich-select-row {\n padding-left: var(--ag-cell-horizontal-padding);\n }\n .ag-rtl .ag-rich-select-row {\n padding-right: var(--ag-cell-horizontal-padding);\n }\n\n .ag-rich-select-row-selected {\n background-color: var(--ag-selected-row-background-color);\n }\n\n .ag-row-drag,\n .ag-selection-checkbox,\n .ag-group-expanded,\n .ag-group-contracted {\n color: var(--ag-secondary-foreground-color);\n }\n .ag-ltr .ag-row-drag,\n .ag-ltr .ag-selection-checkbox,\n .ag-ltr .ag-group-expanded,\n .ag-ltr .ag-group-contracted {\n margin-right: var(--ag-cell-widget-spacing);\n }\n .ag-rtl .ag-row-drag,\n .ag-rtl .ag-selection-checkbox,\n .ag-rtl .ag-group-expanded,\n .ag-rtl .ag-group-contracted {\n margin-left: var(--ag-cell-widget-spacing);\n }\n\n .ag-cell-wrapper > *:not(.ag-cell-value):not(.ag-group-value) {\n --ag-internal-calculated-line-height: var(\n --ag-line-height,\n calc(var(--ag-row-height) - var(--ag-row-border-width))\n );\n --ag-internal-padded-row-height: calc(var(--ag-row-height) - var(--ag-row-border-width));\n height: min(var(--ag-internal-calculated-line-height), var(--ag-internal-padded-row-height));\n display: flex;\n align-items: center;\n flex: none;\n }\n\n .ag-group-expanded,\n .ag-group-contracted {\n cursor: pointer;\n }\n\n .ag-group-title-bar-icon {\n cursor: pointer;\n flex: none;\n color: var(--ag-secondary-foreground-color);\n }\n\n .ag-ltr .ag-group-child-count {\n margin-left: 2px;\n }\n .ag-rtl .ag-group-child-count {\n margin-right: 2px;\n }\n\n .ag-group-title-bar {\n background-color: var(--ag-subheader-background-color);\n padding: var(--ag-grid-size);\n }\n\n .ag-group-toolbar {\n padding: var(--ag-grid-size);\n background-color: var(--ag-subheader-toolbar-background-color);\n }\n\n .ag-disabled-group-title-bar,\n .ag-disabled-group-container {\n opacity: 0.5;\n }\n\n .group-item {\n margin: calc(var(--ag-grid-size) * 0.5) 0;\n }\n\n .ag-label {\n white-space: nowrap;\n }\n .ag-ltr .ag-label {\n margin-right: var(--ag-grid-size);\n }\n .ag-rtl .ag-label {\n margin-left: var(--ag-grid-size);\n }\n\n .ag-label-align-top .ag-label {\n margin-bottom: calc(var(--ag-grid-size) * 0.5);\n }\n\n .ag-angle-select[disabled] {\n color: var(--ag-disabled-foreground-color);\n pointer-events: none;\n }\n .ag-angle-select[disabled] .ag-angle-select-field {\n opacity: 0.4;\n }\n\n .ag-ltr .ag-slider-field,\n .ag-ltr .ag-angle-select-field {\n margin-right: calc(var(--ag-grid-size) * 2);\n }\n .ag-rtl .ag-slider-field,\n .ag-rtl .ag-angle-select-field {\n margin-left: calc(var(--ag-grid-size) * 2);\n }\n\n .ag-angle-select-parent-circle {\n width: 24px;\n height: 24px;\n border-radius: 12px;\n border: solid 1px;\n border-color: var(--ag-border-color);\n background-color: var(--ag-background-color);\n }\n\n .ag-angle-select-child-circle {\n top: 4px;\n left: 12px;\n width: 6px;\n height: 6px;\n margin-left: -3px;\n margin-top: -4px;\n border-radius: 3px;\n background-color: var(--ag-secondary-foreground-color);\n }\n\n .ag-picker-field-wrapper {\n border: 1px solid;\n border-color: var(--ag-border-color);\n border-radius: 5px;\n }\n .ag-picker-field-wrapper:focus {\n box-shadow: var(--ag-input-focus-box-shadow);\n }\n\n .ag-picker-field-button {\n background-color: var(--ag-background-color);\n color: var(--ag-secondary-foreground-color);\n }\n\n .ag-dialog.ag-color-dialog {\n border-radius: 5px;\n }\n\n .ag-color-picker .ag-picker-field-display {\n height: var(--ag-icon-size);\n }\n\n .ag-color-panel {\n padding: var(--ag-grid-size);\n }\n\n .ag-spectrum-color {\n background-color: rgb(255, 0, 0);\n border-radius: 2px;\n }\n\n .ag-spectrum-tools {\n padding: 10px;\n }\n\n .ag-spectrum-sat {\n background-image: linear-gradient(to right, white, rgba(204, 154, 129, 0));\n }\n\n .ag-spectrum-val {\n background-image: linear-gradient(to top, black, rgba(204, 154, 129, 0));\n }\n\n .ag-spectrum-dragger {\n border-radius: 12px;\n height: 12px;\n width: 12px;\n border: 1px solid white;\n background: black;\n box-shadow: 0 0 2px 0px rgba(0, 0, 0, 0.24);\n }\n\n .ag-spectrum-hue-background {\n border-radius: 2px;\n }\n\n .ag-spectrum-alpha-background {\n border-radius: 2px;\n }\n\n .ag-spectrum-tool {\n margin-bottom: 10px;\n height: 11px;\n border-radius: 2px;\n }\n\n .ag-spectrum-slider {\n margin-top: -12px;\n width: 13px;\n height: 13px;\n border-radius: 13px;\n background-color: rgb(248, 248, 248);\n box-shadow: 0 1px 4px 0 rgba(0, 0, 0, 0.37);\n }\n\n .ag-recent-color {\n margin: 0 3px;\n }\n .ag-recent-color:first-child {\n margin-left: 0;\n }\n .ag-recent-color:last-child {\n margin-right: 0;\n }\n\n .ag-dnd-ghost {\n border: var(--ag-borders) var(--ag-border-color);\n background: var(--ag-background-color);\n border-radius: var(--ag-card-radius);\n box-shadow: var(--ag-card-shadow);\n padding: var(--ag-grid-size);\n overflow: hidden;\n text-overflow: ellipsis;\n border: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n color: var(--ag-secondary-foreground-color);\n height: var(--ag-header-height) !important;\n line-height: var(--ag-header-height);\n margin: 0;\n padding: 0 calc(var(--ag-grid-size) * 2);\n transform: translateY(calc(var(--ag-grid-size) * 2));\n }\n\n .ag-dnd-ghost-icon {\n margin-right: var(--ag-grid-size);\n color: var(--ag-foreground-color);\n }\n\n .ag-popup-child:not(.ag-tooltip-custom) {\n box-shadow: var(--ag-popup-shadow);\n }\n\n .ag-dragging-range-handle .ag-dialog,\n .ag-dragging-fill-handle .ag-dialog {\n opacity: 0.7;\n pointer-events: none;\n }\n\n .ag-dialog {\n border-radius: var(--ag-border-radius);\n border: var(--ag-borders) var(--ag-border-color);\n }\n\n .ag-panel {\n background-color: var(--ag-background-color);\n }\n\n .ag-panel-title-bar {\n background-color: var(--ag-header-background-color);\n color: var(--ag-header-foreground-color);\n height: var(--ag-header-height);\n padding: var(--ag-grid-size) var(--ag-cell-horizontal-padding);\n border-bottom: var(--ag-borders) var(--ag-border-color);\n }\n\n .ag-ltr .ag-panel-title-bar-button {\n margin-left: var(--ag-grid-size);\n }\n .ag-rtl .ag-panel-title-bar-button {\n margin-right: var(--ag-grid-size);\n }\n\n .ag-tooltip {\n background-color: var(--ag-tooltip-background-color);\n color: var(--ag-foreground-color);\n padding: var(--ag-grid-size);\n border: var(--ag-borders) var(--ag-border-color);\n border-radius: var(--ag-card-radius);\n transition: opacity 1s;\n white-space: normal;\n }\n .ag-tooltip.ag-tooltip-hiding {\n opacity: 0;\n }\n\n .ag-tooltip-custom {\n transition: opacity 1s;\n }\n .ag-tooltip-custom.ag-tooltip-hiding {\n opacity: 0;\n }\n\n .ag-ltr .ag-column-select-indent-1 {\n padding-left: calc(1 * var(--ag-column-select-indent-size));\n }\n .ag-rtl .ag-column-select-indent-1 {\n padding-right: calc(1 * var(--ag-column-select-indent-size));\n }\n\n .ag-ltr .ag-column-select-indent-2 {\n padding-left: calc(2 * var(--ag-column-select-indent-size));\n }\n .ag-rtl .ag-column-select-indent-2 {\n padding-right: calc(2 * var(--ag-column-select-indent-size));\n }\n\n .ag-ltr .ag-column-select-indent-3 {\n padding-left: calc(3 * var(--ag-column-select-indent-size));\n }\n .ag-rtl .ag-column-select-indent-3 {\n padding-right: calc(3 * var(--ag-column-select-indent-size));\n }\n\n .ag-ltr .ag-column-select-indent-4 {\n padding-left: calc(4 * var(--ag-column-select-indent-size));\n }\n .ag-rtl .ag-column-select-indent-4 {\n padding-right: calc(4 * var(--ag-column-select-indent-size));\n }\n\n .ag-ltr .ag-column-select-indent-5 {\n padding-left: calc(5 * var(--ag-column-select-indent-size));\n }\n .ag-rtl .ag-column-select-indent-5 {\n padding-right: calc(5 * var(--ag-column-select-indent-size));\n }\n\n .ag-ltr .ag-column-select-indent-6 {\n padding-left: calc(6 * var(--ag-column-select-indent-size));\n }\n .ag-rtl .ag-column-select-indent-6 {\n padding-right: calc(6 * var(--ag-column-select-indent-size));\n }\n\n .ag-ltr .ag-column-select-indent-7 {\n padding-left: calc(7 * var(--ag-column-select-indent-size));\n }\n .ag-rtl .ag-column-select-indent-7 {\n padding-right: calc(7 * var(--ag-column-select-indent-size));\n }\n\n .ag-ltr .ag-column-select-indent-8 {\n padding-left: calc(8 * var(--ag-column-select-indent-size));\n }\n .ag-rtl .ag-column-select-indent-8 {\n padding-right: calc(8 * var(--ag-column-select-indent-size));\n }\n\n .ag-ltr .ag-column-select-indent-9 {\n padding-left: calc(9 * var(--ag-column-select-indent-size));\n }\n .ag-rtl .ag-column-select-indent-9 {\n padding-right: calc(9 * var(--ag-column-select-indent-size));\n }\n\n .ag-column-select-header-icon {\n cursor: pointer;\n }\n\n .ag-keyboard-focus .ag-column-select-header-icon:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-column-select-header-icon:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 0px;\n left: 0px;\n display: block;\n width: calc(100% - 0px);\n height: calc(100% - 0px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-ltr .ag-column-group-icons:not(:last-child),\n .ag-ltr .ag-column-select-header-icon:not(:last-child),\n .ag-ltr .ag-column-select-header-checkbox:not(:last-child),\n .ag-ltr .ag-column-select-header-filter-wrapper:not(:last-child),\n .ag-ltr .ag-column-select-checkbox:not(:last-child),\n .ag-ltr .ag-column-select-column-drag-handle:not(:last-child),\n .ag-ltr .ag-column-select-column-group-drag-handle:not(:last-child),\n .ag-ltr .ag-column-select-column-label:not(:last-child) {\n margin-right: var(--ag-widget-horizontal-spacing);\n }\n .ag-rtl .ag-column-group-icons:not(:last-child),\n .ag-rtl .ag-column-select-header-icon:not(:last-child),\n .ag-rtl .ag-column-select-header-checkbox:not(:last-child),\n .ag-rtl .ag-column-select-header-filter-wrapper:not(:last-child),\n .ag-rtl .ag-column-select-checkbox:not(:last-child),\n .ag-rtl .ag-column-select-column-drag-handle:not(:last-child),\n .ag-rtl .ag-column-select-column-group-drag-handle:not(:last-child),\n .ag-rtl .ag-column-select-column-label:not(:last-child) {\n margin-left: var(--ag-widget-horizontal-spacing);\n }\n\n .ag-keyboard-focus .ag-column-select-virtual-list-item:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-column-select-virtual-list-item:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 1px;\n left: 1px;\n display: block;\n width: calc(100% - 2px);\n height: calc(100% - 2px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-column-select-column-group:not(:last-child),\n .ag-column-select-column:not(:last-child) {\n margin-bottom: var(--ag-widget-vertical-spacing);\n }\n\n .ag-column-select-column-readonly,\n .ag-column-select-column-group-readonly {\n color: var(--ag-disabled-foreground-color);\n pointer-events: none;\n }\n\n .ag-ltr .ag-column-select-add-group-indent {\n margin-left: calc(var(--ag-icon-size) + var(--ag-grid-size) * 2);\n }\n .ag-rtl .ag-column-select-add-group-indent {\n margin-right: calc(var(--ag-icon-size) + var(--ag-grid-size) * 2);\n }\n\n .ag-column-select-virtual-list-viewport {\n padding: calc(var(--ag-widget-container-vertical-padding) * 0.5) 0px;\n }\n\n .ag-column-select-virtual-list-item {\n padding: 0 var(--ag-widget-container-horizontal-padding);\n }\n\n .ag-rtl {\n text-align: right;\n }\n\n .ag-root-wrapper {\n border: var(--ag-borders) var(--ag-border-color);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-1 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 1);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-1 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 1);\n }\n\n .ag-ltr .ag-row-group-indent-1 {\n padding-left: calc(1 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-1 {\n padding-right: calc(1 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-1 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-1 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-2 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 2);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-2 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 2);\n }\n\n .ag-ltr .ag-row-group-indent-2 {\n padding-left: calc(2 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-2 {\n padding-right: calc(2 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-2 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-2 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-3 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 3);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-3 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 3);\n }\n\n .ag-ltr .ag-row-group-indent-3 {\n padding-left: calc(3 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-3 {\n padding-right: calc(3 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-3 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-3 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-4 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 4);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-4 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 4);\n }\n\n .ag-ltr .ag-row-group-indent-4 {\n padding-left: calc(4 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-4 {\n padding-right: calc(4 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-4 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-4 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-5 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 5);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-5 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 5);\n }\n\n .ag-ltr .ag-row-group-indent-5 {\n padding-left: calc(5 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-5 {\n padding-right: calc(5 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-5 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-5 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-6 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 6);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-6 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 6);\n }\n\n .ag-ltr .ag-row-group-indent-6 {\n padding-left: calc(6 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-6 {\n padding-right: calc(6 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-6 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-6 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-7 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 7);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-7 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 7);\n }\n\n .ag-ltr .ag-row-group-indent-7 {\n padding-left: calc(7 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-7 {\n padding-right: calc(7 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-7 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-7 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-8 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 8);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-8 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 8);\n }\n\n .ag-ltr .ag-row-group-indent-8 {\n padding-left: calc(8 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-8 {\n padding-right: calc(8 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-8 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-8 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-9 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 9);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-9 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 9);\n }\n\n .ag-ltr .ag-row-group-indent-9 {\n padding-left: calc(9 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-9 {\n padding-right: calc(9 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-9 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-9 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-10 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 10);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-10 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 10);\n }\n\n .ag-ltr .ag-row-group-indent-10 {\n padding-left: calc(10 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-10 {\n padding-right: calc(10 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-10 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-10 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-11 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 11);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-11 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 11);\n }\n\n .ag-ltr .ag-row-group-indent-11 {\n padding-left: calc(11 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-11 {\n padding-right: calc(11 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-11 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-11 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-12 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 12);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-12 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 12);\n }\n\n .ag-ltr .ag-row-group-indent-12 {\n padding-left: calc(12 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-12 {\n padding-right: calc(12 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-12 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-12 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-13 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 13);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-13 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 13);\n }\n\n .ag-ltr .ag-row-group-indent-13 {\n padding-left: calc(13 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-13 {\n padding-right: calc(13 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-13 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-13 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-14 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 14);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-14 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 14);\n }\n\n .ag-ltr .ag-row-group-indent-14 {\n padding-left: calc(14 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-14 {\n padding-right: calc(14 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-14 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-14 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-15 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 15);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-15 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 15);\n }\n\n .ag-ltr .ag-row-group-indent-15 {\n padding-left: calc(15 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-15 {\n padding-right: calc(15 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-15 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-15 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-16 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 16);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-16 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 16);\n }\n\n .ag-ltr .ag-row-group-indent-16 {\n padding-left: calc(16 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-16 {\n padding-right: calc(16 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-16 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-16 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-17 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 17);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-17 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 17);\n }\n\n .ag-ltr .ag-row-group-indent-17 {\n padding-left: calc(17 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-17 {\n padding-right: calc(17 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-17 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-17 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-18 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 18);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-18 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 18);\n }\n\n .ag-ltr .ag-row-group-indent-18 {\n padding-left: calc(18 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-18 {\n padding-right: calc(18 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-18 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-18 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-19 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 19);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-19 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 19);\n }\n\n .ag-ltr .ag-row-group-indent-19 {\n padding-left: calc(19 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-19 {\n padding-right: calc(19 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-19 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-19 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-20 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 20);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-20 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 20);\n }\n\n .ag-ltr .ag-row-group-indent-20 {\n padding-left: calc(20 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-20 {\n padding-right: calc(20 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-20 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-20 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-21 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 21);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-21 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 21);\n }\n\n .ag-ltr .ag-row-group-indent-21 {\n padding-left: calc(21 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-21 {\n padding-right: calc(21 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-21 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-21 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-22 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 22);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-22 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 22);\n }\n\n .ag-ltr .ag-row-group-indent-22 {\n padding-left: calc(22 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-22 {\n padding-right: calc(22 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-22 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-22 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-23 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 23);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-23 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 23);\n }\n\n .ag-ltr .ag-row-group-indent-23 {\n padding-left: calc(23 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-23 {\n padding-right: calc(23 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-23 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-23 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-24 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 24);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-24 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 24);\n }\n\n .ag-ltr .ag-row-group-indent-24 {\n padding-left: calc(24 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-24 {\n padding-right: calc(24 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-24 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-24 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-25 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 25);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-25 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 25);\n }\n\n .ag-ltr .ag-row-group-indent-25 {\n padding-left: calc(25 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-25 {\n padding-right: calc(25 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-25 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-25 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-26 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 26);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-26 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 26);\n }\n\n .ag-ltr .ag-row-group-indent-26 {\n padding-left: calc(26 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-26 {\n padding-right: calc(26 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-26 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-26 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-27 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 27);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-27 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 27);\n }\n\n .ag-ltr .ag-row-group-indent-27 {\n padding-left: calc(27 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-27 {\n padding-right: calc(27 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-27 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-27 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-28 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 28);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-28 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 28);\n }\n\n .ag-ltr .ag-row-group-indent-28 {\n padding-left: calc(28 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-28 {\n padding-right: calc(28 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-28 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-28 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-29 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 29);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-29 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 29);\n }\n\n .ag-ltr .ag-row-group-indent-29 {\n padding-left: calc(29 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-29 {\n padding-right: calc(29 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-29 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-29 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-30 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 30);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-30 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 30);\n }\n\n .ag-ltr .ag-row-group-indent-30 {\n padding-left: calc(30 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-30 {\n padding-right: calc(30 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-30 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-30 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-31 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 31);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-31 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 31);\n }\n\n .ag-ltr .ag-row-group-indent-31 {\n padding-left: calc(31 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-31 {\n padding-right: calc(31 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-31 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-31 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-32 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 32);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-32 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 32);\n }\n\n .ag-ltr .ag-row-group-indent-32 {\n padding-left: calc(32 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-32 {\n padding-right: calc(32 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-32 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-32 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-33 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 33);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-33 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 33);\n }\n\n .ag-ltr .ag-row-group-indent-33 {\n padding-left: calc(33 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-33 {\n padding-right: calc(33 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-33 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-33 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-34 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 34);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-34 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 34);\n }\n\n .ag-ltr .ag-row-group-indent-34 {\n padding-left: calc(34 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-34 {\n padding-right: calc(34 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-34 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-34 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-35 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 35);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-35 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 35);\n }\n\n .ag-ltr .ag-row-group-indent-35 {\n padding-left: calc(35 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-35 {\n padding-right: calc(35 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-35 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-35 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-36 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 36);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-36 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 36);\n }\n\n .ag-ltr .ag-row-group-indent-36 {\n padding-left: calc(36 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-36 {\n padding-right: calc(36 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-36 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-36 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-37 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 37);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-37 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 37);\n }\n\n .ag-ltr .ag-row-group-indent-37 {\n padding-left: calc(37 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-37 {\n padding-right: calc(37 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-37 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-37 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-38 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 38);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-38 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 38);\n }\n\n .ag-ltr .ag-row-group-indent-38 {\n padding-left: calc(38 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-38 {\n padding-right: calc(38 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-38 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-38 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-39 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 39);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-39 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 39);\n }\n\n .ag-ltr .ag-row-group-indent-39 {\n padding-left: calc(39 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-39 {\n padding-right: calc(39 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-39 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-39 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-40 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 40);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-40 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 40);\n }\n\n .ag-ltr .ag-row-group-indent-40 {\n padding-left: calc(40 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-40 {\n padding-right: calc(40 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-40 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-40 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-41 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 41);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-41 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 41);\n }\n\n .ag-ltr .ag-row-group-indent-41 {\n padding-left: calc(41 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-41 {\n padding-right: calc(41 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-41 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-41 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-42 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 42);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-42 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 42);\n }\n\n .ag-ltr .ag-row-group-indent-42 {\n padding-left: calc(42 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-42 {\n padding-right: calc(42 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-42 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-42 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-43 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 43);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-43 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 43);\n }\n\n .ag-ltr .ag-row-group-indent-43 {\n padding-left: calc(43 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-43 {\n padding-right: calc(43 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-43 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-43 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-44 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 44);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-44 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 44);\n }\n\n .ag-ltr .ag-row-group-indent-44 {\n padding-left: calc(44 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-44 {\n padding-right: calc(44 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-44 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-44 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-45 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 45);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-45 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 45);\n }\n\n .ag-ltr .ag-row-group-indent-45 {\n padding-left: calc(45 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-45 {\n padding-right: calc(45 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-45 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-45 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-46 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 46);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-46 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 46);\n }\n\n .ag-ltr .ag-row-group-indent-46 {\n padding-left: calc(46 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-46 {\n padding-right: calc(46 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-46 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-46 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-47 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 47);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-47 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 47);\n }\n\n .ag-ltr .ag-row-group-indent-47 {\n padding-left: calc(47 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-47 {\n padding-right: calc(47 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-47 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-47 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-48 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 48);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-48 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 48);\n }\n\n .ag-ltr .ag-row-group-indent-48 {\n padding-left: calc(48 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-48 {\n padding-right: calc(48 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-48 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-48 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-49 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 49);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-49 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 49);\n }\n\n .ag-ltr .ag-row-group-indent-49 {\n padding-left: calc(49 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-49 {\n padding-right: calc(49 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-49 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-49 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-50 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 50);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-50 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 50);\n }\n\n .ag-ltr .ag-row-group-indent-50 {\n padding-left: calc(50 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-50 {\n padding-right: calc(50 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-50 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-50 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-51 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 51);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-51 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 51);\n }\n\n .ag-ltr .ag-row-group-indent-51 {\n padding-left: calc(51 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-51 {\n padding-right: calc(51 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-51 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-51 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-52 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 52);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-52 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 52);\n }\n\n .ag-ltr .ag-row-group-indent-52 {\n padding-left: calc(52 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-52 {\n padding-right: calc(52 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-52 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-52 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-53 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 53);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-53 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 53);\n }\n\n .ag-ltr .ag-row-group-indent-53 {\n padding-left: calc(53 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-53 {\n padding-right: calc(53 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-53 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-53 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-54 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 54);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-54 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 54);\n }\n\n .ag-ltr .ag-row-group-indent-54 {\n padding-left: calc(54 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-54 {\n padding-right: calc(54 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-54 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-54 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-55 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 55);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-55 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 55);\n }\n\n .ag-ltr .ag-row-group-indent-55 {\n padding-left: calc(55 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-55 {\n padding-right: calc(55 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-55 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-55 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-56 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 56);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-56 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 56);\n }\n\n .ag-ltr .ag-row-group-indent-56 {\n padding-left: calc(56 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-56 {\n padding-right: calc(56 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-56 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-56 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-57 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 57);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-57 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 57);\n }\n\n .ag-ltr .ag-row-group-indent-57 {\n padding-left: calc(57 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-57 {\n padding-right: calc(57 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-57 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-57 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-58 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 58);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-58 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 58);\n }\n\n .ag-ltr .ag-row-group-indent-58 {\n padding-left: calc(58 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-58 {\n padding-right: calc(58 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-58 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-58 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-59 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 59);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-59 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 59);\n }\n\n .ag-ltr .ag-row-group-indent-59 {\n padding-left: calc(59 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-59 {\n padding-right: calc(59 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-59 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-59 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-60 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 60);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-60 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 60);\n }\n\n .ag-ltr .ag-row-group-indent-60 {\n padding-left: calc(60 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-60 {\n padding-right: calc(60 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-60 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-60 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-61 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 61);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-61 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 61);\n }\n\n .ag-ltr .ag-row-group-indent-61 {\n padding-left: calc(61 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-61 {\n padding-right: calc(61 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-61 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-61 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-62 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 62);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-62 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 62);\n }\n\n .ag-ltr .ag-row-group-indent-62 {\n padding-left: calc(62 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-62 {\n padding-right: calc(62 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-62 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-62 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-63 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 63);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-63 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 63);\n }\n\n .ag-ltr .ag-row-group-indent-63 {\n padding-left: calc(63 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-63 {\n padding-right: calc(63 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-63 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-63 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-64 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 64);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-64 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 64);\n }\n\n .ag-ltr .ag-row-group-indent-64 {\n padding-left: calc(64 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-64 {\n padding-right: calc(64 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-64 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-64 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-65 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 65);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-65 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 65);\n }\n\n .ag-ltr .ag-row-group-indent-65 {\n padding-left: calc(65 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-65 {\n padding-right: calc(65 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-65 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-65 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-66 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 66);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-66 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 66);\n }\n\n .ag-ltr .ag-row-group-indent-66 {\n padding-left: calc(66 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-66 {\n padding-right: calc(66 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-66 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-66 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-67 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 67);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-67 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 67);\n }\n\n .ag-ltr .ag-row-group-indent-67 {\n padding-left: calc(67 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-67 {\n padding-right: calc(67 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-67 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-67 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-68 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 68);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-68 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 68);\n }\n\n .ag-ltr .ag-row-group-indent-68 {\n padding-left: calc(68 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-68 {\n padding-right: calc(68 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-68 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-68 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-69 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 69);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-69 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 69);\n }\n\n .ag-ltr .ag-row-group-indent-69 {\n padding-left: calc(69 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-69 {\n padding-right: calc(69 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-69 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-69 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-70 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 70);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-70 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 70);\n }\n\n .ag-ltr .ag-row-group-indent-70 {\n padding-left: calc(70 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-70 {\n padding-right: calc(70 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-70 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-70 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-71 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 71);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-71 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 71);\n }\n\n .ag-ltr .ag-row-group-indent-71 {\n padding-left: calc(71 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-71 {\n padding-right: calc(71 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-71 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-71 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-72 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 72);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-72 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 72);\n }\n\n .ag-ltr .ag-row-group-indent-72 {\n padding-left: calc(72 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-72 {\n padding-right: calc(72 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-72 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-72 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-73 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 73);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-73 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 73);\n }\n\n .ag-ltr .ag-row-group-indent-73 {\n padding-left: calc(73 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-73 {\n padding-right: calc(73 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-73 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-73 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-74 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 74);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-74 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 74);\n }\n\n .ag-ltr .ag-row-group-indent-74 {\n padding-left: calc(74 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-74 {\n padding-right: calc(74 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-74 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-74 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-75 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 75);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-75 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 75);\n }\n\n .ag-ltr .ag-row-group-indent-75 {\n padding-left: calc(75 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-75 {\n padding-right: calc(75 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-75 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-75 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-76 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 76);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-76 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 76);\n }\n\n .ag-ltr .ag-row-group-indent-76 {\n padding-left: calc(76 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-76 {\n padding-right: calc(76 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-76 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-76 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-77 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 77);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-77 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 77);\n }\n\n .ag-ltr .ag-row-group-indent-77 {\n padding-left: calc(77 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-77 {\n padding-right: calc(77 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-77 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-77 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-78 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 78);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-78 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 78);\n }\n\n .ag-ltr .ag-row-group-indent-78 {\n padding-left: calc(78 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-78 {\n padding-right: calc(78 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-78 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-78 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-79 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 79);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-79 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 79);\n }\n\n .ag-ltr .ag-row-group-indent-79 {\n padding-left: calc(79 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-79 {\n padding-right: calc(79 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-79 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-79 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-80 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 80);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-80 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 80);\n }\n\n .ag-ltr .ag-row-group-indent-80 {\n padding-left: calc(80 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-80 {\n padding-right: calc(80 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-80 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-80 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-81 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 81);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-81 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 81);\n }\n\n .ag-ltr .ag-row-group-indent-81 {\n padding-left: calc(81 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-81 {\n padding-right: calc(81 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-81 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-81 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-82 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 82);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-82 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 82);\n }\n\n .ag-ltr .ag-row-group-indent-82 {\n padding-left: calc(82 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-82 {\n padding-right: calc(82 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-82 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-82 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-83 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 83);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-83 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 83);\n }\n\n .ag-ltr .ag-row-group-indent-83 {\n padding-left: calc(83 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-83 {\n padding-right: calc(83 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-83 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-83 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-84 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 84);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-84 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 84);\n }\n\n .ag-ltr .ag-row-group-indent-84 {\n padding-left: calc(84 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-84 {\n padding-right: calc(84 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-84 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-84 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-85 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 85);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-85 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 85);\n }\n\n .ag-ltr .ag-row-group-indent-85 {\n padding-left: calc(85 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-85 {\n padding-right: calc(85 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-85 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-85 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-86 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 86);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-86 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 86);\n }\n\n .ag-ltr .ag-row-group-indent-86 {\n padding-left: calc(86 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-86 {\n padding-right: calc(86 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-86 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-86 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-87 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 87);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-87 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 87);\n }\n\n .ag-ltr .ag-row-group-indent-87 {\n padding-left: calc(87 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-87 {\n padding-right: calc(87 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-87 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-87 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-88 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 88);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-88 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 88);\n }\n\n .ag-ltr .ag-row-group-indent-88 {\n padding-left: calc(88 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-88 {\n padding-right: calc(88 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-88 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-88 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-89 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 89);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-89 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 89);\n }\n\n .ag-ltr .ag-row-group-indent-89 {\n padding-left: calc(89 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-89 {\n padding-right: calc(89 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-89 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-89 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-90 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 90);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-90 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 90);\n }\n\n .ag-ltr .ag-row-group-indent-90 {\n padding-left: calc(90 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-90 {\n padding-right: calc(90 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-90 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-90 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-91 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 91);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-91 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 91);\n }\n\n .ag-ltr .ag-row-group-indent-91 {\n padding-left: calc(91 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-91 {\n padding-right: calc(91 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-91 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-91 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-92 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 92);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-92 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 92);\n }\n\n .ag-ltr .ag-row-group-indent-92 {\n padding-left: calc(92 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-92 {\n padding-right: calc(92 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-92 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-92 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-93 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 93);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-93 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 93);\n }\n\n .ag-ltr .ag-row-group-indent-93 {\n padding-left: calc(93 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-93 {\n padding-right: calc(93 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-93 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-93 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-94 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 94);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-94 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 94);\n }\n\n .ag-ltr .ag-row-group-indent-94 {\n padding-left: calc(94 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-94 {\n padding-right: calc(94 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-94 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-94 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-95 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 95);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-95 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 95);\n }\n\n .ag-ltr .ag-row-group-indent-95 {\n padding-left: calc(95 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-95 {\n padding-right: calc(95 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-95 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-95 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-96 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 96);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-96 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 96);\n }\n\n .ag-ltr .ag-row-group-indent-96 {\n padding-left: calc(96 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-96 {\n padding-right: calc(96 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-96 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-96 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-97 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 97);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-97 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 97);\n }\n\n .ag-ltr .ag-row-group-indent-97 {\n padding-left: calc(97 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-97 {\n padding-right: calc(97 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-97 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-97 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-98 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 98);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-98 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 98);\n }\n\n .ag-ltr .ag-row-group-indent-98 {\n padding-left: calc(98 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-98 {\n padding-right: calc(98 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-98 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-98 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row > .ag-cell-wrapper.ag-row-group-indent-99 {\n padding-left: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 99);\n }\n .ag-rtl .ag-row > .ag-cell-wrapper.ag-row-group-indent-99 {\n padding-right: calc(var(--ag-cell-horizontal-padding) + var(--ag-row-group-indent-size) * 99);\n }\n\n .ag-ltr .ag-row-group-indent-99 {\n padding-left: calc(99 * var(--ag-row-group-indent-size));\n }\n .ag-rtl .ag-row-group-indent-99 {\n padding-right: calc(99 * var(--ag-row-group-indent-size));\n }\n\n .ag-ltr .ag-row-level-99 .ag-pivot-leaf-group {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-level-99 .ag-pivot-leaf-group {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-ltr .ag-row-group-leaf-indent {\n margin-left: var(--ag-row-group-indent-size);\n }\n .ag-rtl .ag-row-group-leaf-indent {\n margin-right: var(--ag-row-group-indent-size);\n }\n\n .ag-value-change-delta {\n padding-right: 2px;\n }\n\n .ag-value-change-delta-up {\n color: var(--ag-value-change-delta-up-color);\n }\n\n .ag-value-change-delta-down {\n color: var(--ag-value-change-delta-down-color);\n }\n\n .ag-value-change-value {\n background-color: transparent;\n border-radius: 1px;\n padding-left: 1px;\n padding-right: 1px;\n transition: background-color 1s;\n }\n\n .ag-value-change-value-highlight {\n background-color: var(--ag-value-change-value-highlight-background-color);\n transition: background-color 0.1s;\n }\n\n .ag-cell-data-changed {\n background-color: var(--ag-value-change-value-highlight-background-color) !important;\n }\n\n .ag-cell-data-changed-animation {\n background-color: transparent;\n }\n\n .ag-cell-highlight {\n background-color: var(--ag-range-selection-highlight-color) !important;\n }\n\n .ag-row {\n height: var(--ag-row-height);\n background-color: var(--ag-background-color);\n color: var(--ag-data-color);\n border-bottom: var(--ag-row-border-style) var(--ag-row-border-color) var(--ag-row-border-width);\n }\n\n .ag-row-highlight-above::after,\n .ag-row-highlight-below::after {\n content: '';\n position: absolute;\n width: calc(100% - 1px);\n height: 1px;\n background-color: var(--ag-range-selection-border-color);\n left: 1px;\n }\n\n .ag-row-highlight-above::after {\n top: -1px;\n }\n\n .ag-row-highlight-above.ag-row-first::after {\n top: 0;\n }\n\n .ag-row-highlight-below::after {\n bottom: 0px;\n }\n\n .ag-row-odd {\n background-color: var(--ag-odd-row-background-color);\n }\n\n .ag-body-horizontal-scroll:not(.ag-scrollbar-invisible)\n .ag-horizontal-left-spacer:not(.ag-scroller-corner) {\n border-right: var(--ag-borders-critical) var(--ag-border-color);\n }\n .ag-body-horizontal-scroll:not(.ag-scrollbar-invisible)\n .ag-horizontal-right-spacer:not(.ag-scroller-corner) {\n border-left: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-row-selected::before {\n content: '';\n background-color: var(--ag-selected-row-background-color);\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n }\n\n .ag-row-hover:not(.ag-full-width-row)::before,\n .ag-row-hover.ag-full-width-row.ag-row-group::before {\n content: '';\n background-color: var(--ag-row-hover-color);\n display: block;\n position: absolute;\n top: 0;\n left: 0;\n right: 0;\n bottom: 0;\n pointer-events: none;\n }\n\n .ag-row-hover.ag-full-width-row.ag-row-group > * {\n position: relative;\n }\n\n .ag-row-hover.ag-row-selected::before {\n background-color: var(--ag-row-hover-color);\n background-image: linear-gradient(\n var(--ag-selected-row-background-color),\n var(--ag-selected-row-background-color)\n );\n }\n\n .ag-column-hover {\n background-color: var(--ag-column-hover-color);\n }\n\n .ag-ltr .ag-right-aligned-cell {\n text-align: right;\n }\n .ag-rtl .ag-right-aligned-cell {\n text-align: left;\n }\n\n .ag-ltr .ag-right-aligned-cell .ag-cell-value,\n .ag-ltr .ag-right-aligned-cell .ag-group-value {\n margin-left: auto;\n }\n .ag-rtl .ag-right-aligned-cell .ag-cell-value,\n .ag-rtl .ag-right-aligned-cell .ag-group-value {\n margin-right: auto;\n }\n\n .ag-cell,\n .ag-full-width-row .ag-cell-wrapper.ag-row-group {\n --ag-internal-calculated-line-height: var(\n --ag-line-height,\n calc(var(--ag-row-height) - var(--ag-row-border-width))\n );\n --ag-internal-padded-row-height: calc(var(--ag-row-height) - var(--ag-row-border-width));\n border: 1px solid transparent;\n line-height: min(\n var(--ag-internal-calculated-line-height),\n var(--ag-internal-padded-row-height)\n );\n padding-left: calc(var(--ag-cell-horizontal-padding) - 1px);\n padding-right: calc(var(--ag-cell-horizontal-padding) - 1px);\n -webkit-font-smoothing: subpixel-antialiased;\n }\n\n .ag-row > .ag-cell-wrapper {\n padding-left: calc(var(--ag-cell-horizontal-padding) - 1px);\n padding-right: calc(var(--ag-cell-horizontal-padding) - 1px);\n }\n\n .ag-row-dragging {\n cursor: move;\n opacity: 0.5;\n }\n\n .ag-cell-inline-editing {\n border: var(--ag-borders) var(--ag-border-color);\n background: var(--ag-background-color);\n border-radius: var(--ag-card-radius);\n box-shadow: var(--ag-card-shadow);\n padding: var(--ag-grid-size);\n padding: 0;\n height: var(--ag-row-height);\n background-color: var(--ag-control-panel-background-color);\n }\n\n .ag-popup-editor {\n border: var(--ag-borders) var(--ag-border-color);\n background: var(--ag-background-color);\n border-radius: var(--ag-card-radius);\n box-shadow: var(--ag-card-shadow);\n padding: var(--ag-grid-size);\n background-color: var(--ag-control-panel-background-color);\n padding: 0;\n }\n\n .ag-large-text-input {\n height: auto;\n padding: var(--ag-cell-horizontal-padding);\n }\n\n .ag-rtl .ag-large-text-input textarea {\n resize: none;\n }\n\n .ag-details-row {\n padding: calc(var(--ag-grid-size) * 5);\n background-color: var(--ag-background-color);\n }\n\n .ag-layout-auto-height .ag-center-cols-clipper,\n .ag-layout-auto-height .ag-center-cols-container,\n .ag-layout-print .ag-center-cols-clipper,\n .ag-layout-print .ag-center-cols-container {\n min-height: 50px;\n }\n\n .ag-overlay-loading-wrapper {\n background-color: var(--ag-modal-overlay-background-color);\n }\n\n .ag-overlay-loading-center {\n border: var(--ag-borders) var(--ag-border-color);\n background: var(--ag-background-color);\n border-radius: var(--ag-card-radius);\n box-shadow: var(--ag-card-shadow);\n padding: var(--ag-grid-size);\n }\n\n .ag-overlay-no-rows-wrapper.ag-layout-auto-height {\n padding-top: 30px;\n }\n\n .ag-loading {\n display: flex;\n height: 100%;\n align-items: center;\n }\n .ag-ltr .ag-loading {\n padding-left: var(--ag-cell-horizontal-padding);\n }\n .ag-rtl .ag-loading {\n padding-right: var(--ag-cell-horizontal-padding);\n }\n\n .ag-ltr .ag-loading-icon {\n padding-right: var(--ag-cell-widget-spacing);\n }\n .ag-rtl .ag-loading-icon {\n padding-left: var(--ag-cell-widget-spacing);\n }\n\n .ag-icon-loading {\n animation-name: spin;\n animation-duration: 1000ms;\n animation-iteration-count: infinite;\n animation-timing-function: linear;\n }\n\n @keyframes spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n }\n .ag-floating-top {\n border-bottom: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-floating-bottom {\n border-top: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-ltr .ag-cell {\n border-right: var(--ag-cell-horizontal-border);\n }\n .ag-rtl .ag-cell {\n border-left: var(--ag-cell-horizontal-border);\n }\n .ag-ltr .ag-cell {\n border-right-width: 1px;\n }\n .ag-rtl .ag-cell {\n border-left-width: 1px;\n }\n\n .ag-cell.ag-cell-first-right-pinned:not(.ag-cell-range-left):not(.ag-cell-range-single-cell) {\n border-left: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-cell.ag-cell-last-left-pinned:not(.ag-cell-range-right):not(.ag-cell-range-single-cell) {\n border-right: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-cell-range-selected:not(.ag-cell-focus),\n .ag-body-viewport:not(.ag-has-focus) .ag-cell-range-single-cell:not(.ag-cell-inline-editing) {\n background-color: var(--ag-range-selection-background-color);\n }\n .ag-cell-range-selected:not(.ag-cell-focus).ag-cell-range-chart,\n .ag-body-viewport:not(.ag-has-focus)\n .ag-cell-range-single-cell:not(.ag-cell-inline-editing).ag-cell-range-chart {\n background-color: var(--ag-range-selection-chart-background-color) !important;\n }\n .ag-cell-range-selected:not(.ag-cell-focus).ag-cell-range-chart.ag-cell-range-chart-category,\n .ag-body-viewport:not(.ag-has-focus)\n .ag-cell-range-single-cell:not(\n .ag-cell-inline-editing\n ).ag-cell-range-chart.ag-cell-range-chart-category {\n background-color: var(--ag-range-selection-chart-category-background-color) !important;\n }\n\n .ag-cell-range-selected-1:not(.ag-cell-focus),\n .ag-root:not(.ag-context-menu-open)\n .ag-body-viewport:not(.ag-has-focus)\n .ag-cell-range-selected-1:not(.ag-cell-inline-editing) {\n background-color: var(--ag-range-selection-background-color);\n }\n\n .ag-cell-range-selected-2:not(.ag-cell-focus),\n .ag-body-viewport:not(.ag-has-focus) .ag-cell-range-selected-2 {\n background-color: var(--ag-range-selection-background-color-2);\n }\n\n .ag-cell-range-selected-3:not(.ag-cell-focus),\n .ag-body-viewport:not(.ag-has-focus) .ag-cell-range-selected-3 {\n background-color: var(--ag-range-selection-background-color-3);\n }\n\n .ag-cell-range-selected-4:not(.ag-cell-focus),\n .ag-body-viewport:not(.ag-has-focus) .ag-cell-range-selected-4 {\n background-color: var(--ag-range-selection-background-color-4);\n }\n\n .ag-cell.ag-cell-range-selected:not(.ag-cell-range-single-cell).ag-cell-range-top {\n border-top-color: var(--ag-range-selection-border-color);\n border-top-style: var(--ag-range-selection-border-style);\n }\n .ag-cell.ag-cell-range-selected:not(.ag-cell-range-single-cell).ag-cell-range-right {\n border-right-color: var(--ag-range-selection-border-color);\n border-right-style: var(--ag-range-selection-border-style);\n }\n .ag-cell.ag-cell-range-selected:not(.ag-cell-range-single-cell).ag-cell-range-bottom {\n border-bottom-color: var(--ag-range-selection-border-color);\n border-bottom-style: var(--ag-range-selection-border-style);\n }\n .ag-cell.ag-cell-range-selected:not(.ag-cell-range-single-cell).ag-cell-range-left {\n border-left-color: var(--ag-range-selection-border-color);\n border-left-style: var(--ag-range-selection-border-style);\n }\n\n .ag-ltr .ag-cell-focus:not(.ag-cell-range-selected):focus-within,\n .ag-ltr .ag-context-menu-open .ag-cell-focus:not(.ag-cell-range-selected),\n .ag-ltr .ag-full-width-row.ag-row-focus:focus .ag-cell-wrapper.ag-row-group,\n .ag-ltr .ag-cell-range-single-cell,\n .ag-ltr .ag-cell-range-single-cell.ag-cell-range-handle,\n .ag-rtl .ag-cell-focus:not(.ag-cell-range-selected):focus-within,\n .ag-rtl .ag-context-menu-open .ag-cell-focus:not(.ag-cell-range-selected),\n .ag-rtl .ag-full-width-row.ag-row-focus:focus .ag-cell-wrapper.ag-row-group,\n .ag-rtl .ag-cell-range-single-cell,\n .ag-rtl .ag-cell-range-single-cell.ag-cell-range-handle {\n border: 1px solid;\n border-color: var(--ag-range-selection-border-color);\n border-style: var(--ag-range-selection-border-style);\n outline: initial;\n }\n\n .ag-cell.ag-selection-fill-top,\n .ag-cell.ag-selection-fill-top.ag-cell-range-selected {\n border-top: 1px dashed;\n border-top-color: var(--ag-range-selection-border-color);\n }\n\n .ag-ltr .ag-cell.ag-selection-fill-right,\n .ag-ltr .ag-cell.ag-selection-fill-right.ag-cell-range-selected {\n border-right: 1px dashed var(--ag-range-selection-border-color) !important;\n }\n .ag-rtl .ag-cell.ag-selection-fill-right,\n .ag-rtl .ag-cell.ag-selection-fill-right.ag-cell-range-selected {\n border-left: 1px dashed var(--ag-range-selection-border-color) !important;\n }\n\n .ag-cell.ag-selection-fill-bottom,\n .ag-cell.ag-selection-fill-bottom.ag-cell-range-selected {\n border-bottom: 1px dashed;\n border-bottom-color: var(--ag-range-selection-border-color);\n }\n\n .ag-ltr .ag-cell.ag-selection-fill-left,\n .ag-ltr .ag-cell.ag-selection-fill-left.ag-cell-range-selected {\n border-left: 1px dashed var(--ag-range-selection-border-color) !important;\n }\n .ag-rtl .ag-cell.ag-selection-fill-left,\n .ag-rtl .ag-cell.ag-selection-fill-left.ag-cell-range-selected {\n border-right: 1px dashed var(--ag-range-selection-border-color) !important;\n }\n\n .ag-fill-handle,\n .ag-range-handle {\n position: absolute;\n width: 6px;\n height: 6px;\n bottom: -1px;\n background-color: var(--ag-range-selection-border-color);\n }\n .ag-ltr .ag-fill-handle,\n .ag-ltr .ag-range-handle {\n right: -1px;\n }\n .ag-rtl .ag-fill-handle,\n .ag-rtl .ag-range-handle {\n left: -1px;\n }\n\n .ag-fill-handle {\n cursor: cell;\n }\n\n .ag-range-handle {\n cursor: nwse-resize;\n }\n\n .ag-cell-inline-editing {\n border-color: var(--ag-input-focus-border-color) !important;\n }\n\n .ag-menu {\n border: var(--ag-borders) var(--ag-border-color);\n background: var(--ag-background-color);\n border-radius: var(--ag-card-radius);\n box-shadow: var(--ag-card-shadow);\n padding: var(--ag-grid-size);\n padding: 0;\n }\n\n .ag-menu-list {\n cursor: default;\n padding: var(--ag-grid-size) 0;\n }\n\n .ag-menu-separator {\n height: calc(var(--ag-grid-size) * 2 + 1px);\n }\n\n .ag-menu-separator-part::after {\n content: '';\n display: block;\n border-top: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-menu-option-active,\n .ag-compact-menu-option-active {\n background-color: var(--ag-row-hover-color);\n }\n\n .ag-menu-option-part,\n .ag-compact-menu-option-part {\n line-height: var(--ag-icon-size);\n padding: calc(var(--ag-grid-size) + 2px) 0;\n }\n\n .ag-menu-option-disabled,\n .ag-compact-menu-option-disabled {\n opacity: 0.5;\n }\n\n .ag-menu-option-icon,\n .ag-compact-menu-option-icon {\n width: var(--ag-icon-size);\n }\n .ag-ltr .ag-menu-option-icon,\n .ag-ltr .ag-compact-menu-option-icon {\n padding-left: calc(var(--ag-grid-size) * 2);\n }\n .ag-rtl .ag-menu-option-icon,\n .ag-rtl .ag-compact-menu-option-icon {\n padding-right: calc(var(--ag-grid-size) * 2);\n }\n\n .ag-menu-option-text,\n .ag-compact-menu-option-text {\n padding-left: calc(var(--ag-grid-size) * 2);\n padding-right: calc(var(--ag-grid-size) * 2);\n }\n\n .ag-ltr .ag-menu-option-shortcut,\n .ag-ltr .ag-compact-menu-option-shortcut {\n padding-right: var(--ag-grid-size);\n }\n .ag-rtl .ag-menu-option-shortcut,\n .ag-rtl .ag-compact-menu-option-shortcut {\n padding-left: var(--ag-grid-size);\n }\n\n .ag-menu-option-popup-pointer,\n .ag-compact-menu-option-popup-pointer {\n padding-right: var(--ag-grid-size);\n }\n\n .ag-tabs {\n min-width: var(--ag-tab-min-width);\n }\n\n .ag-tabs-header {\n width: 100%;\n display: flex;\n }\n\n .ag-tab {\n border-bottom: var(--ag-selected-tab-underline-width) solid transparent;\n transition: border-bottom var(--ag-selected-tab-underline-transition-speed);\n display: flex;\n flex: none;\n align-items: center;\n justify-content: center;\n cursor: pointer;\n }\n\n .ag-keyboard-focus .ag-tab:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-tab:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 4px;\n left: 4px;\n display: block;\n width: calc(100% - 8px);\n height: calc(100% - 8px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-tab-selected {\n border-bottom-color: var(--ag-selected-tab-underline-color);\n }\n\n .ag-menu-header {\n color: var(--ag-secondary-foreground-color);\n }\n\n .ag-filter-separator {\n border-top: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-menu:not(.ag-tabs) .ag-filter-select {\n min-width: calc(\n var(--ag-menu-min-width) - 2 * var(--ag-widget-container-horizontal-padding) - 2px\n );\n }\n\n .ag-tabs .ag-filter-select {\n min-width: calc(\n var(--ag-tab-min-width) - 2 * var(--ag-widget-container-horizontal-padding) - 2px\n );\n }\n\n .ag-filter-select .ag-picker-field-wrapper {\n width: 0;\n }\n\n .ag-filter-condition-operator {\n height: 17px;\n }\n\n .ag-ltr .ag-filter-condition-operator-or {\n margin-left: calc(var(--ag-grid-size) * 2);\n }\n .ag-rtl .ag-filter-condition-operator-or {\n margin-right: calc(var(--ag-grid-size) * 2);\n }\n\n .ag-set-filter-select-all {\n padding-top: var(--ag-widget-container-vertical-padding);\n }\n\n .ag-set-filter-list,\n .ag-filter-no-matches {\n height: calc(var(--ag-list-item-height) * 6);\n }\n\n .ag-set-filter-tree-list {\n height: calc(var(--ag-list-item-height) * 10);\n }\n\n .ag-set-filter-filter {\n margin-top: var(--ag-widget-container-vertical-padding);\n margin-left: var(--ag-widget-container-horizontal-padding);\n margin-right: var(--ag-widget-container-horizontal-padding);\n }\n\n .ag-filter-to {\n margin-top: var(--ag-widget-vertical-spacing);\n }\n\n .ag-mini-filter {\n margin: var(--ag-widget-container-vertical-padding)\n var(--ag-widget-container-horizontal-padding);\n }\n\n .ag-set-filter-item {\n margin: 0px var(--ag-widget-container-horizontal-padding);\n }\n\n .ag-ltr .ag-set-filter-add-group-indent {\n margin-left: calc(\n var(--ag-widget-container-horizontal-padding) + var(--ag-icon-size) + var(--ag-grid-size) * 2\n );\n }\n .ag-rtl .ag-set-filter-add-group-indent {\n margin-right: calc(\n var(--ag-widget-container-horizontal-padding) + var(--ag-icon-size) + var(--ag-grid-size) * 2\n );\n }\n\n .ag-ltr .ag-set-filter-indent-1 {\n padding-left: calc(1 * var(--ag-set-filter-indent-size));\n }\n .ag-rtl .ag-set-filter-indent-1 {\n padding-right: calc(1 * var(--ag-set-filter-indent-size));\n }\n\n .ag-ltr .ag-set-filter-indent-2 {\n padding-left: calc(2 * var(--ag-set-filter-indent-size));\n }\n .ag-rtl .ag-set-filter-indent-2 {\n padding-right: calc(2 * var(--ag-set-filter-indent-size));\n }\n\n .ag-ltr .ag-set-filter-indent-3 {\n padding-left: calc(3 * var(--ag-set-filter-indent-size));\n }\n .ag-rtl .ag-set-filter-indent-3 {\n padding-right: calc(3 * var(--ag-set-filter-indent-size));\n }\n\n .ag-ltr .ag-set-filter-indent-4 {\n padding-left: calc(4 * var(--ag-set-filter-indent-size));\n }\n .ag-rtl .ag-set-filter-indent-4 {\n padding-right: calc(4 * var(--ag-set-filter-indent-size));\n }\n\n .ag-ltr .ag-set-filter-indent-5 {\n padding-left: calc(5 * var(--ag-set-filter-indent-size));\n }\n .ag-rtl .ag-set-filter-indent-5 {\n padding-right: calc(5 * var(--ag-set-filter-indent-size));\n }\n\n .ag-ltr .ag-set-filter-indent-6 {\n padding-left: calc(6 * var(--ag-set-filter-indent-size));\n }\n .ag-rtl .ag-set-filter-indent-6 {\n padding-right: calc(6 * var(--ag-set-filter-indent-size));\n }\n\n .ag-ltr .ag-set-filter-indent-7 {\n padding-left: calc(7 * var(--ag-set-filter-indent-size));\n }\n .ag-rtl .ag-set-filter-indent-7 {\n padding-right: calc(7 * var(--ag-set-filter-indent-size));\n }\n\n .ag-ltr .ag-set-filter-indent-8 {\n padding-left: calc(8 * var(--ag-set-filter-indent-size));\n }\n .ag-rtl .ag-set-filter-indent-8 {\n padding-right: calc(8 * var(--ag-set-filter-indent-size));\n }\n\n .ag-ltr .ag-set-filter-indent-9 {\n padding-left: calc(9 * var(--ag-set-filter-indent-size));\n }\n .ag-rtl .ag-set-filter-indent-9 {\n padding-right: calc(9 * var(--ag-set-filter-indent-size));\n }\n\n .ag-ltr .ag-set-filter-group-icons {\n margin-right: var(--ag-widget-container-horizontal-padding);\n }\n .ag-rtl .ag-set-filter-group-icons {\n margin-left: var(--ag-widget-container-horizontal-padding);\n }\n\n .ag-filter-apply-panel {\n padding: var(--ag-widget-container-vertical-padding)\n var(--ag-widget-container-horizontal-padding);\n border-top: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n }\n\n .ag-filter-apply-panel-button {\n line-height: 1.5;\n }\n .ag-ltr .ag-filter-apply-panel-button {\n margin-left: calc(var(--ag-grid-size) * 2);\n }\n .ag-rtl .ag-filter-apply-panel-button {\n margin-right: calc(var(--ag-grid-size) * 2);\n }\n\n .ag-simple-filter-body-wrapper {\n padding: var(--ag-widget-container-vertical-padding)\n var(--ag-widget-container-horizontal-padding);\n padding-bottom: calc(\n var(--ag-widget-container-vertical-padding) - var(--ag-widget-vertical-spacing)\n );\n }\n .ag-simple-filter-body-wrapper > * {\n margin-bottom: var(--ag-widget-vertical-spacing);\n }\n\n .ag-filter-no-matches {\n padding: var(--ag-widget-container-vertical-padding)\n var(--ag-widget-container-horizontal-padding);\n }\n\n .ag-multi-filter-menu-item {\n margin: var(--ag-grid-size) 0;\n }\n\n .ag-multi-filter-group-title-bar {\n padding: calc(var(--ag-grid-size) * 2) var(--ag-grid-size);\n background-color: transparent;\n }\n\n .ag-keyboard-focus .ag-multi-filter-group-title-bar:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-multi-filter-group-title-bar:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 4px;\n left: 4px;\n display: block;\n width: calc(100% - 8px);\n height: calc(100% - 8px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-side-bar {\n position: relative;\n }\n\n .ag-tool-panel-wrapper {\n width: var(--ag-side-bar-panel-width);\n background-color: var(--ag-control-panel-background-color);\n }\n\n .ag-side-buttons {\n padding-top: calc(var(--ag-grid-size) * 4);\n width: calc(var(--ag-icon-size) + 4px);\n position: relative;\n color: var(--ag-foreground-color);\n overflow: hidden;\n }\n\n button.ag-side-button-button {\n color: inherit;\n font-family: inherit;\n font-size: inherit;\n font-weight: inherit;\n line-height: inherit;\n background: transparent;\n padding: calc(var(--ag-grid-size) * 2) 0 calc(var(--ag-grid-size) * 2) 0;\n width: 100%;\n margin: 0;\n min-height: calc(var(--ag-grid-size) * 18);\n background-position-y: center;\n background-position-x: center;\n background-repeat: no-repeat;\n border: none;\n border-top: var(--ag-borders-side-button) var(--ag-border-color);\n border-bottom: var(--ag-borders-side-button) var(--ag-border-color);\n }\n button.ag-side-button-button:focus {\n box-shadow: none;\n }\n\n .ag-keyboard-focus .ag-side-button-button:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-side-button-button:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 4px;\n left: 4px;\n display: block;\n width: calc(100% - 8px);\n height: calc(100% - 8px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-selected button.ag-side-button-button {\n background-color: var(--ag-side-button-selected-background-color);\n }\n\n .ag-side-button-icon-wrapper {\n margin-bottom: 3px;\n }\n\n .ag-ltr .ag-side-bar-left,\n .ag-rtl .ag-side-bar-right {\n border-right: var(--ag-borders) var(--ag-border-color);\n }\n .ag-ltr .ag-side-bar-left .ag-tool-panel-wrapper,\n .ag-rtl .ag-side-bar-right .ag-tool-panel-wrapper {\n border-left: var(--ag-borders) var(--ag-border-color);\n }\n .ag-ltr .ag-side-bar-left .ag-side-button-button,\n .ag-rtl .ag-side-bar-right .ag-side-button-button {\n border-right: var(--ag-selected-tab-underline-width) solid transparent;\n transition: border-right var(--ag-selected-tab-underline-transition-speed);\n }\n .ag-ltr .ag-side-bar-left .ag-selected .ag-side-button-button,\n .ag-rtl .ag-side-bar-right .ag-selected .ag-side-button-button {\n border-right-color: var(--ag-selected-tab-underline-color);\n }\n\n .ag-rtl .ag-side-bar-left,\n .ag-ltr .ag-side-bar-right {\n border-left: var(--ag-borders) var(--ag-border-color);\n }\n .ag-rtl .ag-side-bar-left .ag-tool-panel-wrapper,\n .ag-ltr .ag-side-bar-right .ag-tool-panel-wrapper {\n border-right: var(--ag-borders) var(--ag-border-color);\n }\n .ag-rtl .ag-side-bar-left .ag-side-button-button,\n .ag-ltr .ag-side-bar-right .ag-side-button-button {\n border-left: var(--ag-selected-tab-underline-width) solid transparent;\n transition: border-left var(--ag-selected-tab-underline-transition-speed);\n }\n .ag-rtl .ag-side-bar-left .ag-selected .ag-side-button-button,\n .ag-ltr .ag-side-bar-right .ag-selected .ag-side-button-button {\n border-left-color: var(--ag-selected-tab-underline-color);\n }\n\n .ag-filter-toolpanel-header {\n height: calc(var(--ag-grid-size) * 6);\n }\n\n .ag-ltr .ag-filter-toolpanel-header,\n .ag-ltr .ag-filter-toolpanel-search {\n padding-left: var(--ag-grid-size);\n }\n .ag-rtl .ag-filter-toolpanel-header,\n .ag-rtl .ag-filter-toolpanel-search {\n padding-right: var(--ag-grid-size);\n }\n\n .ag-keyboard-focus .ag-filter-toolpanel-header:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-filter-toolpanel-header:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 4px;\n left: 4px;\n display: block;\n width: calc(100% - 8px);\n height: calc(100% - 8px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-filter-toolpanel-group.ag-has-filter > .ag-group-title-bar .ag-group-title::after {\n font-family: var(--ag-icon-font-family);\n font-size: var(--ag-icon-size);\n line-height: var(--ag-icon-size);\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n content: var(--ag-icon-font-code-filter, '\\\\f114');\n position: absolute;\n }\n .ag-ltr .ag-filter-toolpanel-group.ag-has-filter > .ag-group-title-bar .ag-group-title::after {\n padding-left: var(--ag-grid-size);\n }\n .ag-rtl .ag-filter-toolpanel-group.ag-has-filter > .ag-group-title-bar .ag-group-title::after {\n padding-right: var(--ag-grid-size);\n }\n\n .ag-filter-toolpanel-group-level-0-header {\n height: calc(var(--ag-grid-size) * 8);\n }\n\n .ag-filter-toolpanel-group-item {\n margin-top: calc(var(--ag-grid-size) * 0.5);\n margin-bottom: calc(var(--ag-grid-size) * 0.5);\n }\n\n .ag-filter-toolpanel-search {\n height: var(--ag-header-height);\n }\n\n .ag-filter-toolpanel-search-input {\n flex-grow: 1;\n height: calc(var(--ag-grid-size) * 4);\n }\n .ag-ltr .ag-filter-toolpanel-search-input {\n margin-right: var(--ag-grid-size);\n }\n .ag-rtl .ag-filter-toolpanel-search-input {\n margin-left: var(--ag-grid-size);\n }\n\n .ag-filter-toolpanel-group-level-0 {\n border-top: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n }\n\n .ag-ltr .ag-filter-toolpanel-expand,\n .ag-ltr .ag-filter-toolpanel-group-title-bar-icon {\n margin-right: var(--ag-grid-size);\n }\n .ag-rtl .ag-filter-toolpanel-expand,\n .ag-rtl .ag-filter-toolpanel-group-title-bar-icon {\n margin-left: var(--ag-grid-size);\n }\n\n .ag-filter-toolpanel-group-level-1\n .ag-filter-toolpanel-group-level-1-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-1 .ag-filter-toolpanel-group-level-2-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 1 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-1 .ag-filter-toolpanel-group-level-2-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 1 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-group-level-2\n .ag-filter-toolpanel-group-level-2-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-2 .ag-filter-toolpanel-group-level-3-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 2 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-2 .ag-filter-toolpanel-group-level-3-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 2 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-group-level-3\n .ag-filter-toolpanel-group-level-3-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-3 .ag-filter-toolpanel-group-level-4-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 3 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-3 .ag-filter-toolpanel-group-level-4-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 3 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-group-level-4\n .ag-filter-toolpanel-group-level-4-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-4 .ag-filter-toolpanel-group-level-5-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 4 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-4 .ag-filter-toolpanel-group-level-5-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 4 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-group-level-5\n .ag-filter-toolpanel-group-level-5-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-5 .ag-filter-toolpanel-group-level-6-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 5 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-5 .ag-filter-toolpanel-group-level-6-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 5 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-group-level-6\n .ag-filter-toolpanel-group-level-6-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-6 .ag-filter-toolpanel-group-level-7-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 6 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-6 .ag-filter-toolpanel-group-level-7-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 6 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-group-level-7\n .ag-filter-toolpanel-group-level-7-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-7 .ag-filter-toolpanel-group-level-8-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 7 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-7 .ag-filter-toolpanel-group-level-8-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 7 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-group-level-8\n .ag-filter-toolpanel-group-level-8-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-8 .ag-filter-toolpanel-group-level-9-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 8 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-8 .ag-filter-toolpanel-group-level-9-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 8 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-group-level-9\n .ag-filter-toolpanel-group-level-9-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-9 .ag-filter-toolpanel-group-level-10-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 9 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-9 .ag-filter-toolpanel-group-level-10-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 9 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-group-level-10\n .ag-filter-toolpanel-group-level-10-header.ag-filter-toolpanel-group-title-bar {\n background-color: transparent;\n }\n .ag-ltr .ag-filter-toolpanel-group-level-10 .ag-filter-toolpanel-group-level-11-header {\n padding-left: calc(var(--ag-filter-tool-panel-group-indent) * 10 + var(--ag-grid-size));\n }\n .ag-rtl .ag-filter-toolpanel-group-level-10 .ag-filter-toolpanel-group-level-11-header {\n padding-right: calc(var(--ag-filter-tool-panel-group-indent) * 10 + var(--ag-grid-size));\n }\n\n .ag-filter-toolpanel-instance-header.ag-filter-toolpanel-group-level-1-header {\n padding-left: var(--ag-grid-size);\n }\n\n .ag-filter-toolpanel-instance-filter {\n border-bottom: var(--ag-borders) var(--ag-border-color);\n border-top: var(--ag-borders) var(--ag-border-color);\n margin-top: var(--ag-grid-size);\n }\n\n .ag-ltr .ag-filter-toolpanel-instance-header-icon {\n margin-left: var(--ag-grid-size);\n }\n .ag-rtl .ag-filter-toolpanel-instance-header-icon {\n margin-right: var(--ag-grid-size);\n }\n\n .ag-set-filter-group-icons {\n color: var(--ag-secondary-foreground-color);\n }\n\n .ag-pivot-mode-panel {\n min-height: var(--ag-header-height);\n height: var(--ag-header-height);\n display: flex;\n }\n\n .ag-pivot-mode-select {\n display: flex;\n align-items: center;\n }\n .ag-ltr .ag-pivot-mode-select {\n margin-left: var(--ag-widget-container-horizontal-padding);\n }\n .ag-rtl .ag-pivot-mode-select {\n margin-right: var(--ag-widget-container-horizontal-padding);\n }\n\n .ag-keyboard-focus .ag-column-select-header:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-column-select-header:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 4px;\n left: 4px;\n display: block;\n width: calc(100% - 8px);\n height: calc(100% - 8px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-column-select-header {\n height: var(--ag-header-height);\n align-items: center;\n padding: 0 var(--ag-widget-container-horizontal-padding);\n border-bottom: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n }\n\n .ag-column-panel-column-select {\n border-bottom: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n border-top: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n }\n\n .ag-column-group-icons,\n .ag-column-select-header-icon {\n color: var(--ag-secondary-foreground-color);\n }\n\n .ag-column-select-list .ag-list-item-hovered::after {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n height: 1px;\n background-color: var(--ag-range-selection-border-color);\n }\n .ag-column-select-list .ag-item-highlight-top::after {\n top: 0;\n }\n .ag-column-select-list .ag-item-highlight-bottom::after {\n bottom: 0;\n }\n\n .ag-header {\n background-color: var(--ag-header-background-color);\n border-bottom: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-header-row {\n color: var(--ag-header-foreground-color);\n height: var(--ag-header-height);\n }\n\n .ag-pinned-right-header {\n border-left: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-pinned-left-header {\n border-right: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-ltr .ag-header-cell:not(.ag-right-aligned-header) .ag-header-label-icon {\n margin-left: var(--ag-grid-size);\n }\n .ag-rtl .ag-header-cell:not(.ag-right-aligned-header) .ag-header-label-icon {\n margin-right: var(--ag-grid-size);\n }\n\n .ag-ltr .ag-header-cell.ag-right-aligned-header .ag-header-label-icon {\n margin-right: var(--ag-grid-size);\n }\n .ag-rtl .ag-header-cell.ag-right-aligned-header .ag-header-label-icon {\n margin-left: var(--ag-grid-size);\n }\n\n .ag-header-cell,\n .ag-header-group-cell {\n padding-left: var(--ag-cell-horizontal-padding);\n padding-right: var(--ag-cell-horizontal-padding);\n }\n .ag-header-cell.ag-header-cell-moving,\n .ag-header-group-cell.ag-header-cell-moving {\n background-color: var(--ag-header-cell-moving-background-color);\n }\n\n .ag-keyboard-focus .ag-header-cell:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-header-cell:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 4px;\n left: 4px;\n display: block;\n width: calc(100% - 8px);\n height: calc(100% - 8px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n .ag-keyboard-focus .ag-header-group-cell:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-header-group-cell:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 4px;\n left: 4px;\n display: block;\n width: calc(100% - 8px);\n height: calc(100% - 8px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-header-icon {\n color: var(--ag-secondary-foreground-color);\n }\n\n .ag-header-expand-icon {\n cursor: pointer;\n }\n .ag-ltr .ag-header-expand-icon {\n padding-left: 4px;\n }\n .ag-rtl .ag-header-expand-icon {\n padding-right: 4px;\n }\n\n .ag-header-row:not(:first-child) .ag-header-cell,\n .ag-header-row:not(:first-child) .ag-header-group-cell.ag-header-group-cell-with-group {\n border-top: var(--ag-borders-critical) var(--ag-border-color);\n }\n\n .ag-header-group-cell:not(.ag-column-resizing)\n + .ag-header-group-cell:not(.ag-column-hover):not(.ag-header-cell-moving):hover,\n .ag-header-group-cell:not(.ag-column-resizing)\n + .ag-header-group-cell:not(.ag-column-hover).ag-column-resizing,\n .ag-header-cell:not(.ag-column-resizing)\n + .ag-header-cell:not(.ag-column-hover):not(.ag-header-cell-moving):hover,\n .ag-header-cell:not(.ag-column-resizing)\n + .ag-header-cell:not(.ag-column-hover).ag-column-resizing,\n .ag-header-group-cell:first-of-type:not(.ag-header-cell-moving):hover,\n .ag-header-group-cell:first-of-type.ag-column-resizing,\n .ag-header-cell:not(.ag-column-hover):first-of-type:not(.ag-header-cell-moving):hover,\n .ag-header-cell:not(.ag-column-hover):first-of-type.ag-column-resizing {\n background-color: var(--ag-header-cell-hover-background-color);\n }\n\n .ag-header-cell::after,\n .ag-header-group-cell::after {\n content: '';\n position: absolute;\n z-index: 1;\n display: var(--ag-header-column-separator-display);\n width: var(--ag-header-column-separator-width);\n height: var(--ag-header-column-separator-height);\n top: calc(50% - var(--ag-header-column-separator-height) * 0.5);\n background-color: var(--ag-header-column-separator-color);\n }\n .ag-ltr .ag-header-cell::after,\n .ag-ltr .ag-header-group-cell::after {\n right: 0;\n }\n .ag-rtl .ag-header-cell::after,\n .ag-rtl .ag-header-group-cell::after {\n left: 0;\n }\n\n .ag-header-cell-resize {\n display: flex;\n align-items: center;\n }\n\n .ag-header-cell-resize::after {\n content: '';\n position: absolute;\n z-index: 1;\n display: var(--ag-header-column-resize-handle-display);\n width: var(--ag-header-column-resize-handle-width);\n height: var(--ag-header-column-resize-handle-height);\n top: calc(50% - var(--ag-header-column-resize-handle-height) * 0.5);\n background-color: var(--ag-header-column-resize-handle-color);\n }\n\n .ag-ltr .ag-header-viewport .ag-header-cell-resize::after {\n left: calc(50% - var(--ag-header-column-resize-handle-width));\n }\n .ag-rtl .ag-header-viewport .ag-header-cell-resize::after {\n right: calc(50% - var(--ag-header-column-resize-handle-width));\n }\n\n .ag-pinned-left-header .ag-header-cell-resize::after {\n left: calc(50% - var(--ag-header-column-resize-handle-width));\n }\n\n .ag-pinned-right-header .ag-header-cell-resize::after {\n left: 50%;\n }\n\n .ag-ltr .ag-header-select-all {\n margin-right: var(--ag-cell-horizontal-padding);\n }\n .ag-rtl .ag-header-select-all {\n margin-left: var(--ag-cell-horizontal-padding);\n }\n\n .ag-ltr .ag-floating-filter-button {\n margin-left: calc(var(--ag-grid-size) * 3);\n }\n .ag-rtl .ag-floating-filter-button {\n margin-right: calc(var(--ag-grid-size) * 3);\n }\n\n .ag-floating-filter-button-button {\n color: inherit;\n font-family: inherit;\n font-size: inherit;\n font-weight: inherit;\n line-height: inherit;\n appearance: none;\n background: transparent;\n border: none;\n height: var(--ag-icon-size);\n padding: 0;\n width: var(--ag-icon-size);\n }\n\n .ag-filter-loading {\n background-color: var(--ag-control-panel-background-color);\n height: 100%;\n padding: var(--ag-widget-container-vertical-padding)\n var(--ag-widget-container-horizontal-padding);\n position: absolute;\n width: 100%;\n z-index: 1;\n }\n\n .ag-paging-panel {\n border-top: 1px solid;\n border-top-color: var(--ag-border-color);\n color: var(--ag-secondary-foreground-color);\n height: var(--ag-header-height);\n }\n .ag-paging-panel > * {\n margin: 0 var(--ag-cell-horizontal-padding);\n }\n\n .ag-paging-button {\n cursor: pointer;\n }\n\n .ag-paging-button.ag-disabled {\n cursor: default;\n color: var(--ag-disabled-foreground-color);\n }\n\n .ag-keyboard-focus .ag-paging-button:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-paging-button:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 0px;\n left: 0px;\n display: block;\n width: calc(100% - 0px);\n height: calc(100% - 0px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-paging-button,\n .ag-paging-description {\n margin: 0 var(--ag-grid-size);\n }\n\n .ag-status-bar {\n border-top: var(--ag-borders) var(--ag-border-color);\n color: var(--ag-disabled-foreground-color);\n padding-right: calc(var(--ag-grid-size) * 4);\n padding-left: calc(var(--ag-grid-size) * 4);\n line-height: 1.5;\n }\n\n .ag-status-name-value-value {\n color: var(--ag-foreground-color);\n }\n\n .ag-status-bar-center {\n text-align: center;\n }\n\n .ag-status-name-value {\n margin-left: var(--ag-grid-size);\n margin-right: var(--ag-grid-size);\n padding-top: calc(var(--ag-grid-size) * 2);\n padding-bottom: calc(var(--ag-grid-size) * 2);\n }\n\n .ag-column-drop-cell {\n background: var(--ag-chip-background-color);\n border-radius: calc(var(--ag-grid-size) * 4);\n height: calc(var(--ag-grid-size) * 4);\n padding: 0 calc(var(--ag-grid-size) * 0.5);\n border: 1px solid transparent;\n }\n\n .ag-keyboard-focus .ag-column-drop-cell:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-column-drop-cell:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 2px;\n left: 2px;\n display: block;\n width: calc(100% - 4px);\n height: calc(100% - 4px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-column-drop-cell-text {\n margin: 0 var(--ag-grid-size);\n }\n\n .ag-column-drop-cell-button {\n min-width: calc(var(--ag-grid-size) * 4);\n margin: 0 calc(var(--ag-grid-size) * 0.5);\n color: var(--ag-secondary-foreground-color);\n }\n\n .ag-column-drop-cell-drag-handle {\n margin-left: calc(var(--ag-grid-size) * 2);\n }\n\n .ag-column-drop-cell-ghost {\n opacity: 0.5;\n }\n\n .ag-column-drop-horizontal {\n background-color: var(--ag-control-panel-background-color);\n color: var(--ag-secondary-foreground-color);\n height: var(--ag-row-height);\n border-bottom: var(--ag-borders) var(--ag-border-color);\n }\n .ag-ltr .ag-column-drop-horizontal {\n padding-left: var(--ag-cell-horizontal-padding);\n }\n .ag-rtl .ag-column-drop-horizontal {\n padding-right: var(--ag-cell-horizontal-padding);\n }\n\n .ag-ltr .ag-column-drop-horizontal-half-width:not(:last-child) {\n border-right: var(--ag-borders) var(--ag-border-color);\n }\n .ag-rtl .ag-column-drop-horizontal-half-width:not(:last-child) {\n border-left: var(--ag-borders) var(--ag-border-color);\n }\n\n .ag-column-drop-horizontal-cell-separator {\n margin: 0 var(--ag-grid-size);\n color: var(--ag-secondary-foreground-color);\n }\n\n .ag-column-drop-horizontal-empty-message {\n color: var(--ag-disabled-foreground-color);\n }\n\n .ag-ltr .ag-column-drop-horizontal-icon {\n margin-right: var(--ag-cell-horizontal-padding);\n }\n .ag-rtl .ag-column-drop-horizontal-icon {\n margin-left: var(--ag-cell-horizontal-padding);\n }\n\n .ag-column-drop-vertical-list {\n padding-bottom: var(--ag-grid-size);\n padding-right: var(--ag-grid-size);\n padding-left: var(--ag-grid-size);\n }\n\n .ag-column-drop-vertical-cell {\n margin-top: var(--ag-grid-size);\n }\n\n .ag-column-drop-vertical {\n min-height: 50px;\n border-bottom: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n }\n .ag-column-drop-vertical.ag-last-column-drop {\n border-bottom: none;\n }\n\n .ag-column-drop-vertical-icon {\n margin-left: var(--ag-grid-size);\n margin-right: var(--ag-grid-size);\n }\n\n .ag-column-drop-vertical-empty-message {\n position: absolute;\n top: 0;\n bottom: 0;\n left: 0;\n right: 0;\n overflow: hidden;\n color: var(--ag-disabled-foreground-color);\n margin-top: var(--ag-grid-size);\n }\n\n .ag-select-agg-func-popup {\n border: var(--ag-borders) var(--ag-border-color);\n background: var(--ag-background-color);\n border-radius: var(--ag-card-radius);\n box-shadow: var(--ag-card-shadow);\n padding: var(--ag-grid-size);\n background: var(--ag-background-color);\n height: calc(var(--ag-grid-size) * 5 * 3.5);\n padding: 0;\n }\n\n .ag-select-agg-func-virtual-list-item {\n cursor: default;\n padding-left: calc(var(--ag-grid-size) * 2);\n }\n .ag-select-agg-func-virtual-list-item:hover {\n background-color: var(--ag-selected-row-background-color);\n }\n\n .ag-keyboard-focus .ag-select-agg-func-virtual-list-item:focus {\n outline: none;\n }\n .ag-keyboard-focus .ag-select-agg-func-virtual-list-item:focus::after {\n content: '';\n position: absolute;\n background-color: transparent;\n pointer-events: none;\n top: 1px;\n left: 1px;\n display: block;\n width: calc(100% - 2px);\n height: calc(100% - 2px);\n border: 1px solid;\n border-color: var(--ag-input-focus-border-color);\n }\n\n .ag-sort-indicator-container {\n display: flex;\n }\n\n .ag-ltr .ag-sort-indicator-icon {\n padding-left: var(--ag-grid-size);\n }\n .ag-rtl .ag-sort-indicator-icon {\n padding-right: var(--ag-grid-size);\n }\n\n .ag-chart {\n position: relative;\n display: flex;\n overflow: hidden;\n width: 100%;\n height: 100%;\n }\n\n .ag-chart-components-wrapper {\n position: relative;\n display: flex;\n flex: 1 1 auto;\n overflow: hidden;\n }\n\n .ag-chart-title-edit {\n position: absolute;\n display: none;\n top: 0;\n left: 0;\n text-align: center;\n }\n\n .ag-chart-title-edit.currently-editing {\n display: inline-block;\n }\n\n .ag-chart-canvas-wrapper {\n position: relative;\n flex: 1 1 auto;\n overflow: hidden;\n }\n\n .ag-charts-canvas {\n display: block;\n }\n\n .ag-chart-menu {\n position: absolute;\n top: 10px;\n width: 24px;\n overflow: hidden;\n display: flex;\n flex-direction: column;\n }\n .ag-ltr .ag-chart-menu {\n right: 20px;\n }\n .ag-rtl .ag-chart-menu {\n left: 20px;\n }\n\n .ag-chart-docked-container {\n position: relative;\n width: 0;\n min-width: 0;\n transition: min-width 0.4s;\n }\n\n .ag-chart-menu-hidden ~ .ag-chart-docked-container {\n max-width: 0;\n overflow: hidden;\n }\n\n .ag-chart-tabbed-menu {\n width: 100%;\n height: 100%;\n display: flex;\n flex-direction: column;\n overflow: hidden;\n }\n\n .ag-chart-tabbed-menu-header {\n flex: none;\n user-select: none;\n cursor: default;\n }\n\n .ag-chart-tabbed-menu-body {\n display: flex;\n flex: 1 1 auto;\n align-items: stretch;\n overflow: hidden;\n }\n\n .ag-chart-tab {\n width: 100%;\n overflow: hidden;\n overflow-y: auto;\n }\n\n .ag-chart-settings {\n overflow-x: hidden;\n }\n\n .ag-chart-settings-wrapper {\n position: relative;\n flex-direction: column;\n width: 100%;\n height: 100%;\n display: flex;\n overflow: hidden;\n }\n\n .ag-chart-settings-nav-bar {\n display: flex;\n align-items: center;\n width: 100%;\n height: 30px;\n padding: 0 10px;\n user-select: none;\n }\n\n .ag-chart-settings-card-selector {\n display: flex;\n align-items: center;\n justify-content: space-around;\n flex: 1 1 auto;\n height: 100%;\n padding: 0 10px;\n }\n\n .ag-chart-settings-card-item {\n cursor: pointer;\n width: 10px;\n height: 10px;\n background-color: #000;\n position: relative;\n }\n .ag-chart-settings-card-item.ag-not-selected {\n opacity: 0.2;\n }\n .ag-chart-settings-card-item::before {\n content: ' ';\n display: block;\n position: absolute;\n background-color: transparent;\n left: 50%;\n top: 50%;\n margin-left: -10px;\n margin-top: -10px;\n width: 20px;\n height: 20px;\n }\n\n .ag-chart-settings-prev,\n .ag-chart-settings-next {\n position: relative;\n flex: none;\n }\n\n .ag-chart-settings-prev-button,\n .ag-chart-settings-next-button {\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n cursor: pointer;\n opacity: 0;\n }\n\n .ag-chart-settings-mini-charts-container {\n position: relative;\n flex: 1 1 auto;\n overflow-x: hidden;\n overflow-y: auto;\n }\n\n .ag-chart-settings-mini-wrapper {\n position: absolute;\n top: 0;\n left: 0;\n display: flex;\n flex-direction: column;\n width: 100%;\n min-height: 100%;\n overflow: hidden;\n }\n .ag-chart-settings-mini-wrapper.ag-animating {\n transition: left 0.3s;\n transition-timing-function: ease-in-out;\n }\n\n .ag-chart-mini-thumbnail {\n cursor: pointer;\n }\n\n .ag-chart-mini-thumbnail-canvas {\n display: block;\n }\n\n .ag-chart-data-wrapper,\n .ag-chart-format-wrapper {\n display: flex;\n flex-direction: column;\n position: relative;\n user-select: none;\n }\n\n .ag-chart-data-wrapper {\n height: 100%;\n overflow-y: auto;\n }\n\n .ag-chart-data-section,\n .ag-chart-format-section {\n display: flex;\n margin: 0;\n }\n\n .ag-chart-empty-text {\n display: flex;\n top: 0;\n width: 100%;\n height: 100%;\n align-items: center;\n justify-content: center;\n }\n\n .ag-chart .ag-chart-menu {\n display: none;\n }\n\n .ag-chart-menu-hidden:hover .ag-chart-menu {\n display: block;\n }\n\n .ag-chart .ag-chart-tool-panel-button-enable .ag-chart-menu {\n display: flex;\n flex-direction: row;\n overflow: auto;\n top: 5px;\n gap: calc(var(--ag-grid-size) * 3 - 8px);\n width: auto;\n }\n .ag-ltr .ag-chart .ag-chart-tool-panel-button-enable .ag-chart-menu {\n right: calc(var(--ag-cell-horizontal-padding) + var(--ag-grid-size) - 4px);\n justify-content: right;\n }\n .ag-rtl .ag-chart .ag-chart-tool-panel-button-enable .ag-chart-menu {\n left: calc(var(--ag-cell-horizontal-padding) + var(--ag-grid-size) - 4px);\n justify-content: left;\n }\n\n .ag-chart-menu-close {\n display: none;\n }\n\n .ag-chart-tool-panel-button-enable .ag-chart-menu-close {\n position: absolute;\n top: 50%;\n transition: transform 0.33s ease-in-out;\n padding: 0;\n display: block;\n cursor: pointer;\n border: none;\n }\n .ag-ltr .ag-chart-tool-panel-button-enable .ag-chart-menu-close {\n right: 0px;\n }\n .ag-rtl .ag-chart-tool-panel-button-enable .ag-chart-menu-close {\n left: 0px;\n }\n .ag-chart-tool-panel-button-enable .ag-chart-menu-close .ag-icon {\n padding: 14px 5px 14px 2px;\n }\n .ag-chart-tool-panel-button-enable .ag-chart-menu-close:before {\n content: '';\n position: absolute;\n top: -40px;\n bottom: -40px;\n }\n .ag-ltr .ag-chart-tool-panel-button-enable .ag-chart-menu-close:before {\n right: 0px;\n }\n .ag-rtl .ag-chart-tool-panel-button-enable .ag-chart-menu-close:before {\n left: 0px;\n }\n .ag-ltr .ag-chart-tool-panel-button-enable .ag-chart-menu-close:before {\n left: -10px;\n }\n .ag-rtl .ag-chart-tool-panel-button-enable .ag-chart-menu-close:before {\n right: -10px;\n }\n .ag-chart-tool-panel-button-enable .ag-icon-menu {\n display: none;\n }\n\n .ag-ltr .ag-chart-tool-panel-button-enable .ag-chart-menu-close {\n transform: translate(3px, -50%);\n }\n .ag-ltr .ag-chart-tool-panel-button-enable .ag-chart-menu-close:hover {\n transform: translate(0, -50%);\n }\n .ag-ltr .ag-chart-menu-visible .ag-chart-tool-panel-button-enable .ag-chart-menu-close:hover {\n transform: translate(5px, -50%);\n }\n\n .ag-rtl .ag-chart-tool-panel-button-enable .ag-chart-menu-close {\n transform: translate(-3px, -50%);\n }\n .ag-rtl .ag-chart-tool-panel-button-enable .ag-chart-menu-close:hover {\n transform: translate(0, -50%);\n }\n .ag-rtl .ag-chart-menu-visible .ag-chart-tool-panel-button-enable .ag-chart-menu-close:hover {\n transform: translate(-5px, -50%);\n }\n\n .ag-charts-font-size-color {\n display: flex;\n align-self: stretch;\n justify-content: space-between;\n }\n\n .ag-charts-data-group-item {\n position: relative;\n }\n\n .ag-chart-menu {\n border-radius: var(--ag-card-radius);\n background: var(--ag-background-color);\n }\n\n .ag-chart-menu-icon {\n opacity: 0.5;\n line-height: 24px;\n font-size: 24px;\n width: 24px;\n height: 24px;\n margin: 2px 0;\n cursor: pointer;\n border-radius: var(--ag-card-radius);\n color: var(--ag-secondary-foreground-color);\n }\n .ag-chart-menu-icon:hover {\n opacity: 1;\n }\n\n .ag-chart-mini-thumbnail {\n border: 1px solid var(--ag-secondary-border-color);\n border-radius: 5px;\n margin: 5px;\n }\n .ag-chart-mini-thumbnail:nth-last-child(3),\n .ag-chart-mini-thumbnail:nth-last-child(3) ~ .ag-chart-mini-thumbnail {\n margin-left: auto;\n margin-right: auto;\n }\n .ag-ltr .ag-chart-mini-thumbnail:first-child {\n margin-left: 0;\n }\n .ag-rtl .ag-chart-mini-thumbnail:first-child {\n margin-right: 0;\n }\n .ag-ltr .ag-chart-mini-thumbnail:last-child {\n margin-right: 0;\n }\n .ag-rtl .ag-chart-mini-thumbnail:last-child {\n margin-left: 0;\n }\n .ag-chart-mini-thumbnail.ag-selected {\n border-color: var(--ag-minichart-selected-chart-color);\n }\n\n .ag-chart-settings-card-item {\n background: var(--ag-foreground-color);\n width: 8px;\n height: 8px;\n border-radius: 4px;\n }\n .ag-chart-settings-card-item.ag-selected {\n background-color: var(--ag-minichart-selected-page-color);\n }\n\n .ag-chart-data-column-drag-handle {\n margin-left: var(--ag-grid-size);\n }\n\n .ag-charts-settings-group-title-bar,\n .ag-charts-data-group-title-bar,\n .ag-charts-format-top-level-group-title-bar {\n border-top: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n }\n\n .ag-charts-settings-group-container {\n padding: var(--ag-grid-size);\n }\n\n .ag-charts-data-group-container {\n padding: calc(var(--ag-widget-container-vertical-padding) * 0.5)\n var(--ag-widget-container-horizontal-padding);\n }\n .ag-charts-data-group-container\n .ag-charts-data-group-item:not(.ag-charts-format-sub-level-group) {\n height: var(--ag-list-item-height);\n }\n .ag-charts-data-group-container .ag-list-item-hovered::after {\n content: '';\n position: absolute;\n left: 0;\n right: 0;\n height: 1px;\n background-color: var(--ag-range-selection-border-color);\n }\n .ag-charts-data-group-container .ag-item-highlight-top::after {\n top: 0;\n }\n .ag-charts-data-group-container .ag-item-highlight-bottom::after {\n bottom: 0;\n }\n\n .ag-charts-format-top-level-group-container {\n margin-left: calc(var(--ag-grid-size) * 2);\n padding: var(--ag-grid-size);\n }\n\n .ag-charts-format-top-level-group-item {\n margin: var(--ag-grid-size) 0;\n }\n\n .ag-charts-format-sub-level-group-container {\n padding: var(--ag-widget-container-vertical-padding)\n var(--ag-widget-container-horizontal-padding);\n padding-bottom: calc(\n var(--ag-widget-container-vertical-padding) - var(--ag-widget-vertical-spacing)\n );\n }\n .ag-charts-format-sub-level-group-container > * {\n margin-bottom: var(--ag-widget-vertical-spacing);\n }\n\n .ag-charts-group-container.ag-group-container-horizontal {\n padding: var(--ag-grid-size);\n }\n\n .ag-chart-data-section,\n .ag-chart-format-section {\n display: flex;\n margin: 0;\n }\n\n .ag-chart-menu-panel {\n background-color: var(--ag-control-panel-background-color);\n }\n .ag-ltr .ag-chart-menu-panel {\n border-left: solid 1px var(--ag-border-color);\n }\n .ag-rtl .ag-chart-menu-panel {\n border-right: solid 1px var(--ag-border-color);\n }\n\n .ag-date-time-list-page-title-bar {\n display: flex;\n }\n\n .ag-date-time-list-page-title {\n flex-grow: 1;\n text-align: center;\n }\n\n .ag-date-time-list-page-column-labels-row,\n .ag-date-time-list-page-entries-row {\n display: flex;\n }\n\n .ag-date-time-list-page-column-label,\n .ag-date-time-list-page-entry {\n flex-basis: 0;\n flex-grow: 1;\n }\n\n .ag-date-time-list-page-entry {\n cursor: pointer;\n text-align: center;\n }\n\n .ag-date-time-list-page-column-label {\n text-align: center;\n }\n\n .ag-input-field-input {\n width: 100%;\n min-width: 0;\n }\n\n .ag-checkbox-input-wrapper {\n font-family: var(--ag-icon-font-family);\n font-size: var(--ag-icon-size);\n line-height: var(--ag-icon-size);\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n width: var(--ag-icon-size);\n height: var(--ag-icon-size);\n background-color: var(--ag-checkbox-background-color);\n border-radius: var(--ag-checkbox-border-radius);\n display: inline-block;\n vertical-align: middle;\n flex: none;\n }\n .ag-checkbox-input-wrapper input,\n .ag-checkbox-input-wrapper input {\n -webkit-appearance: none;\n opacity: 0;\n width: 100%;\n height: 100%;\n }\n .ag-checkbox-input-wrapper:focus-within,\n .ag-checkbox-input-wrapper:active {\n outline: none;\n box-shadow: var(--ag-input-focus-box-shadow);\n }\n .ag-checkbox-input-wrapper.ag-disabled {\n opacity: 0.5;\n }\n .ag-checkbox-input-wrapper::after {\n content: var(--ag-icon-font-code-checkbox-unchecked, '\\\\f108');\n color: var(--ag-checkbox-unchecked-color);\n position: absolute;\n top: 0;\n left: 0;\n pointer-events: none;\n }\n .ag-checkbox-input-wrapper.ag-checked::after {\n content: var(--ag-icon-font-code-checkbox-checked, '\\\\f106');\n color: var(--ag-checkbox-checked-color);\n position: absolute;\n top: 0;\n left: 0;\n pointer-events: none;\n }\n .ag-checkbox-input-wrapper.ag-indeterminate::after {\n content: var(--ag-icon-font-code-checkbox-indeterminate, '\\\\f107');\n color: var(--ag-checkbox-indeterminate-color);\n position: absolute;\n top: 0;\n left: 0;\n pointer-events: none;\n }\n\n .ag-toggle-button-input-wrapper {\n box-sizing: border-box;\n width: var(--ag-toggle-button-width);\n height: var(--ag-toggle-button-height);\n background-color: var(--ag-toggle-button-off-background-color);\n border-radius: calc(var(--ag-toggle-button-height) * 0.5);\n position: relative;\n flex: none;\n border: var(--ag-toggle-button-border-width) solid;\n border-color: var(--ag-toggle-button-off-border-color);\n }\n .ag-toggle-button-input-wrapper input {\n opacity: 0;\n height: 100%;\n width: 100%;\n }\n .ag-toggle-button-input-wrapper:focus-within {\n outline: none;\n box-shadow: var(--ag-input-focus-box-shadow);\n }\n .ag-toggle-button-input-wrapper.ag-disabled {\n opacity: 0.5;\n }\n .ag-toggle-button-input-wrapper.ag-checked {\n background-color: var(--ag-toggle-button-on-background-color);\n border-color: var(--ag-toggle-button-on-border-color);\n }\n .ag-toggle-button-input-wrapper::before {\n content: ' ';\n position: absolute;\n top: calc(0px - var(--ag-toggle-button-border-width));\n left: calc(0px - var(--ag-toggle-button-border-width));\n display: block;\n box-sizing: border-box;\n height: var(--ag-toggle-button-height);\n width: var(--ag-toggle-button-height);\n background-color: var(--ag-toggle-button-switch-background-color);\n border-radius: 100%;\n transition: left 100ms;\n border: var(--ag-toggle-button-border-width) solid;\n border-color: var(--ag-toggle-button-switch-border-color);\n }\n .ag-toggle-button-input-wrapper.ag-checked::before {\n left: calc(100% - var(--ag-toggle-button-height));\n border-color: var(--ag-toggle-button-on-border-color);\n }\n\n .ag-radio-button-input-wrapper {\n font-family: var(--ag-icon-font-family);\n font-size: var(--ag-icon-size);\n line-height: var(--ag-icon-size);\n font-style: normal;\n font-weight: normal;\n font-variant: normal;\n text-transform: none;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n width: var(--ag-icon-size);\n height: var(--ag-icon-size);\n background-color: var(--ag-checkbox-background-color);\n border-radius: var(--ag-checkbox-border-radius);\n display: inline-block;\n vertical-align: middle;\n flex: none;\n border-radius: var(--ag-icon-size);\n }\n .ag-radio-button-input-wrapper input,\n .ag-radio-button-input-wrapper input {\n -webkit-appearance: none;\n opacity: 0;\n width: 100%;\n height: 100%;\n }\n .ag-radio-button-input-wrapper:focus-within,\n .ag-radio-button-input-wrapper:active {\n outline: none;\n box-shadow: var(--ag-input-focus-box-shadow);\n }\n .ag-radio-button-input-wrapper.ag-disabled {\n opacity: 0.5;\n }\n .ag-radio-button-input-wrapper::after {\n content: var(--ag-icon-font-code-radio-button-off, '\\\\f126');\n color: var(--ag-checkbox-unchecked-color);\n position: absolute;\n top: 0;\n left: 0;\n pointer-events: none;\n }\n .ag-radio-button-input-wrapper.ag-checked::after {\n content: var(--ag-icon-font-code-radio-button-on, '\\\\f127');\n color: var(--ag-checkbox-checked-color);\n position: absolute;\n top: 0;\n left: 0;\n pointer-events: none;\n }\n\n input[class^='ag-'][type='range'] {\n -webkit-appearance: none;\n width: 100%;\n height: 100%;\n background: none;\n overflow: visible;\n }\n input[class^='ag-'][type='range']::-webkit-slider-runnable-track {\n margin: 0;\n padding: 0;\n width: 100%;\n height: 3px;\n background-color: var(--ag-border-color);\n border-radius: var(--ag-border-radius);\n border-radius: var(--ag-checkbox-border-radius);\n }\n input[class^='ag-'][type='range']::-moz-range-track {\n margin: 0;\n padding: 0;\n width: 100%;\n height: 3px;\n background-color: var(--ag-border-color);\n border-radius: var(--ag-border-radius);\n border-radius: var(--ag-checkbox-border-radius);\n }\n input[class^='ag-'][type='range']::-ms-track {\n margin: 0;\n padding: 0;\n width: 100%;\n height: 3px;\n background-color: var(--ag-border-color);\n border-radius: var(--ag-border-radius);\n border-radius: var(--ag-checkbox-border-radius);\n color: transparent;\n width: calc(100% - 2px);\n }\n input[class^='ag-'][type='range']::-webkit-slider-thumb {\n margin: 0;\n padding: 0;\n -webkit-appearance: none;\n width: var(--ag-icon-size);\n height: var(--ag-icon-size);\n background-color: var(--ag-background-color);\n border: 1px solid;\n border-color: var(--ag-checkbox-unchecked-color);\n border-radius: var(--ag-icon-size);\n transform: translateY(calc(var(--ag-icon-size) * -0.5 + 1.5px));\n }\n input[class^='ag-'][type='range']::-ms-thumb {\n margin: 0;\n padding: 0;\n -webkit-appearance: none;\n width: var(--ag-icon-size);\n height: var(--ag-icon-size);\n background-color: var(--ag-background-color);\n border: 1px solid;\n border-color: var(--ag-checkbox-unchecked-color);\n border-radius: var(--ag-icon-size);\n }\n input[class^='ag-'][type='range']::-moz-ag-range-thumb {\n margin: 0;\n padding: 0;\n -webkit-appearance: none;\n width: var(--ag-icon-size);\n height: var(--ag-icon-size);\n background-color: var(--ag-background-color);\n border: 1px solid;\n border-color: var(--ag-checkbox-unchecked-color);\n border-radius: var(--ag-icon-size);\n }\n input[class^='ag-'][type='range']:focus {\n outline: none;\n }\n input[class^='ag-'][type='range']:focus::-webkit-slider-thumb {\n box-shadow: var(--ag-input-focus-box-shadow);\n border-color: var(--ag-checkbox-checked-color);\n }\n input[class^='ag-'][type='range']:focus::-ms-thumb {\n box-shadow: var(--ag-input-focus-box-shadow);\n border-color: var(--ag-checkbox-checked-color);\n }\n input[class^='ag-'][type='range']:focus::-moz-ag-range-thumb {\n box-shadow: var(--ag-input-focus-box-shadow);\n border-color: var(--ag-checkbox-checked-color);\n }\n input[class^='ag-'][type='range']:active::-webkit-slider-runnable-track {\n background-color: var(--ag-input-focus-border-color);\n }\n input[class^='ag-'][type='range']:active::-moz-ag-range-track {\n background-color: var(--ag-input-focus-border-color);\n }\n input[class^='ag-'][type='range']:active::-ms-track {\n background-color: var(--ag-input-focus-border-color);\n }\n input[class^='ag-'][type='range']:disabled {\n opacity: 0.5;\n }\n`;\n","import { css } from '@microsoft/fast-element';\n/**\n * AG Alpine Theme (no fonts) CSS.\n * @public\n */\nexport const agThemeAlpineNofontsCSS = css `\n .ag-theme-alpine,\n .ag-theme-alpine-dark {\n --ag-alpine-active-color: #2196f3;\n --ag-selected-row-background-color: rgba(33, 150, 243, 0.3);\n --ag-row-hover-color: rgba(33, 150, 243, 0.1);\n --ag-column-hover-color: rgba(33, 150, 243, 0.1);\n --ag-input-focus-border-color: rgba(33, 150, 243, 0.4);\n --ag-range-selection-background-color: rgba(33, 150, 243, 0.2);\n --ag-range-selection-background-color-2: rgba(33, 150, 243, 0.36);\n --ag-range-selection-background-color-3: rgba(33, 150, 243, 0.49);\n --ag-range-selection-background-color-4: rgba(33, 150, 243, 0.59);\n --ag-background-color: #fff;\n --ag-foreground-color: #181d1f;\n --ag-border-color: #babfc7;\n --ag-secondary-border-color: #dde2eb;\n --ag-header-background-color: #f8f8f8;\n --ag-tooltip-background-color: #f8f8f8;\n --ag-odd-row-background-color: #fcfcfc;\n --ag-control-panel-background-color: #f8f8f8;\n --ag-subheader-background-color: #fff;\n --ag-invalid-color: #e02525;\n --ag-checkbox-unchecked-color: #999;\n --ag-checkbox-background-color: var(--ag-background-color);\n --ag-checkbox-checked-color: var(--ag-alpine-active-color);\n --ag-range-selection-border-color: var(--ag-alpine-active-color);\n --ag-secondary-foreground-color: var(--ag-foreground-color);\n --ag-input-border-color: var(--ag-border-color);\n --ag-input-border-color-invalid: var(--ag-invalid-color);\n --ag-input-focus-box-shadow: 0 0 2px 0.1rem var(--ag-input-focus-border-color);\n --ag-disabled-foreground-color: rgba(24, 29, 31, 0.5);\n --ag-chip-background-color: rgba(24, 29, 31, 0.07);\n --ag-input-disabled-border-color: rgba(186, 191, 199, 0.3);\n --ag-input-disabled-background-color: rgba(186, 191, 199, 0.15);\n --ag-borders: solid 1px;\n --ag-border-radius: 3px;\n --ag-borders-side-button: none;\n --ag-side-button-selected-background-color: transparent;\n --ag-header-column-resize-handle-display: block;\n --ag-header-column-resize-handle-width: 2px;\n --ag-header-column-resize-handle-height: 30%;\n --ag-grid-size: 6px;\n --ag-icon-size: 16px;\n --ag-row-height: calc(var(--ag-grid-size) * 7);\n --ag-header-height: calc(var(--ag-grid-size) * 8);\n --ag-list-item-height: calc(var(--ag-grid-size) * 4);\n --ag-column-select-indent-size: var(--ag-icon-size);\n --ag-set-filter-indent-size: var(--ag-icon-size);\n --ag-cell-horizontal-padding: calc(var(--ag-grid-size) * 3);\n --ag-cell-widget-spacing: calc(var(--ag-grid-size) * 2);\n --ag-widget-container-vertical-padding: calc(var(--ag-grid-size) * 2);\n --ag-widget-container-horizontal-padding: calc(var(--ag-grid-size) * 2);\n --ag-widget-vertical-spacing: calc(var(--ag-grid-size) * 1.5);\n --ag-toggle-button-height: 18px;\n --ag-toggle-button-width: 28px;\n --ag-font-family:\n -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell,\n 'Helvetica Neue', sans-serif;\n --ag-font-size: 13px;\n --ag-icon-font-family: agGridAlpine;\n --ag-selected-tab-underline-color: var(--ag-alpine-active-color);\n --ag-selected-tab-underline-width: 2px;\n --ag-selected-tab-underline-transition-speed: 0.3s;\n --ag-tab-min-width: 240px;\n --ag-card-shadow: 0 1px 4px 1px rgba(186, 191, 199, 0.4);\n --ag-popup-shadow: var(--ag-card-shadow);\n --ag-side-bar-panel-width: 250px;\n }\n\n .ag-theme-alpine-dark {\n --ag-background-color: #181d1f;\n --ag-foreground-color: #fff;\n --ag-border-color: #68686e;\n --ag-secondary-border-color: rgba(88, 86, 82, 0.5);\n --ag-modal-overlay-background-color: rgba(24, 29, 31, 0.66);\n --ag-header-background-color: #222628;\n --ag-tooltip-background-color: #222628;\n --ag-odd-row-background-color: #222628;\n --ag-control-panel-background-color: #222628;\n --ag-subheader-background-color: #000;\n --ag-input-disabled-background-color: #282c2f;\n --ag-input-focus-box-shadow:\n 0 0 2px 0.5px rgba(255, 255, 255, 0.5), 0 0 4px 3px var(--ag-input-focus-border-color);\n --ag-card-shadow: 0 1px 20px 1px black;\n --ag-disabled-foreground-color: rgba(255, 255, 255, 0.5);\n --ag-chip-background-color: rgba(255, 255, 255, 0.07);\n --ag-input-disabled-border-color: rgba(104, 104, 110, 0.3);\n --ag-input-disabled-background-color: rgba(104, 104, 110, 0.07);\n }\n\n .ag-theme-alpine .ag-filter-toolpanel-header,\n .ag-theme-alpine .ag-filter-toolpanel-search,\n .ag-theme-alpine .ag-status-bar,\n .ag-theme-alpine .ag-header-row,\n .ag-theme-alpine .ag-panel-title-bar-title,\n .ag-theme-alpine .ag-multi-filter-group-title-bar,\n .ag-theme-alpine-dark .ag-filter-toolpanel-header,\n .ag-theme-alpine-dark .ag-filter-toolpanel-search,\n .ag-theme-alpine-dark .ag-status-bar,\n .ag-theme-alpine-dark .ag-header-row,\n .ag-theme-alpine-dark .ag-panel-title-bar-title,\n .ag-theme-alpine-dark .ag-multi-filter-group-title-bar {\n font-weight: 700;\n color: var(--ag-header-foreground-color);\n }\n .ag-theme-alpine .ag-row,\n .ag-theme-alpine-dark .ag-row {\n font-size: calc(var(--ag-font-size) + 1px);\n }\n .ag-theme-alpine input[class^='ag-']:not([type]),\n .ag-theme-alpine input[class^='ag-'][type='text'],\n .ag-theme-alpine input[class^='ag-'][type='number'],\n .ag-theme-alpine input[class^='ag-'][type='tel'],\n .ag-theme-alpine input[class^='ag-'][type='date'],\n .ag-theme-alpine input[class^='ag-'][type='datetime-local'],\n .ag-theme-alpine textarea[class^='ag-'],\n .ag-theme-alpine-dark input[class^='ag-']:not([type]),\n .ag-theme-alpine-dark input[class^='ag-'][type='text'],\n .ag-theme-alpine-dark input[class^='ag-'][type='number'],\n .ag-theme-alpine-dark input[class^='ag-'][type='tel'],\n .ag-theme-alpine-dark input[class^='ag-'][type='date'],\n .ag-theme-alpine-dark input[class^='ag-'][type='datetime-local'],\n .ag-theme-alpine-dark textarea[class^='ag-'] {\n min-height: calc(var(--ag-grid-size) * 4);\n border-radius: var(--ag-border-radius);\n }\n .ag-theme-alpine .ag-ltr input[class^='ag-']:not([type]),\n .ag-theme-alpine .ag-ltr input[class^='ag-'][type='text'],\n .ag-theme-alpine .ag-ltr input[class^='ag-'][type='number'],\n .ag-theme-alpine .ag-ltr input[class^='ag-'][type='tel'],\n .ag-theme-alpine .ag-ltr input[class^='ag-'][type='date'],\n .ag-theme-alpine .ag-ltr input[class^='ag-'][type='datetime-local'],\n .ag-theme-alpine .ag-ltr textarea[class^='ag-'],\n .ag-theme-alpine-dark .ag-ltr input[class^='ag-']:not([type]),\n .ag-theme-alpine-dark .ag-ltr input[class^='ag-'][type='text'],\n .ag-theme-alpine-dark .ag-ltr input[class^='ag-'][type='number'],\n .ag-theme-alpine-dark .ag-ltr input[class^='ag-'][type='tel'],\n .ag-theme-alpine-dark .ag-ltr input[class^='ag-'][type='date'],\n .ag-theme-alpine-dark .ag-ltr input[class^='ag-'][type='datetime-local'],\n .ag-theme-alpine-dark .ag-ltr textarea[class^='ag-'] {\n padding-left: var(--ag-grid-size);\n }\n\n .ag-theme-alpine .ag-rtl input[class^='ag-']:not([type]),\n .ag-theme-alpine .ag-rtl input[class^='ag-'][type='text'],\n .ag-theme-alpine .ag-rtl input[class^='ag-'][type='number'],\n .ag-theme-alpine .ag-rtl input[class^='ag-'][type='tel'],\n .ag-theme-alpine .ag-rtl input[class^='ag-'][type='date'],\n .ag-theme-alpine .ag-rtl input[class^='ag-'][type='datetime-local'],\n .ag-theme-alpine .ag-rtl textarea[class^='ag-'],\n .ag-theme-alpine-dark .ag-rtl input[class^='ag-']:not([type]),\n .ag-theme-alpine-dark .ag-rtl input[class^='ag-'][type='text'],\n .ag-theme-alpine-dark .ag-rtl input[class^='ag-'][type='number'],\n .ag-theme-alpine-dark .ag-rtl input[class^='ag-'][type='tel'],\n .ag-theme-alpine-dark .ag-rtl input[class^='ag-'][type='date'],\n .ag-theme-alpine-dark .ag-rtl input[class^='ag-'][type='datetime-local'],\n .ag-theme-alpine-dark .ag-rtl textarea[class^='ag-'] {\n padding-right: var(--ag-grid-size);\n }\n\n .ag-theme-alpine .ag-tab,\n .ag-theme-alpine-dark .ag-tab {\n padding: calc(var(--ag-grid-size) * 1.5);\n transition: color 0.4s;\n flex: 1 1 auto;\n }\n .ag-theme-alpine .ag-tab-selected,\n .ag-theme-alpine-dark .ag-tab-selected {\n color: var(--ag-alpine-active-color);\n }\n .ag-theme-alpine .ag-menu,\n .ag-theme-alpine-dark .ag-menu {\n background-color: var(--ag-control-panel-background-color);\n }\n .ag-theme-alpine .ag-menu-header,\n .ag-theme-alpine-dark .ag-menu-header {\n background-color: var(--ag-control-panel-background-color);\n padding-top: 1px;\n }\n .ag-theme-alpine .ag-tabs-header,\n .ag-theme-alpine-dark .ag-tabs-header {\n border-bottom: var(--ag-borders) var(--ag-border-color);\n }\n .ag-theme-alpine .ag-charts-settings-group-title-bar,\n .ag-theme-alpine .ag-charts-data-group-title-bar,\n .ag-theme-alpine .ag-charts-format-top-level-group-title-bar,\n .ag-theme-alpine-dark .ag-charts-settings-group-title-bar,\n .ag-theme-alpine-dark .ag-charts-data-group-title-bar,\n .ag-theme-alpine-dark .ag-charts-format-top-level-group-title-bar {\n padding: var(--ag-grid-size) calc(var(--ag-grid-size) * 2);\n line-height: calc(var(--ag-icon-size) + var(--ag-grid-size) - 2px);\n }\n .ag-theme-alpine .ag-chart-mini-thumbnail,\n .ag-theme-alpine-dark .ag-chart-mini-thumbnail {\n background-color: var(--ag-background-color);\n }\n .ag-theme-alpine .ag-chart-settings-nav-bar,\n .ag-theme-alpine-dark .ag-chart-settings-nav-bar {\n border-top: var(--ag-borders-secondary) var(--ag-secondary-border-color);\n }\n .ag-theme-alpine .ag-ltr .ag-group-title-bar-icon,\n .ag-theme-alpine-dark .ag-ltr .ag-group-title-bar-icon {\n margin-right: var(--ag-grid-size);\n }\n\n .ag-theme-alpine .ag-rtl .ag-group-title-bar-icon,\n .ag-theme-alpine-dark .ag-rtl .ag-group-title-bar-icon {\n margin-left: var(--ag-grid-size);\n }\n\n .ag-theme-alpine .ag-charts-format-top-level-group-toolbar,\n .ag-theme-alpine-dark .ag-charts-format-top-level-group-toolbar {\n margin-top: var(--ag-grid-size);\n }\n .ag-theme-alpine .ag-ltr .ag-charts-format-top-level-group-toolbar,\n .ag-theme-alpine-dark .ag-ltr .ag-charts-format-top-level-group-toolbar {\n padding-left: calc(var(--ag-icon-size) * 0.5 + var(--ag-grid-size) * 2);\n }\n\n .ag-theme-alpine .ag-rtl .ag-charts-format-top-level-group-toolbar,\n .ag-theme-alpine-dark .ag-rtl .ag-charts-format-top-level-group-toolbar {\n padding-right: calc(var(--ag-icon-size) * 0.5 + var(--ag-grid-size) * 2);\n }\n\n .ag-theme-alpine .ag-charts-format-sub-level-group,\n .ag-theme-alpine-dark .ag-charts-format-sub-level-group {\n border-left: dashed 1px;\n border-left-color: var(--ag-border-color);\n padding-left: var(--ag-grid-size);\n margin-bottom: calc(var(--ag-grid-size) * 2);\n }\n .ag-theme-alpine .ag-charts-format-sub-level-group-title-bar,\n .ag-theme-alpine-dark .ag-charts-format-sub-level-group-title-bar {\n padding-top: 0;\n padding-bottom: 0;\n background: none;\n font-weight: 700;\n }\n .ag-theme-alpine .ag-charts-format-sub-level-group-container,\n .ag-theme-alpine-dark .ag-charts-format-sub-level-group-container {\n padding-bottom: 0;\n }\n .ag-theme-alpine .ag-charts-format-sub-level-group-item:last-child,\n .ag-theme-alpine-dark .ag-charts-format-sub-level-group-item:last-child {\n margin-bottom: 0;\n }\n .ag-theme-alpine.ag-dnd-ghost,\n .ag-theme-alpine-dark.ag-dnd-ghost {\n font-size: calc(var(--ag-font-size) - 1px);\n font-weight: 700;\n }\n .ag-theme-alpine .ag-side-buttons,\n .ag-theme-alpine-dark .ag-side-buttons {\n width: calc(var(--ag-grid-size) * 5);\n }\n .ag-theme-alpine .ag-standard-button,\n .ag-theme-alpine-dark .ag-standard-button {\n appearance: none;\n -webkit-appearance: none;\n border-radius: var(--ag-border-radius);\n border: 1px solid;\n border-color: var(--ag-alpine-active-color);\n color: var(--ag-alpine-active-color);\n background-color: var(--ag-background-color);\n font-weight: 600;\n padding: var(--ag-grid-size) calc(var(--ag-grid-size) * 2);\n }\n .ag-theme-alpine .ag-standard-button:hover,\n .ag-theme-alpine-dark .ag-standard-button:hover {\n border-color: var(--ag-alpine-active-color);\n background-color: var(--ag-row-hover-color);\n }\n .ag-theme-alpine .ag-standard-button:active,\n .ag-theme-alpine-dark .ag-standard-button:active {\n border-color: var(--ag-alpine-active-color);\n background-color: var(--ag-alpine-active-color);\n color: var(--ag-background-color);\n }\n .ag-theme-alpine .ag-standard-button:disabled,\n .ag-theme-alpine-dark .ag-standard-button:disabled {\n color: var(--ag-disabled-foreground-color);\n background-color: var(--ag-input-disabled-background-color);\n border-color: var(--ag-input-disabled-border-color);\n }\n .ag-theme-alpine .ag-column-drop-vertical,\n .ag-theme-alpine-dark .ag-column-drop-vertical {\n min-height: 75px;\n }\n .ag-theme-alpine .ag-column-drop-vertical-title-bar,\n .ag-theme-alpine-dark .ag-column-drop-vertical-title-bar {\n padding: calc(var(--ag-grid-size) * 2);\n padding-bottom: 0px;\n }\n .ag-theme-alpine .ag-column-drop-vertical-empty-message,\n .ag-theme-alpine-dark .ag-column-drop-vertical-empty-message {\n display: flex;\n align-items: center;\n border: dashed 1px;\n border-color: var(--ag-border-color);\n margin: calc(var(--ag-grid-size) * 2);\n padding: calc(var(--ag-grid-size) * 2);\n }\n .ag-theme-alpine .ag-column-drop-empty-message,\n .ag-theme-alpine-dark .ag-column-drop-empty-message {\n color: var(--ag-foreground-color);\n opacity: 0.75;\n }\n .ag-theme-alpine .ag-status-bar,\n .ag-theme-alpine-dark .ag-status-bar {\n font-weight: normal;\n }\n .ag-theme-alpine .ag-status-name-value-value,\n .ag-theme-alpine-dark .ag-status-name-value-value {\n font-weight: 700;\n }\n .ag-theme-alpine .ag-paging-number,\n .ag-theme-alpine .ag-paging-row-summary-panel-number,\n .ag-theme-alpine-dark .ag-paging-number,\n .ag-theme-alpine-dark .ag-paging-row-summary-panel-number {\n font-weight: 700;\n }\n .ag-theme-alpine .ag-column-drop-cell-button,\n .ag-theme-alpine-dark .ag-column-drop-cell-button {\n opacity: 0.5;\n }\n .ag-theme-alpine .ag-column-drop-cell-button:hover,\n .ag-theme-alpine-dark .ag-column-drop-cell-button:hover {\n opacity: 0.75;\n }\n .ag-theme-alpine .ag-header-cell-menu-button:hover,\n .ag-theme-alpine .ag-side-button-button:hover,\n .ag-theme-alpine .ag-tab:hover,\n .ag-theme-alpine .ag-panel-title-bar-button:hover,\n .ag-theme-alpine .ag-header-expand-icon:hover,\n .ag-theme-alpine .ag-column-group-icons:hover,\n .ag-theme-alpine .ag-set-filter-group-icons:hover,\n .ag-theme-alpine .ag-group-expanded .ag-icon:hover,\n .ag-theme-alpine .ag-group-contracted .ag-icon:hover,\n .ag-theme-alpine .ag-chart-settings-prev:hover,\n .ag-theme-alpine .ag-chart-settings-next:hover,\n .ag-theme-alpine .ag-group-title-bar-icon:hover,\n .ag-theme-alpine .ag-column-select-header-icon:hover,\n .ag-theme-alpine .ag-floating-filter-button-button:hover,\n .ag-theme-alpine .ag-filter-toolpanel-expand:hover,\n .ag-theme-alpine .ag-chart-menu-icon:hover,\n .ag-theme-alpine .ag-chart-menu-close:hover,\n .ag-theme-alpine-dark .ag-header-cell-menu-button:hover,\n .ag-theme-alpine-dark .ag-side-button-button:hover,\n .ag-theme-alpine-dark .ag-tab:hover,\n .ag-theme-alpine-dark .ag-panel-title-bar-button:hover,\n .ag-theme-alpine-dark .ag-header-expand-icon:hover,\n .ag-theme-alpine-dark .ag-column-group-icons:hover,\n .ag-theme-alpine-dark .ag-set-filter-group-icons:hover,\n .ag-theme-alpine-dark .ag-group-expanded .ag-icon:hover,\n .ag-theme-alpine-dark .ag-group-contracted .ag-icon:hover,\n .ag-theme-alpine-dark .ag-chart-settings-prev:hover,\n .ag-theme-alpine-dark .ag-chart-settings-next:hover,\n .ag-theme-alpine-dark .ag-group-title-bar-icon:hover,\n .ag-theme-alpine-dark .ag-column-select-header-icon:hover,\n .ag-theme-alpine-dark .ag-floating-filter-button-button:hover,\n .ag-theme-alpine-dark .ag-filter-toolpanel-expand:hover,\n .ag-theme-alpine-dark .ag-chart-menu-icon:hover,\n .ag-theme-alpine-dark .ag-chart-menu-close:hover {\n color: var(--ag-alpine-active-color);\n }\n .ag-theme-alpine .ag-chart-menu-close,\n .ag-theme-alpine-dark .ag-chart-menu-close {\n background: var(--ag-background-color);\n }\n .ag-theme-alpine .ag-chart-menu-close:hover .ag-icon,\n .ag-theme-alpine-dark .ag-chart-menu-close:hover .ag-icon {\n border-color: var(--ag-alpine-active-color);\n }\n .ag-theme-alpine .ag-chart-menu-close .ag-icon,\n .ag-theme-alpine-dark .ag-chart-menu-close .ag-icon {\n background: var(--ag-header-background-color);\n border: 1px solid var(--ag-border-color);\n border-right: none;\n }\n .ag-theme-alpine .ag-chart-settings-card-item.ag-not-selected:hover,\n .ag-theme-alpine-dark .ag-chart-settings-card-item.ag-not-selected:hover {\n opacity: 0.35;\n }\n .ag-theme-alpine .ag-ltr .ag-panel-title-bar-button,\n .ag-theme-alpine-dark .ag-ltr .ag-panel-title-bar-button {\n margin-left: calc(var(--ag-grid-size) * 2);\n margin-right: var(--ag-grid-size);\n }\n\n .ag-theme-alpine .ag-rtl .ag-panel-title-bar-button,\n .ag-theme-alpine-dark .ag-rtl .ag-panel-title-bar-button {\n margin-right: calc(var(--ag-grid-size) * 2);\n margin-left: var(--ag-grid-size);\n }\n\n .ag-theme-alpine .ag-ltr .ag-filter-toolpanel-group-container,\n .ag-theme-alpine-dark .ag-ltr .ag-filter-toolpanel-group-container {\n padding-left: var(--ag-grid-size);\n }\n\n .ag-theme-alpine .ag-rtl .ag-filter-toolpanel-group-container,\n .ag-theme-alpine-dark .ag-rtl .ag-filter-toolpanel-group-container {\n padding-right: var(--ag-grid-size);\n }\n\n .ag-theme-alpine .ag-filter-toolpanel-instance-filter,\n .ag-theme-alpine-dark .ag-filter-toolpanel-instance-filter {\n border: none;\n background-color: var(--ag-control-panel-background-color);\n }\n .ag-theme-alpine .ag-ltr .ag-filter-toolpanel-instance-filter,\n .ag-theme-alpine-dark .ag-ltr .ag-filter-toolpanel-instance-filter {\n border-left: dashed 1px;\n border-left-color: var(--ag-border-color);\n margin-left: calc(var(--ag-icon-size) * 0.5);\n }\n\n .ag-theme-alpine .ag-rtl .ag-filter-toolpanel-instance-filter,\n .ag-theme-alpine-dark .ag-rtl .ag-filter-toolpanel-instance-filter {\n border-right: dashed 1px;\n border-right-color: var(--ag-border-color);\n margin-right: calc(var(--ag-icon-size) * 0.5);\n }\n\n .ag-theme-alpine .ag-set-filter-list,\n .ag-theme-alpine-dark .ag-set-filter-list {\n padding-top: calc(var(--ag-grid-size) * 0.5);\n padding-bottom: calc(var(--ag-grid-size) * 0.5);\n }\n .ag-theme-alpine .ag-layout-auto-height .ag-center-cols-clipper,\n .ag-theme-alpine .ag-layout-auto-height .ag-center-cols-container,\n .ag-theme-alpine .ag-layout-print .ag-center-cols-clipper,\n .ag-theme-alpine .ag-layout-print .ag-center-cols-container,\n .ag-theme-alpine-dark .ag-layout-auto-height .ag-center-cols-clipper,\n .ag-theme-alpine-dark .ag-layout-auto-height .ag-center-cols-container,\n .ag-theme-alpine-dark .ag-layout-print .ag-center-cols-clipper,\n .ag-theme-alpine-dark .ag-layout-print .ag-center-cols-container {\n min-height: 150px;\n }\n .ag-theme-alpine .ag-overlay-no-rows-wrapper.ag-layout-auto-height,\n .ag-theme-alpine-dark .ag-overlay-no-rows-wrapper.ag-layout-auto-height {\n padding-top: 60px;\n }\n .ag-theme-alpine .ag-date-time-list-page-entry-is-current,\n .ag-theme-alpine-dark .ag-date-time-list-page-entry-is-current {\n background-color: var(--ag-alpine-active-color);\n }\n\n .ag-theme-alpine-dark {\n color-scheme: dark;\n }\n`;\n","import { css } from '@microsoft/fast-element';\n/**\n * AG Balham Theme (no fonts) CSS.\n * @public\n */\nexport const agThemeBalhamNofontsCSS = css `\n .ag-theme-balham,\n .ag-theme-balham-dark {\n --ag-balham-active-color: #0091ea;\n --ag-foreground-color: #000;\n --ag-background-color: #fff;\n --ag-header-background-color: #f5f7f7;\n --ag-tooltip-background-color: #cbd0d3;\n --ag-subheader-background-color: #e2e9eb;\n --ag-control-panel-background-color: #f5f7f7;\n --ag-border-color: #bdc3c7;\n --ag-odd-row-background-color: #fcfdfe;\n --ag-row-hover-color: #ecf0f1;\n --ag-column-hover-color: #ecf0f1;\n --ag-input-border-color: #95a5a6;\n --ag-invalid-color: #e02525;\n --ag-input-disabled-background-color: #ebebeb;\n --ag-checkbox-unchecked-color: #7f8c8d;\n --ag-input-focus-border-color: #719ece;\n --ag-input-focus-box-shadow: 0 0 2px 1px var(--ag-input-focus-border-color);\n --ag-range-selection-border-color: var(--ag-balham-active-color);\n --ag-checkbox-checked-color: var(--ag-balham-active-color);\n --ag-checkbox-background-color: var(--ag-background-color);\n --ag-secondary-foreground-color: rgba(0, 0, 0, 0.54);\n --ag-disabled-foreground-color: rgba(0, 0, 0, 0.38);\n --ag-subheader-toolbar-background-color: rgba(226, 233, 235, 0.5);\n --ag-row-border-color: rgba(189, 195, 199, 0.58);\n --ag-chip-background-color: rgba(0, 0, 0, 0.1);\n --ag-range-selection-background-color: rgba(0, 145, 234, 0.2);\n --ag-range-selection-background-color-2: rgba(0, 145, 234, 0.36);\n --ag-range-selection-background-color-3: rgba(0, 145, 234, 0.49);\n --ag-range-selection-background-color-4: rgba(0, 145, 234, 0.59);\n --ag-selected-row-background-color: rgba(0, 145, 234, 0.28);\n --ag-header-column-separator-color: rgba(189, 195, 199, 0.5);\n --ag-input-disabled-border-color: rgba(149, 165, 166, 0.3);\n --ag-header-column-separator-display: block;\n --ag-header-column-separator-height: 50%;\n --ag-grid-size: 4px;\n --ag-icon-size: 16px;\n --ag-row-height: calc(var(--ag-grid-size) * 7);\n --ag-header-height: calc(var(--ag-grid-size) * 8);\n --ag-list-item-height: calc(var(--ag-grid-size) * 6);\n --ag-row-group-indent-size: calc(var(--ag-grid-size) * 3 + var(--ag-icon-size));\n --ag-cell-horizontal-padding: calc(var(--ag-grid-size) * 3);\n --ag-input-height: calc(var(--ag-grid-size) * 4);\n --ag-font-family:\n -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell,\n 'Helvetica Neue', sans-serif;\n --ag-font-size: 12px;\n --ag-icon-font-family: agGridBalham;\n --ag-border-radius: 2px;\n --ag-checkbox-border-radius: 3px;\n --ag-card-shadow: none;\n }\n\n .ag-theme-balham-dark {\n --ag-balham-active-color: #00b0ff;\n --ag-foreground-color: #f5f5f5;\n --ag-background-color: #2d3436;\n --ag-header-background-color: #1c1c1c;\n --ag-tooltip-background-color: #1c1f20;\n --ag-subheader-background-color: #111;\n --ag-control-panel-background-color: #202020;\n --ag-border-color: #424242;\n --ag-odd-row-background-color: #262c2e;\n --ag-row-hover-color: #3d4749;\n --ag-column-hover-color: #3d4749;\n --ag-input-border-color: #f0f0f0;\n --ag-input-disabled-background-color: rgba(48, 46, 46, 0.3);\n --ag-modal-overlay-background-color: rgba(45, 52, 54, 0.66);\n --ag-checkbox-unchecked-color: #ecf0f1;\n --ag-secondary-foreground-color: var(--ag-foreground-color);\n --ag-disabled-foreground-color: rgba(245, 245, 245, 0.38);\n --ag-subheader-toolbar-background-color: rgba(17, 17, 17, 0.5);\n --ag-row-border-color: #5c5c5c;\n --ag-chip-background-color: rgba(245, 245, 245, 0.08);\n --ag-range-selection-background-color: rgba(0, 176, 255, 0.2);\n --ag-range-selection-background-color-2: rgba(0, 176, 255, 0.36);\n --ag-range-selection-background-color-3: rgba(0, 176, 255, 0.49);\n --ag-range-selection-background-color-4: rgba(0, 176, 255, 0.59);\n --ag-selected-row-background-color: rgba(0, 176, 255, 0.28);\n --ag-header-column-separator-color: rgba(66, 66, 66, 0.5);\n --ag-input-disabled-border-color: rgba(240, 240, 240, 0.3);\n --ag-header-foreground-color: rgba(245, 245, 245, 0.64);\n --ag-toggle-button-off-background-color: transparent;\n --ag-toggle-button-off-border-color: var(--ag-foreground-color);\n --ag-range-selection-chart-category-background-color: rgba(26, 177, 74, 0.5);\n --ag-range-selection-chart-background-color: rgba(45, 166, 255, 0.5);\n --ag-input-focus-box-shadow: 0 0 4px 1.5px var(--ag-input-focus-border-color);\n }\n\n .ag-theme-balham .ag-filter-toolpanel-header,\n .ag-theme-balham .ag-filter-toolpanel-search,\n .ag-theme-balham .ag-status-bar,\n .ag-theme-balham .ag-header-row,\n .ag-theme-balham .ag-multi-filter-group-title-bar,\n .ag-theme-balham-dark .ag-filter-toolpanel-header,\n .ag-theme-balham-dark .ag-filter-toolpanel-search,\n .ag-theme-balham-dark .ag-status-bar,\n .ag-theme-balham-dark .ag-header-row,\n .ag-theme-balham-dark .ag-multi-filter-group-title-bar {\n font-weight: 600;\n color: var(--ag-header-foreground-color);\n }\n .ag-theme-balham .ag-ltr input[class^='ag-']:not([type]),\n .ag-theme-balham .ag-ltr input[class^='ag-'][type='text'],\n .ag-theme-balham .ag-ltr input[class^='ag-'][type='number'],\n .ag-theme-balham .ag-ltr input[class^='ag-'][type='tel'],\n .ag-theme-balham .ag-ltr input[class^='ag-'][type='date'],\n .ag-theme-balham .ag-ltr input[class^='ag-'][type='datetime-local'],\n .ag-theme-balham .ag-ltr textarea[class^='ag-'],\n .ag-theme-balham-dark .ag-ltr input[class^='ag-']:not([type]),\n .ag-theme-balham-dark .ag-ltr input[class^='ag-'][type='text'],\n .ag-theme-balham-dark .ag-ltr input[class^='ag-'][type='number'],\n .ag-theme-balham-dark .ag-ltr input[class^='ag-'][type='tel'],\n .ag-theme-balham-dark .ag-ltr input[class^='ag-'][type='date'],\n .ag-theme-balham-dark .ag-ltr input[class^='ag-'][type='datetime-local'],\n .ag-theme-balham-dark .ag-ltr textarea[class^='ag-'] {\n padding-left: var(--ag-grid-size);\n }\n\n .ag-theme-balham .ag-rtl input[class^='ag-']:not([type]),\n .ag-theme-balham .ag-rtl input[class^='ag-'][type='text'],\n .ag-theme-balham .ag-rtl input[class^='ag-'][type='number'],\n .ag-theme-balham .ag-rtl input[class^='ag-'][type='tel'],\n .ag-theme-balham .ag-rtl input[class^='ag-'][type='date'],\n .ag-theme-balham .ag-rtl input[class^='ag-'][type='datetime-local'],\n .ag-theme-balham .ag-rtl textarea[class^='ag-'],\n .ag-theme-balham-dark .ag-rtl input[class^='ag-']:not([type]),\n .ag-theme-balham-dark .ag-rtl input[class^='ag-'][type='text'],\n .ag-theme-balham-dark .ag-rtl input[class^='ag-'][type='number'],\n .ag-theme-balham-dark .ag-rtl input[class^='ag-'][type='tel'],\n .ag-theme-balham-dark .ag-rtl input[class^='ag-'][type='date'],\n .ag-theme-balham-dark .ag-rtl input[class^='ag-'][type='datetime-local'],\n .ag-theme-balham-dark .ag-rtl textarea[class^='ag-'] {\n padding-right: var(--ag-grid-size);\n }\n\n .ag-theme-balham .ag-column-drop-vertical-empty-message,\n .ag-theme-balham .ag-status-bar,\n .ag-theme-balham-dark .ag-column-drop-vertical-empty-message,\n .ag-theme-balham-dark .ag-status-bar {\n font-weight: 600;\n color: var(--ag-disabled-foreground-color);\n }\n .ag-theme-balham.ag-dnd-ghost,\n .ag-theme-balham-dark.ag-dnd-ghost {\n font-size: var(--ag-font-size);\n font-weight: 600;\n }\n .ag-theme-balham .ag-tab,\n .ag-theme-balham-dark .ag-tab {\n border: 1px solid transparent;\n padding: var(--ag-grid-size) calc(var(--ag-grid-size) * 2);\n margin: var(--ag-grid-size);\n margin-bottom: -1px;\n }\n .ag-theme-balham .ag-tab-selected,\n .ag-theme-balham-dark .ag-tab-selected {\n background-color: var(--ag-background-color);\n border-color: var(--ag-border-color);\n border-bottom-color: transparent;\n }\n .ag-theme-balham .ag-tabs-header,\n .ag-theme-balham-dark .ag-tabs-header {\n border-bottom: 1px solid var(--ag-border-color);\n }\n .ag-theme-balham .ag-column-drop-cell,\n .ag-theme-balham-dark .ag-column-drop-cell {\n height: calc(var(--ag-grid-size) * 6);\n }\n .ag-theme-balham .ag-column-drop-vertical-title,\n .ag-theme-balham-dark .ag-column-drop-vertical-title {\n color: var(--ag-foreground-color);\n }\n .ag-theme-balham .ag-column-drop-vertical-cell,\n .ag-theme-balham-dark .ag-column-drop-vertical-cell {\n margin-left: calc(var(--ag-grid-size) * 2);\n margin-right: calc(var(--ag-grid-size) * 2);\n }\n .ag-theme-balham .ag-column-drop-vertical-cell-text,\n .ag-theme-balham-dark .ag-column-drop-vertical-cell-text {\n margin-left: calc(var(--ag-grid-size) * 2);\n }\n .ag-theme-balham .ag-column-drop-vertical-icon,\n .ag-theme-balham-dark .ag-column-drop-vertical-icon {\n color: var(--ag-secondary-foreground-color);\n }\n .ag-theme-balham .ag-ltr .ag-column-drop-vertical-empty-message,\n .ag-theme-balham-dark .ag-ltr .ag-column-drop-vertical-empty-message {\n padding-left: calc(var(--ag-icon-size) + var(--ag-grid-size) * 2);\n padding-right: var(--ag-grid-size);\n }\n\n .ag-theme-balham .ag-rtl .ag-column-drop-vertical-empty-message,\n .ag-theme-balham-dark .ag-rtl .ag-column-drop-vertical-empty-message {\n padding-right: calc(var(--ag-icon-size) + var(--ag-grid-size) * 2);\n padding-left: var(--ag-grid-size);\n }\n\n .ag-theme-balham .ag-column-drop-horizontal,\n .ag-theme-balham-dark .ag-column-drop-horizontal {\n height: var(--ag-header-height);\n }\n .ag-theme-balham .ag-column-drop-empty,\n .ag-theme-balham-dark .ag-column-drop-empty {\n color: var(--ag-disabled-foreground-color);\n }\n .ag-theme-balham .ag-column-drop-horizontal-cell-text,\n .ag-theme-balham-dark .ag-column-drop-horizontal-cell-text {\n margin-left: calc(var(--ag-grid-size) * 2);\n }\n .ag-theme-balham .ag-column-drop-vertical,\n .ag-theme-balham-dark .ag-column-drop-vertical {\n padding-top: calc(var(--ag-grid-size) * 2);\n }\n .ag-theme-balham .ag-menu-header,\n .ag-theme-balham-dark .ag-menu-header {\n background-color: var(--ag-header-background-color);\n }\n .ag-theme-balham .ag-overlay-loading-center,\n .ag-theme-balham-dark .ag-overlay-loading-center {\n background-color: var(--ag-background-color);\n border: 1px solid var(--ag-border-color);\n color: var(--ag-foreground-color);\n padding: calc(var(--ag-grid-size) * 4);\n }\n .ag-theme-balham .ag-tooltip,\n .ag-theme-balham-dark .ag-tooltip {\n border: none;\n }\n .ag-theme-balham .ag-panel-title-bar-button-icon,\n .ag-theme-balham-dark .ag-panel-title-bar-button-icon {\n font-size: calc(var(--ag-icon-size) + var(--ag-grid-size));\n }\n .ag-theme-balham .ag-chart-data-section,\n .ag-theme-balham .ag-chart-format-section,\n .ag-theme-balham-dark .ag-chart-data-section,\n .ag-theme-balham-dark .ag-chart-format-section {\n padding-bottom: calc(var(--ag-grid-size) * 0.5);\n }\n .ag-theme-balham .ag-group-toolbar,\n .ag-theme-balham-dark .ag-group-toolbar {\n background-color: var(--ag-subheader-toolbar-background-color);\n }\n .ag-theme-balham .ag-chart-tab,\n .ag-theme-balham-dark .ag-chart-tab {\n padding-top: calc(var(--ag-grid-size) * 0.5);\n }\n .ag-theme-balham .ag-charts-format-sub-level-group-item,\n .ag-theme-balham-dark .ag-charts-format-sub-level-group-item {\n margin-bottom: calc(var(--ag-grid-size) * 1.5);\n }\n .ag-theme-balham .ag-chart-menu-close,\n .ag-theme-balham-dark .ag-chart-menu-close {\n background: var(--ag-background-color);\n }\n .ag-theme-balham .ag-chart-menu-close:hover .ag-icon,\n .ag-theme-balham-dark .ag-chart-menu-close:hover .ag-icon {\n border-color: var(--ag-border-color);\n }\n .ag-theme-balham .ag-chart-menu-close .ag-icon,\n .ag-theme-balham-dark .ag-chart-menu-close .ag-icon {\n background: var(--ag-header-background-color);\n border: 1px solid var(--ag-secondary-border-color);\n border-right: none;\n }\n\n .ag-theme-balham-dark {\n color-scheme: dark;\n }\n`;\n","import { css } from '@microsoft/fast-element';\n/**\n * AG Material Theme (no fonts) CSS.\n * @public\n */\nexport const agThemeMaterialNofontsCSS = css `\n .ag-theme-material {\n --ag-material-primary-color: #3f51b5;\n --ag-material-accent-color: #ff4081;\n --ag-foreground-color: rgba(0, 0, 0, 0.87);\n --ag-secondary-foreground-color: rgba(0, 0, 0, 0.54);\n --ag-disabled-foreground-color: rgba(0, 0, 0, 0.38);\n --ag-background-color: #fff;\n --ag-header-background-color: #fff;\n --ag-tooltip-background-color: #fff;\n --ag-subheader-background-color: #eee;\n --ag-subheader-toolbar-background-color: rgba(238, 238, 238, 0.5);\n --ag-header-cell-hover-background-color: #f2f2f2;\n --ag-chip-background-color: #e2e2e2;\n --ag-range-selection-background-color: rgba(122, 134, 203, 0.1);\n --ag-range-selection-background-color-2: rgba(122, 134, 203, 0.19);\n --ag-range-selection-background-color-3: rgba(122, 134, 203, 0.27);\n --ag-range-selection-background-color-4: rgba(122, 134, 203, 0.34);\n --ag-range-selection-highlight-color: #fce4ec;\n --ag-row-hover-color: #fafafa;\n --ag-column-hover-color: #fafafa;\n --ag-control-panel-background-color: #fafafa;\n --ag-selected-row-background-color: #eee;\n --ag-checkbox-unchecked-color: #333;\n --ag-value-change-value-highlight-background-color: #00acc1;\n --ag-side-button-selected-background-color: transparent;\n --ag-range-selection-border-color: var(--ag-material-primary-color);\n --ag-checkbox-checked-color: var(--ag-material-accent-color);\n --ag-borders: none;\n --ag-borders-critical: solid 1px;\n --ag-border-color: #e2e2e2;\n --ag-grid-size: 8px;\n --ag-icon-size: 18px;\n --ag-header-height: calc(var(--ag-grid-size) * 7);\n --ag-row-height: calc(var(--ag-grid-size) * 6);\n --ag-cell-horizontal-padding: calc(var(--ag-grid-size) * 3);\n --ag-list-item-height: calc(var(--ag-grid-size) * 4);\n --ag-row-group-indent-size: calc(var(--ag-grid-size) * 3 + var(--ag-icon-size));\n --ag-filter-tool-panel-sub-level-row-height: calc(var(--ag-grid-size) * 4);\n --ag-checkbox-border-radius: 2px;\n --ag-toggle-button-switch-border-width: 2px;\n --ag-toggle-button-height: var(--ag-icon-size);\n --ag-widget-container-horizontal-padding: calc(var(--ag-grid-size) * 1.5);\n --ag-widget-container-vertical-padding: calc(var(--ag-grid-size) * 2);\n --ag-widget-vertical-spacing: calc(var(--ag-grid-size) * 1.75);\n --ag-font-family: 'Roboto', sans-serif;\n --ag-font-size: 13px;\n --ag-icon-font-family: agGridMaterial;\n --ag-selected-tab-underline-color: var(--ag-material-primary-color);\n --ag-selected-tab-underline-width: 2px;\n --ag-input-focus-border-color: var(--ag-material-primary-color);\n --ag-input-focus-box-shadow: 0 0 0 5px rgba(32, 33, 36, 0.122);\n --ag-card-shadow:\n 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14),\n 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n --ag-card-radius: 2px;\n --ag-invalid-color: #e02525;\n }\n\n .ag-theme-material .ag-filter-toolpanel-header,\n .ag-theme-material .ag-filter-toolpanel-search,\n .ag-theme-material .ag-status-bar,\n .ag-theme-material .ag-header-row,\n .ag-theme-material .ag-panel-title-bar-title,\n .ag-theme-material .ag-multi-filter-group-title-bar {\n font-size: calc(var(--ag-font-size) - 1px);\n font-weight: 600;\n color: var(--ag-header-foreground-color);\n }\n .ag-theme-material .ag-tab {\n height: calc(var(--ag-grid-size) * 4.5);\n flex: 1 1 auto;\n }\n .ag-theme-material .ag-tabs-header,\n .ag-theme-material .ag-column-drop-horizontal {\n background-color: var(--ag-subheader-background-color);\n }\n .ag-theme-material .ag-tabs-body {\n padding: calc(var(--ag-grid-size) * 0.5) 0;\n }\n .ag-theme-material .ag-tabs-body .ag-menu-list {\n padding-top: 0;\n padding-bottom: 0;\n }\n .ag-theme-material .ag-header-cell,\n .ag-theme-material .ag-header-group-cell {\n transition: background-color 0.5s;\n }\n .ag-theme-material .ag-row-last:not(.ag-row-first) .ag-cell-inline-editing {\n bottom: 0;\n }\n .ag-theme-material .ag-cell-inline-editing {\n padding: var(--ag-grid-size);\n height: calc(var(--ag-row-height) + var(--ag-grid-size) * 3);\n border-color: var(--ag-border-color) !important;\n }\n .ag-theme-material .ag-has-focus .ag-cell-inline-editing {\n border-color: var(--ag-input-focus-border-color) !important;\n }\n .ag-theme-material .ag-side-button-button {\n color: var(--ag-foreground-color);\n }\n .ag-theme-material .ag-column-drop-vertical {\n border-bottom: solid 1px;\n border-bottom-color: var(--ag-border-color);\n padding-top: var(--ag-grid-size);\n }\n .ag-theme-material .ag-column-drop-vertical.ag-last-column-drop {\n border-bottom: none;\n }\n .ag-theme-material .ag-column-drop-vertical-cell {\n margin-left: 0;\n }\n .ag-theme-material .ag-column-drop-vertical-empty-message {\n font-size: calc(var(--ag-font-size) - 1px);\n font-weight: 600;\n color: var(--ag-disabled-foreground-color);\n }\n .ag-theme-material .ag-ltr .ag-column-drop-vertical-empty-message {\n padding-left: calc(var(--ag-icon-size) + var(--ag-grid-size) * 2);\n padding-right: var(--ag-grid-size);\n }\n\n .ag-theme-material .ag-rtl .ag-column-drop-vertical-empty-message {\n padding-right: calc(var(--ag-icon-size) + var(--ag-grid-size) * 2);\n padding-left: var(--ag-grid-size);\n }\n\n .ag-theme-material .ag-status-bar {\n border: solid 1px;\n border-color: var(--ag-border-color);\n }\n .ag-theme-material .ag-column-panel-column-select {\n border-top: solid 1px;\n border-top-color: var(--ag-border-color);\n }\n .ag-theme-material .ag-column-select,\n .ag-theme-material .ag-column-select-header {\n border-bottom: solid 1px;\n border-bottom-color: var(--ag-border-color);\n }\n .ag-theme-material .ag-column-select-header {\n height: var(--ag-header-height);\n }\n .ag-theme-material .ag-group-title-bar {\n padding: calc(var(--ag-grid-size) * 0.75) var(--ag-grid-size);\n }\n .ag-theme-material .ag-charts-format-sub-level-group-title-bar {\n padding: calc(var(--ag-grid-size) * 0.5) var(--ag-grid-size);\n }\n .ag-theme-material .ag-chart-data-section,\n .ag-theme-material .ag-chart-format-section {\n padding-bottom: calc(var(--ag-grid-size) * 0.5);\n }\n .ag-theme-material .ag-chart-menu-close {\n background: var(--ag-background-color);\n }\n .ag-theme-material .ag-chart-menu-close .ag-icon {\n background: var(--ag-subheader-background-color);\n }\n .ag-theme-material input[class^='ag-']:not([type]),\n .ag-theme-material input[class^='ag-'][type='text'],\n .ag-theme-material input[class^='ag-'][type='number'],\n .ag-theme-material input[class^='ag-'][type='tel'],\n .ag-theme-material input[class^='ag-'][type='date'],\n .ag-theme-material input[class^='ag-'][type='datetime-local'],\n .ag-theme-material textarea[class^='ag-'] {\n background: transparent;\n color: var(--ag-foreground-color);\n font-family: inherit;\n font-size: inherit;\n height: calc(var(--ag-grid-size) * 5);\n padding-bottom: var(--ag-grid-size);\n border-width: 0;\n border-bottom: 2px solid;\n border-bottom-color: var(--ag-border-color);\n }\n .ag-theme-material input[class^='ag-']:not([type]):focus,\n .ag-theme-material input[class^='ag-'][type='text']:focus,\n .ag-theme-material input[class^='ag-'][type='number']:focus,\n .ag-theme-material input[class^='ag-'][type='tel']:focus,\n .ag-theme-material input[class^='ag-'][type='date']:focus,\n .ag-theme-material input[class^='ag-'][type='datetime-local']:focus,\n .ag-theme-material textarea[class^='ag-']:focus {\n border-bottom: 2px solid;\n border-bottom-color: var(--ag-material-primary-color);\n outline: none;\n box-shadow: none;\n }\n .ag-theme-material input[class^='ag-']:not([type])::placeholder,\n .ag-theme-material input[class^='ag-'][type='text']::placeholder,\n .ag-theme-material input[class^='ag-'][type='number']::placeholder,\n .ag-theme-material input[class^='ag-'][type='tel']::placeholder,\n .ag-theme-material input[class^='ag-'][type='date']::placeholder,\n .ag-theme-material input[class^='ag-'][type='datetime-local']::placeholder,\n .ag-theme-material textarea[class^='ag-']::placeholder {\n color: var(--ag-disabled-foreground-color);\n }\n .ag-theme-material input[class^='ag-']:not([type]):disabled,\n .ag-theme-material input[class^='ag-'][type='text']:disabled,\n .ag-theme-material input[class^='ag-'][type='number']:disabled,\n .ag-theme-material input[class^='ag-'][type='tel']:disabled,\n .ag-theme-material input[class^='ag-'][type='date']:disabled,\n .ag-theme-material input[class^='ag-'][type='datetime-local']:disabled,\n .ag-theme-material textarea[class^='ag-']:disabled {\n border-bottom: 1px solid;\n border-bottom-color: var(--ag-border-color);\n }\n .ag-theme-material input[class^='ag-']:not([type]):invalid,\n .ag-theme-material input[class^='ag-'][type='text']:invalid,\n .ag-theme-material input[class^='ag-'][type='number']:invalid,\n .ag-theme-material input[class^='ag-'][type='tel']:invalid,\n .ag-theme-material input[class^='ag-'][type='date']:invalid,\n .ag-theme-material input[class^='ag-'][type='datetime-local']:invalid,\n .ag-theme-material textarea[class^='ag-']:invalid {\n border-width: 0;\n border-bottom: 1px solid;\n border-bottom-color: var(--ag-invalid-color);\n color: var(--ag-invalid-color);\n }\n .ag-theme-material .ag-standard-button {\n appearance: none;\n background-color: transparent;\n border: 0;\n color: var(--ag-material-primary-color);\n font-family: inherit;\n font-size: inherit;\n margin: 0;\n padding: 0;\n text-transform: uppercase;\n }\n .ag-theme-material .ag-standard-button:disabled {\n color: var(--ag-disabled-foreground-color);\n background-color: var(--ag-input-disabled-background-color);\n border-color: var(--ag-input-disabled-border-color);\n }\n .ag-theme-material.ag-dnd-ghost {\n font-size: calc(var(--ag-font-size) - 1px);\n font-weight: 600;\n }\n .ag-theme-material .ag-filter-toolpanel-header {\n height: calc(var(--ag-grid-size) * 4);\n }\n .ag-theme-material .ag-filter-toolpanel-group-level-0-header {\n height: calc(var(--ag-grid-size) * 7);\n }\n .ag-theme-material .ag-ltr .ag-filter-apply-panel-button {\n margin-left: var(--ag-grid-size);\n }\n\n .ag-theme-material .ag-rtl .ag-filter-apply-panel-button {\n margin-right: var(--ag-grid-size);\n }\n\n .ag-theme-material .ag-layout-auto-height .ag-center-cols-clipper,\n .ag-theme-material .ag-layout-auto-height .ag-center-cols-container,\n .ag-theme-material .ag-layout-print .ag-center-cols-clipper,\n .ag-theme-material .ag-layout-print .ag-center-cols-container {\n min-height: 150px;\n }\n .ag-theme-material .ag-overlay-no-rows-wrapper.ag-layout-auto-height {\n padding-top: 60px;\n }\n .ag-theme-material .ag-picker-field-wrapper:focus {\n box-shadow: 0 0 0 1px var(--ag-material-primary-color);\n }\n`;\n","import { css } from '@microsoft/fast-element';\nimport { agGridCSS } from './ag-grid-css';\nimport { agHeadCSS } from './ag-head-css';\nimport { agThemeAlpineNofontsCSS } from './ag-theme-alpine-no-font-css';\nimport { agThemeBalhamNofontsCSS } from './ag-theme-balham-no-font-css';\nimport { agThemeMaterialNofontsCSS } from './ag-theme-material-no-font-css';\nexport * from './fonts';\n/**\n * All External AG Grid Stock in one CSS.\n * @remarks This is a collection of multiple AG themes, only needed if the target element needs more than one stock theme.\n * @public\n */\nexport const agExternalStockStyles = css `\n ${agGridCSS}\n ${agHeadCSS}\n ${agThemeAlpineNofontsCSS}\n ${agThemeBalhamNofontsCSS}\n ${agThemeMaterialNofontsCSS}\n`;\n/**\n * All available External AG Grid Stock CSS.\n * @public\n */\nexport { agGridCSS, agHeadCSS, agThemeAlpineNofontsCSS, agThemeBalhamNofontsCSS, agThemeMaterialNofontsCSS, };\n","/**\n * Event names for datasource-grid communication\n * These represent datasource operations, not grid-specific actions\n */\nexport const datasourceEventNames = {\n // Initialization events\n initialize: 'datasource-initialize',\n ready: 'datasource-ready',\n // Data events\n dataLoaded: 'datasource-data-loaded',\n dataChanged: 'datasource-data-changed',\n dataCleared: 'datasource-data-cleared',\n // Schema events\n schemaUpdated: 'datasource-schema-updated',\n // Status events\n loadingStarted: 'datasource-loading-started',\n loadingFinished: 'datasource-loading-finished',\n noDataAvailable: 'datasource-no-data-available',\n moreDataAvailable: 'datasource-more-data-available',\n // Filter events\n filtersRestored: 'datasource-filters-restored',\n // Error events\n error: 'datasource-error',\n // Destroy datasource events\n destroy: 'datasource-destroy',\n // Size events\n sizeChanged: 'datasource-size-changed',\n // Server-side specific events\n cacheFilterConfig: 'cache-filter-config',\n refreshServerSide: 'refresh-server-side',\n setServerSideDatasource: 'set-server-side-datasource',\n addGridCssClass: 'add-grid-css-class',\n removeGridCssClass: 'remove-grid-css-class',\n applyServerSideTransaction: 'apply-server-side-transaction',\n};\n","/**\n * The Genesis Datasource events names.\n * @public\n */\nexport const gridProGenesisDatasourceEventNames = {\n error: 'datasource-error',\n dataInit: 'datasource-init',\n sizeChanged: 'datasource-size-changed',\n moreRowsChanged: 'more-rows-changed',\n};\n","import { FieldTypeEnum } from '@genesislcap/foundation-comms';\nimport { getEnumFilterParams } from '../grid-pro.definitions';\n/**\n * Returns a filter type based on the Grid Pro field/column type.\n * @param type - The type of the field/column\n * @returns The ag-grid filter type\n */\nexport function getFilterByFieldType(type) {\n switch (type === null || type === void 0 ? void 0 : type.toLowerCase()) {\n case 'int':\n case 'long':\n case 'double':\n case 'bigdecimal':\n case 'number':\n return 'agNumberColumnFilter';\n case 'date':\n case 'datetime':\n return 'agDateColumnFilter';\n case 'string':\n case 'enum':\n return 'agMultiColumnFilter';\n default:\n return 'agTextColumnFilter';\n }\n}\n/**\n * Returns the filter params based on the Grid Pro field/column type.\n * @param field - The field metadata\n * @returns the filter params for the specified field type\n * @remarks Currently only returns a default filter params object, for all field types\n * @alpha\n */\nexport function getClientSideFilterParamsByFieldType(field) {\n switch (field.type) {\n case FieldTypeEnum.DATE:\n case FieldTypeEnum.DATETIME: {\n return {\n comparator: function (filterLocalDateAtMidnight, cellValue) {\n if (!cellValue)\n return -1;\n const cellValueTime = new Date(cellValue).setHours(0, 0, 0, 0);\n const filterValueTime = filterLocalDateAtMidnight.getTime();\n if (cellValueTime === filterValueTime) {\n return 0;\n }\n if (cellValueTime < filterValueTime) {\n return -1;\n }\n if (cellValueTime > filterValueTime) {\n return 1;\n }\n },\n buttons: ['reset', 'apply'],\n closeOnApply: true,\n closeOnClear: true,\n maxNumConditions: 1,\n browserDatePicker: true,\n };\n }\n case FieldTypeEnum.ENUM: {\n return getEnumFilterParams(field, getFilterByFieldType(field.type));\n }\n }\n}\n","import { __awaiter, __decorate } from \"tslib\";\nimport { MessageType, ResourceType, dataServerResultFilter, normaliseCriteria, } from '@genesislcap/foundation-comms';\nimport { LifecycleMixin } from '@genesislcap/foundation-utils';\nimport { DOM, attr, customElement } from '@microsoft/fast-element';\nimport { BehaviorSubject, EMPTY } from 'rxjs';\nimport { catchError, debounceTime, skip, tap } from 'rxjs/operators';\nimport { GridProBaseDatasource, criteriaDelimiter } from '../datasource/base.datasource';\nimport { getClientSideFilterParamsByFieldType, getFilterByFieldType, } from '../datasource/client-side.grid-definitions';\nimport { logger } from '../utils/logger';\nimport { datasourceEventNames, } from './datasource-events.types';\nimport { gridProGenesisDatasourceEventNames } from './grid-pro-genesis-datasource.config';\nconst withoutFullInit = null;\nconst withoutColumnDefs = null;\n/**\n * The Genesis Datasource element, for CSRM-compatible data fetching and used exclusively by the GridPro element.\n * @remarks Only supports Client-Side Row Model.\n * @public\n */\nlet GridProGenesisDatasource = class GridProGenesisDatasource extends LifecycleMixin(GridProBaseDatasource) {\n constructor() {\n super(...arguments);\n // Cache for rowData array to avoid repeated Array.from() calls\n this.cachedRowArray = [];\n // Transaction data for grid operations\n this.transactionData = {\n add: [],\n remove: [],\n update: [],\n addIndex: 0,\n };\n this.keepColDefsOnClearRowData = false;\n this.requiresFullRowDataAndColDefs = true;\n this._lastMoreRows = false;\n this._isMoreRowsResult = false;\n this._nextOffset = 0;\n this._loadMoreCount = 0;\n }\n // DatasourceOptions\n criteriaChanged(oldCriteria, newCriteria) {\n return __awaiter(this, void 0, void 0, function* () {\n const criteriaIsNotDuplicate = oldCriteria !== normaliseCriteria(newCriteria, criteriaDelimiter);\n if (this.datasource.initialized && criteriaIsNotDuplicate) {\n yield this.reloadResourceData();\n }\n });\n }\n requestChanged(oldRequest, newRequest) {\n const requestIsNotDuplicate = oldRequest !== newRequest;\n if (this.datasource.initialized && requestIsNotDuplicate) {\n this.reloadResourceData();\n }\n }\n resourceNameChanged(oldValue, newValue) {\n if (!oldValue || oldValue === newValue)\n return;\n this.restart();\n }\n connectedCallback() {\n super.connectedCallback();\n const shouldRunConnect = this.shouldRunConnect;\n DOM.queueUpdate(() => {\n if (!shouldRunConnect)\n return;\n this.init();\n this.subscribeToConnection();\n });\n }\n disconnectedCallback() {\n super.disconnectedCallback();\n const shouldRunDisconnect = this.shouldRunDisconnect;\n DOM.queueUpdate(() => {\n if (!shouldRunDisconnect)\n return;\n this.destroy();\n this.unsubscribeFromConnection();\n });\n }\n deepClone() {\n const copy = super.deepClone();\n copy.deferredGridOptions = {};\n if (this.deferredGridOptions) {\n Object.keys(this.deferredGridOptions).forEach((key) => {\n if (typeof this.deferredGridOptions[key] === 'function') {\n copy.deferredGridOptions[key] = this.deferredGridOptions[key].bind(copy);\n }\n else if (key === 'columnDefs' && this.deferredGridOptions[key].length) {\n copy.deferredGridOptions[key] = this.colDefsDeepClone(key, copy);\n }\n else {\n copy.deferredGridOptions[key] = structuredClone(this.deferredGridOptions[key]);\n }\n });\n }\n copy.deferredColumnStates = structuredClone(this.deferredColumnStates);\n copy.request = structuredClone(this.request);\n return copy;\n }\n colDefsDeepClone(key, copy) {\n return this.deferredGridOptions[key].map((columnDefinition) => {\n const definitionCopy = {};\n Object.keys(columnDefinition).forEach((fieldKey) => {\n if (typeof columnDefinition[fieldKey] === 'function') {\n definitionCopy[fieldKey] = columnDefinition[fieldKey].bind(copy);\n }\n else {\n definitionCopy[fieldKey] = structuredClone(columnDefinition[fieldKey]);\n }\n });\n return definitionCopy;\n });\n }\n // Genesis Specific\n /**\n * Initializes the datasource.\n * @public\n * @param columnDefinitions - Optionally set the `gridOptions` up with column definitions\n * @param columnStates - Optionally set the grid up with column state\n * @remarks This method is called automatically when the element is connected to the DOM.\n */\n init(keepColDefsOnClearRowData) {\n return __awaiter(this, void 0, void 0, function* () {\n this.$emit(datasourceEventNames.initialize, {\n keepColDefsOnClearRowData,\n options: Object.assign({ getRowId: (params) => params.data[this.rowId] }, this.deferredGridOptions),\n });\n // TODO: instead of listening to ready event, we should only render the datasource slot when the grid is ready\n this.addEventListener(datasourceEventNames.ready, (event) => __awaiter(this, void 0, void 0, function* () {\n const { pagination } = event.detail;\n this.pagination = pagination;\n yield this.loadResourceData();\n }), { once: true });\n const filterDebounceTime = 600;\n this.updateSub = this.update\n .pipe(skip(1), debounceTime(filterDebounceTime), tap((f) => logger.debug('filters (debounced): ', f)))\n .subscribe((_) => {\n this.reloadResourceData();\n });\n });\n }\n /**\n * Destroys the datasource, resetting it to its initial state.\n * @public\n */\n destroy() {\n var _a;\n logger.debug('GridProGenesisDatasource.destroy()', this.resourceName);\n if (this.dataSub) {\n this.dataSub.unsubscribe();\n this.dataSub = undefined;\n }\n if (this.updateSub) {\n this.updateSub.unsubscribe();\n this.updateSub = undefined;\n }\n if (this.connectionSub) {\n this.connectionSub.unsubscribe();\n this.connectionSub = undefined;\n }\n this._sourceRef = undefined;\n this.clearRowData();\n this._lastMoreRows = false;\n this._isMoreRowsResult = false;\n this._nextOffset = 0;\n this._loadMoreCount = 0;\n this.$emit(datasourceEventNames.destroy);\n this.requiresFullRowDataAndColDefs = true;\n this.dataSubWasLoggedOff = false;\n this.criteriaFromFilters = new Map();\n (_a = this.update) === null || _a === void 0 ? void 0 : _a.unsubscribe();\n this.update = new BehaviorSubject(new Map());\n this.setDisconnected(false);\n // TODO: There may need to be a full destroy path. Datasources need some love!\n this.datasource.destroy();\n }\n /**\n * Deinitialises the datasource, resetting it to its initial state.\n * @deprecated Use `destroy` instead\n * @public\n */\n deinit() {\n logger.debug('GridProGenesisDatasource.deinit()', this.resourceName);\n this.destroy();\n }\n /**\n * Resets the datasource to its initial state.\n * @public\n * @deprecated Use `destroy` instead\n */\n reset() {\n logger.debug('GridProGenesisDatasource.reset()', this.resourceName);\n this.destroy();\n }\n /**\n * Restarts the datasource, uses `destroy` and `init` in sequence.\n * @public\n */\n restart() {\n return __awaiter(this, void 0, void 0, function* () {\n this.destroy();\n yield this.init(this.keepColDefsOnClearRowData);\n });\n }\n /**\n * Force the grid to redispatch the current rows\n */\n refreshRows() {\n this.updateCachedRowArray(); // Ensure the cache is up-to-date\n this.emitDataLoaded(this.cachedRowArray);\n }\n /**\n * Clears the rowData and columnDefs for the grid.\n * @remarks This is called when `reloadResourceData` happens, on criteria and filters change or full `reset`.\n * @param withColumnDefs - Whether to clear the columnDefs as well. Defaults to true.\n * @internal\n */\n clearRowData(withColumnDefs = true) {\n this.rowData = new Map();\n this.cachedRowArray = []; // Clear the cached array\n this.transactionData = { add: [], remove: [], update: [], addIndex: 0 };\n // Emit event to clear data\n this.$emit(datasourceEventNames.dataCleared, {\n includeSchema: withColumnDefs && !this.keepColDefsOnClearRowData,\n });\n }\n /**\n * Sets the columnDefs and rowData for the grid.\n * @remarks This should only happen once, when the grid is first initialized. Follow up updates will use transactions.\n * @internal\n */\n setRowData(rowData) {\n return __awaiter(this, void 0, void 0, function* () {\n const agColumnDefs = yield this.getAgColumnDefs(this.datasource.fieldMetadata);\n if (agColumnDefs) {\n this.$emit(datasourceEventNames.schemaUpdated, {\n schema: agColumnDefs,\n metadata: this.datasource.fieldMetadata,\n });\n }\n const data = this.rowDataMapper ? this.rowDataMapper(rowData) : rowData;\n this.$emit(datasourceEventNames.filtersRestored);\n // Use transactions for adding data\n this.transactionData = { add: data ? [...data] : [], remove: [], update: [], addIndex: 0 };\n this.emitDataChanged(this.transactionData);\n // Update the cached row array\n this.updateCachedRowArray();\n this.requiresFullRowDataAndColDefs = false;\n });\n }\n /**\n * Updates the cached row array from the rowData Map\n * @internal\n */\n updateCachedRowArray() {\n this.cachedRowArray = Array.from(this.rowData.values());\n }\n /**\n * Emits event to notify data has been loaded\n * @internal\n */\n emitDataLoaded(data, isInitialLoad = false) {\n this.$emit(datasourceEventNames.dataLoaded, {\n data,\n isInitialLoad,\n });\n }\n /**\n * Emits event to notify data has changed\n * @internal\n */\n emitDataChanged(transaction) {\n this.$emit(datasourceEventNames.dataChanged, {\n changes: transaction,\n });\n if (this.rowData.size === 0 &&\n !transaction.add.length &&\n !transaction.update.length &&\n !transaction.remove.length) {\n this.$emit(datasourceEventNames.noDataAvailable);\n }\n else {\n this.$emit(datasourceEventNames.loadingFinished);\n }\n }\n /**\n * Resets the grid data while keeping columnDefs and sends a DATA_LOGOFF message if it's a stream.\n * Loads resource data without full initialization (no metadata fetch).\n * @remarks This is used when the grid is already initialized and we want to reload the data due to a criteria/filter change.\n * @see loadResourceData\n * @public\n */\n reloadResourceData() {\n return __awaiter(this, void 0, void 0, function* () {\n logger.debug('GridProGenesisDatasource.reloadResourceData()', this.resourceName);\n if (this.dataSub) {\n this.dataSub.unsubscribe();\n this.dataSub = undefined;\n }\n // Reset load more tracking on reload\n this._nextOffset = 0;\n this._loadMoreCount = 0;\n this.datasource.updateLoadMoreCount(0);\n this.datasource.stream = undefined;\n this.clearRowData(withoutColumnDefs);\n this.$emit(datasourceEventNames.loadingStarted);\n this.setDisconnected(false);\n yield this.loadResourceData(withoutFullInit);\n });\n }\n /**\n * Initializes the datasource and loads the data for the grid.\n * Handles both snapshot and stream data (for both REQUEST_SERVER and DATASERVER resource types).\n *\n * @param withFullInit - if true, will call datasource.init() with requiresMetadataFetch = true, fetching fresh metadata\n * @see reloadResourceData\n * @internal\n */\n loadResourceData() {\n return __awaiter(this, arguments, void 0, function* (withFullInit = true) {\n const requiresMetadataFetch = withFullInit || !this.datasource.initialized;\n try {\n // Use the base datasource error handling\n const initOK = yield this.initializeDatasource(this.datasourceOptions(), requiresMetadataFetch, false);\n if (!initOK) {\n logger.debug(`Genesis Datasource init failed for ${this.resourceName}`);\n this.clearRowData();\n return;\n }\n this.$emit(gridProGenesisDatasourceEventNames.dataInit);\n if (this.isSnapshot) {\n const result = yield this.datasource.snapshot();\n if (result) {\n const rowData = this.handleSnapshot(result);\n this.setRowData(rowData);\n }\n return;\n }\n logger.debug(`starting stream for ${this.resourceName}`);\n yield this.datasource.startStream();\n this.dataSub = this.datasource.stream\n .pipe(catchError((err) => {\n var _a;\n // Use base error handling for stream errors\n this.handleErrors(((_a = err === null || err === void 0 ? void 0 : err.receivedMessage) === null || _a === void 0 ? void 0 : _a.ERROR) || (err === null || err === void 0 ? void 0 : err.message) || err, 'stream');\n return EMPTY;\n }))\n .subscribe((result) => {\n this._sourceRef = result.SOURCE_REF;\n const hasMoreRowsInResult = 'MORE_ROWS' in result;\n const hasRowsCountInResult = 'ROWS_COUNT' in result;\n const hasNextOffsetInResult = this.datasource.resourceType === ResourceType.REQUEST_SERVER && 'NEXT_OFFSET' in result;\n this._isMoreRowsResult = hasMoreRowsInResult && !hasRowsCountInResult;\n // Store NEXT_OFFSET for RequestServer load more functionality\n if (hasNextOffsetInResult) {\n this._nextOffset = result.NEXT_OFFSET;\n }\n if (result === null || result === void 0 ? void 0 : result.ERROR) {\n this.handleErrors(result.ERROR, 'criteria');\n }\n const messageType = result.MESSAGE_TYPE;\n if (messageType && messageType === MessageType.LOGOFF_ACK) {\n this.handleErrors(`Genesis datasource for ${this.resourceName} disconnected.`, 'connection');\n this.dataSubWasLoggedOff = true;\n return;\n }\n this.dataSubWasLoggedOff = false;\n if (hasMoreRowsInResult) {\n this.updateLoadMoreStatus(result.MORE_ROWS, result.SOURCE_REF);\n }\n if (result.ROW) {\n const nextMessage = dataServerResultFilter(result);\n this.handleStreamResult(nextMessage);\n if (hasMoreRowsInResult && result.MORE_ROWS !== this._lastMoreRows) {\n const moreRowsDetail = {\n moreRows: result.MORE_ROWS,\n sourceRef: result.SOURCE_REF,\n };\n this.$emit(gridProGenesisDatasourceEventNames.moreRowsChanged, moreRowsDetail);\n this._lastMoreRows = result.MORE_ROWS;\n }\n }\n else {\n this.handleStreamResult(result);\n }\n });\n }\n catch (error) {\n let { message } = error;\n if (error.receivedMessage) {\n message = error.receivedMessage.ERROR;\n }\n logger.error(message);\n // Use base error handling for general errors\n this.handleErrors(message, 'unknown');\n }\n });\n }\n handleSnapshot(result) {\n if (Array.isArray(result))\n return result;\n if (result.REPLY) {\n return result.REPLY;\n }\n if (result.ROW) {\n return dataServerResultFilter(result).inserts;\n }\n return result.inserts;\n }\n handleStreamResult(result) {\n if (!result)\n return;\n if (this.isRequestServer) {\n this.applyRequestServerData(result);\n }\n else {\n this.applyDataserverData(result);\n }\n }\n /**\n * Updates the status bar based on more rows status\n * @param moreRows - Whether more rows are available\n * @param sourceRef - The source reference\n * @param rowsCount - The total number of rows\n * @remarks\n * This method emits an event for the grid to handle status bar updates.\n */\n updateLoadMoreStatus(moreRows, sourceRef) {\n this.$emit(datasourceEventNames.moreDataAvailable, {\n hasMoreData: moreRows,\n sourceRef,\n });\n }\n applyRequestServerData(requestServerResult) {\n var _a;\n const previousSize = this.rowData.size;\n const requestServerData = requestServerResult.REPLY;\n if (!Array.isArray(requestServerData) ||\n !((_a = requestServerResult.MESSAGE_TYPE) === null || _a === void 0 ? void 0 : _a.startsWith('REP_'))) {\n logger.error('received invalid RequestServerResult', requestServerResult);\n return;\n }\n if (this.requiresFullRowDataAndColDefs) {\n let noRowIdError = false;\n for (const insertData of requestServerData || []) {\n const insertDataRowId = insertData[this.rowId];\n if (!insertDataRowId) {\n if (!noRowIdError) {\n const noRowIdMessage = `The specified rowId (${this.rowId}) is not present in the data. Since this is not a snapshot (isSnapshot=false), the data will not be loaded. Please provide a valid 'row-id' attribute.`;\n logger.error(noRowIdMessage);\n noRowIdError = true;\n }\n break;\n }\n this.rowData.set(insertDataRowId, insertData);\n }\n if (noRowIdError) {\n this.destroy();\n return;\n }\n // Update cache and use it if available\n this.updateCachedRowArray();\n const rowData = this.rowData.size > 0 ? this.cachedRowArray : requestServerData;\n this.handleSizeChanged(previousSize, this.rowData.size);\n this.setRowData(rowData);\n return;\n }\n const rowsToUpdate = [];\n // Update cache before using it\n this.updateCachedRowArray();\n const rowsToDelete = this.cachedRowArray.filter((row) => {\n const match = requestServerData.find((data) => data[this.rowId] === row[this.rowId]);\n if (match) {\n rowsToUpdate.push(match);\n return false; // don't delete rows that need to be updated\n }\n return true; // delete rows that don't exist in requestServerData\n });\n const rowsToInsert = requestServerData.filter((data) => !this.rowData.has(data[this.rowId]));\n this.transactionData = { add: [], remove: [], update: [] };\n this.handleStreamInserts(rowsToInsert);\n this.handleStreamDeletes(rowsToDelete);\n this.handleStreamUpdates(rowsToUpdate);\n this.emitDataChanged(this.transactionData);\n this.handleSizeChanged(previousSize, this.rowData.size);\n }\n applyDataserverData(dataServerResult) {\n var _a;\n const previousSize = this.rowData.size;\n if (this.requiresFullRowDataAndColDefs) {\n (_a = dataServerResult.inserts) === null || _a === void 0 ? void 0 : _a.forEach((insertData) => {\n this.rowData.set(insertData[this.rowId], insertData);\n });\n // Update and use the cached array\n this.updateCachedRowArray();\n this.setRowData(this.cachedRowArray);\n this.handleSizeChanged(previousSize, this.rowData.size);\n return;\n }\n this.transactionData = { add: [], remove: [], update: [] };\n this.handleStreamInserts(dataServerResult.inserts);\n this.handleStreamDeletes(dataServerResult.deletes);\n this.handleStreamUpdates(dataServerResult.updates);\n this.emitDataChanged(this.transactionData);\n this.handleSizeChanged(previousSize, this.rowData.size);\n }\n // FUTURE: Work with the field types vs ag grid column def types!\n getAgColumnDefs(fieldsMetadata) {\n return __awaiter(this, void 0, void 0, function* () {\n const columnDefsFromMetadata = this.generateColumnDefsFromMetadata(fieldsMetadata, getClientSideFilterParamsByFieldType, getFilterByFieldType);\n // Return the base column definitions - the grid will handle merging with template definitions\n return columnDefsFromMetadata;\n });\n }\n setFilter(fieldName, newFilter) {\n this.criteriaFromFilters.set(fieldName, newFilter);\n this.update.next(this.criteriaFromFilters);\n }\n removeFilter(fieldName) {\n this.criteriaFromFilters.delete(fieldName);\n this.update.next(this.criteriaFromFilters);\n }\n applyTransaction(transaction) {\n this.emitDataChanged(transaction);\n }\n handleSizeChanged(oldSize, newSize) {\n if (oldSize === newSize)\n return;\n this.$emit(gridProGenesisDatasourceEventNames.sizeChanged, {\n value: newSize,\n oldValue: oldSize,\n });\n }\n handleStreamInserts(inserts = []) {\n super.handleStreamInserts(inserts, this._isMoreRowsResult ? this.cachedRowArray.length : 0);\n this.updateCachedRowArray();\n }\n handleStreamUpdates(updates = []) {\n super.handleStreamUpdates(updates);\n this.updateCachedRowArray();\n }\n /**\n * Handles stream deletes by removing records from the grid.\n * @param deletes - List of records to remove from the grid stream\n */\n handleStreamDeletes(deletes = []) {\n super.handleStreamDeletes(deletes);\n this.updateCachedRowArray();\n }\n loadMore() {\n switch (this.datasource.resourceType) {\n case ResourceType.DATASERVER:\n let viewNumber;\n if (this.viewNumber) {\n this._loadMoreCount = +this.viewNumber + 1;\n viewNumber = this._loadMoreCount;\n }\n else {\n this._loadMoreCount += 1;\n }\n this.connect.getMoreRows(this._sourceRef, viewNumber);\n break;\n case ResourceType.REQUEST_SERVER:\n this._loadMoreCount += 1;\n // TODO: Will get back to this soon, want to improve loadMore for isSnapshot + extras\n // const requestParams = this.datasource.requestOnlyParams;\n // // Set OFFSET for the next request\n // if (requestParams.DETAILS) {\n // requestParams.DETAILS.OFFSET = this._nextOffset;\n // }\n // this.datasource.snapshot(requestParams).then((result) => {\n // this.applyRequestServerData(result as RequestServerResult);\n // });\n break;\n }\n this.datasource.updateLoadMoreCount(this._loadMoreCount);\n }\n};\n__decorate([\n attr({ mode: 'boolean', attribute: 'keep-col-defs-on-clear-row-data' })\n], GridProGenesisDatasource.prototype, \"keepColDefsOnClearRowData\", void 0);\nGridProGenesisDatasource = __decorate([\n customElement({\n name: 'grid-pro-genesis-datasource',\n })\n], GridProGenesisDatasource);\nexport { GridProGenesisDatasource };\n","import { formatDateTimestamp, formatDateTimeTimestamp } from '@genesislcap/foundation-utils';\n/**\n * Returns the filter params for enum fields based on the detected filter type.\n * @param field - The field metadata\n * @returns the filter params for enum fields, or undefined if not applicable\n */\nexport function getEnumFilterParams(field, filterType) {\n if (filterType === 'agMultiColumnFilter') {\n return {\n filters: [\n {\n filter: 'agTextColumnFilter',\n },\n {\n filter: 'agSetColumnFilter',\n filterParams: {\n values: field.enumOptions,\n },\n },\n ],\n };\n }\n if (filterType === 'agSetColumnFilter') {\n return {\n values: field.enumOptions,\n };\n }\n return undefined;\n}\n/**\n * Return a column type base on each field's metadata from the selected resource.\n * @param metadataType - The type of the field/column\n * @returns the column type\n * @remarks Currently only handles numeric columns\n * @alpha\n */\nexport function getColumnType(metadataType) {\n switch (metadataType === null || metadataType === void 0 ? void 0 : metadataType.toLowerCase()) {\n case 'int':\n case 'long':\n case 'double':\n case 'bigdecimal':\n case 'number':\n return 'numericColumn';\n }\n}\n/**\n * Returns a formatted date value from the Grid Pro cell value.\n * @param param - A ValueFormatterParams object.\n * @returns A formatted date value.\n * @public\n */\nexport function dateValueFormatter({ value }) {\n return formatDateTimestamp(value);\n}\n/**\n * Returns a formatted date time value from the Grid Pro cell value.\n * @param param - A ValueFormatterParams object.\n * @returns A formatted date time value.\n * @public\n */\nexport function dateTimeValueFormatter({ value }) {\n return formatDateTimeTimestamp(value);\n}\n// TODO: possible duplicate - need to evaluate the differences\nconst isoDateTimeSliceEnd = 19;\n/**\n * Returns a formatted date value from an epoch number.\n * @param epoch - A number representing the number of milliseconds since the Unix epoch (1 January 1970 00:00:00 UTC).\n * @returns A formatted date value.\n * @alpha\n * @deprecated No longer used in the Grid Pro package.\n */\nexport function formatDateExtra(epoch) {\n return new Date(epoch)\n .toISOString()\n .slice(0, isoDateTimeSliceEnd)\n .replace(/-/g, '')\n .replace('T', '-');\n}\n/**\n * The time between allowing the grids to automatically resize.\n * @internal\n */\nexport const DEBOUNCED_RESIZE_TIME = 5;\n/**\n * The event names for the Grid Pro component.\n * @public\n */\nexport const gridProEventNames = {\n datasourceErrorClose: 'datasource-error-close',\n};\n/**\n * The error names for the Grid Pro component.\n * @public\n */\nexport const gridProErrorNames = {\n datasource: 'datasource',\n unknown: 'unknown',\n};\n/**\n * @remarks List of AG properties without rowData\n * @privateRemarks This is was removed from ag-grid v35 but we need to support it for backwards compatibility.\n * @internal\n */\nexport const AG_PROPERTIES = [\n 'rowSelection',\n 'overlayLoadingTemplate',\n 'overlayNoRowsTemplate',\n 'quickFilterText',\n 'rowModelType',\n 'editType',\n 'domLayout',\n 'clipboardDelimiter',\n 'rowGroupPanelShow',\n 'multiSortKey',\n 'pivotColumnGroupTotals',\n 'pivotRowTotals',\n 'pivotPanelShow',\n 'fillHandleDirection',\n 'serverSideStoreType',\n 'groupDisplayType',\n 'treeDataDisplayType',\n 'colResizeDefault',\n 'components',\n 'frameworkComponents',\n 'rowStyle',\n 'context',\n 'autoGroupColumnDef',\n 'localeText',\n 'icons',\n 'datasource',\n 'serverSideDatasource',\n 'viewportDatasource',\n 'groupRowRendererParams',\n 'aggFuncs',\n 'fullWidthCellRendererParams',\n 'defaultColGroupDef',\n 'defaultColDef',\n 'defaultCsvExportParams',\n 'defaultExcelExportParams',\n 'columnTypes',\n 'rowClassRules',\n 'detailCellRendererParams',\n 'loadingCellRendererParams',\n 'loadingOverlayComponentParams',\n 'noRowsOverlayComponentParams',\n 'popupParent',\n 'statusBar',\n 'sideBar',\n 'chartThemeOverrides',\n 'customChartThemes',\n 'chartToolPanelsDef',\n 'sortingOrder',\n 'alignedGrids',\n 'columnDefs',\n 'excelStyles',\n 'pinnedTopRowData',\n 'pinnedBottomRowData',\n 'chartThemes',\n 'rowClass',\n 'rowHeight',\n 'detailRowHeight',\n 'rowBuffer',\n 'headerHeight',\n 'groupHeaderHeight',\n 'floatingFiltersHeight',\n 'pivotHeaderHeight',\n 'pivotGroupHeaderHeight',\n 'groupDefaultExpanded',\n 'viewportRowModelPageSize',\n 'viewportRowModelBufferSize',\n 'autoSizePadding',\n 'maxBlocksInCache',\n 'maxConcurrentDatasourceRequests',\n 'tooltipShowDelay',\n 'tooltipHideDelay',\n 'cacheOverflowSize',\n 'paginationPageSize',\n 'cacheBlockSize',\n 'infiniteInitialRowCount',\n 'serverSideInitialRowCount',\n 'scrollbarWidth',\n 'asyncTransactionWaitMillis',\n 'blockLoadDebounceMillis',\n 'keepDetailRowsCount',\n 'undoRedoCellEditingLimit',\n 'cellFlashDelay',\n 'cellFadeDelay',\n 'tabIndex',\n 'suppressMakeColumnVisibleAfterUnGroup',\n 'suppressRowClickSelection',\n 'suppressCellSelection',\n 'suppressCellFocus',\n 'suppressHorizontalScroll',\n 'alwaysShowHorizontalScroll',\n 'alwaysShowVerticalScroll',\n 'debug',\n 'enableBrowserTooltips',\n 'enableCellExpressions',\n 'groupSelectsChildren',\n 'groupIncludeFooter',\n 'groupIncludeTotalFooter',\n 'groupSuppressBlankHeader',\n 'suppressMenuHide',\n 'suppressRowDeselection',\n 'unSortIcon',\n 'suppressMultiSort',\n 'alwaysMultiSort',\n 'singleClickEdit',\n 'suppressLoadingOverlay',\n 'suppressNoRowsOverlay',\n 'suppressAutoSize',\n 'skipHeaderOnAutoSize',\n 'suppressParentsInRowNodes',\n 'suppressColumnMoveAnimation',\n 'suppressMovableColumns',\n 'suppressFieldDotNotation',\n 'enableRangeSelection',\n 'enableRangeHandle',\n 'enableFillHandle',\n 'suppressClearOnFillReduction',\n 'deltaSort',\n 'suppressTouch',\n 'suppressAsyncEvents',\n 'allowContextMenuWithControlKey',\n 'suppressContextMenu',\n 'rememberGroupStateWhenNewData',\n 'enableCellChangeFlash',\n 'suppressDragLeaveHidesColumns',\n 'suppressRowGroupHidesColumns',\n 'suppressMiddleClickScrolls',\n 'suppressPreventDefaultOnMouseWheel',\n 'suppressCopyRowsToClipboard',\n 'copyHeadersToClipboard',\n 'copyGroupHeadersToClipboard',\n 'pivotMode',\n 'suppressAggFuncInHeader',\n 'suppressColumnVirtualisation',\n 'suppressAggAtRootLevel',\n 'suppressFocusAfterRefresh',\n 'functionsPassive',\n 'functionsReadOnly',\n 'animateRows',\n 'groupSelectsFiltered',\n 'groupRemoveSingleChildren',\n 'groupRemoveLowestSingleChildren',\n 'enableRtl',\n 'suppressClickEdit',\n 'rowDragEntireRow',\n 'rowDragManaged',\n 'suppressRowDrag',\n 'suppressMoveWhenRowDragging',\n 'rowDragMultiRow',\n 'enableGroupEdit',\n 'embedFullWidthRows',\n 'suppressPaginationPanel',\n 'groupHideOpenParents',\n 'groupAllowUnbalanced',\n 'pagination',\n 'paginationAutoPageSize',\n 'suppressScrollOnNewData',\n 'suppressScrollWhenPopupsAreOpen',\n 'purgeClosedRowNodes',\n 'cacheQuickFilter',\n 'excludeHiddenColumnsFromQuickFilter',\n 'ensureDomOrder',\n 'accentedSort',\n 'suppressChangeDetection',\n 'valueCache',\n 'valueCacheNeverExpires',\n 'aggregateOnlyChangedColumns',\n 'suppressAnimationFrame',\n 'suppressExcelExport',\n 'suppressCsvExport',\n 'treeData',\n 'masterDetail',\n 'suppressMultiRangeSelection',\n 'enterMovesDownAfterEdit',\n 'enterMovesDown',\n 'suppressPropertyNamesCheck',\n 'rowMultiSelectWithClick',\n 'suppressRowHoverHighlight',\n 'suppressRowTransform',\n 'suppressClipboardPaste',\n 'suppressLastEmptyLineOnPaste',\n 'enableCharts',\n 'enableChartToolPanelsButton',\n 'suppressChartToolPanelsButton',\n 'suppressMaintainUnsortedOrder',\n 'enableCellTextSelection',\n 'suppressBrowserResizeObserver',\n 'suppressMaxRenderedRowRestriction',\n 'excludeChildrenWhenTreeDataFiltering',\n 'tooltipMouseTrack',\n 'keepDetailRows',\n 'paginateChildRows',\n 'preventDefaultOnContextMenu',\n 'undoRedoCellEditing',\n 'allowDragFromColumnsToolPanel',\n 'immutableData',\n 'pivotSuppressAutoColumn',\n 'suppressExpandablePivotGroups',\n 'debounceVerticalScrollbar',\n 'detailRowAutoHeight',\n 'serverSideFilteringAlwaysResets',\n 'serverSideSortingAlwaysResets',\n 'serverSideSortAllLevels',\n 'serverSideFilterAllLevels',\n 'serverSideSortOnServer',\n 'serverSideFilterOnServer',\n 'suppressAggFilteredOnly',\n 'showOpenedGroup',\n 'suppressClipboardApi',\n 'suppressModelUpdateAfterUpdateTransaction',\n 'stopEditingWhenCellsLoseFocus',\n 'maintainColumnOrder',\n 'groupMaintainOrder',\n 'columnHoverHighlight',\n 'reactUi',\n 'suppressReactUi',\n 'readOnlyEdit',\n 'suppressRowVirtualisation',\n 'enableCellEditingOnBackspace',\n 'resetRowDataOnUpdate',\n 'removePivotHeaderRowWhenSingleValueColumn',\n 'suppressCopySingleCellRanges',\n 'groupRowsSticky',\n 'suppressServerSideInfiniteScroll',\n 'rowGroupPanelSuppressSort',\n 'allowShowChangeAfterFilter',\n 'suppressCutToClipboard',\n 'localeTextFunc',\n 'doesExternalFilterPass',\n 'groupRowAggNodes',\n 'isFullWidthCell',\n 'processSecondaryColDef',\n 'processSecondaryColGroupDef',\n 'processPivotResultColDef',\n 'processPivotResultColGroupDef',\n 'getBusinessKeyForNode',\n 'isRowSelectable',\n 'postSort',\n 'defaultGroupOrderComparator',\n 'rowDragText',\n 'groupRowRenderer',\n 'groupRowRendererFramework',\n 'fullWidthCellRenderer',\n 'fullWidthCellRendererFramework',\n 'loadingCellRenderer',\n 'loadingCellRendererFramework',\n 'loadingOverlayComponent',\n 'loadingOverlayComponentFramework',\n 'noRowsOverlayComponent',\n 'noRowsOverlayComponentFramework',\n 'detailCellRenderer',\n 'detailCellRendererFramework',\n 'getLocaleText',\n 'isExternalFilterPresent',\n 'getRowHeight',\n 'getRowClass',\n 'getRowStyle',\n 'getContextMenuItems',\n 'getMainMenuItems',\n 'processRowPostCreate',\n 'processCellForClipboard',\n 'getGroupRowAgg',\n 'getRowNodeId',\n 'isFullWidthRow',\n 'sendToClipboard',\n 'navigateToNextHeader',\n 'tabToNextHeader',\n 'navigateToNextCell',\n 'tabToNextCell',\n 'processCellFromClipboard',\n 'getDocument',\n 'postProcessPopup',\n 'getChildCount',\n 'getDataPath',\n 'isRowMaster',\n 'postSortRows',\n 'processHeaderForClipboard',\n 'processGroupHeaderForClipboard',\n 'paginationNumberFormatter',\n 'processDataFromClipboard',\n 'getServerSideGroupKey',\n 'isServerSideGroup',\n 'createChartContainer',\n 'getChartToolbarItems',\n 'fillOperation',\n 'isApplyServerSideTransaction',\n 'getServerSideStoreParams',\n 'getServerSideGroupLevelParams',\n 'isServerSideGroupOpenByDefault',\n 'isGroupOpenByDefault',\n 'initialGroupOrderComparator',\n 'loadingCellRendererSelector',\n 'getRowId',\n 'groupAggFiltering',\n];\n/**\n * @remarks Copied from AG Grid `PropertyKeys.NUMBER_PROPERTIES` (v29.2.0) to support\n * attribute-to-gridOptions coercion without relying on `ComponentUtil.copyAttributesToGridOptions`.\n * @internal\n */\nexport const AG_NUMBER_PROPERTIES = [\n 'rowHeight',\n 'detailRowHeight',\n 'rowBuffer',\n 'headerHeight',\n 'groupHeaderHeight',\n 'floatingFiltersHeight',\n 'pivotHeaderHeight',\n 'pivotGroupHeaderHeight',\n 'groupDefaultExpanded',\n 'viewportRowModelPageSize',\n 'viewportRowModelBufferSize',\n 'autoSizePadding',\n 'maxBlocksInCache',\n 'maxConcurrentDatasourceRequests',\n 'tooltipShowDelay',\n 'tooltipHideDelay',\n 'cacheOverflowSize',\n 'paginationPageSize',\n 'cacheBlockSize',\n 'infiniteInitialRowCount',\n 'serverSideInitialRowCount',\n 'scrollbarWidth',\n 'asyncTransactionWaitMillis',\n 'blockLoadDebounceMillis',\n 'keepDetailRowsCount',\n 'undoRedoCellEditingLimit',\n 'cellFlashDelay',\n 'cellFadeDelay',\n 'tabIndex',\n];\n/**\n * @remarks Copied from AG Grid `PropertyKeys.BOOLEAN_PROPERTIES` (v29.2.0) to support\n * attribute-to-gridOptions coercion without relying on `ComponentUtil.copyAttributesToGridOptions`.\n * @internal\n */\nexport const AG_BOOLEAN_PROPERTIES = [\n 'suppressMakeColumnVisibleAfterUnGroup',\n 'suppressRowClickSelection',\n 'suppressCellSelection',\n 'suppressCellFocus',\n 'suppressHorizontalScroll',\n 'alwaysShowHorizontalScroll',\n 'alwaysShowVerticalScroll',\n 'debug',\n 'enableBrowserTooltips',\n 'enableCellExpressions',\n 'groupSelectsChildren',\n 'groupIncludeFooter',\n 'groupIncludeTotalFooter',\n 'groupSuppressBlankHeader',\n 'suppressMenuHide',\n 'suppressRowDeselection',\n 'unSortIcon',\n 'suppressMultiSort',\n 'alwaysMultiSort',\n 'singleClickEdit',\n 'suppressLoadingOverlay',\n 'suppressNoRowsOverlay',\n 'suppressAutoSize',\n 'skipHeaderOnAutoSize',\n 'suppressParentsInRowNodes',\n 'suppressColumnMoveAnimation',\n 'suppressMovableColumns',\n 'suppressFieldDotNotation',\n 'enableRangeSelection',\n 'enableRangeHandle',\n 'enableFillHandle',\n 'suppressClearOnFillReduction',\n 'deltaSort',\n 'suppressTouch',\n 'suppressAsyncEvents',\n 'allowContextMenuWithControlKey',\n 'suppressContextMenu',\n 'rememberGroupStateWhenNewData',\n 'enableCellChangeFlash',\n 'suppressDragLeaveHidesColumns',\n 'suppressRowGroupHidesColumns',\n 'suppressMiddleClickScrolls',\n 'suppressPreventDefaultOnMouseWheel',\n 'suppressCopyRowsToClipboard',\n 'copyHeadersToClipboard',\n 'copyGroupHeadersToClipboard',\n 'pivotMode',\n 'suppressAggFuncInHeader',\n 'suppressColumnVirtualisation',\n 'suppressAggAtRootLevel',\n 'suppressFocusAfterRefresh',\n 'functionsPassive',\n 'functionsReadOnly',\n 'animateRows',\n 'groupSelectsFiltered',\n 'groupRemoveSingleChildren',\n 'groupRemoveLowestSingleChildren',\n 'enableRtl',\n 'suppressClickEdit',\n 'rowDragEntireRow',\n 'rowDragManaged',\n 'suppressRowDrag',\n 'suppressMoveWhenRowDragging',\n 'rowDragMultiRow',\n 'enableGroupEdit',\n 'embedFullWidthRows',\n 'suppressPaginationPanel',\n 'groupHideOpenParents',\n 'groupAllowUnbalanced',\n 'pagination',\n 'paginationAutoPageSize',\n 'suppressScrollOnNewData',\n 'suppressScrollWhenPopupsAreOpen',\n 'purgeClosedRowNodes',\n 'cacheQuickFilter',\n 'excludeHiddenColumnsFromQuickFilter',\n 'ensureDomOrder',\n 'accentedSort',\n 'suppressChangeDetection',\n 'valueCache',\n 'valueCacheNeverExpires',\n 'aggregateOnlyChangedColumns',\n 'suppressAnimationFrame',\n 'suppressExcelExport',\n 'suppressCsvExport',\n 'treeData',\n 'masterDetail',\n 'suppressMultiRangeSelection',\n 'enterMovesDownAfterEdit',\n 'enterMovesDown',\n 'suppressPropertyNamesCheck',\n 'rowMultiSelectWithClick',\n 'suppressRowHoverHighlight',\n 'suppressRowTransform',\n 'suppressClipboardPaste',\n 'suppressLastEmptyLineOnPaste',\n 'enableCharts',\n 'enableChartToolPanelsButton',\n 'suppressChartToolPanelsButton',\n 'suppressMaintainUnsortedOrder',\n 'enableCellTextSelection',\n 'suppressBrowserResizeObserver',\n 'suppressMaxRenderedRowRestriction',\n 'excludeChildrenWhenTreeDataFiltering',\n 'tooltipMouseTrack',\n 'keepDetailRows',\n 'paginateChildRows',\n 'preventDefaultOnContextMenu',\n 'undoRedoCellEditing',\n 'allowDragFromColumnsToolPanel',\n 'immutableData',\n 'pivotSuppressAutoColumn',\n 'suppressExpandablePivotGroups',\n 'debounceVerticalScrollbar',\n 'detailRowAutoHeight',\n 'serverSideFilteringAlwaysResets',\n 'serverSideSortingAlwaysResets',\n 'serverSideSortAllLevels',\n 'serverSideFilterAllLevels',\n 'serverSideSortOnServer',\n 'serverSideFilterOnServer',\n 'suppressAggFilteredOnly',\n 'showOpenedGroup',\n 'suppressClipboardApi',\n 'suppressModelUpdateAfterUpdateTransaction',\n 'stopEditingWhenCellsLoseFocus',\n 'maintainColumnOrder',\n 'groupMaintainOrder',\n 'columnHoverHighlight',\n 'reactUi',\n 'suppressReactUi',\n 'readOnlyEdit',\n 'suppressRowVirtualisation',\n 'enableCellEditingOnBackspace',\n 'resetRowDataOnUpdate',\n 'removePivotHeaderRowWhenSingleValueColumn',\n 'suppressCopySingleCellRanges',\n 'groupRowsSticky',\n 'suppressServerSideInfiniteScroll',\n 'rowGroupPanelSuppressSort',\n 'allowShowChangeAfterFilter',\n 'suppressCutToClipboard',\n];\nconst AG_NUMBER_PROPERTIES_SET = new Set(AG_NUMBER_PROPERTIES);\nconst AG_BOOLEAN_PROPERTIES_SET = new Set(AG_BOOLEAN_PROPERTIES);\nconst AG_PROPERTIES_SET = new Set(AG_PROPERTIES);\nfunction toBoolean(value) {\n if (typeof value === 'boolean') {\n return value;\n }\n if (typeof value === 'string') {\n // for boolean, compare to empty String to allow attributes appearing with\n // no value to be treated as 'true'\n return value.toUpperCase() === 'TRUE' || value === '';\n }\n return false;\n}\nfunction toNumber(value) {\n if (typeof value === 'number') {\n return value;\n }\n if (typeof value === 'string') {\n return Number(value);\n }\n}\n/**\n * @remarks Copied from AG Grid `ComponentUtil.copyAttributesToGridOptions` (v29.2.0).\n * This is used to coerce string/attribute values into the correct types for gridOptions.\n * @internal\n */\nexport function copyAttributesToGridOptions(gridOptions, component) {\n // create empty grid options if none were passed\n if (typeof gridOptions !== 'object') {\n gridOptions = {};\n }\n // to allow array style lookup in TypeScript, take type away from 'gridOptions'\n const pGridOptions = gridOptions;\n const keys = Object.keys(component);\n // Loop through component props, if they are not undefined and a valid gridOption copy to gridOptions\n keys.forEach((key) => {\n if (!AG_PROPERTIES_SET.has(key)) {\n return;\n }\n const value = component[key];\n if (typeof value === 'undefined') {\n return;\n }\n // Match ComponentUtil.getValue behaviour (limited to our local boolean/number sets + special-case)\n let coercedValue = value;\n if (AG_NUMBER_PROPERTIES_SET.has(key)) {\n coercedValue = toNumber(value);\n }\n else if (AG_BOOLEAN_PROPERTIES_SET.has(key)) {\n coercedValue = toBoolean(value);\n }\n else if (key === 'groupAggFiltering' && typeof value !== 'function') {\n coercedValue = toBoolean(value);\n }\n if (coercedValue !== undefined) {\n pGridOptions[key] = coercedValue;\n }\n });\n return gridOptions;\n}\n","import { __awaiter, __decorate, __rest } from \"tslib\";\nimport { ClientSideRowModelModule } from '@ag-grid-community/client-side-row-model';\nimport { ComponentUtil, Events, Grid, ModuleRegistry } from '@ag-grid-community/core';\nimport { CsvExportModule } from '@ag-grid-community/csv-export';\nimport { DatasourceDefaults } from '@genesislcap/foundation-comms';\nimport { insertDocumentCSSRule, LifecycleMixin, avoidTreeShaking, respondToVisibility, } from '@genesislcap/foundation-utils';\nimport { attr, DOM, observable } from '@microsoft/fast-element';\nimport { FoundationElement } from '@microsoft/fast-foundation';\nimport { classNames } from '@microsoft/fast-web-utilities';\nimport * as changeCase from 'change-case';\nimport debounce from 'lodash.debounce';\nimport { GridProCell } from './cell';\nimport { DateEditor, MultiselectEditor, NumberEditor, SelectEditor, StringEditor, } from './cell-editors';\nimport { ActionRenderer, ActionsMenuRenderer, BooleanRenderer, EditableRenderer, IconRenderer, SelectRenderer, StatusPillRenderer, } from './cell-renderers';\nimport { GridProColumn } from './column';\nimport { GridProClientSideDatasource, GridProServerSideDatasource } from './datasource';\nimport { baseDatasourceEventNames } from './datasource/base.types';\nimport { agThemeFontFaceMap, defaultAgGridFontFace } from './external';\nimport { GridProGenesisDatasource, gridProGenesisDatasourceEventNames, } from './grid-pro-genesis-datasource';\nimport { datasourceEventNames, } from './grid-pro-genesis-datasource/datasource-events.types';\nimport { AG_PROPERTIES, copyAttributesToGridOptions, DEBOUNCED_RESIZE_TIME, gridProErrorNames, gridProEventNames, } from './grid-pro.definitions';\nimport { foundationGridProStyles as styles } from './grid-pro.styles';\nimport { gridProTemplate as template } from './grid-pro.template';\nimport { AgGridTheme, agThemeFontsId, agThemeTokenMapClassname, DEFAULT_STATUS_BAR_CONFIG, EDITED_COLUMN_FIELD, ERROR_COLUMN_FIELD, GRID_READY_EVENT, GridOptionsConfig, GridProRendererTypes, GridProStatusBarTypes, } from './grid-pro.types';\nimport { StatePersistence } from './state-persistence';\nimport { LabelValueStatusBarComponent, LoadMoreStatusBarComponent, PaginationStatusBarComponent, ReloadStatusBarComponent, RowCountStatusBarComponent, } from './status-bar-components';\nimport { ErrorTooltip } from './tooltips';\nimport { convertColDefsToColumnStates, convertToKebabCase, logger, mergeAndDedupColDefWithColumnState, } from './utils';\navoidTreeShaking(GridProGenesisDatasource, GridProClientSideDatasource, GridProServerSideDatasource, GridProCell, GridProColumn);\nModuleRegistry.registerModules([CsvExportModule, ClientSideRowModelModule]);\nconst DEBOUNCE_TIME = 400;\n// Re-export AG_PROPERTIES from definitions for backwards compatibility\nexport { AG_PROPERTIES };\n/**\n * The Grid Pro element.\n * @remarks Grid Pro is a Web Component wrapper around the AG Grid Community library.\n * @public\n * @tagname %%prefix%%-grid-pro\n */\nexport class GridPro extends LifecycleMixin(FoundationElement) {\n rowDataChanged(_, rowData) {\n if (this.initialised) {\n this.gridApi.setRowData(rowData);\n }\n }\n themeChanged(oldValue, newValue) {\n if (!newValue) {\n this.classNames = '';\n this.destroyFontFace();\n return;\n }\n this.classNames = classNames(agThemeTokenMapClassname(newValue), newValue);\n this.insertFontFace(newValue);\n }\n getfilterModel() {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.persistFilterModelKey) {\n return this._filterConfig;\n }\n const filterModel = yield this.statePersistence.getFilterModel(this.persistFilterModelKey);\n return filterModel;\n });\n }\n setFilterModel(value) {\n return __awaiter(this, void 0, void 0, function* () {\n if (!this.persistFilterModelKey) {\n this._filterConfig = value;\n return;\n }\n yield this.statePersistence.saveFilterModel(this.persistFilterModelKey, value);\n });\n }\n constructor() {\n super();\n // Cache for total column width to avoid repeated calculations\n this.cachedTotalColumnWidth = null;\n this.columnCount = 0;\n this.gridErrorItems = [];\n // Genesis-specific attrs\n this.autoCellRendererByType = false;\n this.onlyTemplateColDefs = false;\n // AG-specific attrs\n /**\n * Boolean attribute to control whether the grid autosizes the columns upon interaction.\n * This will disable the column widths from being manually set, and doesn't save the widths\n * in local storage if you are using `persist-column-state-key`.\n */\n this.gridAutosizingEnabled = false;\n /**\n * Boolean attribute to control whether the grid automatically sizes columns to fit their content.\n * This will call AG Grid's autoSizeColumns() method to automatically adjust column widths based on content.\n * @public\n */\n this.sizeColumnsToContent = false;\n /**\n * Boolean attribute to adjust the size of columns to fit the available horizontal space.\n * This will call AG Grid's sizeColumnsToFit() method.\n * @public\n */\n this.sizeColumnsToFit = false;\n /**\n * The index to add new rows to when using `applyTransaction` or `applyTransactionAsync`\n */\n this.addIndex = 0;\n /**\n * Whether to use the `applyTransactionAsync` function for *add* transactions\n * @remarks Defaults to false\n */\n this.asyncAdd = false;\n /**\n * Whether to use the `applyTransactionAsync` function for *remove* transactions\n * @remarks Defaults to false\n */\n this.asyncRemove = false;\n /**\n * Whether to use the `applyTransactionAsync` function for *update* transactions\n * @remarks Defaults to true\n */\n this.asyncUpdate = true;\n /**\n * If false, will disable cell flashing for all cells by default, unless otherwise defined in custom colDef\n * @remarks Defaults to true\n */\n this.enableCellFlashing = false;\n /**\n * @deprecated - use `enableRowFlashing` instead.\n */\n this.enabledRowFlashing = false;\n /**\n * If true, will enable row flashing for all rows for `add` async transactions\n */\n this.enableRowFlashing = false;\n /**\n * The default column config to reset to when deleteColumnState is called.\n */\n this.defaultColumnConfig = [];\n this.gridFontFace = defaultAgGridFontFace;\n this.columnComponentName = 'grid-pro-column';\n this.theme = AgGridTheme.alpine;\n this.themeMode = 'dark';\n /**\n * Enable pagination for the grid.\n * @remarks\n * When enabled, the grid will automatically configure pagination settings.\n * Note that AG Grid's full pagination functionality requires the Enterprise module.\n * While basic pagination will work in Community edition, advanced features like\n * custom pagination components require Enterprise.\n * @see https://www.ag-grid.com/javascript-data-grid/row-pagination/\n * @see https://www.ag-grid.com/javascript-data-grid/server-side-model-pagination/\n */\n this.pagination = false;\n /**\n * Configuration for the grid status bar components.\n * @remarks\n * This requires AG Grid Enterprise module to be enabled.\n * The status bar will only be displayed if the Enterprise module is available.\n * @see https://www.ag-grid.com/javascript-data-grid/component-status-bar/\n */\n this.statusBarConfig = DEFAULT_STATUS_BAR_CONFIG;\n /**\n * Enables or disables the grid status bar.\n * @remarks\n * Default is false.\n * When disabled, no status bar will be displayed regardless of statusBarConfig.\n * This requires AG Grid Enterprise module to be available for the status bar to be displayed when enabled.\n */\n this.withStatusBar = false;\n this.rehydrationAttempted = false;\n this.eventHandlers = [];\n this.gridEventsQueue = [];\n this.registeredGridEvents = new Set();\n this._filterConfig = undefined;\n this.agAttributes = {};\n this.agPropertiesMap = AG_PROPERTIES.reduce((map, property) => {\n map[property.toLowerCase()] = property;\n map[convertToKebabCase(property)] = property;\n return map;\n }, {});\n const hideDataSourceError = this.hideDatasourceError.bind(this);\n // Bind all event handlers once to ensure proper add/remove of listeners\n this.eventHandlers.push(\n // Root event listeners\n [gridProGenesisDatasourceEventNames.dataInit, hideDataSourceError], [gridProEventNames.datasourceErrorClose, hideDataSourceError], [baseDatasourceEventNames.error, this.handleBaseDatasourceError.bind(this)], [baseDatasourceEventNames.connected, hideDataSourceError], \n // Datasource event listeners\n [datasourceEventNames.initialize, this.handleInitialize.bind(this)], [datasourceEventNames.dataLoaded, this.handleDataLoaded.bind(this)], [datasourceEventNames.dataChanged, this.handleDataChanged.bind(this)], [datasourceEventNames.schemaUpdated, this.handleSchemaUpdated.bind(this)], [datasourceEventNames.dataCleared, this.handleDataCleared.bind(this)], [datasourceEventNames.loadingStarted, this.handleLoadingStarted.bind(this)], [datasourceEventNames.loadingFinished, this.handleLoadingFinished.bind(this)], [datasourceEventNames.noDataAvailable, this.handleNoDataAvailable.bind(this)], [datasourceEventNames.filtersRestored, this.handleFiltersRestored.bind(this)], [datasourceEventNames.moreDataAvailable, this.handleMoreDataAvailable.bind(this)], [datasourceEventNames.error, this.handleDatasourceError.bind(this)], [datasourceEventNames.destroy, this.handleDatasourceDestroy.bind(this)], \n // Server-side specific events\n [datasourceEventNames.cacheFilterConfig, this.cacheFilterConfig.bind(this)], [datasourceEventNames.refreshServerSide, this.handleRefreshServerSide.bind(this)], [datasourceEventNames.setServerSideDatasource, this.handleSetServerSideDatasource.bind(this)], [datasourceEventNames.addGridCssClass, this.handleAddGridCssClass.bind(this)], [datasourceEventNames.removeGridCssClass, this.handleRemoveGridCssClass.bind(this)], [\n datasourceEventNames.applyServerSideTransaction,\n this.handleApplyServerSideTransaction.bind(this),\n ]);\n }\n /**\n * Adds an event listener to the grid element.\n * @param eventType - The event type to listen for. Recommened to use the `Events` from AG Grid.\n * @param listener - The event listener to call when the event is fired.\n * @param options - An options object that specifies characteristics about the event listener.\n * @privateRemarks\n * This will change once we do the AG Upgrade and `eventType` will be correctly typed.\n */\n addEventListener(eventType, listener, options) {\n super.addEventListener(eventType, listener, options);\n if (ComponentUtil.PUBLIC_EVENTS.includes(eventType)) {\n if (this.gridApi) {\n this.addGridEventListener(eventType);\n }\n else {\n if (!this.gridEventsQueue.includes(eventType)) {\n this.gridEventsQueue.push(eventType);\n }\n }\n }\n }\n addGridEventListener(eventType) {\n if (this.registeredGridEvents.has(eventType)) {\n return;\n }\n this.registeredGridEvents.add(eventType);\n this.gridApi.addEventListener(eventType, (e) => {\n this.$emit(eventType, e);\n });\n }\n handleError(type, event) {\n this.gridErrorItems = [...this.gridErrorItems, { detail: event.detail, type }];\n }\n handleBaseDatasourceError(event) {\n // Map base datasource errors to grid-pro error format\n const gridProError = {\n detail: { message: event.detail.message },\n type: gridProErrorNames.datasource,\n };\n this.gridErrorItems = [\n ...this.gridErrorItems,\n { detail: gridProError.detail, type: gridProError.type },\n ];\n }\n hideDatasourceError() {\n this.gridErrorItems = this.gridErrorItems.filter((item) => item.type !== gridProErrorNames.datasource);\n this.removeAttribute('ds-disconnected');\n }\n connectedCallback() {\n super.connectedCallback();\n if (this.gridAutosizingEnabled) {\n this.visibilityObserverCleanup = respondToVisibility(this, (gridVisible) => {\n if (gridVisible) {\n this.debouncedColumnAutosize.bind(this)();\n }\n });\n }\n this.rehydrationAttempted = false;\n this.eventHandlers.forEach(([eventName, handler]) => {\n this.addEventListener(eventName, handler);\n });\n if (!this.shouldRunConnect)\n return;\n AG_PROPERTIES.forEach((key) => {\n Object.defineProperty(this, key, {\n set: (v) => {\n this.agAttributeChangedCallback(convertToKebabCase(key), undefined, v);\n },\n enumerable: true,\n configurable: true,\n });\n });\n this.paginationPageSize = this.isServerSide\n ? this.gridProDatasource.maxRows\n : DatasourceDefaults.DEFAULT_PAGINATION_PAGE_SIZE;\n }\n disconnectedCallback() {\n if (this.visibilityObserverCleanup) {\n this.visibilityObserverCleanup();\n this.visibilityObserverCleanup = undefined;\n }\n super.disconnectedCallback();\n this.rehydrationAttempted = false;\n const shouldRunDisconnect = this.shouldRunDisconnect;\n this.eventHandlers.forEach(([eventName, handler]) => {\n this.removeEventListener(eventName, handler);\n });\n DOM.queueUpdate(() => {\n if (!shouldRunDisconnect)\n return;\n this.initialised = false;\n this.gridApi.setRowData([]);\n this.gridApi.refreshCells({ force: true });\n this.gridApi.destroy();\n this.invalidateColumnWidthCache();\n // Clear registered events when grid is destroyed\n this.registeredGridEvents.clear();\n });\n }\n /**\n * Handles datasource initialization\n * @internal\n */\n handleInitialize(event) {\n const { options, keepColDefsOnClearRowData } = event.detail;\n let columnDefinitions;\n if (keepColDefsOnClearRowData) {\n columnDefinitions = this.gridApi.getColumnDefs();\n this.columnState = this.columnApi.getColumnState();\n }\n const gridOptions = Object.assign(Object.assign(Object.assign({}, this.agGridOptions), (columnDefinitions && { columnDefs: columnDefinitions })), options);\n this.gridOptions = Object.assign({}, gridOptions);\n this.initGrid();\n }\n /**\n * Handles data loading from datasource\n * @internal\n */\n handleDataLoaded(event) {\n const { data } = event.detail;\n if (this.gridApi) {\n this.gridApi.setRowData(data);\n }\n }\n /**\n * Handles data changes from datasource\n * @internal\n */\n handleDataChanged(event) {\n var _a, _b, _c;\n const { changes } = event.detail;\n if (!this.gridApi)\n return;\n if (((_a = changes.add) === null || _a === void 0 ? void 0 : _a.length) > 0) {\n if (this.asyncAdd) {\n this.gridApi.applyTransactionAsync({ add: changes.add, addIndex: this.addIndex }, (result) => {\n this.flashAddedCells(result === null || result === void 0 ? void 0 : result.add);\n });\n }\n else {\n const result = this.gridApi.applyTransaction({ add: changes.add, addIndex: this.addIndex });\n this.flashAddedCells(result === null || result === void 0 ? void 0 : result.add);\n }\n }\n if (((_b = changes.update) === null || _b === void 0 ? void 0 : _b.length) > 0) {\n if (this.asyncUpdate) {\n this.gridApi.applyTransactionAsync({ update: changes.update });\n }\n else {\n this.gridApi.applyTransaction({ update: changes.update });\n }\n }\n if (((_c = changes.remove) === null || _c === void 0 ? void 0 : _c.length) > 0) {\n if (this.asyncRemove) {\n this.gridApi.applyTransactionAsync({ remove: changes.remove });\n }\n else {\n this.gridApi.applyTransaction({ remove: changes.remove });\n }\n }\n }\n flashAddedCells(rowNodes) {\n if (this.enableRowFlashing && (rowNodes === null || rowNodes === void 0 ? void 0 : rowNodes.length)) {\n this.gridApi.flashCells({ rowNodes });\n }\n }\n /**\n * Handles schema updates from datasource\n * @internal\n */\n handleSchemaUpdated(event) {\n return __awaiter(this, void 0, void 0, function* () {\n const { schema, metadata } = event.detail;\n const preSetColumnDefs = this.gridApi.getColumnDefs();\n if (!preSetColumnDefs || preSetColumnDefs.length === 0) {\n const colDefs = metadata\n .map((field) => {\n var _a;\n return (Object.assign(Object.assign({}, schema.find((colDef) => colDef.field === field.name)), (_a = this.gridApi) === null || _a === void 0 ? void 0 : _a.getColumnDef(field.name)));\n })\n .map((colDef) => (Object.assign(Object.assign({}, colDef), { cellRenderer: this.autoCellRendererByType ? colDef.cellRenderer : undefined, cellEditor: this.autoCellRendererByType ? colDef.cellEditor : undefined })));\n const colDefsMergedWithTemplateDefs = yield this.mergeAllColumnDefsAndStates(colDefs, true);\n if (colDefsMergedWithTemplateDefs) {\n // AG's internals will check if group/pivot are NOT NULL to trigger module registration warning for `row-grouping`.\n // When using gridApi to get the currentState to save, all boolean will return false when they were not set at all.\n // ColDef type is `boolean` while ColumnState is `boolean | null`.\n colDefsMergedWithTemplateDefs.forEach((col) => {\n if (!col.rowGroup) {\n col.rowGroup = null;\n }\n if (!col.pivot) {\n col.pivot = null;\n }\n });\n this.gridApi.setColumnDefs(colDefsMergedWithTemplateDefs);\n }\n }\n });\n }\n /**\n * Handles data clearing from datasource\n * @internal\n */\n handleDataCleared(event) {\n var _a, _b;\n const { includeSchema } = event.detail;\n if (!this.gridApi)\n return;\n // For server-side, these methods are handled via server-side transactions\n // Only flush async transactions for client-side row model\n if (!this.isServerSide) {\n // Flush any pending async transactions\n if (this.asyncAdd || this.asyncUpdate || this.asyncRemove) {\n (_b = (_a = this.gridApi).flushAsyncTransactions) === null || _b === void 0 ? void 0 : _b.call(_a);\n }\n }\n if (includeSchema) {\n this.gridApi.setColumnDefs([]);\n }\n // setRowData only works for client-side row model\n // For server-side, data clearing is handled via server-side transactions\n if (!this.isServerSide) {\n this.gridApi.setRowData([]);\n this.gridApi.refreshCells({ force: true });\n }\n }\n /**\n * Handles loading started from datasource\n * @internal\n */\n handleLoadingStarted() {\n if (this.gridApi) {\n this.gridApi.showLoadingOverlay();\n }\n }\n /**\n * Handles loading finished from datasource\n * @internal\n */\n handleLoadingFinished() {\n if (this.gridApi) {\n this.gridApi.hideOverlay();\n }\n }\n /**\n * Handles no data available from datasource\n * @internal\n */\n handleNoDataAvailable() {\n if (this.gridApi) {\n this.gridApi.showNoRowsOverlay();\n }\n }\n /**\n * Handles filter restoration from datasource\n * @internal\n */\n handleFiltersRestored() {\n this.restoreCachedFilterConfig();\n }\n /**\n * Handles more data availability from datasource\n * @internal\n */\n handleMoreDataAvailable(event) {\n var _a, _b, _c, _d;\n const { hasMoreData, sourceRef } = event.detail;\n if (!this.gridApi)\n return;\n const statusBar = (_b = (_a = this.gridApi).getStatusPanel) === null || _b === void 0 ? void 0 : _b.call(_a, GridProStatusBarTypes.loadMore);\n if (statusBar) {\n (_d = (_c = statusBar).updateParams) === null || _d === void 0 ? void 0 : _d.call(_c, {\n moreRows: hasMoreData,\n sourceRef,\n });\n }\n }\n /**\n * Handles datasource errors\n * @internal\n */\n handleDatasourceError(event) {\n // Set visual indicator on grid\n this.setAttribute('ds-disconnected', 'ds-disconnected');\n }\n /**\n * Handles datasource destroy\n * @internal\n */\n handleDatasourceDestroy() {\n this.clearLocalGridOptions();\n }\n /**\n * Handles refreshing server-side data\n * @internal\n */\n handleRefreshServerSide(event) {\n const { purge } = event.detail;\n if (this.gridApi) {\n this.gridApi.refreshServerSide({ purge });\n }\n }\n /**\n * Handles setting server-side datasource\n * @internal\n */\n handleSetServerSideDatasource(event) {\n const { datasource } = event.detail;\n if (this.gridApi) {\n this.gridApi.setServerSideDatasource(datasource);\n }\n }\n /**\n * Handles adding CSS class to grid element\n * @internal\n */\n handleAddGridCssClass(event) {\n var _a;\n const { className } = event.detail;\n // Add CSS class to grid element\n const gridElement = ((_a = this.gridSlot) === null || _a === void 0 ? void 0 : _a.parentElement) || this;\n if (gridElement) {\n gridElement.classList.add(className);\n }\n }\n /**\n * Handles removing CSS class from grid element\n * @internal\n */\n handleRemoveGridCssClass(event) {\n var _a;\n const { className } = event.detail;\n // Remove CSS class from grid element\n const gridElement = ((_a = this.gridSlot) === null || _a === void 0 ? void 0 : _a.parentElement) || this;\n if (gridElement) {\n gridElement.classList.remove(className);\n }\n }\n /**\n * Handles applying server-side transactions\n * @internal\n */\n handleApplyServerSideTransaction(event) {\n const { transaction, async, callback } = event.detail;\n if (!this.gridApi)\n return;\n if (async) {\n this.gridApi.applyServerSideTransactionAsync(transaction, callback);\n }\n else {\n const result = this.gridApi.applyServerSideTransaction(transaction);\n if (callback) {\n callback(result);\n }\n }\n }\n combineAllGridComponents(gridOptionsComponents) {\n const defaultFoundationAgComponents = {\n [GridProRendererTypes.action]: ActionRenderer,\n [GridProRendererTypes.actionsMenu]: ActionsMenuRenderer,\n [GridProRendererTypes.boolean]: BooleanRenderer,\n [GridProRendererTypes.editable]: EditableRenderer,\n [GridProRendererTypes.icon]: IconRenderer,\n [GridProRendererTypes.statusPill]: StatusPillRenderer,\n [GridProRendererTypes.select]: SelectRenderer,\n [GridProRendererTypes.selectEditor]: SelectEditor,\n [GridProRendererTypes.numberEditor]: NumberEditor,\n [GridProRendererTypes.multiselectEditor]: MultiselectEditor,\n [GridProRendererTypes.dateEditor]: DateEditor,\n [GridProRendererTypes.stringEditor]: StringEditor,\n [GridProStatusBarTypes.labelValue]: LabelValueStatusBarComponent,\n [GridProStatusBarTypes.loadMore]: LoadMoreStatusBarComponent,\n [GridProStatusBarTypes.pagination]: PaginationStatusBarComponent,\n [GridProStatusBarTypes.reload]: ReloadStatusBarComponent,\n [GridProStatusBarTypes.rowCount]: RowCountStatusBarComponent,\n };\n return Object.assign(Object.assign(Object.assign({}, defaultFoundationAgComponents), gridOptionsComponents), this.gridComponents);\n }\n statePersistanceEnabled() {\n if (!this.persistColumnStateKey || this.persistColumnStateKey.length === 0) {\n return false;\n }\n return true;\n }\n /**\n * Gets the currently selected rows from the grid\n * @public\n * @returns Array of selected row data\n */\n getSelectedRows() {\n var _a, _b, _c, _d;\n try {\n if (!this.initialised || !this.gridApi) {\n return [];\n }\n const rowSelectionMode = (_a = this.gridOptions) === null || _a === void 0 ? void 0 : _a.rowSelection;\n // If row selection is enabled (single or multiple), use row selection only\n if (rowSelectionMode === 'single' || rowSelectionMode === 'multiple') {\n if (this.gridApi.getSelectedRows && this.gridApi.getSelectedRows().length > 0) {\n return this.gridApi.getSelectedRows();\n }\n return [];\n }\n // If row selection is disabled (undefined/none), use cell range selection\n if (((_b = this.gridApi) === null || _b === void 0 ? void 0 : _b.getCellRanges) && this.gridApi.getCellRanges().length > 0) {\n return this.getCellRangeRowData();\n }\n // Fallback: if no cell ranges but range selection is disabled,\n // check for focused cell (single cell selection)\n if (!((_c = this.gridOptions) === null || _c === void 0 ? void 0 : _c.enableRangeSelection)) {\n const focusedCell = (_d = this.gridApi) === null || _d === void 0 ? void 0 : _d.getFocusedCell();\n if (focusedCell) {\n const rowNode = this.gridApi.getDisplayedRowAtIndex(focusedCell.rowIndex);\n if (rowNode === null || rowNode === void 0 ? void 0 : rowNode.data) {\n return [rowNode.data];\n }\n }\n }\n return [];\n }\n catch (error) {\n logger.error('Grid Pro: Error getting selected rows:', error);\n return [];\n }\n }\n /**\n * Gets the row data from selected cell ranges\n * @internal\n * @returns Array containing the row data from selected cell ranges, or empty array if none\n */\n getCellRangeRowData() {\n var _a;\n if (!((_a = this.gridApi) === null || _a === void 0 ? void 0 : _a.getCellRanges)) {\n return [];\n }\n const cellRanges = this.gridApi.getCellRanges();\n if (cellRanges.length === 0) {\n return [];\n }\n const rowData = [];\n // Collect unique row data from all selected cell ranges\n cellRanges.forEach((range) => {\n const startIndex = range.startRow.rowIndex;\n const endIndex = range.endRow.rowIndex;\n // Iterate over indices directly for better performance\n for (let rowIndex = startIndex; rowIndex <= endIndex; rowIndex += 1) {\n const rowNode = this.gridApi.getDisplayedRowAtIndex(rowIndex);\n if ((rowNode === null || rowNode === void 0 ? void 0 : rowNode.data) && !rowData.some((existing) => existing === rowNode.data)) {\n rowData.push(rowNode.data);\n }\n }\n });\n return rowData;\n }\n /**\n * Checks if any rows are currently selected\n * @public\n * @returns True if rows are selected, false otherwise\n */\n hasSelectedRows() {\n const selectedRows = this.getSelectedRows();\n return selectedRows.length > 0;\n }\n /**\n * Updates the label-value status bar component with new label and value\n * @public\n * @param params - Object containing label, value, and optionally hide flag\n * @example\n * ```ts\n * gridPro.updateLabelValueStatusBar({\n * label: 'Total Records',\n * value: '1,234',\n * hide: false\n * });\n * ```\n */\n updateLabelValueStatusBar(params) {\n var _a, _b;\n if (!this.gridApi) {\n logger.warn('Grid Pro: Cannot update label-value status bar - grid API not available');\n return;\n }\n const statusBar = (_b = (_a = this.gridApi).getStatusPanel) === null || _b === void 0 ? void 0 : _b.call(_a, GridProStatusBarTypes.labelValue);\n if (statusBar && typeof statusBar.updateParams === 'function') {\n statusBar.updateParams(params);\n }\n else {\n logger.warn('Grid Pro: Label-value status bar component not found or updateParams method not available');\n }\n }\n /**\n * Because we try and resize the grid to fit using callbacks on events, this will cause\n * a stack overflow of calls to resize, so we need to debounce it.\n * @internal\n */\n debouncedColumnAutosize() {\n if (!this.gridAutosizingEnabled)\n return;\n if (this.debounced) {\n clearTimeout(this.debounced);\n this.debounced = null;\n }\n this.debounced = setTimeout(() => {\n var _a;\n (_a = this.gridApi) === null || _a === void 0 ? void 0 : _a.sizeColumnsToFit();\n }, DEBOUNCED_RESIZE_TIME);\n }\n /**\n * If {@link @genesislcap/grid-pro#GridPro.gridAutosizingEnabled} is true, will remove the widths from the column states.\n * @internal\n */\n removeConfigWidthsToAutosize(colState) {\n return colState.map((col) => (Object.assign(Object.assign({}, col), { width: null })));\n }\n saveColumnState() {\n return __awaiter(this, void 0, void 0, function* () {\n if (this.rehydrationAttempted && this.statePersistanceEnabled()) {\n let colState = this.columnApi.getColumnState();\n colState = this.gridAutosizingEnabled\n ? this.removeConfigWidthsToAutosize(colState)\n : colState;\n const allHeadersHidden = colState.filter((c) => {\n if (c.hide)\n return false;\n const col = this.columnApi.getColumn(c.colId);\n return Boolean(col.getColDef().headerName);\n }).length === 0;\n if (colState.length === 0 ||\n JSON.stringify(colState) === JSON.stringify(this.columnState) ||\n allHeadersHidden)\n return;\n yield this.statePersistence.saveColumnState(this.persistColumnStateKey, colState);\n this.columnState = colState;\n }\n });\n }\n /**\n * Gets the saved grid ColumnState[] from storage\n * @remarks This is used to restore the grid state when the grid is rehydrated\n * @privateRemarks Not using `columnApi.get|setColumnState()` for these flows as it doesn't work setting new columnDefs vs different ordering.\n * @public\n */\n getSavedColumnState() {\n return __awaiter(this, void 0, void 0, function* () {\n this.columnState = [];\n if (this.statePersistanceEnabled()) {\n this.columnState = yield this.statePersistence.getColumnState(this.persistColumnStateKey);\n }\n return this.columnState;\n });\n }\n /**\n * Deletes the saved column state for the current grid\n * @param resetToDefault - Whether to reset columns to their default configuration. Defaults to true.\n * @remarks This removes the persisted column state from storage, allowing the grid to use default column configuration\n * @public\n */\n deleteColumnState() {\n return __awaiter(this, arguments, void 0, function* (resetToDefault = true) {\n var _a;\n if (this.statePersistanceEnabled()) {\n yield this.statePersistence.deleteColumnState(this.persistColumnStateKey);\n this.columnState = [];\n }\n if (resetToDefault && this.columnApi) {\n if (((_a = this.defaultColumnConfig) === null || _a === void 0 ? void 0 : _a.length) > 0) {\n // Convert ColDef[] to ColumnState[] using utility function\n const columnState = convertColDefsToColumnStates(this.defaultColumnConfig);\n this.columnApi.applyColumnState({\n state: columnState,\n applyOrder: true,\n });\n }\n else {\n this.columnApi.resetColumnState();\n }\n this.handleColumnSizing();\n }\n });\n }\n restoreColumnState() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a;\n this.rehydrationAttempted = true;\n const colState = yield this.getSavedColumnState();\n if (colState && colState.length > 0) {\n (_a = this.columnApi) === null || _a === void 0 ? void 0 : _a.applyColumnState({\n state: colState,\n applyOrder: true,\n });\n }\n });\n }\n cacheFilterConfig() {\n var _a;\n this.setFilterModel(((_a = this.gridApi) === null || _a === void 0 ? void 0 : _a.getFilterModel()) || undefined);\n }\n restoreCachedFilterConfig() {\n return __awaiter(this, void 0, void 0, function* () {\n var _a, _b;\n const filterModel = yield this.getfilterModel();\n if (typeof filterModel !== 'undefined') {\n (_a = this.gridApi) === null || _a === void 0 ? void 0 : _a.setFilterModel(filterModel);\n (_b = this.gridApi) === null || _b === void 0 ? void 0 : _b.onFilterChanged();\n }\n });\n }\n /**\n * @public\n */\n get gridOptions() {\n return this.agGridOptions;\n }\n /**\n * @public\n */\n get isServerSide() {\n return this.gridProDatasource instanceof GridProServerSideDatasource;\n }\n /**\n * @public\n */\n get gridParams() {\n return {\n globalEventListener: this.globalEventListener.bind(this),\n };\n }\n /**\n * Get the datasource element.\n * @remarks This will return the first datasource element found in the light DOM, wrapping all concrete datasource implementations.\n * @public\n */\n get gridProDatasource() {\n return (this.querySelector('grid-pro-genesis-datasource') ||\n this.querySelector('grid-pro-client-side-datasource') ||\n this.querySelector('grid-pro-server-side-datasource'));\n }\n set gridOptions(options) {\n const debounceSaveColumnState = debounce(this.saveColumnState.bind(this), DEBOUNCE_TIME);\n const debouceSaveFiltermodel = debounce(this.cacheFilterConfig.bind(this), DEBOUNCE_TIME);\n const gridOnChangeCallback = () => {\n debounceSaveColumnState();\n this.debouncedColumnAutosize.bind(this)();\n this.invalidateColumnWidthCache();\n };\n Array.from(this.attributes).forEach((attribute) => {\n const attrName = this.agPropertiesMap[attribute.name];\n if (!attrName)\n return;\n this.agAttributes[attrName] = attribute.value;\n });\n const { columnDefs, components, defaultColDef, getRowId, onGridReady, onFilterChanged, onFirstDataRendered } = options, rest = __rest(options, [\"columnDefs\", \"components\", \"defaultColDef\", \"getRowId\", \"onGridReady\", \"onFilterChanged\", \"onFirstDataRendered\"]);\n const derivedOptions = Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, this.gridOptionsConfig), { defaultColDef: Object.assign({ enableCellChangeFlash: this.enableCellFlashing, filter: true, resizable: true, sortable: true }, defaultColDef), components: this.combineAllGridComponents(components), suppressDragLeaveHidesColumns: true }), this.eventsAndCallbacks), { onGridReady: (event) => {\n var _a, _b;\n this.gridApi = event.api;\n this.columnApi = event.columnApi;\n if (this.gridEventsQueue.length) {\n this.gridEventsQueue.forEach((type) => {\n this.addGridEventListener(type);\n });\n }\n if (this.rowData) {\n this.gridApi.setRowData(this.rowData);\n }\n if (onGridReady) {\n onGridReady(event);\n }\n if (this.columnState && ((_a = this.columnState) === null || _a === void 0 ? void 0 : _a.length) > 0) {\n this.columnApi.applyColumnState({\n state: this.columnState,\n applyOrder: true,\n });\n }\n this.$emit(Events.EVENT_GRID_READY, {\n event,\n gridId: this.id,\n });\n // TODO: Remove this event when we do the AG Upgrade\n this.$emit(GRID_READY_EVENT, {\n event,\n gridId: this.id,\n });\n // Emit datasource ready event, signals that the datasource is ready to be used\n // TODO: prevent rendering datasource slot until grid is ready\n // so there is no need for this even and handling it in datasources\n (_b = this.gridProDatasource) === null || _b === void 0 ? void 0 : _b.$emit(datasourceEventNames.ready, { pagination: this.pagination });\n this.restoreColumnState.bind(this)();\n this.restoreCachedFilterConfig.bind(this)();\n this.debouncedColumnAutosize.bind(this)();\n }, onFirstDataRendered: (event) => {\n // Handle column sizing\n this.handleColumnSizing();\n // Call the original onFirstDataRendered if provided\n if (onFirstDataRendered) {\n onFirstDataRendered(event);\n }\n }, onColumnPinned: gridOnChangeCallback, onColumnResized: gridOnChangeCallback, onColumnMoved: gridOnChangeCallback, onDisplayedColumnsChanged: gridOnChangeCallback, onFilterChanged: (filterChangedEvent) => {\n debouceSaveFiltermodel();\n if (onFilterChanged) {\n onFilterChanged(filterChangedEvent);\n }\n }, onGridSizeChanged: gridOnChangeCallback, onSortChanged: gridOnChangeCallback }), rest);\n const hasGetRowId = 'getRowId' in (options !== null && options !== void 0 ? options : {});\n if (this.gridProDatasource) {\n derivedOptions.columnDefs = columnDefs;\n if (hasGetRowId) {\n derivedOptions.getRowId = getRowId;\n }\n this.setupPaginationAndStatusBar(derivedOptions);\n this.setLocalGridOptions(derivedOptions);\n }\n else {\n this.mergeAllColumnDefsAndStates(columnDefs).then((value) => {\n derivedOptions.columnDefs = value;\n if (hasGetRowId) {\n derivedOptions.getRowId = getRowId;\n }\n this.setupPaginationAndStatusBar(derivedOptions);\n this.setLocalGridOptions(derivedOptions);\n this.initGrid();\n });\n }\n }\n setLocalGridOptions(derivedOptions) {\n this.agGridOptions = Object.assign(Object.assign({}, this.agGridOptions), copyAttributesToGridOptions(derivedOptions, this.agAttributes));\n }\n /**\n * Clears the local grid options, this is used to clear the grid options when the grid is restarted.\n * @public\n */\n clearLocalGridOptions() {\n this.agGridOptions = undefined;\n }\n initGrid() {\n DOM.queueUpdate(() => {\n if (this.initialised) {\n // Needed due gridSlot children cleanup\n if (this.gridSlot.firstChild) {\n // prevent re-instantiating the grid using the same slot content\n this.gridSlot.removeChild(this.gridSlot.firstChild);\n }\n }\n this.agGrid = new Grid(this.gridSlot, this.agGridOptions, this.gridParams);\n this.initialised = true;\n });\n }\n /**\n * Will merge templated column definitions with `columnDefs` plus localStorage's column state or `deferredColumnStates`.\n * @deprecated use `applyTemplateDefinitions` instead.\n * @param columnDefs - The column definitions to apply to the grid.\n * @param deferredColumnDefsOrState - If true, will merge the column definitions with the saved column state or the `deferredColumnStates` property on the `grid-pro-genesis-datasource` element.\n * @returns The merged column definitions.\n */\n applyTemplateDefinitions(columnDefs, deferredColumnDefsOrState = false) {\n logger.deprecated('applyTemplateDefinitions', 'Use `mergeAllColumnDefsAndStates` instead.');\n return this.mergeAllColumnDefsAndStates(columnDefs, deferredColumnDefsOrState);\n }\n /**\n * Will merge templated column definitions with `columnDefs` plus localStorage's column state or `deferredColumnStates`.\n * @public\n * @remarks This will favor the column state from the browser's local storage over the `deferredColumnStates` property on the `grid-pro-genesis-datasource` element.\n * @param columnDefs - The column definitions to apply to the grid.\n * @param deferredColumnDefsOrState - If true, will merge the column definitions with the saved column state or the `deferredColumnStates` property\n * on the `grid-pro-genesis-datasource` element. Defaults to false but `grid-pro-genesis-datasource` will set this to true.\n * @returns The merged column definitions.\n */\n mergeAllColumnDefsAndStates(columnDefs_1) {\n return __awaiter(this, arguments, void 0, function* (columnDefs, deferredColumnDefsOrState = false) {\n var _a;\n const columnDefinitionsFromMetadata = columnDefs || [];\n columnDefinitionsFromMetadata.forEach((colDefFromMetadata) => {\n if (this.headerCaseType && colDefFromMetadata.field && !colDefFromMetadata.headerName) {\n const changeCaseByType = changeCase[this.headerCaseType];\n if (changeCaseByType) {\n colDefFromMetadata.headerName = changeCaseByType(colDefFromMetadata.field);\n }\n else {\n logger.warn(`Invalid header-case-type attribute value: ${this.headerCaseType}. Please use one of the following: camelCase, capitalCase, dotCase, headerCase, noCase, paramCase, pascalCase, pathCase, sentenceCase, snakeCase.`);\n }\n }\n });\n const templateColumnDefs = Array.from(this.querySelectorAll(this.columnComponentName))\n .map((templateColumn) => templateColumn.definition)\n .map((columnDef) => {\n var _a, _b;\n // enable cell flashing for each column if unspecified on column level but enabled on grid level\n if (this.enableCellFlashing && columnDef.enableCellChangeFlash === undefined) {\n columnDef.enableCellChangeFlash = true;\n }\n /**\n * If the column has a set filter, merge filter params with metadata values.\n * If the template column explicitly sets 'values' in filterParams (even to undefined),\n * respect that choice and don't inject metadata values. This allows consumers to\n * opt out of metadata values and let AG Grid extract values from row data instead.\n */\n if (columnDef.filter === 'agSetColumnFilter') {\n const hasExplicitValues = columnDef.filterParams != null && 'values' in columnDef.filterParams;\n if (!hasExplicitValues) {\n const metadataValues = (_b = (_a = columnDefinitionsFromMetadata.find((colDef) => colDef.field === columnDef.field)) === null || _a === void 0 ? void 0 : _a.filterParams) === null || _b === void 0 ? void 0 : _b.values;\n if (metadataValues) {\n columnDef.filterParams = Object.assign(Object.assign({}, columnDef.filterParams), { values: metadataValues });\n }\n }\n }\n if (columnDef.editable) {\n if (!columnDef.cellRenderer && !columnDef.cellRendererSelector) {\n columnDef.cellRendererSelector = (params) => {\n if (!(params === null || params === void 0 ? void 0 : params.data)) {\n return undefined;\n }\n if (params.data[EDITED_COLUMN_FIELD] === columnDef.field) {\n return {\n component: GridProRendererTypes.editable,\n };\n }\n };\n }\n if (!columnDef.tooltipComponent && !columnDef.tooltipValueGetter) {\n columnDef.tooltipComponent = ErrorTooltip;\n columnDef.tooltipValueGetter = (params) => {\n if (!(params === null || params === void 0 ? void 0 : params.data)) {\n return undefined;\n }\n const error = params.data[ERROR_COLUMN_FIELD];\n if (error && error.column === columnDef.field) {\n return error.message;\n }\n };\n }\n if (!columnDef.cellClassRules) {\n columnDef.cellClassRules = {\n error: (params) => {\n var _a;\n if (!(params === null || params === void 0 ? void 0 : params.colDef) || !(params === null || params === void 0 ? void 0 : params.data)) {\n return false;\n }\n return ((_a = params.data[ERROR_COLUMN_FIELD]) === null || _a === void 0 ? void 0 : _a.column) === params.colDef.field;\n },\n };\n }\n }\n const metadataColumnDef = columnDefinitionsFromMetadata.find((colDef) => columnDef.field === colDef.field);\n return Object.assign(Object.assign({}, metadataColumnDef), columnDef);\n });\n const templateColumnKeys = templateColumnDefs.map((x) => x.field);\n const colDefsToReturn = [\n ...templateColumnDefs,\n ...(this.onlyTemplateColDefs\n ? []\n : columnDefinitionsFromMetadata.filter((g) => !templateColumnKeys.includes(g.field))),\n ];\n if (this.gridProDatasource && deferredColumnDefsOrState) {\n const savedColumnState = yield this.getSavedColumnState();\n if ((savedColumnState === null || savedColumnState === void 0 ? void 0 : savedColumnState.length) > 0) {\n return mergeAndDedupColDefWithColumnState(colDefsToReturn, savedColumnState);\n }\n else if (((_a = this.gridProDatasource.deferredColumnStates) === null || _a === void 0 ? void 0 : _a.length) > 0) {\n return mergeAndDedupColDefWithColumnState(colDefsToReturn, this.gridProDatasource.deferredColumnStates);\n }\n }\n return colDefsToReturn;\n });\n }\n panelExists(statusPanelType, panels) {\n return panels.some((panel) => panel.statusPanel === statusPanelType);\n }\n addRowCountPanel(statusPanels, gridOptions) {\n // Row count is handled by pagination status bar component when pagination is enabled.\n // This component is only used for server-side infinite scroll (load more) scenarios\n // where pagination is disabled.\n if (this.statusBarConfig && this.statusBarConfig.rows === true) {\n const isServerSide = this.isServerSide || (gridOptions === null || gridOptions === void 0 ? void 0 : gridOptions.rowModelType) === 'serverSide';\n const isPaginationEnabled = this['_pagination'] || (gridOptions === null || gridOptions === void 0 ? void 0 : gridOptions.pagination) === true;\n if (isServerSide && !isPaginationEnabled) {\n if (!this.panelExists(GridProStatusBarTypes.rowCount, statusPanels)) {\n statusPanels.push({\n statusPanel: GridProStatusBarTypes.rowCount,\n align: 'left',\n });\n }\n }\n else if (!isServerSide) {\n const rowCountStatusPanel = 'agTotalAndFilteredRowCountComponent';\n if (!this.panelExists(rowCountStatusPanel, statusPanels)) {\n statusPanels.push({\n statusPanel: rowCountStatusPanel,\n align: 'left',\n });\n }\n }\n }\n }\n addMaxRowsPanel(statusPanels) {\n if (this.statusBarConfig && this.statusBarConfig.maxRows === true) {\n if (!this.panelExists(GridProStatusBarTypes.labelValue, statusPanels)) {\n statusPanels.push({\n statusPanel: GridProStatusBarTypes.labelValue,\n statusPanelParams: {\n label: 'Max Rows',\n value: this.gridProDatasource.maxRows || DatasourceDefaults.MAX_ROWS_250,\n hide: false,\n },\n align: 'left',\n });\n }\n }\n }\n addAggregationPanel(statusPanels) {\n if (this.statusBarConfig && this.statusBarConfig.aggregation === true) {\n if (!this.panelExists('agAggregationComponent', statusPanels)) {\n statusPanels.push({\n statusPanel: 'agAggregationComponent',\n align: 'right',\n });\n }\n }\n }\n addDatasourcePanels(statusPanels) {\n if (this.gridProDatasource) {\n const datasourceStatusPanels = this.gridProDatasource.getDatasourceStatusBarPanels(this.isServerSide, this.statusBarConfig);\n // Filter out duplicate datasource panels\n const newDatasourcePanels = datasourceStatusPanels.filter((panel) => !this.panelExists(panel.statusPanel, statusPanels));\n statusPanels.push(...newDatasourcePanels);\n }\n }\n addPaginationPanel(statusPanels) {\n if (this['_pagination']) {\n if (!this.panelExists(GridProStatusBarTypes.pagination, statusPanels)) {\n statusPanels.push({\n statusPanel: GridProStatusBarTypes.pagination,\n align: 'right',\n });\n }\n }\n }\n setupPaginationAndStatusBar(gridOptions) {\n // Keep the guard for production code, but allow override for testing\n // if (this.initialised && !allowDuplicateCheck) return;\n var _a, _b;\n if (this['_pagination']) {\n gridOptions.pagination = true;\n gridOptions.suppressScrollOnNewData = true;\n gridOptions.paginationPageSize = this.paginationPageSize;\n }\n // Set default status bar with components based on configuration\n if (this.withStatusBar && this.statusBarConfig) {\n // For duplicate checking (testing scenario), clear existing status panels to prevent duplicates\n // unless they are user-defined panels that we want to preserve\n const existingPanels = ((_a = gridOptions.statusBar) === null || _a === void 0 ? void 0 : _a.statusPanels) || [];\n const statusPanels = [...existingPanels];\n this.addRowCountPanel(statusPanels, gridOptions);\n this.addMaxRowsPanel(statusPanels);\n this.addAggregationPanel(statusPanels);\n this.addDatasourcePanels(statusPanels);\n if (this['_pagination']) {\n gridOptions.suppressPaginationPanel = true;\n this.addPaginationPanel(statusPanels);\n }\n const userDefinedStatusPanels = ((_b = gridOptions.statusBar) === null || _b === void 0 ? void 0 : _b.statusPanels) || [];\n const newUserDefinedPanels = userDefinedStatusPanels.filter((panel) => !this.panelExists(panel.statusPanel, statusPanels));\n statusPanels.push(...newUserDefinedPanels);\n gridOptions.statusBar = {\n statusPanels: statusPanels,\n };\n }\n }\n /**\n * Handles column sizing based on sizeColumnsToContent and sizeColumnsToFit attributes\n * @private\n */\n handleColumnSizing() {\n if (!this.sizeColumnsToContent && !this.sizeColumnsToFit)\n return;\n if (this.sizeColumnsToContent && this.sizeColumnsToFit && this.columnApi && this.gridApi) {\n this.handleBothSizingModes();\n }\n else {\n this.handleIndividualSizingModes();\n }\n }\n /**\n * Handles when both sizeColumnsToContent and sizeColumnsToFit are enabled\n * @private\n */\n handleBothSizingModes() {\n const totalColumnWidth = this.calculateTotalColumnWidth();\n const gridWidth = this.getGridWidth();\n if (totalColumnWidth > gridWidth) {\n if (!this.columnApi)\n return;\n this.columnApi.autoSizeAllColumns();\n }\n else {\n if (!this.gridApi)\n return;\n this.gridApi.sizeColumnsToFit();\n }\n }\n /**\n * Handles individual sizing modes when only one is enabled\n * @private\n */\n handleIndividualSizingModes() {\n if (this.sizeColumnsToContent && this.columnApi) {\n this.columnApi.autoSizeAllColumns();\n }\n if (this.sizeColumnsToFit && this.gridApi) {\n this.gridApi.sizeColumnsToFit();\n }\n }\n /**\n * Calculates the total width of all columns\n * @private\n */\n calculateTotalColumnWidth() {\n if (!this.columnApi) {\n return 0;\n }\n const allColumns = this.columnApi.getAllGridColumns();\n const currentColumnCount = allColumns.length;\n // Check if cache is still valid (same number of columns)\n if (this.cachedTotalColumnWidth !== null && this.columnCount === currentColumnCount) {\n return this.cachedTotalColumnWidth;\n }\n // Calculate and cache the total width\n this.cachedTotalColumnWidth = allColumns.reduce((sum, col) => sum + (col.getActualWidth() || 0), 0);\n this.columnCount = currentColumnCount;\n return this.cachedTotalColumnWidth;\n }\n /**\n * Invalidates the cached column width calculation\n * @private\n * @remarks This method is called automatically when column changes occur (resize, move, pin, etc.)\n * to ensure the cached width calculation remains accurate.\n */\n invalidateColumnWidthCache() {\n this.cachedTotalColumnWidth = null;\n this.columnCount = 0;\n }\n /**\n * Gets the available grid width with fallbacks\n * @private\n */\n getGridWidth() {\n const gridElement = this;\n let gridWidth = (gridElement === null || gridElement === void 0 ? void 0 : gridElement.clientWidth) || 0;\n if (gridWidth === 0 && this.gridSlot) {\n gridWidth = this.gridSlot.clientWidth || 0;\n }\n if (gridWidth === 0) {\n gridWidth = this.clientWidth || 0;\n }\n return gridWidth;\n }\n get observedAttributes() {\n // allow properties to be supplied either lowercased or kebab-cased\n // this allows the user to either supply (for example) enableSorting or enabled-sorting\n // properties lowercased\n const lowerCasedPropertyNames = AG_PROPERTIES.map((property) => property.toLowerCase());\n // properties kebab-cased\n const kebabCasePropertyNames = AG_PROPERTIES.map((property) => convertToKebabCase(property));\n return lowerCasedPropertyNames.concat(kebabCasePropertyNames);\n }\n agAttributeChangedCallback(attName, oldValue, newValue) {\n if (oldValue === newValue) {\n return;\n }\n const gridPropertyName = this.agPropertiesMap[attName];\n if (gridPropertyName) {\n // for properties set before gridOptions is called\n this.agAttributes[gridPropertyName] = newValue;\n if (this.initialised) {\n // for subsequent (post gridOptions) changes\n const changeObject = {};\n changeObject[gridPropertyName] = { currentValue: newValue };\n ComponentUtil.processOnChange(changeObject, this.gridApi);\n }\n }\n }\n globalEventListener(eventType, event) {\n const eventLowerCase = eventType.toLowerCase();\n const browserEvent = new Event(eventLowerCase);\n const browserEventNoType = browserEvent;\n browserEventNoType.agGridDetails = event;\n // for when defining events via myGrid.addEventListener('columnresized', function (event) {...\n this.dispatchEvent(browserEvent);\n // for when defining events via myGrid.oncolumnresized = function (event) {....\n const callbackMethod = 'on' + eventLowerCase;\n if (typeof this[callbackMethod] === 'function') {\n this[callbackMethod](browserEvent);\n }\n }\n insertFontFace(newValue) {\n const fontFaceRule = agThemeFontFaceMap[newValue] || this.gridFontFace;\n this.destroyFontFace();\n const newDestroy = insertDocumentCSSRule(fontFaceRule, agThemeFontsId(newValue));\n if (newDestroy) {\n this.fontFaceDestroy = newDestroy;\n }\n }\n destroyFontFace() {\n if (this.fontFaceDestroy) {\n this.fontFaceDestroy();\n this.fontFaceDestroy = null;\n }\n }\n}\n__decorate([\n observable\n], GridPro.prototype, \"columnApi\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"gridApi\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"gridErrorItems\", void 0);\n__decorate([\n StatePersistence\n], GridPro.prototype, \"statePersistence\", void 0);\n__decorate([\n attr({ attribute: 'auto-cell-renderer-by-type', mode: 'boolean' })\n], GridPro.prototype, \"autoCellRendererByType\", void 0);\n__decorate([\n attr({ attribute: 'only-template-col-defs', mode: 'boolean' })\n], GridPro.prototype, \"onlyTemplateColDefs\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'grid-autosizing' })\n], GridPro.prototype, \"gridAutosizingEnabled\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'size-columns-to-content' })\n], GridPro.prototype, \"sizeColumnsToContent\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'size-columns-to-fit' })\n], GridPro.prototype, \"sizeColumnsToFit\", void 0);\n__decorate([\n attr({ attribute: 'add-index' })\n], GridPro.prototype, \"addIndex\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'async-add' })\n], GridPro.prototype, \"asyncAdd\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'async-remove' })\n], GridPro.prototype, \"asyncRemove\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'async-update' })\n], GridPro.prototype, \"asyncUpdate\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'enable-cell-flashing' })\n], GridPro.prototype, \"enableCellFlashing\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'enabled-row-flashing' })\n], GridPro.prototype, \"enabledRowFlashing\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'enable-row-flashing' })\n], GridPro.prototype, \"enableRowFlashing\", void 0);\n__decorate([\n attr({ attribute: 'persist-column-state-key' })\n], GridPro.prototype, \"persistColumnStateKey\", void 0);\n__decorate([\n attr({ attribute: 'persist-filter-model-key' })\n], GridPro.prototype, \"persistFilterModelKey\", void 0);\n__decorate([\n attr({ attribute: 'default-column-config' })\n], GridPro.prototype, \"defaultColumnConfig\", void 0);\n__decorate([\n attr({ attribute: 'header-case-type' })\n], GridPro.prototype, \"headerCaseType\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"rowData\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"gridFontFace\", void 0);\n__decorate([\n attr\n], GridPro.prototype, \"columnComponentName\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"eventsAndCallbacks\", void 0);\n__decorate([\n attr\n], GridPro.prototype, \"headerHeight\", void 0);\n__decorate([\n attr\n], GridPro.prototype, \"rowHeight\", void 0);\n__decorate([\n attr\n], GridPro.prototype, \"theme\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"classNames\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"agGrid\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"gridSlot\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"themeMode\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"gridComponents\", void 0);\n__decorate([\n attr({ mode: 'boolean' })\n], GridPro.prototype, \"pagination\", void 0);\n__decorate([\n attr({ attribute: 'pagination-page-size' })\n], GridPro.prototype, \"paginationPageSize\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"statusBarConfig\", void 0);\n__decorate([\n attr({ mode: 'boolean', attribute: 'with-status-bar' })\n], GridPro.prototype, \"withStatusBar\", void 0);\n__decorate([\n observable\n], GridPro.prototype, \"customErrorHandlerTemplate\", void 0);\n__decorate([\n GridOptionsConfig\n], GridPro.prototype, \"gridOptionsConfig\", void 0);\n/**\n * GridPro shadow root options.\n * @public\n * @remarks\n * For extensibility, this can be used to set the shadow root mode and delegatesFocus\n */\nexport const foundationGridProShadowOptions = undefined;\n/**\n * Grid Pro default configuration.\n * @public\n */\nexport const defaultGridProConfig = {\n shadowOptions: undefined,\n};\n/**\n * A function that returns a Foundation Grid Pro registration for configuring the component with a DesignSystem.\n *\n * @public\n * @remarks\n * HTML Element: \\<foundation-grid-pro\\>\n */\nexport const foundationGridPro = GridPro.compose(Object.assign({ baseName: 'grid-pro', styles,\n template, shadowOptions: foundationGridProShadowOptions }, defaultGridProConfig));\n","import { css } from '@microsoft/fast-element';\nimport { errorHandlerDialogStyles } from './datasource/error-handler.dialog';\nimport { agExternalStockStyles } from './external';\n/**\n * The Grid Pro styles.\n * @public\n * @remarks this is the default CSS, bundles Alpine/Balham/Material AG themes.\n */\nexport const foundationGridProStyles = css `\n ${agExternalStockStyles}\n ${errorHandlerDialogStyles}\n :host {\n --datasource-error-background-color: var(--neutral-layer-4);\n --datasource-error-background-opacity: 0.5;\n --datasource-error-dialog-max-width: 50%;\n --datasource-error-dialog-min-width: auto;\n --ag-status-bar-height: 32.5px;\n\n position: relative;\n width: 100%;\n height: 100%;\n }\n\n :host([ds-disconnected]) {\n display: block;\n }\n\n :host([ds-disconnected])::part(grid) {\n cursor: not-allowed;\n opacity: 40%;\n pointer-events: none;\n }\n\n .ag-side-bar,\n .ag-menu {\n --ag-subheader-background-color: var(--ag-background-color);\n --ag-control-panel-background-color: var(--ag-background-color);\n }\n\n .ag-cell-inline-editing {\n height: inherit !important;\n }\n\n .hidden {\n display: none;\n }\n\n .error {\n border-color: var(--error-color) !important;\n }\n\n .ag-status-bar {\n height: var(--ag-status-bar-height);\n }\n\n .ag-status-name-value {\n padding-top: var(--ag-grid-size);\n padding-bottom: var(--ag-grid-size);\n }\n\n /* Custom styling for the unsort icon (sortNone) - only for sortable columns */\n .ag-header-cell.ag-header-cell-sortable .ag-icon-none {\n opacity: 100%;\n color: var(--rapid-ag-header-foreground-color, var(--ag-foreground-color, #fff));\n font-size: calc(var(--ag-icon-size, 12px) * 1.2);\n font-weight: bold;\n }\n\n .ag-header-cell.ag-header-cell-sortable:hover .ag-icon-none {\n opacity: 100%;\n color: var(--rapid-ag-header-foreground-color, var(--ag-foreground-color, #fff));\n transform: scale(1.1);\n transition: transform 0.2s ease;\n }\n`;\n","import { html, ref } from '@microsoft/fast-element';\nimport { getErrorHandlerDialogTemplate } from './datasource/error-handler.dialog';\n/**\n * Get a Design System prefixed The Grid Pro template.\n * @param prefix - The design system prefix to use. Defaults to 'foundation'.\n * @returns A grid Pro template prefixed with the correct design system.\n * @public\n */\nexport const getGridProTemplate = (prefix = 'foundation') => html `\n <template>\n <span part=\"grid\" data-ag-theme-mode=${(x) => x.themeMode} class=\"${(x) => x.classNames}\">\n <slot name=\"grid\" ${ref('gridSlot')}></slot>\n <slot></slot>\n </span>\n ${(x) => x.customErrorHandlerTemplate\n ? x.customErrorHandlerTemplate(prefix, x.gridErrorItems.filter(({ type }) => type === 'datasource'))\n : getErrorHandlerDialogTemplate(prefix, x.gridErrorItems.filter(({ type }) => type === 'datasource'))}\n </template>\n`;\n/**\n *\n * @public\n * @remarks\n * HTML Element: <foundation-grid-pro>\n */\nexport const gridProTemplate = getGridProTemplate();\n","import { CSSVarsTokenMapper } from '@genesislcap/foundation-ui';\nimport { css } from '@microsoft/fast-element';\nimport { DI } from '@microsoft/fast-foundation';\n/**\n * All official AG CSS variables\n * @public\n */\nexport var AgGridCSSVars;\n(function (AgGridCSSVars) {\n AgGridCSSVars[\"foregroundColor\"] = \"--ag-foreground-color\";\n AgGridCSSVars[\"dataColor\"] = \"--ag-data-color\";\n AgGridCSSVars[\"secondaryForegroundColor\"] = \"--ag-secondary-foreground-color\";\n AgGridCSSVars[\"headerForegroundColor\"] = \"--ag-header-foreground-color\";\n AgGridCSSVars[\"disabledForegroundColor\"] = \"--ag-disabled-foreground-color\";\n AgGridCSSVars[\"backgroundColor\"] = \"--ag-background-color\";\n AgGridCSSVars[\"headerBackgroundColor\"] = \"--ag-header-background-color\";\n AgGridCSSVars[\"subheaderBackgroundColor\"] = \"--ag-subheader-background-color\";\n AgGridCSSVars[\"subheaderToolbarBackgroundColor\"] = \"--ag-subheader-toolbar-background-color\";\n AgGridCSSVars[\"controlPanelBackgroundColor\"] = \"--ag-control-panel-background-color\";\n AgGridCSSVars[\"selectedRowBackgroundColor\"] = \"--ag-selected-row-background-color\";\n AgGridCSSVars[\"oddRowBackgroundColor\"] = \"--ag-odd-row-background-color\";\n AgGridCSSVars[\"rowHoverColor\"] = \"--ag-row-hover-color\";\n AgGridCSSVars[\"rangeSelectionBorderColor\"] = \"--ag-range-selection-border-color\";\n AgGridCSSVars[\"rangeSelectionBackgroundColor\"] = \"--ag-range-selection-background-color\";\n AgGridCSSVars[\"selectedTabUnderlineColor\"] = \"--ag-selected-tab-underline-color\";\n AgGridCSSVars[\"rangeSelectionChartCategoryBackgroundColor\"] = \"--ag-range-selection-chart-category-background-color\";\n AgGridCSSVars[\"rangeSelectionChartBackgroundColor\"] = \"--ag-range-selection-chart-background-color\";\n AgGridCSSVars[\"headerCellHoverBackgroundColor\"] = \"--ag-header-cell-hover-background-color\";\n AgGridCSSVars[\"headerCellMovingBackgroundColor\"] = \"--ag-header-cell-moving-background-color\";\n AgGridCSSVars[\"chipBackgroundColor\"] = \"--ag-chip-background-color\";\n AgGridCSSVars[\"borderColor\"] = \"--ag-border-color\";\n AgGridCSSVars[\"secondaryBorderColor\"] = \"--ag-secondary-border-color\";\n AgGridCSSVars[\"rowBorderColor\"] = \"--ag-row-border-color\";\n AgGridCSSVars[\"headerColumnSeparatorColor\"] = \"--ag-header-column-separator-color\";\n AgGridCSSVars[\"headerColumnResizeHandleColor\"] = \"--ag-header-column-resize-handle-color\";\n AgGridCSSVars[\"inputBorderColor\"] = \"--ag-input-border-color\";\n AgGridCSSVars[\"inputDisabledBorderColor\"] = \"--ag-input-disabled-border-color\";\n AgGridCSSVars[\"inputDisabledBackgroundColor\"] = \"--ag-input-disabled-background-color\";\n AgGridCSSVars[\"checkboxBackgroundColor\"] = \"--ag-checkbox-background-color\";\n AgGridCSSVars[\"checkboxCheckedColor\"] = \"--ag-checkbox-checked-color\";\n AgGridCSSVars[\"checkboxUncheckedColor\"] = \"--ag-checkbox-unchecked-color\";\n AgGridCSSVars[\"checkboxIndeterminateColor\"] = \"--ag-checkbox-indeterminate-color\";\n AgGridCSSVars[\"toggleButtonOffBorderColor\"] = \"--ag-toggle-button-off-border-color\";\n AgGridCSSVars[\"toggleButtonOffBackgroundColor\"] = \"--ag-toggle-button-off-background-color\";\n AgGridCSSVars[\"toggleButtonOnBorderColor\"] = \"--ag-toggle-button-on-border-color\";\n AgGridCSSVars[\"toggleButtonOnBackgroundColor\"] = \"--ag-toggle-button-on-background-color\";\n AgGridCSSVars[\"toggleButtonSwitchBackgroundColor\"] = \"--ag-toggle-button-switch-background-color\";\n AgGridCSSVars[\"toggleButtonSwitchBorderColor\"] = \"--ag-toggle-button-switch-border-color\";\n AgGridCSSVars[\"minichartSelectedChartColor\"] = \"--ag-minichart-selected-chart-color\";\n AgGridCSSVars[\"minichartSelectedPageColor\"] = \"--ag-minichart-selected-page-color\";\n AgGridCSSVars[\"modalOverlayBackgroundColor\"] = \"--ag-modal-overlay-background-color\";\n AgGridCSSVars[\"inputFocusBoxShadow\"] = \"--ag-input-focus-box-shadow\";\n AgGridCSSVars[\"inputFocusBorderColor\"] = \"--ag-input-focus-border-color\";\n})(AgGridCSSVars || (AgGridCSSVars = {}));\n/**\n * The available Grid Pro themes.\n * @public\n */\nexport var AgGridTheme;\n(function (AgGridTheme) {\n AgGridTheme[\"alpine\"] = \"ag-theme-alpine\";\n AgGridTheme[\"alpineDark\"] = \"ag-theme-alpine-dark\";\n AgGridTheme[\"balham\"] = \"ag-theme-balham\";\n AgGridTheme[\"balhamDark\"] = \"ag-theme-balham-dark\";\n AgGridTheme[\"material\"] = \"ag-theme-material\";\n})(AgGridTheme || (AgGridTheme = {}));\n/**\n * Generates the class name for a given Grid Pro theme name.\n * @param themeName - the Grid Pro theme name\n * @returns the class name for the Grid Pro token map\n * @public\n * @example The result of this will be a class name that is applied to the grid part of GridPro template (actual content of the class comes from agThemeTokenMapCSS):\n * ```html\n * <span part=\"grid\" class=\"ag-theme-genesis-rapid-dark\">\n * ```\n */\nexport const agThemeTokenMapClassname = (themeName) => `${themeName}-token-map`;\n/**\n * Generates the id name for custom Grid Pro fonts.\n * @param themeName - the Grid Pro theme name\n * @returns the id name for the Grid Pro fonts\n * @public\n * @example The result of this is used in the id of style tag:\n * ```html\n * <style id=\"ag-theme-alpine-fonts\"></style>\n * ```\n */\nexport const agThemeFontsId = (themeName) => `${themeName}-fonts`;\n/**\n * Generates the CSS for a given GridPro theme name and token map\n * @param themeName - the GridPro theme name\n * @param tokenMap - a map of CSS variables {@link @genesislcap/grid-pro#AgGridCSSVars} and custom token values\n * @returns the CSS for the Grid Pro token map\n * @public\n * @example\n * ```ts\n * export const agThemeGenesisRapidTokens = {\n * backgroundColor: create<Swatch>('rapid-ag-background-color').withDefault((elem: HTMLElement) =>\n * baseLayerLuminance.getValueFor(elem) === StandardLuminance.LightMode\n * ? lightColors.backgroundSwatch\n * : darkColors.backgroundSwatch\n * ),\n * foregroundColor: create<Swatch>('rapid-ag-foreground-color').withDefault((elem: HTMLElement) =>\n * baseLayerLuminance.getValueFor(elem) === StandardLuminance.LightMode\n * ? lightColors.foregroundSwatch\n * : darkColors.foregroundSwatch\n * ),\n * };\n * export const agThemeGenesisRapidTokenMap: CSSVarTokenMap<AgGridCSSVars | string> = {\n * [AgGridCSSVars.backgroundColor]: agThemeGenesisRapidTokens.backgroundColor,\n * [AgGridCSSVars.foregroundColor]: agThemeGenesisRapidTokens.foregroundColor,\n * };\n * ```\n */\nexport const agThemeTokenMapCSS = (themeName, tokenMap) => css `\n .${agThemeTokenMapClassname(themeName)} {\n ${new CSSVarsTokenMapper(tokenMap)}\n }\n`;\n/**\n * The available Grid Pro Renderer Types\n * @public\n */\nexport var GridProRendererTypes;\n(function (GridProRendererTypes) {\n GridProRendererTypes[\"action\"] = \"action\";\n GridProRendererTypes[\"actionsMenu\"] = \"actionsMenu\";\n GridProRendererTypes[\"boolean\"] = \"boolean\";\n GridProRendererTypes[\"editable\"] = \"editable\";\n GridProRendererTypes[\"icon\"] = \"icon\";\n GridProRendererTypes[\"text\"] = \"text\";\n GridProRendererTypes[\"select\"] = \"select\";\n GridProRendererTypes[\"statusPill\"] = \"statusPill\";\n GridProRendererTypes[\"dateEditor\"] = \"dateEditor\";\n GridProRendererTypes[\"selectEditor\"] = \"selectEditor\";\n GridProRendererTypes[\"numberEditor\"] = \"numberEditor\";\n GridProRendererTypes[\"stringEditor\"] = \"stringEditor\";\n GridProRendererTypes[\"multiselectEditor\"] = \"multiselectEditor\";\n})(GridProRendererTypes || (GridProRendererTypes = {}));\n/**\n * The available Grid Pro Status Bar Types\n * @public\n * @remarks\n * These status bar components require AG Grid Enterprise module to be enabled.\n * Status bar components will only be displayed if the Enterprise module is available.\n * @see https://www.ag-grid.com/javascript-data-grid/component-status-bar/\n */\nexport var GridProStatusBarTypes;\n(function (GridProStatusBarTypes) {\n GridProStatusBarTypes[\"labelValue\"] = \"labelValue\";\n GridProStatusBarTypes[\"pagination\"] = \"pagination\";\n GridProStatusBarTypes[\"loadMore\"] = \"loadMore\";\n GridProStatusBarTypes[\"reload\"] = \"reload\";\n GridProStatusBarTypes[\"rowCount\"] = \"rowCount\";\n})(GridProStatusBarTypes || (GridProStatusBarTypes = {}));\n/**\n * Event fired when grid is ready\n * @public\n * @deprecated - Use `Events.EVENT_GRID_READY` from `@ag-grid-community/core` instead\n * @privateRemarks\n * This will be removed when we do the AG Upgrade.\n */\nexport const GRID_READY_EVENT = 'onGridReady';\n/**\n * Key used to store currently edited column when it being synced with server side data\n * @public\n */\nexport const EDITED_COLUMN_FIELD = '__editedColumn';\n/**\n * Key used to store error details (column, message) when inline edit fails sync with server side data\n * @public\n */\nexport const ERROR_COLUMN_FIELD = '__errorColumn';\n/**\n * Default grid options\n * @public\n */\nexport const defaultGridOptionsConfig = {};\n/**\n * Grid options config used to inject into grids in application\n * @internal\n */\nexport const GridOptionsConfig = DI.createInterface((x) => x.instance(defaultGridOptionsConfig));\n/**\n * The available Grid Pro header case types\n * @public\n */\nexport var GridProCaseType;\n(function (GridProCaseType) {\n GridProCaseType[\"camelCase\"] = \"camelCase\";\n GridProCaseType[\"capitalCase\"] = \"capitalCase\";\n GridProCaseType[\"dotCase\"] = \"dotCase\";\n GridProCaseType[\"headerCase\"] = \"headerCase\";\n GridProCaseType[\"noCase\"] = \"noCase\";\n GridProCaseType[\"paramCase\"] = \"paramCase\";\n GridProCaseType[\"pascalCase\"] = \"pascalCase\";\n GridProCaseType[\"pathCase\"] = \"pathCase\";\n GridProCaseType[\"sentenceCase\"] = \"sentenceCase\";\n GridProCaseType[\"snakeCase\"] = \"snakeCase\";\n})(GridProCaseType || (GridProCaseType = {}));\n/**\n * Default status bar configuration\n * @public\n */\nexport const DEFAULT_STATUS_BAR_CONFIG = {\n rows: true,\n maxRows: false,\n aggregation: true,\n loadMore: {\n tooltip: 'Load more rows from server',\n },\n reload: {\n tooltip: 'Reload the datasource.',\n },\n};\n","import { __awaiter, __decorate } from \"tslib\";\nimport { Session } from '@genesislcap/foundation-comms';\n/**\n * Implementation for the Local Storage State Persistence interface.\n * @public\n */\nexport class LocalStorageStatePersistence {\n getColumnState(persistColumnStateKey) {\n return __awaiter(this, void 0, void 0, function* () {\n const localStorageGridOptions = this.session.getLocalStorageItem('gridOptions');\n if (localStorageGridOptions) {\n const allGridOptions = JSON.parse(localStorageGridOptions);\n if (persistColumnStateKey in allGridOptions) {\n return JSON.parse(allGridOptions[persistColumnStateKey]);\n }\n }\n return [];\n });\n }\n saveColumnState(persistColumnStateKey, columnState) {\n return __awaiter(this, void 0, void 0, function* () {\n const existingOptions = JSON.parse(this.session.getLocalStorageItem('gridOptions') || '{}');\n existingOptions[persistColumnStateKey] = JSON.stringify(columnState);\n this.session.setLocalStorageItem('gridOptions', JSON.stringify(existingOptions));\n });\n }\n deleteColumnState(persistColumnStateKey) {\n return __awaiter(this, void 0, void 0, function* () {\n const existingOptions = JSON.parse(this.session.getLocalStorageItem('gridOptions') || '{}');\n delete existingOptions[persistColumnStateKey];\n this.session.setLocalStorageItem('gridOptions', JSON.stringify(existingOptions));\n });\n }\n getFilterModel(persistFilterModelKey) {\n return __awaiter(this, void 0, void 0, function* () {\n const localStorageGridOptions = this.session.getLocalStorageItem('gridOptions');\n if (localStorageGridOptions) {\n const allGridOptions = JSON.parse(localStorageGridOptions);\n if (persistFilterModelKey in allGridOptions) {\n return JSON.parse(allGridOptions[persistFilterModelKey]);\n }\n }\n return {};\n });\n }\n saveFilterModel(persistFilterModelKey, filterModel) {\n return __awaiter(this, void 0, void 0, function* () {\n const existingOptions = JSON.parse(this.session.getLocalStorageItem('gridOptions') || '{}');\n existingOptions[persistFilterModelKey] = JSON.stringify(filterModel);\n this.session.setLocalStorageItem('gridOptions', JSON.stringify(existingOptions));\n });\n }\n}\n__decorate([\n Session\n], LocalStorageStatePersistence.prototype, \"session\", void 0);\n","import { DI } from '@microsoft/fast-foundation';\nimport { LocalStorageStatePersistence } from './local-state';\n/**\n * The DI token for the StatePersistence interface.\n * @internal\n */\nexport const StatePersistence = DI.createInterface((x) => x.singleton(LocalStorageStatePersistence));\n","/**\n * Label Value Status Bar Component\n * @public\n */\nexport class LabelValueStatusBarComponent {\n init(params) {\n this.element = document.createElement('div');\n this.element.classList.add('ag-status-name-value', 'ag-status-panel');\n this.element.setAttribute('data-test-id', 'grid-label-value-panel');\n this.element.setAttribute('role', 'status');\n this.currentParams = params;\n this.updateDisplay();\n }\n updateParams(params) {\n this.currentParams = Object.assign(Object.assign({}, this.currentParams), params);\n this.updateDisplay();\n }\n updateDisplay() {\n if (!this.element)\n return;\n if (this.currentParams.hide) {\n this.element.style.display = 'none';\n return;\n }\n else {\n this.element.style.display = '';\n }\n // Set accessible label for the entire component\n this.element.setAttribute('aria-label', `${this.currentParams.label}: ${this.currentParams.value}`);\n // Create or update label element\n if (!this.labelElement) {\n this.labelElement = document.createElement('span');\n this.labelElement.setAttribute('data-test-id', 'grid-label-value-label');\n this.labelElement.setAttribute('aria-hidden', 'true');\n this.element.appendChild(this.labelElement);\n }\n this.labelElement.innerHTML = `${this.currentParams.label}:&nbsp; `;\n // Create or update value element\n if (!this.valueElement) {\n this.valueElement = document.createElement('span');\n this.valueElement.classList.add('ag-status-name-value-value');\n this.valueElement.setAttribute('data-test-id', 'grid-label-value-value');\n this.valueElement.setAttribute('aria-hidden', 'true');\n this.element.appendChild(this.valueElement);\n }\n this.valueElement.innerHTML = this.currentParams.value;\n }\n getGui() {\n return this.element;\n }\n destroy() { }\n}\n","import { __awaiter } from \"tslib\";\nimport { delay, getCurrentDesignSystemPrefix } from '@genesislcap/foundation-utils';\nconst LOADING_DELAY = 500;\n/**\n * A status bar component that shows a \"Load More\" button when more rows are available\n * @public\n */\nexport class LoadMoreStatusBarComponent {\n constructor() {\n this.buttonLabel = 'Load More';\n this.isLoading = false;\n this.isLeftAligned = false;\n }\n init(params) {\n var _a, _b, _c;\n this.params = params;\n this.gridApi = params.api;\n this.element = document.createElement('div');\n this.element.classList.add('ag-status-panel', 'ag-load-more-panel');\n this.element.setAttribute('data-test-id', 'grid-load-more-panel');\n this.element.setAttribute('role', 'region');\n this.element.setAttribute('aria-label', 'Load more data controls');\n this.element.style.display = 'flex';\n this.element.style.alignItems = 'center';\n // Determine alignment based on pagination status\n // When pagination is enabled, load more is aligned left, otherwise right\n this.isLeftAligned = ((_c = (_b = (_a = this.gridApi) === null || _a === void 0 ? void 0 : _a.gridOptionsService) === null || _b === void 0 ? void 0 : _b.gridOptions) === null || _c === void 0 ? void 0 : _c.pagination) || false;\n this.element.style.justifyContent = this.isLeftAligned ? 'flex-start' : 'flex-end';\n // Only add padding on the side where the button is\n this.element.style.paddingLeft = 'var(--ag-grid-size)';\n this.element.style.paddingRight = 'var(--ag-grid-size)';\n this.element.style.height = 'var(--ag-status-bar-height)';\n // Detect the current design system prefix (rapid or zero)\n this.designSystemPrefix = getCurrentDesignSystemPrefix(this.element, 'zero');\n this.createProgressRing();\n this.createLoadMoreButton();\n this.updateButtonVisibility();\n // Remove all children first to ensure correct ordering\n while (this.element.firstChild) {\n this.element.removeChild(this.element.firstChild);\n }\n // Add elements in the correct order based on alignment\n if (this.isLeftAligned) {\n // Left-aligned: Button first, then progress ring\n this.element.appendChild(this.loadMoreButton);\n this.element.appendChild(this.progressRing);\n }\n else {\n // Right-aligned: Progress ring first, then button\n this.element.appendChild(this.progressRing);\n this.element.appendChild(this.loadMoreButton);\n }\n }\n createProgressRing() {\n // Create the progress ring with the appropriate design system prefix\n this.progressRing = document.createElement(`${this.designSystemPrefix}-progress-ring`);\n this.progressRing.setAttribute('data-test-id', 'grid-load-more-progress');\n this.progressRing.setAttribute('aria-label', 'Loading more data');\n // Set styles for the progress ring\n this.progressRing.style.width = '20px';\n this.progressRing.style.height = '20px';\n // Different margin based on alignment - when left-aligned, progress ring goes after button\n this.progressRing.style.margin = this.isLeftAligned ? '0 0 0 8px' : '0 8px 0 0';\n this.progressRing.style.display = 'none'; // Hidden by default\n }\n createLoadMoreButton() {\n var _a, _b;\n // Create the button with the appropriate design system prefix\n this.loadMoreButton = document.createElement(`${this.designSystemPrefix}-button`);\n this.loadMoreButton.setAttribute('data-test-id', 'grid-load-more-button');\n // Set button appearance - use custom appearance if provided, otherwise default to 'outline'\n const appearance = ((_a = this.params) === null || _a === void 0 ? void 0 : _a.appearance) || 'outline';\n this.loadMoreButton.setAttribute('appearance', appearance);\n // Set button label - use default\n this.loadMoreButton.textContent = this.buttonLabel;\n // Set button styles - improve sizing to match UI better\n this.loadMoreButton.style.margin = '2px 8px';\n this.loadMoreButton.style.minWidth = '120px';\n this.loadMoreButton.style.textAlign = 'center';\n this.loadMoreButton.style.height = '24px';\n this.loadMoreButton.style.lineHeight = '20px';\n // Add native tooltip if provided\n if ((_b = this.params) === null || _b === void 0 ? void 0 : _b.tooltip) {\n this.loadMoreButton.setAttribute('title', this.params.tooltip);\n this.loadMoreButton.setAttribute('aria-describedby', 'grid-load-more-tooltip');\n }\n // Set initial ARIA attributes - use tooltip as aria-label if available, otherwise use default\n this.updateAriaLabel();\n this.loadMoreButton.setAttribute('role', 'button');\n // Add event listener for the load more action\n this.clickHandler = () => __awaiter(this, void 0, void 0, function* () {\n if (this.isLoading)\n return; // Prevent multiple clicks\n try {\n this.showLoading(true);\n yield delay(LOADING_DELAY);\n // Execute the load more action\n if (this.params.onLoadMore) {\n this.params.onLoadMore();\n }\n // After the action completes, hide the loading state\n // this.showLoading(false);\n }\n catch (error) {\n // In case of error, ensure loading state is hidden\n this.showLoading(false);\n }\n });\n this.loadMoreButton.addEventListener('click', this.clickHandler);\n }\n /**\n * Update the aria-label based on current state and tooltip\n */\n updateAriaLabel() {\n var _a, _b;\n let ariaLabel;\n if ((_a = this.params) === null || _a === void 0 ? void 0 : _a.tooltip) {\n // Use tooltip as primary aria-label\n ariaLabel = this.params.tooltip;\n }\n else {\n // Fall back to descriptive labels based on state\n if (this.isLoading) {\n ariaLabel = 'Loading more data';\n }\n else if ((_b = this.params) === null || _b === void 0 ? void 0 : _b.moreRows) {\n ariaLabel = 'Load more rows from server';\n }\n else {\n ariaLabel = 'No more rows available';\n }\n }\n this.loadMoreButton.setAttribute('aria-label', ariaLabel);\n }\n /**\n * Show or hide the loading state\n */\n showLoading(loading) {\n var _a;\n this.isLoading = loading;\n if (loading) {\n // Show loading state\n this.progressRing.style.display = 'inline-block';\n this.loadMoreButton.setAttribute('disabled', 'true');\n this.loadMoreButton.textContent = 'Loading...';\n }\n else {\n // Hide loading state\n this.progressRing.style.display = 'none';\n // Reset button state based on moreRows parameter\n if ((_a = this.params) === null || _a === void 0 ? void 0 : _a.moreRows) {\n this.loadMoreButton.textContent = 'Load More';\n this.loadMoreButton.removeAttribute('disabled');\n }\n else {\n this.loadMoreButton.textContent = 'No More Rows';\n this.loadMoreButton.setAttribute('disabled', 'true');\n }\n }\n // Update aria-label to reflect current state\n this.updateAriaLabel();\n }\n updateButtonVisibility() {\n // If we don't have params or during loading, don't update\n if (!this.params || this.isLoading) {\n return;\n }\n // Reset loading state (safeguard)\n this.progressRing.style.display = 'none';\n // If we have more rows, enable the button\n if (this.params.moreRows) {\n this.loadMoreButton.style.display = 'inline-flex';\n this.loadMoreButton.textContent = 'Load More';\n this.loadMoreButton.removeAttribute('disabled');\n }\n else {\n // No more rows available\n this.loadMoreButton.style.display = 'inline-flex';\n this.loadMoreButton.textContent = 'No More Rows';\n this.loadMoreButton.setAttribute('disabled', 'true');\n }\n // Update aria-label to reflect current state\n this.updateAriaLabel();\n }\n updateParams(params) {\n var _a, _b;\n const prevParams = this.params;\n this.params = Object.assign(Object.assign({}, this.params), params);\n // If tooltip changed, update the title attribute\n if ((prevParams === null || prevParams === void 0 ? void 0 : prevParams.tooltip) !== ((_a = this.params) === null || _a === void 0 ? void 0 : _a.tooltip) && ((_b = this.params) === null || _b === void 0 ? void 0 : _b.tooltip)) {\n this.loadMoreButton.setAttribute('title', this.params.tooltip);\n }\n // If we were loading, but got an update that says no more rows,\n // we need to stop the loading state immediately\n if (this.isLoading) {\n this.showLoading(false);\n }\n this.updateButtonVisibility();\n }\n getGui() {\n return this.element;\n }\n destroy() {\n // Clean up event listeners\n if (this.loadMoreButton && this.clickHandler) {\n this.loadMoreButton.removeEventListener('click', this.clickHandler);\n }\n }\n}\n","/**\n * Pagination Status Bar Component for AG Grid\n * Displays pagination controls and information about current page and total rows\n * @public\n */\nexport class PaginationStatusBarComponent {\n init(params) {\n this.api = params.api;\n this.element = document.createElement('div');\n this.element.className = 'ag-status-panel';\n this.element.setAttribute('data-test-id', 'grid-pagination-panel');\n this.element.setAttribute('role', 'navigation');\n this.element.setAttribute('aria-label', 'Pagination controls');\n this.element.style.display = 'flex';\n this.element.style.alignItems = 'center';\n this.element.style.justifyContent = 'flex-end';\n this.element.style.height = 'var(--ag-status-bar-height)';\n this.createPaginationPanel();\n // Initial update\n this.updateDisplay();\n // Listen to pagination changes\n this.paginationChangedHandler = () => {\n this.updateDisplay();\n };\n this.api.addEventListener('paginationChanged', this.paginationChangedHandler);\n }\n getGui() {\n return this.element;\n }\n createPaginationPanel() {\n // Create the main pagination panel\n this.paginationPanel = document.createElement('div');\n this.paginationPanel.className = 'ag-paging-panel ag-unselectable';\n this.paginationPanel.setAttribute('id', 'ag-pagination-clone');\n this.paginationPanel.setAttribute('data-test-id', 'grid-pagination-controls');\n // Row summary panel\n this.paginationSummaryPanel = document.createElement('span');\n this.paginationSummaryPanel.className = 'ag-paging-row-summary-panel';\n this.paginationSummaryPanel.setAttribute('role', 'status');\n this.paginationSummaryPanel.setAttribute('data-test-id', 'grid-pagination-summary');\n this.paginationSummaryPanel.setAttribute('aria-label', 'Row count summary');\n // First page button\n this.firstPageButton = this.createPaginationButton('btFirst', 'ag-paging-button ag-disabled', 'First Page', true);\n this.firstPageButton.setAttribute('data-test-id', 'grid-pagination-first');\n // Previous page button\n this.prevPageButton = this.createPaginationButton('btPrevious', 'ag-paging-button ag-disabled', 'Previous Page', true);\n this.prevPageButton.setAttribute('data-test-id', 'grid-pagination-previous');\n // Create the description panel\n this.descriptionPanel = document.createElement('span');\n this.descriptionPanel.className = 'ag-paging-description';\n this.descriptionPanel.setAttribute('role', 'status');\n this.descriptionPanel.setAttribute('data-test-id', 'grid-pagination-description');\n this.descriptionPanel.setAttribute('aria-label', 'Current page information');\n // Page information elements\n this.pageStartDisplay = document.createElement('span');\n this.pageStartDisplay.className = 'ag-paging-number';\n this.pageStartDisplay.setAttribute('id', 'ag-pagination-clone-start-page');\n this.pageStartDisplay.setAttribute('data-test-id', 'grid-pagination-page-label');\n this.pageStartDisplay.textContent = 'Page';\n this.pageNumberDisplay = document.createElement('span');\n this.pageNumberDisplay.className = 'ag-paging-number';\n this.pageNumberDisplay.setAttribute('id', 'ag-pagination-clone-start-page-number');\n this.pageNumberDisplay.setAttribute('ref', 'lbCurrent');\n this.pageNumberDisplay.setAttribute('data-test-id', 'grid-pagination-current-page');\n this.pageNumberDisplay.setAttribute('aria-label', 'Current page number');\n this.pageNumberDisplay.textContent = '1';\n this.pageOfDisplay = document.createElement('span');\n this.pageOfDisplay.className = 'ag-paging-number';\n this.pageOfDisplay.setAttribute('id', 'ag-pagination-clone-of-page');\n this.pageOfDisplay.setAttribute('data-test-id', 'grid-pagination-of-label');\n this.pageOfDisplay.textContent = 'of';\n this.pageNumberTotalDisplay = document.createElement('span');\n this.pageNumberTotalDisplay.className = 'ag-paging-number';\n this.pageNumberTotalDisplay.setAttribute('id', 'ag-pagination-clone-of-page-number');\n this.pageNumberTotalDisplay.setAttribute('ref', 'lbTotal');\n this.pageNumberTotalDisplay.setAttribute('data-test-id', 'grid-pagination-total-pages');\n this.pageNumberTotalDisplay.setAttribute('aria-label', 'Total number of pages');\n this.pageNumberTotalDisplay.textContent = '1';\n // Next page button\n this.nextPageButton = this.createPaginationButton('btNext', 'ag-paging-button', 'Next Page', false);\n this.nextPageButton.setAttribute('data-test-id', 'grid-pagination-next');\n // Last page button\n this.lastPageButton = this.createPaginationButton('btLast', 'ag-paging-button', 'Last Page', false);\n this.lastPageButton.setAttribute('data-test-id', 'grid-pagination-last');\n // Assemble the description panel\n this.descriptionPanel.appendChild(this.pageStartDisplay);\n this.descriptionPanel.appendChild(document.createTextNode(' '));\n this.descriptionPanel.appendChild(this.pageNumberDisplay);\n this.descriptionPanel.appendChild(document.createTextNode(' '));\n this.descriptionPanel.appendChild(this.pageOfDisplay);\n this.descriptionPanel.appendChild(document.createTextNode(' '));\n this.descriptionPanel.appendChild(this.pageNumberTotalDisplay);\n // Assemble the pagination panel\n this.paginationPanel.appendChild(this.paginationSummaryPanel);\n this.paginationPanel.appendChild(this.firstPageButton);\n this.paginationPanel.appendChild(this.prevPageButton);\n this.paginationPanel.appendChild(this.descriptionPanel);\n this.paginationPanel.appendChild(this.nextPageButton);\n this.paginationPanel.appendChild(this.lastPageButton);\n // Add to main container\n this.element.appendChild(this.paginationPanel);\n // Add event listeners with keyboard support\n this.addPaginationEventListeners();\n }\n addPaginationEventListeners() {\n // Click event listeners\n this.firstPageButton.addEventListener('click', () => this.goToPage('first'));\n this.prevPageButton.addEventListener('click', () => this.goToPage('previous'));\n this.nextPageButton.addEventListener('click', () => this.goToPage('next'));\n this.lastPageButton.addEventListener('click', () => this.goToPage('last'));\n // Keyboard event listeners for accessibility\n this.firstPageButton.addEventListener('keydown', (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.goToPage('first');\n }\n });\n this.prevPageButton.addEventListener('keydown', (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.goToPage('previous');\n }\n });\n this.nextPageButton.addEventListener('keydown', (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.goToPage('next');\n }\n });\n this.lastPageButton.addEventListener('keydown', (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n this.goToPage('last');\n }\n });\n }\n createPaginationButton(ref, className, ariaLabel, disabled) {\n const button = document.createElement('div');\n button.setAttribute('ref', ref);\n button.className = className;\n button.setAttribute('role', 'button');\n button.setAttribute('aria-label', ariaLabel);\n button.setAttribute('tabindex', disabled ? '-1' : '0');\n if (disabled) {\n button.setAttribute('aria-disabled', 'true');\n }\n const iconSpan = document.createElement('span');\n iconSpan.className = `ag-icon ag-icon-${ref.substring(2).toLowerCase()}`;\n iconSpan.setAttribute('unselectable', 'on');\n iconSpan.setAttribute('role', 'presentation');\n button.appendChild(iconSpan);\n return button;\n }\n goToPage(page) {\n var _a;\n const apiAny = this.api;\n const methodMap = {\n first: ['paginationGoToFirstPage', 'goToFirstPage'],\n previous: ['paginationGoToPreviousPage', 'goToPreviousPage'],\n next: ['paginationGoToNextPage', 'goToNextPage'],\n last: ['paginationGoToLastPage', 'goToLastPage'],\n };\n const [directMethod, proxyMethod] = methodMap[page];\n if (typeof apiAny[directMethod] === 'function') {\n apiAny[directMethod]();\n }\n else if (typeof ((_a = apiAny.paginationProxy) === null || _a === void 0 ? void 0 : _a[proxyMethod]) === 'function') {\n apiAny.paginationProxy[proxyMethod]();\n }\n }\n updateDisplay() {\n var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;\n // Use compatibility layer for v34 pagination API\n const apiAny = this.api;\n const currentPage = ((_e = (_b = (_a = apiAny.paginationGetCurrentPage) === null || _a === void 0 ? void 0 : _a.call(apiAny)) !== null && _b !== void 0 ? _b : (_d = (_c = apiAny.paginationProxy) === null || _c === void 0 ? void 0 : _c.getCurrentPage) === null || _d === void 0 ? void 0 : _d.call(_c)) !== null && _e !== void 0 ? _e : 0) + 1; // 1-based for display\n const totalPages = (_k = (_g = (_f = apiAny.paginationGetTotalPages) === null || _f === void 0 ? void 0 : _f.call(apiAny)) !== null && _g !== void 0 ? _g : (_j = (_h = apiAny.paginationProxy) === null || _h === void 0 ? void 0 : _h.getTotalPages) === null || _j === void 0 ? void 0 : _j.call(_h)) !== null && _k !== void 0 ? _k : 1;\n const pageSize = (_m = (_l = apiAny.paginationGetPageSize) === null || _l === void 0 ? void 0 : _l.call(apiAny)) !== null && _m !== void 0 ? _m : (_p = (_o = apiAny.paginationProxy) === null || _o === void 0 ? void 0 : _o.getPageSize) === null || _p === void 0 ? void 0 : _p.call(_o);\n const rowCount = (_r = (_q = apiAny.paginationGetRowCount) === null || _q === void 0 ? void 0 : _q.call(apiAny)) !== null && _r !== void 0 ? _r : (_t = (_s = apiAny.paginationProxy) === null || _s === void 0 ? void 0 : _s.getMasterRowCount) === null || _t === void 0 ? void 0 : _t.call(_s);\n // Check if we're in server-side mode and if the total count is uncertain\n // Add null checks for test environment compatibility\n const isServerSide = ((_x = (_w = (_v = (_u = this.api).getModel) === null || _v === void 0 ? void 0 : _v.call(_u)) === null || _w === void 0 ? void 0 : _w.getType) === null || _x === void 0 ? void 0 : _x.call(_w)) === 'serverSide';\n const hasUncertainTotal = isServerSide && apiAny.paginationIsLastPageFound && !apiAny.paginationIsLastPageFound();\n // Update the page numbers\n this.pageNumberDisplay.textContent = currentPage.toString();\n this.pageNumberTotalDisplay.textContent = hasUncertainTotal ? 'more' : totalPages.toString();\n // Update accessibility attributes when showing \"more\"\n if (hasUncertainTotal) {\n this.pageNumberTotalDisplay.setAttribute('aria-label', 'More pages available');\n this.paginationSummaryPanel.setAttribute('aria-label', 'Row count summary with more data available');\n }\n else {\n this.pageNumberTotalDisplay.setAttribute('aria-label', 'Total number of pages');\n this.paginationSummaryPanel.setAttribute('aria-label', 'Row count summary');\n }\n // Update the row summary panel\n const startRow = (currentPage - 1) * pageSize + 1;\n const endRow = Math.min(currentPage * pageSize, rowCount);\n const totalDisplay = hasUncertainTotal ? 'more' : rowCount.toString();\n this.paginationSummaryPanel.textContent = `${rowCount > 0 ? startRow : 0} to ${endRow} of ${totalDisplay}`;\n // Update button states\n const isFirstPage = currentPage === 1;\n const isLastPage = hasUncertainTotal ? false : currentPage >= totalPages;\n this.updateButtonState(this.firstPageButton, isFirstPage);\n this.updateButtonState(this.prevPageButton, isFirstPage);\n this.updateButtonState(this.nextPageButton, isLastPage);\n // Disable \"last page\" button when we don't know the total (showing \"more\")\n this.updateButtonState(this.lastPageButton, hasUncertainTotal || isLastPage);\n // Update last page button accessibility when uncertain total\n if (hasUncertainTotal) {\n this.lastPageButton.setAttribute('aria-label', 'Last page unavailable - total number of pages unknown');\n this.lastPageButton.setAttribute('title', 'Cannot jump to last page when total is unknown');\n }\n else {\n this.lastPageButton.setAttribute('aria-label', 'Last Page');\n this.lastPageButton.removeAttribute('title');\n }\n }\n updateButtonState(button, disabled) {\n if (disabled) {\n button.classList.add('ag-disabled');\n button.setAttribute('aria-disabled', 'true');\n button.setAttribute('tabindex', '-1');\n }\n else {\n button.classList.remove('ag-disabled');\n button.setAttribute('aria-disabled', 'false');\n button.setAttribute('tabindex', '0');\n }\n }\n destroy() {\n // Remove event listeners\n if (this.api && this.paginationChangedHandler) {\n this.api.removeEventListener('paginationChanged', this.paginationChangedHandler);\n }\n this.api = null;\n this.paginationChangedHandler = null;\n }\n}\n","import { __awaiter } from \"tslib\";\nimport { delay, getCurrentDesignSystemPrefix } from '@genesislcap/foundation-utils';\n// Delay in milliseconds to keep the icon in disabled state for visual feedback\nconst RELOAD_DELAY = 500;\n/**\n * A status bar component that shows a refresh icon to reload the grid data\n * @public\n */\nexport class ReloadStatusBarComponent {\n constructor() {\n this.isReloading = false;\n }\n init(params) {\n this.params = params;\n this.element = document.createElement('div');\n this.element.classList.add('ag-status-panel', 'ag-reload-panel');\n this.element.setAttribute('data-test-id', 'grid-reload-panel');\n this.element.setAttribute('role', 'region');\n this.element.setAttribute('aria-label', 'Reload data controls');\n this.element.style.display = 'flex';\n this.element.style.alignItems = 'center';\n this.element.style.justifyContent = 'center';\n this.element.style.paddingLeft = 'var(--ag-grid-size)';\n this.element.style.height = 'var(--ag-status-bar-height)';\n // Detect the current design system prefix (rapid or zero)\n this.designSystemPrefix = getCurrentDesignSystemPrefix(this.element, 'zero');\n this.createRefreshIcon();\n this.createProgressRing();\n // Initially show the icon, hide the progress ring\n this.element.appendChild(this.refreshIcon);\n this.element.appendChild(this.progressRing);\n this.progressRing.style.display = 'none';\n }\n createProgressRing() {\n // Create the progress ring with the appropriate design system prefix\n this.progressRing = document.createElement(`${this.designSystemPrefix}-progress-ring`);\n this.progressRing.setAttribute('data-test-id', 'grid-reload-progress');\n this.progressRing.setAttribute('aria-label', 'Reloading data');\n // Set styles for the progress ring\n this.progressRing.style.width = '20px';\n this.progressRing.style.height = '20px';\n this.progressRing.style.margin = '4px';\n this.progressRing.style.display = 'none'; // Hidden by default\n }\n createRefreshIcon() {\n var _a, _b, _c, _d;\n // For design systems that support icons\n if (this.designSystemPrefix === 'zero' || this.designSystemPrefix === 'rapid') {\n this.refreshIcon = document.createElement(`${this.designSystemPrefix}-icon`);\n // Use custom icon if provided, otherwise default to 'refresh'\n const iconName = ((_a = this.params) === null || _a === void 0 ? void 0 : _a.icon) || 'refresh';\n this.refreshIcon.setAttribute('name', iconName);\n this.refreshIcon.setAttribute('aria-label', ((_b = this.params) === null || _b === void 0 ? void 0 : _b.tooltip) || 'Reload grid data');\n }\n else {\n // Fallback for systems without icon components\n this.refreshIcon = document.createElement('div');\n this.refreshIcon.textContent = '↻'; // Unicode refresh symbol\n this.refreshIcon.setAttribute('aria-label', ((_c = this.params) === null || _c === void 0 ? void 0 : _c.tooltip) || 'Reload grid data');\n }\n // Add accessibility attributes\n this.refreshIcon.setAttribute('data-test-id', 'grid-reload-button');\n this.refreshIcon.setAttribute('role', 'button');\n this.refreshIcon.setAttribute('tabindex', '0');\n // Set common styles for the icon - make it larger\n this.refreshIcon.style.cursor = 'pointer';\n this.refreshIcon.style.width = '28px';\n this.refreshIcon.style.height = '28px';\n this.refreshIcon.style.display = 'flex';\n this.refreshIcon.style.alignItems = 'center';\n this.refreshIcon.style.justifyContent = 'center';\n this.refreshIcon.style.fontSize = '20px'; // Increase text size for fallback icon\n // Add native tooltip if provided\n if ((_d = this.params) === null || _d === void 0 ? void 0 : _d.tooltip) {\n this.refreshIcon.setAttribute('title', this.params.tooltip);\n }\n // Add hover effect\n this.mouseoverHandler = () => {\n if (!this.isReloading) {\n this.refreshIcon.style.opacity = '0.7';\n }\n };\n this.refreshIcon.addEventListener('mouseover', this.mouseoverHandler);\n this.mouseoutHandler = () => {\n if (!this.isReloading) {\n this.refreshIcon.style.opacity = '1';\n }\n };\n this.refreshIcon.addEventListener('mouseout', this.mouseoutHandler);\n // Add click event listener\n this.clickHandler = () => __awaiter(this, void 0, void 0, function* () {\n if (this.isReloading)\n return; // Prevent multiple clicks\n try {\n this.showReloading(true);\n yield delay(RELOAD_DELAY);\n // Execute the reload action if provided\n if (this.params.onReload) {\n this.params.onReload();\n }\n // Reset the icon state\n this.showReloading(false);\n }\n catch (error) {\n // In case of error, ensure icon state is reset\n this.showReloading(false);\n }\n });\n this.refreshIcon.addEventListener('click', this.clickHandler);\n // Add keyboard support for accessibility\n this.refreshIcon.addEventListener('keydown', (event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n // Trigger the same click handler\n this.clickHandler(new MouseEvent('click'));\n }\n });\n }\n /**\n * Show or hide the reloading state\n */\n showReloading(reloading) {\n this.isReloading = reloading;\n if (reloading) {\n // Hide the icon and show the progress ring\n this.refreshIcon.style.display = 'none';\n this.progressRing.style.display = 'inline-block';\n }\n else {\n // Show the icon and hide the progress ring\n this.refreshIcon.style.display = 'inline-flex';\n this.progressRing.style.display = 'none';\n }\n }\n updateParams(params) {\n var _a, _b;\n const prevParams = this.params;\n this.params = Object.assign(Object.assign({}, this.params), params);\n // If tooltip changed, update the title attribute and aria-label\n if ((prevParams === null || prevParams === void 0 ? void 0 : prevParams.tooltip) !== ((_a = this.params) === null || _a === void 0 ? void 0 : _a.tooltip)) {\n if ((_b = this.params) === null || _b === void 0 ? void 0 : _b.tooltip) {\n this.refreshIcon.setAttribute('title', this.params.tooltip);\n this.refreshIcon.setAttribute('aria-label', this.params.tooltip);\n }\n else {\n this.refreshIcon.removeAttribute('title');\n this.refreshIcon.setAttribute('aria-label', 'Reload grid data');\n }\n }\n }\n getGui() {\n return this.element;\n }\n destroy() {\n // Clean up event listeners\n if (this.refreshIcon) {\n this.refreshIcon.removeEventListener('mouseover', this.mouseoverHandler);\n this.refreshIcon.removeEventListener('mouseout', this.mouseoutHandler);\n this.refreshIcon.removeEventListener('click', this.clickHandler);\n }\n }\n}\n","/**\n * Row Count Status Bar Component for Server-Side Infinite Scroll\n * Displays current row count information for server-side grids without pagination.\n * For pagination scenarios, use PaginationStatusBarComponent instead.\n * @public\n */\nexport class RowCountStatusBarComponent {\n init(params) {\n this.api = params.api;\n this.element = document.createElement('div');\n this.element.classList.add('ag-status-name-value', 'ag-status-panel');\n this.element.setAttribute('data-test-id', 'grid-row-count-panel');\n this.element.setAttribute('role', 'status');\n const labelElement = document.createElement('span');\n labelElement.setAttribute('data-test-id', 'grid-row-count-label');\n labelElement.setAttribute('aria-hidden', 'true');\n labelElement.innerHTML = 'Rows:&nbsp;';\n this.rowCountDisplay = document.createElement('span');\n this.rowCountDisplay.classList.add('ag-status-name-value-value');\n this.rowCountDisplay.setAttribute('data-test-id', 'grid-row-count-value');\n this.rowCountDisplay.setAttribute('aria-hidden', 'true');\n this.element.appendChild(labelElement);\n this.element.appendChild(this.rowCountDisplay);\n this.updateDisplay();\n this.modelUpdatedHandler = () => {\n this.updateDisplay();\n };\n this.api.addEventListener('modelUpdated', this.modelUpdatedHandler);\n this.api.addEventListener('rowDataUpdated', this.modelUpdatedHandler);\n }\n updateDisplay() {\n var _a, _b, _c;\n if (!this.api || !this.rowCountDisplay)\n return;\n const apiAny = this.api;\n const rowCount = (_c = (_b = (_a = this.api).getDisplayedRowCount) === null || _b === void 0 ? void 0 : _b.call(_a)) !== null && _c !== void 0 ? _c : 0;\n // Check if total count is uncertain (more data available)\n // Only show uncertain total if we have rows and there might be more\n const hasMoreRows = apiAny.paginationIsLastPageFound !== undefined && !apiAny.paginationIsLastPageFound();\n const hasUncertainTotal = hasMoreRows && rowCount > 0;\n const displayText = hasUncertainTotal ? `${rowCount - 1}+` : rowCount.toString();\n this.rowCountDisplay.textContent = displayText;\n const ariaLabel = hasUncertainTotal\n ? `Row count: ${rowCount} or more rows`\n : `Row count: ${rowCount} rows`;\n this.element.setAttribute('aria-label', ariaLabel);\n }\n getGui() {\n return this.element;\n }\n destroy() {\n if (this.api && this.modelUpdatedHandler) {\n this.api.removeEventListener('modelUpdated', this.modelUpdatedHandler);\n this.api.removeEventListener('rowDataUpdated', this.modelUpdatedHandler);\n }\n this.api = null;\n this.modelUpdatedHandler = null;\n }\n}\n","/**\n * Tooltip for errors that happen while syncing data with server after inline editing\n * @internal\n */\nexport class ErrorTooltip {\n init(params) {\n const eGui = (this.eGui = document.createElement('div'));\n const message = params.value;\n eGui.classList.add('custom-tooltip');\n eGui.style['background-color'] = '#f14376';\n eGui.style['border'] = '1px inside';\n eGui.style['border-color'] = '#2e3339';\n eGui.style['border-radius'] = '4px';\n eGui.style['padding'] = '5px';\n eGui.style['box-shadow'] = '0px 4px 10px 0px rgba(0, 0, 0, 0.25);';\n eGui.innerHTML = `<span style='color: #000000; font-size: 10px'>${message}</span>`;\n }\n getGui() {\n return this.eGui;\n }\n}\n","/**\n * Converts a ColDef to a ColumnState\n * @param colDef - The column definition to convert\n * @returns The corresponding ColumnState\n * @public\n */\nexport function convertColDefToColumnState(colDef) {\n return {\n colId: colDef.field || colDef.colId || '',\n hide: colDef.hide || false,\n width: colDef.width || null,\n pinned: colDef.pinned || null,\n sort: colDef.sort || null,\n sortIndex: colDef.sortIndex || null,\n aggFunc: colDef.aggFunc || null,\n rowGroup: colDef.rowGroup || false,\n rowGroupIndex: colDef.rowGroupIndex || null,\n pivot: colDef.pivot || false,\n pivotIndex: colDef.pivotIndex || null,\n flex: colDef.flex || null,\n };\n}\n/**\n * Converts an array of ColDef to an array of ColumnState\n * @param colDefs - The column definitions to convert\n * @returns The corresponding ColumnState array\n * @public\n */\nexport function convertColDefsToColumnStates(colDefs) {\n return colDefs.map(convertColDefToColumnState);\n}\n/**\n * Merges two arrays, one of `ColDef` and one of `ColumnState`, and deduplicates them.\n * @remarks ColDef uses `field` and ColumnState uses `colId` to identify columns.\n * @privateRemarks For restoring saved `ColumnState` but also keep custom renderers and other `ColDef` properties.\n * @public\n */\nexport function mergeAndDedupColDefWithColumnState(colDefs, columnStates) {\n const merged = {};\n const deduplicated = [];\n const fieldProp = 'field';\n const colIdProp = 'colId';\n columnStates.forEach((state) => {\n const matchingColDef = colDefs.find((item) => item[fieldProp] === state[colIdProp] ||\n (item[colIdProp] && item[colIdProp] === state[colIdProp]));\n if (matchingColDef) {\n const colDefStateMerge = Object.assign(Object.assign({}, matchingColDef), state);\n merged[matchingColDef[fieldProp]] = colDefStateMerge;\n deduplicated.push(colDefStateMerge);\n }\n });\n colDefs.forEach((def) => {\n if (!merged.hasOwnProperty(def[fieldProp])) {\n const newObj = Object.assign({}, def);\n merged[def[fieldProp]] = newObj;\n deduplicated.push(newObj);\n }\n });\n return deduplicated;\n}\n","/**\n * Extracts a user-friendly error message from a given error detail.\n * @param detail - The error detail, which can be a string, array, or object.\n * @returns A user-friendly error message.\n * @public\n */\nexport const extractErrorMessage = (detail) => {\n if (!detail)\n return '';\n if (typeof detail === 'string')\n return detail;\n if (Array.isArray(detail)) {\n return detail.map(extractErrorMessage).join(', ');\n }\n if (typeof detail === 'object') {\n if ('message' in detail && typeof detail.message === 'string')\n return detail.message;\n if ('TEXT' in detail && typeof detail.TEXT === 'string')\n return detail.TEXT;\n return JSON.stringify(detail);\n }\n return String(detail);\n};\n","import { createLogger } from '@genesislcap/foundation-logger';\n/**\n * Logger for the grid-pro package\n * @public\n */\nexport const logger = createLogger('grid-pro');\n","/**\n * Get the keys of the Metadata indexes map\n * @remarks This function will return a flat string array of all the keys in the \"metadata indexes\" map\n * @param data - the map data to have the keys extracted from\n * @returns the keys of the map\n * @public\n */\nexport function getAvailableIndexes(data) {\n const availabeIndexes = [];\n for (const [key] of data) {\n if (key) {\n availabeIndexes.push(key);\n }\n }\n return availabeIndexes;\n}\n/**\n * Get the values of the Metadata indexes map\n * @remarks This function will return a flat string array of all the values in the \"metadata indexes\" map\n * @param data - the map data to have the values extracted from\n * @returns the values of the map\n * @public\n */\nexport function getAvailableIndexFields(data) {\n const availableIndexFields = [];\n function traverse(items) {\n for (const item of items) {\n if (item !== null) {\n availableIndexFields.push(item);\n }\n }\n }\n for (const [key, value] of data) {\n if (key !== null && value !== null) {\n traverse(value);\n }\n }\n return availableIndexFields;\n}\n","/**\n * Convert string values from 'camelCase' to 'kebab-case'\n * @param value - The value to convert to Kebab case.\n * @returns The Kebab case result.\n * @public\n */\nexport const convertToKebabCase = (value) => value.replace(/([a-z])([A-Z])|\\s+/g, '$1-$2').toLowerCase();\n","import { __classPrivateFieldGet, __classPrivateFieldSet } from \"tslib\";\n/** @internal **/\nconst CLEANUP_TIMEOUT_MS = 10000;\n/**\n * @beta\n * Mixin class to expose `shouldRunConnect` and `shouldRunDisconnect`\n *\n * @remarks These can be used to control what lifecycle functionality is ran when the elements\n * are part of a custom layout. The class itself handles all events\n * @privateRemarks\n * #_ syntax is used for a javascript private method/variable\n * we can't use private/protected from typescript in an anonymous class like this\n */\nexport const LifecycleMixin = (Base) => { var _instances, __container, __latestTokenCode, __hasFirstLoaded, __cleanupTimeout, __shouldForceLifecycle, __blockLifecycleDueToTokenChange, __tryFindContainingLayout, _a; return _a = class extends Base {\n constructor(...args) {\n super(args);\n _instances.add(this);\n /** @internal **/\n __container.set(this, { _key: 'dom' });\n /**\n * If the token changes we suggest blocking the lifecycle methods\n * @internal\n **/\n __latestTokenCode.set(this, '');\n /**\n * Track first loaded to allow us to always run the connect lifecycle on the first load\n * @internal\n **/\n __hasFirstLoaded.set(this, false);\n /**\n * When you request to delete an item from the layout it will be removed from the DOM,\n * but the lifecycle might be blocked due to the same mechanism that we block the other\n * items.\n * This would block cleanup of the item, so we need to force a disconnection after a timeout\n * if this item hasn't reconnected within `CLEANUP_TIMEOUT_MS`.\n * @internal\n **/\n __cleanupTimeout.set(this, void 0);\n /**\n * Used to force lifecycle to run even if the token has changed, such as in instances where\n * we are forcing a disconnection due to this item being remove from the layout.\n * @internal\n **/\n __shouldForceLifecycle.set(this, false);\n }\n /**\n * @privateRemarks\n * Rather than using the basic implementation of cloning we run a copy constructor (deepClone)\n * and then manually clone the children too so they can intercept with an overriden cloneNode\n * if they want to\n */\n cloneNode(deep) {\n const thisClone = this.deepClone();\n if (deep) {\n Array.from(this.childNodes).forEach((child) => {\n thisClone.appendChild(child.cloneNode(true));\n });\n }\n return thisClone;\n }\n /**\n * @privateRemarks\n * Basic implementation of a copy constructor which creates a new element of the same class\n * and copies all attributes over.\n * None-trivial elements will likely want to override this function, call it using super.deepClone(),\n * and then perform extra setup such as copying properties, setting up event listeners\n */\n deepClone() {\n const copy = document.createElement(this.tagName.toLowerCase());\n this.getAttributeNames().forEach((at) => copy.setAttribute(at, this.getAttribute(at)));\n return copy;\n }\n /**\n * @beta\n * @returns - boolean controlling whether to run all disconnectedCallback lifecycle functionality\n */\n get shouldRunDisconnect() {\n if (__classPrivateFieldGet(this, __shouldForceLifecycle, \"f\")) {\n return true;\n }\n if (__classPrivateFieldGet(this, __container, \"f\")._key === 'dom') {\n return true;\n }\n if (__classPrivateFieldGet(this, __container, \"f\")._key === 'foundation-layout-cache') {\n return false;\n }\n // _key === 'foundation-layout'\n return !(__classPrivateFieldGet(this, __container, \"f\").dragging ||\n !__classPrivateFieldGet(this, __container, \"f\").hasFirstLoaded ||\n __classPrivateFieldGet(this, _instances, \"m\", __blockLifecycleDueToTokenChange).call(this, 'disconnect'));\n }\n /**\n * @beta\n * @returns - boolean controlling whether to run all connectedCallback lifecycle functionality\n * @privateRemarks\n * For now its just the same logic as shouldRunDisconnect\n */\n get shouldRunConnect() {\n if (__classPrivateFieldGet(this, __shouldForceLifecycle, \"f\")) {\n return true;\n }\n if (__classPrivateFieldGet(this, __container, \"f\")._key === 'dom') {\n return true;\n }\n if (__classPrivateFieldGet(this, __container, \"f\")._key === 'foundation-layout-cache') {\n return false;\n }\n // _key === 'foundation-layout'\n let connectionType = 'reconnect';\n if (__classPrivateFieldGet(this, __hasFirstLoaded, \"f\") === false) {\n __classPrivateFieldSet(this, __hasFirstLoaded, true, \"f\");\n connectionType = 'connect';\n }\n return !(__classPrivateFieldGet(this, __container, \"f\").dragging ||\n !__classPrivateFieldGet(this, __container, \"f\").hasFirstLoaded ||\n __classPrivateFieldGet(this, _instances, \"m\", __blockLifecycleDueToTokenChange).call(this, connectionType));\n }\n connectedCallback() {\n super.connectedCallback();\n if (__classPrivateFieldGet(this, __container, \"f\")._key !== 'foundation-layout') {\n __classPrivateFieldSet(this, __container, __classPrivateFieldGet(this, _instances, \"m\", __tryFindContainingLayout).call(this, this), \"f\");\n }\n }\n },\n __container = new WeakMap(),\n __latestTokenCode = new WeakMap(),\n __hasFirstLoaded = new WeakMap(),\n __cleanupTimeout = new WeakMap(),\n __shouldForceLifecycle = new WeakMap(),\n _instances = new WeakSet(),\n __blockLifecycleDueToTokenChange = function __blockLifecycleDueToTokenChange(lifecycleType) {\n var _b, _c;\n if (__classPrivateFieldGet(this, __container, \"f\")._key !== 'foundation-layout') {\n throw new Error('LifecycleMixin: should not be checking a token change if container not in the layout');\n }\n const tokensDifferent = __classPrivateFieldGet(this, __latestTokenCode, \"f\") !== __classPrivateFieldGet(this, __container, \"f\").lifecycleUpdateToken;\n let result = false;\n if (lifecycleType === 'connect') {\n // We always want to allow a first connection in the layout\n __classPrivateFieldSet(this, __latestTokenCode, (_b = __classPrivateFieldGet(this, __container, \"f\").lifecycleUpdateToken) !== null && _b !== void 0 ? _b : '', \"f\");\n }\n else if (lifecycleType === 'disconnect') {\n result = tokensDifferent;\n __classPrivateFieldSet(this, __cleanupTimeout, setTimeout(() => {\n __classPrivateFieldSet(this, __shouldForceLifecycle, result, \"f\");\n if (__classPrivateFieldGet(this, __shouldForceLifecycle, \"f\")) {\n this.disconnectedCallback();\n }\n }, CLEANUP_TIMEOUT_MS), \"f\");\n }\n else if (lifecycleType === 'reconnect') {\n result = tokensDifferent;\n __classPrivateFieldSet(this, __latestTokenCode, (_c = __classPrivateFieldGet(this, __container, \"f\").lifecycleUpdateToken) !== null && _c !== void 0 ? _c : '', \"f\");\n clearTimeout(__classPrivateFieldGet(this, __cleanupTimeout, \"f\"));\n }\n return result;\n },\n __tryFindContainingLayout = function __tryFindContainingLayout(e) {\n var _b;\n /**\n * This is a special case where the element is part of the layout cache\n * signified by a symbol put on the document cache root\n */\n if (e.getRootNode()[layoutCacheDocument] === true) {\n return { _key: 'foundation-layout-cache' };\n }\n /**\n * If this happens we have found the root of the document\n * without finding a containing FoundationLayout\n * hence, this item is not in a custom layout\n */\n if (e.getRootNode() instanceof Document || !((_b = e.getRootNode()) === null || _b === void 0 ? void 0 : _b.host)) {\n return { _key: 'dom' };\n }\n const shadowHost = e.getRootNode().host;\n if (shadowHost.class === 'FoundationLayoutMain') {\n const layoutHost = shadowHost;\n layoutHost._key = 'foundation-layout';\n return layoutHost;\n }\n return __classPrivateFieldGet(this, _instances, \"m\", __tryFindContainingLayout).call(this, shadowHost);\n },\n _a; };\n/**\n * Stored on the layout's internal cache to signify that the document is not part of the DOM\n * @public\n */\nexport const layoutCacheDocument = Symbol('layout-cache-document');\n","/**\n * Delay for a given number of milliseconds\n * @param ms - The number of milliseconds to delay\n * @returns A promise that resolves after the given number of milliseconds\n * @public\n * @example\n * ```ts\n * await delay(1000);\n * console.log('1 second later');\n * ```\n */\nexport const delay = (ms) => new Promise((resolve) => {\n setTimeout(resolve, ms);\n});\n","import { logger } from './logger';\n/**\n * Inserts a CSS rule into the document by creating a new style element or using an existing one with the specified ID.\n * Returns a function that can be called to remove the rule from the document.\n * @public\n * @param cssRule - The CSS rule to insert.\n * @param styleElementId - The ID of the style element to use or create.\n * @returns A function that removes the rule from the document.\n */\nexport const insertDocumentCSSRule = (cssRule, styleElementId) => {\n var _a;\n let styleElement = document.getElementById(styleElementId);\n if (styleElement) {\n logger.debug(`\n An element with the id of '${styleElementId}' already exists and likely has the css rules applied.\n `);\n return;\n }\n const headElement = (_a = document.head) !== null && _a !== void 0 ? _a : document.getElementsByTagName('head')[0];\n styleElement = document.createElement('style');\n styleElement.id = styleElementId;\n headElement.appendChild(styleElement);\n // Check if the CSS rule contains multiple rules (contains multiple closing braces)\n const ruleCount = (cssRule.match(/}/g) || []).length;\n if (ruleCount > 1) {\n // Multiple rules: use textContent to avoid insertRule limitations\n styleElement.textContent = cssRule;\n return () => {\n if (!styleElement) {\n return;\n }\n headElement.removeChild(styleElement);\n };\n }\n else {\n // Single rule: use insertRule for consistency with existing behavior\n const styleIndex = styleElement.sheet.insertRule(cssRule);\n return () => {\n if (!styleElement) {\n return;\n }\n styleElement.sheet.deleteRule(styleIndex);\n headElement.removeChild(styleElement);\n };\n }\n};\n/**\n * Inserts a CSS link into the document if it doesn't already exist.\n * @public\n * @param href - The URL of the CSS file to insert.\n */\nexport const insertDocumentLink = (href) => {\n const links = document.head.querySelectorAll('link');\n // Already been injected\n for (const index in links)\n if (links[index].href === href)\n return;\n const link = document.createElement('link');\n link.rel = 'stylesheet';\n link.href = href;\n document.head.appendChild(link);\n};\n/**\n * Recursively gather all elements including those in shadow DOM\n * @public\n */\nexport function getAllElements(root) {\n const elements = [];\n const processedShadowRoots = new Set();\n function collectElements(node) {\n // Get all elements in the current node\n const nodeElements = Array.from(node.querySelectorAll('*'));\n elements.push(...nodeElements);\n // Process shadow roots\n nodeElements.forEach((el) => {\n if (el.shadowRoot && !processedShadowRoots.has(el.shadowRoot)) {\n processedShadowRoots.add(el.shadowRoot);\n collectElements(el.shadowRoot);\n }\n });\n }\n collectElements(root);\n return elements;\n}\n","import { createLogger } from '@genesislcap/foundation-logger';\n/**\n * Logger for the foundation-utils package\n * @public\n */\nexport const logger = createLogger('foundation-utils');\n"],"names":["DateEditor","FoundationElement","init","params","this","value","dateFormat","withTime","inputType","actualWidth","column","getActualWidth","getGui","refresh","getValue","isPopup","changeHandler","event","dateValue","target","control","valueAsNumber","isNaN","undefined","afterGuiAttached","input","focus","isCancelBeforeStart","data","observable","prototype","agDateEditorStyles","css","getDateEditorTemplate","prefix","html","ref","x","format","c","foundationDateEditor","compose","baseName","styles","template","MultiselectEditor","selectedOptions","selectedOptionsCallback","then","split","destroy","detail","agMultiselectEditorStyles","getMultiselectEditorTemplate","designSystem","async","allOptionsResourceName","valueField","labelField","datasourceOptions","foundationMultiselectEditor","NumberEditor","parseFloat","onChange","agNumberEditorStyles","getNumberEditorTemplate","withFormatting","formatOptions","String","placeholder","disabled","foundationNumberEditor","SelectEditor","combobox","open","_a","agSelectEditorStyles","getSelectEditorTemplate","position","allowCustomOptions","values","foundationSelectEditor","StringEditor","agStringEditorStyles","getStringEditorTemplate","foundationStringEditor","ActionRenderer","eGridCell","addEventListener","key","ENTER","clickHandler","isDisabled","error","actionClick","pendingAction","dataTestId","_b","uniqueFieldName","create","DesignToken","actionHeightMultiplier","withDefault","agActionRendererStyles","foundationGridProActionRenderer","actionButtonStyle","appearance","actionName","ActionsMenuRenderer","foundationGridProActionsMenuRenderer","headerName","getActionsMenuDef","actions","overrideDef","customActionsOpenerName","isVertical","buttonAppearance","actionsMenuDef","cellRenderer","actionsMenu","cellRendererParams","buttonText","cellStyle","border","overflow","field","width","Object","assign","BooleanRenderer","colDef","editable","selected","userInputHandler","e","MouseEvent","type","button","KeyboardEvent","api","getEditingCells","find","cell","rowIndex","node","getInstanceId","eventStarted","getColDef","rowPinned","dispatchEvent","valueChanged","setDataValue","eventStopped","oldValue","newValue","getDataTestId","agBooleanRendererStyles","getAgBooleanRendererTemplate","checkboxComponent","foundationAgBooleanRenderer","EditableRenderer","valueFormatted","formatValue","agEditableRendererStyles","getAgEditableRendererTemplate","foundationAgEditableRenderer","agIconRendererStyles","hasIconSrc","iconSrc","length","hasIconName","iconName","getIconRendererTemplate","iconComponent","showHover","_c","when","iconHeight","iconColor","classes","iconSize","variant","secondaryIcon","secondaryIconColor","IconRenderer","foundationIconRenderer","SelectRenderer","constructor","super","arguments","selectionChanged","onSelect","accessor","agSelectRendererStyles","getSelectRendererTemplate","selectComponent","optionComponent","defaultValue","repeat","options","name","parent","tooltip","displayName","foundationAgSelectRenderer","agStatusPillRendererStyles","getStatusPillRendererTemplate","backgroundColor","iconInitial","iconInitialBackgroundColor","textColor","text","dateCountdownUnit","dateCountdown","dateCountdownCompletedMessage","hideWhenCountdownCompleted","dateCountdownVisibleAfter","StatusPillRenderer","foundationStatusPillRenderer","AgTextFieldRenderer","textValue","textChanged","includes","textField","caretPos","selectionStart","stopPropagation","textFieldRendererStyles","getTextFieldRendererTemplate","textComponent","suffix","hideAffixFromScreenReader","maxLength","foundationAgTextFieldRenderer","AgTextRenderer","textRendererStyles","getTextRendererTemplate","foundationAgTextRenderer","setValueWithAccessor","indexOf","accessorPieces","currentObject","fieldPiece","shift","GridProCell","connectedCallback","wrapperGridProColumn","parentElement","renderer","definition","rendererParams","slottedAgRendererChanged","customElement","CellTemplate","slotted","GridProColumn","slottedAgCellChanged","deepClone","copy","keys","forEach","bind","structuredClone","ColumnTemplate","criteriaDelimiter","criteriaJoin","GenesisGridDatasourceElement","isSnapshot","maxRows","MAX_ROWS_250","maxView","MAX_VIEW_1000","movingView","reverse","disablePolling","offset","DEFAULT_REQ_REP_OFFSET","pollingInterval","REQ_REP_POLLING_INTERVAL_MS","pollTriggerEvents","requestAutoSetup","restartOnReconnection","criteriaFromFilters","Map","update","rowId","rowIdAttr","isRequestServer","REQUEST_SERVER_ROW_ID","DATASERVER_ROW_ID","hasDefaultRowId","defaultRowIdByResourceType","criteria","buildCriteria","orderBy","resourceName","viewNumber","fields","request","concat","Array","from","normalisedCriteria","join","setFilter","fieldName","newFilter","set","next","removeFilter","delete","datasource","status","REQUEST_SERVER","datasourceStatusChanged","prev","handleErrors","errors","message","isArray","map","item","TEXT","$emit","clearErrors","connected","initializeDatasource","options_1","fetchMeta","startStream","connect","isConnected","getMetadata","catch","host","errorMessage","errorType","Error","OperationType","attr","mode","attribute","converter","nullableNumberConverter","volatile","GridProBaseDatasource","dataSubWasLoggedOff","keepColDefsOnClearRowData","rowData","transactionData","add","remove","_isDisconnected","subscribeToConnection","isConnected$","connectionSub","unsubscribe","subscribe","isDisconnected","setDisconnected","reloadResourceData","unsubscribeFromConnection","generateColumnDefsFromMetadata","fieldsMetadata","getFilterParamsByFieldType","getFilterByFieldType","flatMap","colDefBase","filterParams","STRING","cellEditor","stringEditor","NUMBER","numberEditor","BOOLEAN","boolean","DATE","valueFormatter","dateEditor","DATETIME","cellEditorParams","ENUM","enumOptions","selectEditor","option","label","warn","filter","handleStreamInserts","insertedRows","addIndex","currentAddIndex","insertData","has","existingData","get","updatedRow","push","handleStreamDeletes","deletedRows","deleteData","rowToBeDeleted","fromEntries","obj","handleStreamUpdates","updatedRows","updateData","rowToBeUpdated","applyAllTransactions","_d","_e","_f","loadingFinished","size","noDataAvailable","applyMappedTransaction","Add","Remove","Update","transaction","operation","mappedTransaction","mapTransaction","dataChanged","changes","applyTransaction","operations","rowDataMapper","loadMore","restart","disconnected","getStatusBarActionConfig","configValue","enabled","config","getDatasourceStatusBarPanels","isServerSide","statusBarConfig","additionalPanels","loadMoreConfig","loadMoreParams","onLoadMore","statusPanel","statusPanelParams","align","pagination","reloadConfig","reload","reloadParams","onReload","icon","baseDatasourceEventNames","GridProClientSideDatasource","errorHandlerDialogStyles","getErrorHandlerDialogTemplate","gridErrorItems","dialogTag","buttonTag","hideDatasourceError","gridProDatasource","toLowerCase","getServerSideFilterParamsByFieldType","buttons","closeOnApply","closeOnClear","maxNumConditions","filterOptions","displayKey","predicate","_","cellValue","numberOfInputs","comparator","filterLocalDateAtMidnight","cellValueTime","Date","setHours","filterValueTime","getTime","browserDatePicker","BaseServerSideDatasource","serverRowsCount","clientRowsCount","moreRows","calculatedRowsCount","currentSequenceId","reloadResourceDataFunc","errorHandlerFunc","resourceParams","originalCriteriaMatch","getResourceParam","resourceIndexes","resourceColDefs","zeroBasedViewNumber","pagingMode","criteriaOnlyRequest","DETAILS","setResourceParam","getRows","setupFiltering","filterModelBeingApplied","filterModel","filtersAreBeingApplied","filtersAreGettingCleaned","filterModelBeingAppliedDiffersFromCurrent","JSON","stringify","currentFilterModel","refreshDatasource","buildCriteriaMatchFromFilters","setupFilteringAndSorting","setupSorting","sourceRef","lastSuccessRowData","updateResourceParams","getOrderByAndToBeSortedColIds","searchValue","entries","searchIndex","findIndex","toBeSorted","splice","criteriaMatch","filters","getFiltersByType","k","model","selectedValues","colMeta","o","NAME","allValues","VALID_VALUES","every","v","orConditions","val","safeVal","replace","valueTwo","filterTo","dateFrom","dateTo","now","todayStr","getFullYear","getMonth","toString","padStart","getDate","filterType","getPageNumber","start","recordsPerPage","totalRecords","Math","floor","currentPageIndex","ceil","getCorrectRowCount","currentLastRowNumber","endRow","defaultCount","min","rowCount","isNotFirstViewNumber","getEffectivePagingMode","DataserverServerSideDatasource","createDataserverStreamFunc","_super","dataserverStreamSubscription","call","isNewPageSize","success","dataserverStream","startRow","Number","VIEW_NUMBER","getMoreRows","applyResult","dataserverResult","DOM","queueUpdate","CRITERIA_MATCH","updatedInfo","snapshot","MAX_ROWS","MAX_VIEW","ROW","ROWS_COUNT","applyServerSideData","result","messageType","MESSAGE_TYPE","LOGOFF_ACK","MSG_NACK","fail","MORE_ROWS","successRowData","nextMessage","dataServerResultFilter","d","handleCurrentStreamLoad","SEQUENCE_ID","SOURCE_REF","toBeAppliedSortModel","sortModel","currentSortModel","ORDER_BY","REVERSE","coldIdBeingSorted","colId","sortTypeBeingApplied","sort","orderByAndToBeSortedColIds","availableIndexes","availableIndexFields","debug","rows","inserts","ReqRepServerSideDatasource","discoveredTotalRowCount","currentNextOffset","createReqRepRequestFunc","createReqRepStreamFunc","onPollingUpdate","onPollingUpdateFunc","resetPreviousPollResult","resetPreviousPollResultFunc","usePolling","debouncedCreateStream","createPollingStream","OFFSET","effectivePagingMode","updatePaginationParams","requestParams","buildRequestDetails","requestResult","isLastView","determineIsLastView","schedulePollingStream","hasMoreRowsInResult","NEXT_VIEW","preCheckRequestParams","moreRowsPreCheck","REPLY","NEXT_OFFSET","destroyPollingStream","currentBatchSize","reply","insertDataRowId","noRowIdMessage","logger","tempId","uuid","createId","cancel","currentStreamParams","stream","reqRepPollingStream","reqRepPollingDatasource","reqRepPollingSubscription","receivedMessage","ERROR","baseDetails","GridProServerSideDatasource","liveUpdates","sortIndicatorCSSDestroy","previousPollResult","resourceNameChanged","criteriaChanged","oldCriteria","newCriteria","criteriaIsNotDuplicate","normaliseCriteria","ssrmDatasource","shouldRunConnect","disconnectedCallback","shouldRunDisconnect","deferredGridOptions","deferredColumnStates","liveUpdatesStream","cacheFilterConfig","clearRowData","refreshServerSide","purge","setServerSideDatasource","loadingStarted","applyServerSideSortIndicatorStyling","removeServerSideSortIndicatorStyling","addGridCssClass","className","removeGridCssClass","gridOptions","getRowId","getRowStyle","ROW_REF","color","cacheBlockSize","defaultColDef","resizable","sortable","unSortIcon","rowBuffer","rowModelType","suppressServerSideInfiniteScroll","suppressMultiSort","onFilterChanged","onSortChanged","onPaginationChanged","initialize","ready","dataInit","indexes","getResourceIndexes","availableSortableFields","fieldMetadata","originalFieldDef","agColumnDefs","getAgColumnDefs","schemaUpdated","schema","metadata","createReqRepRequest","createReqRepStream","applyReqRepPollingUpdate","requestOnlyParams","createDataserverStream","dataserverOnlyParams","filtersRestored","once","newPage","pollingDatasource","withColumnDefs","dataCleared","includeSchema","applyServerSideTransaction","avaialbleIndexes","resourceIndexesMap","allSortableFields","Set","index","FIELDS","fieldsFromIndexes","additionalFields","existingParams","_g","_h","currentOffset","baseMaxRows","totalRowsToFetch","clear","polledData","startsWith","row","currentPollMap","rowsToUpdate","rowsToInsert","rowsToDelete","previousRow","serializer","serialize","added","updated","removed","totalInPoll","streamOnMessage","QUERY_UPDATE","updates","deletes","netRowChange","clientNetRowChange","onError","colDefsFromGenesisData","availableCriteriaFields","agHeadCSS","agGridAlpineFontFace","agGridBalhamFontFace","agGridMaterialFontFace","agThemeFontFaceMap","alpine","alpineDark","balham","balhamDark","material","defaultAgGridFontFace","agGridCSS","agThemeAlpineNofontsCSS","agThemeBalhamNofontsCSS","agThemeMaterialNofontsCSS","agExternalStockStyles","datasourceEventNames","dataLoaded","moreDataAvailable","sizeChanged","gridProGenesisDatasourceEventNames","moreRowsChanged","getClientSideFilterParamsByFieldType","GridProGenesisDatasource","cachedRowArray","requiresFullRowDataAndColDefs","_lastMoreRows","_isMoreRowsResult","_nextOffset","_loadMoreCount","initialized","requestChanged","oldRequest","newRequest","requestIsNotDuplicate","colDefsDeepClone","columnDefinition","definitionCopy","fieldKey","loadResourceData","updateSub","pipe","skip","debounceTime","tap","f","dataSub","_sourceRef","BehaviorSubject","deinit","reset","refreshRows","updateCachedRowArray","emitDataLoaded","setRowData","emitDataChanged","isInitialLoad","updateLoadMoreCount","withFullInit","requiresMetadataFetch","handleSnapshot","catchError","err","hasRowsCountInResult","hasNextOffsetInResult","resourceType","updateLoadMoreStatus","handleStreamResult","moreRowsDetail","applyRequestServerData","applyDataserverData","hasMoreData","requestServerResult","previousSize","requestServerData","noRowIdError","handleSizeChanged","match","dataServerResult","oldSize","newSize","DATASERVER","getEnumFilterParams","getColumnType","metadataType","dateValueFormatter","dateTimeValueFormatter","formatDateExtra","epoch","toISOString","slice","DEBOUNCED_RESIZE_TIME","gridProEventNames","datasourceErrorClose","gridProErrorNames","unknown","AG_PROPERTIES","AG_NUMBER_PROPERTIES","AG_BOOLEAN_PROPERTIES","AG_NUMBER_PROPERTIES_SET","AG_BOOLEAN_PROPERTIES_SET","AG_PROPERTIES_SET","toBoolean","toUpperCase","copyAttributesToGridOptions","component","pGridOptions","coercedValue","toNumber","G","registerModules","GridPro","rowDataChanged","initialised","gridApi","themeChanged","classNames","destroyFontFace","insertFontFace","getfilterModel","persistFilterModelKey","_filterConfig","statePersistence","getFilterModel","setFilterModel","saveFilterModel","cachedTotalColumnWidth","columnCount","autoCellRendererByType","onlyTemplateColDefs","gridAutosizingEnabled","sizeColumnsToContent","sizeColumnsToFit","asyncAdd","asyncRemove","asyncUpdate","enableCellFlashing","enabledRowFlashing","enableRowFlashing","defaultColumnConfig","gridFontFace","columnComponentName","theme","themeMode","withStatusBar","rehydrationAttempted","eventHandlers","gridEventsQueue","registeredGridEvents","agAttributes","agPropertiesMap","reduce","property","hideDataSourceError","handleBaseDatasourceError","handleInitialize","handleDataLoaded","handleDataChanged","handleSchemaUpdated","handleDataCleared","handleLoadingStarted","handleLoadingFinished","handleNoDataAvailable","handleFiltersRestored","handleMoreDataAvailable","handleDatasourceError","handleDatasourceDestroy","handleRefreshServerSide","handleSetServerSideDatasource","handleAddGridCssClass","handleRemoveGridCssClass","handleApplyServerSideTransaction","eventType","listener","PUBLIC_EVENTS","addGridEventListener","handleError","gridProError","removeAttribute","visibilityObserverCleanup","gridVisible","debouncedColumnAutosize","eventName","handler","defineProperty","agAttributeChangedCallback","enumerable","configurable","paginationPageSize","DEFAULT_PAGINATION_PAGE_SIZE","removeEventListener","refreshCells","force","invalidateColumnWidthCache","columnDefinitions","getColumnDefs","columnState","columnApi","getColumnState","agGridOptions","columnDefs","initGrid","applyTransactionAsync","flashAddedCells","rowNodes","flashCells","preSetColumnDefs","colDefs","getColumnDef","colDefsMergedWithTemplateDefs","mergeAllColumnDefsAndStates","col","rowGroup","pivot","setColumnDefs","flushAsyncTransactions","showLoadingOverlay","hideOverlay","showNoRowsOverlay","restoreCachedFilterConfig","statusBar","getStatusPanel","updateParams","setAttribute","clearLocalGridOptions","gridElement","gridSlot","classList","callback","applyServerSideTransactionAsync","combineAllGridComponents","gridOptionsComponents","defaultFoundationAgComponents","action","statusPill","select","multiselectEditor","labelValue","gridComponents","statePersistanceEnabled","persistColumnStateKey","getSelectedRows","rowSelectionMode","rowSelection","getCellRanges","getCellRangeRowData","enableRangeSelection","focusedCell","getFocusedCell","rowNode","getDisplayedRowAtIndex","cellRanges","range","startIndex","endIndex","some","existing","hasSelectedRows","updateLabelValueStatusBar","debounced","clearTimeout","setTimeout","removeConfigWidthsToAutosize","colState","saveColumnState","allHeadersHidden","hide","getColumn","Boolean","getSavedColumnState","deleteColumnState","resetToDefault","applyColumnState","state","applyOrder","resetColumnState","handleColumnSizing","restoreColumnState","gridParams","globalEventListener","querySelector","debounceSaveColumnState","debouceSaveFiltermodel","gridOnChangeCallback","attributes","attrName","components","onGridReady","onFirstDataRendered","rest","derivedOptions","gridOptionsConfig","enableCellChangeFlash","suppressDragLeaveHidesColumns","eventsAndCallbacks","EVENT_GRID_READY","gridId","id","onColumnPinned","onColumnResized","onColumnMoved","onDisplayedColumnsChanged","filterChangedEvent","onGridSizeChanged","hasGetRowId","setupPaginationAndStatusBar","setLocalGridOptions","firstChild","removeChild","agGrid","applyTemplateDefinitions","deferredColumnDefsOrState","deprecated","columnDefs_1","columnDefinitionsFromMetadata","colDefFromMetadata","headerCaseType","changeCaseByType","templateColumnDefs","querySelectorAll","templateColumn","columnDef","metadataValues","cellRendererSelector","tooltipComponent","tooltipValueGetter","cellClassRules","metadataColumnDef","templateColumnKeys","colDefsToReturn","g","savedColumnState","panelExists","statusPanelType","panels","panel","addRowCountPanel","statusPanels","isPaginationEnabled","rowCountStatusPanel","addMaxRowsPanel","addAggregationPanel","aggregation","addDatasourcePanels","newDatasourcePanels","addPaginationPanel","suppressScrollOnNewData","suppressPaginationPanel","newUserDefinedPanels","handleBothSizingModes","handleIndividualSizingModes","calculateTotalColumnWidth","getGridWidth","autoSizeAllColumns","allColumns","getAllGridColumns","currentColumnCount","sum","gridWidth","clientWidth","observedAttributes","lowerCasedPropertyNames","kebabCasePropertyNames","attName","gridPropertyName","changeObject","currentValue","processOnChange","eventLowerCase","browserEvent","Event","agGridDetails","callbackMethod","fontFaceRule","newDestroy","fontFaceDestroy","foundationGridProShadowOptions","defaultGridProConfig","shadowOptions","foundationGridPro","foundationGridProStyles","getGridProTemplate","customErrorHandlerTemplate","gridProTemplate","AgGridCSSVars","AgGridTheme","agThemeTokenMapClassname","themeName","agThemeFontsId","agThemeTokenMapCSS","tokenMap","CSSVarsTokenMapper","GridProRendererTypes","GridProStatusBarTypes","GRID_READY_EVENT","EDITED_COLUMN_FIELD","ERROR_COLUMN_FIELD","defaultGridOptionsConfig","GridOptionsConfig","DI","createInterface","instance","GridProCaseType","DEFAULT_STATUS_BAR_CONFIG","LocalStorageStatePersistence","localStorageGridOptions","session","getLocalStorageItem","allGridOptions","parse","existingOptions","setLocalStorageItem","StatePersistence","singleton","LabelValueStatusBarComponent","element","document","createElement","currentParams","updateDisplay","style","display","labelElement","appendChild","innerHTML","valueElement","LoadMoreStatusBarComponent","buttonLabel","isLoading","isLeftAligned","alignItems","gridOptionsService","justifyContent","paddingLeft","paddingRight","height","designSystemPrefix","createProgressRing","createLoadMoreButton","updateButtonVisibility","loadMoreButton","progressRing","margin","textContent","minWidth","textAlign","lineHeight","updateAriaLabel","showLoading","ariaLabel","loading","prevParams","PaginationStatusBarComponent","createPaginationPanel","paginationChangedHandler","paginationPanel","paginationSummaryPanel","firstPageButton","createPaginationButton","prevPageButton","descriptionPanel","pageStartDisplay","pageNumberDisplay","pageOfDisplay","pageNumberTotalDisplay","nextPageButton","lastPageButton","createTextNode","addPaginationEventListeners","goToPage","preventDefault","iconSpan","substring","page","apiAny","directMethod","proxyMethod","first","previous","last","paginationProxy","_j","_k","_l","_m","_o","_p","_q","_r","_s","_t","_u","_v","_w","_x","currentPage","paginationGetCurrentPage","getCurrentPage","totalPages","paginationGetTotalPages","getTotalPages","pageSize","paginationGetPageSize","getPageSize","paginationGetRowCount","getMasterRowCount","hasUncertainTotal","getModel","getType","paginationIsLastPageFound","totalDisplay","isFirstPage","isLastPage","updateButtonState","ReloadStatusBarComponent","isReloading","createRefreshIcon","refreshIcon","cursor","fontSize","mouseoverHandler","opacity","mouseoutHandler","showReloading","reloading","RowCountStatusBarComponent","rowCountDisplay","modelUpdatedHandler","getDisplayedRowCount","displayText","ErrorTooltip","eGui","convertColDefToColumnState","pinned","sortIndex","aggFunc","rowGroupIndex","pivotIndex","flex","convertColDefsToColumnStates","mergeAndDedupColDefWithColumnState","columnStates","merged","deduplicated","fieldProp","colIdProp","matchingColDef","colDefStateMerge","def","hasOwnProperty","newObj","extractErrorMessage","createLogger","getAvailableIndexes","availabeIndexes","getAvailableIndexFields","traverse","items","convertToKebabCase","LifecycleMixin","Base","_instances","__container","__latestTokenCode","__hasFirstLoaded","__cleanupTimeout","__shouldForceLifecycle","__blockLifecycleDueToTokenChange","__tryFindContainingLayout","args","_key","cloneNode","deep","thisClone","childNodes","child","tagName","getAttributeNames","at","getAttribute","dragging","hasFirstLoaded","connectionType","WeakMap","WeakSet","lifecycleType","tokensDifferent","lifecycleUpdateToken","getRootNode","layoutCacheDocument","Document","shadowHost","class","layoutHost","Symbol","delay","ms","Promise","resolve","insertDocumentCSSRule","cssRule","styleElementId","styleElement","getElementById","headElement","head","getElementsByTagName","styleIndex","sheet","insertRule","deleteRule","getAllElements","root","elements","processedShadowRoots","collectElements","nodeElements","el","shadowRoot"],"sourceRoot":""}