UNPKG

2.55 MBJavaScriptView Raw
1// ag-grid v18.1.2
2(function webpackUniversalModuleDefinition(root, factory) {
3 if(typeof exports === 'object' && typeof module === 'object')
4 module.exports = factory();
5 else if(typeof define === 'function' && define.amd)
6 define([], factory);
7 else if(typeof exports === 'object')
8 exports["agGrid"] = factory();
9 else
10 root["agGrid"] = factory();
11})(this, function() {
12return /******/ (function(modules) { // webpackBootstrap
13/******/ // The module cache
14/******/ var installedModules = {};
15/******/
16/******/ // The require function
17/******/ function __webpack_require__(moduleId) {
18/******/
19/******/ // Check if module is in cache
20/******/ if(installedModules[moduleId]) {
21/******/ return installedModules[moduleId].exports;
22/******/ }
23/******/ // Create a new module (and put it into the cache)
24/******/ var module = installedModules[moduleId] = {
25/******/ i: moduleId,
26/******/ l: false,
27/******/ exports: {}
28/******/ };
29/******/
30/******/ // Execute the module function
31/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
32/******/
33/******/ // Flag the module as loaded
34/******/ module.l = true;
35/******/
36/******/ // Return the exports of the module
37/******/ return module.exports;
38/******/ }
39/******/
40/******/
41/******/ // expose the modules object (__webpack_modules__)
42/******/ __webpack_require__.m = modules;
43/******/
44/******/ // expose the module cache
45/******/ __webpack_require__.c = installedModules;
46/******/
47/******/ // define getter function for harmony exports
48/******/ __webpack_require__.d = function(exports, name, getter) {
49/******/ if(!__webpack_require__.o(exports, name)) {
50/******/ Object.defineProperty(exports, name, {
51/******/ configurable: false,
52/******/ enumerable: true,
53/******/ get: getter
54/******/ });
55/******/ }
56/******/ };
57/******/
58/******/ // getDefaultExport function for compatibility with non-harmony modules
59/******/ __webpack_require__.n = function(module) {
60/******/ var getter = module && module.__esModule ?
61/******/ function getDefault() { return module['default']; } :
62/******/ function getModuleExports() { return module; };
63/******/ __webpack_require__.d(getter, 'a', getter);
64/******/ return getter;
65/******/ };
66/******/
67/******/ // Object.prototype.hasOwnProperty.call
68/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
69/******/
70/******/ // __webpack_public_path__
71/******/ __webpack_require__.p = "";
72/******/
73/******/ // Load entry module and return exports
74/******/ return __webpack_require__(__webpack_require__.s = 122);
75/******/ })
76/************************************************************************/
77/******/ ([
78/* 0 */
79/***/ (function(module, exports, __webpack_require__) {
80
81"use strict";
82/**
83 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
84 * @version v18.1.2
85 * @link http://www.ag-grid.com/
86 * @license MIT
87 */
88
89Object.defineProperty(exports, "__esModule", { value: true });
90var utils_1 = __webpack_require__(1);
91var Context = (function () {
92 function Context(params, logger) {
93 this.beans = {};
94 this.componentsMappedByName = {};
95 this.destroyed = false;
96 if (!params || !params.beans) {
97 return;
98 }
99 this.contextParams = params;
100 this.logger = logger;
101 this.logger.log(">> creating ag-Application Context");
102 this.setupComponents();
103 this.createBeans();
104 var beans = utils_1.Utils.mapObject(this.beans, function (beanEntry) { return beanEntry.beanInstance; });
105 this.wireBeans(beans);
106 this.logger.log(">> ag-Application Context ready - component is alive");
107 }
108 Context.prototype.setupComponents = function () {
109 var _this = this;
110 if (this.contextParams.components) {
111 this.contextParams.components.forEach(function (componentMeta) { return _this.addComponent(componentMeta); });
112 }
113 };
114 Context.prototype.addComponent = function (componentMeta) {
115 // get name of the class as a string
116 // let className = _.getNameOfClass(ComponentClass);
117 // insert a dash after every capital letter
118 // let classEscaped = className.replace(/([A-Z])/g, "-$1").toLowerCase();
119 var classEscaped = componentMeta.componentName.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase();
120 // put all to upper case
121 var classUpperCase = classEscaped.toUpperCase();
122 // finally store
123 this.componentsMappedByName[classUpperCase] = componentMeta.theClass;
124 };
125 Context.prototype.createComponent = function (element, afterPreCreateCallback) {
126 var key = element.nodeName;
127 if (this.componentsMappedByName && this.componentsMappedByName[key]) {
128 var newComponent = new this.componentsMappedByName[key]();
129 this.wireBean(newComponent, afterPreCreateCallback);
130 return newComponent;
131 }
132 else {
133 return null;
134 }
135 };
136 Context.prototype.wireBean = function (bean, afterPreCreateCallback) {
137 if (!bean) {
138 throw Error("Can't wire to bean since it is null");
139 }
140 this.wireBeans([bean], afterPreCreateCallback);
141 };
142 Context.prototype.wireBeans = function (beans, afterPreCreateCallback) {
143 this.autoWireBeans(beans);
144 this.methodWireBeans(beans);
145 this.preConstruct(beans);
146 // the callback sets the attributes, so the component has access to attributes
147 // before postConstruct methods in the component are executed
148 if (utils_1.Utils.exists(afterPreCreateCallback)) {
149 beans.forEach(afterPreCreateCallback);
150 }
151 this.postConstruct(beans);
152 };
153 Context.prototype.createBeans = function () {
154 var _this = this;
155 // register all normal beans
156 this.contextParams.beans.forEach(this.createBeanEntry.bind(this));
157 // register override beans, these will overwrite beans above of same name
158 if (this.contextParams.overrideBeans) {
159 this.contextParams.overrideBeans.forEach(this.createBeanEntry.bind(this));
160 }
161 // instantiate all beans - overridden beans will be left out
162 utils_1.Utils.iterateObject(this.beans, function (key, beanEntry) {
163 var constructorParamsMeta;
164 if (beanEntry.bean.__agBeanMetaData && beanEntry.bean.__agBeanMetaData.autowireMethods && beanEntry.bean.__agBeanMetaData.autowireMethods.agConstructor) {
165 constructorParamsMeta = beanEntry.bean.__agBeanMetaData.autowireMethods.agConstructor;
166 }
167 var constructorParams = _this.getBeansForParameters(constructorParamsMeta, beanEntry.bean.name);
168 var newInstance = applyToConstructor(beanEntry.bean, constructorParams);
169 beanEntry.beanInstance = newInstance;
170 _this.logger.log("bean " + _this.getBeanName(newInstance) + " created");
171 });
172 };
173 Context.prototype.createBeanEntry = function (Bean) {
174 var metaData = Bean.__agBeanMetaData;
175 if (!metaData) {
176 var beanName = void 0;
177 if (Bean.prototype.constructor) {
178 beanName = Bean.prototype.constructor.name;
179 }
180 else {
181 beanName = "" + Bean;
182 }
183 console.error("context item " + beanName + " is not a bean");
184 return;
185 }
186 var beanEntry = {
187 bean: Bean,
188 beanInstance: null,
189 beanName: metaData.beanName
190 };
191 this.beans[metaData.beanName] = beanEntry;
192 };
193 Context.prototype.autoWireBeans = function (beans) {
194 var _this = this;
195 beans.forEach(function (bean) { return _this.autoWireBean(bean); });
196 };
197 Context.prototype.methodWireBeans = function (beans) {
198 var _this = this;
199 beans.forEach(function (bean) {
200 if (!bean) {
201 throw Error("Can't wire to bean since it is null");
202 }
203 return _this.methodWireBean(bean);
204 });
205 };
206 Context.prototype.autoWireBean = function (bean) {
207 var _this = this;
208 var currentBean = bean;
209 var _loop_1 = function () {
210 var currentConstructor = currentBean.constructor;
211 if (currentConstructor.__agBeanMetaData && currentConstructor.__agBeanMetaData.agClassAttributes) {
212 var attributes = currentConstructor.__agBeanMetaData.agClassAttributes;
213 if (!attributes) {
214 return { value: void 0 };
215 }
216 var beanName_1 = this_1.getBeanName(currentConstructor);
217 attributes.forEach(function (attribute) {
218 var otherBean = _this.lookupBeanInstance(beanName_1, attribute.beanName, attribute.optional);
219 bean[attribute.attributeName] = otherBean;
220 });
221 }
222 currentBean = Object.getPrototypeOf(currentBean) ? Object.getPrototypeOf(currentBean) : null;
223 };
224 var this_1 = this;
225 while (currentBean != null) {
226 var state_1 = _loop_1();
227 if (typeof state_1 === "object")
228 return state_1.value;
229 }
230 };
231 Context.prototype.getBeanName = function (constructor) {
232 if (constructor.__agBeanMetaData && constructor.__agBeanMetaData.beanName) {
233 return constructor.__agBeanMetaData.beanName;
234 }
235 var constructorString = constructor.toString();
236 var beanName = constructorString.substring(9, constructorString.indexOf("("));
237 return beanName;
238 };
239 Context.prototype.methodWireBean = function (bean) {
240 var _this = this;
241 var autowiredMethods;
242 if (bean.constructor.__agBeanMetaData && bean.constructor.__agBeanMetaData.autowireMethods) {
243 autowiredMethods = bean.constructor.__agBeanMetaData.autowireMethods;
244 }
245 utils_1.Utils.iterateObject(autowiredMethods, function (methodName, wireParams) {
246 // skip constructor, as this is dealt with elsewhere
247 if (methodName === "agConstructor") {
248 return;
249 }
250 var beanName = _this.getBeanName(bean.constructor);
251 var initParams = _this.getBeansForParameters(wireParams, beanName);
252 bean[methodName].apply(bean, initParams);
253 });
254 };
255 Context.prototype.getBeansForParameters = function (parameters, beanName) {
256 var _this = this;
257 var beansList = [];
258 if (parameters) {
259 utils_1.Utils.iterateObject(parameters, function (paramIndex, otherBeanName) {
260 var otherBean = _this.lookupBeanInstance(beanName, otherBeanName);
261 beansList[Number(paramIndex)] = otherBean;
262 });
263 }
264 return beansList;
265 };
266 Context.prototype.lookupBeanInstance = function (wiringBean, beanName, optional) {
267 if (optional === void 0) { optional = false; }
268 if (beanName === "context") {
269 return this;
270 }
271 else if (this.contextParams.seed && this.contextParams.seed.hasOwnProperty(beanName)) {
272 return this.contextParams.seed[beanName];
273 }
274 else {
275 var beanEntry = this.beans[beanName];
276 if (beanEntry) {
277 return beanEntry.beanInstance;
278 }
279 if (!optional) {
280 console.error("ag-Grid: unable to find bean reference " + beanName + " while initialising " + wiringBean);
281 }
282 return null;
283 }
284 };
285 Context.prototype.postConstruct = function (beans) {
286 beans.forEach(function (bean) {
287 // try calling init methods
288 if (bean.constructor.__agBeanMetaData && bean.constructor.__agBeanMetaData.postConstructMethods) {
289 bean.constructor.__agBeanMetaData && bean.constructor.__agBeanMetaData.postConstructMethods.forEach(function (methodName) { return bean[methodName](); });
290 }
291 });
292 };
293 Context.prototype.preConstruct = function (beans) {
294 beans.forEach(function (bean) {
295 // try calling init methods
296 if (bean.constructor.__agBeanMetaData && bean.constructor.__agBeanMetaData.preConstructMethods) {
297 bean.constructor.__agBeanMetaData.preConstructMethods.forEach(function (methodName) { return bean[methodName](); });
298 }
299 });
300 };
301 Context.prototype.getBean = function (name) {
302 return this.lookupBeanInstance("getBean", name, true);
303 };
304 Context.prototype.destroy = function () {
305 // should only be able to destroy once
306 if (this.destroyed) {
307 return;
308 }
309 this.logger.log(">> Shutting down ag-Application Context");
310 // try calling destroy methods
311 utils_1.Utils.iterateObject(this.beans, function (key, beanEntry) {
312 var bean = beanEntry.beanInstance;
313 if (bean.constructor.__agBeanMetaData && bean.constructor.__agBeanMetaData.preDestroyMethods) {
314 bean.constructor.__agBeanMetaData.preDestroyMethods.forEach(function (methodName) { return bean[methodName](); });
315 }
316 });
317 this.destroyed = true;
318 this.logger.log(">> ag-Application Context shut down - component is dead");
319 };
320 return Context;
321}());
322exports.Context = Context;
323// taken from: http://stackoverflow.com/questions/3362471/how-can-i-call-a-javascript-constructor-using-call-or-apply
324// allows calling 'apply' on a constructor
325function applyToConstructor(constructor, argArray) {
326 var args = [null].concat(argArray);
327 var factoryFunction = constructor.bind.apply(constructor, args);
328 return new factoryFunction();
329}
330function PreConstruct(target, methodName, descriptor) {
331 var props = getOrCreateProps(target.constructor);
332 if (!props.postConstructMethods) {
333 props.preConstructMethods = [];
334 }
335 props.preConstructMethods.push(methodName);
336}
337exports.PreConstruct = PreConstruct;
338function PostConstruct(target, methodName, descriptor) {
339 var props = getOrCreateProps(target.constructor);
340 if (!props.postConstructMethods) {
341 props.postConstructMethods = [];
342 }
343 props.postConstructMethods.push(methodName);
344}
345exports.PostConstruct = PostConstruct;
346function PreDestroy(target, methodName, descriptor) {
347 var props = getOrCreateProps(target.constructor);
348 if (!props.preDestroyMethods) {
349 props.preDestroyMethods = [];
350 }
351 props.preDestroyMethods.push(methodName);
352}
353exports.PreDestroy = PreDestroy;
354function Bean(beanName) {
355 return function (classConstructor) {
356 var props = getOrCreateProps(classConstructor);
357 props.beanName = beanName;
358 };
359}
360exports.Bean = Bean;
361function Autowired(name) {
362 return function (target, propertyKey, descriptor) {
363 autowiredFunc(target, name, false, target, propertyKey, null);
364 };
365}
366exports.Autowired = Autowired;
367function Optional(name) {
368 return function (target, propertyKey, descriptor) {
369 autowiredFunc(target, name, true, target, propertyKey, null);
370 };
371}
372exports.Optional = Optional;
373function autowiredFunc(target, name, optional, classPrototype, methodOrAttributeName, index) {
374 if (name === null) {
375 console.error("ag-Grid: Autowired name should not be null");
376 return;
377 }
378 if (typeof index === "number") {
379 console.error("ag-Grid: Autowired should be on an attribute");
380 return;
381 }
382 // it's an attribute on the class
383 var props = getOrCreateProps(target.constructor);
384 if (!props.agClassAttributes) {
385 props.agClassAttributes = [];
386 }
387 props.agClassAttributes.push({
388 attributeName: methodOrAttributeName,
389 beanName: name,
390 optional: optional
391 });
392}
393function Qualifier(name) {
394 return function (classPrototype, methodOrAttributeName, index) {
395 var constructor = typeof classPrototype == "function" ? classPrototype : classPrototype.constructor;
396 var props;
397 if (typeof index === "number") {
398 // it's a parameter on a method
399 var methodName = void 0;
400 if (methodOrAttributeName) {
401 props = getOrCreateProps(constructor);
402 methodName = methodOrAttributeName;
403 }
404 else {
405 props = getOrCreateProps(constructor);
406 methodName = "agConstructor";
407 }
408 if (!props.autowireMethods) {
409 props.autowireMethods = {};
410 }
411 if (!props.autowireMethods[methodName]) {
412 props.autowireMethods[methodName] = {};
413 }
414 props.autowireMethods[methodName][index] = name;
415 }
416 };
417}
418exports.Qualifier = Qualifier;
419function getOrCreateProps(target) {
420 if (!target.hasOwnProperty("__agBeanMetaData")) {
421 target.__agBeanMetaData = {};
422 }
423 return target.__agBeanMetaData;
424}
425
426
427/***/ }),
428/* 1 */
429/***/ (function(module, exports, __webpack_require__) {
430
431"use strict";
432/**
433 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
434 * @version v18.1.2
435 * @link http://www.ag-grid.com/
436 * @license MIT
437 */
438
439Object.defineProperty(exports, "__esModule", { value: true });
440var constants_1 = __webpack_require__(9);
441var FUNCTION_STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/mg;
442var FUNCTION_ARGUMENT_NAMES = /([^\s,]+)/g;
443var AG_GRID_STOP_PROPAGATION = '__ag_Grid_Stop_Propagation';
444// util class, only used when debugging, for printing time to console
445var Timer = (function () {
446 function Timer() {
447 this.timestamp = new Date().getTime();
448 }
449 Timer.prototype.print = function (msg) {
450 var duration = (new Date().getTime()) - this.timestamp;
451 console.log(msg + " = " + duration);
452 this.timestamp = new Date().getTime();
453 };
454 return Timer;
455}());
456exports.Timer = Timer;
457/** HTML Escapes. */
458var HTML_ESCAPES = {
459 '&': '&',
460 '<': '&lt;',
461 '>': '&gt;',
462 '"': '&quot;',
463 "'": '&#39;'
464};
465var reUnescapedHtml = /[&<>"']/g;
466var Utils = (function () {
467 function Utils() {
468 }
469 // if the key was passed before, then doesn't execute the func
470 Utils.doOnce = function (func, key) {
471 if (this.doOnceFlags[key]) {
472 return;
473 }
474 func();
475 this.doOnceFlags[key] = true;
476 };
477 // returns true if the event is close to the original event by X pixels either vertically or horizontally.
478 // we only start dragging after X pixels so this allows us to know if we should start dragging yet.
479 Utils.areEventsNear = function (e1, e2, pixelCount) {
480 // by default, we wait 4 pixels before starting the drag
481 if (pixelCount === 0) {
482 return false;
483 }
484 var diffX = Math.abs(e1.clientX - e2.clientX);
485 var diffY = Math.abs(e1.clientY - e2.clientY);
486 return Math.max(diffX, diffY) <= pixelCount;
487 };
488 Utils.shallowCompare = function (arr1, arr2) {
489 // if both are missing, then they are the same
490 if (this.missing(arr1) && this.missing(arr2)) {
491 return true;
492 }
493 // if one is present, but other is missing, then then are different
494 if (this.missing(arr1) || this.missing(arr2)) {
495 return false;
496 }
497 if (arr1.length !== arr2.length) {
498 return false;
499 }
500 for (var i = 0; i < arr1.length; i++) {
501 if (arr1[i] !== arr2[i]) {
502 return false;
503 }
504 }
505 return true;
506 };
507 Utils.getNameOfClass = function (TheClass) {
508 var funcNameRegex = /function (.{1,})\(/;
509 var funcAsString = TheClass.toString();
510 var results = (funcNameRegex).exec(funcAsString);
511 return (results && results.length > 1) ? results[1] : "";
512 };
513 Utils.values = function (object) {
514 var result = [];
515 this.iterateObject(object, function (key, value) {
516 result.push(value);
517 });
518 return result;
519 };
520 Utils.getValueUsingField = function (data, field, fieldContainsDots) {
521 if (!field || !data) {
522 return;
523 }
524 // if no '.', then it's not a deep value
525 if (!fieldContainsDots) {
526 return data[field];
527 }
528 else {
529 // otherwise it is a deep value, so need to dig for it
530 var fields = field.split('.');
531 var currentObject = data;
532 for (var i = 0; i < fields.length; i++) {
533 currentObject = currentObject[fields[i]];
534 if (this.missing(currentObject)) {
535 return null;
536 }
537 }
538 return currentObject;
539 }
540 };
541 Utils.getScrollLeft = function (element, rtl) {
542 var scrollLeft = element.scrollLeft;
543 if (rtl) {
544 // Absolute value - for FF that reports RTL scrolls in negative numbers
545 scrollLeft = Math.abs(scrollLeft);
546 // Get Chrome and Safari to return the same value as well
547 if (this.isBrowserSafari() || this.isBrowserChrome()) {
548 scrollLeft = element.scrollWidth - element.clientWidth - scrollLeft;
549 }
550 }
551 return scrollLeft;
552 };
553 Utils.cleanNumber = function (value) {
554 if (typeof value === 'string') {
555 value = parseInt(value);
556 }
557 if (typeof value === 'number') {
558 value = Math.floor(value);
559 }
560 else {
561 value = null;
562 }
563 return value;
564 };
565 Utils.setScrollLeft = function (element, value, rtl) {
566 if (rtl) {
567 // Chrome and Safari when doing RTL have the END position of the scroll as zero, not the start
568 if (this.isBrowserSafari() || this.isBrowserChrome()) {
569 value = element.scrollWidth - element.clientWidth - value;
570 }
571 // Firefox uses negative numbers when doing RTL scrolling
572 if (this.isBrowserFirefox()) {
573 value *= -1;
574 }
575 }
576 element.scrollLeft = value;
577 };
578 Utils.iterateNamedNodeMap = function (map, callback) {
579 if (!map) {
580 return;
581 }
582 for (var i = 0; i < map.length; i++) {
583 var attr = map[i];
584 callback(attr.name, attr.value);
585 }
586 };
587 Utils.iterateObject = function (object, callback) {
588 if (this.missing(object)) {
589 return;
590 }
591 if (Array.isArray(object)) {
592 object.forEach(function (value, index) {
593 callback(index + '', value);
594 });
595 }
596 else {
597 var keys = Object.keys(object);
598 for (var i = 0; i < keys.length; i++) {
599 var key = keys[i];
600 var value = object[key];
601 callback(key, value);
602 }
603 }
604 };
605 Utils.cloneObject = function (object) {
606 var copy = {};
607 var keys = Object.keys(object);
608 for (var i = 0; i < keys.length; i++) {
609 var key = keys[i];
610 var value = object[key];
611 copy[key] = value;
612 }
613 return copy;
614 };
615 Utils.map = function (array, callback) {
616 var result = [];
617 for (var i = 0; i < array.length; i++) {
618 var item = array[i];
619 var mappedItem = callback(item);
620 result.push(mappedItem);
621 }
622 return result;
623 };
624 Utils.mapObject = function (object, callback) {
625 var result = [];
626 Utils.iterateObject(object, function (key, value) {
627 result.push(callback(value));
628 });
629 return result;
630 };
631 Utils.forEach = function (array, callback) {
632 if (!array) {
633 return;
634 }
635 for (var i = 0; i < array.length; i++) {
636 var value = array[i];
637 callback(value, i);
638 }
639 };
640 Utils.filter = function (array, callback) {
641 var result = [];
642 array.forEach(function (item) {
643 if (callback(item)) {
644 result.push(item);
645 }
646 });
647 return result;
648 };
649 Utils.getAllKeysInObjects = function (objects) {
650 var allValues = {};
651 objects.forEach(function (obj) {
652 if (obj) {
653 Object.keys(obj).forEach(function (key) { return allValues[key] = null; });
654 }
655 });
656 return Object.keys(allValues);
657 };
658 Utils.mergeDeep = function (dest, source) {
659 if (this.exists(source)) {
660 this.iterateObject(source, function (key, newValue) {
661 var oldValue = dest[key];
662 if (oldValue === newValue) {
663 return;
664 }
665 if (typeof oldValue === 'object' && typeof newValue === 'object') {
666 Utils.mergeDeep(oldValue, newValue);
667 }
668 else {
669 dest[key] = newValue;
670 }
671 });
672 }
673 };
674 Utils.assign = function (object) {
675 var _this = this;
676 var sources = [];
677 for (var _i = 1; _i < arguments.length; _i++) {
678 sources[_i - 1] = arguments[_i];
679 }
680 sources.forEach(function (source) {
681 if (_this.exists(source)) {
682 _this.iterateObject(source, function (key, value) {
683 object[key] = value;
684 });
685 }
686 });
687 return object;
688 };
689 Utils.parseYyyyMmDdToDate = function (yyyyMmDd, separator) {
690 try {
691 if (!yyyyMmDd)
692 return null;
693 if (yyyyMmDd.indexOf(separator) === -1)
694 return null;
695 var fields = yyyyMmDd.split(separator);
696 if (fields.length != 3)
697 return null;
698 return new Date(Number(fields[0]), Number(fields[1]) - 1, Number(fields[2]));
699 }
700 catch (e) {
701 return null;
702 }
703 };
704 Utils.serializeDateToYyyyMmDd = function (date, separator) {
705 if (!date)
706 return null;
707 return date.getFullYear() + separator + Utils.pad(date.getMonth() + 1, 2) + separator + Utils.pad(date.getDate(), 2);
708 };
709 Utils.pad = function (num, totalStringSize) {
710 var asString = num + "";
711 while (asString.length < totalStringSize)
712 asString = "0" + asString;
713 return asString;
714 };
715 Utils.pushAll = function (target, source) {
716 if (this.missing(source) || this.missing(target)) {
717 return;
718 }
719 source.forEach(function (func) { return target.push(func); });
720 };
721 Utils.createArrayOfNumbers = function (first, last) {
722 var result = [];
723 for (var i = first; i <= last; i++) {
724 result.push(i);
725 }
726 return result;
727 };
728 Utils.getFunctionParameters = function (func) {
729 var fnStr = func.toString().replace(FUNCTION_STRIP_COMMENTS, '');
730 var result = fnStr.slice(fnStr.indexOf('(') + 1, fnStr.indexOf(')')).match(FUNCTION_ARGUMENT_NAMES);
731 if (result === null) {
732 return [];
733 }
734 else {
735 return result;
736 }
737 };
738 Utils.find = function (collection, predicate, value) {
739 if (collection === null || collection === undefined) {
740 return null;
741 }
742 if (!Array.isArray(collection)) {
743 var objToArray = this.values(collection);
744 return this.find(objToArray, predicate, value);
745 }
746 var collectionAsArray = collection;
747 var firstMatchingItem;
748 for (var i = 0; i < collectionAsArray.length; i++) {
749 var item = collectionAsArray[i];
750 if (typeof predicate === 'string') {
751 if (item[predicate] === value) {
752 firstMatchingItem = item;
753 break;
754 }
755 }
756 else {
757 var callback = predicate;
758 if (callback(item)) {
759 firstMatchingItem = item;
760 break;
761 }
762 }
763 }
764 return firstMatchingItem;
765 };
766 Utils.toStrings = function (array) {
767 return this.map(array, function (item) {
768 if (item === undefined || item === null || !item.toString) {
769 return null;
770 }
771 else {
772 return item.toString();
773 }
774 });
775 };
776 Utils.iterateArray = function (array, callback) {
777 for (var index = 0; index < array.length; index++) {
778 var value = array[index];
779 callback(value, index);
780 }
781 };
782 //Returns true if it is a DOM node
783 //taken from: http://stackoverflow.com/questions/384286/javascript-isdom-how-do-you-check-if-a-javascript-object-is-a-dom-object
784 Utils.isNode = function (o) {
785 return (typeof Node === "function" ? o instanceof Node :
786 o && typeof o === "object" && typeof o.nodeType === "number" && typeof o.nodeName === "string");
787 };
788 //Returns true if it is a DOM element
789 //taken from: http://stackoverflow.com/questions/384286/javascript-isdom-how-do-you-check-if-a-javascript-object-is-a-dom-object
790 Utils.isElement = function (o) {
791 return (typeof HTMLElement === "function" ? o instanceof HTMLElement :
792 o && typeof o === "object" && o !== null && o.nodeType === 1 && typeof o.nodeName === "string");
793 };
794 Utils.isNodeOrElement = function (o) {
795 return this.isNode(o) || this.isElement(o);
796 };
797 // makes a copy of a node list into a list
798 Utils.copyNodeList = function (nodeList) {
799 var childCount = nodeList ? nodeList.length : 0;
800 var res = [];
801 for (var i = 0; i < childCount; i++) {
802 res.push(nodeList[i]);
803 }
804 return res;
805 };
806 Utils.isEventFromPrintableCharacter = function (event) {
807 var pressedChar = String.fromCharCode(event.charCode);
808 // newline is an exception, as it counts as a printable character, but we don't
809 // want to start editing when it is pressed. without this check, if user is in chrome
810 // and editing a cell, and they press ctrl+enter, the cell stops editing, and then
811 // starts editing again with a blank value (two 'key down' events are fired). to
812 // test this, remove the line below, edit a cell in chrome and hit ctrl+enter while editing.
813 // https://ag-grid.atlassian.net/browse/AG-605
814 if (this.isKeyPressed(event, constants_1.Constants.KEY_NEW_LINE)) {
815 return false;
816 }
817 if (exports._.exists(event.key)) {
818 // modern browser will implement key, so we return if key is length 1, eg if it is 'a' for the
819 // a key, or '2' for the '2' key. non-printable characters have names, eg 'Enter' or 'Backspace'.
820 var printableCharacter = event.key.length === 1;
821 // IE11 & Edge treat the numpad del key differently - with numlock on we get "Del" for key,
822 // so this addition checks if its IE11/Edge and handles that specific case the same was as all other browers
823 var numpadDelWithNumlockOnForEdgeOrIe = Utils.isNumpadDelWithNumlockOnForEdgeOrIe(event);
824 return printableCharacter || numpadDelWithNumlockOnForEdgeOrIe;
825 }
826 else {
827 // otherwise, for older browsers, we test against a list of characters, which doesn't include
828 // accents for non-English, but don't care much, as most users are on modern browsers
829 return Utils.PRINTABLE_CHARACTERS.indexOf(pressedChar) >= 0;
830 }
831 };
832 //adds all type of change listeners to an element, intended to be a text field
833 Utils.addChangeListener = function (element, listener) {
834 element.addEventListener("changed", listener);
835 element.addEventListener("paste", listener);
836 element.addEventListener("input", listener);
837 // IE doesn't fire changed for special keys (eg delete, backspace), so need to
838 // listen for this further ones
839 element.addEventListener("keydown", listener);
840 element.addEventListener("keyup", listener);
841 };
842 //if value is undefined, null or blank, returns null, otherwise returns the value
843 Utils.makeNull = function (value) {
844 var valueNoType = value;
845 if (value === null || value === undefined || valueNoType === "") {
846 return null;
847 }
848 else {
849 return value;
850 }
851 };
852 Utils.missing = function (value) {
853 return !this.exists(value);
854 };
855 Utils.missingOrEmpty = function (value) {
856 return this.missing(value) || value.length === 0;
857 };
858 Utils.missingOrEmptyObject = function (value) {
859 return this.missing(value) || Object.keys(value).length === 0;
860 };
861 Utils.exists = function (value) {
862 if (value === null || value === undefined || value === '') {
863 return false;
864 }
865 else {
866 return true;
867 }
868 };
869 Utils.firstExistingValue = function () {
870 var values = [];
871 for (var _i = 0; _i < arguments.length; _i++) {
872 values[_i] = arguments[_i];
873 }
874 for (var i = 0; i < values.length; i++) {
875 var value = values[i];
876 if (exports._.exists(value))
877 return value;
878 }
879 return null;
880 };
881 Utils.anyExists = function (values) {
882 if (values) {
883 for (var i = 0; i < values.length; i++) {
884 if (this.exists(values[i])) {
885 return true;
886 }
887 }
888 }
889 return false;
890 };
891 Utils.existsAndNotEmpty = function (value) {
892 return this.exists(value) && value.length > 0;
893 };
894 Utils.removeAllChildren = function (node) {
895 if (node) {
896 while (node.hasChildNodes()) {
897 node.removeChild(node.lastChild);
898 }
899 }
900 };
901 Utils.removeElement = function (parent, cssSelector) {
902 this.removeFromParent(parent.querySelector(cssSelector));
903 };
904 Utils.removeFromParent = function (node) {
905 if (node && node.parentNode) {
906 node.parentNode.removeChild(node);
907 }
908 };
909 Utils.isVisible = function (element) {
910 return (element.offsetParent !== null);
911 };
912 /**
913 * loads the template and returns it as an element. makes up for no simple way in
914 * the dom api to load html directly, eg we cannot do this: document.createElement(template)
915 */
916 Utils.loadTemplate = function (template) {
917 var tempDiv = document.createElement("div");
918 tempDiv.innerHTML = template;
919 return tempDiv.firstChild;
920 };
921 Utils.appendHtml = function (eContainer, htmlTemplate) {
922 if (eContainer.lastChild) {
923 // https://developer.mozilla.org/en-US/docs/Web/API/Element/insertAdjacentHTML
924 // we put the items at the start, so new items appear underneath old items,
925 // so when expanding/collapsing groups, the new rows don't go on top of the
926 // rows below that are moving our of the way
927 eContainer.insertAdjacentHTML('afterbegin', htmlTemplate);
928 }
929 else {
930 eContainer.innerHTML = htmlTemplate;
931 }
932 };
933 Utils.addOrRemoveCssClass = function (element, className, addOrRemove) {
934 if (addOrRemove) {
935 this.addCssClass(element, className);
936 }
937 else {
938 this.removeCssClass(element, className);
939 }
940 };
941 Utils.callIfPresent = function (func) {
942 if (func) {
943 func();
944 }
945 };
946 Utils.addCssClass = function (element, className) {
947 var _this = this;
948 if (!className || className.length === 0) {
949 return;
950 }
951 if (className.indexOf(' ') >= 0) {
952 className.split(' ').forEach(function (value) { return _this.addCssClass(element, value); });
953 return;
954 }
955 if (element.classList) {
956 if (!element.classList.contains(className)) {
957 element.classList.add(className);
958 }
959 }
960 else {
961 if (element.className && element.className.length > 0) {
962 var cssClasses = element.className.split(' ');
963 if (cssClasses.indexOf(className) < 0) {
964 cssClasses.push(className);
965 element.className = cssClasses.join(' ');
966 }
967 }
968 else {
969 element.className = className;
970 }
971 }
972 };
973 Utils.containsClass = function (element, className) {
974 if (element.classList) {
975 // for modern browsers
976 return element.classList.contains(className);
977 }
978 else if (element.className) {
979 // for older browsers, check against the string of class names
980 // if only one class, can check for exact match
981 var onlyClass = element.className === className;
982 // if many classes, check for class name, we have to pad with ' ' to stop other
983 // class names that are a substring of this class
984 var contains = element.className.indexOf(' ' + className + ' ') >= 0;
985 // the padding above then breaks when it's the first or last class names
986 var startsWithClass = element.className.indexOf(className + ' ') === 0;
987 var endsWithClass = element.className.lastIndexOf(' ' + className) === (element.className.length - className.length - 1);
988 return onlyClass || contains || startsWithClass || endsWithClass;
989 }
990 else {
991 // if item is not a node
992 return false;
993 }
994 };
995 Utils.getElementAttribute = function (element, attributeName) {
996 if (element.attributes) {
997 if (element.attributes[attributeName]) {
998 var attribute = element.attributes[attributeName];
999 return attribute.value;
1000 }
1001 else {
1002 return null;
1003 }
1004 }
1005 else {
1006 return null;
1007 }
1008 };
1009 Utils.offsetHeight = function (element) {
1010 return element && element.clientHeight ? element.clientHeight : 0;
1011 };
1012 Utils.offsetWidth = function (element) {
1013 return element && element.clientWidth ? element.clientWidth : 0;
1014 };
1015 Utils.sortNumberArray = function (numberArray) {
1016 numberArray.sort(function (a, b) { return a - b; });
1017 };
1018 Utils.removeCssClass = function (element, className) {
1019 if (element.classList) {
1020 if (element.classList.contains(className)) {
1021 element.classList.remove(className);
1022 }
1023 }
1024 else {
1025 if (element.className && element.className.length > 0) {
1026 var cssClasses = element.className.split(' ');
1027 if (cssClasses.indexOf(className) >= 0) {
1028 // remove all instances of the item, not just the first, in case it's in more than once
1029 while (cssClasses.indexOf(className) >= 0) {
1030 cssClasses.splice(cssClasses.indexOf(className), 1);
1031 }
1032 element.className = cssClasses.join(' ');
1033 }
1034 }
1035 }
1036 };
1037 Utils.removeRepeatsFromArray = function (array, object) {
1038 if (!array) {
1039 return;
1040 }
1041 for (var index = array.length - 2; index >= 0; index--) {
1042 var thisOneMatches = array[index] === object;
1043 var nextOneMatches = array[index + 1] === object;
1044 if (thisOneMatches && nextOneMatches) {
1045 array.splice(index + 1, 1);
1046 }
1047 }
1048 };
1049 Utils.removeFromArray = function (array, object) {
1050 if (array.indexOf(object) >= 0) {
1051 array.splice(array.indexOf(object), 1);
1052 }
1053 };
1054 Utils.removeAllFromArray = function (array, toRemove) {
1055 toRemove.forEach(function (item) {
1056 if (array.indexOf(item) >= 0) {
1057 array.splice(array.indexOf(item), 1);
1058 }
1059 });
1060 };
1061 Utils.insertIntoArray = function (array, object, toIndex) {
1062 array.splice(toIndex, 0, object);
1063 };
1064 Utils.insertArrayIntoArray = function (dest, src, toIndex) {
1065 if (this.missing(dest) || this.missing(src)) {
1066 return;
1067 }
1068 // put items in backwards, otherwise inserted items end up in reverse order
1069 for (var i = src.length - 1; i >= 0; i--) {
1070 var item = src[i];
1071 this.insertIntoArray(dest, item, toIndex);
1072 }
1073 };
1074 Utils.moveInArray = function (array, objectsToMove, toIndex) {
1075 var _this = this;
1076 // first take out it items from the array
1077 objectsToMove.forEach(function (obj) {
1078 _this.removeFromArray(array, obj);
1079 });
1080 // now add the objects, in same order as provided to us, that means we start at the end
1081 // as the objects will be pushed to the right as they are inserted
1082 objectsToMove.slice().reverse().forEach(function (obj) {
1083 _this.insertIntoArray(array, obj, toIndex);
1084 });
1085 };
1086 Utils.defaultComparator = function (valueA, valueB, accentedCompare) {
1087 if (accentedCompare === void 0) { accentedCompare = false; }
1088 var valueAMissing = valueA === null || valueA === undefined;
1089 var valueBMissing = valueB === null || valueB === undefined;
1090 // this is for aggregations sum and avg, where the result can be a number that is wrapped.
1091 // if we didn't do this, then the toString() value would be used, which would result in
1092 // the strings getting used instead of the numbers.
1093 if (valueA && valueA.toNumber) {
1094 valueA = valueA.toNumber();
1095 }
1096 if (valueB && valueB.toNumber) {
1097 valueB = valueB.toNumber();
1098 }
1099 if (valueAMissing && valueBMissing) {
1100 return 0;
1101 }
1102 if (valueAMissing) {
1103 return -1;
1104 }
1105 if (valueBMissing) {
1106 return 1;
1107 }
1108 if (typeof valueA === "string") {
1109 if (!accentedCompare) {
1110 return doQuickCompare(valueA, valueB);
1111 }
1112 else {
1113 try {
1114 // using local compare also allows chinese comparisons
1115 return valueA.localeCompare(valueB);
1116 }
1117 catch (e) {
1118 // if something wrong with localeCompare, eg not supported
1119 // by browser, then just continue with the quick one
1120 return doQuickCompare(valueA, valueB);
1121 }
1122 }
1123 }
1124 if (valueA < valueB) {
1125 return -1;
1126 }
1127 else if (valueA > valueB) {
1128 return 1;
1129 }
1130 else {
1131 return 0;
1132 }
1133 function doQuickCompare(a, b) {
1134 return (a > b ? 1 : (a < b ? -1 : 0));
1135 }
1136 };
1137 Utils.compareArrays = function (array1, array2) {
1138 if (this.missing(array1) && this.missing(array2)) {
1139 return true;
1140 }
1141 if (this.missing(array1) || this.missing(array2)) {
1142 return false;
1143 }
1144 if (array1.length !== array2.length) {
1145 return false;
1146 }
1147 for (var i = 0; i < array1.length; i++) {
1148 if (array1[i] !== array2[i]) {
1149 return false;
1150 }
1151 }
1152 return true;
1153 };
1154 Utils.ensureDomOrder = function (eContainer, eChild, eChildBefore) {
1155 // if already in right order, do nothing
1156 if (eChildBefore && eChildBefore.nextSibling === eChild) {
1157 return;
1158 }
1159 if (eChildBefore) {
1160 if (eChildBefore.nextSibling) {
1161 // insert between the eRowBefore and the row after it
1162 eContainer.insertBefore(eChild, eChildBefore.nextSibling);
1163 }
1164 else {
1165 // if nextSibling is missing, means other row is at end, so just append new row at the end
1166 eContainer.appendChild(eChild);
1167 }
1168 }
1169 else {
1170 // otherwise put at start
1171 if (eContainer.firstChild) {
1172 // insert it at the first location
1173 eContainer.insertBefore(eChild, eContainer.firstChild);
1174 }
1175 }
1176 };
1177 Utils.insertWithDomOrder = function (eContainer, eChild, eChildBefore) {
1178 if (eChildBefore) {
1179 if (eChildBefore.nextSibling) {
1180 // insert between the eRowBefore and the row after it
1181 eContainer.insertBefore(eChild, eChildBefore.nextSibling);
1182 }
1183 else {
1184 // if nextSibling is missing, means other row is at end, so just append new row at the end
1185 eContainer.appendChild(eChild);
1186 }
1187 }
1188 else {
1189 if (eContainer.firstChild) {
1190 // insert it at the first location
1191 eContainer.insertBefore(eChild, eContainer.firstChild);
1192 }
1193 else {
1194 // otherwise eContainer is empty, so just append it
1195 eContainer.appendChild(eChild);
1196 }
1197 }
1198 };
1199 Utils.insertTemplateWithDomOrder = function (eContainer, htmlTemplate, eChildBefore) {
1200 var res;
1201 if (eChildBefore) {
1202 // if previous element exists, just slot in after the previous element
1203 eChildBefore.insertAdjacentHTML('afterend', htmlTemplate);
1204 res = eChildBefore.nextSibling;
1205 }
1206 else {
1207 if (eContainer.firstChild) {
1208 // insert it at the first location
1209 eContainer.insertAdjacentHTML('afterbegin', htmlTemplate);
1210 }
1211 else {
1212 // otherwise eContainer is empty, so just append it
1213 eContainer.innerHTML = htmlTemplate;
1214 }
1215 res = eContainer.firstChild;
1216 }
1217 return res;
1218 };
1219 Utils.every = function (items, callback) {
1220 if (!items || items.length === 0) {
1221 return true;
1222 }
1223 for (var i = 0; i < items.length; i++) {
1224 if (!callback(items[i])) {
1225 return false;
1226 }
1227 }
1228 return true;
1229 };
1230 Utils.toStringOrNull = function (value) {
1231 if (this.exists(value) && value.toString) {
1232 return value.toString();
1233 }
1234 else {
1235 return null;
1236 }
1237 };
1238 Utils.formatWidth = function (width) {
1239 if (typeof width === "number") {
1240 return width + "px";
1241 }
1242 else {
1243 return width;
1244 }
1245 };
1246 Utils.formatNumberTwoDecimalPlacesAndCommas = function (value) {
1247 if (typeof value !== 'number') {
1248 return '';
1249 }
1250 // took this from: http://blog.tompawlak.org/number-currency-formatting-javascript
1251 return (Math.round(value * 100) / 100).toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,");
1252 };
1253 // the native method number.toLocaleString(undefined, {minimumFractionDigits: 0}) puts in decimal places in IE,
1254 // so we use this method instead
1255 Utils.formatNumberCommas = function (value) {
1256 if (typeof value !== 'number') {
1257 return '';
1258 }
1259 // took this from: http://blog.tompawlak.org/number-currency-formatting-javascript
1260 return value.toString().replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,");
1261 };
1262 Utils.prependDC = function (parent, documentFragment) {
1263 if (this.exists(parent.firstChild)) {
1264 parent.insertBefore(documentFragment, parent.firstChild);
1265 }
1266 else {
1267 parent.appendChild(documentFragment);
1268 }
1269 };
1270 /**
1271 * If icon provided, use this (either a string, or a function callback).
1272 * if not, then use the default icon from the theme
1273 */
1274 Utils.createIcon = function (iconName, gridOptionsWrapper, column) {
1275 var iconContents = this.createIconNoSpan(iconName, gridOptionsWrapper, column);
1276 if (iconContents.className.indexOf('ag-icon') > -1) {
1277 return iconContents;
1278 }
1279 else {
1280 var eResult = document.createElement('span');
1281 eResult.appendChild(iconContents);
1282 return eResult;
1283 }
1284 };
1285 Utils.createIconNoSpan = function (iconName, gridOptionsWrapper, column) {
1286 var userProvidedIcon;
1287 // check col for icon first
1288 if (column && column.getColDef().icons) {
1289 userProvidedIcon = column.getColDef().icons[iconName];
1290 }
1291 // it not in col, try grid options
1292 if (!userProvidedIcon && gridOptionsWrapper.getIcons()) {
1293 userProvidedIcon = gridOptionsWrapper.getIcons()[iconName];
1294 }
1295 // now if user provided, use it
1296 if (userProvidedIcon) {
1297 var rendererResult = void 0;
1298 if (typeof userProvidedIcon === 'function') {
1299 rendererResult = userProvidedIcon();
1300 }
1301 else if (typeof userProvidedIcon === 'string') {
1302 rendererResult = userProvidedIcon;
1303 }
1304 else {
1305 throw 'icon from grid options needs to be a string or a function';
1306 }
1307 if (typeof rendererResult === 'string') {
1308 return this.loadTemplate(rendererResult);
1309 }
1310 else if (this.isNodeOrElement(rendererResult)) {
1311 return rendererResult;
1312 }
1313 else {
1314 throw 'iconRenderer should return back a string or a dom object';
1315 }
1316 }
1317 else {
1318 var span = document.createElement('span');
1319 var cssClass = this.iconNameClassMap[iconName];
1320 if (!cssClass) {
1321 throw new Error(iconName + " did not find class");
1322 }
1323 span.setAttribute("class", "ag-icon ag-icon-" + cssClass);
1324 return span;
1325 }
1326 };
1327 Utils.addStylesToElement = function (eElement, styles) {
1328 var _this = this;
1329 if (!styles) {
1330 return;
1331 }
1332 Object.keys(styles).forEach(function (key) {
1333 var keyCamelCase = _this.hyphenToCamelCase(key);
1334 eElement.style[keyCamelCase] = styles[key];
1335 });
1336 };
1337 Utils.isHorizontalScrollShowing = function (element) {
1338 return element.clientWidth < element.scrollWidth;
1339 };
1340 Utils.isVerticalScrollShowing = function (element) {
1341 return element.clientHeight < element.scrollHeight;
1342 };
1343 Utils.getMaxDivHeight = function () {
1344 if (!document.body) {
1345 return -1;
1346 }
1347 var res = 1000000;
1348 // FF reports the height back but still renders blank after ~6M px
1349 var testUpTo = navigator.userAgent.toLowerCase().match(/firefox/) ? 6000000 : 1000000000;
1350 var div = this.loadTemplate("<div/>");
1351 document.body.appendChild(div);
1352 while (true) {
1353 var test = res * 2;
1354 div.style.height = test + 'px';
1355 if (test > testUpTo || div.clientHeight !== test) {
1356 break;
1357 }
1358 else {
1359 res = test;
1360 }
1361 }
1362 document.body.removeChild(div);
1363 return res;
1364 };
1365 Utils.getScrollbarWidth = function () {
1366 var outer = document.createElement("div");
1367 outer.style.visibility = "hidden";
1368 outer.style.width = "100px";
1369 outer.style.msOverflowStyle = "scrollbar"; // needed for WinJS apps
1370 document.body.appendChild(outer);
1371 var widthNoScroll = outer.offsetWidth;
1372 // force scrollbars
1373 outer.style.overflow = "scroll";
1374 // add inner div
1375 var inner = document.createElement("div");
1376 inner.style.width = "100%";
1377 outer.appendChild(inner);
1378 var widthWithScroll = inner.offsetWidth;
1379 // remove divs
1380 outer.parentNode.removeChild(outer);
1381 return widthNoScroll - widthWithScroll;
1382 };
1383 Utils.isKeyPressed = function (event, keyToCheck) {
1384 var pressedKey = event.which || event.keyCode;
1385 return pressedKey === keyToCheck;
1386 };
1387 Utils.setVisible = function (element, visible) {
1388 this.addOrRemoveCssClass(element, 'ag-hidden', !visible);
1389 };
1390 Utils.setHidden = function (element, hidden) {
1391 this.addOrRemoveCssClass(element, 'ag-visibility-hidden', hidden);
1392 };
1393 Utils.isBrowserIE = function () {
1394 if (this.isIE === undefined) {
1395 this.isIE = false || !!document.documentMode; // At least IE6
1396 }
1397 return this.isIE;
1398 };
1399 Utils.isBrowserEdge = function () {
1400 if (this.isEdge === undefined) {
1401 this.isEdge = !this.isBrowserIE() && !!window.StyleMedia;
1402 }
1403 return this.isEdge;
1404 };
1405 Utils.isBrowserSafari = function () {
1406 if (this.isSafari === undefined) {
1407 var anyWindow = window;
1408 // taken from https://github.com/ag-grid/ag-grid/issues/550
1409 this.isSafari = Object.prototype.toString.call(anyWindow.HTMLElement).indexOf('Constructor') > 0
1410 || (function (p) {
1411 return p.toString() === "[object SafariRemoteNotification]";
1412 })(!anyWindow.safari || anyWindow.safari.pushNotification);
1413 }
1414 return this.isSafari;
1415 };
1416 Utils.isBrowserChrome = function () {
1417 if (this.isChrome === undefined) {
1418 var anyWindow = window;
1419 this.isChrome = !!anyWindow.chrome && !!anyWindow.chrome.webstore;
1420 }
1421 return this.isChrome;
1422 };
1423 Utils.isBrowserFirefox = function () {
1424 if (this.isFirefox === undefined) {
1425 var anyWindow = window;
1426 this.isFirefox = typeof anyWindow.InstallTrigger !== 'undefined';
1427 }
1428 return this.isFirefox;
1429 };
1430 Utils.isUserAgentIPad = function () {
1431 if (this.isIPad === undefined) {
1432 // taken from https://davidwalsh.name/detect-ipad
1433 this.isIPad = navigator.userAgent.match(/iPad|iPhone/i) != null;
1434 }
1435 return this.isIPad;
1436 };
1437 // srcElement is only available in IE. In all other browsers it is target
1438 // http://stackoverflow.com/questions/5301643/how-can-i-make-event-srcelement-work-in-firefox-and-what-does-it-mean
1439 Utils.getTarget = function (event) {
1440 var eventNoType = event;
1441 return eventNoType.target || eventNoType.srcElement;
1442 };
1443 Utils.isElementInEventPath = function (element, event) {
1444 if (!event || !element) {
1445 return false;
1446 }
1447 var path = exports._.getEventPath(event);
1448 return path.indexOf(element) >= 0;
1449 };
1450 Utils.createEventPath = function (event) {
1451 var res = [];
1452 var pointer = exports._.getTarget(event);
1453 while (pointer) {
1454 res.push(pointer);
1455 pointer = pointer.parentElement;
1456 }
1457 return res;
1458 };
1459 // firefox doesn't have event.path set, or any alternative to it, so we hack
1460 // it in. this is needed as it's to late to work out the path when the item is
1461 // removed from the dom. used by MouseEventService, where it works out if a click
1462 // was from the current grid, or a detail grid (master / detail).
1463 Utils.addAgGridEventPath = function (event) {
1464 event.__agGridEventPath = this.getEventPath(event);
1465 };
1466 Utils.getEventPath = function (event) {
1467 // https://stackoverflow.com/questions/39245488/event-path-undefined-with-firefox-and-vue-js
1468 // https://developer.mozilla.org/en-US/docs/Web/API/Event
1469 var eventNoType = event;
1470 if (event.deepPath) {
1471 // IE supports deep path
1472 return event.deepPath();
1473 }
1474 else if (eventNoType.path) {
1475 // Chrome supports path
1476 return eventNoType.path;
1477 }
1478 else if (eventNoType.composedPath) {
1479 // Firefox supports composePath
1480 return eventNoType.composedPath();
1481 }
1482 else if (eventNoType.__agGridEventPath) {
1483 // Firefox supports composePath
1484 return eventNoType.__agGridEventPath;
1485 }
1486 else {
1487 // and finally, if none of the above worked,
1488 // we create the path ourselves
1489 return this.createEventPath(event);
1490 }
1491 };
1492 Utils.forEachSnapshotFirst = function (list, callback) {
1493 if (list) {
1494 var arrayCopy = list.slice(0);
1495 arrayCopy.forEach(callback);
1496 }
1497 };
1498 // taken from: http://stackoverflow.com/questions/1038727/how-to-get-browser-width-using-javascript-code
1499 Utils.getBodyWidth = function () {
1500 if (document.body) {
1501 return document.body.clientWidth;
1502 }
1503 if (window.innerHeight) {
1504 return window.innerWidth;
1505 }
1506 if (document.documentElement && document.documentElement.clientWidth) {
1507 return document.documentElement.clientWidth;
1508 }
1509 return -1;
1510 };
1511 // taken from: http://stackoverflow.com/questions/1038727/how-to-get-browser-width-using-javascript-code
1512 Utils.getBodyHeight = function () {
1513 if (document.body) {
1514 return document.body.clientHeight;
1515 }
1516 if (window.innerHeight) {
1517 return window.innerHeight;
1518 }
1519 if (document.documentElement && document.documentElement.clientHeight) {
1520 return document.documentElement.clientHeight;
1521 }
1522 return -1;
1523 };
1524 Utils.setCheckboxState = function (eCheckbox, state) {
1525 if (typeof state === 'boolean') {
1526 eCheckbox.checked = state;
1527 eCheckbox.indeterminate = false;
1528 }
1529 else {
1530 // isNodeSelected returns back undefined if it's a group and the children
1531 // are a mix of selected and unselected
1532 eCheckbox.indeterminate = true;
1533 }
1534 };
1535 Utils.traverseNodesWithKey = function (nodes, callback) {
1536 var keyParts = [];
1537 recursiveSearchNodes(nodes);
1538 function recursiveSearchNodes(nodes) {
1539 nodes.forEach(function (node) {
1540 // also checking for children for tree data
1541 if (node.group || node.hasChildren()) {
1542 keyParts.push(node.key);
1543 var key = keyParts.join('|');
1544 callback(node, key);
1545 recursiveSearchNodes(node.childrenAfterGroup);
1546 keyParts.pop();
1547 }
1548 });
1549 }
1550 };
1551 // from https://gist.github.com/youssman/745578062609e8acac9f
1552 Utils.camelCaseToHyphen = function (str) {
1553 if (str === null || str === undefined) {
1554 return null;
1555 }
1556 return str.replace(/([A-Z])/g, function (g) { return '-' + g[0].toLowerCase(); });
1557 };
1558 // from https://stackoverflow.com/questions/6660977/convert-hyphens-to-camel-case-camelcase
1559 Utils.hyphenToCamelCase = function (str) {
1560 if (str === null || str === undefined) {
1561 return null;
1562 }
1563 return str.replace(/-([a-z])/g, function (g) { return g[1].toUpperCase(); });
1564 };
1565 // pas in an object eg: {color: 'black', top: '25px'} and it returns "color: black; top: 25px;" for html
1566 Utils.cssStyleObjectToMarkup = function (stylesToUse) {
1567 var _this = this;
1568 if (!stylesToUse) {
1569 return '';
1570 }
1571 var resParts = [];
1572 this.iterateObject(stylesToUse, function (styleKey, styleValue) {
1573 var styleKeyDashed = _this.camelCaseToHyphen(styleKey);
1574 resParts.push(styleKeyDashed + ": " + styleValue + ";");
1575 });
1576 return resParts.join(' ');
1577 };
1578 /**
1579 * From http://stackoverflow.com/questions/9716468/is-there-any-function-like-isnumeric-in-javascript-to-validate-numbers
1580 */
1581 Utils.isNumeric = function (value) {
1582 if (value === '')
1583 return false;
1584 return !isNaN(parseFloat(value)) && isFinite(value);
1585 };
1586 Utils.escape = function (toEscape) {
1587 if (toEscape === null || toEscape === undefined || !toEscape.replace) {
1588 return toEscape;
1589 }
1590 return toEscape.replace(reUnescapedHtml, function (chr) { return HTML_ESCAPES[chr]; });
1591 };
1592 // Taken from here: https://github.com/facebook/fixed-data-table/blob/master/src/vendor_upstream/dom/normalizeWheel.js
1593 /**
1594 * Mouse wheel (and 2-finger trackpad) support on the web sucks. It is
1595 * complicated, thus this doc is long and (hopefully) detailed enough to answer
1596 * your questions.
1597 *
1598 * If you need to react to the mouse wheel in a predictable way, this code is
1599 * like your bestest friend. * hugs *
1600 *
1601 * As of today, there are 4 DOM event types you can listen to:
1602 *
1603 * 'wheel' -- Chrome(31+), FF(17+), IE(9+)
1604 * 'mousewheel' -- Chrome, IE(6+), Opera, Safari
1605 * 'MozMousePixelScroll' -- FF(3.5 only!) (2010-2013) -- don't bother!
1606 * 'DOMMouseScroll' -- FF(0.9.7+) since 2003
1607 *
1608 * So what to do? The is the best:
1609 *
1610 * normalizeWheel.getEventType();
1611 *
1612 * In your event callback, use this code to get sane interpretation of the
1613 * deltas. This code will return an object with properties:
1614 *
1615 * spinX -- normalized spin speed (use for zoom) - x plane
1616 * spinY -- " - y plane
1617 * pixelX -- normalized distance (to pixels) - x plane
1618 * pixelY -- " - y plane
1619 *
1620 * Wheel values are provided by the browser assuming you are using the wheel to
1621 * scroll a web page by a number of lines or pixels (or pages). Values can vary
1622 * significantly on different platforms and browsers, forgetting that you can
1623 * scroll at different speeds. Some devices (like trackpads) emit more events
1624 * at smaller increments with fine granularity, and some emit massive jumps with
1625 * linear speed or acceleration.
1626 *
1627 * This code does its best to normalize the deltas for you:
1628 *
1629 * - spin is trying to normalize how far the wheel was spun (or trackpad
1630 * dragged). This is super useful for zoom support where you want to
1631 * throw away the chunky scroll steps on the PC and make those equal to
1632 * the slow and smooth tiny steps on the Mac. Key data: This code tries to
1633 * resolve a single slow step on a wheel to 1.
1634 *
1635 * - pixel is normalizing the desired scroll delta in pixel units. You'll
1636 * get the crazy differences between browsers, but at least it'll be in
1637 * pixels!
1638 *
1639 * - positive value indicates scrolling DOWN/RIGHT, negative UP/LEFT. This
1640 * should translate to positive value zooming IN, negative zooming OUT.
1641 * This matches the newer 'wheel' event.
1642 *
1643 * Why are there spinX, spinY (or pixels)?
1644 *
1645 * - spinX is a 2-finger side drag on the trackpad, and a shift + wheel turn
1646 * with a mouse. It results in side-scrolling in the browser by default.
1647 *
1648 * - spinY is what you expect -- it's the classic axis of a mouse wheel.
1649 *
1650 * - I dropped spinZ/pixelZ. It is supported by the DOM 3 'wheel' event and
1651 * probably is by browsers in conjunction with fancy 3D controllers .. but
1652 * you know.
1653 *
1654 * Implementation info:
1655 *
1656 * Examples of 'wheel' event if you scroll slowly (down) by one step with an
1657 * average mouse:
1658 *
1659 * OS X + Chrome (mouse) - 4 pixel delta (wheelDelta -120)
1660 * OS X + Safari (mouse) - N/A pixel delta (wheelDelta -12)
1661 * OS X + Firefox (mouse) - 0.1 line delta (wheelDelta N/A)
1662 * Win8 + Chrome (mouse) - 100 pixel delta (wheelDelta -120)
1663 * Win8 + Firefox (mouse) - 3 line delta (wheelDelta -120)
1664 *
1665 * On the trackpad:
1666 *
1667 * OS X + Chrome (trackpad) - 2 pixel delta (wheelDelta -6)
1668 * OS X + Firefox (trackpad) - 1 pixel delta (wheelDelta N/A)
1669 *
1670 * On other/older browsers.. it's more complicated as there can be multiple and
1671 * also missing delta values.
1672 *
1673 * The 'wheel' event is more standard:
1674 *
1675 * http://www.w3.org/TR/DOM-Level-3-Events/#events-wheelevents
1676 *
1677 * The basics is that it includes a unit, deltaMode (pixels, lines, pages), and
1678 * deltaX, deltaY and deltaZ. Some browsers provide other values to maintain
1679 * backward compatibility with older events. Those other values help us
1680 * better normalize spin speed. Example of what the browsers provide:
1681 *
1682 * | event.wheelDelta | event.detail
1683 * ------------------+------------------+--------------
1684 * Safari v5/OS X | -120 | 0
1685 * Safari v5/Win7 | -120 | 0
1686 * Chrome v17/OS X | -120 | 0
1687 * Chrome v17/Win7 | -120 | 0
1688 * IE9/Win7 | -120 | undefined
1689 * Firefox v4/OS X | undefined | 1
1690 * Firefox v4/Win7 | undefined | 3
1691 *
1692 */
1693 Utils.normalizeWheel = function (event) {
1694 var PIXEL_STEP = 10;
1695 var LINE_HEIGHT = 40;
1696 var PAGE_HEIGHT = 800;
1697 // spinX, spinY
1698 var sX = 0;
1699 var sY = 0;
1700 // pixelX, pixelY
1701 var pX = 0;
1702 var pY = 0;
1703 // Legacy
1704 if ('detail' in event) {
1705 sY = event.detail;
1706 }
1707 if ('wheelDelta' in event) {
1708 sY = -event.wheelDelta / 120;
1709 }
1710 if ('wheelDeltaY' in event) {
1711 sY = -event.wheelDeltaY / 120;
1712 }
1713 if ('wheelDeltaX' in event) {
1714 sX = -event.wheelDeltaX / 120;
1715 }
1716 // side scrolling on FF with DOMMouseScroll
1717 if ('axis' in event && event.axis === event.HORIZONTAL_AXIS) {
1718 sX = sY;
1719 sY = 0;
1720 }
1721 pX = sX * PIXEL_STEP;
1722 pY = sY * PIXEL_STEP;
1723 if ('deltaY' in event) {
1724 pY = event.deltaY;
1725 }
1726 if ('deltaX' in event) {
1727 pX = event.deltaX;
1728 }
1729 if ((pX || pY) && event.deltaMode) {
1730 if (event.deltaMode == 1) {
1731 pX *= LINE_HEIGHT;
1732 pY *= LINE_HEIGHT;
1733 }
1734 else {
1735 pX *= PAGE_HEIGHT;
1736 pY *= PAGE_HEIGHT;
1737 }
1738 }
1739 // Fall-back if spin cannot be determined
1740 if (pX && !sX) {
1741 sX = (pX < 1) ? -1 : 1;
1742 }
1743 if (pY && !sY) {
1744 sY = (pY < 1) ? -1 : 1;
1745 }
1746 return {
1747 spinX: sX,
1748 spinY: sY,
1749 pixelX: pX,
1750 pixelY: pY
1751 };
1752 };
1753 /**
1754 * https://stackoverflow.com/questions/24004791/can-someone-explain-the-debounce-function-in-javascript
1755 */
1756 Utils.debounce = function (func, wait, immediate) {
1757 if (immediate === void 0) { immediate = false; }
1758 // 'private' variable for instance
1759 // The returned function will be able to reference this due to closure.
1760 // Each call to the returned function will share this common timer.
1761 var timeout;
1762 // Calling debounce returns a new anonymous function
1763 return function () {
1764 // reference the context and args for the setTimeout function
1765 var context = this, args = arguments;
1766 // Should the function be called now? If immediate is true
1767 // and not already in a timeout then the answer is: Yes
1768 var callNow = immediate && !timeout;
1769 // This is the basic debounce behaviour where you can call this
1770 // function several times, but it will only execute once
1771 // [before or after imposing a delay].
1772 // Each time the returned function is called, the timer starts over.
1773 clearTimeout(timeout);
1774 // Set the new timeout
1775 timeout = setTimeout(function () {
1776 // Inside the timeout function, clear the timeout variable
1777 // which will let the next execution run when in 'immediate' mode
1778 timeout = null;
1779 // Check if the function already ran with the immediate flag
1780 if (!immediate) {
1781 // Call the original function with apply
1782 // apply lets you define the 'this' object as well as the arguments
1783 // (both captured before setTimeout)
1784 func.apply(context, args);
1785 }
1786 }, wait);
1787 // Immediate mode and no wait timer? Execute the function..
1788 if (callNow)
1789 func.apply(context, args);
1790 };
1791 };
1792 ;
1793 // a user once raised an issue - they said that when you opened a popup (eg context menu)
1794 // and then clicked on a selection checkbox, the popup wasn't closed. this is because the
1795 // popup listens for clicks on the body, however ag-grid WAS stopping propagation on the
1796 // checkbox clicks (so the rows didn't pick them up as row selection selection clicks).
1797 // to get around this, we have a pattern to stop propagation for the purposes of ag-Grid,
1798 // but we still let the event pass back to teh body.
1799 Utils.stopPropagationForAgGrid = function (event) {
1800 event[AG_GRID_STOP_PROPAGATION] = true;
1801 };
1802 Utils.isStopPropagationForAgGrid = function (event) {
1803 return event[AG_GRID_STOP_PROPAGATION] === true;
1804 };
1805 Utils.executeInAWhile = function (funcs) {
1806 this.executeAfter(funcs, 400);
1807 };
1808 Utils.executeNextVMTurn = function (funcs) {
1809 this.executeAfter(funcs, 0);
1810 };
1811 Utils.executeAfter = function (funcs, millis) {
1812 if (funcs.length > 0) {
1813 setTimeout(function () {
1814 funcs.forEach(function (func) { return func(); });
1815 }, millis);
1816 }
1817 };
1818 Utils.referenceCompare = function (left, right) {
1819 if (left == null && right == null)
1820 return true;
1821 if (left == null && right)
1822 return false;
1823 if (left && right == null)
1824 return false;
1825 return left === right;
1826 };
1827 Utils.get = function (source, expression, defaultValue) {
1828 if (source == null)
1829 return defaultValue;
1830 if (expression.indexOf('.') > -1) {
1831 var fields = expression.split('.');
1832 var thisKey = fields[0];
1833 var nextValue = source[thisKey];
1834 if (nextValue != null) {
1835 return Utils.get(nextValue, fields.slice(1, fields.length).join('.'), defaultValue);
1836 }
1837 else {
1838 return defaultValue;
1839 }
1840 }
1841 else {
1842 var nextValue = source[expression];
1843 return nextValue != null ? nextValue : defaultValue;
1844 }
1845 };
1846 Utils.addSafePassiveEventListener = function (eElement, event, listener) {
1847 eElement.addEventListener(event, listener, (Utils.passiveEvents.indexOf(event) > -1 ? { passive: true } : undefined));
1848 };
1849 Utils.camelCaseToHumanText = function (camelCase) {
1850 if (camelCase == null)
1851 return null;
1852 // Who needs to learn how to code when you have stack overflow!
1853 // from: https://stackoverflow.com/questions/15369566/putting-space-in-camel-case-string-using-regular-expression
1854 var rex = /([A-Z])([A-Z])([a-z])|([a-z])([A-Z])/g;
1855 var words = camelCase.replace(rex, '$1$4 $2$3$5').replace('.', ' ').split(' ');
1856 return words.map(function (word) { return word.substring(0, 1).toUpperCase() + ((word.length > 1) ? word.substring(1, word.length) : ''); }).join(' ');
1857 };
1858 // displays a message to the browser. this is useful in iPad, where you can't easily see the console.
1859 // so the javascript code can use this to give feedback. this is NOT intended to be called in production.
1860 // it is intended the ag-Grid developer calls this to troubleshoot, but then takes out the calls before
1861 // checking in.
1862 Utils.message = function (msg) {
1863 var eMessage = document.createElement('div');
1864 eMessage.innerHTML = msg;
1865 var eBox = document.querySelector('#__ag__message');
1866 if (!eBox) {
1867 var template = "<div id=\"__ag__message\" style=\"display: inline-block; position: absolute; top: 0px; left: 0px; color: white; background-color: black; z-index: 20; padding: 2px; border: 1px solid darkred; height: 200px; overflow-y: auto;\"></div>";
1868 eBox = this.loadTemplate(template);
1869 if (document.body) {
1870 document.body.appendChild(eBox);
1871 }
1872 }
1873 eBox.appendChild(eMessage);
1874 };
1875 // gets called by: a) ClientSideNodeManager and b) GroupStage to do sorting.
1876 // when in ClientSideNodeManager we always have indexes (as this sorts the items the
1877 // user provided) but when in GroupStage, the nodes can contain filler nodes that
1878 // don't have order id's
1879 Utils.sortRowNodesByOrder = function (rowNodes, rowNodeOrder) {
1880 if (!rowNodes) {
1881 return;
1882 }
1883 rowNodes.sort(function (nodeA, nodeB) {
1884 var positionA = rowNodeOrder[nodeA.id];
1885 var positionB = rowNodeOrder[nodeB.id];
1886 var aHasIndex = positionA !== undefined;
1887 var bHasIndex = positionB !== undefined;
1888 var bothNodesAreUserNodes = aHasIndex && bHasIndex;
1889 var bothNodesAreFillerNodes = !aHasIndex && !bHasIndex;
1890 if (bothNodesAreUserNodes) {
1891 // when comparing two nodes the user has provided, they always
1892 // have indexes
1893 return positionA - positionB;
1894 }
1895 else if (bothNodesAreFillerNodes) {
1896 // when comparing two filler nodes, we have no index to compare them
1897 // against, however we want this sorting to be deterministic, so that
1898 // the rows don't jump around as the user does delta updates. so we
1899 // want the same sort result. so we use the id - which doesn't make sense
1900 // from a sorting point of view, but does give consistent behaviour between
1901 // calls. otherwise groups jump around as delta updates are done.
1902 return nodeA.id > nodeB.id ? 1 : -1;
1903 }
1904 else if (aHasIndex) {
1905 return 1;
1906 }
1907 else {
1908 return -1;
1909 }
1910 });
1911 };
1912 Utils.fuzzyCheckStrings = function (inputValues, validValues, allSuggestions) {
1913 var _this = this;
1914 var fuzzyMatches = {};
1915 var invalidInputs = inputValues.filter(function (inputValue) {
1916 return !validValues.some(function (validValue) { return validValue === inputValue; });
1917 });
1918 if (invalidInputs.length > 0) {
1919 invalidInputs.forEach(function (invalidInput) {
1920 return fuzzyMatches[invalidInput] = _this.fuzzySuggestions(invalidInput, validValues, allSuggestions);
1921 });
1922 }
1923 return fuzzyMatches;
1924 };
1925 Utils.fuzzySuggestions = function (inputValue, validValues, allSuggestions) {
1926 var thisSuggestions = allSuggestions.slice(0);
1927 thisSuggestions.sort(function (suggestedValueLeft, suggestedValueRight) {
1928 var leftDifference = exports._.string_similarity(suggestedValueLeft.toLowerCase(), inputValue.toLowerCase());
1929 var rightDifference = exports._.string_similarity(suggestedValueRight.toLowerCase(), inputValue.toLowerCase());
1930 return leftDifference > rightDifference ? -1 :
1931 leftDifference === rightDifference ? 0 :
1932 1;
1933 });
1934 return thisSuggestions;
1935 };
1936 //Algorithm to do fuzzy search
1937 //https://stackoverflow.com/questions/23305000/javascript-fuzzy-search-that-makes-sense
1938 Utils.get_bigrams = function (from) {
1939 var i, j, ref, s, v;
1940 s = from.toLowerCase();
1941 v = new Array(s.length - 1);
1942 for (i = j = 0, ref = v.length; j <= ref; i = j += 1) {
1943 v[i] = s.slice(i, i + 2);
1944 }
1945 return v;
1946 };
1947 Utils.isNumpadDelWithNumlockOnForEdgeOrIe = function (event) {
1948 if (Utils.isBrowserEdge() || Utils.isBrowserIE()) {
1949 return event.key === Utils.NUMPAD_DEL_NUMLOCK_ON_KEY &&
1950 event.charCode === Utils.NUMPAD_DEL_NUMLOCK_ON_CHARCODE;
1951 }
1952 return false;
1953 };
1954 Utils.PRINTABLE_CHARACTERS = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890!"£$%^&*()_+-=[];\'#,./\\|<>?:@~{}';
1955 Utils.NUMPAD_DEL_NUMLOCK_ON_KEY = 'Del';
1956 Utils.NUMPAD_DEL_NUMLOCK_ON_CHARCODE = 46;
1957 Utils.doOnceFlags = {};
1958 // static prepend(parent: HTMLElement, child: HTMLElement): void {
1959 // if (this.exists(parent.firstChild)) {
1960 // parent.insertBefore(child, parent.firstChild);
1961 // } else {
1962 // parent.appendChild(child);
1963 // }
1964 // }
1965 Utils.iconNameClassMap = {
1966 'columnMovePin': 'pin',
1967 'columnMoveAdd': 'plus',
1968 'columnMoveHide': 'eye-slash',
1969 'columnMoveMove': 'arrows',
1970 'columnMoveLeft': 'left',
1971 'columnMoveRight': 'right',
1972 'columnMoveGroup': 'group',
1973 'columnMoveValue': 'aggregation',
1974 'columnMovePivot': 'pivot',
1975 'dropNotAllowed': 'not-allowed',
1976 'groupContracted': 'expanded',
1977 'groupExpanded': 'contracted',
1978 'checkboxChecked': 'checkbox-checked',
1979 'checkboxUnchecked': 'checkbox-unchecked',
1980 'checkboxIndeterminate': 'checkbox-indeterminate',
1981 'checkboxCheckedReadOnly': 'checkbox-checked-readonly',
1982 'checkboxUncheckedReadOnly': 'checkbox-unchecked-readonly',
1983 'checkboxIndeterminateReadOnly': 'checkbox-indeterminate-readonly',
1984 'groupLoading': 'loading',
1985 'menu': 'menu',
1986 'filter': 'filter',
1987 'columns': 'columns',
1988 'menuPin': 'pin',
1989 'menuValue': 'aggregation',
1990 'menuAddRowGroup': 'group',
1991 'menuRemoveRowGroup': 'group',
1992 'clipboardCopy': 'copy',
1993 'clipboardCut': 'cut',
1994 'clipboardPaste': 'paste',
1995 'pivotPanel': 'pivot',
1996 'rowGroupPanel': 'group',
1997 'valuePanel': 'aggregation',
1998 'columnGroupOpened': 'expanded',
1999 'columnGroupClosed': 'contracted',
2000 'columnSelectClosed': 'tree-closed',
2001 'columnSelectOpen': 'tree-open',
2002 // from deprecated header, remove at some point
2003 'sortAscending': 'asc',
2004 'sortDescending': 'desc',
2005 'sortUnSort': 'none'
2006 };
2007 Utils.passiveEvents = ['touchstart', 'touchend', 'touchmove', 'touchcancel'];
2008 Utils.string_similarity = function (str1, str2) {
2009 var hit_count, j, k, len, len1, pairs1, pairs2, union, x, y;
2010 if (str1.length > 0 && str2.length > 0) {
2011 pairs1 = Utils.get_bigrams(str1);
2012 pairs2 = Utils.get_bigrams(str2);
2013 union = pairs1.length + pairs2.length;
2014 hit_count = 0;
2015 for (j = 0, len = pairs1.length; j < len; j++) {
2016 x = pairs1[j];
2017 for (k = 0, len1 = pairs2.length; k < len1; k++) {
2018 y = pairs2[k];
2019 if (x === y) {
2020 hit_count++;
2021 }
2022 }
2023 }
2024 if (hit_count > 0) {
2025 return (2.0 * hit_count) / union;
2026 }
2027 }
2028 return 0.0;
2029 };
2030 return Utils;
2031}());
2032exports.Utils = Utils;
2033var NumberSequence = (function () {
2034 function NumberSequence(initValue, step) {
2035 if (initValue === void 0) { initValue = 0; }
2036 if (step === void 0) { step = 1; }
2037 this.nextValue = initValue;
2038 this.step = step;
2039 }
2040 NumberSequence.prototype.next = function () {
2041 var valToReturn = this.nextValue;
2042 this.nextValue += this.step;
2043 return valToReturn;
2044 };
2045 NumberSequence.prototype.peek = function () {
2046 return this.nextValue;
2047 };
2048 NumberSequence.prototype.skip = function (count) {
2049 this.nextValue += count;
2050 };
2051 return NumberSequence;
2052}());
2053exports.NumberSequence = NumberSequence;
2054exports._ = Utils;
2055var PromiseStatus;
2056(function (PromiseStatus) {
2057 PromiseStatus[PromiseStatus["IN_PROGRESS"] = 0] = "IN_PROGRESS";
2058 PromiseStatus[PromiseStatus["RESOLVED"] = 1] = "RESOLVED";
2059})(PromiseStatus = exports.PromiseStatus || (exports.PromiseStatus = {}));
2060var Promise = (function () {
2061 function Promise(callback) {
2062 this.status = PromiseStatus.IN_PROGRESS;
2063 this.resolution = null;
2064 this.listOfWaiters = [];
2065 callback(this.onDone.bind(this), this.onReject.bind(this));
2066 }
2067 Promise.all = function (toCombine) {
2068 return new Promise(function (resolve) {
2069 var combinedValues = [];
2070 var remainingToResolve = toCombine.length;
2071 toCombine.forEach(function (source, index) {
2072 source.then(function (sourceResolved) {
2073 remainingToResolve--;
2074 combinedValues[index] = sourceResolved;
2075 if (remainingToResolve == 0) {
2076 resolve(combinedValues);
2077 }
2078 });
2079 combinedValues.push(null);
2080 });
2081 });
2082 };
2083 Promise.resolve = function (value) {
2084 return new Promise(function (resolve) { return resolve(value); });
2085 };
2086 Promise.external = function () {
2087 var capture;
2088 var promise = new Promise(function (resolve) {
2089 capture = resolve;
2090 });
2091 return {
2092 promise: promise,
2093 resolve: function (value) {
2094 capture(value);
2095 }
2096 };
2097 };
2098 Promise.prototype.then = function (func) {
2099 if (this.status === PromiseStatus.IN_PROGRESS) {
2100 this.listOfWaiters.push(func);
2101 }
2102 else {
2103 func(this.resolution);
2104 }
2105 };
2106 Promise.prototype.firstOneOnly = function (func) {
2107 if (this.status === PromiseStatus.IN_PROGRESS) {
2108 if (this.listOfWaiters.length === 0) {
2109 this.listOfWaiters.push(func);
2110 }
2111 }
2112 else {
2113 func(this.resolution);
2114 }
2115 };
2116 Promise.prototype.map = function (adapter) {
2117 var _this = this;
2118 return new Promise(function (resolve) {
2119 _this.then(function (unmapped) {
2120 resolve(adapter(unmapped));
2121 });
2122 });
2123 };
2124 Promise.prototype.resolveNow = function (ifNotResolvedValue, ifResolved) {
2125 if (this.status == PromiseStatus.IN_PROGRESS)
2126 return ifNotResolvedValue;
2127 return ifResolved(this.resolution);
2128 };
2129 Promise.prototype.onDone = function (value) {
2130 this.status = PromiseStatus.RESOLVED;
2131 this.resolution = value;
2132 this.listOfWaiters.forEach(function (waiter) { return waiter(value); });
2133 };
2134 Promise.prototype.onReject = function (params) {
2135 console.warn('TBI');
2136 };
2137 return Promise;
2138}());
2139exports.Promise = Promise;
2140
2141
2142/***/ }),
2143/* 2 */
2144/***/ (function(module, exports, __webpack_require__) {
2145
2146"use strict";
2147/**
2148 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
2149 * @version v18.1.2
2150 * @link http://www.ag-grid.com/
2151 * @license MIT
2152 */
2153
2154var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2155 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
2156 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
2157 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
2158 return c > 3 && r && Object.defineProperty(target, key, r), r;
2159};
2160var __metadata = (this && this.__metadata) || function (k, v) {
2161 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
2162};
2163var __param = (this && this.__param) || function (paramIndex, decorator) {
2164 return function (target, key) { decorator(target, key, paramIndex); }
2165};
2166Object.defineProperty(exports, "__esModule", { value: true });
2167var eventService_1 = __webpack_require__(3);
2168var constants_1 = __webpack_require__(9);
2169var componentUtil_1 = __webpack_require__(64);
2170var gridApi_1 = __webpack_require__(6);
2171var context_1 = __webpack_require__(0);
2172var columnApi_1 = __webpack_require__(7);
2173var columnController_1 = __webpack_require__(4);
2174var utils_1 = __webpack_require__(1);
2175var environment_1 = __webpack_require__(43);
2176var propertyKeys_1 = __webpack_require__(91);
2177var colDefUtil_1 = __webpack_require__(108);
2178var eventKeys_1 = __webpack_require__(27);
2179var autoHeightCalculator_1 = __webpack_require__(81);
2180var DEFAULT_ROW_HEIGHT = 25;
2181var DEFAULT_DETAIL_ROW_HEIGHT = 300;
2182var DEFAULT_VIEWPORT_ROW_MODEL_PAGE_SIZE = 5;
2183var DEFAULT_VIEWPORT_ROW_MODEL_BUFFER_SIZE = 5;
2184var legacyThemes = [
2185 'ag-fresh',
2186 'ag-bootstrap',
2187 'ag-blue',
2188 'ag-dark',
2189 'ag-material'
2190];
2191function isTrue(value) {
2192 return value === true || value === 'true';
2193}
2194function zeroOrGreater(value, defaultValue) {
2195 if (value >= 0) {
2196 return value;
2197 }
2198 else {
2199 // zero gets returned if number is missing or the wrong type
2200 return defaultValue;
2201 }
2202}
2203function oneOrGreater(value, defaultValue) {
2204 if (value > 0) {
2205 return value;
2206 }
2207 else {
2208 // zero gets returned if number is missing or the wrong type
2209 return defaultValue;
2210 }
2211}
2212var GridOptionsWrapper = (function () {
2213 function GridOptionsWrapper() {
2214 this.propertyEventService = new eventService_1.EventService();
2215 this.domDataKey = '__AG_' + Math.random().toString();
2216 this.layoutElements = [];
2217 }
2218 GridOptionsWrapper_1 = GridOptionsWrapper;
2219 GridOptionsWrapper.prototype.agWire = function (gridApi, columnApi) {
2220 this.gridOptions.api = gridApi;
2221 this.gridOptions.columnApi = columnApi;
2222 this.checkForDeprecated();
2223 };
2224 GridOptionsWrapper.prototype.destroy = function () {
2225 // need to remove these, as we don't own the lifecycle of the gridOptions, we need to
2226 // remove the references in case the user keeps the grid options, we want the rest
2227 // of the grid to be picked up by the garbage collector
2228 this.gridOptions.api = null;
2229 this.gridOptions.columnApi = null;
2230 };
2231 GridOptionsWrapper.prototype.init = function () {
2232 if (!(this.gridOptions.suppressPropertyNamesCheck === true)) {
2233 this.checkGridOptionsProperties();
2234 this.checkColumnDefProperties();
2235 }
2236 var async = this.useAsyncEvents();
2237 this.eventService.addGlobalListener(this.globalEventHandler.bind(this), async);
2238 if (this.isGroupSelectsChildren() && this.isSuppressParentsInRowNodes()) {
2239 console.warn('ag-Grid: groupSelectsChildren does not work wth suppressParentsInRowNodes, this selection method needs the part in rowNode to work');
2240 }
2241 if (this.isGroupSelectsChildren()) {
2242 if (!this.isRowSelectionMulti()) {
2243 console.warn("ag-Grid: rowSelection must be 'multiple' for groupSelectsChildren to make sense");
2244 }
2245 if (this.isRowModelServerSide()) {
2246 console.warn('ag-Grid: group selects children is NOT support for Server Side Row Model. ' +
2247 'This is because the rows are lazy loaded, so selecting a group is not possible as' +
2248 'the grid has no way of knowing what the children are.');
2249 }
2250 }
2251 if (this.isGroupRemoveSingleChildren() && this.isGroupHideOpenParents()) {
2252 console.warn('ag-Grid: groupRemoveSingleChildren and groupHideOpenParents do not work with each other, you need to pick one. And don\'t ask us how to us these together on our support forum either you will get the same answer!');
2253 }
2254 this.addEventListener(GridOptionsWrapper_1.PROP_GRID_AUTO_HEIGHT, this.updateLayoutClasses.bind(this));
2255 };
2256 GridOptionsWrapper.prototype.checkColumnDefProperties = function () {
2257 var _this = this;
2258 if (this.gridOptions.columnDefs == null)
2259 return;
2260 this.gridOptions.columnDefs.forEach(function (colDef) {
2261 var userProperties = Object.getOwnPropertyNames(colDef);
2262 var validProperties = colDefUtil_1.ColDefUtil.ALL_PROPERTIES.concat(colDefUtil_1.ColDefUtil.FRAMEWORK_PROPERTIES);
2263 _this.checkProperties(userProperties, validProperties, validProperties, 'colDef', 'https://www.ag-grid.com/javascript-grid-column-properties/');
2264 });
2265 };
2266 GridOptionsWrapper.prototype.checkGridOptionsProperties = function () {
2267 var userProperties = Object.getOwnPropertyNames(this.gridOptions);
2268 var validProperties = propertyKeys_1.PropertyKeys.ALL_PROPERTIES.concat(propertyKeys_1.PropertyKeys.FRAMEWORK_PROPERTIES);
2269 Object.keys(eventKeys_1.Events).forEach(function (it) { return validProperties.push(componentUtil_1.ComponentUtil.getCallbackForEvent(eventKeys_1.Events[it])); });
2270 var validPropertiesAndExceptions = validProperties.concat('api', 'columnApi');
2271 this.checkProperties(userProperties, validPropertiesAndExceptions, validProperties, 'gridOptions', 'https://www.ag-grid.com/javascript-grid-properties/');
2272 };
2273 GridOptionsWrapper.prototype.checkProperties = function (userProperties, validPropertiesAndExceptions, validProperties, containerName, docsUrl) {
2274 var invalidProperties = utils_1.Utils.fuzzyCheckStrings(userProperties, validPropertiesAndExceptions, validProperties);
2275 var invalidPropertyKeys = Object.keys(invalidProperties);
2276 invalidPropertyKeys.forEach(function (invalidPropertyKey) {
2277 var fuzzySuggestions = invalidProperties[invalidPropertyKey];
2278 console.warn("ag-grid: invalid " + containerName + " property '" + invalidPropertyKey + "' did you mean any of these: " + fuzzySuggestions.slice(0, 8).join(","));
2279 });
2280 if (invalidPropertyKeys.length > 0) {
2281 console.warn("ag-grid: to see all the valid " + containerName + " properties please check: " + docsUrl);
2282 }
2283 };
2284 // returns the dom data, or undefined if not found
2285 GridOptionsWrapper.prototype.getDomData = function (element, key) {
2286 var domData = element[this.domDataKey];
2287 if (domData) {
2288 return domData[key];
2289 }
2290 else {
2291 return undefined;
2292 }
2293 };
2294 GridOptionsWrapper.prototype.setDomData = function (element, key, value) {
2295 var domData = element[this.domDataKey];
2296 if (utils_1.Utils.missing(domData)) {
2297 domData = {};
2298 element[this.domDataKey] = domData;
2299 }
2300 domData[key] = value;
2301 };
2302 GridOptionsWrapper.prototype.isEnterprise = function () { return this.enterprise; };
2303 GridOptionsWrapper.prototype.isRowSelection = function () { return this.gridOptions.rowSelection === "single" || this.gridOptions.rowSelection === "multiple"; };
2304 GridOptionsWrapper.prototype.isRowDeselection = function () { return isTrue(this.gridOptions.rowDeselection); };
2305 GridOptionsWrapper.prototype.isRowSelectionMulti = function () { return this.gridOptions.rowSelection === 'multiple'; };
2306 GridOptionsWrapper.prototype.isRowMultiSelectWithClick = function () { return isTrue(this.gridOptions.rowMultiSelectWithClick); };
2307 GridOptionsWrapper.prototype.getContext = function () { return this.gridOptions.context; };
2308 GridOptionsWrapper.prototype.isPivotMode = function () { return isTrue(this.gridOptions.pivotMode); };
2309 GridOptionsWrapper.prototype.isPivotTotals = function () { return isTrue(this.gridOptions.pivotTotals); };
2310 GridOptionsWrapper.prototype.getPivotColumnGroupTotals = function () { return this.gridOptions.pivotColumnGroupTotals; };
2311 GridOptionsWrapper.prototype.getPivotRowTotals = function () { return this.gridOptions.pivotRowTotals; };
2312 GridOptionsWrapper.prototype.isRowModelInfinite = function () { return this.gridOptions.rowModelType === constants_1.Constants.ROW_MODEL_TYPE_INFINITE; };
2313 GridOptionsWrapper.prototype.isRowModelViewport = function () { return this.gridOptions.rowModelType === constants_1.Constants.ROW_MODEL_TYPE_VIEWPORT; };
2314 GridOptionsWrapper.prototype.isRowModelServerSide = function () { return this.gridOptions.rowModelType === constants_1.Constants.ROW_MODEL_TYPE_SERVER_SIDE; };
2315 GridOptionsWrapper.prototype.isRowModelDefault = function () {
2316 return utils_1.Utils.missing(this.gridOptions.rowModelType) ||
2317 this.gridOptions.rowModelType === constants_1.Constants.ROW_MODEL_TYPE_CLIENT_SIDE ||
2318 this.gridOptions.rowModelType === constants_1.Constants.DEPRECATED_ROW_MODEL_TYPE_NORMAL;
2319 };
2320 GridOptionsWrapper.prototype.isFullRowEdit = function () { return this.gridOptions.editType === 'fullRow'; };
2321 GridOptionsWrapper.prototype.isSuppressFocusAfterRefresh = function () { return isTrue(this.gridOptions.suppressFocusAfterRefresh); };
2322 GridOptionsWrapper.prototype.isShowToolPanel = function () { return isTrue(this.gridOptions.showToolPanel); };
2323 GridOptionsWrapper.prototype.isToolPanelSuppressValues = function () { return isTrue(this.gridOptions.toolPanelSuppressValues); };
2324 GridOptionsWrapper.prototype.isToolPanelSuppressPivots = function () {
2325 // we don't allow pivots when doing tree data
2326 return isTrue(this.gridOptions.toolPanelSuppressPivots) || this.isTreeData();
2327 };
2328 GridOptionsWrapper.prototype.isToolPanelSuppressRowGroups = function () {
2329 // we don't allow row grouping when doing tree data
2330 return isTrue(this.gridOptions.toolPanelSuppressRowGroups) || this.isTreeData();
2331 };
2332 GridOptionsWrapper.prototype.isToolPanelSuppressSideButtons = function () { return isTrue(this.gridOptions.toolPanelSuppressSideButtons); };
2333 GridOptionsWrapper.prototype.isToolPanelSuppressPivotMode = function () { return isTrue(this.gridOptions.toolPanelSuppressPivotMode) || this.isTreeData(); };
2334 GridOptionsWrapper.prototype.isContractColumnSelection = function () { return isTrue(this.gridOptions.contractColumnSelection); };
2335 GridOptionsWrapper.prototype.isToolPanelSuppressColumnFilter = function () { return isTrue(this.gridOptions.toolPanelSuppressColumnFilter); };
2336 GridOptionsWrapper.prototype.isToolPanelSuppressColumnSelectAll = function () { return isTrue(this.gridOptions.toolPanelSuppressColumnSelectAll); };
2337 GridOptionsWrapper.prototype.isToolPanelSuppressColumnExpandAll = function () { return isTrue(this.gridOptions.toolPanelSuppressColumnExpandAll); };
2338 GridOptionsWrapper.prototype.isSuppressTouch = function () { return isTrue(this.gridOptions.suppressTouch); };
2339 GridOptionsWrapper.prototype.isSuppressRowTransform = function () { return isTrue(this.gridOptions.suppressRowTransform); };
2340 GridOptionsWrapper.prototype.useAsyncEvents = function () { return !isTrue(this.gridOptions.suppressAsyncEvents); };
2341 GridOptionsWrapper.prototype.isEnableCellChangeFlash = function () { return isTrue(this.gridOptions.enableCellChangeFlash); };
2342 GridOptionsWrapper.prototype.isGroupSelectsChildren = function () {
2343 var result = isTrue(this.gridOptions.groupSelectsChildren);
2344 if (result && this.isTreeData()) {
2345 console.warn('ag-Grid: groupSelectsChildren does not work with tree data');
2346 return false;
2347 }
2348 else {
2349 return result;
2350 }
2351 };
2352 GridOptionsWrapper.prototype.isSuppressRowHoverHighlight = function () { return isTrue(this.gridOptions.suppressRowHoverHighlight); };
2353 GridOptionsWrapper.prototype.isGroupSelectsFiltered = function () { return isTrue(this.gridOptions.groupSelectsFiltered); };
2354 GridOptionsWrapper.prototype.isGroupHideOpenParents = function () { return isTrue(this.gridOptions.groupHideOpenParents); };
2355 // if we are doing hideOpenParents, then we always have groupMultiAutoColumn, otherwise hideOpenParents would not work
2356 GridOptionsWrapper.prototype.isGroupMultiAutoColumn = function () { return isTrue(this.gridOptions.groupMultiAutoColumn) || isTrue(this.gridOptions.groupHideOpenParents); };
2357 GridOptionsWrapper.prototype.isGroupRemoveSingleChildren = function () { return isTrue(this.gridOptions.groupRemoveSingleChildren); };
2358 GridOptionsWrapper.prototype.isGroupRemoveLowestSingleChildren = function () { return isTrue(this.gridOptions.groupRemoveLowestSingleChildren); };
2359 GridOptionsWrapper.prototype.isGroupIncludeFooter = function () { return isTrue(this.gridOptions.groupIncludeFooter); };
2360 GridOptionsWrapper.prototype.isGroupIncludeTotalFooter = function () { return isTrue(this.gridOptions.groupIncludeTotalFooter); };
2361 GridOptionsWrapper.prototype.isGroupSuppressBlankHeader = function () { return isTrue(this.gridOptions.groupSuppressBlankHeader); };
2362 GridOptionsWrapper.prototype.isSuppressRowClickSelection = function () { return isTrue(this.gridOptions.suppressRowClickSelection); };
2363 GridOptionsWrapper.prototype.isSuppressCellSelection = function () { return isTrue(this.gridOptions.suppressCellSelection); };
2364 GridOptionsWrapper.prototype.isSuppressMultiSort = function () { return isTrue(this.gridOptions.suppressMultiSort); };
2365 GridOptionsWrapper.prototype.isMultiSortKeyCtrl = function () { return this.gridOptions.multiSortKey === 'ctrl'; };
2366 GridOptionsWrapper.prototype.isGroupSuppressAutoColumn = function () { return isTrue(this.gridOptions.groupSuppressAutoColumn); };
2367 GridOptionsWrapper.prototype.isSuppressDragLeaveHidesColumns = function () { return isTrue(this.gridOptions.suppressDragLeaveHidesColumns); };
2368 GridOptionsWrapper.prototype.isSuppressScrollOnNewData = function () { return isTrue(this.gridOptions.suppressScrollOnNewData); };
2369 GridOptionsWrapper.prototype.isRowDragManaged = function () { return isTrue(this.gridOptions.rowDragManaged); };
2370 GridOptionsWrapper.prototype.isSuppressRowDrag = function () { return isTrue(this.gridOptions.suppressRowDrag); };
2371 GridOptionsWrapper.prototype.isGridAutoHeight = function () { return isTrue(this.gridOptions.gridAutoHeight); };
2372 GridOptionsWrapper.prototype.isSuppressHorizontalScroll = function () { return isTrue(this.gridOptions.suppressHorizontalScroll); };
2373 GridOptionsWrapper.prototype.isSuppressLoadingOverlay = function () { return isTrue(this.gridOptions.suppressLoadingOverlay); };
2374 GridOptionsWrapper.prototype.isSuppressNoRowsOverlay = function () { return isTrue(this.gridOptions.suppressNoRowsOverlay); };
2375 GridOptionsWrapper.prototype.isSuppressFieldDotNotation = function () { return isTrue(this.gridOptions.suppressFieldDotNotation); };
2376 GridOptionsWrapper.prototype.getPinnedTopRowData = function () { return this.gridOptions.pinnedTopRowData; };
2377 GridOptionsWrapper.prototype.getPinnedBottomRowData = function () { return this.gridOptions.pinnedBottomRowData; };
2378 GridOptionsWrapper.prototype.isFunctionsPassive = function () { return isTrue(this.gridOptions.functionsPassive); };
2379 GridOptionsWrapper.prototype.isSuppressTabbing = function () { return isTrue(this.gridOptions.suppressTabbing); };
2380 GridOptionsWrapper.prototype.isSuppressChangeDetection = function () { return isTrue(this.gridOptions.suppressChangeDetection); };
2381 GridOptionsWrapper.prototype.isSuppressAnimationFrame = function () { return isTrue(this.gridOptions.suppressAnimationFrame); };
2382 GridOptionsWrapper.prototype.getQuickFilterText = function () { return this.gridOptions.quickFilterText; };
2383 GridOptionsWrapper.prototype.isCacheQuickFilter = function () { return isTrue(this.gridOptions.cacheQuickFilter); };
2384 GridOptionsWrapper.prototype.isUnSortIcon = function () { return isTrue(this.gridOptions.unSortIcon); };
2385 GridOptionsWrapper.prototype.isSuppressMenuHide = function () { return isTrue(this.gridOptions.suppressMenuHide); };
2386 GridOptionsWrapper.prototype.isEnterMovesDownAfterEdit = function () { return isTrue(this.gridOptions.enterMovesDownAfterEdit); };
2387 GridOptionsWrapper.prototype.isEnterMovesDown = function () { return isTrue(this.gridOptions.enterMovesDown); };
2388 GridOptionsWrapper.prototype.getRowStyle = function () { return this.gridOptions.rowStyle; };
2389 GridOptionsWrapper.prototype.getRowClass = function () { return this.gridOptions.rowClass; };
2390 GridOptionsWrapper.prototype.getRowStyleFunc = function () { return this.gridOptions.getRowStyle; };
2391 GridOptionsWrapper.prototype.getRowClassFunc = function () { return this.gridOptions.getRowClass; };
2392 GridOptionsWrapper.prototype.rowClassRules = function () { return this.gridOptions.rowClassRules; };
2393 GridOptionsWrapper.prototype.getPopupParent = function () { return this.gridOptions.popupParent; };
2394 GridOptionsWrapper.prototype.getPostProcessPopupFunc = function () { return this.gridOptions.postProcessPopup; };
2395 GridOptionsWrapper.prototype.getDoesDataFlowerFunc = function () { return this.gridOptions.doesDataFlower; };
2396 GridOptionsWrapper.prototype.getPaginationNumberFormatterFunc = function () { return this.gridOptions.paginationNumberFormatter; };
2397 GridOptionsWrapper.prototype.getChildCountFunc = function () { return this.gridOptions.getChildCount; };
2398 GridOptionsWrapper.prototype.getDefaultGroupSortComparator = function () { return this.gridOptions.defaultGroupSortComparator; };
2399 GridOptionsWrapper.prototype.getIsFullWidthCellFunc = function () { return this.gridOptions.isFullWidthCell; };
2400 GridOptionsWrapper.prototype.getFullWidthCellRendererParams = function () { return this.gridOptions.fullWidthCellRendererParams; };
2401 GridOptionsWrapper.prototype.isEmbedFullWidthRows = function () { return isTrue(this.gridOptions.embedFullWidthRows); };
2402 GridOptionsWrapper.prototype.getBusinessKeyForNodeFunc = function () { return this.gridOptions.getBusinessKeyForNode; };
2403 GridOptionsWrapper.prototype.getApi = function () { return this.gridOptions.api; };
2404 GridOptionsWrapper.prototype.getColumnApi = function () { return this.gridOptions.columnApi; };
2405 GridOptionsWrapper.prototype.isDeltaRowDataMode = function () { return isTrue(this.gridOptions.deltaRowDataMode); };
2406 GridOptionsWrapper.prototype.isEnsureDomOrder = function () { return isTrue(this.gridOptions.ensureDomOrder); };
2407 GridOptionsWrapper.prototype.isEnableColResize = function () { return isTrue(this.gridOptions.enableColResize); };
2408 GridOptionsWrapper.prototype.getColResizeDefault = function () { return this.gridOptions.colResizeDefault; };
2409 GridOptionsWrapper.prototype.isSingleClickEdit = function () { return isTrue(this.gridOptions.singleClickEdit); };
2410 GridOptionsWrapper.prototype.isSuppressClickEdit = function () { return isTrue(this.gridOptions.suppressClickEdit); };
2411 GridOptionsWrapper.prototype.isStopEditingWhenGridLosesFocus = function () { return isTrue(this.gridOptions.stopEditingWhenGridLosesFocus); };
2412 GridOptionsWrapper.prototype.getGroupDefaultExpanded = function () { return this.gridOptions.groupDefaultExpanded; };
2413 GridOptionsWrapper.prototype.getMaxConcurrentDatasourceRequests = function () { return this.gridOptions.maxConcurrentDatasourceRequests; };
2414 GridOptionsWrapper.prototype.getMaxBlocksInCache = function () { return this.gridOptions.maxBlocksInCache; };
2415 GridOptionsWrapper.prototype.getCacheOverflowSize = function () { return this.gridOptions.cacheOverflowSize; };
2416 GridOptionsWrapper.prototype.getPaginationPageSize = function () { return this.gridOptions.paginationPageSize; };
2417 GridOptionsWrapper.prototype.getCacheBlockSize = function () { return this.gridOptions.cacheBlockSize; };
2418 GridOptionsWrapper.prototype.getInfiniteInitialRowCount = function () { return this.gridOptions.infiniteInitialRowCount; };
2419 GridOptionsWrapper.prototype.isPurgeClosedRowNodes = function () { return isTrue(this.gridOptions.purgeClosedRowNodes); };
2420 GridOptionsWrapper.prototype.isSuppressPaginationPanel = function () { return isTrue(this.gridOptions.suppressPaginationPanel); };
2421 GridOptionsWrapper.prototype.getRowData = function () { return this.gridOptions.rowData; };
2422 GridOptionsWrapper.prototype.isGroupUseEntireRow = function () { return isTrue(this.gridOptions.groupUseEntireRow); };
2423 GridOptionsWrapper.prototype.isEnableRtl = function () { return isTrue(this.gridOptions.enableRtl); };
2424 GridOptionsWrapper.prototype.getAutoGroupColumnDef = function () { return this.gridOptions.autoGroupColumnDef; };
2425 GridOptionsWrapper.prototype.isGroupSuppressRow = function () { return isTrue(this.gridOptions.groupSuppressRow); };
2426 GridOptionsWrapper.prototype.getRowGroupPanelShow = function () { return this.gridOptions.rowGroupPanelShow; };
2427 GridOptionsWrapper.prototype.getPivotPanelShow = function () { return this.gridOptions.pivotPanelShow; };
2428 GridOptionsWrapper.prototype.isAngularCompileRows = function () { return isTrue(this.gridOptions.angularCompileRows); };
2429 GridOptionsWrapper.prototype.isAngularCompileFilters = function () { return isTrue(this.gridOptions.angularCompileFilters); };
2430 GridOptionsWrapper.prototype.isAngularCompileHeaders = function () { return isTrue(this.gridOptions.angularCompileHeaders); };
2431 GridOptionsWrapper.prototype.isDebug = function () { return isTrue(this.gridOptions.debug); };
2432 GridOptionsWrapper.prototype.getColumnDefs = function () { return this.gridOptions.columnDefs; };
2433 GridOptionsWrapper.prototype.getColumnTypes = function () { return this.gridOptions.columnTypes; };
2434 GridOptionsWrapper.prototype.getDatasource = function () { return this.gridOptions.datasource; };
2435 GridOptionsWrapper.prototype.getViewportDatasource = function () { return this.gridOptions.viewportDatasource; };
2436 GridOptionsWrapper.prototype.getServerSideDatasource = function () { return this.gridOptions.serverSideDatasource; };
2437 GridOptionsWrapper.prototype.isEnableSorting = function () { return isTrue(this.gridOptions.enableSorting) || isTrue(this.gridOptions.enableServerSideSorting); };
2438 GridOptionsWrapper.prototype.isAccentedSort = function () { return isTrue(this.gridOptions.accentedSort); };
2439 GridOptionsWrapper.prototype.isEnableCellExpressions = function () { return isTrue(this.gridOptions.enableCellExpressions); };
2440 GridOptionsWrapper.prototype.isEnableGroupEdit = function () { return isTrue(this.gridOptions.enableGroupEdit); };
2441 GridOptionsWrapper.prototype.isSuppressMiddleClickScrolls = function () { return isTrue(this.gridOptions.suppressMiddleClickScrolls); };
2442 GridOptionsWrapper.prototype.isSuppressPreventDefaultOnMouseWheel = function () { return isTrue(this.gridOptions.suppressPreventDefaultOnMouseWheel); };
2443 GridOptionsWrapper.prototype.isSuppressColumnVirtualisation = function () { return isTrue(this.gridOptions.suppressColumnVirtualisation); };
2444 GridOptionsWrapper.prototype.isSuppressContextMenu = function () { return isTrue(this.gridOptions.suppressContextMenu); };
2445 GridOptionsWrapper.prototype.isAllowContextMenuWithControlKey = function () { return isTrue(this.gridOptions.allowContextMenuWithControlKey); };
2446 GridOptionsWrapper.prototype.isSuppressCopyRowsToClipboard = function () { return isTrue(this.gridOptions.suppressCopyRowsToClipboard); };
2447 GridOptionsWrapper.prototype.isSuppressClipboardPaste = function () { return isTrue(this.gridOptions.suppressClipboardPaste); };
2448 GridOptionsWrapper.prototype.isEnableFilter = function () { return isTrue(this.gridOptions.enableFilter) || isTrue(this.gridOptions.enableServerSideFilter); };
2449 GridOptionsWrapper.prototype.isPagination = function () { return isTrue(this.gridOptions.pagination); };
2450 GridOptionsWrapper.prototype.isSuppressEnterpriseResetOnNewColumns = function () { return isTrue(this.gridOptions.suppressEnterpriseResetOnNewColumns); };
2451 GridOptionsWrapper.prototype.getProcessDataFromClipboardFunc = function () { return this.gridOptions.processDataFromClipboard; };
2452 GridOptionsWrapper.prototype.getBatchUpdateWaitMillis = function () {
2453 return utils_1.Utils.exists(this.gridOptions.batchUpdateWaitMillis) ? this.gridOptions.batchUpdateWaitMillis : constants_1.Constants.BATCH_WAIT_MILLIS;
2454 };
2455 // these are deprecated, should remove them when we take out server side pagination
2456 GridOptionsWrapper.prototype.isEnableServerSideFilter = function () { return this.gridOptions.enableServerSideFilter; };
2457 GridOptionsWrapper.prototype.isEnableServerSideSorting = function () { return isTrue(this.gridOptions.enableServerSideSorting); };
2458 GridOptionsWrapper.prototype.isSuppressMovableColumns = function () { return isTrue(this.gridOptions.suppressMovableColumns); };
2459 GridOptionsWrapper.prototype.isAnimateRows = function () {
2460 // never allow animating if enforcing the row order
2461 if (this.isEnsureDomOrder()) {
2462 return false;
2463 }
2464 return isTrue(this.gridOptions.animateRows);
2465 };
2466 GridOptionsWrapper.prototype.isSuppressColumnMoveAnimation = function () { return isTrue(this.gridOptions.suppressColumnMoveAnimation); };
2467 GridOptionsWrapper.prototype.isSuppressAggFuncInHeader = function () { return isTrue(this.gridOptions.suppressAggFuncInHeader); };
2468 GridOptionsWrapper.prototype.isSuppressAggAtRootLevel = function () { return isTrue(this.gridOptions.suppressAggAtRootLevel); };
2469 GridOptionsWrapper.prototype.isEnableRangeSelection = function () { return isTrue(this.gridOptions.enableRangeSelection); };
2470 GridOptionsWrapper.prototype.isSuppressMultiRangeSelection = function () { return isTrue(this.gridOptions.suppressMultiRangeSelection); };
2471 GridOptionsWrapper.prototype.isPaginationAutoPageSize = function () { return isTrue(this.gridOptions.paginationAutoPageSize); };
2472 GridOptionsWrapper.prototype.isRememberGroupStateWhenNewData = function () { return isTrue(this.gridOptions.rememberGroupStateWhenNewData); };
2473 GridOptionsWrapper.prototype.getIcons = function () { return this.gridOptions.icons; };
2474 GridOptionsWrapper.prototype.getAggFuncs = function () { return this.gridOptions.aggFuncs; };
2475 GridOptionsWrapper.prototype.getSortingOrder = function () { return this.gridOptions.sortingOrder; };
2476 GridOptionsWrapper.prototype.getAlignedGrids = function () { return this.gridOptions.alignedGrids; };
2477 GridOptionsWrapper.prototype.isMasterDetail = function () {
2478 var _this = this;
2479 var usingMasterDetail = isTrue(this.gridOptions.masterDetail);
2480 utils_1.Utils.doOnce(function () {
2481 if (usingMasterDetail && !_this.enterprise) {
2482 console.warn('ag-grid: Master Detail is an Enterprise feature of ag-Grid.');
2483 }
2484 }, 'MasterDetailEnterpriseCheck');
2485 return usingMasterDetail && this.enterprise;
2486 };
2487 GridOptionsWrapper.prototype.getIsRowMasterFunc = function () { return this.gridOptions.isRowMaster; };
2488 GridOptionsWrapper.prototype.getIsRowSelectableFunc = function () { return this.gridOptions.isRowSelectable; };
2489 GridOptionsWrapper.prototype.getGroupRowRendererParams = function () { return this.gridOptions.groupRowRendererParams; };
2490 GridOptionsWrapper.prototype.getOverlayLoadingTemplate = function () { return this.gridOptions.overlayLoadingTemplate; };
2491 GridOptionsWrapper.prototype.getOverlayNoRowsTemplate = function () { return this.gridOptions.overlayNoRowsTemplate; };
2492 GridOptionsWrapper.prototype.isSuppressAutoSize = function () { return isTrue(this.gridOptions.suppressAutoSize); };
2493 GridOptionsWrapper.prototype.isSuppressParentsInRowNodes = function () { return isTrue(this.gridOptions.suppressParentsInRowNodes); };
2494 GridOptionsWrapper.prototype.isEnableStatusBar = function () { return isTrue(this.gridOptions.enableStatusBar); };
2495 GridOptionsWrapper.prototype.isAlwaysShowStatusBar = function () { return isTrue(this.gridOptions.alwaysShowStatusBar); };
2496 GridOptionsWrapper.prototype.isFunctionsReadOnly = function () { return isTrue(this.gridOptions.functionsReadOnly); };
2497 GridOptionsWrapper.prototype.isFloatingFilter = function () { return this.gridOptions.floatingFilter; };
2498 GridOptionsWrapper.prototype.isEnableOldSetFilterModel = function () { return isTrue(this.gridOptions.enableOldSetFilterModel); };
2499 // public isFloatingFilter(): boolean { return true; }
2500 GridOptionsWrapper.prototype.getDefaultColDef = function () { return this.gridOptions.defaultColDef; };
2501 GridOptionsWrapper.prototype.getDefaultColGroupDef = function () { return this.gridOptions.defaultColGroupDef; };
2502 GridOptionsWrapper.prototype.getDefaultExportParams = function () { return this.gridOptions.defaultExportParams; };
2503 GridOptionsWrapper.prototype.isSuppressCsvExport = function () { return isTrue(this.gridOptions.suppressCsvExport); };
2504 GridOptionsWrapper.prototype.isSuppressExcelExport = function () { return isTrue(this.gridOptions.suppressExcelExport); };
2505 GridOptionsWrapper.prototype.isSuppressMakeColumnVisibleAfterUnGroup = function () { return isTrue(this.gridOptions.suppressMakeColumnVisibleAfterUnGroup); };
2506 GridOptionsWrapper.prototype.getNodeChildDetailsFunc = function () { return this.gridOptions.getNodeChildDetails; };
2507 GridOptionsWrapper.prototype.getDataPathFunc = function () { return this.gridOptions.getDataPath; };
2508 // public getIsGroupFunc(): ((dataItem: any) => boolean) { return this.gridOptions.isGroup }
2509 GridOptionsWrapper.prototype.getGroupRowAggNodesFunc = function () { return this.gridOptions.groupRowAggNodes; };
2510 GridOptionsWrapper.prototype.getContextMenuItemsFunc = function () { return this.gridOptions.getContextMenuItems; };
2511 GridOptionsWrapper.prototype.getMainMenuItemsFunc = function () { return this.gridOptions.getMainMenuItems; };
2512 GridOptionsWrapper.prototype.getRowNodeIdFunc = function () { return this.gridOptions.getRowNodeId; };
2513 GridOptionsWrapper.prototype.getNavigateToNextCellFunc = function () { return this.gridOptions.navigateToNextCell; };
2514 GridOptionsWrapper.prototype.getTabToNextCellFunc = function () { return this.gridOptions.tabToNextCell; };
2515 GridOptionsWrapper.prototype.isTreeData = function () { return isTrue(this.gridOptions.treeData); };
2516 GridOptionsWrapper.prototype.isValueCache = function () { return isTrue(this.gridOptions.valueCache); };
2517 GridOptionsWrapper.prototype.isValueCacheNeverExpires = function () { return isTrue(this.gridOptions.valueCacheNeverExpires); };
2518 GridOptionsWrapper.prototype.isAggregateOnlyChangedColumns = function () { return isTrue(this.gridOptions.aggregateOnlyChangedColumns); };
2519 GridOptionsWrapper.prototype.getProcessSecondaryColDefFunc = function () { return this.gridOptions.processSecondaryColDef; };
2520 GridOptionsWrapper.prototype.getProcessSecondaryColGroupDefFunc = function () { return this.gridOptions.processSecondaryColGroupDef; };
2521 GridOptionsWrapper.prototype.getSendToClipboardFunc = function () { return this.gridOptions.sendToClipboard; };
2522 GridOptionsWrapper.prototype.getProcessRowPostCreateFunc = function () { return this.gridOptions.processRowPostCreate; };
2523 GridOptionsWrapper.prototype.getProcessCellForClipboardFunc = function () { return this.gridOptions.processCellForClipboard; };
2524 GridOptionsWrapper.prototype.getProcessHeaderForClipboardFunc = function () { return this.gridOptions.processHeaderForClipboard; };
2525 GridOptionsWrapper.prototype.getProcessCellFromClipboardFunc = function () { return this.gridOptions.processCellFromClipboard; };
2526 GridOptionsWrapper.prototype.getViewportRowModelPageSize = function () { return oneOrGreater(this.gridOptions.viewportRowModelPageSize, DEFAULT_VIEWPORT_ROW_MODEL_PAGE_SIZE); };
2527 GridOptionsWrapper.prototype.getViewportRowModelBufferSize = function () { return zeroOrGreater(this.gridOptions.viewportRowModelBufferSize, DEFAULT_VIEWPORT_ROW_MODEL_BUFFER_SIZE); };
2528 // public getCellRenderers(): {[key: string]: {new(): ICellRenderer} | ICellRendererFunc} { return this.gridOptions.cellRenderers; }
2529 // public getCellEditors(): {[key: string]: {new(): ICellEditor}} { return this.gridOptions.cellEditors; }
2530 GridOptionsWrapper.prototype.isServerSideSortingAlwaysResets = function () { return isTrue(this.gridOptions.serverSideSortingAlwaysResets); };
2531 GridOptionsWrapper.prototype.getPostSortFunc = function () { return this.gridOptions.postSort; };
2532 GridOptionsWrapper.prototype.getClipboardDeliminator = function () {
2533 return utils_1.Utils.exists(this.gridOptions.clipboardDeliminator) ? this.gridOptions.clipboardDeliminator : '\t';
2534 };
2535 GridOptionsWrapper.prototype.setProperty = function (key, value) {
2536 var gridOptionsNoType = this.gridOptions;
2537 var previousValue = gridOptionsNoType[key];
2538 if (previousValue !== value) {
2539 gridOptionsNoType[key] = value;
2540 var event_1 = {
2541 type: key,
2542 currentValue: value,
2543 previousValue: previousValue
2544 };
2545 this.propertyEventService.dispatchEvent(event_1);
2546 }
2547 };
2548 // this logic is repeated in lots of places. any element that had different CSS
2549 // dependent on the layout needs to have the layout class added ot it.
2550 GridOptionsWrapper.prototype.addLayoutElement = function (element) {
2551 this.layoutElements.push(element);
2552 this.updateLayoutClasses();
2553 };
2554 GridOptionsWrapper.prototype.updateLayoutClasses = function () {
2555 var autoHeight = this.isGridAutoHeight();
2556 this.layoutElements.forEach(function (e) {
2557 utils_1.Utils.addOrRemoveCssClass(e, 'ag-layout-auto-height', autoHeight);
2558 utils_1.Utils.addOrRemoveCssClass(e, 'ag-layout-normal', !autoHeight);
2559 });
2560 };
2561 GridOptionsWrapper.prototype.addEventListener = function (key, listener) {
2562 GridOptionsWrapper_1.checkEventDeprecation(key);
2563 this.propertyEventService.addEventListener(key, listener);
2564 };
2565 GridOptionsWrapper.checkEventDeprecation = function (eventName) {
2566 if (eventName === 'floatingRowDataChanged') {
2567 console.warn('ag-Grid: floatingRowDataChanged is now called pinnedRowDataChanged');
2568 }
2569 };
2570 GridOptionsWrapper.prototype.removeEventListener = function (key, listener) {
2571 this.propertyEventService.removeEventListener(key, listener);
2572 };
2573 GridOptionsWrapper.prototype.getAutoSizePadding = function () {
2574 return this.gridOptions.autoSizePadding > 0 ? this.gridOptions.autoSizePadding : 20;
2575 };
2576 // properties
2577 GridOptionsWrapper.prototype.getHeaderHeight = function () {
2578 if (typeof this.gridOptions.headerHeight === 'number') {
2579 return this.gridOptions.headerHeight;
2580 }
2581 else {
2582 return this.specialForNewMaterial(25, 'headerHeight');
2583 }
2584 };
2585 GridOptionsWrapper.prototype.getFloatingFiltersHeight = function () {
2586 if (typeof this.gridOptions.floatingFiltersHeight === 'number') {
2587 return this.gridOptions.floatingFiltersHeight;
2588 }
2589 else {
2590 return this.specialForNewMaterial(25, 'headerHeight');
2591 }
2592 };
2593 GridOptionsWrapper.prototype.getGroupHeaderHeight = function () {
2594 if (typeof this.gridOptions.groupHeaderHeight === 'number') {
2595 return this.gridOptions.groupHeaderHeight;
2596 }
2597 else {
2598 return this.getHeaderHeight();
2599 }
2600 };
2601 GridOptionsWrapper.prototype.getPivotHeaderHeight = function () {
2602 if (typeof this.gridOptions.pivotHeaderHeight === 'number') {
2603 return this.gridOptions.pivotHeaderHeight;
2604 }
2605 else {
2606 return this.getHeaderHeight();
2607 }
2608 };
2609 GridOptionsWrapper.prototype.getPivotGroupHeaderHeight = function () {
2610 if (typeof this.gridOptions.pivotGroupHeaderHeight === 'number') {
2611 return this.gridOptions.pivotGroupHeaderHeight;
2612 }
2613 else {
2614 return this.getGroupHeaderHeight();
2615 }
2616 };
2617 GridOptionsWrapper.prototype.isExternalFilterPresent = function () {
2618 if (typeof this.gridOptions.isExternalFilterPresent === 'function') {
2619 return this.gridOptions.isExternalFilterPresent();
2620 }
2621 else {
2622 return false;
2623 }
2624 };
2625 GridOptionsWrapper.prototype.doesExternalFilterPass = function (node) {
2626 if (typeof this.gridOptions.doesExternalFilterPass === 'function') {
2627 return this.gridOptions.doesExternalFilterPass(node);
2628 }
2629 else {
2630 return false;
2631 }
2632 };
2633 GridOptionsWrapper.prototype.getDocument = function () {
2634 // if user is providing document, we use the users one,
2635 // otherwise we use the document on the global namespace.
2636 var result;
2637 if (utils_1.Utils.exists(this.gridOptions.getDocument)) {
2638 result = this.gridOptions.getDocument();
2639 }
2640 if (utils_1.Utils.exists(result)) {
2641 return result;
2642 }
2643 else {
2644 return document;
2645 }
2646 };
2647 GridOptionsWrapper.prototype.getMinColWidth = function () {
2648 if (this.gridOptions.minColWidth > GridOptionsWrapper_1.MIN_COL_WIDTH) {
2649 return this.gridOptions.minColWidth;
2650 }
2651 else {
2652 return GridOptionsWrapper_1.MIN_COL_WIDTH;
2653 }
2654 };
2655 GridOptionsWrapper.prototype.getMaxColWidth = function () {
2656 if (this.gridOptions.maxColWidth > GridOptionsWrapper_1.MIN_COL_WIDTH) {
2657 return this.gridOptions.maxColWidth;
2658 }
2659 else {
2660 return null;
2661 }
2662 };
2663 GridOptionsWrapper.prototype.getColWidth = function () {
2664 if (typeof this.gridOptions.colWidth !== 'number' || this.gridOptions.colWidth < GridOptionsWrapper_1.MIN_COL_WIDTH) {
2665 return 200;
2666 }
2667 else {
2668 return this.gridOptions.colWidth;
2669 }
2670 };
2671 GridOptionsWrapper.prototype.getRowBuffer = function () {
2672 if (typeof this.gridOptions.rowBuffer === 'number') {
2673 if (this.gridOptions.rowBuffer < 0) {
2674 console.warn('ag-Grid: rowBuffer should not be negative');
2675 }
2676 return this.gridOptions.rowBuffer;
2677 }
2678 else {
2679 return constants_1.Constants.ROW_BUFFER_SIZE;
2680 }
2681 };
2682 // the user might be using some non-standard scrollbar, eg a scrollbar that has zero
2683 // width and overlays (like the Safari scrollbar, but presented in Chrome). so we
2684 // allow the user to provide the scroll width before we work it out.
2685 GridOptionsWrapper.prototype.getScrollbarWidth = function () {
2686 var scrollbarWidth = this.gridOptions.scrollbarWidth;
2687 if (typeof scrollbarWidth !== 'number' || scrollbarWidth < 0) {
2688 scrollbarWidth = utils_1.Utils.getScrollbarWidth();
2689 }
2690 return scrollbarWidth;
2691 };
2692 GridOptionsWrapper.prototype.checkForDeprecated = function () {
2693 // casting to generic object, so typescript compiles even though
2694 // we are looking for attributes that don't exist
2695 var options = this.gridOptions;
2696 if (options.suppressUnSort) {
2697 console.warn('ag-grid: as of v1.12.4 suppressUnSort is not used. Please use sortingOrder instead.');
2698 }
2699 if (options.suppressDescSort) {
2700 console.warn('ag-grid: as of v1.12.4 suppressDescSort is not used. Please use sortingOrder instead.');
2701 }
2702 if (options.groupAggFields) {
2703 console.warn('ag-grid: as of v3 groupAggFields is not used. Please add appropriate agg fields to your columns.');
2704 }
2705 if (options.groupHidePivotColumns) {
2706 console.warn('ag-grid: as of v3 groupHidePivotColumns is not used as pivot columns are now called rowGroup columns. Please refer to the documentation');
2707 }
2708 if (options.groupKeys) {
2709 console.warn('ag-grid: as of v3 groupKeys is not used. You need to set rowGroupIndex on the columns to group. Please refer to the documentation');
2710 }
2711 if (typeof options.groupDefaultExpanded === 'boolean') {
2712 console.warn('ag-grid: groupDefaultExpanded can no longer be boolean. for groupDefaultExpanded=true, use groupDefaultExpanded=9999 instead, to expand all the groups');
2713 }
2714 if (options.onRowDeselected || options.rowDeselected) {
2715 console.warn('ag-grid: since version 3.4 event rowDeselected no longer exists, please check the docs');
2716 }
2717 if (options.rowsAlreadyGrouped) {
2718 console.warn('ag-grid: since version 3.4 rowsAlreadyGrouped no longer exists, please use getNodeChildDetails() instead');
2719 }
2720 if (options.groupAggFunction) {
2721 console.warn('ag-grid: since version 4.3.x groupAggFunction is now called groupRowAggNodes');
2722 }
2723 if (options.checkboxSelection) {
2724 console.warn('ag-grid: since version 8.0.x checkboxSelection is not supported as a grid option. ' +
2725 'If you want this on all columns, use defaultColDef instead and set it there');
2726 }
2727 if (options.paginationInitialRowCount) {
2728 console.warn('ag-grid: since version 9.0.x paginationInitialRowCount is now called infiniteInitialRowCount');
2729 }
2730 if (options.infinitePageSize) {
2731 console.warn('ag-grid: since version 9.0.x infinitePageSize is now called cacheBlockSize');
2732 }
2733 if (options.infiniteBlockSize) {
2734 console.warn('ag-grid: since version 10.0.x infiniteBlockSize is now called cacheBlockSize');
2735 }
2736 if (options.maxPagesInCache) {
2737 console.warn('ag-grid: since version 10.0.x maxPagesInCache is now called maxBlocksInCache');
2738 }
2739 if (options.paginationOverflowSize) {
2740 console.warn('ag-grid: since version 10.0.x paginationOverflowSize is now called cacheOverflowSize');
2741 }
2742 if (options.forPrint) {
2743 console.warn('ag-grid: since version 10.1.x, use property domLayout="forPrint" instead of forPrint=true');
2744 }
2745 if (options.suppressMenuFilterPanel) {
2746 console.warn("ag-grid: since version 11.0.x, use property colDef.menuTabs=['generalMenuTab','columnsMenuTab'] instead of suppressMenuFilterPanel=true");
2747 }
2748 if (options.suppressMenuMainPanel) {
2749 console.warn("ag-grid: since version 11.0.x, use property colDef.menuTabs=['filterMenuTab','columnsMenuTab'] instead of suppressMenuMainPanel=true");
2750 }
2751 if (options.suppressMenuColumnPanel) {
2752 console.warn("ag-grid: since version 11.0.x, use property colDef.menuTabs=['generalMenuTab','filterMenuTab'] instead of suppressMenuColumnPanel=true");
2753 }
2754 if (options.suppressUseColIdForGroups) {
2755 console.warn("ag-grid: since version 11.0.x, this is not in use anymore. You should be able to remove it from your definition");
2756 }
2757 if (options.groupColumnDef) {
2758 console.warn("ag-grid: since version 11.0.x, groupColumnDef has been renamed, this property is now called autoGroupColumnDef. Please change your configuration accordingly");
2759 }
2760 if (options.slaveGrids) {
2761 console.warn("ag-grid: since version 12.x, slaveGrids has been renamed, this property is now called alignedGrids. Please change your configuration accordingly");
2762 }
2763 if (options.floatingTopRowData) {
2764 console.warn("ag-grid: since version 12.x, floatingTopRowData is now called pinnedTopRowData");
2765 }
2766 if (options.floatingBottomRowData) {
2767 console.warn("ag-grid: since version 12.x, floatingBottomRowData is now called pinnedBottomRowData");
2768 }
2769 if (options.paginationStartPage) {
2770 console.warn("ag-grid: since version 12.x, paginationStartPage is gone, please call api.paginationGoToPage(" + options.paginationStartPage + ") instead.");
2771 }
2772 if (options.getHeaderCellTemplate) {
2773 console.warn("ag-grid: since version 15.x, getHeaderCellTemplate is gone, please check the header documentation on how to set header templates.");
2774 }
2775 if (options.headerCellTemplate) {
2776 console.warn("ag-grid: since version 15.x, headerCellTemplate is gone, please check the header documentation on how to set header templates.");
2777 }
2778 if (options.headerCellRenderer) {
2779 console.warn("ag-grid: since version 15.x, headerCellRenderer is gone, please check the header documentation on how to set header templates.");
2780 }
2781 if (options.angularCompileHeaders) {
2782 console.warn("ag-grid: since version 15.x, angularCompileHeaders is gone, please see the getting started for Angular 1 docs to see how to do headers in Angular 1.x.");
2783 }
2784 if (options.domLayout === 'forPrint') {
2785 console.warn("ag-grid: since version 18.x, forPrint is no longer supported, as same can be achieved using autoHeight (and set the grid width accordingly). please use autoHeight instead.");
2786 }
2787 if (options.domLayout === 'autoHeight') {
2788 console.warn("ag-grid: since version 18.x, domLayout is gone, instead if doing auto-height, set gridAutoHeight=true.");
2789 options.gridAutoHeight = true;
2790 }
2791 if (options.pivotTotals) {
2792 console.warn("ag-grid: since version 18.x, pivotTotals has been removed, instead if using pivotTotals, set pivotColumnGroupTotals='before'|'after'.");
2793 options.pivotColumnGroupTotals = 'before';
2794 }
2795 if (options.rowModelType === 'inMemory') {
2796 console.warn("ag-grid: since version 18.x, The In Memory Row Model has been renamed to the Client Side Row Model, set rowModelType='clientSide' instead.");
2797 options.rowModelType = 'clientSide';
2798 }
2799 if (options.rowModelType === 'enterprise') {
2800 console.warn("ag-grid: since version 18.x, The Enterprise Row Model has been renamed to the Server Side Row Model, set rowModelType='serverSide' instead.");
2801 options.rowModelType = 'serverSide';
2802 }
2803 if (options.layoutInterval) {
2804 console.warn("ag-grid: since version 18.x, layoutInterval is no longer a property. This is because the grid now uses CSS Flex for layout.");
2805 }
2806 };
2807 GridOptionsWrapper.prototype.getLocaleTextFunc = function () {
2808 if (this.gridOptions.localeTextFunc) {
2809 return this.gridOptions.localeTextFunc;
2810 }
2811 var that = this;
2812 return function (key, defaultValue) {
2813 var localeText = that.gridOptions.localeText;
2814 if (localeText && localeText[key]) {
2815 return localeText[key];
2816 }
2817 else {
2818 return defaultValue;
2819 }
2820 };
2821 };
2822 // responsible for calling the onXXX functions on gridOptions
2823 GridOptionsWrapper.prototype.globalEventHandler = function (eventName, event) {
2824 var callbackMethodName = componentUtil_1.ComponentUtil.getCallbackForEvent(eventName);
2825 if (typeof this.gridOptions[callbackMethodName] === 'function') {
2826 this.gridOptions[callbackMethodName](event);
2827 }
2828 };
2829 // we don't allow dynamic row height for virtual paging
2830 GridOptionsWrapper.prototype.getRowHeightAsNumber = function () {
2831 var rowHeight = this.gridOptions.rowHeight;
2832 if (utils_1.Utils.missing(rowHeight)) {
2833 return this.getDefaultRowHeight();
2834 }
2835 else if (this.isNumeric(this.gridOptions.rowHeight)) {
2836 return this.gridOptions.rowHeight;
2837 }
2838 else {
2839 console.warn('ag-Grid row height must be a number if not using standard row model');
2840 return this.getDefaultRowHeight();
2841 }
2842 };
2843 GridOptionsWrapper.prototype.getRowHeightForNode = function (rowNode) {
2844 // check the function first, in case use set both function and
2845 // number, when using virtual pagination then function can be
2846 // used for pinned rows and the number for the body rows.
2847 if (typeof this.gridOptions.getRowHeight === 'function') {
2848 var params = {
2849 node: rowNode,
2850 data: rowNode.data,
2851 api: this.gridOptions.api,
2852 context: this.gridOptions.context
2853 };
2854 return this.gridOptions.getRowHeight(params);
2855 }
2856 else if (rowNode.detail && this.isMasterDetail()) {
2857 if (this.isNumeric(this.gridOptions.detailRowHeight)) {
2858 return this.gridOptions.detailRowHeight;
2859 }
2860 else {
2861 return DEFAULT_DETAIL_ROW_HEIGHT;
2862 }
2863 }
2864 else {
2865 var defaultHeight = this.isNumeric(this.gridOptions.rowHeight) ?
2866 this.gridOptions.rowHeight : this.getDefaultRowHeight();
2867 if (this.columnController.isAutoRowHeightActive()) {
2868 var autoHeight = this.autoHeightCalculator.getPreferredHeightForRow(rowNode);
2869 // never return less than the default row height - covers when auto height
2870 // cells are blank.
2871 if (autoHeight > defaultHeight) {
2872 return autoHeight;
2873 }
2874 else {
2875 return defaultHeight;
2876 }
2877 }
2878 else {
2879 return defaultHeight;
2880 }
2881 }
2882 };
2883 GridOptionsWrapper.prototype.isDynamicRowHeight = function () {
2884 return typeof this.gridOptions.getRowHeight === 'function';
2885 };
2886 GridOptionsWrapper.prototype.getVirtualItemHeight = function () {
2887 return this.specialForNewMaterial(20, 'virtualItemHeight');
2888 };
2889 GridOptionsWrapper.prototype.isNumeric = function (value) {
2890 return !isNaN(value) && typeof value === 'number';
2891 };
2892 // Material data table has strict guidelines about whitespace, and these values are different than the ones
2893 // ag-grid uses by default. We override the default ones for the sake of making it better out of the box
2894 GridOptionsWrapper.prototype.specialForNewMaterial = function (defaultValue, sassVariableName) {
2895 var theme = this.environment.getTheme();
2896 if (theme.indexOf('ag-theme') === 0) {
2897 return this.environment.getSassVariable(theme, sassVariableName);
2898 }
2899 else {
2900 return defaultValue;
2901 }
2902 };
2903 GridOptionsWrapper.prototype.getDefaultRowHeight = function () {
2904 return this.specialForNewMaterial(DEFAULT_ROW_HEIGHT, 'rowHeight');
2905 };
2906 GridOptionsWrapper.MIN_COL_WIDTH = 10;
2907 GridOptionsWrapper.PROP_HEADER_HEIGHT = 'headerHeight';
2908 GridOptionsWrapper.PROP_GROUP_REMOVE_SINGLE_CHILDREN = 'groupRemoveSingleChildren';
2909 GridOptionsWrapper.PROP_GROUP_REMOVE_LOWEST_SINGLE_CHILDREN = 'groupRemoveLowestSingleChildren';
2910 GridOptionsWrapper.PROP_PIVOT_HEADER_HEIGHT = 'pivotHeaderHeight';
2911 GridOptionsWrapper.PROP_SUPPRESS_CLIPBOARD_PASTE = 'suppressClipboardPaste';
2912 GridOptionsWrapper.PROP_GROUP_HEADER_HEIGHT = 'groupHeaderHeight';
2913 GridOptionsWrapper.PROP_PIVOT_GROUP_HEADER_HEIGHT = 'pivotGroupHeaderHeight';
2914 GridOptionsWrapper.PROP_FLOATING_FILTERS_HEIGHT = 'floatingFiltersHeight';
2915 GridOptionsWrapper.PROP_SUPPRESS_ROW_DRAG = 'suppressRowDrag';
2916 GridOptionsWrapper.PROP_POPUP_PARENT = 'popupParent';
2917 GridOptionsWrapper.PROP_GRID_AUTO_HEIGHT = 'gridAutoHeight';
2918 __decorate([
2919 context_1.Autowired('gridOptions'),
2920 __metadata("design:type", Object)
2921 ], GridOptionsWrapper.prototype, "gridOptions", void 0);
2922 __decorate([
2923 context_1.Autowired('columnController'),
2924 __metadata("design:type", columnController_1.ColumnController)
2925 ], GridOptionsWrapper.prototype, "columnController", void 0);
2926 __decorate([
2927 context_1.Autowired('eventService'),
2928 __metadata("design:type", eventService_1.EventService)
2929 ], GridOptionsWrapper.prototype, "eventService", void 0);
2930 __decorate([
2931 context_1.Autowired('enterprise'),
2932 __metadata("design:type", Boolean)
2933 ], GridOptionsWrapper.prototype, "enterprise", void 0);
2934 __decorate([
2935 context_1.Autowired('frameworkFactory'),
2936 __metadata("design:type", Object)
2937 ], GridOptionsWrapper.prototype, "frameworkFactory", void 0);
2938 __decorate([
2939 context_1.Autowired('gridApi'),
2940 __metadata("design:type", gridApi_1.GridApi)
2941 ], GridOptionsWrapper.prototype, "gridApi", void 0);
2942 __decorate([
2943 context_1.Autowired('columnApi'),
2944 __metadata("design:type", columnApi_1.ColumnApi)
2945 ], GridOptionsWrapper.prototype, "columnApi", void 0);
2946 __decorate([
2947 context_1.Autowired('environment'),
2948 __metadata("design:type", environment_1.Environment)
2949 ], GridOptionsWrapper.prototype, "environment", void 0);
2950 __decorate([
2951 context_1.Autowired('autoHeightCalculator'),
2952 __metadata("design:type", autoHeightCalculator_1.AutoHeightCalculator)
2953 ], GridOptionsWrapper.prototype, "autoHeightCalculator", void 0);
2954 __decorate([
2955 __param(0, context_1.Qualifier('gridApi')), __param(1, context_1.Qualifier('columnApi')),
2956 __metadata("design:type", Function),
2957 __metadata("design:paramtypes", [gridApi_1.GridApi, columnApi_1.ColumnApi]),
2958 __metadata("design:returntype", void 0)
2959 ], GridOptionsWrapper.prototype, "agWire", null);
2960 __decorate([
2961 context_1.PreDestroy,
2962 __metadata("design:type", Function),
2963 __metadata("design:paramtypes", []),
2964 __metadata("design:returntype", void 0)
2965 ], GridOptionsWrapper.prototype, "destroy", null);
2966 __decorate([
2967 context_1.PostConstruct,
2968 __metadata("design:type", Function),
2969 __metadata("design:paramtypes", []),
2970 __metadata("design:returntype", void 0)
2971 ], GridOptionsWrapper.prototype, "init", null);
2972 GridOptionsWrapper = GridOptionsWrapper_1 = __decorate([
2973 context_1.Bean('gridOptionsWrapper')
2974 ], GridOptionsWrapper);
2975 return GridOptionsWrapper;
2976 var GridOptionsWrapper_1;
2977}());
2978exports.GridOptionsWrapper = GridOptionsWrapper;
2979
2980
2981/***/ }),
2982/* 3 */
2983/***/ (function(module, exports, __webpack_require__) {
2984
2985"use strict";
2986/**
2987 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
2988 * @version v18.1.2
2989 * @link http://www.ag-grid.com/
2990 * @license MIT
2991 */
2992
2993var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2994 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
2995 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
2996 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
2997 return c > 3 && r && Object.defineProperty(target, key, r), r;
2998};
2999var __metadata = (this && this.__metadata) || function (k, v) {
3000 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
3001};
3002var __param = (this && this.__param) || function (paramIndex, decorator) {
3003 return function (target, key) { decorator(target, key, paramIndex); }
3004};
3005Object.defineProperty(exports, "__esModule", { value: true });
3006var logger_1 = __webpack_require__(12);
3007var utils_1 = __webpack_require__(1);
3008var context_1 = __webpack_require__(0);
3009var context_2 = __webpack_require__(0);
3010var gridOptionsWrapper_1 = __webpack_require__(2);
3011var EventService = (function () {
3012 function EventService() {
3013 this.allSyncListeners = {};
3014 this.allAsyncListeners = {};
3015 this.globalSyncListeners = [];
3016 this.globalAsyncListeners = [];
3017 this.asyncFunctionsQueue = [];
3018 this.scheduled = false;
3019 }
3020 EventService_1 = EventService;
3021 // because this class is used both inside the context and outside the context, we do not
3022 // use autowired attributes, as that would be confusing, as sometimes the attributes
3023 // would be wired, and sometimes not.
3024 //
3025 // the global event servers used by ag-Grid is autowired by the context once, and this
3026 // setBeans method gets called once.
3027 //
3028 // the times when this class is used outside of the context (eg RowNode has an instance of this
3029 // class) then it is not a bean, and this setBeans method is not called.
3030 EventService.prototype.setBeans = function (loggerFactory, gridOptionsWrapper, globalEventListener) {
3031 if (globalEventListener === void 0) { globalEventListener = null; }
3032 this.logger = loggerFactory.create('EventService');
3033 if (globalEventListener) {
3034 var async = gridOptionsWrapper.useAsyncEvents();
3035 this.addGlobalListener(globalEventListener, async);
3036 }
3037 };
3038 EventService.prototype.getListenerList = function (eventType, async) {
3039 var listenerMap = async ? this.allAsyncListeners : this.allSyncListeners;
3040 var listenerList = listenerMap[eventType];
3041 if (!listenerList) {
3042 listenerList = [];
3043 listenerMap[eventType] = listenerList;
3044 }
3045 return listenerList;
3046 };
3047 EventService.prototype.addEventListener = function (eventType, listener, async) {
3048 if (async === void 0) { async = false; }
3049 var listenerList = this.getListenerList(eventType, async);
3050 if (listenerList.indexOf(listener) < 0) {
3051 listenerList.push(listener);
3052 }
3053 };
3054 // for some events, it's important that the model gets to hear about them before the view,
3055 // as the model may need to update before the view works on the info. if you register
3056 // via this method, you get notified before the view parts
3057 EventService.prototype.addModalPriorityEventListener = function (eventType, listener, async) {
3058 if (async === void 0) { async = false; }
3059 this.addEventListener(eventType + EventService_1.PRIORITY, listener, async);
3060 };
3061 EventService.prototype.addGlobalListener = function (listener, async) {
3062 if (async === void 0) { async = false; }
3063 if (async) {
3064 this.globalAsyncListeners.push(listener);
3065 }
3066 else {
3067 this.globalSyncListeners.push(listener);
3068 }
3069 };
3070 EventService.prototype.removeEventListener = function (eventType, listener, async) {
3071 if (async === void 0) { async = false; }
3072 var listenerList = this.getListenerList(eventType, async);
3073 utils_1.Utils.removeFromArray(listenerList, listener);
3074 };
3075 EventService.prototype.removeGlobalListener = function (listener, async) {
3076 if (async === void 0) { async = false; }
3077 if (async) {
3078 utils_1.Utils.removeFromArray(this.globalAsyncListeners, listener);
3079 }
3080 else {
3081 utils_1.Utils.removeFromArray(this.globalSyncListeners, listener);
3082 }
3083 };
3084 // why do we pass the type here? the type is in ColumnChangeEvent, so unless the
3085 // type is not in other types of events???
3086 EventService.prototype.dispatchEvent = function (event) {
3087 // console.log(`dispatching ${eventType}: ${event}`);
3088 this.dispatchToListeners(event, true);
3089 this.dispatchToListeners(event, false);
3090 };
3091 EventService.prototype.dispatchToListeners = function (event, async) {
3092 var _this = this;
3093 var globalListeners = async ? this.globalAsyncListeners : this.globalSyncListeners;
3094 var eventType = event.type;
3095 // this allows the columnController to get events before anyone else
3096 var p1ListenerList = this.getListenerList(eventType + EventService_1.PRIORITY, async);
3097 utils_1.Utils.forEachSnapshotFirst(p1ListenerList, function (listener) {
3098 if (async) {
3099 _this.dispatchAsync(function () { return listener(event); });
3100 }
3101 else {
3102 listener(event);
3103 }
3104 });
3105 var listenerList = this.getListenerList(eventType, async);
3106 utils_1.Utils.forEachSnapshotFirst(listenerList, function (listener) {
3107 if (async) {
3108 _this.dispatchAsync(function () { return listener(event); });
3109 }
3110 else {
3111 listener(event);
3112 }
3113 });
3114 utils_1.Utils.forEachSnapshotFirst(globalListeners, function (listener) {
3115 if (async) {
3116 _this.dispatchAsync(function () { return listener(eventType, event); });
3117 }
3118 else {
3119 listener(eventType, event);
3120 }
3121 });
3122 };
3123 // this gets called inside the grid's thread, for each event that it
3124 // wants to set async. the grid then batches the events into one setTimeout()
3125 // because setTimeout() is an expensive operation. ideally we would have
3126 // each event in it's own setTimeout(), but we batch for performance.
3127 EventService.prototype.dispatchAsync = function (func) {
3128 // add to the queue for executing later in the next VM turn
3129 this.asyncFunctionsQueue.push(func);
3130 // check if timeout is already scheduled. the first time the grid calls
3131 // this within it's thread turn, this should be false, so it will schedule
3132 // the 'flush queue' method the first time it comes here. then the flag is
3133 // set to 'true' so it will know it's already scheduled for subsequent calls.
3134 if (!this.scheduled) {
3135 // if not scheduled, schedule one
3136 setTimeout(this.flushAsyncQueue.bind(this), 0);
3137 // mark that it is scheduled
3138 this.scheduled = true;
3139 }
3140 };
3141 // this happens in the next VM turn only, and empties the queue of events
3142 EventService.prototype.flushAsyncQueue = function () {
3143 this.scheduled = false;
3144 // we take a copy, because the event listener could be using
3145 // the grid, which would cause more events, which would be potentially
3146 // added to the queue, so safe to take a copy, the new events will
3147 // get executed in a later VM turn rather than risk updating the
3148 // queue as we are flushing it.
3149 var queueCopy = this.asyncFunctionsQueue.slice();
3150 this.asyncFunctionsQueue = [];
3151 // execute the queue
3152 queueCopy.forEach(function (func) { return func(); });
3153 };
3154 // this is an old idea niall had, should really take it out, was to do with ordering who gets to process
3155 // events first, to give model and service objects preference over the view
3156 EventService.PRIORITY = '-P1';
3157 __decorate([
3158 __param(0, context_2.Qualifier('loggerFactory')),
3159 __param(1, context_2.Qualifier('gridOptionsWrapper')),
3160 __param(2, context_2.Qualifier('globalEventListener')),
3161 __metadata("design:type", Function),
3162 __metadata("design:paramtypes", [logger_1.LoggerFactory,
3163 gridOptionsWrapper_1.GridOptionsWrapper,
3164 Function]),
3165 __metadata("design:returntype", void 0)
3166 ], EventService.prototype, "setBeans", null);
3167 EventService = EventService_1 = __decorate([
3168 context_1.Bean('eventService')
3169 ], EventService);
3170 return EventService;
3171 var EventService_1;
3172}());
3173exports.EventService = EventService;
3174
3175
3176/***/ }),
3177/* 4 */
3178/***/ (function(module, exports, __webpack_require__) {
3179
3180"use strict";
3181/**
3182 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
3183 * @version v18.1.2
3184 * @link http://www.ag-grid.com/
3185 * @license MIT
3186 */
3187
3188var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3189 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3190 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
3191 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
3192 return c > 3 && r && Object.defineProperty(target, key, r), r;
3193};
3194var __metadata = (this && this.__metadata) || function (k, v) {
3195 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
3196};
3197var __param = (this && this.__param) || function (paramIndex, decorator) {
3198 return function (target, key) { decorator(target, key, paramIndex); }
3199};
3200Object.defineProperty(exports, "__esModule", { value: true });
3201var utils_1 = __webpack_require__(1);
3202var columnGroup_1 = __webpack_require__(28);
3203var column_1 = __webpack_require__(10);
3204var gridOptionsWrapper_1 = __webpack_require__(2);
3205var expressionService_1 = __webpack_require__(21);
3206var balancedColumnTreeBuilder_1 = __webpack_require__(40);
3207var displayedGroupCreator_1 = __webpack_require__(50);
3208var autoWidthCalculator_1 = __webpack_require__(41);
3209var eventService_1 = __webpack_require__(3);
3210var columnUtils_1 = __webpack_require__(33);
3211var logger_1 = __webpack_require__(12);
3212var events_1 = __webpack_require__(5);
3213var originalColumnGroup_1 = __webpack_require__(34);
3214var groupInstanceIdCreator_1 = __webpack_require__(85);
3215var context_1 = __webpack_require__(0);
3216var columnAnimationService_1 = __webpack_require__(55);
3217var autoGroupColService_1 = __webpack_require__(106);
3218var valueCache_1 = __webpack_require__(35);
3219var gridApi_1 = __webpack_require__(6);
3220var columnApi_1 = __webpack_require__(7);
3221var ColumnController = (function () {
3222 function ColumnController() {
3223 // header row count, based on user provided columns
3224 this.primaryHeaderRowCount = 0;
3225 this.secondaryHeaderRowCount = 0;
3226 this.secondaryColumnsPresent = false;
3227 // header row count, either above, or based on pivoting if we are pivoting
3228 this.gridHeaderRowCount = 0;
3229 // these are the lists used by the rowRenderer to render nodes. almost the leaf nodes of the above
3230 // displayed trees, however it also takes into account if the groups are open or not.
3231 this.displayedLeftColumns = [];
3232 this.displayedRightColumns = [];
3233 this.displayedCenterColumns = [];
3234 // all three lists above combined
3235 this.allDisplayedColumns = [];
3236 // same as above, except trimmed down to only columns within the viewport
3237 this.allDisplayedVirtualColumns = [];
3238 this.allDisplayedCenterVirtualColumns = [];
3239 this.rowGroupColumns = [];
3240 this.valueColumns = [];
3241 this.pivotColumns = [];
3242 this.ready = false;
3243 this.autoGroupsNeedBuilding = false;
3244 this.pivotMode = false;
3245 this.bodyWidth = 0;
3246 this.leftWidth = 0;
3247 this.rightWidth = 0;
3248 this.bodyWidthDirty = true;
3249 }
3250 ColumnController.prototype.init = function () {
3251 var pivotMode = this.gridOptionsWrapper.isPivotMode();
3252 this.suppressColumnVirtualisation = this.gridOptionsWrapper.isSuppressColumnVirtualisation();
3253 if (this.isPivotSettingAllowed(pivotMode)) {
3254 this.pivotMode = pivotMode;
3255 }
3256 this.usingTreeData = this.gridOptionsWrapper.isTreeData();
3257 };
3258 ColumnController.prototype.isAutoRowHeightActive = function () {
3259 return this.autoRowHeightColumns && this.autoRowHeightColumns.length > 0;
3260 };
3261 ColumnController.prototype.getAllAutoRowHeightCols = function () {
3262 return this.autoRowHeightColumns;
3263 };
3264 ColumnController.prototype.setVirtualViewportLeftAndRight = function () {
3265 if (this.gridOptionsWrapper.isEnableRtl()) {
3266 this.viewportLeft = this.bodyWidth - this.scrollPosition - this.scrollWidth;
3267 this.viewportRight = this.bodyWidth - this.scrollPosition;
3268 }
3269 else {
3270 this.viewportLeft = this.scrollPosition;
3271 this.viewportRight = this.scrollWidth + this.scrollPosition;
3272 }
3273 };
3274 // used by clipboard service, to know what columns to paste into
3275 ColumnController.prototype.getDisplayedColumnsStartingAt = function (column) {
3276 var currentColumn = column;
3277 var result = [];
3278 while (utils_1.Utils.exists(currentColumn)) {
3279 result.push(currentColumn);
3280 currentColumn = this.getDisplayedColAfter(currentColumn);
3281 }
3282 return result;
3283 };
3284 // checks what columns are currently displayed due to column virtualisation. fires an event
3285 // if the list of columns has changed.
3286 // + setColumnWidth(), setVirtualViewportPosition(), setColumnDefs(), sizeColumnsToFit()
3287 ColumnController.prototype.checkDisplayedVirtualColumns = function () {
3288 // check displayCenterColumnTree exists first, as it won't exist when grid is initialising
3289 if (utils_1.Utils.exists(this.displayedCenterColumns)) {
3290 var hashBefore = this.allDisplayedVirtualColumns.map(function (column) { return column.getId(); }).join('#');
3291 this.updateVirtualSets();
3292 var hashAfter = this.allDisplayedVirtualColumns.map(function (column) { return column.getId(); }).join('#');
3293 if (hashBefore !== hashAfter) {
3294 var event_1 = {
3295 type: events_1.Events.EVENT_VIRTUAL_COLUMNS_CHANGED,
3296 api: this.gridApi,
3297 columnApi: this.columnApi
3298 };
3299 this.eventService.dispatchEvent(event_1);
3300 }
3301 }
3302 };
3303 ColumnController.prototype.setVirtualViewportPosition = function (scrollWidth, scrollPosition) {
3304 if (scrollWidth !== this.scrollWidth || scrollPosition !== this.scrollPosition || this.bodyWidthDirty) {
3305 this.scrollWidth = scrollWidth;
3306 this.scrollPosition = scrollPosition;
3307 // we need to call setVirtualViewportLeftAndRight() at least once after the body width changes,
3308 // as the viewport can stay the same, but in RTL, if body width changes, we need to work out the
3309 // virtual columns again
3310 this.bodyWidthDirty = true;
3311 this.setVirtualViewportLeftAndRight();
3312 if (this.ready) {
3313 this.checkDisplayedVirtualColumns();
3314 }
3315 }
3316 };
3317 ColumnController.prototype.isPivotMode = function () {
3318 return this.pivotMode;
3319 };
3320 ColumnController.prototype.isPivotSettingAllowed = function (pivot) {
3321 if (pivot) {
3322 if (this.gridOptionsWrapper.isTreeData()) {
3323 console.warn("ag-Grid: Pivot mode not available in conjunction Tree Data i.e. 'gridOptions.treeData: true'");
3324 return false;
3325 }
3326 else {
3327 return true;
3328 }
3329 }
3330 else {
3331 return true;
3332 }
3333 };
3334 ColumnController.prototype.setPivotMode = function (pivotMode, source) {
3335 if (source === void 0) { source = "api"; }
3336 if (pivotMode === this.pivotMode) {
3337 return;
3338 }
3339 if (!this.isPivotSettingAllowed(this.pivotMode)) {
3340 return;
3341 }
3342 this.pivotMode = pivotMode;
3343 this.updateDisplayedColumns(source);
3344 var event = {
3345 type: events_1.Events.EVENT_COLUMN_PIVOT_MODE_CHANGED,
3346 api: this.gridApi,
3347 columnApi: this.columnApi
3348 };
3349 this.eventService.dispatchEvent(event);
3350 };
3351 ColumnController.prototype.getSecondaryPivotColumn = function (pivotKeys, valueColKey) {
3352 if (!this.secondaryColumnsPresent) {
3353 return null;
3354 }
3355 var valueColumnToFind = this.getPrimaryColumn(valueColKey);
3356 var foundColumn = null;
3357 this.secondaryColumns.forEach(function (column) {
3358 var thisPivotKeys = column.getColDef().pivotKeys;
3359 var pivotValueColumn = column.getColDef().pivotValueColumn;
3360 var pivotKeyMatches = utils_1.Utils.compareArrays(thisPivotKeys, pivotKeys);
3361 var pivotValueMatches = pivotValueColumn === valueColumnToFind;
3362 if (pivotKeyMatches && pivotValueMatches) {
3363 foundColumn = column;
3364 }
3365 });
3366 return foundColumn;
3367 };
3368 ColumnController.prototype.setBeans = function (loggerFactory) {
3369 this.logger = loggerFactory.create('ColumnController');
3370 };
3371 ColumnController.prototype.setFirstRightAndLastLeftPinned = function (source) {
3372 var lastLeft;
3373 var firstRight;
3374 if (this.gridOptionsWrapper.isEnableRtl()) {
3375 lastLeft = this.displayedLeftColumns ? this.displayedLeftColumns[0] : null;
3376 firstRight = this.displayedRightColumns ? this.displayedRightColumns[this.displayedRightColumns.length - 1] : null;
3377 }
3378 else {
3379 lastLeft = this.displayedLeftColumns ? this.displayedLeftColumns[this.displayedLeftColumns.length - 1] : null;
3380 firstRight = this.displayedRightColumns ? this.displayedRightColumns[0] : null;
3381 }
3382 this.gridColumns.forEach(function (column) {
3383 column.setLastLeftPinned(column === lastLeft, source);
3384 column.setFirstRightPinned(column === firstRight, source);
3385 });
3386 };
3387 ColumnController.prototype.autoSizeColumns = function (keys, source) {
3388 // because of column virtualisation, we can only do this function on columns that are
3389 // actually rendered, as non-rendered columns (outside the viewport and not rendered
3390 // due to column virtualisation) are not present. this can result in all rendered columns
3391 // getting narrowed, which in turn introduces more rendered columns on the RHS which
3392 // did not get autosized in the original run, leaving the visible grid with columns on
3393 // the LHS sized, but RHS no. so we keep looping through teh visible columns until
3394 // no more cols are available (rendered) to be resized
3395 var _this = this;
3396 if (source === void 0) { source = "api"; }
3397 // keep track of which cols we have resized in here
3398 var columnsAutosized = [];
3399 // initialise with anything except 0 so that while loop executs at least once
3400 var changesThisTimeAround = -1;
3401 while (changesThisTimeAround !== 0) {
3402 changesThisTimeAround = 0;
3403 this.actionOnGridColumns(keys, function (column) {
3404 // if already autosized, skip it
3405 if (columnsAutosized.indexOf(column) >= 0) {
3406 return;
3407 }
3408 // get how wide this col should be
3409 var preferredWidth = _this.autoWidthCalculator.getPreferredWidthForColumn(column);
3410 // preferredWidth = -1 if this col is not on the screen
3411 if (preferredWidth > 0) {
3412 var newWidth = _this.normaliseColumnWidth(column, preferredWidth);
3413 column.setActualWidth(newWidth, source);
3414 columnsAutosized.push(column);
3415 changesThisTimeAround++;
3416 }
3417 return true;
3418 }, source);
3419 }
3420 if (columnsAutosized.length > 0) {
3421 var event_2 = {
3422 type: events_1.Events.EVENT_COLUMN_RESIZED,
3423 columns: columnsAutosized,
3424 column: columnsAutosized.length === 1 ? columnsAutosized[0] : null,
3425 finished: true,
3426 api: this.gridApi,
3427 columnApi: this.columnApi,
3428 source: "autosizeColumns"
3429 };
3430 this.eventService.dispatchEvent(event_2);
3431 }
3432 };
3433 ColumnController.prototype.autoSizeColumn = function (key, source) {
3434 if (source === void 0) { source = "api"; }
3435 this.autoSizeColumns([key], source);
3436 };
3437 ColumnController.prototype.autoSizeAllColumns = function (source) {
3438 if (source === void 0) { source = "api"; }
3439 var allDisplayedColumns = this.getAllDisplayedColumns();
3440 this.autoSizeColumns(allDisplayedColumns, source);
3441 };
3442 ColumnController.prototype.getColumnsFromTree = function (rootColumns) {
3443 var result = [];
3444 recursiveFindColumns(rootColumns);
3445 return result;
3446 function recursiveFindColumns(childColumns) {
3447 for (var i = 0; i < childColumns.length; i++) {
3448 var child = childColumns[i];
3449 if (child instanceof column_1.Column) {
3450 result.push(child);
3451 }
3452 else if (child instanceof originalColumnGroup_1.OriginalColumnGroup) {
3453 recursiveFindColumns(child.getChildren());
3454 }
3455 }
3456 }
3457 };
3458 ColumnController.prototype.getAllDisplayedColumnGroups = function () {
3459 if (this.displayedLeftColumnTree && this.displayedRightColumnTree && this.displayedCentreColumnTree) {
3460 return this.displayedLeftColumnTree
3461 .concat(this.displayedCentreColumnTree)
3462 .concat(this.displayedRightColumnTree);
3463 }
3464 else {
3465 return null;
3466 }
3467 };
3468 // + columnSelectPanel
3469 ColumnController.prototype.getPrimaryColumnTree = function () {
3470 return this.primaryBalancedTree;
3471 };
3472 // + gridPanel -> for resizing the body and setting top margin
3473 ColumnController.prototype.getHeaderRowCount = function () {
3474 return this.gridHeaderRowCount;
3475 };
3476 // + headerRenderer -> setting pinned body width
3477 ColumnController.prototype.getLeftDisplayedColumnGroups = function () {
3478 return this.displayedLeftColumnTree;
3479 };
3480 // + headerRenderer -> setting pinned body width
3481 ColumnController.prototype.getRightDisplayedColumnGroups = function () {
3482 return this.displayedRightColumnTree;
3483 };
3484 // + headerRenderer -> setting pinned body width
3485 ColumnController.prototype.getCenterDisplayedColumnGroups = function () {
3486 return this.displayedCentreColumnTree;
3487 };
3488 ColumnController.prototype.getDisplayedColumnGroups = function (type) {
3489 switch (type) {
3490 case column_1.Column.PINNED_LEFT: return this.getLeftDisplayedColumnGroups();
3491 case column_1.Column.PINNED_RIGHT: return this.getRightDisplayedColumnGroups();
3492 default: return this.getCenterDisplayedColumnGroups();
3493 }
3494 };
3495 // gridPanel -> ensureColumnVisible
3496 ColumnController.prototype.isColumnDisplayed = function (column) {
3497 return this.getAllDisplayedColumns().indexOf(column) >= 0;
3498 };
3499 // + csvCreator
3500 ColumnController.prototype.getAllDisplayedColumns = function () {
3501 return this.allDisplayedColumns;
3502 };
3503 ColumnController.prototype.getAllDisplayedVirtualColumns = function () {
3504 return this.allDisplayedVirtualColumns;
3505 };
3506 ColumnController.prototype.getDisplayedLeftColumnsForRow = function (rowNode) {
3507 if (!this.colSpanActive) {
3508 return this.displayedLeftColumns;
3509 }
3510 else {
3511 return this.getDisplayedColumnsForRow(rowNode, this.displayedLeftColumns);
3512 }
3513 };
3514 ColumnController.prototype.getDisplayedRightColumnsForRow = function (rowNode) {
3515 if (!this.colSpanActive) {
3516 return this.displayedRightColumns;
3517 }
3518 else {
3519 return this.getDisplayedColumnsForRow(rowNode, this.displayedRightColumns);
3520 }
3521 };
3522 ColumnController.prototype.getDisplayedColumnsForRow = function (rowNode, displayedColumns, filterCallback, emptySpaceBeforeColumn) {
3523 var result = [];
3524 var lastConsideredCol = null;
3525 var _loop_1 = function (i) {
3526 var col = displayedColumns[i];
3527 var colSpan = col.getColSpan(rowNode);
3528 var columnsToCheckFilter = [col];
3529 if (colSpan > 1) {
3530 var colsToRemove = colSpan - 1;
3531 for (var j = 1; j <= colsToRemove; j++) {
3532 columnsToCheckFilter.push(displayedColumns[i + j]);
3533 }
3534 i += colsToRemove;
3535 }
3536 // see which cols we should take out for column virtualisation
3537 var filterPasses;
3538 if (filterCallback) {
3539 // if user provided a callback, means some columns may not be in the viewport.
3540 // the user will NOT provide a callback if we are talking about pinned areas,
3541 // as pinned areas have no horizontal scroll and do not virtualise the columns.
3542 // if lots of columns, that means column spanning, and we set filterPasses = true
3543 // if one or more of the columns spanned pass the filter.
3544 filterPasses = false;
3545 columnsToCheckFilter.forEach(function (colForFilter) {
3546 if (filterCallback(colForFilter))
3547 filterPasses = true;
3548 });
3549 }
3550 else {
3551 filterPasses = true;
3552 }
3553 if (filterPasses) {
3554 if (result.length === 0 && lastConsideredCol) {
3555 var gapBeforeColumn = emptySpaceBeforeColumn ? emptySpaceBeforeColumn(col) : false;
3556 if (gapBeforeColumn) {
3557 result.push(lastConsideredCol);
3558 }
3559 }
3560 result.push(col);
3561 }
3562 lastConsideredCol = col;
3563 out_i_1 = i;
3564 };
3565 var out_i_1;
3566 for (var i = 0; i < displayedColumns.length; i++) {
3567 _loop_1(i);
3568 i = out_i_1;
3569 }
3570 return result;
3571 };
3572 // + rowRenderer
3573 // if we are not column spanning, this just returns back the virtual centre columns,
3574 // however if we are column spanning, then different rows can have different virtual
3575 // columns, so we have to work out the list for each individual row.
3576 ColumnController.prototype.getAllDisplayedCenterVirtualColumnsForRow = function (rowNode) {
3577 var _this = this;
3578 if (!this.colSpanActive) {
3579 return this.allDisplayedCenterVirtualColumns;
3580 }
3581 var emptySpaceBeforeColumn = function (col) { return col.getLeft() > _this.viewportLeft; };
3582 // if doing column virtualisation, then we filter based on the viewport.
3583 var filterCallback = this.suppressColumnVirtualisation ? null : this.isColumnInViewport.bind(this);
3584 return this.getDisplayedColumnsForRow(rowNode, this.displayedCenterColumns, filterCallback, emptySpaceBeforeColumn);
3585 };
3586 ColumnController.prototype.isColumnInViewport = function (col) {
3587 var columnLeft = col.getLeft();
3588 var columnRight = col.getLeft() + col.getActualWidth();
3589 var columnToMuchLeft = columnLeft < this.viewportLeft && columnRight < this.viewportLeft;
3590 var columnToMuchRight = columnLeft > this.viewportRight && columnRight > this.viewportRight;
3591 return !columnToMuchLeft && !columnToMuchRight;
3592 };
3593 // used by:
3594 // + angularGrid -> setting pinned body width
3595 // note: this should be cached
3596 ColumnController.prototype.getPinnedLeftContainerWidth = function () {
3597 return this.getWidthOfColsInList(this.displayedLeftColumns);
3598 };
3599 // note: this should be cached
3600 ColumnController.prototype.getPinnedRightContainerWidth = function () {
3601 return this.getWidthOfColsInList(this.displayedRightColumns);
3602 };
3603 ColumnController.prototype.updatePrimaryColumnList = function (keys, masterList, actionIsAdd, columnCallback, eventType, source) {
3604 var _this = this;
3605 if (source === void 0) { source = "api"; }
3606 if (utils_1.Utils.missingOrEmpty(keys)) {
3607 return;
3608 }
3609 var atLeastOne = false;
3610 keys.forEach(function (key) {
3611 var columnToAdd = _this.getPrimaryColumn(key);
3612 if (!columnToAdd) {
3613 return;
3614 }
3615 if (actionIsAdd) {
3616 if (masterList.indexOf(columnToAdd) >= 0) {
3617 return;
3618 }
3619 masterList.push(columnToAdd);
3620 }
3621 else {
3622 if (masterList.indexOf(columnToAdd) < 0) {
3623 return;
3624 }
3625 utils_1.Utils.removeFromArray(masterList, columnToAdd);
3626 }
3627 columnCallback(columnToAdd);
3628 atLeastOne = true;
3629 });
3630 if (!atLeastOne) {
3631 return;
3632 }
3633 if (this.autoGroupsNeedBuilding) {
3634 this.updateGridColumns();
3635 }
3636 this.updateDisplayedColumns(source);
3637 var event = {
3638 type: eventType,
3639 columns: masterList,
3640 column: masterList.length === 1 ? masterList[0] : null,
3641 api: this.gridApi,
3642 columnApi: this.columnApi,
3643 source: source
3644 };
3645 this.eventService.dispatchEvent(event);
3646 };
3647 ColumnController.prototype.setRowGroupColumns = function (colKeys, source) {
3648 if (source === void 0) { source = "api"; }
3649 this.autoGroupsNeedBuilding = true;
3650 this.setPrimaryColumnList(colKeys, this.rowGroupColumns, events_1.Events.EVENT_COLUMN_ROW_GROUP_CHANGED, this.setRowGroupActive.bind(this), source);
3651 };
3652 ColumnController.prototype.setRowGroupActive = function (active, column, source) {
3653 if (active === column.isRowGroupActive()) {
3654 return;
3655 }
3656 column.setRowGroupActive(active, source);
3657 if (!active && !this.gridOptionsWrapper.isSuppressMakeColumnVisibleAfterUnGroup()) {
3658 column.setVisible(true, source);
3659 }
3660 };
3661 ColumnController.prototype.addRowGroupColumn = function (key, source) {
3662 if (source === void 0) { source = "api"; }
3663 this.addRowGroupColumns([key], source);
3664 };
3665 ColumnController.prototype.addRowGroupColumns = function (keys, source) {
3666 if (source === void 0) { source = "api"; }
3667 this.autoGroupsNeedBuilding = true;
3668 this.updatePrimaryColumnList(keys, this.rowGroupColumns, true, this.setRowGroupActive.bind(this, true), events_1.Events.EVENT_COLUMN_ROW_GROUP_CHANGED, source);
3669 };
3670 ColumnController.prototype.removeRowGroupColumns = function (keys, source) {
3671 if (source === void 0) { source = "api"; }
3672 this.autoGroupsNeedBuilding = true;
3673 this.updatePrimaryColumnList(keys, this.rowGroupColumns, false, this.setRowGroupActive.bind(this, false), events_1.Events.EVENT_COLUMN_ROW_GROUP_CHANGED, source);
3674 };
3675 ColumnController.prototype.removeRowGroupColumn = function (key, source) {
3676 if (source === void 0) { source = "api"; }
3677 this.removeRowGroupColumns([key], source);
3678 };
3679 ColumnController.prototype.addPivotColumns = function (keys, source) {
3680 if (source === void 0) { source = "api"; }
3681 this.updatePrimaryColumnList(keys, this.pivotColumns, true, function (column) { return column.setPivotActive(true, source); }, events_1.Events.EVENT_COLUMN_PIVOT_CHANGED, source);
3682 };
3683 ColumnController.prototype.setPivotColumns = function (colKeys, source) {
3684 if (source === void 0) { source = "api"; }
3685 this.setPrimaryColumnList(colKeys, this.pivotColumns, events_1.Events.EVENT_COLUMN_PIVOT_CHANGED, function (added, column) {
3686 column.setPivotActive(added, source);
3687 }, source);
3688 };
3689 ColumnController.prototype.addPivotColumn = function (key, source) {
3690 if (source === void 0) { source = "api"; }
3691 this.addPivotColumns([key], source);
3692 };
3693 ColumnController.prototype.removePivotColumns = function (keys, source) {
3694 if (source === void 0) { source = "api"; }
3695 this.updatePrimaryColumnList(keys, this.pivotColumns, false, function (column) { return column.setPivotActive(false, source); }, events_1.Events.EVENT_COLUMN_PIVOT_CHANGED, source);
3696 };
3697 ColumnController.prototype.removePivotColumn = function (key, source) {
3698 if (source === void 0) { source = "api"; }
3699 this.removePivotColumns([key], source);
3700 };
3701 ColumnController.prototype.setPrimaryColumnList = function (colKeys, masterList, eventName, columnCallback, source) {
3702 var _this = this;
3703 masterList.length = 0;
3704 if (utils_1.Utils.exists(colKeys)) {
3705 colKeys.forEach(function (key) {
3706 var column = _this.getPrimaryColumn(key);
3707 masterList.push(column);
3708 });
3709 }
3710 this.primaryColumns.forEach(function (column) {
3711 var added = masterList.indexOf(column) >= 0;
3712 columnCallback(added, column);
3713 });
3714 if (this.autoGroupsNeedBuilding) {
3715 this.updateGridColumns();
3716 }
3717 this.updateDisplayedColumns(source);
3718 var event = {
3719 type: eventName,
3720 columns: masterList,
3721 column: masterList.length === 1 ? masterList[0] : null,
3722 api: this.gridApi,
3723 columnApi: this.columnApi,
3724 source: source
3725 };
3726 this.eventService.dispatchEvent(event);
3727 };
3728 ColumnController.prototype.setValueColumns = function (colKeys, source) {
3729 if (source === void 0) { source = "api"; }
3730 this.setPrimaryColumnList(colKeys, this.valueColumns, events_1.Events.EVENT_COLUMN_VALUE_CHANGED, this.setValueActive.bind(this), source);
3731 };
3732 ColumnController.prototype.setValueActive = function (active, column, source) {
3733 if (active === column.isValueActive()) {
3734 return;
3735 }
3736 column.setValueActive(active, source);
3737 if (active && !column.getAggFunc()) {
3738 var defaultAggFunc = this.aggFuncService.getDefaultAggFunc(column);
3739 column.setAggFunc(defaultAggFunc);
3740 }
3741 };
3742 ColumnController.prototype.addValueColumns = function (keys, source) {
3743 if (source === void 0) { source = "api"; }
3744 this.updatePrimaryColumnList(keys, this.valueColumns, true, this.setValueActive.bind(this, true), events_1.Events.EVENT_COLUMN_VALUE_CHANGED, source);
3745 };
3746 ColumnController.prototype.addValueColumn = function (colKey, source) {
3747 if (source === void 0) { source = "api"; }
3748 this.addValueColumns([colKey], source);
3749 };
3750 ColumnController.prototype.removeValueColumn = function (colKey, source) {
3751 if (source === void 0) { source = "api"; }
3752 this.removeValueColumns([colKey], source);
3753 };
3754 ColumnController.prototype.removeValueColumns = function (keys, source) {
3755 if (source === void 0) { source = "api"; }
3756 this.updatePrimaryColumnList(keys, this.valueColumns, false, this.setValueActive.bind(this, false), events_1.Events.EVENT_COLUMN_VALUE_CHANGED, source);
3757 };
3758 // returns the width we can set to this col, taking into consideration min and max widths
3759 ColumnController.prototype.normaliseColumnWidth = function (column, newWidth) {
3760 if (newWidth < column.getMinWidth()) {
3761 newWidth = column.getMinWidth();
3762 }
3763 if (column.isGreaterThanMax(newWidth)) {
3764 newWidth = column.getMaxWidth();
3765 }
3766 return newWidth;
3767 };
3768 ColumnController.prototype.getPrimaryOrGridColumn = function (key) {
3769 var column = this.getPrimaryColumn(key);
3770 if (column) {
3771 return column;
3772 }
3773 else {
3774 return this.getGridColumn(key);
3775 }
3776 };
3777 ColumnController.prototype.setColumnWidth = function (key, // @key - the column who's size we want to change
3778 newWidth, // @newWidth - width in pixels
3779 shiftKey, // @takeFromAdjacent - if user has 'shift' pressed, then pixels are taken from adjacent column
3780 finished, // @finished - ends up in the event, tells the user if more events are to come
3781 source) {
3782 if (source === void 0) { source = "api"; }
3783 var col = this.getPrimaryOrGridColumn(key);
3784 if (!col) {
3785 return;
3786 }
3787 var sets = [];
3788 sets.push({
3789 width: newWidth,
3790 ratios: [1],
3791 columns: [col]
3792 });
3793 // if user wants to do shift resize by default, then we invert the shift operation
3794 var defaultIsShift = this.gridOptionsWrapper.getColResizeDefault() === 'shift';
3795 if (defaultIsShift) {
3796 shiftKey = !shiftKey;
3797 }
3798 if (shiftKey) {
3799 var otherCol = this.getDisplayedColAfter(col);
3800 if (!otherCol) {
3801 return;
3802 }
3803 var widthDiff = col.getActualWidth() - newWidth;
3804 var otherColWidth = otherCol.getActualWidth() + widthDiff;
3805 sets.push({
3806 width: otherColWidth,
3807 ratios: [1],
3808 columns: [otherCol]
3809 });
3810 }
3811 this.resizeColumnSets(sets, finished, source);
3812 };
3813 ColumnController.prototype.checkMinAndMaxWidthsForSet = function (columnResizeSet) {
3814 var columns = columnResizeSet.columns, width = columnResizeSet.width;
3815 // every col has a min width, so sum them all up and see if we have enough room
3816 // for all the min widths
3817 var minWidthAccumulated = 0;
3818 var maxWidthAccumulated = 0;
3819 var maxWidthActive = true;
3820 columns.forEach(function (col) {
3821 minWidthAccumulated += col.getMinWidth();
3822 if (col.getMaxWidth() > 0) {
3823 maxWidthAccumulated += col.getMaxWidth();
3824 }
3825 else {
3826 // if at least one columns has no max width, it means the group of columns
3827 // then has no max width, as at least one column can take as much width as possible
3828 maxWidthActive = false;
3829 }
3830 });
3831 var minWidthPasses = width >= minWidthAccumulated;
3832 var maxWidthPasses = !maxWidthActive || (width <= maxWidthAccumulated);
3833 return minWidthPasses && maxWidthPasses;
3834 };
3835 // method takes sets of columns and resizes them. either all sets will be resized, or nothing
3836 // be resized. this is used for example when user tries to resize a group and holds shift key,
3837 // then both the current group (grows), and the adjacent group (shrinks), will get resized,
3838 // so that's two sets for this method.
3839 ColumnController.prototype.resizeColumnSets = function (resizeSets, finished, source) {
3840 var passMinMaxCheck = utils_1.Utils.every(resizeSets, this.checkMinAndMaxWidthsForSet.bind(this));
3841 if (!passMinMaxCheck) {
3842 return;
3843 }
3844 var changedCols = [];
3845 var allCols = [];
3846 resizeSets.forEach(function (set) {
3847 var width = set.width, columns = set.columns, ratios = set.ratios;
3848 // keep track of pixels used, and last column gets the remaining,
3849 // to cater for rounding errors, and min width adjustments
3850 var newWidths = {};
3851 var finishedCols = {};
3852 columns.forEach(function (col) { return allCols.push(col); });
3853 // the loop below goes through each col. if a col exceeds it's min/max width,
3854 // it then gets set to its min/max width and the column is removed marked as 'finished'
3855 // and the calculation is done again leaving this column out. take for example columns
3856 // {A, width: 50, maxWidth: 100}
3857 // {B, width: 50}
3858 // {C, width: 50}
3859 // and then the set is set to width 600 - on the first pass the grid tries to set each column
3860 // to 200. it checks A and sees 200 > 100 and so sets the width to 100. col A is then marked
3861 // as 'finished' and the calculation is done again with the remaining cols B and C, which end up
3862 // splitting the remaining 500 pixels.
3863 var finishedColsGrew = true;
3864 var loopCount = 0;
3865 var _loop_2 = function () {
3866 loopCount++;
3867 if (loopCount > 1000) {
3868 // this should never happen, but in the future, someone might introduce a bug here,
3869 // so we stop the browser from hanging and report bug properly
3870 console.error('ag-Grid: infinite loop in resizeColumnSets');
3871 return "break";
3872 }
3873 finishedColsGrew = false;
3874 var subsetCols = [];
3875 var subsetRatios = [];
3876 var subsetRatioTotal = 0;
3877 var pixelsToDistribute = width;
3878 columns.forEach(function (col, index) {
3879 var thisColFinished = finishedCols[col.getId()];
3880 if (thisColFinished) {
3881 pixelsToDistribute -= newWidths[col.getId()];
3882 }
3883 else {
3884 subsetCols.push(col);
3885 var ratioThisCol = ratios[index];
3886 subsetRatioTotal += ratioThisCol;
3887 subsetRatios.push(ratioThisCol);
3888 }
3889 });
3890 // because we are not using all of the ratios (cols can be missing),
3891 // we scale the ratio. if all columns are included, then subsetRatioTotal=1,
3892 // and so the ratioScale will be 1.
3893 var ratioScale = 1 / subsetRatioTotal;
3894 subsetCols.forEach(function (col, index) {
3895 var lastCol = index === (subsetCols.length - 1);
3896 var colNewWidth;
3897 if (lastCol) {
3898 colNewWidth = pixelsToDistribute;
3899 }
3900 else {
3901 colNewWidth = Math.round(ratios[index] * width * ratioScale);
3902 pixelsToDistribute -= colNewWidth;
3903 }
3904 if (colNewWidth < col.getMinWidth()) {
3905 colNewWidth = col.getMinWidth();
3906 finishedCols[col.getId()] = true;
3907 finishedColsGrew = true;
3908 }
3909 else if (col.getMaxWidth() > 0 && colNewWidth > col.getMaxWidth()) {
3910 colNewWidth = col.getMaxWidth();
3911 finishedCols[col.getId()] = true;
3912 finishedColsGrew = true;
3913 }
3914 newWidths[col.getId()] = colNewWidth;
3915 });
3916 };
3917 while (finishedColsGrew) {
3918 var state_1 = _loop_2();
3919 if (state_1 === "break")
3920 break;
3921 }
3922 columns.forEach(function (col) {
3923 var newWidth = newWidths[col.getId()];
3924 if (col.getActualWidth() !== newWidth) {
3925 col.setActualWidth(newWidth);
3926 changedCols.push(col);
3927 }
3928 });
3929 });
3930 // if no cols changed, then no need to update more or send event.
3931 var atLeastOneColChanged = changedCols.length > 0;
3932 if (atLeastOneColChanged) {
3933 this.setLeftValues(source);
3934 this.updateBodyWidths();
3935 this.checkDisplayedVirtualColumns();
3936 }
3937 // check for change first, to avoid unnecessary firing of events
3938 // however we always fire 'finished' events. this is important
3939 // when groups are resized, as if the group is changing slowly,
3940 // eg 1 pixel at a time, then each change will fire change events
3941 // in all the columns in the group, but only one with get the pixel.
3942 if (atLeastOneColChanged || finished) {
3943 var event_3 = {
3944 type: events_1.Events.EVENT_COLUMN_RESIZED,
3945 columns: allCols,
3946 column: allCols.length === 1 ? allCols[0] : null,
3947 finished: finished,
3948 api: this.gridApi,
3949 columnApi: this.columnApi,
3950 source: source
3951 };
3952 this.eventService.dispatchEvent(event_3);
3953 }
3954 };
3955 ColumnController.prototype.setColumnAggFunc = function (column, aggFunc, source) {
3956 if (source === void 0) { source = "api"; }
3957 column.setAggFunc(aggFunc);
3958 var event = {
3959 type: events_1.Events.EVENT_COLUMN_VALUE_CHANGED,
3960 columns: [column],
3961 column: column,
3962 api: this.gridApi,
3963 columnApi: this.columnApi,
3964 source: source
3965 };
3966 this.eventService.dispatchEvent(event);
3967 };
3968 ColumnController.prototype.moveRowGroupColumn = function (fromIndex, toIndex, source) {
3969 if (source === void 0) { source = "api"; }
3970 var column = this.rowGroupColumns[fromIndex];
3971 this.rowGroupColumns.splice(fromIndex, 1);
3972 this.rowGroupColumns.splice(toIndex, 0, column);
3973 var event = {
3974 type: events_1.Events.EVENT_COLUMN_ROW_GROUP_CHANGED,
3975 columns: this.rowGroupColumns,
3976 column: this.rowGroupColumns.length === 1 ? this.rowGroupColumns[0] : null,
3977 api: this.gridApi,
3978 columnApi: this.columnApi,
3979 source: source
3980 };
3981 this.eventService.dispatchEvent(event);
3982 };
3983 ColumnController.prototype.moveColumns = function (columnsToMoveKeys, toIndex, source) {
3984 if (source === void 0) { source = "api"; }
3985 this.columnAnimationService.start();
3986 if (toIndex > this.gridColumns.length - columnsToMoveKeys.length) {
3987 console.warn('ag-Grid: tried to insert columns in invalid location, toIndex = ' + toIndex);
3988 console.warn('ag-Grid: remember that you should not count the moving columns when calculating the new index');
3989 return;
3990 }
3991 // we want to pull all the columns out first and put them into an ordered list
3992 var columnsToMove = this.getGridColumns(columnsToMoveKeys);
3993 var failedRules = !this.doesMovePassRules(columnsToMove, toIndex);
3994 if (failedRules) {
3995 return;
3996 }
3997 utils_1.Utils.moveInArray(this.gridColumns, columnsToMove, toIndex);
3998 this.updateDisplayedColumns(source);
3999 var event = {
4000 type: events_1.Events.EVENT_COLUMN_MOVED,
4001 columns: columnsToMove,
4002 column: columnsToMove.length === 1 ? columnsToMove[0] : null,
4003 toIndex: toIndex,
4004 api: this.gridApi,
4005 columnApi: this.columnApi,
4006 source: source
4007 };
4008 this.eventService.dispatchEvent(event);
4009 this.columnAnimationService.finish();
4010 };
4011 ColumnController.prototype.doesMovePassRules = function (columnsToMove, toIndex) {
4012 // make a copy of what the grid columns would look like after the move
4013 var proposedColumnOrder = this.gridColumns.slice();
4014 utils_1.Utils.moveInArray(proposedColumnOrder, columnsToMove, toIndex);
4015 // then check that the new proposed order of the columns passes all rules
4016 if (!this.doesMovePassMarryChildren(proposedColumnOrder)) {
4017 return false;
4018 }
4019 if (!this.doesMovePassLockedPositions(proposedColumnOrder)) {
4020 return false;
4021 }
4022 return true;
4023 };
4024 ColumnController.prototype.doesMovePassLockedPositions = function (proposedColumnOrder) {
4025 var foundNonLocked = false;
4026 var rulePassed = true;
4027 // go though the cols, see if any non-locked appear before any locked
4028 proposedColumnOrder.forEach(function (col) {
4029 if (col.isLockPosition()) {
4030 if (foundNonLocked) {
4031 rulePassed = false;
4032 }
4033 }
4034 else {
4035 foundNonLocked = true;
4036 }
4037 });
4038 return rulePassed;
4039 };
4040 ColumnController.prototype.doesMovePassMarryChildren = function (allColumnsCopy) {
4041 var rulePassed = true;
4042 this.columnUtils.depthFirstOriginalTreeSearch(this.gridBalancedTree, function (child) {
4043 if (!(child instanceof originalColumnGroup_1.OriginalColumnGroup)) {
4044 return;
4045 }
4046 var columnGroup = child;
4047 var marryChildren = columnGroup.getColGroupDef() && columnGroup.getColGroupDef().marryChildren;
4048 if (!marryChildren) {
4049 return;
4050 }
4051 var newIndexes = [];
4052 columnGroup.getLeafColumns().forEach(function (col) {
4053 var newColIndex = allColumnsCopy.indexOf(col);
4054 newIndexes.push(newColIndex);
4055 });
4056 var maxIndex = Math.max.apply(Math, newIndexes);
4057 var minIndex = Math.min.apply(Math, newIndexes);
4058 // spread is how far the first column in this group is away from the last column
4059 var spread = maxIndex - minIndex;
4060 var maxSpread = columnGroup.getLeafColumns().length - 1;
4061 // if the columns
4062 if (spread > maxSpread) {
4063 rulePassed = false;
4064 }
4065 // console.log(`maxIndex = ${maxIndex}, minIndex = ${minIndex}, spread = ${spread}, maxSpread = ${maxSpread}, fail = ${spread > (count-1)}`)
4066 // console.log(allColumnsCopy.map( col => col.getColDef().field).join(','));
4067 });
4068 return rulePassed;
4069 };
4070 ColumnController.prototype.moveColumn = function (key, toIndex, source) {
4071 if (source === void 0) { source = "api"; }
4072 this.moveColumns([key], toIndex, source);
4073 };
4074 ColumnController.prototype.moveColumnByIndex = function (fromIndex, toIndex, source) {
4075 if (source === void 0) { source = "api"; }
4076 var column = this.gridColumns[fromIndex];
4077 this.moveColumn(column, toIndex, source);
4078 };
4079 // used by:
4080 // + angularGrid -> for setting body width
4081 // + rowController -> setting main row widths (when inserting and resizing)
4082 // need to cache this
4083 ColumnController.prototype.getBodyContainerWidth = function () {
4084 return this.bodyWidth;
4085 };
4086 ColumnController.prototype.getContainerWidth = function (pinned) {
4087 switch (pinned) {
4088 case column_1.Column.PINNED_LEFT: return this.leftWidth;
4089 case column_1.Column.PINNED_RIGHT: return this.rightWidth;
4090 default: return this.bodyWidth;
4091 }
4092 };
4093 // after setColumnWidth or updateGroupsAndDisplayedColumns
4094 ColumnController.prototype.updateBodyWidths = function () {
4095 var newBodyWidth = this.getWidthOfColsInList(this.displayedCenterColumns);
4096 var newLeftWidth = this.getWidthOfColsInList(this.displayedLeftColumns);
4097 var newRightWidth = this.getWidthOfColsInList(this.displayedRightColumns);
4098 // this is used by virtual col calculation, for RTL only, as a change to body width can impact displayed
4099 // columns, due to RTL inverting the y coordinates
4100 this.bodyWidthDirty = this.bodyWidth !== newBodyWidth;
4101 var atLeastOneChanged = this.bodyWidth !== newBodyWidth || this.leftWidth !== newLeftWidth || this.rightWidth !== newRightWidth;
4102 if (atLeastOneChanged) {
4103 this.bodyWidth = newBodyWidth;
4104 this.leftWidth = newLeftWidth;
4105 this.rightWidth = newRightWidth;
4106 // when this fires, it is picked up by the gridPanel, which ends up in
4107 // gridPanel calling setWidthAndScrollPosition(), which in turn calls setVirtualViewportPosition()
4108 var event_4 = {
4109 type: events_1.Events.EVENT_DISPLAYED_COLUMNS_WIDTH_CHANGED,
4110 api: this.gridApi,
4111 columnApi: this.columnApi
4112 };
4113 this.eventService.dispatchEvent(event_4);
4114 }
4115 };
4116 // + rowController
4117 ColumnController.prototype.getValueColumns = function () {
4118 return this.valueColumns ? this.valueColumns : [];
4119 };
4120 // + rowController
4121 ColumnController.prototype.getPivotColumns = function () {
4122 return this.pivotColumns ? this.pivotColumns : [];
4123 };
4124 // + clientSideRowModel
4125 ColumnController.prototype.isPivotActive = function () {
4126 return this.pivotColumns && this.pivotColumns.length > 0 && this.pivotMode;
4127 };
4128 // + toolPanel
4129 ColumnController.prototype.getRowGroupColumns = function () {
4130 return this.rowGroupColumns ? this.rowGroupColumns : [];
4131 };
4132 // + rowController -> while inserting rows
4133 ColumnController.prototype.getDisplayedCenterColumns = function () {
4134 return this.displayedCenterColumns;
4135 };
4136 // + rowController -> while inserting rows
4137 ColumnController.prototype.getDisplayedLeftColumns = function () {
4138 return this.displayedLeftColumns;
4139 };
4140 ColumnController.prototype.getDisplayedRightColumns = function () {
4141 return this.displayedRightColumns;
4142 };
4143 ColumnController.prototype.getDisplayedColumns = function (type) {
4144 switch (type) {
4145 case column_1.Column.PINNED_LEFT: return this.getDisplayedLeftColumns();
4146 case column_1.Column.PINNED_RIGHT: return this.getDisplayedRightColumns();
4147 default: return this.getDisplayedCenterColumns();
4148 }
4149 };
4150 // used by:
4151 // + clientSideRowController -> sorting, building quick filter text
4152 // + headerRenderer -> sorting (clearing icon)
4153 ColumnController.prototype.getAllPrimaryColumns = function () {
4154 return this.primaryColumns;
4155 };
4156 ColumnController.prototype.getAllColumnsForQuickFilter = function () {
4157 return this.columnsForQuickFilter;
4158 };
4159 // + moveColumnController
4160 ColumnController.prototype.getAllGridColumns = function () {
4161 return this.gridColumns;
4162 };
4163 ColumnController.prototype.isEmpty = function () {
4164 return utils_1.Utils.missingOrEmpty(this.gridColumns);
4165 };
4166 ColumnController.prototype.isRowGroupEmpty = function () {
4167 return utils_1.Utils.missingOrEmpty(this.rowGroupColumns);
4168 };
4169 ColumnController.prototype.setColumnVisible = function (key, visible, source) {
4170 if (source === void 0) { source = "api"; }
4171 this.setColumnsVisible([key], visible, source);
4172 };
4173 ColumnController.prototype.setColumnsVisible = function (keys, visible, source) {
4174 var _this = this;
4175 if (source === void 0) { source = "api"; }
4176 this.columnAnimationService.start();
4177 this.actionOnGridColumns(keys, function (column) {
4178 if (column.isVisible() !== visible) {
4179 column.setVisible(visible, source);
4180 return true;
4181 }
4182 else {
4183 return false;
4184 }
4185 }, source, function () {
4186 var event = {
4187 type: events_1.Events.EVENT_COLUMN_VISIBLE,
4188 visible: visible,
4189 column: null,
4190 columns: null,
4191 api: _this.gridApi,
4192 columnApi: _this.columnApi,
4193 source: source
4194 };
4195 return event;
4196 });
4197 this.columnAnimationService.finish();
4198 };
4199 ColumnController.prototype.setColumnPinned = function (key, pinned, source) {
4200 if (source === void 0) { source = "api"; }
4201 this.setColumnsPinned([key], pinned, source);
4202 };
4203 ColumnController.prototype.setColumnsPinned = function (keys, pinned, source) {
4204 var _this = this;
4205 if (source === void 0) { source = "api"; }
4206 this.columnAnimationService.start();
4207 var actualPinned;
4208 if (pinned === true || pinned === column_1.Column.PINNED_LEFT) {
4209 actualPinned = column_1.Column.PINNED_LEFT;
4210 }
4211 else if (pinned === column_1.Column.PINNED_RIGHT) {
4212 actualPinned = column_1.Column.PINNED_RIGHT;
4213 }
4214 else {
4215 actualPinned = null;
4216 }
4217 this.actionOnGridColumns(keys, function (col) {
4218 if (col.getPinned() !== actualPinned) {
4219 col.setPinned(actualPinned);
4220 return true;
4221 }
4222 else {
4223 return false;
4224 }
4225 }, source, function () {
4226 var event = {
4227 type: events_1.Events.EVENT_COLUMN_PINNED,
4228 pinned: actualPinned,
4229 column: null,
4230 columns: null,
4231 api: _this.gridApi,
4232 columnApi: _this.columnApi,
4233 source: source
4234 };
4235 return event;
4236 });
4237 this.columnAnimationService.finish();
4238 };
4239 // does an action on a set of columns. provides common functionality for looking up the
4240 // columns based on key, getting a list of effected columns, and then updated the event
4241 // with either one column (if it was just one col) or a list of columns
4242 // used by: autoResize, setVisible, setPinned
4243 ColumnController.prototype.actionOnGridColumns = function (// the column keys this action will be on
4244 keys,
4245 // the action to do - if this returns false, the column was skipped
4246 // and won't be included in the event
4247 action,
4248 // should return back a column event of the right type
4249 source, createEvent) {
4250 var _this = this;
4251 if (utils_1.Utils.missingOrEmpty(keys)) {
4252 return;
4253 }
4254 var updatedColumns = [];
4255 keys.forEach(function (key) {
4256 var column = _this.getGridColumn(key);
4257 if (!column) {
4258 return;
4259 }
4260 // need to check for false with type (ie !== instead of !=)
4261 // as not returning anything (undefined) would also be false
4262 var resultOfAction = action(column);
4263 if (resultOfAction !== false) {
4264 updatedColumns.push(column);
4265 }
4266 });
4267 if (updatedColumns.length === 0) {
4268 return;
4269 }
4270 this.updateDisplayedColumns(source);
4271 if (utils_1.Utils.exists(createEvent)) {
4272 var event_5 = createEvent();
4273 event_5.columns = updatedColumns;
4274 event_5.column = updatedColumns.length === 1 ? updatedColumns[0] : null;
4275 this.eventService.dispatchEvent(event_5);
4276 }
4277 };
4278 ColumnController.prototype.getDisplayedColBefore = function (col) {
4279 var allDisplayedColumns = this.getAllDisplayedColumns();
4280 var oldIndex = allDisplayedColumns.indexOf(col);
4281 if (oldIndex > 0) {
4282 return allDisplayedColumns[oldIndex - 1];
4283 }
4284 else {
4285 return null;
4286 }
4287 };
4288 // used by:
4289 // + rowRenderer -> for navigation
4290 ColumnController.prototype.getDisplayedColAfter = function (col) {
4291 var allDisplayedColumns = this.getAllDisplayedColumns();
4292 var oldIndex = allDisplayedColumns.indexOf(col);
4293 if (oldIndex < (allDisplayedColumns.length - 1)) {
4294 return allDisplayedColumns[oldIndex + 1];
4295 }
4296 else {
4297 return null;
4298 }
4299 };
4300 ColumnController.prototype.getDisplayedGroupAfter = function (columnGroup) {
4301 // pick one col in this group at random
4302 var col = columnGroup.getDisplayedLeafColumns()[0];
4303 var requiredLevel = columnGroup.getOriginalColumnGroup().getLevel();
4304 while (true) {
4305 // keep moving to the next col, until we get to another group
4306 col = this.getDisplayedColAfter(col);
4307 // if no col after, means no group after
4308 if (!col) {
4309 return null;
4310 }
4311 // get group at same level as the one we are looking for
4312 var groupPointer = col.getParent();
4313 while (groupPointer.getOriginalColumnGroup().getLevel() !== requiredLevel) {
4314 groupPointer = groupPointer.getParent();
4315 }
4316 if (groupPointer !== columnGroup) {
4317 return groupPointer;
4318 }
4319 }
4320 };
4321 ColumnController.prototype.isPinningLeft = function () {
4322 return this.displayedLeftColumns.length > 0;
4323 };
4324 ColumnController.prototype.isPinningRight = function () {
4325 return this.displayedRightColumns.length > 0;
4326 };
4327 ColumnController.prototype.getPrimaryAndSecondaryAndAutoColumns = function () {
4328 var result = this.primaryColumns ? this.primaryColumns.slice(0) : [];
4329 if (utils_1.Utils.exists(this.groupAutoColumns)) {
4330 this.groupAutoColumns.forEach(function (col) { return result.push(col); });
4331 }
4332 if (this.secondaryColumnsPresent) {
4333 this.secondaryColumns.forEach(function (column) { return result.push(column); });
4334 }
4335 return result;
4336 };
4337 ColumnController.prototype.createStateItemFromColumn = function (column) {
4338 var rowGroupIndex = column.isRowGroupActive() ? this.rowGroupColumns.indexOf(column) : null;
4339 var pivotIndex = column.isPivotActive() ? this.pivotColumns.indexOf(column) : null;
4340 var aggFunc = column.isValueActive() ? column.getAggFunc() : null;
4341 return {
4342 colId: column.getColId(),
4343 hide: !column.isVisible(),
4344 aggFunc: aggFunc,
4345 width: column.getActualWidth(),
4346 pivotIndex: pivotIndex,
4347 pinned: column.getPinned(),
4348 rowGroupIndex: rowGroupIndex
4349 };
4350 };
4351 ColumnController.prototype.getColumnState = function () {
4352 if (utils_1.Utils.missing(this.primaryColumns)) {
4353 return [];
4354 }
4355 var columnStateList = this.primaryColumns.map(this.createStateItemFromColumn.bind(this));
4356 if (!this.pivotMode) {
4357 this.orderColumnStateList(columnStateList);
4358 }
4359 return columnStateList;
4360 };
4361 ColumnController.prototype.orderColumnStateList = function (columnStateList) {
4362 var gridColumnIds = this.gridColumns.map(function (column) { return column.getColId(); });
4363 columnStateList.sort(function (itemA, itemB) {
4364 var posA = gridColumnIds.indexOf(itemA.colId);
4365 var posB = gridColumnIds.indexOf(itemB.colId);
4366 return posA - posB;
4367 });
4368 };
4369 ColumnController.prototype.resetColumnState = function (source) {
4370 if (source === void 0) { source = "api"; }
4371 // we can't use 'allColumns' as the order might of messed up, so get the primary ordered list
4372 var primaryColumns = this.getColumnsFromTree(this.primaryBalancedTree);
4373 var state = [];
4374 if (primaryColumns) {
4375 primaryColumns.forEach(function (column) {
4376 state.push({
4377 colId: column.getColId(),
4378 aggFunc: column.getColDef().aggFunc,
4379 hide: column.getColDef().hide,
4380 pinned: column.getColDef().pinned,
4381 rowGroupIndex: column.getColDef().rowGroupIndex,
4382 pivotIndex: column.getColDef().pivotIndex,
4383 width: column.getColDef().width
4384 });
4385 });
4386 }
4387 this.setColumnState(state, source);
4388 };
4389 ColumnController.prototype.setColumnState = function (columnState, source) {
4390 var _this = this;
4391 if (source === void 0) { source = "api"; }
4392 if (utils_1.Utils.missingOrEmpty(this.primaryColumns)) {
4393 return false;
4394 }
4395 this.autoGroupsNeedBuilding = true;
4396 // at the end below, this list will have all columns we got no state for
4397 var columnsWithNoState = this.primaryColumns.slice();
4398 this.rowGroupColumns = [];
4399 this.valueColumns = [];
4400 this.pivotColumns = [];
4401 var success = true;
4402 var rowGroupIndexes = {};
4403 var pivotIndexes = {};
4404 if (columnState) {
4405 columnState.forEach(function (stateItem) {
4406 var column = _this.getPrimaryColumn(stateItem.colId);
4407 if (!column) {
4408 console.warn('ag-grid: column ' + stateItem.colId + ' not found');
4409 success = false;
4410 }
4411 else {
4412 _this.syncColumnWithStateItem(column, stateItem, rowGroupIndexes, pivotIndexes, source);
4413 utils_1.Utils.removeFromArray(columnsWithNoState, column);
4414 }
4415 });
4416 }
4417 // anything left over, we got no data for, so add in the column as non-value, non-rowGroup and hidden
4418 columnsWithNoState.forEach(this.syncColumnWithNoState.bind(this));
4419 // sort the lists according to the indexes that were provided
4420 this.rowGroupColumns.sort(this.sortColumnListUsingIndexes.bind(this, rowGroupIndexes));
4421 this.pivotColumns.sort(this.sortColumnListUsingIndexes.bind(this, pivotIndexes));
4422 this.updateGridColumns();
4423 if (columnState) {
4424 var orderOfColIds_1 = columnState.map(function (stateItem) { return stateItem.colId; });
4425 this.gridColumns.sort(function (colA, colB) {
4426 var indexA = orderOfColIds_1.indexOf(colA.getId());
4427 var indexB = orderOfColIds_1.indexOf(colB.getId());
4428 return indexA - indexB;
4429 });
4430 }
4431 this.updateDisplayedColumns(source);
4432 var event = {
4433 type: events_1.Events.EVENT_COLUMN_EVERYTHING_CHANGED,
4434 api: this.gridApi,
4435 columnApi: this.columnApi,
4436 source: source
4437 };
4438 this.eventService.dispatchEvent(event);
4439 return success;
4440 };
4441 ColumnController.prototype.sortColumnListUsingIndexes = function (indexes, colA, colB) {
4442 var indexA = indexes[colA.getId()];
4443 var indexB = indexes[colB.getId()];
4444 return indexA - indexB;
4445 };
4446 ColumnController.prototype.syncColumnWithNoState = function (column, source) {
4447 column.setVisible(false, source);
4448 column.setAggFunc(null);
4449 column.setPinned(null);
4450 column.setRowGroupActive(false, source);
4451 column.setPivotActive(false, source);
4452 column.setValueActive(false, source);
4453 };
4454 ColumnController.prototype.syncColumnWithStateItem = function (column, stateItem, rowGroupIndexes, pivotIndexes, source) {
4455 // following ensures we are left with boolean true or false, eg converts (null, undefined, 0) all to true
4456 column.setVisible(!stateItem.hide, source);
4457 // sets pinned to 'left' or 'right'
4458 column.setPinned(stateItem.pinned);
4459 // if width provided and valid, use it, otherwise stick with the old width
4460 if (stateItem.width >= this.gridOptionsWrapper.getMinColWidth()) {
4461 column.setActualWidth(stateItem.width, source);
4462 }
4463 if (typeof stateItem.aggFunc === 'string') {
4464 column.setAggFunc(stateItem.aggFunc);
4465 column.setValueActive(true, source);
4466 this.valueColumns.push(column);
4467 }
4468 else {
4469 if (utils_1.Utils.exists(stateItem.aggFunc)) {
4470 console.warn('ag-Grid: stateItem.aggFunc must be a string. if using your own aggregation ' +
4471 'functions, register the functions first before using them in get/set state. This is because it is' +
4472 'intended for the column state to be stored and retrieved as simple JSON.');
4473 }
4474 column.setAggFunc(null);
4475 column.setValueActive(false, source);
4476 }
4477 if (typeof stateItem.rowGroupIndex === 'number') {
4478 this.rowGroupColumns.push(column);
4479 column.setRowGroupActive(true, source);
4480 rowGroupIndexes[column.getId()] = stateItem.rowGroupIndex;
4481 }
4482 else {
4483 column.setRowGroupActive(false, source);
4484 }
4485 if (typeof stateItem.pivotIndex === 'number') {
4486 this.pivotColumns.push(column);
4487 column.setPivotActive(true, source);
4488 pivotIndexes[column.getId()] = stateItem.pivotIndex;
4489 }
4490 else {
4491 column.setPivotActive(false, source);
4492 }
4493 };
4494 ColumnController.prototype.getGridColumns = function (keys) {
4495 return this.getColumns(keys, this.getGridColumn.bind(this));
4496 };
4497 ColumnController.prototype.getColumns = function (keys, columnLookupCallback) {
4498 var foundColumns = [];
4499 if (keys) {
4500 keys.forEach(function (key) {
4501 var column = columnLookupCallback(key);
4502 if (column) {
4503 foundColumns.push(column);
4504 }
4505 });
4506 }
4507 return foundColumns;
4508 };
4509 // used by growGroupPanel
4510 ColumnController.prototype.getColumnWithValidation = function (key) {
4511 var column = this.getPrimaryColumn(key);
4512 if (!column) {
4513 console.warn('ag-Grid: could not find column ' + column);
4514 }
4515 return column;
4516 };
4517 ColumnController.prototype.getPrimaryColumn = function (key) {
4518 return this.getColumn(key, this.primaryColumns);
4519 };
4520 ColumnController.prototype.getGridColumn = function (key) {
4521 return this.getColumn(key, this.gridColumns);
4522 };
4523 ColumnController.prototype.getColumn = function (key, columnList) {
4524 if (!key) {
4525 return null;
4526 }
4527 for (var i = 0; i < columnList.length; i++) {
4528 if (this.columnsMatch(columnList[i], key)) {
4529 return columnList[i];
4530 }
4531 }
4532 return this.getAutoColumn(key);
4533 };
4534 ColumnController.prototype.getAutoColumn = function (key) {
4535 var _this = this;
4536 if (!utils_1.Utils.exists(this.groupAutoColumns) || utils_1.Utils.missing(this.groupAutoColumns)) {
4537 return null;
4538 }
4539 return utils_1.Utils.find(this.groupAutoColumns, function (groupCol) {
4540 return _this.columnsMatch(groupCol, key);
4541 });
4542 };
4543 ColumnController.prototype.columnsMatch = function (column, key) {
4544 var columnMatches = column === key;
4545 var colDefMatches = column.getColDef() === key;
4546 var idMatches = column.getColId() == key;
4547 return columnMatches || colDefMatches || idMatches;
4548 };
4549 ColumnController.prototype.getDisplayNameForColumn = function (column, location, includeAggFunc) {
4550 if (includeAggFunc === void 0) { includeAggFunc = false; }
4551 var headerName = this.getHeaderName(column.getColDef(), column, null, null, location);
4552 if (includeAggFunc) {
4553 return this.wrapHeaderNameWithAggFunc(column, headerName);
4554 }
4555 else {
4556 return headerName;
4557 }
4558 };
4559 ColumnController.prototype.getDisplayNameForOriginalColumnGroup = function (columnGroup, originalColumnGroup, location) {
4560 var colGroupDef = originalColumnGroup.getColGroupDef();
4561 if (colGroupDef) {
4562 return this.getHeaderName(colGroupDef, null, columnGroup, originalColumnGroup, location);
4563 }
4564 else {
4565 return null;
4566 }
4567 };
4568 ColumnController.prototype.getDisplayNameForColumnGroup = function (columnGroup, location) {
4569 return this.getDisplayNameForOriginalColumnGroup(columnGroup, columnGroup.getOriginalColumnGroup(), location);
4570 };
4571 // location is where the column is going to appear, ie who is calling us
4572 ColumnController.prototype.getHeaderName = function (colDef, column, columnGroup, originalColumnGroup, location) {
4573 var headerValueGetter = colDef.headerValueGetter;
4574 if (headerValueGetter) {
4575 var params = {
4576 colDef: colDef,
4577 column: column,
4578 columnGroup: columnGroup,
4579 originalColumnGroup: originalColumnGroup,
4580 location: location,
4581 api: this.gridOptionsWrapper.getApi(),
4582 context: this.gridOptionsWrapper.getContext()
4583 };
4584 if (typeof headerValueGetter === 'function') {
4585 // valueGetter is a function, so just call it
4586 return headerValueGetter(params);
4587 }
4588 else if (typeof headerValueGetter === 'string') {
4589 // valueGetter is an expression, so execute the expression
4590 return this.expressionService.evaluate(headerValueGetter, params);
4591 }
4592 else {
4593 console.warn('ag-grid: headerValueGetter must be a function or a string');
4594 return '';
4595 }
4596 }
4597 else if (colDef.headerName != null) {
4598 return colDef.headerName;
4599 }
4600 else if (colDef.field) {
4601 return utils_1.Utils.camelCaseToHumanText(colDef.field);
4602 }
4603 else {
4604 return '';
4605 }
4606 };
4607 /*
4608 private getHeaderGroupName(columnGroup: ColumnGroup): string {
4609 let colGroupDef = columnGroup.getOriginalColumnGroup().getColGroupDef();
4610 let headerValueGetter = colGroupDef.headerValueGetter;
4611
4612 if (headerValueGetter) {
4613 let params = {
4614 columnGroup: columnGroup,
4615 colDef: colGroupDef,
4616 api: this.gridOptionsWrapper.getApi(),
4617 context: this.gridOptionsWrapper.getContext()
4618 };
4619
4620 if (typeof headerValueGetter === 'function') {
4621 // valueGetter is a function, so just call it
4622 return headerValueGetter(params);
4623 } else if (typeof headerValueGetter === 'string') {
4624 // valueGetter is an expression, so execute the expression
4625 return this.expressionService.evaluate(headerValueGetter, params);
4626 } else {
4627 console.warn('ag-grid: headerValueGetter must be a function or a string');
4628 return '';
4629 }
4630 } else {
4631 return colGroupDef.headerName;
4632 }
4633 }
4634 */
4635 ColumnController.prototype.wrapHeaderNameWithAggFunc = function (column, headerName) {
4636 if (this.gridOptionsWrapper.isSuppressAggFuncInHeader()) {
4637 return headerName;
4638 }
4639 // only columns with aggregation active can have aggregations
4640 var pivotValueColumn = column.getColDef().pivotValueColumn;
4641 var pivotActiveOnThisColumn = utils_1.Utils.exists(pivotValueColumn);
4642 var aggFunc = null;
4643 var aggFuncFound;
4644 // otherwise we have a measure that is active, and we are doing aggregation on it
4645 if (pivotActiveOnThisColumn) {
4646 aggFunc = pivotValueColumn.getAggFunc();
4647 aggFuncFound = true;
4648 }
4649 else {
4650 var measureActive = column.isValueActive();
4651 var aggregationPresent = this.pivotMode || !this.isRowGroupEmpty();
4652 if (measureActive && aggregationPresent) {
4653 aggFunc = column.getAggFunc();
4654 aggFuncFound = true;
4655 }
4656 else {
4657 aggFuncFound = false;
4658 }
4659 }
4660 if (aggFuncFound) {
4661 var aggFuncString = (typeof aggFunc === 'string') ? aggFunc : 'func';
4662 var localeTextFunc = this.gridOptionsWrapper.getLocaleTextFunc();
4663 var aggFuncStringTranslated = localeTextFunc(aggFuncString, aggFuncString);
4664 return aggFuncStringTranslated + "(" + headerName + ")";
4665 }
4666 else {
4667 return headerName;
4668 }
4669 };
4670 // returns the group with matching colId and instanceId. If instanceId is missing,
4671 // matches only on the colId.
4672 ColumnController.prototype.getColumnGroup = function (colId, instanceId) {
4673 if (!colId) {
4674 return null;
4675 }
4676 if (colId instanceof columnGroup_1.ColumnGroup) {
4677 return colId;
4678 }
4679 var allColumnGroups = this.getAllDisplayedColumnGroups();
4680 var checkInstanceId = typeof instanceId === 'number';
4681 var result = null;
4682 this.columnUtils.depthFirstAllColumnTreeSearch(allColumnGroups, function (child) {
4683 if (child instanceof columnGroup_1.ColumnGroup) {
4684 var columnGroup = child;
4685 var matched = void 0;
4686 if (checkInstanceId) {
4687 matched = colId === columnGroup.getGroupId() && instanceId === columnGroup.getInstanceId();
4688 }
4689 else {
4690 matched = colId === columnGroup.getGroupId();
4691 }
4692 if (matched) {
4693 result = columnGroup;
4694 }
4695 }
4696 });
4697 return result;
4698 };
4699 ColumnController.prototype.setColumnDefs = function (columnDefs, source) {
4700 if (source === void 0) { source = "api"; }
4701 // always invalidate cache on changing columns, as the column id's for the new columns
4702 // could overlap with the old id's, so the cache would return old values for new columns.
4703 this.valueCache.expire();
4704 // NOTE ==================
4705 // we should be destroying the existing columns and groups if they exist, for example, the original column
4706 // group adds a listener to the columns, it should be also removing the listeners
4707 this.autoGroupsNeedBuilding = true;
4708 var balancedTreeResult = this.balancedColumnTreeBuilder.createBalancedColumnGroups(columnDefs, true);
4709 this.primaryBalancedTree = balancedTreeResult.balancedTree;
4710 this.primaryHeaderRowCount = balancedTreeResult.treeDept + 1;
4711 this.primaryColumns = this.getColumnsFromTree(this.primaryBalancedTree);
4712 this.autoRowHeightColumns = this.primaryColumns.filter(function (col) { return col.getColDef().autoHeight; });
4713 this.extractRowGroupColumns(source);
4714 this.extractPivotColumns(source);
4715 this.createValueColumns(source);
4716 this.updateGridColumns();
4717 this.updateDisplayedColumns(source);
4718 this.checkDisplayedVirtualColumns();
4719 this.ready = true;
4720 var eventEverythingChanged = {
4721 type: events_1.Events.EVENT_COLUMN_EVERYTHING_CHANGED,
4722 api: this.gridApi,
4723 columnApi: this.columnApi,
4724 source: source
4725 };
4726 this.eventService.dispatchEvent(eventEverythingChanged);
4727 var newColumnsLoadedEvent = {
4728 type: events_1.Events.EVENT_NEW_COLUMNS_LOADED,
4729 api: this.gridApi,
4730 columnApi: this.columnApi
4731 };
4732 this.eventService.dispatchEvent(newColumnsLoadedEvent);
4733 };
4734 ColumnController.prototype.isReady = function () {
4735 return this.ready;
4736 };
4737 ColumnController.prototype.extractRowGroupColumns = function (source) {
4738 var _this = this;
4739 this.rowGroupColumns.forEach(function (column) { return column.setRowGroupActive(false, source); });
4740 this.rowGroupColumns = [];
4741 // pull out items with rowGroupIndex
4742 this.primaryColumns.forEach(function (column) {
4743 if (typeof column.getColDef().rowGroupIndex === 'number') {
4744 _this.rowGroupColumns.push(column);
4745 column.setRowGroupActive(true, source);
4746 }
4747 });
4748 // then sort them
4749 this.rowGroupColumns.sort(function (colA, colB) {
4750 return colA.getColDef().rowGroupIndex - colB.getColDef().rowGroupIndex;
4751 });
4752 // now just pull out items rowGroup, they will be added at the end
4753 // after the indexed ones, but in the order the columns appear
4754 this.primaryColumns.forEach(function (column) {
4755 if (column.getColDef().rowGroup) {
4756 // if user already specified rowGroupIndex then we skip it as this col already included
4757 if (_this.rowGroupColumns.indexOf(column) >= 0) {
4758 return;
4759 }
4760 _this.rowGroupColumns.push(column);
4761 column.setRowGroupActive(true, source);
4762 }
4763 });
4764 };
4765 ColumnController.prototype.extractPivotColumns = function (source) {
4766 var _this = this;
4767 this.pivotColumns.forEach(function (column) { return column.setPivotActive(false, source); });
4768 this.pivotColumns = [];
4769 // pull out items with pivotIndex
4770 this.primaryColumns.forEach(function (column) {
4771 if (typeof column.getColDef().pivotIndex === 'number') {
4772 _this.pivotColumns.push(column);
4773 column.setPivotActive(true, source);
4774 }
4775 });
4776 // then sort them
4777 this.pivotColumns.sort(function (colA, colB) {
4778 return colA.getColDef().pivotIndex - colB.getColDef().pivotIndex;
4779 });
4780 // now check the boolean equivalent
4781 this.primaryColumns.forEach(function (column) {
4782 if (column.getColDef().pivot) {
4783 // if user already specified pivotIndex then we skip it as this col already included
4784 if (_this.pivotColumns.indexOf(column) >= 0) {
4785 return;
4786 }
4787 _this.pivotColumns.push(column);
4788 column.setPivotActive(true, source);
4789 }
4790 });
4791 };
4792 ColumnController.prototype.resetColumnGroupState = function (source) {
4793 if (source === void 0) { source = "api"; }
4794 var stateItems = [];
4795 this.columnUtils.depthFirstOriginalTreeSearch(this.primaryBalancedTree, function (child) {
4796 if (child instanceof originalColumnGroup_1.OriginalColumnGroup) {
4797 var groupState = {
4798 groupId: child.getGroupId(),
4799 open: child.getColGroupDef().openByDefault
4800 };
4801 stateItems.push(groupState);
4802 }
4803 });
4804 this.setColumnGroupState(stateItems, source);
4805 };
4806 ColumnController.prototype.getColumnGroupState = function () {
4807 var columnGroupState = [];
4808 this.columnUtils.depthFirstOriginalTreeSearch(this.gridBalancedTree, function (node) {
4809 if (node instanceof originalColumnGroup_1.OriginalColumnGroup) {
4810 var originalColumnGroup = node;
4811 columnGroupState.push({
4812 groupId: originalColumnGroup.getGroupId(),
4813 open: originalColumnGroup.isExpanded()
4814 });
4815 }
4816 });
4817 return columnGroupState;
4818 };
4819 ColumnController.prototype.setColumnGroupState = function (stateItems, source) {
4820 var _this = this;
4821 if (source === void 0) { source = "api"; }
4822 this.columnAnimationService.start();
4823 var impactedGroups = [];
4824 stateItems.forEach(function (stateItem) {
4825 var groupKey = stateItem.groupId;
4826 var newValue = stateItem.open;
4827 var originalColumnGroup = _this.getOriginalColumnGroup(groupKey);
4828 if (!originalColumnGroup) {
4829 return;
4830 }
4831 if (originalColumnGroup.isExpanded() === newValue) {
4832 return;
4833 }
4834 _this.logger.log('columnGroupOpened(' + originalColumnGroup.getGroupId() + ',' + newValue + ')');
4835 originalColumnGroup.setExpanded(newValue);
4836 impactedGroups.push(originalColumnGroup);
4837 });
4838 this.updateGroupsAndDisplayedColumns(source);
4839 impactedGroups.forEach(function (originalColumnGroup) {
4840 var event = {
4841 type: events_1.Events.EVENT_COLUMN_GROUP_OPENED,
4842 columnGroup: originalColumnGroup,
4843 api: _this.gridApi,
4844 columnApi: _this.columnApi
4845 };
4846 _this.eventService.dispatchEvent(event);
4847 });
4848 this.columnAnimationService.finish();
4849 };
4850 // called by headerRenderer - when a header is opened or closed
4851 ColumnController.prototype.setColumnGroupOpened = function (key, newValue, source) {
4852 if (source === void 0) { source = "api"; }
4853 var keyAsString;
4854 if (key instanceof originalColumnGroup_1.OriginalColumnGroup) {
4855 keyAsString = key.getId();
4856 }
4857 else {
4858 keyAsString = key;
4859 }
4860 this.setColumnGroupState([{ groupId: keyAsString, open: newValue }], source);
4861 };
4862 ColumnController.prototype.getOriginalColumnGroup = function (key) {
4863 if (key instanceof originalColumnGroup_1.OriginalColumnGroup) {
4864 return key;
4865 }
4866 if (typeof key !== 'string') {
4867 console.error('ag-Grid: group key must be a string');
4868 }
4869 // otherwise, search for the column group by id
4870 var res = null;
4871 this.columnUtils.depthFirstOriginalTreeSearch(this.gridBalancedTree, function (node) {
4872 if (node instanceof originalColumnGroup_1.OriginalColumnGroup) {
4873 var originalColumnGroup = node;
4874 if (originalColumnGroup.getId() === key) {
4875 res = originalColumnGroup;
4876 }
4877 }
4878 });
4879 return res;
4880 };
4881 ColumnController.prototype.calculateColumnsForDisplay = function () {
4882 var _this = this;
4883 var columnsForDisplay;
4884 if (this.pivotMode && !this.secondaryColumnsPresent) {
4885 // pivot mode is on, but we are not pivoting, so we only
4886 // show columns we are aggregating on
4887 columnsForDisplay = utils_1.Utils.filter(this.gridColumns, function (column) {
4888 var isAutoGroupCol = _this.groupAutoColumns && _this.groupAutoColumns.indexOf(column) >= 0;
4889 var isValueCol = _this.valueColumns && _this.valueColumns.indexOf(column) >= 0;
4890 return isAutoGroupCol || isValueCol;
4891 });
4892 }
4893 else {
4894 // otherwise continue as normal. this can be working on the primary
4895 // or secondary columns, whatever the gridColumns are set to
4896 columnsForDisplay = utils_1.Utils.filter(this.gridColumns, function (column) {
4897 // keep col if a) it's auto-group or b) it's visible
4898 var isAutoGroupCol = _this.groupAutoColumns && _this.groupAutoColumns.indexOf(column) >= 0;
4899 return isAutoGroupCol || column.isVisible();
4900 });
4901 }
4902 return columnsForDisplay;
4903 };
4904 ColumnController.prototype.checkColSpanActiveInCols = function (columns) {
4905 var result = false;
4906 columns.forEach(function (col) {
4907 if (utils_1.Utils.exists(col.getColDef().colSpan)) {
4908 result = true;
4909 }
4910 });
4911 return result;
4912 };
4913 ColumnController.prototype.calculateColumnsForGroupDisplay = function () {
4914 var _this = this;
4915 this.groupDisplayColumns = [];
4916 var checkFunc = function (col) {
4917 var colDef = col.getColDef();
4918 if (colDef && utils_1.Utils.exists(colDef.showRowGroup)) {
4919 _this.groupDisplayColumns.push(col);
4920 }
4921 };
4922 this.gridColumns.forEach(checkFunc);
4923 if (this.groupAutoColumns) {
4924 this.groupAutoColumns.forEach(checkFunc);
4925 }
4926 };
4927 ColumnController.prototype.getGroupDisplayColumns = function () {
4928 return this.groupDisplayColumns;
4929 };
4930 ColumnController.prototype.updateDisplayedColumns = function (source) {
4931 var columnsForDisplay = this.calculateColumnsForDisplay();
4932 this.buildDisplayedTrees(columnsForDisplay);
4933 this.calculateColumnsForGroupDisplay();
4934 // this is also called when a group is opened or closed
4935 this.updateGroupsAndDisplayedColumns(source);
4936 this.setFirstRightAndLastLeftPinned(source);
4937 };
4938 ColumnController.prototype.isSecondaryColumnsPresent = function () {
4939 return this.secondaryColumnsPresent;
4940 };
4941 ColumnController.prototype.setSecondaryColumns = function (colDefs, source) {
4942 if (source === void 0) { source = "api"; }
4943 var newColsPresent = colDefs && colDefs.length > 0;
4944 // if not cols passed, and we had to cols anyway, then do nothing
4945 if (!newColsPresent && !this.secondaryColumnsPresent) {
4946 return;
4947 }
4948 if (newColsPresent) {
4949 this.processSecondaryColumnDefinitions(colDefs);
4950 var balancedTreeResult = this.balancedColumnTreeBuilder.createBalancedColumnGroups(colDefs, false);
4951 this.secondaryBalancedTree = balancedTreeResult.balancedTree;
4952 this.secondaryHeaderRowCount = balancedTreeResult.treeDept + 1;
4953 this.secondaryColumns = this.getColumnsFromTree(this.secondaryBalancedTree);
4954 this.secondaryColumnsPresent = true;
4955 }
4956 else {
4957 this.secondaryBalancedTree = null;
4958 this.secondaryHeaderRowCount = -1;
4959 this.secondaryColumns = null;
4960 this.secondaryColumnsPresent = false;
4961 }
4962 this.updateGridColumns();
4963 this.updateDisplayedColumns(source);
4964 };
4965 ColumnController.prototype.processSecondaryColumnDefinitions = function (colDefs) {
4966 var columnCallback = this.gridOptionsWrapper.getProcessSecondaryColDefFunc();
4967 var groupCallback = this.gridOptionsWrapper.getProcessSecondaryColGroupDefFunc();
4968 if (!columnCallback && !groupCallback) {
4969 return;
4970 }
4971 searchForColDefs(colDefs);
4972 function searchForColDefs(colDefs2) {
4973 colDefs2.forEach(function (abstractColDef) {
4974 var isGroup = utils_1.Utils.exists(abstractColDef.children);
4975 if (isGroup) {
4976 var colGroupDef = abstractColDef;
4977 if (groupCallback) {
4978 groupCallback(colGroupDef);
4979 }
4980 searchForColDefs(colGroupDef.children);
4981 }
4982 else {
4983 var colDef = abstractColDef;
4984 if (columnCallback) {
4985 columnCallback(colDef);
4986 }
4987 }
4988 });
4989 }
4990 };
4991 // called from: setColumnState, setColumnDefs, setSecondaryColumns
4992 ColumnController.prototype.updateGridColumns = function () {
4993 if (this.gridColsArePrimary) {
4994 this.lastPrimaryOrder = this.gridColumns;
4995 }
4996 if (this.secondaryColumns) {
4997 this.gridBalancedTree = this.secondaryBalancedTree.slice();
4998 this.gridHeaderRowCount = this.secondaryHeaderRowCount;
4999 this.gridColumns = this.secondaryColumns.slice();
5000 this.gridColsArePrimary = false;
5001 }
5002 else {
5003 this.gridBalancedTree = this.primaryBalancedTree.slice();
5004 this.gridHeaderRowCount = this.primaryHeaderRowCount;
5005 this.gridColumns = this.primaryColumns.slice();
5006 this.gridColsArePrimary = true;
5007 // updateGridColumns gets called after user adds a row group. we want to maintain the order of the columns
5008 // when this happens (eg if user moved a column) rather than revert back to the original column order.
5009 // likewise if changing in/out of pivot mode, we want to maintain the order of the primary cols
5010 this.orderGridColsLikeLastPrimary();
5011 }
5012 this.addAutoGroupToGridColumns();
5013 this.putFixedColumnsFirst();
5014 this.setupQuickFilterColumns();
5015 this.clearDisplayedColumns();
5016 this.colSpanActive = this.checkColSpanActiveInCols(this.gridColumns);
5017 var event = {
5018 type: events_1.Events.EVENT_GRID_COLUMNS_CHANGED,
5019 api: this.gridApi,
5020 columnApi: this.columnApi
5021 };
5022 this.eventService.dispatchEvent(event);
5023 };
5024 ColumnController.prototype.orderGridColsLikeLastPrimary = function () {
5025 var _this = this;
5026 if (utils_1.Utils.missing(this.lastPrimaryOrder)) {
5027 return;
5028 }
5029 // only do the sort if all columns are accounted for. columns will be not accounted for
5030 // if changing from secondary to primary columns
5031 var oneMissing = false;
5032 this.gridColumns.forEach(function (col) {
5033 if (_this.lastPrimaryOrder.indexOf(col) < 0) {
5034 oneMissing = true;
5035 }
5036 });
5037 if (oneMissing) {
5038 return;
5039 }
5040 this.gridColumns.sort(function (colA, colB) {
5041 var indexA = _this.lastPrimaryOrder.indexOf(colA);
5042 var indexB = _this.lastPrimaryOrder.indexOf(colB);
5043 return indexA - indexB;
5044 });
5045 };
5046 ColumnController.prototype.isPrimaryColumnGroupsPresent = function () {
5047 return this.primaryHeaderRowCount > 1;
5048 };
5049 // if we are using autoGroupCols, then they should be included for quick filter. this covers the
5050 // following scenarios:
5051 // a) user provides 'field' into autoGroupCol of normal grid, so now because a valid col to filter leafs on
5052 // b) using tree data and user depends on autoGroupCol for first col, and we also want to filter on this
5053 // (tree data is a bit different, as parent rows can be filtered on, unlike row grouping)
5054 ColumnController.prototype.setupQuickFilterColumns = function () {
5055 if (this.groupAutoColumns) {
5056 this.columnsForQuickFilter = this.primaryColumns.concat(this.groupAutoColumns);
5057 }
5058 else {
5059 this.columnsForQuickFilter = this.primaryColumns;
5060 }
5061 };
5062 ColumnController.prototype.putFixedColumnsFirst = function () {
5063 var locked = this.gridColumns.filter(function (c) { return c.isLockPosition(); });
5064 var unlocked = this.gridColumns.filter(function (c) { return !c.isLockPosition(); });
5065 this.gridColumns = locked.concat(unlocked);
5066 };
5067 ColumnController.prototype.addAutoGroupToGridColumns = function () {
5068 // add in auto-group here
5069 this.createGroupAutoColumnsIfNeeded();
5070 if (utils_1.Utils.missing(this.groupAutoColumns)) {
5071 return;
5072 }
5073 this.gridColumns = this.groupAutoColumns.concat(this.gridColumns);
5074 var autoColBalancedTree = this.balancedColumnTreeBuilder.createForAutoGroups(this.groupAutoColumns, this.gridBalancedTree);
5075 this.gridBalancedTree = autoColBalancedTree.concat(this.gridBalancedTree);
5076 };
5077 // gets called after we copy down grid columns, to make sure any part of the gui
5078 // that tries to draw, eg the header, it will get empty lists of columns rather
5079 // than stale columns. for example, the header will received gridColumnsChanged
5080 // event, so will try and draw, but it will draw successfully when it acts on the
5081 // virtualColumnsChanged event
5082 ColumnController.prototype.clearDisplayedColumns = function () {
5083 this.displayedLeftColumnTree = [];
5084 this.displayedRightColumnTree = [];
5085 this.displayedCentreColumnTree = [];
5086 this.displayedLeftHeaderRows = {};
5087 this.displayedRightHeaderRows = {};
5088 this.displayedCentreHeaderRows = {};
5089 this.displayedLeftColumns = [];
5090 this.displayedRightColumns = [];
5091 this.displayedCenterColumns = [];
5092 this.allDisplayedColumns = [];
5093 this.allDisplayedVirtualColumns = [];
5094 };
5095 ColumnController.prototype.updateGroupsAndDisplayedColumns = function (source) {
5096 this.updateOpenClosedVisibilityInColumnGroups();
5097 this.updateDisplayedColumnsFromTrees(source);
5098 this.updateVirtualSets();
5099 this.updateBodyWidths();
5100 // this event is picked up by the gui, headerRenderer and rowRenderer, to recalculate what columns to display
5101 var event = {
5102 type: events_1.Events.EVENT_DISPLAYED_COLUMNS_CHANGED,
5103 api: this.gridApi,
5104 columnApi: this.columnApi
5105 };
5106 this.eventService.dispatchEvent(event);
5107 };
5108 ColumnController.prototype.updateDisplayedColumnsFromTrees = function (source) {
5109 this.addToDisplayedColumns(this.displayedLeftColumnTree, this.displayedLeftColumns);
5110 this.addToDisplayedColumns(this.displayedCentreColumnTree, this.displayedCenterColumns);
5111 this.addToDisplayedColumns(this.displayedRightColumnTree, this.displayedRightColumns);
5112 this.setupAllDisplayedColumns();
5113 this.setLeftValues(source);
5114 };
5115 ColumnController.prototype.setupAllDisplayedColumns = function () {
5116 if (this.gridOptionsWrapper.isEnableRtl()) {
5117 this.allDisplayedColumns = this.displayedRightColumns
5118 .concat(this.displayedCenterColumns)
5119 .concat(this.displayedLeftColumns);
5120 }
5121 else {
5122 this.allDisplayedColumns = this.displayedLeftColumns
5123 .concat(this.displayedCenterColumns)
5124 .concat(this.displayedRightColumns);
5125 }
5126 };
5127 // sets the left pixel position of each column
5128 ColumnController.prototype.setLeftValues = function (source) {
5129 this.setLeftValuesOfColumns(source);
5130 this.setLeftValuesOfGroups();
5131 };
5132 ColumnController.prototype.setLeftValuesOfColumns = function (source) {
5133 var _this = this;
5134 // go through each list of displayed columns
5135 var allColumns = this.primaryColumns.slice(0);
5136 // let totalColumnWidth = this.getWidthOfColsInList()
5137 var doingRtl = this.gridOptionsWrapper.isEnableRtl();
5138 [this.displayedLeftColumns, this.displayedRightColumns, this.displayedCenterColumns].forEach(function (columns) {
5139 if (doingRtl) {
5140 // when doing RTL, we start at the top most pixel (ie RHS) and work backwards
5141 var left_1 = _this.getWidthOfColsInList(columns);
5142 columns.forEach(function (column) {
5143 left_1 -= column.getActualWidth();
5144 column.setLeft(left_1, source);
5145 });
5146 }
5147 else {
5148 // otherwise normal LTR, we start at zero
5149 var left_2 = 0;
5150 columns.forEach(function (column) {
5151 column.setLeft(left_2, source);
5152 left_2 += column.getActualWidth();
5153 });
5154 }
5155 utils_1.Utils.removeAllFromArray(allColumns, columns);
5156 });
5157 // items left in allColumns are columns not displayed, so remove the left position. this is
5158 // important for the rows, as if a col is made visible, then taken out, then made visible again,
5159 // we don't want the animation of the cell floating in from the old position, whatever that was.
5160 allColumns.forEach(function (column) {
5161 column.setLeft(null, source);
5162 });
5163 };
5164 ColumnController.prototype.setLeftValuesOfGroups = function () {
5165 // a groups left value is the lest left value of it's children
5166 [this.displayedLeftColumnTree, this.displayedRightColumnTree, this.displayedCentreColumnTree].forEach(function (columns) {
5167 columns.forEach(function (column) {
5168 if (column instanceof columnGroup_1.ColumnGroup) {
5169 var columnGroup = column;
5170 columnGroup.checkLeft();
5171 }
5172 });
5173 });
5174 };
5175 ColumnController.prototype.addToDisplayedColumns = function (displayedColumnTree, displayedColumns) {
5176 displayedColumns.length = 0;
5177 this.columnUtils.depthFirstDisplayedColumnTreeSearch(displayedColumnTree, function (child) {
5178 if (child instanceof column_1.Column) {
5179 displayedColumns.push(child);
5180 }
5181 });
5182 };
5183 ColumnController.prototype.updateDisplayedCenterVirtualColumns = function () {
5184 if (this.suppressColumnVirtualisation) {
5185 // no virtualisation, so don't filter
5186 this.allDisplayedCenterVirtualColumns = this.displayedCenterColumns;
5187 }
5188 else {
5189 // filter out what should be visible
5190 this.allDisplayedCenterVirtualColumns = this.filterOutColumnsWithinViewport();
5191 }
5192 this.allDisplayedVirtualColumns = this.allDisplayedCenterVirtualColumns
5193 .concat(this.displayedLeftColumns)
5194 .concat(this.displayedRightColumns);
5195 // return map of virtual col id's, for easy lookup when building the groups.
5196 // the map will be colId=>true, ie col id's mapping to 'true'.
5197 var result = {};
5198 this.allDisplayedVirtualColumns.forEach(function (col) {
5199 result[col.getId()] = true;
5200 });
5201 return result;
5202 };
5203 ColumnController.prototype.getVirtualHeaderGroupRow = function (type, dept) {
5204 var result;
5205 switch (type) {
5206 case column_1.Column.PINNED_LEFT:
5207 result = this.displayedLeftHeaderRows[dept];
5208 break;
5209 case column_1.Column.PINNED_RIGHT:
5210 result = this.displayedRightHeaderRows[dept];
5211 break;
5212 default:
5213 result = this.displayedCentreHeaderRows[dept];
5214 break;
5215 }
5216 if (utils_1.Utils.missing(result)) {
5217 result = [];
5218 }
5219 return result;
5220 };
5221 ColumnController.prototype.updateDisplayedVirtualGroups = function (virtualColIds) {
5222 // go through each group, see if any of it's cols are displayed, and if yes,
5223 // then this group is included
5224 this.displayedLeftHeaderRows = {};
5225 this.displayedRightHeaderRows = {};
5226 this.displayedCentreHeaderRows = {};
5227 testGroup(this.displayedLeftColumnTree, this.displayedLeftHeaderRows, 0);
5228 testGroup(this.displayedRightColumnTree, this.displayedRightHeaderRows, 0);
5229 testGroup(this.displayedCentreColumnTree, this.displayedCentreHeaderRows, 0);
5230 function testGroup(children, result, dept) {
5231 var returnValue = false;
5232 for (var i = 0; i < children.length; i++) {
5233 // see if this item is within viewport
5234 var child = children[i];
5235 var addThisItem = void 0;
5236 if (child instanceof column_1.Column) {
5237 // for column, test if column is included
5238 addThisItem = virtualColIds[child.getId()] === true;
5239 }
5240 else {
5241 // if group, base decision on children
5242 var columnGroup = child;
5243 addThisItem = testGroup(columnGroup.getDisplayedChildren(), result, dept + 1);
5244 }
5245 if (addThisItem) {
5246 returnValue = true;
5247 if (!result[dept]) {
5248 result[dept] = [];
5249 }
5250 result[dept].push(child);
5251 }
5252 }
5253 return returnValue;
5254 }
5255 };
5256 ColumnController.prototype.updateVirtualSets = function () {
5257 var virtualColIds = this.updateDisplayedCenterVirtualColumns();
5258 this.updateDisplayedVirtualGroups(virtualColIds);
5259 };
5260 ColumnController.prototype.filterOutColumnsWithinViewport = function () {
5261 return utils_1.Utils.filter(this.displayedCenterColumns, this.isColumnInViewport.bind(this));
5262 };
5263 // called from api
5264 ColumnController.prototype.sizeColumnsToFit = function (gridWidth, source) {
5265 var _this = this;
5266 if (source === void 0) { source = "api"; }
5267 // avoid divide by zero
5268 var allDisplayedColumns = this.getAllDisplayedColumns();
5269 if (gridWidth <= 0 || allDisplayedColumns.length === 0) {
5270 return;
5271 }
5272 var colsToNotSpread = utils_1.Utils.filter(allDisplayedColumns, function (column) {
5273 return column.getColDef().suppressSizeToFit === true;
5274 });
5275 var colsToSpread = utils_1.Utils.filter(allDisplayedColumns, function (column) {
5276 return column.getColDef().suppressSizeToFit !== true;
5277 });
5278 // make a copy of the cols that are going to be resized
5279 var colsToFireEventFor = colsToSpread.slice(0);
5280 var finishedResizing = false;
5281 while (!finishedResizing) {
5282 finishedResizing = true;
5283 var availablePixels = gridWidth - this.getWidthOfColsInList(colsToNotSpread);
5284 if (availablePixels <= 0) {
5285 // no width, set everything to minimum
5286 colsToSpread.forEach(function (column) {
5287 column.setMinimum(source);
5288 });
5289 }
5290 else {
5291 var scale = availablePixels / this.getWidthOfColsInList(colsToSpread);
5292 // we set the pixels for the last col based on what's left, as otherwise
5293 // we could be a pixel or two short or extra because of rounding errors.
5294 var pixelsForLastCol = availablePixels;
5295 // backwards through loop, as we are removing items as we go
5296 for (var i = colsToSpread.length - 1; i >= 0; i--) {
5297 var column = colsToSpread[i];
5298 var newWidth = Math.round(column.getActualWidth() * scale);
5299 if (newWidth < column.getMinWidth()) {
5300 column.setMinimum(source);
5301 moveToNotSpread(column);
5302 finishedResizing = false;
5303 }
5304 else if (column.isGreaterThanMax(newWidth)) {
5305 column.setActualWidth(column.getMaxWidth(), source);
5306 moveToNotSpread(column);
5307 finishedResizing = false;
5308 }
5309 else {
5310 var onLastCol = i === 0;
5311 if (onLastCol) {
5312 column.setActualWidth(pixelsForLastCol, source);
5313 }
5314 else {
5315 column.setActualWidth(newWidth, source);
5316 }
5317 }
5318 pixelsForLastCol -= newWidth;
5319 }
5320 }
5321 }
5322 this.setLeftValues(source);
5323 this.updateBodyWidths();
5324 colsToFireEventFor.forEach(function (column) {
5325 var event = {
5326 type: events_1.Events.EVENT_COLUMN_RESIZED,
5327 column: column,
5328 columns: [column],
5329 finished: true,
5330 api: _this.gridApi,
5331 columnApi: _this.columnApi,
5332 source: "sizeColumnsToFit"
5333 };
5334 _this.eventService.dispatchEvent(event);
5335 });
5336 function moveToNotSpread(column) {
5337 utils_1.Utils.removeFromArray(colsToSpread, column);
5338 colsToNotSpread.push(column);
5339 }
5340 };
5341 ColumnController.prototype.buildDisplayedTrees = function (visibleColumns) {
5342 var leftVisibleColumns = utils_1.Utils.filter(visibleColumns, function (column) {
5343 return column.getPinned() === 'left';
5344 });
5345 var rightVisibleColumns = utils_1.Utils.filter(visibleColumns, function (column) {
5346 return column.getPinned() === 'right';
5347 });
5348 var centerVisibleColumns = utils_1.Utils.filter(visibleColumns, function (column) {
5349 return column.getPinned() !== 'left' && column.getPinned() !== 'right';
5350 });
5351 var groupInstanceIdCreator = new groupInstanceIdCreator_1.GroupInstanceIdCreator();
5352 this.displayedLeftColumnTree = this.displayedGroupCreator.createDisplayedGroups(leftVisibleColumns, this.gridBalancedTree, groupInstanceIdCreator, this.displayedLeftColumnTree);
5353 this.displayedRightColumnTree = this.displayedGroupCreator.createDisplayedGroups(rightVisibleColumns, this.gridBalancedTree, groupInstanceIdCreator, this.displayedRightColumnTree);
5354 this.displayedCentreColumnTree = this.displayedGroupCreator.createDisplayedGroups(centerVisibleColumns, this.gridBalancedTree, groupInstanceIdCreator, this.displayedCentreColumnTree);
5355 };
5356 ColumnController.prototype.updateOpenClosedVisibilityInColumnGroups = function () {
5357 var allColumnGroups = this.getAllDisplayedColumnGroups();
5358 this.columnUtils.depthFirstAllColumnTreeSearch(allColumnGroups, function (child) {
5359 if (child instanceof columnGroup_1.ColumnGroup) {
5360 var columnGroup = child;
5361 columnGroup.calculateDisplayedColumns();
5362 }
5363 });
5364 };
5365 ColumnController.prototype.getGroupAutoColumns = function () {
5366 return this.groupAutoColumns;
5367 };
5368 ColumnController.prototype.createGroupAutoColumnsIfNeeded = function () {
5369 if (!this.autoGroupsNeedBuilding) {
5370 return;
5371 }
5372 this.autoGroupsNeedBuilding = false;
5373 // see if we need to insert the default grouping column
5374 var needAutoColumns = (this.rowGroupColumns.length > 0 || this.usingTreeData)
5375 && !this.gridOptionsWrapper.isGroupSuppressAutoColumn()
5376 && !this.gridOptionsWrapper.isGroupUseEntireRow()
5377 && !this.gridOptionsWrapper.isGroupSuppressRow();
5378 if (needAutoColumns) {
5379 this.groupAutoColumns = this.autoGroupColService.createAutoGroupColumns(this.rowGroupColumns);
5380 }
5381 else {
5382 this.groupAutoColumns = null;
5383 }
5384 };
5385 ColumnController.prototype.createValueColumns = function (source) {
5386 this.valueColumns.forEach(function (column) { return column.setValueActive(false, source); });
5387 this.valueColumns = [];
5388 // override with columns that have the aggFunc specified explicitly
5389 for (var i = 0; i < this.primaryColumns.length; i++) {
5390 var column = this.primaryColumns[i];
5391 if (column.getColDef().aggFunc) {
5392 column.setAggFunc(column.getColDef().aggFunc);
5393 this.valueColumns.push(column);
5394 column.setValueActive(true, source);
5395 }
5396 }
5397 };
5398 ColumnController.prototype.getWidthOfColsInList = function (columnList) {
5399 var result = 0;
5400 for (var i = 0; i < columnList.length; i++) {
5401 result += columnList[i].getActualWidth();
5402 }
5403 return result;
5404 };
5405 ColumnController.prototype.getGridBalancedTree = function () {
5406 return this.gridBalancedTree;
5407 };
5408 __decorate([
5409 context_1.Autowired('gridOptionsWrapper'),
5410 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
5411 ], ColumnController.prototype, "gridOptionsWrapper", void 0);
5412 __decorate([
5413 context_1.Autowired('expressionService'),
5414 __metadata("design:type", expressionService_1.ExpressionService)
5415 ], ColumnController.prototype, "expressionService", void 0);
5416 __decorate([
5417 context_1.Autowired('balancedColumnTreeBuilder'),
5418 __metadata("design:type", balancedColumnTreeBuilder_1.BalancedColumnTreeBuilder)
5419 ], ColumnController.prototype, "balancedColumnTreeBuilder", void 0);
5420 __decorate([
5421 context_1.Autowired('displayedGroupCreator'),
5422 __metadata("design:type", displayedGroupCreator_1.DisplayedGroupCreator)
5423 ], ColumnController.prototype, "displayedGroupCreator", void 0);
5424 __decorate([
5425 context_1.Autowired('autoWidthCalculator'),
5426 __metadata("design:type", autoWidthCalculator_1.AutoWidthCalculator)
5427 ], ColumnController.prototype, "autoWidthCalculator", void 0);
5428 __decorate([
5429 context_1.Autowired('eventService'),
5430 __metadata("design:type", eventService_1.EventService)
5431 ], ColumnController.prototype, "eventService", void 0);
5432 __decorate([
5433 context_1.Autowired('columnUtils'),
5434 __metadata("design:type", columnUtils_1.ColumnUtils)
5435 ], ColumnController.prototype, "columnUtils", void 0);
5436 __decorate([
5437 context_1.Autowired('context'),
5438 __metadata("design:type", context_1.Context)
5439 ], ColumnController.prototype, "context", void 0);
5440 __decorate([
5441 context_1.Autowired('columnAnimationService'),
5442 __metadata("design:type", columnAnimationService_1.ColumnAnimationService)
5443 ], ColumnController.prototype, "columnAnimationService", void 0);
5444 __decorate([
5445 context_1.Autowired('autoGroupColService'),
5446 __metadata("design:type", autoGroupColService_1.AutoGroupColService)
5447 ], ColumnController.prototype, "autoGroupColService", void 0);
5448 __decorate([
5449 context_1.Optional('aggFuncService'),
5450 __metadata("design:type", Object)
5451 ], ColumnController.prototype, "aggFuncService", void 0);
5452 __decorate([
5453 context_1.Optional('valueCache'),
5454 __metadata("design:type", valueCache_1.ValueCache)
5455 ], ColumnController.prototype, "valueCache", void 0);
5456 __decorate([
5457 context_1.Autowired('columnApi'),
5458 __metadata("design:type", columnApi_1.ColumnApi)
5459 ], ColumnController.prototype, "columnApi", void 0);
5460 __decorate([
5461 context_1.Autowired('gridApi'),
5462 __metadata("design:type", gridApi_1.GridApi)
5463 ], ColumnController.prototype, "gridApi", void 0);
5464 __decorate([
5465 context_1.PostConstruct,
5466 __metadata("design:type", Function),
5467 __metadata("design:paramtypes", []),
5468 __metadata("design:returntype", void 0)
5469 ], ColumnController.prototype, "init", null);
5470 __decorate([
5471 __param(0, context_1.Qualifier('loggerFactory')),
5472 __metadata("design:type", Function),
5473 __metadata("design:paramtypes", [logger_1.LoggerFactory]),
5474 __metadata("design:returntype", void 0)
5475 ], ColumnController.prototype, "setBeans", null);
5476 ColumnController = __decorate([
5477 context_1.Bean('columnController')
5478 ], ColumnController);
5479 return ColumnController;
5480}());
5481exports.ColumnController = ColumnController;
5482
5483
5484/***/ }),
5485/* 5 */
5486/***/ (function(module, exports, __webpack_require__) {
5487
5488"use strict";
5489/**
5490 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
5491 * @version v18.1.2
5492 * @link http://www.ag-grid.com/
5493 * @license MIT
5494 */
5495
5496Object.defineProperty(exports, "__esModule", { value: true });
5497var eventKeys_1 = __webpack_require__(27);
5498exports.Events = eventKeys_1.Events;
5499
5500
5501/***/ }),
5502/* 6 */
5503/***/ (function(module, exports, __webpack_require__) {
5504
5505"use strict";
5506/**
5507 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
5508 * @version v18.1.2
5509 * @link http://www.ag-grid.com/
5510 * @license MIT
5511 */
5512
5513var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
5514 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
5515 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5516 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5517 return c > 3 && r && Object.defineProperty(target, key, r), r;
5518};
5519var __metadata = (this && this.__metadata) || function (k, v) {
5520 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
5521};
5522Object.defineProperty(exports, "__esModule", { value: true });
5523var csvCreator_1 = __webpack_require__(49);
5524var rowRenderer_1 = __webpack_require__(22);
5525var filterManager_1 = __webpack_require__(20);
5526var columnController_1 = __webpack_require__(4);
5527var selectionController_1 = __webpack_require__(19);
5528var gridOptionsWrapper_1 = __webpack_require__(2);
5529var valueService_1 = __webpack_require__(17);
5530var eventService_1 = __webpack_require__(3);
5531var constants_1 = __webpack_require__(9);
5532var context_1 = __webpack_require__(0);
5533var gridCore_1 = __webpack_require__(44);
5534var sortController_1 = __webpack_require__(26);
5535var focusedCellController_1 = __webpack_require__(24);
5536var gridCell_1 = __webpack_require__(25);
5537var utils_1 = __webpack_require__(1);
5538var cellRendererFactory_1 = __webpack_require__(57);
5539var cellEditorFactory_1 = __webpack_require__(56);
5540var paginationProxy_1 = __webpack_require__(31);
5541var immutableService_1 = __webpack_require__(107);
5542var valueCache_1 = __webpack_require__(35);
5543var alignedGridsService_1 = __webpack_require__(60);
5544var pinnedRowModel_1 = __webpack_require__(32);
5545var animationFrameService_1 = __webpack_require__(39);
5546var GridApi = (function () {
5547 function GridApi() {
5548 this.detailGridInfoMap = {};
5549 /*
5550 Taking these out, as we want to reconsider how we register components
5551
5552 public addCellRenderer(key: string, cellRenderer: {new(): ICellRenderer} | ICellRendererFunc): void {
5553 this.cellRendererFactory.addCellRenderer(key, cellRenderer);
5554 }
5555
5556 public addCellEditor(key: string, cellEditor: {new(): ICellEditor}): void {
5557 this.cellEditorFactory.addCellEditor(key, cellEditor);
5558 }*/
5559 }
5560 GridApi.prototype.registerGridComp = function (gridPanel) {
5561 this.gridPanel = gridPanel;
5562 };
5563 GridApi.prototype.registerHeaderRootComp = function (headerRootComp) {
5564 this.headerRootComp = headerRootComp;
5565 };
5566 GridApi.prototype.init = function () {
5567 switch (this.rowModel.getType()) {
5568 case constants_1.Constants.ROW_MODEL_TYPE_CLIENT_SIDE:
5569 this.clientSideRowModel = this.rowModel;
5570 break;
5571 case constants_1.Constants.ROW_MODEL_TYPE_INFINITE:
5572 this.infinitePageRowModel = this.rowModel;
5573 break;
5574 case constants_1.Constants.ROW_MODEL_TYPE_SERVER_SIDE:
5575 this.serverSideRowModel = this.rowModel;
5576 break;
5577 }
5578 };
5579 /** Used internally by grid. Not intended to be used by the client. Interface may change between releases. */
5580 GridApi.prototype.__getAlignedGridService = function () {
5581 return this.alignedGridsService;
5582 };
5583 GridApi.prototype.addDetailGridInfo = function (id, gridInfo) {
5584 this.detailGridInfoMap[id] = gridInfo;
5585 };
5586 GridApi.prototype.removeDetailGridInfo = function (id) {
5587 this.detailGridInfoMap[id] = undefined;
5588 };
5589 GridApi.prototype.getDetailGridInfo = function (id) {
5590 return this.detailGridInfoMap[id];
5591 };
5592 GridApi.prototype.forEachDetailGridInfo = function (callback) {
5593 var index = 0;
5594 utils_1.Utils.iterateObject(this.detailGridInfoMap, function (id, gridInfo) {
5595 // check for undefined, as old references will still be lying around
5596 if (utils_1.Utils.exists(gridInfo)) {
5597 callback(gridInfo, index);
5598 index++;
5599 }
5600 });
5601 };
5602 GridApi.prototype.getDataAsCsv = function (params) {
5603 return this.csvCreator.getDataAsCsv(params);
5604 };
5605 GridApi.prototype.exportDataAsCsv = function (params) {
5606 this.csvCreator.exportDataAsCsv(params);
5607 };
5608 GridApi.prototype.getDataAsExcel = function (params) {
5609 if (!this.excelCreator) {
5610 console.warn('ag-Grid: Excel export is only available in ag-Grid Enterprise');
5611 }
5612 return this.excelCreator.getDataAsExcelXml(params);
5613 };
5614 GridApi.prototype.exportDataAsExcel = function (params) {
5615 if (!this.excelCreator) {
5616 console.warn('ag-Grid: Excel export is only available in ag-Grid Enterprise');
5617 }
5618 this.excelCreator.exportDataAsExcel(params);
5619 };
5620 // DEPRECATED
5621 GridApi.prototype.setEnterpriseDatasource = function (datasource) {
5622 console.warn("ag-grid: since version 18.x, api.setEnterpriseDatasource() should be replaced with api.setServerSideDatasource()");
5623 this.setServerSideDatasource(datasource);
5624 };
5625 GridApi.prototype.setServerSideDatasource = function (datasource) {
5626 if (this.gridOptionsWrapper.isRowModelServerSide()) {
5627 // should really have an IEnterpriseRowModel interface, so we are not casting to any
5628 this.rowModel.setDatasource(datasource);
5629 }
5630 else {
5631 console.warn("ag-Grid: you can only use an enterprise datasource when gridOptions.rowModelType is '" + constants_1.Constants.ROW_MODEL_TYPE_SERVER_SIDE + "'");
5632 }
5633 };
5634 GridApi.prototype.setDatasource = function (datasource) {
5635 if (this.gridOptionsWrapper.isRowModelInfinite()) {
5636 this.rowModel.setDatasource(datasource);
5637 }
5638 else {
5639 console.warn("ag-Grid: you can only use a datasource when gridOptions.rowModelType is '" + constants_1.Constants.ROW_MODEL_TYPE_INFINITE + "'");
5640 }
5641 };
5642 GridApi.prototype.setViewportDatasource = function (viewportDatasource) {
5643 if (this.gridOptionsWrapper.isRowModelViewport()) {
5644 // this is bad coding, because it's using an interface that's exposed in the enterprise.
5645 // really we should create an interface in the core for viewportDatasource and let
5646 // the enterprise implement it, rather than casting to 'any' here
5647 this.rowModel.setViewportDatasource(viewportDatasource);
5648 }
5649 else {
5650 console.warn("ag-Grid: you can only use a viewport datasource when gridOptions.rowModelType is '" + constants_1.Constants.ROW_MODEL_TYPE_VIEWPORT + "'");
5651 }
5652 };
5653 GridApi.prototype.setRowData = function (rowData) {
5654 if (this.gridOptionsWrapper.isRowModelDefault()) {
5655 if (this.gridOptionsWrapper.isDeltaRowDataMode()) {
5656 var _a = this.immutableService.createTransactionForRowData(rowData), transaction = _a[0], orderIdMap = _a[1];
5657 this.clientSideRowModel.updateRowData(transaction, orderIdMap);
5658 }
5659 else {
5660 this.selectionController.reset();
5661 this.clientSideRowModel.setRowData(rowData);
5662 }
5663 }
5664 else {
5665 console.log('cannot call setRowData unless using normal row model');
5666 }
5667 };
5668 // DEPRECATED
5669 GridApi.prototype.setFloatingTopRowData = function (rows) {
5670 console.warn('ag-Grid: since v12, api.setFloatingTopRowData() is now api.setPinnedTopRowData()');
5671 this.setPinnedTopRowData(rows);
5672 };
5673 // DEPRECATED
5674 GridApi.prototype.setFloatingBottomRowData = function (rows) {
5675 console.warn('ag-Grid: since v12, api.setFloatingBottomRowData() is now api.setPinnedBottomRowData()');
5676 this.setPinnedBottomRowData(rows);
5677 };
5678 // DEPRECATED
5679 GridApi.prototype.getFloatingTopRowCount = function () {
5680 console.warn('ag-Grid: since v12, api.getFloatingTopRowCount() is now api.getPinnedTopRowCount()');
5681 return this.getPinnedTopRowCount();
5682 };
5683 // DEPRECATED
5684 GridApi.prototype.getFloatingBottomRowCount = function () {
5685 console.warn('ag-Grid: since v12, api.getFloatingBottomRowCount() is now api.getPinnedBottomRowCount()');
5686 return this.getPinnedBottomRowCount();
5687 };
5688 // DEPRECATED
5689 GridApi.prototype.getFloatingTopRow = function (index) {
5690 console.warn('ag-Grid: since v12, api.getFloatingTopRow() is now api.getPinnedTopRow()');
5691 return this.getPinnedTopRow(index);
5692 };
5693 // DEPRECATED
5694 GridApi.prototype.getFloatingBottomRow = function (index) {
5695 console.warn('ag-Grid: since v12, api.getFloatingBottomRow() is now api.getPinnedBottomRow()');
5696 return this.getPinnedBottomRow(index);
5697 };
5698 GridApi.prototype.setPinnedTopRowData = function (rows) {
5699 this.pinnedRowModel.setPinnedTopRowData(rows);
5700 };
5701 GridApi.prototype.setPinnedBottomRowData = function (rows) {
5702 this.pinnedRowModel.setPinnedBottomRowData(rows);
5703 };
5704 GridApi.prototype.getPinnedTopRowCount = function () {
5705 return this.pinnedRowModel.getPinnedTopRowCount();
5706 };
5707 GridApi.prototype.getPinnedBottomRowCount = function () {
5708 return this.pinnedRowModel.getPinnedBottomRowCount();
5709 };
5710 GridApi.prototype.getPinnedTopRow = function (index) {
5711 return this.pinnedRowModel.getPinnedTopRow(index);
5712 };
5713 GridApi.prototype.getPinnedBottomRow = function (index) {
5714 return this.pinnedRowModel.getPinnedBottomRow(index);
5715 };
5716 GridApi.prototype.setColumnDefs = function (colDefs, source) {
5717 if (source === void 0) { source = "api"; }
5718 this.columnController.setColumnDefs(colDefs, source);
5719 };
5720 GridApi.prototype.expireValueCache = function () {
5721 this.valueCache.expire();
5722 };
5723 GridApi.prototype.getVerticalPixelRange = function () {
5724 return this.gridPanel.getVScrollPosition();
5725 };
5726 GridApi.prototype.refreshToolPanel = function () {
5727 if (this.toolPanelComp) {
5728 this.toolPanelComp.refresh();
5729 }
5730 };
5731 GridApi.prototype.refreshCells = function (params) {
5732 if (params === void 0) { params = {}; }
5733 if (Array.isArray(params)) {
5734 // the old version of refreshCells() took an array of rowNodes for the first argument
5735 console.warn('since ag-Grid v11.1, refreshCells() now takes parameters, please see the documentation.');
5736 return;
5737 }
5738 this.rowRenderer.refreshCells(params);
5739 };
5740 GridApi.prototype.flashCells = function (params) {
5741 if (params === void 0) { params = {}; }
5742 this.rowRenderer.flashCells(params);
5743 };
5744 GridApi.prototype.redrawRows = function (params) {
5745 if (params === void 0) { params = {}; }
5746 if (params && params.rowNodes) {
5747 this.rowRenderer.redrawRows(params.rowNodes);
5748 }
5749 else {
5750 this.rowRenderer.redrawAfterModelUpdate();
5751 }
5752 };
5753 GridApi.prototype.timeFullRedraw = function (count) {
5754 if (count === void 0) { count = 1; }
5755 var iterationCount = 0;
5756 var totalProcessing = 0;
5757 var totalReflow = 0;
5758 var that = this;
5759 doOneIteration();
5760 function doOneIteration() {
5761 var start = (new Date()).getTime();
5762 that.rowRenderer.redrawAfterModelUpdate();
5763 var endProcessing = (new Date()).getTime();
5764 setTimeout(function () {
5765 var endReflow = (new Date()).getTime();
5766 var durationProcessing = endProcessing - start;
5767 var durationReflow = endReflow - endProcessing;
5768 console.log('duration: processing = ' + durationProcessing + 'ms, reflow = ' + durationReflow + 'ms');
5769 iterationCount++;
5770 totalProcessing += durationProcessing;
5771 totalReflow += durationReflow;
5772 if (iterationCount < count) {
5773 // wait for 1s between tests
5774 setTimeout(doOneIteration, 1000);
5775 }
5776 else {
5777 finish();
5778 }
5779 }, 0);
5780 }
5781 function finish() {
5782 console.log('tests complete. iteration count = ' + iterationCount);
5783 console.log('average processing = ' + (totalProcessing / iterationCount) + 'ms');
5784 console.log('average reflow = ' + (totalReflow / iterationCount) + 'ms');
5785 }
5786 };
5787 // *** deprecated
5788 GridApi.prototype.refreshView = function () {
5789 console.warn('ag-Grid: since v11.1, refreshView() is deprecated, please call refreshCells() or redrawRows() instead');
5790 this.redrawRows();
5791 };
5792 // *** deprecated
5793 GridApi.prototype.refreshRows = function (rowNodes) {
5794 console.warn('since ag-Grid v11.1, refreshRows() is deprecated, please use refreshCells({rowNodes: rows}) or redrawRows({rowNodes: rows}) instead');
5795 this.refreshCells({ rowNodes: rowNodes });
5796 };
5797 // *** deprecated
5798 GridApi.prototype.rowDataChanged = function (rows) {
5799 console.log('ag-Grid: rowDataChanged is deprecated, either call refreshView() to refresh everything, or call rowNode.setRowData(newData) to set value on a particular node');
5800 this.redrawRows();
5801 };
5802 // *** deprecated
5803 GridApi.prototype.softRefreshView = function () {
5804 console.error('ag-Grid: since v16, softRefreshView() is no longer supported. Please check the documentation on how to refresh.');
5805 };
5806 // *** deprecated
5807 GridApi.prototype.refreshGroupRows = function () {
5808 console.warn('ag-Grid: since v11.1, refreshGroupRows() is no longer supported, call refreshCells() instead. ' +
5809 'Because refreshCells() now does dirty checking, it will only refresh cells that have changed, so it should ' +
5810 'not be necessary to only refresh the group rows.');
5811 this.refreshCells();
5812 };
5813 GridApi.prototype.setFunctionsReadOnly = function (readOnly) {
5814 this.gridOptionsWrapper.setProperty('functionsReadOnly', readOnly);
5815 };
5816 GridApi.prototype.refreshHeader = function () {
5817 this.headerRootComp.refreshHeader();
5818 this.gridPanel.setBodyAndHeaderHeights();
5819 };
5820 GridApi.prototype.isAnyFilterPresent = function () {
5821 return this.filterManager.isAnyFilterPresent();
5822 };
5823 GridApi.prototype.isAdvancedFilterPresent = function () {
5824 return this.filterManager.isAdvancedFilterPresent();
5825 };
5826 GridApi.prototype.isQuickFilterPresent = function () {
5827 return this.filterManager.isQuickFilterPresent();
5828 };
5829 GridApi.prototype.getModel = function () {
5830 return this.rowModel;
5831 };
5832 GridApi.prototype.onGroupExpandedOrCollapsed = function (deprecated_refreshFromIndex) {
5833 if (utils_1.Utils.missing(this.clientSideRowModel)) {
5834 console.log('ag-Grid: cannot call onGroupExpandedOrCollapsed unless using normal row model');
5835 }
5836 if (utils_1.Utils.exists(deprecated_refreshFromIndex)) {
5837 console.log('ag-Grid: api.onGroupExpandedOrCollapsed - refreshFromIndex parameter is no longer used, the grid will refresh all rows');
5838 }
5839 // we don't really want the user calling this if one one rowNode was expanded, instead they should be
5840 // calling rowNode.setExpanded(boolean) - this way we do a 'keepRenderedRows=false' so that the whole
5841 // grid gets refreshed again - otherwise the row with the rowNodes that were changed won't get updated,
5842 // and thus the expand icon in the group cell won't get 'opened' or 'closed'.
5843 this.clientSideRowModel.refreshModel({ step: constants_1.Constants.STEP_MAP });
5844 };
5845 GridApi.prototype.refreshInMemoryRowModel = function (step) {
5846 console.warn("ag-grid: since version 18.x, api.refreshInMemoryRowModel() should be replaced with api.refreshClientSideRowModel()");
5847 this.refreshClientSideRowModel(step);
5848 };
5849 GridApi.prototype.refreshClientSideRowModel = function (step) {
5850 if (utils_1.Utils.missing(this.clientSideRowModel)) {
5851 console.log('cannot call refreshClientSideRowModel unless using normal row model');
5852 }
5853 var paramsStep = constants_1.Constants.STEP_EVERYTHING;
5854 var stepsMapped = {
5855 group: constants_1.Constants.STEP_EVERYTHING,
5856 filter: constants_1.Constants.STEP_FILTER,
5857 map: constants_1.Constants.STEP_MAP,
5858 aggregate: constants_1.Constants.STEP_AGGREGATE,
5859 sort: constants_1.Constants.STEP_SORT,
5860 pivot: constants_1.Constants.STEP_PIVOT
5861 };
5862 if (utils_1.Utils.exists(step)) {
5863 paramsStep = stepsMapped[step];
5864 }
5865 if (utils_1.Utils.missing(paramsStep)) {
5866 console.error("ag-Grid: invalid step " + step + ", available steps are " + Object.keys(stepsMapped).join(', '));
5867 return;
5868 }
5869 var modelParams = {
5870 step: paramsStep,
5871 keepRenderedRows: true,
5872 animate: true,
5873 keepEditingRows: true
5874 };
5875 this.clientSideRowModel.refreshModel(modelParams);
5876 };
5877 GridApi.prototype.isAnimationFrameQueueEmpty = function () {
5878 return this.animationFrameService.isQueueEmpty();
5879 };
5880 GridApi.prototype.getRowNode = function (id) {
5881 return this.rowModel.getRowNode(id);
5882 };
5883 GridApi.prototype.expandAll = function () {
5884 if (utils_1.Utils.missing(this.clientSideRowModel)) {
5885 console.warn('ag-Grid: cannot call expandAll unless using normal row model');
5886 return;
5887 }
5888 this.clientSideRowModel.expandOrCollapseAll(true);
5889 };
5890 GridApi.prototype.collapseAll = function () {
5891 if (utils_1.Utils.missing(this.clientSideRowModel)) {
5892 console.warn('ag-Grid: cannot call collapseAll unless using normal row model');
5893 return;
5894 }
5895 this.clientSideRowModel.expandOrCollapseAll(false);
5896 };
5897 GridApi.prototype.addVirtualRowListener = function (eventName, rowIndex, callback) {
5898 if (typeof eventName !== 'string') {
5899 console.log('ag-Grid: addVirtualRowListener is deprecated, please use addRenderedRowListener.');
5900 }
5901 this.addRenderedRowListener(eventName, rowIndex, callback);
5902 };
5903 GridApi.prototype.addRenderedRowListener = function (eventName, rowIndex, callback) {
5904 if (eventName === 'virtualRowSelected') {
5905 console.log('ag-Grid: event virtualRowSelected is deprecated, to register for individual row ' +
5906 'selection events, add a listener directly to the row node.');
5907 }
5908 this.rowRenderer.addRenderedRowListener(eventName, rowIndex, callback);
5909 };
5910 GridApi.prototype.setQuickFilter = function (newFilter) {
5911 this.filterManager.setQuickFilter(newFilter);
5912 };
5913 GridApi.prototype.selectIndex = function (index, tryMulti, suppressEvents) {
5914 console.log('ag-Grid: do not use api for selection, call node.setSelected(value) instead');
5915 if (suppressEvents) {
5916 console.log('ag-Grid: suppressEvents is no longer supported, stop listening for the event if you no longer want it');
5917 }
5918 this.selectionController.selectIndex(index, tryMulti);
5919 };
5920 GridApi.prototype.deselectIndex = function (index, suppressEvents) {
5921 if (suppressEvents === void 0) { suppressEvents = false; }
5922 console.log('ag-Grid: do not use api for selection, call node.setSelected(value) instead');
5923 if (suppressEvents) {
5924 console.log('ag-Grid: suppressEvents is no longer supported, stop listening for the event if you no longer want it');
5925 }
5926 this.selectionController.deselectIndex(index);
5927 };
5928 GridApi.prototype.selectNode = function (node, tryMulti, suppressEvents) {
5929 if (tryMulti === void 0) { tryMulti = false; }
5930 if (suppressEvents === void 0) { suppressEvents = false; }
5931 console.log('ag-Grid: API for selection is deprecated, call node.setSelected(value) instead');
5932 if (suppressEvents) {
5933 console.log('ag-Grid: suppressEvents is no longer supported, stop listening for the event if you no longer want it');
5934 }
5935 node.setSelectedParams({ newValue: true, clearSelection: !tryMulti });
5936 };
5937 GridApi.prototype.deselectNode = function (node, suppressEvents) {
5938 if (suppressEvents === void 0) { suppressEvents = false; }
5939 console.log('ag-Grid: API for selection is deprecated, call node.setSelected(value) instead');
5940 if (suppressEvents) {
5941 console.log('ag-Grid: suppressEvents is no longer supported, stop listening for the event if you no longer want it');
5942 }
5943 node.setSelectedParams({ newValue: false });
5944 };
5945 GridApi.prototype.selectAll = function () {
5946 this.selectionController.selectAllRowNodes();
5947 };
5948 GridApi.prototype.deselectAll = function () {
5949 this.selectionController.deselectAllRowNodes();
5950 };
5951 GridApi.prototype.selectAllFiltered = function () {
5952 this.selectionController.selectAllRowNodes(true);
5953 };
5954 GridApi.prototype.deselectAllFiltered = function () {
5955 this.selectionController.deselectAllRowNodes(true);
5956 };
5957 GridApi.prototype.recomputeAggregates = function () {
5958 if (utils_1.Utils.missing(this.clientSideRowModel)) {
5959 console.warn('cannot call recomputeAggregates unless using normal row model');
5960 }
5961 console.warn("recomputeAggregates is deprecated, please call api.refreshClientSideRowModel('aggregate') instead");
5962 this.clientSideRowModel.refreshModel({ step: constants_1.Constants.STEP_AGGREGATE });
5963 };
5964 GridApi.prototype.sizeColumnsToFit = function () {
5965 this.gridPanel.sizeColumnsToFit();
5966 };
5967 GridApi.prototype.showLoadingOverlay = function () {
5968 this.gridPanel.showLoadingOverlay();
5969 };
5970 GridApi.prototype.showNoRowsOverlay = function () {
5971 this.gridPanel.showNoRowsOverlay();
5972 };
5973 GridApi.prototype.hideOverlay = function () {
5974 this.gridPanel.hideOverlay();
5975 };
5976 GridApi.prototype.isNodeSelected = function (node) {
5977 console.log('ag-Grid: no need to call api.isNodeSelected(), just call node.isSelected() instead');
5978 return node.isSelected();
5979 };
5980 GridApi.prototype.getSelectedNodesById = function () {
5981 console.error('ag-Grid: since version 3.4, getSelectedNodesById no longer exists, use getSelectedNodes() instead');
5982 return null;
5983 };
5984 GridApi.prototype.getSelectedNodes = function () {
5985 return this.selectionController.getSelectedNodes();
5986 };
5987 GridApi.prototype.getSelectedRows = function () {
5988 return this.selectionController.getSelectedRows();
5989 };
5990 GridApi.prototype.getBestCostNodeSelection = function () {
5991 return this.selectionController.getBestCostNodeSelection();
5992 };
5993 GridApi.prototype.getRenderedNodes = function () {
5994 return this.rowRenderer.getRenderedNodes();
5995 };
5996 GridApi.prototype.ensureColIndexVisible = function (index) {
5997 console.warn('ag-Grid: ensureColIndexVisible(index) no longer supported, use ensureColumnVisible(colKey) instead.');
5998 };
5999 GridApi.prototype.ensureColumnVisible = function (key) {
6000 this.gridPanel.ensureColumnVisible(key);
6001 };
6002 // Valid values for position are bottom, middle and top
6003 GridApi.prototype.ensureIndexVisible = function (index, position) {
6004 this.gridPanel.ensureIndexVisible(index, position);
6005 };
6006 // Valid values for position are bottom, middle and top
6007 GridApi.prototype.ensureNodeVisible = function (comparator, position) {
6008 this.gridCore.ensureNodeVisible(comparator, position);
6009 };
6010 GridApi.prototype.forEachLeafNode = function (callback) {
6011 if (utils_1.Utils.missing(this.clientSideRowModel)) {
6012 console.log('cannot call forEachNode unless using normal row model');
6013 }
6014 this.clientSideRowModel.forEachLeafNode(callback);
6015 };
6016 GridApi.prototype.forEachNode = function (callback) {
6017 this.rowModel.forEachNode(callback);
6018 };
6019 GridApi.prototype.forEachNodeAfterFilter = function (callback) {
6020 if (utils_1.Utils.missing(this.clientSideRowModel)) {
6021 console.log('cannot call forEachNodeAfterFilter unless using normal row model');
6022 }
6023 this.clientSideRowModel.forEachNodeAfterFilter(callback);
6024 };
6025 GridApi.prototype.forEachNodeAfterFilterAndSort = function (callback) {
6026 if (utils_1.Utils.missing(this.clientSideRowModel)) {
6027 console.log('cannot call forEachNodeAfterFilterAndSort unless using normal row model');
6028 }
6029 this.clientSideRowModel.forEachNodeAfterFilterAndSort(callback);
6030 };
6031 GridApi.prototype.getFilterApiForColDef = function (colDef) {
6032 console.warn('ag-grid API method getFilterApiForColDef deprecated, use getFilterApi instead');
6033 return this.getFilterInstance(colDef);
6034 };
6035 GridApi.prototype.getFilterInstance = function (key) {
6036 var column = this.columnController.getPrimaryColumn(key);
6037 if (column) {
6038 return this.filterManager.getFilterComponent(column).resolveNow(null, function (filterComp) { return filterComp; });
6039 }
6040 };
6041 GridApi.prototype.getFilterApi = function (key) {
6042 console.warn('ag-Grid: getFilterApi is deprecated, use getFilterInstance instead');
6043 return this.getFilterInstance(key);
6044 };
6045 GridApi.prototype.destroyFilter = function (key) {
6046 var column = this.columnController.getPrimaryColumn(key);
6047 if (column) {
6048 return this.filterManager.destroyFilter(column, "filterDestroyed");
6049 }
6050 };
6051 GridApi.prototype.getColumnDef = function (key) {
6052 var column = this.columnController.getPrimaryColumn(key);
6053 if (column) {
6054 return column.getColDef();
6055 }
6056 else {
6057 return null;
6058 }
6059 };
6060 GridApi.prototype.onFilterChanged = function () {
6061 this.filterManager.onFilterChanged();
6062 };
6063 GridApi.prototype.onSortChanged = function () {
6064 this.sortController.onSortChanged();
6065 };
6066 GridApi.prototype.setSortModel = function (sortModel, source) {
6067 if (source === void 0) { source = "api"; }
6068 this.sortController.setSortModel(sortModel, source);
6069 };
6070 GridApi.prototype.getSortModel = function () {
6071 return this.sortController.getSortModel();
6072 };
6073 GridApi.prototype.setFilterModel = function (model) {
6074 this.filterManager.setFilterModel(model);
6075 };
6076 GridApi.prototype.getFilterModel = function () {
6077 return this.filterManager.getFilterModel();
6078 };
6079 GridApi.prototype.getFocusedCell = function () {
6080 return this.focusedCellController.getFocusedCell();
6081 };
6082 GridApi.prototype.clearFocusedCell = function () {
6083 return this.focusedCellController.clearFocusedCell();
6084 };
6085 GridApi.prototype.setFocusedCell = function (rowIndex, colKey, floating) {
6086 this.focusedCellController.setFocusedCell(rowIndex, colKey, floating, true);
6087 };
6088 GridApi.prototype.setSuppressRowDrag = function (value) {
6089 this.gridOptionsWrapper.setProperty(gridOptionsWrapper_1.GridOptionsWrapper.PROP_SUPPRESS_ROW_DRAG, value);
6090 };
6091 GridApi.prototype.setHeaderHeight = function (headerHeight) {
6092 this.gridOptionsWrapper.setProperty(gridOptionsWrapper_1.GridOptionsWrapper.PROP_HEADER_HEIGHT, headerHeight);
6093 this.doLayout();
6094 };
6095 GridApi.prototype.setGridAutoHeight = function (gridAutoHeight) {
6096 this.gridOptionsWrapper.setProperty(gridOptionsWrapper_1.GridOptionsWrapper.PROP_GRID_AUTO_HEIGHT, gridAutoHeight);
6097 };
6098 GridApi.prototype.getPreferredWidth = function () {
6099 return this.gridCore.getPreferredWidth();
6100 };
6101 GridApi.prototype.setGroupHeaderHeight = function (headerHeight) {
6102 this.gridOptionsWrapper.setProperty(gridOptionsWrapper_1.GridOptionsWrapper.PROP_GROUP_HEADER_HEIGHT, headerHeight);
6103 this.doLayout();
6104 };
6105 GridApi.prototype.setFloatingFiltersHeight = function (headerHeight) {
6106 this.gridOptionsWrapper.setProperty(gridOptionsWrapper_1.GridOptionsWrapper.PROP_FLOATING_FILTERS_HEIGHT, headerHeight);
6107 this.doLayout();
6108 };
6109 GridApi.prototype.setPivotGroupHeaderHeight = function (headerHeight) {
6110 this.gridOptionsWrapper.setProperty(gridOptionsWrapper_1.GridOptionsWrapper.PROP_PIVOT_GROUP_HEADER_HEIGHT, headerHeight);
6111 this.doLayout();
6112 };
6113 GridApi.prototype.setPivotHeaderHeight = function (headerHeight) {
6114 this.gridOptionsWrapper.setProperty(gridOptionsWrapper_1.GridOptionsWrapper.PROP_PIVOT_HEADER_HEIGHT, headerHeight);
6115 this.doLayout();
6116 };
6117 GridApi.prototype.showToolPanel = function (show) {
6118 this.gridCore.showToolPanel(show);
6119 };
6120 GridApi.prototype.setSuppressClipboardPaste = function (value) {
6121 this.gridOptionsWrapper.setProperty(gridOptionsWrapper_1.GridOptionsWrapper.PROP_SUPPRESS_CLIPBOARD_PASTE, value);
6122 };
6123 GridApi.prototype.isToolPanelShowing = function () {
6124 return this.gridCore.isToolPanelShowing();
6125 };
6126 GridApi.prototype.doLayout = function () {
6127 this.gridPanel.checkViewportAndScrolls();
6128 };
6129 GridApi.prototype.resetRowHeights = function () {
6130 if (utils_1.Utils.exists(this.clientSideRowModel)) {
6131 this.clientSideRowModel.resetRowHeights();
6132 }
6133 };
6134 GridApi.prototype.setGroupRemoveSingleChildren = function (value) {
6135 this.gridOptionsWrapper.setProperty(gridOptionsWrapper_1.GridOptionsWrapper.PROP_GROUP_REMOVE_SINGLE_CHILDREN, value);
6136 };
6137 GridApi.prototype.setGroupRemoveLowestSingleChildren = function (value) {
6138 this.gridOptionsWrapper.setProperty(gridOptionsWrapper_1.GridOptionsWrapper.PROP_GROUP_REMOVE_LOWEST_SINGLE_CHILDREN, value);
6139 };
6140 GridApi.prototype.onRowHeightChanged = function () {
6141 if (utils_1.Utils.exists(this.clientSideRowModel)) {
6142 this.clientSideRowModel.onRowHeightChanged();
6143 }
6144 };
6145 GridApi.prototype.getValue = function (colKey, rowNode) {
6146 var column = this.columnController.getPrimaryColumn(colKey);
6147 if (utils_1.Utils.missing(column)) {
6148 column = this.columnController.getGridColumn(colKey);
6149 }
6150 if (utils_1.Utils.missing(column)) {
6151 return null;
6152 }
6153 else {
6154 return this.valueService.getValue(column, rowNode);
6155 }
6156 };
6157 GridApi.prototype.addEventListener = function (eventType, listener) {
6158 var async = this.gridOptionsWrapper.useAsyncEvents();
6159 this.eventService.addEventListener(eventType, listener, async);
6160 };
6161 GridApi.prototype.addGlobalListener = function (listener) {
6162 var async = this.gridOptionsWrapper.useAsyncEvents();
6163 this.eventService.addGlobalListener(listener, async);
6164 };
6165 GridApi.prototype.removeEventListener = function (eventType, listener) {
6166 var async = this.gridOptionsWrapper.useAsyncEvents();
6167 this.eventService.removeEventListener(eventType, listener, async);
6168 };
6169 GridApi.prototype.removeGlobalListener = function (listener) {
6170 var async = this.gridOptionsWrapper.useAsyncEvents();
6171 this.eventService.removeGlobalListener(listener, async);
6172 };
6173 GridApi.prototype.dispatchEvent = function (event) {
6174 this.eventService.dispatchEvent(event);
6175 };
6176 GridApi.prototype.destroy = function () {
6177 this.context.destroy();
6178 };
6179 GridApi.prototype.resetQuickFilter = function () {
6180 this.rowModel.forEachNode(function (node) { return node.quickFilterAggregateText = null; });
6181 };
6182 GridApi.prototype.getRangeSelections = function () {
6183 if (this.rangeController) {
6184 return this.rangeController.getCellRanges();
6185 }
6186 else {
6187 console.warn('ag-Grid: cell range selection is only available in ag-Grid Enterprise');
6188 return null;
6189 }
6190 };
6191 GridApi.prototype.camelCaseToHumanReadable = function (camelCase) {
6192 return utils_1.Utils.camelCaseToHumanText(camelCase);
6193 };
6194 GridApi.prototype.addRangeSelection = function (rangeSelection) {
6195 if (!this.rangeController) {
6196 console.warn('ag-Grid: cell range selection is only available in ag-Grid Enterprise');
6197 }
6198 this.rangeController.addRange(rangeSelection);
6199 };
6200 GridApi.prototype.clearRangeSelection = function () {
6201 if (!this.rangeController) {
6202 console.warn('ag-Grid: cell range selection is only available in ag-Grid Enterprise');
6203 }
6204 this.rangeController.clearSelection();
6205 };
6206 GridApi.prototype.copySelectedRowsToClipboard = function (includeHeader, columnKeys) {
6207 if (!this.clipboardService) {
6208 console.warn('ag-Grid: clipboard is only available in ag-Grid Enterprise');
6209 }
6210 this.clipboardService.copySelectedRowsToClipboard(includeHeader, columnKeys);
6211 };
6212 GridApi.prototype.copySelectedRangeToClipboard = function (includeHeader) {
6213 if (!this.clipboardService) {
6214 console.warn('ag-Grid: clipboard is only available in ag-Grid Enterprise');
6215 }
6216 this.clipboardService.copySelectedRangeToClipboard(includeHeader);
6217 };
6218 GridApi.prototype.copySelectedRangeDown = function () {
6219 if (!this.clipboardService) {
6220 console.warn('ag-Grid: clipboard is only available in ag-Grid Enterprise');
6221 }
6222 this.clipboardService.copyRangeDown();
6223 };
6224 GridApi.prototype.showColumnMenuAfterButtonClick = function (colKey, buttonElement) {
6225 var column = this.columnController.getPrimaryColumn(colKey);
6226 this.menuFactory.showMenuAfterButtonClick(column, buttonElement);
6227 };
6228 GridApi.prototype.showColumnMenuAfterMouseClick = function (colKey, mouseEvent) {
6229 var column = this.columnController.getPrimaryColumn(colKey);
6230 this.menuFactory.showMenuAfterMouseEvent(column, mouseEvent);
6231 };
6232 GridApi.prototype.hidePopupMenu = function () {
6233 // hide the context menu if in enterprise
6234 if (this.contextMenuFactory) {
6235 this.contextMenuFactory.hideActiveMenu();
6236 }
6237 // and hide the column menu always
6238 this.menuFactory.hideActiveMenu();
6239 };
6240 GridApi.prototype.setPopupParent = function (ePopupParent) {
6241 this.gridOptionsWrapper.setProperty(gridOptionsWrapper_1.GridOptionsWrapper.PROP_POPUP_PARENT, ePopupParent);
6242 };
6243 GridApi.prototype.tabToNextCell = function () {
6244 return this.rowRenderer.tabToNextCell(false);
6245 };
6246 GridApi.prototype.tabToPreviousCell = function () {
6247 return this.rowRenderer.tabToNextCell(true);
6248 };
6249 GridApi.prototype.getCellRendererInstances = function (params) {
6250 if (params === void 0) { params = {}; }
6251 return this.rowRenderer.getCellRendererInstances(params);
6252 };
6253 GridApi.prototype.getCellEditorInstances = function (params) {
6254 if (params === void 0) { params = {}; }
6255 return this.rowRenderer.getCellEditorInstances(params);
6256 };
6257 GridApi.prototype.getEditingCells = function () {
6258 return this.rowRenderer.getEditingCells();
6259 };
6260 GridApi.prototype.stopEditing = function (cancel) {
6261 if (cancel === void 0) { cancel = false; }
6262 this.rowRenderer.stopEditing(cancel);
6263 };
6264 GridApi.prototype.startEditingCell = function (params) {
6265 var column = this.columnController.getGridColumn(params.colKey);
6266 if (!column) {
6267 console.warn("ag-Grid: no column found for " + params.colKey);
6268 return;
6269 }
6270 var gridCellDef = {
6271 rowIndex: params.rowIndex,
6272 floating: params.rowPinned,
6273 column: column
6274 };
6275 var gridCell = new gridCell_1.GridCell(gridCellDef);
6276 var notPinned = utils_1.Utils.missing(params.rowPinned);
6277 if (notPinned) {
6278 this.gridPanel.ensureIndexVisible(params.rowIndex);
6279 }
6280 this.rowRenderer.startEditingCell(gridCell, params.keyPress, params.charPress);
6281 };
6282 GridApi.prototype.addAggFunc = function (key, aggFunc) {
6283 if (this.aggFuncService) {
6284 this.aggFuncService.addAggFunc(key, aggFunc);
6285 }
6286 };
6287 GridApi.prototype.addAggFuncs = function (aggFuncs) {
6288 if (this.aggFuncService) {
6289 this.aggFuncService.addAggFuncs(aggFuncs);
6290 }
6291 };
6292 GridApi.prototype.clearAggFuncs = function () {
6293 if (this.aggFuncService) {
6294 this.aggFuncService.clear();
6295 }
6296 };
6297 GridApi.prototype.updateRowData = function (rowDataTransaction) {
6298 var res = null;
6299 if (this.clientSideRowModel) {
6300 res = this.clientSideRowModel.updateRowData(rowDataTransaction);
6301 }
6302 else if (this.infinitePageRowModel) {
6303 this.infinitePageRowModel.updateRowData(rowDataTransaction);
6304 }
6305 else {
6306 console.error('ag-Grid: updateRowData() only works with ClientSideRowModel and InfiniteRowModel.');
6307 }
6308 // do change detection for all present cells
6309 if (!this.gridOptionsWrapper.isSuppressChangeDetection()) {
6310 this.rowRenderer.refreshCells();
6311 }
6312 return res;
6313 };
6314 GridApi.prototype.batchUpdateRowData = function (rowDataTransaction, callback) {
6315 if (!this.clientSideRowModel) {
6316 console.error('ag-Grid: api.batchUpdateRowData() only works with ClientSideRowModel.');
6317 return;
6318 }
6319 this.clientSideRowModel.batchUpdateRowData(rowDataTransaction, callback);
6320 };
6321 GridApi.prototype.insertItemsAtIndex = function (index, items, skipRefresh) {
6322 if (skipRefresh === void 0) { skipRefresh = false; }
6323 console.warn('ag-Grid: insertItemsAtIndex() is deprecated, use updateRowData(transaction) instead.');
6324 this.updateRowData({ add: items, addIndex: index, update: null, remove: null });
6325 };
6326 GridApi.prototype.removeItems = function (rowNodes, skipRefresh) {
6327 if (skipRefresh === void 0) { skipRefresh = false; }
6328 console.warn('ag-Grid: removeItems() is deprecated, use updateRowData(transaction) instead.');
6329 var dataToRemove = rowNodes.map(function (rowNode) { return rowNode.data; });
6330 this.updateRowData({ add: null, addIndex: null, update: null, remove: dataToRemove });
6331 };
6332 GridApi.prototype.addItems = function (items, skipRefresh) {
6333 if (skipRefresh === void 0) { skipRefresh = false; }
6334 console.warn('ag-Grid: addItems() is deprecated, use updateRowData(transaction) instead.');
6335 this.updateRowData({ add: items, addIndex: null, update: null, remove: null });
6336 };
6337 GridApi.prototype.refreshVirtualPageCache = function () {
6338 console.warn('ag-Grid: refreshVirtualPageCache() is now called refreshInfiniteCache(), please call refreshInfiniteCache() instead');
6339 this.refreshInfiniteCache();
6340 };
6341 GridApi.prototype.refreshInfinitePageCache = function () {
6342 console.warn('ag-Grid: refreshInfinitePageCache() is now called refreshInfiniteCache(), please call refreshInfiniteCache() instead');
6343 this.refreshInfiniteCache();
6344 };
6345 GridApi.prototype.refreshInfiniteCache = function () {
6346 if (this.infinitePageRowModel) {
6347 this.infinitePageRowModel.refreshCache();
6348 }
6349 else {
6350 console.warn("ag-Grid: api.refreshInfiniteCache is only available when rowModelType='infinite'.");
6351 }
6352 };
6353 GridApi.prototype.purgeVirtualPageCache = function () {
6354 console.warn('ag-Grid: purgeVirtualPageCache() is now called purgeInfiniteCache(), please call purgeInfiniteCache() instead');
6355 this.purgeInfinitePageCache();
6356 };
6357 GridApi.prototype.purgeInfinitePageCache = function () {
6358 console.warn('ag-Grid: purgeInfinitePageCache() is now called purgeInfiniteCache(), please call purgeInfiniteCache() instead');
6359 this.purgeInfiniteCache();
6360 };
6361 GridApi.prototype.purgeInfiniteCache = function () {
6362 if (this.infinitePageRowModel) {
6363 this.infinitePageRowModel.purgeCache();
6364 }
6365 else {
6366 console.warn("ag-Grid: api.purgeInfiniteCache is only available when rowModelType='infinite'.");
6367 }
6368 };
6369 // DEPRECATED
6370 GridApi.prototype.purgeEnterpriseCache = function (route) {
6371 console.warn("ag-grid: since version 18.x, api.purgeEnterpriseCache() should be replaced with api.purgeServerSideCache()");
6372 this.purgeServerSideCache(route);
6373 };
6374 GridApi.prototype.purgeServerSideCache = function (route) {
6375 if (this.serverSideRowModel) {
6376 this.serverSideRowModel.purgeCache(route);
6377 }
6378 else {
6379 console.warn("ag-Grid: api.purgeServerSideCache is only available when rowModelType='enterprise'.");
6380 }
6381 };
6382 // public removeFromEnterpriseCache(route: string[], items: any[]): void {
6383 // if (this.serverSideRowModel) {
6384 // this.serverSideRowModel.removeFromCache(route, items);
6385 // } else {
6386 // console.warn(`ag-Grid: api.removeFromEnterpriseCache is only available when rowModelType='enterprise'.`);
6387 // }
6388 // }
6389 //
6390 // public addToEnterpriseCache(route: string[], items: any[], index: number): void {
6391 // if (this.serverSideRowModel) {
6392 // this.serverSideRowModel.addToCache(route, items, index);
6393 // } else {
6394 // console.warn(`ag-Grid: api.addToEnterpriseCache is only available when rowModelType='enterprise'.`);
6395 // }
6396 // }
6397 GridApi.prototype.getVirtualRowCount = function () {
6398 console.warn('ag-Grid: getVirtualRowCount() is now called getInfiniteRowCount(), please call getInfiniteRowCount() instead');
6399 return this.getInfiniteRowCount();
6400 };
6401 GridApi.prototype.getInfiniteRowCount = function () {
6402 if (this.infinitePageRowModel) {
6403 return this.infinitePageRowModel.getVirtualRowCount();
6404 }
6405 else {
6406 console.warn("ag-Grid: api.getVirtualRowCount is only available when rowModelType='virtual'.");
6407 }
6408 };
6409 GridApi.prototype.isMaxRowFound = function () {
6410 if (this.infinitePageRowModel) {
6411 return this.infinitePageRowModel.isMaxRowFound();
6412 }
6413 else {
6414 console.warn("ag-Grid: api.isMaxRowFound is only available when rowModelType='virtual'.");
6415 }
6416 };
6417 GridApi.prototype.setVirtualRowCount = function (rowCount, maxRowFound) {
6418 console.warn('ag-Grid: setVirtualRowCount() is now called setInfiniteRowCount(), please call setInfiniteRowCount() instead');
6419 this.setInfiniteRowCount(rowCount, maxRowFound);
6420 };
6421 GridApi.prototype.setInfiniteRowCount = function (rowCount, maxRowFound) {
6422 if (this.infinitePageRowModel) {
6423 this.infinitePageRowModel.setVirtualRowCount(rowCount, maxRowFound);
6424 }
6425 else {
6426 console.warn("ag-Grid: api.setVirtualRowCount is only available when rowModelType='virtual'.");
6427 }
6428 };
6429 GridApi.prototype.getVirtualPageState = function () {
6430 console.warn('ag-Grid: getVirtualPageState() is now called getCacheBlockState(), please call getCacheBlockState() instead');
6431 return this.getCacheBlockState();
6432 };
6433 GridApi.prototype.getInfinitePageState = function () {
6434 console.warn('ag-Grid: getInfinitePageState() is now called getCacheBlockState(), please call getCacheBlockState() instead');
6435 return this.getCacheBlockState();
6436 };
6437 GridApi.prototype.getCacheBlockState = function () {
6438 if (this.infinitePageRowModel) {
6439 return this.infinitePageRowModel.getBlockState();
6440 }
6441 else if (this.serverSideRowModel) {
6442 return this.serverSideRowModel.getBlockState();
6443 }
6444 else {
6445 console.warn("ag-Grid: api.getCacheBlockState() is only available when rowModelType='infinite' or rowModelType='serverSide'.");
6446 }
6447 };
6448 GridApi.prototype.checkGridSize = function () {
6449 this.gridPanel.setBodyAndHeaderHeights();
6450 };
6451 GridApi.prototype.getFirstRenderedRow = function () {
6452 console.log('in ag-Grid v12, getFirstRenderedRow() was renamed to getFirstDisplayedRow()');
6453 return this.getFirstDisplayedRow();
6454 };
6455 GridApi.prototype.getFirstDisplayedRow = function () {
6456 return this.rowRenderer.getFirstVirtualRenderedRow();
6457 };
6458 GridApi.prototype.getLastRenderedRow = function () {
6459 console.log('in ag-Grid v12, getLastRenderedRow() was renamed to getLastDisplayedRow()');
6460 return this.getLastDisplayedRow();
6461 };
6462 GridApi.prototype.getLastDisplayedRow = function () {
6463 return this.rowRenderer.getLastVirtualRenderedRow();
6464 };
6465 GridApi.prototype.getDisplayedRowAtIndex = function (index) {
6466 return this.rowModel.getRow(index);
6467 };
6468 GridApi.prototype.getDisplayedRowCount = function () {
6469 return this.rowModel.getRowCount();
6470 };
6471 GridApi.prototype.paginationIsLastPageFound = function () {
6472 return this.paginationProxy.isLastPageFound();
6473 };
6474 GridApi.prototype.paginationGetPageSize = function () {
6475 return this.paginationProxy.getPageSize();
6476 };
6477 GridApi.prototype.paginationSetPageSize = function (size) {
6478 this.gridOptionsWrapper.setProperty('paginationPageSize', size);
6479 };
6480 GridApi.prototype.paginationGetCurrentPage = function () {
6481 return this.paginationProxy.getCurrentPage();
6482 };
6483 GridApi.prototype.paginationGetTotalPages = function () {
6484 return this.paginationProxy.getTotalPages();
6485 };
6486 GridApi.prototype.paginationGetRowCount = function () {
6487 return this.paginationProxy.getTotalRowCount();
6488 };
6489 GridApi.prototype.paginationGoToNextPage = function () {
6490 this.paginationProxy.goToNextPage();
6491 };
6492 GridApi.prototype.paginationGoToPreviousPage = function () {
6493 this.paginationProxy.goToPreviousPage();
6494 };
6495 GridApi.prototype.paginationGoToFirstPage = function () {
6496 this.paginationProxy.goToFirstPage();
6497 };
6498 GridApi.prototype.paginationGoToLastPage = function () {
6499 this.paginationProxy.goToLastPage();
6500 };
6501 GridApi.prototype.paginationGoToPage = function (page) {
6502 this.paginationProxy.goToPage(page);
6503 };
6504 __decorate([
6505 context_1.Autowired('immutableService'),
6506 __metadata("design:type", immutableService_1.ImmutableService)
6507 ], GridApi.prototype, "immutableService", void 0);
6508 __decorate([
6509 context_1.Autowired('csvCreator'),
6510 __metadata("design:type", csvCreator_1.CsvCreator)
6511 ], GridApi.prototype, "csvCreator", void 0);
6512 __decorate([
6513 context_1.Optional('excelCreator'),
6514 __metadata("design:type", Object)
6515 ], GridApi.prototype, "excelCreator", void 0);
6516 __decorate([
6517 context_1.Autowired('gridCore'),
6518 __metadata("design:type", gridCore_1.GridCore)
6519 ], GridApi.prototype, "gridCore", void 0);
6520 __decorate([
6521 context_1.Autowired('rowRenderer'),
6522 __metadata("design:type", rowRenderer_1.RowRenderer)
6523 ], GridApi.prototype, "rowRenderer", void 0);
6524 __decorate([
6525 context_1.Autowired('filterManager'),
6526 __metadata("design:type", filterManager_1.FilterManager)
6527 ], GridApi.prototype, "filterManager", void 0);
6528 __decorate([
6529 context_1.Autowired('columnController'),
6530 __metadata("design:type", columnController_1.ColumnController)
6531 ], GridApi.prototype, "columnController", void 0);
6532 __decorate([
6533 context_1.Autowired('selectionController'),
6534 __metadata("design:type", selectionController_1.SelectionController)
6535 ], GridApi.prototype, "selectionController", void 0);
6536 __decorate([
6537 context_1.Autowired('gridOptionsWrapper'),
6538 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
6539 ], GridApi.prototype, "gridOptionsWrapper", void 0);
6540 __decorate([
6541 context_1.Autowired('valueService'),
6542 __metadata("design:type", valueService_1.ValueService)
6543 ], GridApi.prototype, "valueService", void 0);
6544 __decorate([
6545 context_1.Autowired('alignedGridsService'),
6546 __metadata("design:type", alignedGridsService_1.AlignedGridsService)
6547 ], GridApi.prototype, "alignedGridsService", void 0);
6548 __decorate([
6549 context_1.Autowired('eventService'),
6550 __metadata("design:type", eventService_1.EventService)
6551 ], GridApi.prototype, "eventService", void 0);
6552 __decorate([
6553 context_1.Autowired('pinnedRowModel'),
6554 __metadata("design:type", pinnedRowModel_1.PinnedRowModel)
6555 ], GridApi.prototype, "pinnedRowModel", void 0);
6556 __decorate([
6557 context_1.Autowired('context'),
6558 __metadata("design:type", context_1.Context)
6559 ], GridApi.prototype, "context", void 0);
6560 __decorate([
6561 context_1.Autowired('rowModel'),
6562 __metadata("design:type", Object)
6563 ], GridApi.prototype, "rowModel", void 0);
6564 __decorate([
6565 context_1.Autowired('sortController'),
6566 __metadata("design:type", sortController_1.SortController)
6567 ], GridApi.prototype, "sortController", void 0);
6568 __decorate([
6569 context_1.Autowired('paginationProxy'),
6570 __metadata("design:type", paginationProxy_1.PaginationProxy)
6571 ], GridApi.prototype, "paginationProxy", void 0);
6572 __decorate([
6573 context_1.Autowired('focusedCellController'),
6574 __metadata("design:type", focusedCellController_1.FocusedCellController)
6575 ], GridApi.prototype, "focusedCellController", void 0);
6576 __decorate([
6577 context_1.Optional('rangeController'),
6578 __metadata("design:type", Object)
6579 ], GridApi.prototype, "rangeController", void 0);
6580 __decorate([
6581 context_1.Optional('clipboardService'),
6582 __metadata("design:type", Object)
6583 ], GridApi.prototype, "clipboardService", void 0);
6584 __decorate([
6585 context_1.Optional('aggFuncService'),
6586 __metadata("design:type", Object)
6587 ], GridApi.prototype, "aggFuncService", void 0);
6588 __decorate([
6589 context_1.Autowired('menuFactory'),
6590 __metadata("design:type", Object)
6591 ], GridApi.prototype, "menuFactory", void 0);
6592 __decorate([
6593 context_1.Optional('contextMenuFactory'),
6594 __metadata("design:type", Object)
6595 ], GridApi.prototype, "contextMenuFactory", void 0);
6596 __decorate([
6597 context_1.Autowired('cellRendererFactory'),
6598 __metadata("design:type", cellRendererFactory_1.CellRendererFactory)
6599 ], GridApi.prototype, "cellRendererFactory", void 0);
6600 __decorate([
6601 context_1.Autowired('cellEditorFactory'),
6602 __metadata("design:type", cellEditorFactory_1.CellEditorFactory)
6603 ], GridApi.prototype, "cellEditorFactory", void 0);
6604 __decorate([
6605 context_1.Autowired('valueCache'),
6606 __metadata("design:type", valueCache_1.ValueCache)
6607 ], GridApi.prototype, "valueCache", void 0);
6608 __decorate([
6609 context_1.Optional('toolPanelComp'),
6610 __metadata("design:type", Object)
6611 ], GridApi.prototype, "toolPanelComp", void 0);
6612 __decorate([
6613 context_1.Autowired('animationFrameService'),
6614 __metadata("design:type", animationFrameService_1.AnimationFrameService)
6615 ], GridApi.prototype, "animationFrameService", void 0);
6616 __decorate([
6617 context_1.PostConstruct,
6618 __metadata("design:type", Function),
6619 __metadata("design:paramtypes", []),
6620 __metadata("design:returntype", void 0)
6621 ], GridApi.prototype, "init", null);
6622 GridApi = __decorate([
6623 context_1.Bean('gridApi')
6624 ], GridApi);
6625 return GridApi;
6626}());
6627exports.GridApi = GridApi;
6628
6629
6630/***/ }),
6631/* 7 */
6632/***/ (function(module, exports, __webpack_require__) {
6633
6634"use strict";
6635/**
6636 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
6637 * @version v18.1.2
6638 * @link http://www.ag-grid.com/
6639 * @license MIT
6640 */
6641
6642var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
6643 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
6644 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
6645 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6646 return c > 3 && r && Object.defineProperty(target, key, r), r;
6647};
6648var __metadata = (this && this.__metadata) || function (k, v) {
6649 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
6650};
6651Object.defineProperty(exports, "__esModule", { value: true });
6652var columnController_1 = __webpack_require__(4);
6653var context_1 = __webpack_require__(0);
6654var ColumnApi = (function () {
6655 function ColumnApi() {
6656 }
6657 ColumnApi.prototype.sizeColumnsToFit = function (gridWidth) { this.columnController.sizeColumnsToFit(gridWidth, 'api'); };
6658 ColumnApi.prototype.setColumnGroupOpened = function (group, newValue) { this.columnController.setColumnGroupOpened(group, newValue, 'api'); };
6659 ColumnApi.prototype.getColumnGroup = function (name, instanceId) { return this.columnController.getColumnGroup(name, instanceId); };
6660 ColumnApi.prototype.getOriginalColumnGroup = function (name) { return this.columnController.getOriginalColumnGroup(name); };
6661 ColumnApi.prototype.getDisplayNameForColumn = function (column, location) { return this.columnController.getDisplayNameForColumn(column, location); };
6662 ColumnApi.prototype.getDisplayNameForColumnGroup = function (columnGroup, location) { return this.columnController.getDisplayNameForColumnGroup(columnGroup, location); };
6663 ColumnApi.prototype.getColumn = function (key) { return this.columnController.getPrimaryColumn(key); };
6664 ColumnApi.prototype.setColumnState = function (columnState) { return this.columnController.setColumnState(columnState, 'api'); };
6665 ColumnApi.prototype.getColumnState = function () { return this.columnController.getColumnState(); };
6666 ColumnApi.prototype.resetColumnState = function () { this.columnController.resetColumnState('api'); };
6667 ColumnApi.prototype.getColumnGroupState = function () { return this.columnController.getColumnGroupState(); };
6668 ColumnApi.prototype.setColumnGroupState = function (stateItems) { this.columnController.setColumnGroupState(stateItems, 'api'); };
6669 ColumnApi.prototype.resetColumnGroupState = function () { this.columnController.resetColumnGroupState('api'); };
6670 ColumnApi.prototype.isPinning = function () { return this.columnController.isPinningLeft() || this.columnController.isPinningRight(); };
6671 ColumnApi.prototype.isPinningLeft = function () { return this.columnController.isPinningLeft(); };
6672 ColumnApi.prototype.isPinningRight = function () { return this.columnController.isPinningRight(); };
6673 ColumnApi.prototype.getDisplayedColAfter = function (col) { return this.columnController.getDisplayedColAfter(col); };
6674 ColumnApi.prototype.getDisplayedColBefore = function (col) { return this.columnController.getDisplayedColBefore(col); };
6675 ColumnApi.prototype.setColumnVisible = function (key, visible) { this.columnController.setColumnVisible(key, visible, 'api'); };
6676 ColumnApi.prototype.setColumnsVisible = function (keys, visible) { this.columnController.setColumnsVisible(keys, visible, 'api'); };
6677 ColumnApi.prototype.setColumnPinned = function (key, pinned) { this.columnController.setColumnPinned(key, pinned, 'api'); };
6678 ColumnApi.prototype.setColumnsPinned = function (keys, pinned) { this.columnController.setColumnsPinned(keys, pinned, 'api'); };
6679 ColumnApi.prototype.getAllColumns = function () { return this.columnController.getAllPrimaryColumns(); };
6680 ColumnApi.prototype.getAllGridColumns = function () { return this.columnController.getAllGridColumns(); };
6681 ColumnApi.prototype.getDisplayedLeftColumns = function () { return this.columnController.getDisplayedLeftColumns(); };
6682 ColumnApi.prototype.getDisplayedCenterColumns = function () { return this.columnController.getDisplayedCenterColumns(); };
6683 ColumnApi.prototype.getDisplayedRightColumns = function () { return this.columnController.getDisplayedRightColumns(); };
6684 ColumnApi.prototype.getAllDisplayedColumns = function () { return this.columnController.getAllDisplayedColumns(); };
6685 ColumnApi.prototype.getAllDisplayedVirtualColumns = function () { return this.columnController.getAllDisplayedVirtualColumns(); };
6686 ColumnApi.prototype.moveColumn = function (key, toIndex) {
6687 if (typeof key === 'number') {
6688 // moveColumn used to take indexes, so this is advising user who hasn't moved to new method name
6689 console.log('ag-Grid: you are using moveColumn(fromIndex, toIndex) - moveColumn takes a column key and a destination index, not two indexes, to move with indexes use moveColumnByIndex(from,to) instead');
6690 this.columnController.moveColumnByIndex(key, toIndex, 'api');
6691 }
6692 else {
6693 this.columnController.moveColumn(key, toIndex, 'api');
6694 }
6695 };
6696 ColumnApi.prototype.moveColumnByIndex = function (fromIndex, toIndex) { this.columnController.moveColumnByIndex(fromIndex, toIndex, 'api'); };
6697 ColumnApi.prototype.moveColumns = function (columnsToMoveKeys, toIndex) { this.columnController.moveColumns(columnsToMoveKeys, toIndex, 'api'); };
6698 ColumnApi.prototype.moveRowGroupColumn = function (fromIndex, toIndex) { this.columnController.moveRowGroupColumn(fromIndex, toIndex); };
6699 ColumnApi.prototype.setColumnAggFunc = function (column, aggFunc) { this.columnController.setColumnAggFunc(column, aggFunc); };
6700 ColumnApi.prototype.setColumnWidth = function (key, newWidth, finished) {
6701 if (finished === void 0) { finished = true; }
6702 this.columnController.setColumnWidth(key, newWidth, false, finished);
6703 };
6704 ColumnApi.prototype.setPivotMode = function (pivotMode) { this.columnController.setPivotMode(pivotMode); };
6705 ColumnApi.prototype.isPivotMode = function () { return this.columnController.isPivotMode(); };
6706 ColumnApi.prototype.getSecondaryPivotColumn = function (pivotKeys, valueColKey) { return this.columnController.getSecondaryPivotColumn(pivotKeys, valueColKey); };
6707 ColumnApi.prototype.setValueColumns = function (colKeys) { this.columnController.setValueColumns(colKeys, 'api'); };
6708 ColumnApi.prototype.getValueColumns = function () { return this.columnController.getValueColumns(); };
6709 ColumnApi.prototype.removeValueColumn = function (colKey) { this.columnController.removeValueColumn(colKey, 'api'); };
6710 ColumnApi.prototype.removeValueColumns = function (colKeys) { this.columnController.removeValueColumns(colKeys, 'api'); };
6711 ColumnApi.prototype.addValueColumn = function (colKey) { this.columnController.addValueColumn(colKey, 'api'); };
6712 ColumnApi.prototype.addValueColumns = function (colKeys) { this.columnController.addValueColumns(colKeys, 'api'); };
6713 ColumnApi.prototype.setRowGroupColumns = function (colKeys) { this.columnController.setRowGroupColumns(colKeys, 'api'); };
6714 ColumnApi.prototype.removeRowGroupColumn = function (colKey) { this.columnController.removeRowGroupColumn(colKey, 'api'); };
6715 ColumnApi.prototype.removeRowGroupColumns = function (colKeys) { this.columnController.removeRowGroupColumns(colKeys, 'api'); };
6716 ColumnApi.prototype.addRowGroupColumn = function (colKey) { this.columnController.addRowGroupColumn(colKey, 'api'); };
6717 ColumnApi.prototype.addRowGroupColumns = function (colKeys) { this.columnController.addRowGroupColumns(colKeys, 'api'); };
6718 ColumnApi.prototype.getRowGroupColumns = function () { return this.columnController.getRowGroupColumns(); };
6719 ColumnApi.prototype.setPivotColumns = function (colKeys) { this.columnController.setPivotColumns(colKeys, 'api'); };
6720 ColumnApi.prototype.removePivotColumn = function (colKey) { this.columnController.removePivotColumn(colKey, 'api'); };
6721 ColumnApi.prototype.removePivotColumns = function (colKeys) { this.columnController.removePivotColumns(colKeys, 'api'); };
6722 ColumnApi.prototype.addPivotColumn = function (colKey) { this.columnController.addPivotColumn(colKey, 'api'); };
6723 ColumnApi.prototype.addPivotColumns = function (colKeys) { this.columnController.addPivotColumns(colKeys, 'api'); };
6724 ColumnApi.prototype.getPivotColumns = function () { return this.columnController.getPivotColumns(); };
6725 ColumnApi.prototype.getLeftDisplayedColumnGroups = function () { return this.columnController.getLeftDisplayedColumnGroups(); };
6726 ColumnApi.prototype.getCenterDisplayedColumnGroups = function () { return this.columnController.getCenterDisplayedColumnGroups(); };
6727 ColumnApi.prototype.getRightDisplayedColumnGroups = function () { return this.columnController.getRightDisplayedColumnGroups(); };
6728 ColumnApi.prototype.getAllDisplayedColumnGroups = function () { return this.columnController.getAllDisplayedColumnGroups(); };
6729 ColumnApi.prototype.autoSizeColumn = function (key) { return this.columnController.autoSizeColumn(key, 'api'); };
6730 ColumnApi.prototype.autoSizeColumns = function (keys) { return this.columnController.autoSizeColumns(keys, 'api'); };
6731 ColumnApi.prototype.autoSizeAllColumns = function () { this.columnController.autoSizeAllColumns('api'); };
6732 ColumnApi.prototype.setSecondaryColumns = function (colDefs) { this.columnController.setSecondaryColumns(colDefs, 'api'); };
6733 // below goes through deprecated items, prints message to user, then calls the new version of the same method
6734 ColumnApi.prototype.columnGroupOpened = function (group, newValue) {
6735 console.error('ag-Grid: columnGroupOpened no longer exists, use setColumnGroupOpened');
6736 this.setColumnGroupOpened(group, newValue);
6737 };
6738 ColumnApi.prototype.hideColumns = function (colIds, hide) {
6739 console.error('ag-Grid: hideColumns is deprecated, use setColumnsVisible');
6740 this.columnController.setColumnsVisible(colIds, !hide, 'api');
6741 };
6742 ColumnApi.prototype.hideColumn = function (colId, hide) {
6743 console.error('ag-Grid: hideColumn is deprecated, use setColumnVisible');
6744 this.columnController.setColumnVisible(colId, !hide, 'api');
6745 };
6746 ColumnApi.prototype.setState = function (columnState) {
6747 console.error('ag-Grid: setState is deprecated, use setColumnState');
6748 return this.setColumnState(columnState);
6749 };
6750 ColumnApi.prototype.getState = function () {
6751 console.error('ag-Grid: getState is deprecated, use getColumnState');
6752 return this.getColumnState();
6753 };
6754 ColumnApi.prototype.resetState = function () {
6755 console.error('ag-Grid: resetState is deprecated, use resetColumnState');
6756 this.resetColumnState();
6757 };
6758 ColumnApi.prototype.getAggregationColumns = function () {
6759 console.error('ag-Grid: getAggregationColumns is deprecated, use getValueColumns');
6760 return this.columnController.getValueColumns();
6761 };
6762 ColumnApi.prototype.removeAggregationColumn = function (colKey) {
6763 console.error('ag-Grid: removeAggregationColumn is deprecated, use removeValueColumn');
6764 this.columnController.removeValueColumn(colKey, 'api');
6765 };
6766 ColumnApi.prototype.removeAggregationColumns = function (colKeys) {
6767 console.error('ag-Grid: removeAggregationColumns is deprecated, use removeValueColumns');
6768 this.columnController.removeValueColumns(colKeys, 'api');
6769 };
6770 ColumnApi.prototype.addAggregationColumn = function (colKey) {
6771 console.error('ag-Grid: addAggregationColumn is deprecated, use addValueColumn');
6772 this.columnController.addValueColumn(colKey, 'api');
6773 };
6774 ColumnApi.prototype.addAggregationColumns = function (colKeys) {
6775 console.error('ag-Grid: addAggregationColumns is deprecated, use addValueColumns');
6776 this.columnController.addValueColumns(colKeys, 'api');
6777 };
6778 ColumnApi.prototype.setColumnAggFunction = function (column, aggFunc) {
6779 console.error('ag-Grid: setColumnAggFunction is deprecated, use setColumnAggFunc');
6780 this.columnController.setColumnAggFunc(column, aggFunc, 'api');
6781 };
6782 ColumnApi.prototype.getDisplayNameForCol = function (column) {
6783 console.error('ag-Grid: getDisplayNameForCol is deprecated, use getDisplayNameForColumn');
6784 return this.getDisplayNameForColumn(column, null);
6785 };
6786 __decorate([
6787 context_1.Autowired('columnController'),
6788 __metadata("design:type", columnController_1.ColumnController)
6789 ], ColumnApi.prototype, "columnController", void 0);
6790 ColumnApi = __decorate([
6791 context_1.Bean('columnApi')
6792 ], ColumnApi);
6793 return ColumnApi;
6794}());
6795exports.ColumnApi = ColumnApi;
6796
6797
6798/***/ }),
6799/* 8 */
6800/***/ (function(module, exports, __webpack_require__) {
6801
6802"use strict";
6803/**
6804 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
6805 * @version v18.1.2
6806 * @link http://www.ag-grid.com/
6807 * @license MIT
6808 */
6809
6810var __extends = (this && this.__extends) || (function () {
6811 var extendStatics = Object.setPrototypeOf ||
6812 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6813 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
6814 return function (d, b) {
6815 extendStatics(d, b);
6816 function __() { this.constructor = d; }
6817 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
6818 };
6819})();
6820Object.defineProperty(exports, "__esModule", { value: true });
6821var utils_1 = __webpack_require__(1);
6822var beanStub_1 = __webpack_require__(13);
6823var compIdSequence = new utils_1.NumberSequence();
6824var Component = (function (_super) {
6825 __extends(Component, _super);
6826 function Component(template) {
6827 var _this = _super.call(this) || this;
6828 _this.childComponents = [];
6829 _this.annotatedEventListeners = [];
6830 _this.visible = true;
6831 // unique id for this row component. this is used for getting a reference to the HTML dom.
6832 // we cannot use the RowNode id as this is not unique (due to animation, old rows can be lying
6833 // around as we create a new rowComp instance for the same row node).
6834 _this.compId = compIdSequence.next();
6835 if (template) {
6836 _this.setTemplate(template);
6837 }
6838 return _this;
6839 }
6840 Component.prototype.getCompId = function () {
6841 return this.compId;
6842 };
6843 Component.prototype.instantiate = function (context) {
6844 this.instantiateRecurse(this.getGui(), context);
6845 };
6846 Component.prototype.instantiateRecurse = function (parentNode, context) {
6847 var _this = this;
6848 // we MUST take a copy of the list first, as the 'swapComponentForNode' adds comments into the DOM
6849 // which messes up the traversal order of the children.
6850 var childNodeList = utils_1.Utils.copyNodeList(parentNode.childNodes);
6851 childNodeList.forEach(function (childNode) {
6852 var childComp = context.createComponent(childNode, function (childComp) {
6853 var attrList = _this.getAttrLists(childNode);
6854 _this.copyAttributesFromNode(attrList, childComp.getGui());
6855 _this.createChildAttributes(attrList, childComp);
6856 _this.addEventListenersToComponent(attrList, childComp);
6857 });
6858 if (childComp) {
6859 _this.swapComponentForNode(childComp, parentNode, childNode);
6860 }
6861 else {
6862 if (childNode.childNodes) {
6863 _this.instantiateRecurse(childNode, context);
6864 }
6865 if (childNode instanceof HTMLElement) {
6866 var attrList = _this.getAttrLists(childNode);
6867 _this.addEventListenersToElement(attrList, childNode);
6868 }
6869 }
6870 });
6871 };
6872 Component.prototype.getAttrLists = function (child) {
6873 var res = {
6874 bindings: [],
6875 events: [],
6876 normal: []
6877 };
6878 utils_1.Utils.iterateNamedNodeMap(child.attributes, function (name, value) {
6879 var firstCharacter = name.substr(0, 1);
6880 if (firstCharacter === '(') {
6881 var eventName = name.replace('(', '').replace(')', '');
6882 res.events.push({
6883 name: eventName,
6884 value: value
6885 });
6886 }
6887 else if (firstCharacter === '[') {
6888 var bindingName = name.replace('[', '').replace(']', '');
6889 res.bindings.push({
6890 name: bindingName,
6891 value: value
6892 });
6893 }
6894 else {
6895 res.normal.push({
6896 name: name,
6897 value: value
6898 });
6899 }
6900 });
6901 return res;
6902 };
6903 Component.prototype.addEventListenersToElement = function (attrLists, element) {
6904 var _this = this;
6905 this.addEventListenerCommon(attrLists, function (eventName, listener) {
6906 _this.addDestroyableEventListener(element, eventName, listener);
6907 });
6908 };
6909 Component.prototype.addEventListenersToComponent = function (attrLists, component) {
6910 var _this = this;
6911 this.addEventListenerCommon(attrLists, function (eventName, listener) {
6912 _this.addDestroyableEventListener(component, eventName, listener);
6913 });
6914 };
6915 Component.prototype.addEventListenerCommon = function (attrLists, callback) {
6916 var _this = this;
6917 var methodAliases = this.getAgComponentMetaData('methods');
6918 attrLists.events.forEach(function (nameValue) {
6919 var methodName = nameValue.value;
6920 var methodAlias = utils_1.Utils.find(methodAliases, 'alias', methodName);
6921 var methodNameToUse = utils_1.Utils.exists(methodAlias) ? methodAlias.methodName : methodName;
6922 var listener = _this[methodNameToUse];
6923 if (typeof listener !== 'function') {
6924 console.warn('ag-Grid: count not find callback ' + methodName);
6925 return;
6926 }
6927 var eventCamelCase = utils_1.Utils.hyphenToCamelCase(nameValue.name);
6928 callback(eventCamelCase, listener.bind(_this));
6929 });
6930 };
6931 Component.prototype.createChildAttributes = function (attrLists, child) {
6932 var _this = this;
6933 var childAttributes = {};
6934 attrLists.normal.forEach(function (nameValue) {
6935 var nameCamelCase = utils_1.Utils.hyphenToCamelCase(nameValue.name);
6936 childAttributes[nameCamelCase] = nameValue.value;
6937 });
6938 attrLists.bindings.forEach(function (nameValue) {
6939 var nameCamelCase = utils_1.Utils.hyphenToCamelCase(nameValue.name);
6940 childAttributes[nameCamelCase] = _this[nameValue.value];
6941 });
6942 child.props = childAttributes;
6943 };
6944 Component.prototype.copyAttributesFromNode = function (attrLists, childNode) {
6945 attrLists.normal.forEach(function (nameValue) {
6946 childNode.setAttribute(nameValue.name, nameValue.value);
6947 });
6948 };
6949 Component.prototype.swapComponentForNode = function (newComponent, parentNode, childNode) {
6950 var eComponent = newComponent.getGui();
6951 parentNode.replaceChild(eComponent, childNode);
6952 parentNode.insertBefore(document.createComment(childNode.nodeName), eComponent);
6953 this.childComponents.push(newComponent);
6954 this.swapInComponentForQuerySelectors(newComponent, childNode);
6955 };
6956 Component.prototype.swapInComponentForQuerySelectors = function (newComponent, childNode) {
6957 var thisProto = Object.getPrototypeOf(this);
6958 var thisNoType = this;
6959 while (thisProto != null) {
6960 var metaData = thisProto.__agComponentMetaData;
6961 var currentProtoName = (thisProto.constructor).name;
6962 if (metaData && metaData[currentProtoName] && metaData[currentProtoName].querySelectors) {
6963 metaData[currentProtoName].querySelectors.forEach(function (querySelector) {
6964 if (thisNoType[querySelector.attributeName] === childNode) {
6965 thisNoType[querySelector.attributeName] = newComponent;
6966 }
6967 });
6968 }
6969 thisProto = Object.getPrototypeOf(thisProto);
6970 }
6971 };
6972 Component.prototype.setTemplate = function (template) {
6973 var eGui = utils_1.Utils.loadTemplate(template);
6974 this.setTemplateFromElement(eGui);
6975 };
6976 Component.prototype.setTemplateFromElement = function (element) {
6977 this.eGui = element;
6978 this.eGui.__agComponent = this;
6979 this.addAnnotatedEventListeners();
6980 this.wireQuerySelectors();
6981 };
6982 Component.prototype.wireQuerySelectors = function () {
6983 var _this = this;
6984 if (!this.eGui) {
6985 return;
6986 }
6987 var thisProto = Object.getPrototypeOf(this);
6988 var _loop_1 = function () {
6989 var metaData = thisProto.__agComponentMetaData;
6990 var currentProtoName = (thisProto.constructor).name;
6991 if (metaData && metaData[currentProtoName] && metaData[currentProtoName].querySelectors) {
6992 var thisNoType_1 = this_1;
6993 metaData[currentProtoName].querySelectors.forEach(function (querySelector) {
6994 var resultOfQuery = _this.eGui.querySelector(querySelector.querySelector);
6995 if (resultOfQuery) {
6996 var backingComponent = resultOfQuery.__agComponent;
6997 if (backingComponent) {
6998 thisNoType_1[querySelector.attributeName] = backingComponent;
6999 }
7000 else {
7001 thisNoType_1[querySelector.attributeName] = resultOfQuery;
7002 }
7003 }
7004 else {
7005 // put debug msg in here if query selector fails???
7006 }
7007 });
7008 }
7009 thisProto = Object.getPrototypeOf(thisProto);
7010 };
7011 var this_1 = this;
7012 while (thisProto != null) {
7013 _loop_1();
7014 }
7015 };
7016 Component.prototype.addAnnotatedEventListeners = function () {
7017 var _this = this;
7018 this.removeAnnotatedEventListeners();
7019 if (!this.eGui) {
7020 return;
7021 }
7022 var listenerMethods = this.getAgComponentMetaData('listenerMethods');
7023 if (utils_1.Utils.missingOrEmpty(listenerMethods)) {
7024 return;
7025 }
7026 if (!this.annotatedEventListeners) {
7027 this.annotatedEventListeners = [];
7028 }
7029 listenerMethods.forEach(function (eventListener) {
7030 var listener = _this[eventListener.methodName].bind(_this);
7031 _this.eGui.addEventListener(eventListener.eventName, listener);
7032 _this.annotatedEventListeners.push({ eventName: eventListener.eventName, listener: listener });
7033 });
7034 };
7035 Component.prototype.getAgComponentMetaData = function (key) {
7036 var res = [];
7037 var thisProto = Object.getPrototypeOf(this);
7038 while (thisProto != null) {
7039 var metaData = thisProto.__agComponentMetaData;
7040 var currentProtoName = (thisProto.constructor).name;
7041 if (metaData && metaData[currentProtoName] && metaData[currentProtoName][key]) {
7042 res = res.concat(metaData[currentProtoName][key]);
7043 }
7044 thisProto = Object.getPrototypeOf(thisProto);
7045 }
7046 return res;
7047 };
7048 Component.prototype.removeAnnotatedEventListeners = function () {
7049 var _this = this;
7050 if (!this.annotatedEventListeners) {
7051 return;
7052 }
7053 if (!this.eGui) {
7054 return;
7055 }
7056 this.annotatedEventListeners.forEach(function (eventListener) {
7057 _this.eGui.removeEventListener(eventListener.eventName, eventListener.listener);
7058 });
7059 this.annotatedEventListeners = null;
7060 };
7061 Component.prototype.getGui = function () {
7062 return this.eGui;
7063 };
7064 // this method is for older code, that wants to provide the gui element,
7065 // it is not intended for this to be in ag-Stack
7066 Component.prototype.setGui = function (eGui) {
7067 this.eGui = eGui;
7068 };
7069 Component.prototype.queryForHtmlElement = function (cssSelector) {
7070 return this.eGui.querySelector(cssSelector);
7071 };
7072 Component.prototype.queryForHtmlInputElement = function (cssSelector) {
7073 return this.eGui.querySelector(cssSelector);
7074 };
7075 Component.prototype.appendChild = function (newChild) {
7076 if (utils_1.Utils.isNodeOrElement(newChild)) {
7077 this.eGui.appendChild(newChild);
7078 }
7079 else {
7080 var childComponent = newChild;
7081 this.eGui.appendChild(childComponent.getGui());
7082 this.childComponents.push(childComponent);
7083 }
7084 };
7085 Component.prototype.addFeature = function (context, feature) {
7086 context.wireBean(feature);
7087 if (feature.destroy) {
7088 this.addDestroyFunc(feature.destroy.bind(feature));
7089 }
7090 };
7091 Component.prototype.isVisible = function () {
7092 return this.visible;
7093 };
7094 Component.prototype.setVisible = function (visible) {
7095 if (visible !== this.visible) {
7096 this.visible = visible;
7097 utils_1.Utils.addOrRemoveCssClass(this.eGui, 'ag-hidden', !visible);
7098 var event_1 = {
7099 type: Component.EVENT_VISIBLE_CHANGED,
7100 visible: this.visible
7101 };
7102 this.dispatchEvent(event_1);
7103 }
7104 };
7105 Component.prototype.addOrRemoveCssClass = function (className, addOrRemove) {
7106 utils_1.Utils.addOrRemoveCssClass(this.eGui, className, addOrRemove);
7107 };
7108 Component.prototype.destroy = function () {
7109 _super.prototype.destroy.call(this);
7110 this.childComponents.forEach(function (childComponent) { return childComponent.destroy(); });
7111 this.childComponents.length = 0;
7112 this.removeAnnotatedEventListeners();
7113 };
7114 Component.prototype.addGuiEventListener = function (event, listener) {
7115 var _this = this;
7116 this.getGui().addEventListener(event, listener);
7117 this.addDestroyFunc(function () { return _this.getGui().removeEventListener(event, listener); });
7118 };
7119 Component.prototype.addCssClass = function (className) {
7120 utils_1.Utils.addCssClass(this.getGui(), className);
7121 };
7122 Component.prototype.removeCssClass = function (className) {
7123 utils_1.Utils.removeCssClass(this.getGui(), className);
7124 };
7125 Component.prototype.getAttribute = function (key) {
7126 var eGui = this.getGui();
7127 if (eGui) {
7128 return eGui.getAttribute(key);
7129 }
7130 else {
7131 return null;
7132 }
7133 };
7134 Component.prototype.getRefElement = function (refName) {
7135 return this.queryForHtmlElement('[ref="' + refName + '"]');
7136 };
7137 Component.EVENT_VISIBLE_CHANGED = 'visibleChanged';
7138 return Component;
7139}(beanStub_1.BeanStub));
7140exports.Component = Component;
7141
7142
7143/***/ }),
7144/* 9 */
7145/***/ (function(module, exports, __webpack_require__) {
7146
7147"use strict";
7148/**
7149 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
7150 * @version v18.1.2
7151 * @link http://www.ag-grid.com/
7152 * @license MIT
7153 */
7154
7155Object.defineProperty(exports, "__esModule", { value: true });
7156var Constants = (function () {
7157 function Constants() {
7158 }
7159 Constants.STEP_EVERYTHING = 0;
7160 Constants.STEP_FILTER = 1;
7161 Constants.STEP_SORT = 2;
7162 Constants.STEP_MAP = 3;
7163 Constants.STEP_AGGREGATE = 4;
7164 Constants.STEP_PIVOT = 5;
7165 Constants.ROW_BUFFER_SIZE = 10;
7166 Constants.LAYOUT_INTERVAL = 500;
7167 Constants.BATCH_WAIT_MILLIS = 50;
7168 Constants.EXPORT_TYPE_DRAG_COPY = 'dragCopy';
7169 Constants.EXPORT_TYPE_CLIPBOARD = 'clipboard';
7170 Constants.EXPORT_TYPE_EXCEL = 'excel';
7171 Constants.EXPORT_TYPE_CSV = 'csv';
7172 Constants.KEY_BACKSPACE = 8;
7173 Constants.KEY_TAB = 9;
7174 Constants.KEY_NEW_LINE = 10;
7175 Constants.KEY_ENTER = 13;
7176 Constants.KEY_SHIFT = 16;
7177 Constants.KEY_ESCAPE = 27;
7178 Constants.KEY_SPACE = 32;
7179 Constants.KEY_LEFT = 37;
7180 Constants.KEY_UP = 38;
7181 Constants.KEY_RIGHT = 39;
7182 Constants.KEY_DOWN = 40;
7183 Constants.KEY_DELETE = 46;
7184 Constants.KEY_A = 65;
7185 Constants.KEY_C = 67;
7186 Constants.KEY_V = 86;
7187 Constants.KEY_D = 68;
7188 Constants.KEY_F2 = 113;
7189 Constants.KEY_PAGE_UP = 33;
7190 Constants.KEY_PAGE_DOWN = 34;
7191 Constants.KEY_PAGE_HOME = 36;
7192 Constants.KEY_PAGE_END = 35;
7193 Constants.ROW_MODEL_TYPE_INFINITE = 'infinite';
7194 Constants.ROW_MODEL_TYPE_VIEWPORT = 'viewport';
7195 Constants.ROW_MODEL_TYPE_CLIENT_SIDE = 'clientSide';
7196 Constants.ROW_MODEL_TYPE_SERVER_SIDE = 'serverSide';
7197 Constants.DEPRECATED_ROW_MODEL_TYPE_NORMAL = 'normal';
7198 Constants.ALWAYS = 'always';
7199 Constants.ONLY_WHEN_GROUPING = 'onlyWhenGrouping';
7200 Constants.PINNED_TOP = 'top';
7201 Constants.PINNED_BOTTOM = 'bottom';
7202 return Constants;
7203}());
7204exports.Constants = Constants;
7205
7206
7207/***/ }),
7208/* 10 */
7209/***/ (function(module, exports, __webpack_require__) {
7210
7211"use strict";
7212/**
7213 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
7214 * @version v18.1.2
7215 * @link http://www.ag-grid.com/
7216 * @license MIT
7217 */
7218
7219var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
7220 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
7221 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
7222 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
7223 return c > 3 && r && Object.defineProperty(target, key, r), r;
7224};
7225var __metadata = (this && this.__metadata) || function (k, v) {
7226 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
7227};
7228Object.defineProperty(exports, "__esModule", { value: true });
7229var eventService_1 = __webpack_require__(3);
7230var utils_1 = __webpack_require__(1);
7231var context_1 = __webpack_require__(0);
7232var gridOptionsWrapper_1 = __webpack_require__(2);
7233var columnUtils_1 = __webpack_require__(33);
7234var columnApi_1 = __webpack_require__(7);
7235var gridApi_1 = __webpack_require__(6);
7236// Wrapper around a user provide column definition. The grid treats the column definition as ready only.
7237// This class contains all the runtime information about a column, plus some logic (the definition has no logic).
7238// This class implements both interfaces ColumnGroupChild and OriginalColumnGroupChild as the class can
7239// appear as a child of either the original tree or the displayed tree. However the relevant group classes
7240// for each type only implements one, as each group can only appear in it's associated tree (eg OriginalColumnGroup
7241// can only appear in OriginalColumn tree).
7242var Column = (function () {
7243 function Column(colDef, colId, primary) {
7244 this.moving = false;
7245 this.menuVisible = false;
7246 this.filterActive = false;
7247 this.eventService = new eventService_1.EventService();
7248 this.rowGroupActive = false;
7249 this.pivotActive = false;
7250 this.aggregationActive = false;
7251 this.colDef = colDef;
7252 this.visible = !colDef.hide;
7253 this.sort = colDef.sort;
7254 this.sortedAt = colDef.sortedAt;
7255 this.colId = colId;
7256 this.primary = primary;
7257 this.lockPosition = colDef.lockPosition === true;
7258 this.lockPinned = colDef.lockPinned === true;
7259 this.lockVisible = colDef.lockVisible === true;
7260 }
7261 Column.prototype.isLockPosition = function () {
7262 return this.lockPosition;
7263 };
7264 Column.prototype.isLockVisible = function () {
7265 return this.lockVisible;
7266 };
7267 Column.prototype.isLockPinned = function () {
7268 return this.lockPinned;
7269 };
7270 Column.prototype.setParent = function (parent) {
7271 this.parent = parent;
7272 };
7273 Column.prototype.getParent = function () {
7274 return this.parent;
7275 };
7276 // this is done after constructor as it uses gridOptionsWrapper
7277 Column.prototype.initialise = function () {
7278 this.setPinned(this.colDef.pinned);
7279 var minColWidth = this.gridOptionsWrapper.getMinColWidth();
7280 var maxColWidth = this.gridOptionsWrapper.getMaxColWidth();
7281 if (this.colDef.minWidth) {
7282 this.minWidth = this.colDef.minWidth;
7283 }
7284 else {
7285 this.minWidth = minColWidth;
7286 }
7287 if (this.colDef.maxWidth) {
7288 this.maxWidth = this.colDef.maxWidth;
7289 }
7290 else {
7291 this.maxWidth = maxColWidth;
7292 }
7293 this.actualWidth = this.columnUtils.calculateColInitialWidth(this.colDef);
7294 var suppressDotNotation = this.gridOptionsWrapper.isSuppressFieldDotNotation();
7295 this.fieldContainsDots = utils_1.Utils.exists(this.colDef.field) && this.colDef.field.indexOf('.') >= 0 && !suppressDotNotation;
7296 this.tooltipFieldContainsDots = utils_1.Utils.exists(this.colDef.tooltipField) && this.colDef.tooltipField.indexOf('.') >= 0 && !suppressDotNotation;
7297 this.validate();
7298 };
7299 Column.prototype.isEmptyGroup = function () {
7300 return false;
7301 };
7302 Column.prototype.isRowGroupDisplayed = function (colId) {
7303 if (utils_1.Utils.missing(this.colDef) || utils_1.Utils.missing(this.colDef.showRowGroup)) {
7304 return false;
7305 }
7306 var showingAllGroups = this.colDef.showRowGroup === true;
7307 var showingThisGroup = this.colDef.showRowGroup === colId;
7308 return showingAllGroups || showingThisGroup;
7309 };
7310 Column.prototype.getUniqueId = function () {
7311 return this.getId();
7312 };
7313 Column.prototype.isPrimary = function () {
7314 return this.primary;
7315 };
7316 Column.prototype.isFilterAllowed = function () {
7317 return this.primary && !this.colDef.suppressFilter;
7318 };
7319 Column.prototype.isFieldContainsDots = function () {
7320 return this.fieldContainsDots;
7321 };
7322 Column.prototype.isTooltipFieldContainsDots = function () {
7323 return this.tooltipFieldContainsDots;
7324 };
7325 Column.prototype.validate = function () {
7326 var colDefAny = this.colDef;
7327 if (!this.gridOptionsWrapper.isEnterprise()) {
7328 var itemsNotAllowedWithoutEnterprise = ['enableRowGroup', 'rowGroup', 'rowGroupIndex', 'enablePivot', 'pivot', 'pivotIndex', 'aggFunc'];
7329 itemsNotAllowedWithoutEnterprise.forEach(function (item) {
7330 if (utils_1.Utils.exists(colDefAny[item])) {
7331 console.warn("ag-Grid: " + item + " is only valid in ag-Grid-Enterprise, your column definition should not have " + item);
7332 }
7333 });
7334 }
7335 if (this.gridOptionsWrapper.isTreeData()) {
7336 var itemsNotAllowedWithTreeData = ['enableRowGroup', 'rowGroup', 'rowGroupIndex', 'enablePivot', 'pivot', 'pivotIndex'];
7337 itemsNotAllowedWithTreeData.forEach(function (item) {
7338 if (utils_1.Utils.exists(colDefAny[item])) {
7339 console.warn("ag-Grid: " + item + " is not possible when doing tree data, your column definition should not have " + item);
7340 }
7341 });
7342 }
7343 if (utils_1.Utils.exists(this.colDef.width) && typeof this.colDef.width !== 'number') {
7344 console.warn('ag-Grid: colDef.width should be a number, not ' + typeof this.colDef.width);
7345 }
7346 if (utils_1.Utils.get(this, 'colDef.cellRendererParams.restrictToOneGroup', null)) {
7347 console.warn('ag-Grid: Since ag-grid 11.0.0 cellRendererParams.restrictToOneGroup is deprecated. You should use showRowGroup');
7348 }
7349 if (utils_1.Utils.get(this, 'colDef.cellRendererParams.keyMap', null)) {
7350 console.warn('ag-Grid: Since ag-grid 11.0.0 cellRendererParams.keyMap is deprecated. You should use colDef.keyCreator');
7351 }
7352 if (utils_1.Utils.get(this, 'colDef.cellRendererParams.keyMap', null)) {
7353 console.warn('ag-Grid: Since ag-grid 11.0.0 cellRendererParams.keyMap is deprecated. You should use colDef.keyCreator');
7354 }
7355 if (colDefAny.floatingCellRenderer) {
7356 console.warn('ag-Grid: since v11, floatingCellRenderer is now pinnedRowCellRenderer');
7357 this.colDef.pinnedRowCellRenderer = colDefAny.floatingCellRenderer;
7358 }
7359 if (colDefAny.floatingRendererFramework) {
7360 console.warn('ag-Grid: since v11, floatingRendererFramework is now pinnedRowCellRendererFramework');
7361 this.colDef.pinnedRowCellRendererFramework = colDefAny.floatingRendererFramework;
7362 }
7363 if (colDefAny.floatingRendererParams) {
7364 console.warn('ag-Grid: since v11, floatingRendererParams is now pinnedRowCellRendererParams');
7365 this.colDef.pinnedRowCellRendererParams = colDefAny.floatingRendererParams;
7366 }
7367 if (colDefAny.floatingValueFormatter) {
7368 console.warn('ag-Grid: since v11, floatingValueFormatter is now pinnedRowValueFormatter');
7369 this.colDef.pinnedRowValueFormatter = colDefAny.floatingValueFormatter;
7370 }
7371 if (colDefAny.cellFormatter) {
7372 console.warn('ag-Grid: since v12, cellFormatter is now valueFormatter');
7373 if (utils_1.Utils.missing(this.colDef.valueFormatter)) {
7374 this.colDef.valueFormatter = colDefAny.cellFormatter;
7375 }
7376 }
7377 if (colDefAny.headerCellTemplate) {
7378 console.warn('ag-Grid: since v15, headerCellTemplate is gone, use header component instead.');
7379 }
7380 if (colDefAny.headerCellRenderer) {
7381 console.warn('ag-Grid: since v15, headerCellRenderer is gone, use header component instead.');
7382 }
7383 if (colDefAny.volatile) {
7384 console.warn('ag-Grid: since v16, colDef.volatile is gone, please check refresh docs on how to refresh specific cells.');
7385 }
7386 };
7387 Column.prototype.addEventListener = function (eventType, listener) {
7388 this.eventService.addEventListener(eventType, listener);
7389 };
7390 Column.prototype.removeEventListener = function (eventType, listener) {
7391 this.eventService.removeEventListener(eventType, listener);
7392 };
7393 Column.prototype.createIsColumnFuncParams = function (rowNode) {
7394 return {
7395 node: rowNode,
7396 data: rowNode.data,
7397 column: this,
7398 colDef: this.colDef,
7399 context: this.gridOptionsWrapper.getContext(),
7400 api: this.gridOptionsWrapper.getApi(),
7401 columnApi: this.gridOptionsWrapper.getColumnApi()
7402 };
7403 };
7404 Column.prototype.isSuppressNavigable = function (rowNode) {
7405 // if boolean set, then just use it
7406 if (typeof this.colDef.suppressNavigable === 'boolean') {
7407 return this.colDef.suppressNavigable;
7408 }
7409 // if function, then call the function to find out
7410 if (typeof this.colDef.suppressNavigable === 'function') {
7411 var params = this.createIsColumnFuncParams(rowNode);
7412 var userFunc = this.colDef.suppressNavigable;
7413 return userFunc(params);
7414 }
7415 return false;
7416 };
7417 Column.prototype.isCellEditable = function (rowNode) {
7418 // only allow editing of groups if the user has this option enabled
7419 if (rowNode.group && !this.gridOptionsWrapper.isEnableGroupEdit()) {
7420 return false;
7421 }
7422 return this.isColumnFunc(rowNode, this.colDef.editable);
7423 };
7424 Column.prototype.isRowDrag = function (rowNode) {
7425 return this.isColumnFunc(rowNode, this.colDef.rowDrag);
7426 };
7427 Column.prototype.isCellCheckboxSelection = function (rowNode) {
7428 return this.isColumnFunc(rowNode, this.colDef.checkboxSelection);
7429 };
7430 Column.prototype.isSuppressPaste = function (rowNode) {
7431 return this.isColumnFunc(rowNode, this.colDef ? this.colDef.suppressPaste : null);
7432 };
7433 Column.prototype.isResizable = function () {
7434 var enableColResize = this.gridOptionsWrapper.isEnableColResize();
7435 var suppressResize = this.colDef && this.colDef.suppressResize;
7436 return enableColResize && !suppressResize;
7437 };
7438 Column.prototype.isColumnFunc = function (rowNode, value) {
7439 // if boolean set, then just use it
7440 if (typeof value === 'boolean') {
7441 return value;
7442 }
7443 // if function, then call the function to find out
7444 if (typeof value === 'function') {
7445 var params = this.createIsColumnFuncParams(rowNode);
7446 var editableFunc = value;
7447 return editableFunc(params);
7448 }
7449 return false;
7450 };
7451 Column.prototype.setMoving = function (moving, source) {
7452 if (source === void 0) { source = "api"; }
7453 this.moving = moving;
7454 this.eventService.dispatchEvent(this.createColumnEvent(Column.EVENT_MOVING_CHANGED, source));
7455 };
7456 Column.prototype.createColumnEvent = function (type, source) {
7457 return {
7458 api: this.gridApi,
7459 columnApi: this.columnApi,
7460 type: type,
7461 column: this,
7462 columns: [this],
7463 source: source
7464 };
7465 };
7466 Column.prototype.isMoving = function () {
7467 return this.moving;
7468 };
7469 Column.prototype.getSort = function () {
7470 return this.sort;
7471 };
7472 Column.prototype.setSort = function (sort, source) {
7473 if (source === void 0) { source = "api"; }
7474 if (this.sort !== sort) {
7475 this.sort = sort;
7476 this.eventService.dispatchEvent(this.createColumnEvent(Column.EVENT_SORT_CHANGED, source));
7477 }
7478 };
7479 Column.prototype.setMenuVisible = function (visible, source) {
7480 if (source === void 0) { source = "api"; }
7481 if (this.menuVisible !== visible) {
7482 this.menuVisible = visible;
7483 this.eventService.dispatchEvent(this.createColumnEvent(Column.EVENT_MENU_VISIBLE_CHANGED, source));
7484 }
7485 };
7486 Column.prototype.isMenuVisible = function () {
7487 return this.menuVisible;
7488 };
7489 Column.prototype.isSortAscending = function () {
7490 return this.sort === Column.SORT_ASC;
7491 };
7492 Column.prototype.isSortDescending = function () {
7493 return this.sort === Column.SORT_DESC;
7494 };
7495 Column.prototype.isSortNone = function () {
7496 return utils_1.Utils.missing(this.sort);
7497 };
7498 Column.prototype.isSorting = function () {
7499 return utils_1.Utils.exists(this.sort);
7500 };
7501 Column.prototype.getSortedAt = function () {
7502 return this.sortedAt;
7503 };
7504 Column.prototype.setSortedAt = function (sortedAt) {
7505 this.sortedAt = sortedAt;
7506 };
7507 Column.prototype.setAggFunc = function (aggFunc) {
7508 this.aggFunc = aggFunc;
7509 };
7510 Column.prototype.getAggFunc = function () {
7511 return this.aggFunc;
7512 };
7513 Column.prototype.getLeft = function () {
7514 return this.left;
7515 };
7516 Column.prototype.getOldLeft = function () {
7517 return this.oldLeft;
7518 };
7519 Column.prototype.getRight = function () {
7520 return this.left + this.actualWidth;
7521 };
7522 Column.prototype.setLeft = function (left, source) {
7523 if (source === void 0) { source = "api"; }
7524 this.oldLeft = this.left;
7525 if (this.left !== left) {
7526 this.left = left;
7527 this.eventService.dispatchEvent(this.createColumnEvent(Column.EVENT_LEFT_CHANGED, source));
7528 }
7529 };
7530 Column.prototype.isFilterActive = function () {
7531 return this.filterActive;
7532 };
7533 Column.prototype.setFilterActive = function (active, source) {
7534 if (source === void 0) { source = "api"; }
7535 if (this.filterActive !== active) {
7536 this.filterActive = active;
7537 this.eventService.dispatchEvent(this.createColumnEvent(Column.EVENT_FILTER_ACTIVE_CHANGED, source));
7538 }
7539 this.eventService.dispatchEvent(this.createColumnEvent(Column.EVENT_FILTER_CHANGED, source));
7540 };
7541 Column.prototype.setPinned = function (pinned) {
7542 if (pinned === true || pinned === Column.PINNED_LEFT) {
7543 this.pinned = Column.PINNED_LEFT;
7544 }
7545 else if (pinned === Column.PINNED_RIGHT) {
7546 this.pinned = Column.PINNED_RIGHT;
7547 }
7548 else {
7549 this.pinned = null;
7550 }
7551 };
7552 Column.prototype.setFirstRightPinned = function (firstRightPinned, source) {
7553 if (source === void 0) { source = "api"; }
7554 if (this.firstRightPinned !== firstRightPinned) {
7555 this.firstRightPinned = firstRightPinned;
7556 this.eventService.dispatchEvent(this.createColumnEvent(Column.EVENT_FIRST_RIGHT_PINNED_CHANGED, source));
7557 }
7558 };
7559 Column.prototype.setLastLeftPinned = function (lastLeftPinned, source) {
7560 if (source === void 0) { source = "api"; }
7561 if (this.lastLeftPinned !== lastLeftPinned) {
7562 this.lastLeftPinned = lastLeftPinned;
7563 this.eventService.dispatchEvent(this.createColumnEvent(Column.EVENT_LAST_LEFT_PINNED_CHANGED, source));
7564 }
7565 };
7566 Column.prototype.isFirstRightPinned = function () {
7567 return this.firstRightPinned;
7568 };
7569 Column.prototype.isLastLeftPinned = function () {
7570 return this.lastLeftPinned;
7571 };
7572 Column.prototype.isPinned = function () {
7573 return this.pinned === Column.PINNED_LEFT || this.pinned === Column.PINNED_RIGHT;
7574 };
7575 Column.prototype.isPinnedLeft = function () {
7576 return this.pinned === Column.PINNED_LEFT;
7577 };
7578 Column.prototype.isPinnedRight = function () {
7579 return this.pinned === Column.PINNED_RIGHT;
7580 };
7581 Column.prototype.getPinned = function () {
7582 return this.pinned;
7583 };
7584 Column.prototype.setVisible = function (visible, source) {
7585 if (source === void 0) { source = "api"; }
7586 var newValue = visible === true;
7587 if (this.visible !== newValue) {
7588 this.visible = newValue;
7589 this.eventService.dispatchEvent(this.createColumnEvent(Column.EVENT_VISIBLE_CHANGED, source));
7590 }
7591 };
7592 Column.prototype.isVisible = function () {
7593 return this.visible;
7594 };
7595 Column.prototype.getColDef = function () {
7596 return this.colDef;
7597 };
7598 Column.prototype.getColumnGroupShow = function () {
7599 return this.colDef.columnGroupShow;
7600 };
7601 Column.prototype.getColId = function () {
7602 return this.colId;
7603 };
7604 Column.prototype.getId = function () {
7605 return this.getColId();
7606 };
7607 Column.prototype.getDefinition = function () {
7608 return this.colDef;
7609 };
7610 Column.prototype.getActualWidth = function () {
7611 return this.actualWidth;
7612 };
7613 Column.prototype.createBaseColDefParams = function (rowNode) {
7614 var params = {
7615 node: rowNode,
7616 data: rowNode.data,
7617 colDef: this.colDef,
7618 column: this,
7619 api: this.gridOptionsWrapper.getApi(),
7620 columnApi: this.gridOptionsWrapper.getColumnApi(),
7621 context: this.gridOptionsWrapper.getContext()
7622 };
7623 return params;
7624 };
7625 Column.prototype.getColSpan = function (rowNode) {
7626 if (utils_1.Utils.missing(this.colDef.colSpan)) {
7627 return 1;
7628 }
7629 else {
7630 var params = this.createBaseColDefParams(rowNode);
7631 var colSpan = this.colDef.colSpan(params);
7632 // colSpan must be number equal to or greater than 1
7633 if (colSpan > 1) {
7634 return colSpan;
7635 }
7636 else {
7637 return 1;
7638 }
7639 }
7640 };
7641 Column.prototype.getRowSpan = function (rowNode) {
7642 if (utils_1.Utils.missing(this.colDef.rowSpan)) {
7643 return 1;
7644 }
7645 else {
7646 var params = this.createBaseColDefParams(rowNode);
7647 var rowSpan = this.colDef.rowSpan(params);
7648 // rowSpan must be number equal to or greater than 1
7649 if (rowSpan > 1) {
7650 return rowSpan;
7651 }
7652 else {
7653 return 1;
7654 }
7655 }
7656 };
7657 Column.prototype.setActualWidth = function (actualWidth, source) {
7658 if (source === void 0) { source = "api"; }
7659 if (this.actualWidth !== actualWidth) {
7660 this.actualWidth = actualWidth;
7661 this.eventService.dispatchEvent(this.createColumnEvent(Column.EVENT_WIDTH_CHANGED, source));
7662 }
7663 };
7664 Column.prototype.isGreaterThanMax = function (width) {
7665 if (this.maxWidth) {
7666 return width > this.maxWidth;
7667 }
7668 else {
7669 return false;
7670 }
7671 };
7672 Column.prototype.getMinWidth = function () {
7673 return this.minWidth;
7674 };
7675 Column.prototype.getMaxWidth = function () {
7676 return this.maxWidth;
7677 };
7678 Column.prototype.setMinimum = function (source) {
7679 if (source === void 0) { source = "api"; }
7680 this.setActualWidth(this.minWidth, source);
7681 };
7682 Column.prototype.setRowGroupActive = function (rowGroup, source) {
7683 if (source === void 0) { source = "api"; }
7684 if (this.rowGroupActive !== rowGroup) {
7685 this.rowGroupActive = rowGroup;
7686 this.eventService.dispatchEvent(this.createColumnEvent(Column.EVENT_ROW_GROUP_CHANGED, source));
7687 }
7688 };
7689 Column.prototype.isRowGroupActive = function () {
7690 return this.rowGroupActive;
7691 };
7692 Column.prototype.setPivotActive = function (pivot, source) {
7693 if (source === void 0) { source = "api"; }
7694 if (this.pivotActive !== pivot) {
7695 this.pivotActive = pivot;
7696 this.eventService.dispatchEvent(this.createColumnEvent(Column.EVENT_PIVOT_CHANGED, source));
7697 }
7698 };
7699 Column.prototype.isPivotActive = function () {
7700 return this.pivotActive;
7701 };
7702 Column.prototype.isAnyFunctionActive = function () {
7703 return this.isPivotActive() || this.isRowGroupActive() || this.isValueActive();
7704 };
7705 Column.prototype.isAnyFunctionAllowed = function () {
7706 return this.isAllowPivot() || this.isAllowRowGroup() || this.isAllowValue();
7707 };
7708 Column.prototype.setValueActive = function (value, source) {
7709 if (source === void 0) { source = "api"; }
7710 if (this.aggregationActive !== value) {
7711 this.aggregationActive = value;
7712 this.eventService.dispatchEvent(this.createColumnEvent(Column.EVENT_VALUE_CHANGED, source));
7713 }
7714 };
7715 Column.prototype.isValueActive = function () {
7716 return this.aggregationActive;
7717 };
7718 Column.prototype.isAllowPivot = function () {
7719 return this.colDef.enablePivot === true;
7720 };
7721 Column.prototype.isAllowValue = function () {
7722 return this.colDef.enableValue === true;
7723 };
7724 Column.prototype.isAllowRowGroup = function () {
7725 return this.colDef.enableRowGroup === true;
7726 };
7727 Column.prototype.getMenuTabs = function (defaultValues) {
7728 var menuTabs = this.getColDef().menuTabs;
7729 if (menuTabs == null) {
7730 menuTabs = defaultValues;
7731 }
7732 return menuTabs;
7733 };
7734 // + renderedHeaderCell - for making header cell transparent when moving
7735 Column.EVENT_MOVING_CHANGED = 'movingChanged';
7736 // + renderedCell - changing left position
7737 Column.EVENT_LEFT_CHANGED = 'leftChanged';
7738 // + renderedCell - changing width
7739 Column.EVENT_WIDTH_CHANGED = 'widthChanged';
7740 // + renderedCell - for changing pinned classes
7741 Column.EVENT_LAST_LEFT_PINNED_CHANGED = 'lastLeftPinnedChanged';
7742 Column.EVENT_FIRST_RIGHT_PINNED_CHANGED = 'firstRightPinnedChanged';
7743 // + renderedColumn - for changing visibility icon
7744 Column.EVENT_VISIBLE_CHANGED = 'visibleChanged';
7745 // + every time the filter changes, used in the floating filters
7746 Column.EVENT_FILTER_CHANGED = 'filterChanged';
7747 // + renderedHeaderCell - marks the header with filter icon
7748 Column.EVENT_FILTER_ACTIVE_CHANGED = 'filterActiveChanged';
7749 // + renderedHeaderCell - marks the header with sort icon
7750 Column.EVENT_SORT_CHANGED = 'sortChanged';
7751 Column.EVENT_MENU_VISIBLE_CHANGED = 'menuVisibleChanged';
7752 // + toolpanel, for gui updates
7753 Column.EVENT_ROW_GROUP_CHANGED = 'columnRowGroupChanged';
7754 // + toolpanel, for gui updates
7755 Column.EVENT_PIVOT_CHANGED = 'columnPivotChanged';
7756 // + toolpanel, for gui updates
7757 Column.EVENT_VALUE_CHANGED = 'columnValueChanged';
7758 Column.PINNED_RIGHT = 'right';
7759 Column.PINNED_LEFT = 'left';
7760 Column.SORT_ASC = 'asc';
7761 Column.SORT_DESC = 'desc';
7762 __decorate([
7763 context_1.Autowired('gridOptionsWrapper'),
7764 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
7765 ], Column.prototype, "gridOptionsWrapper", void 0);
7766 __decorate([
7767 context_1.Autowired('columnUtils'),
7768 __metadata("design:type", columnUtils_1.ColumnUtils)
7769 ], Column.prototype, "columnUtils", void 0);
7770 __decorate([
7771 context_1.Autowired('frameworkFactory'),
7772 __metadata("design:type", Object)
7773 ], Column.prototype, "frameworkFactory", void 0);
7774 __decorate([
7775 context_1.Autowired('columnApi'),
7776 __metadata("design:type", columnApi_1.ColumnApi)
7777 ], Column.prototype, "columnApi", void 0);
7778 __decorate([
7779 context_1.Autowired('gridApi'),
7780 __metadata("design:type", gridApi_1.GridApi)
7781 ], Column.prototype, "gridApi", void 0);
7782 __decorate([
7783 context_1.PostConstruct,
7784 __metadata("design:type", Function),
7785 __metadata("design:paramtypes", []),
7786 __metadata("design:returntype", void 0)
7787 ], Column.prototype, "initialise", null);
7788 return Column;
7789}());
7790exports.Column = Column;
7791
7792
7793/***/ }),
7794/* 11 */
7795/***/ (function(module, exports, __webpack_require__) {
7796
7797"use strict";
7798/**
7799 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
7800 * @version v18.1.2
7801 * @link http://www.ag-grid.com/
7802 * @license MIT
7803 */
7804
7805Object.defineProperty(exports, "__esModule", { value: true });
7806function QuerySelector(selector) {
7807 return querySelectorFunc.bind(this, selector);
7808}
7809exports.QuerySelector = QuerySelector;
7810function RefSelector(ref) {
7811 return querySelectorFunc.bind(this, "[ref=" + ref + "]");
7812}
7813exports.RefSelector = RefSelector;
7814function querySelectorFunc(selector, classPrototype, methodOrAttributeName, index) {
7815 if (selector === null) {
7816 console.error("ag-Grid: QuerySelector selector should not be null");
7817 return;
7818 }
7819 if (typeof index === "number") {
7820 console.error("ag-Grid: QuerySelector should be on an attribute");
7821 return;
7822 }
7823 addToObjectProps(classPrototype, 'querySelectors', {
7824 attributeName: methodOrAttributeName,
7825 querySelector: selector
7826 });
7827}
7828// think we should take this out, put property bindings on the
7829function Listener(eventName) {
7830 return listenerFunc.bind(this, eventName);
7831}
7832exports.Listener = Listener;
7833function listenerFunc(eventName, target, methodName) {
7834 if (eventName === null) {
7835 console.error("ag-Grid: EventListener eventName should not be null");
7836 return;
7837 }
7838 addToObjectProps(target, 'listenerMethods', {
7839 methodName: methodName,
7840 eventName: eventName
7841 });
7842}
7843// think we should take this out, put property bindings on the
7844function Method(eventName) {
7845 return methodFunc.bind(this, eventName);
7846}
7847exports.Method = Method;
7848function methodFunc(alias, target, methodName) {
7849 if (alias === null) {
7850 console.error("ag-Grid: EventListener eventName should not be null");
7851 return;
7852 }
7853 addToObjectProps(target, 'methods', {
7854 methodName: methodName,
7855 alias: alias
7856 });
7857}
7858function addToObjectProps(target, key, value) {
7859 // it's an attribute on the class
7860 var props = getOrCreateProps(target, target.constructor.name);
7861 if (!props[key]) {
7862 props[key] = [];
7863 }
7864 props[key].push(value);
7865}
7866function getOrCreateProps(target, instanceName) {
7867 if (!target.__agComponentMetaData) {
7868 target.__agComponentMetaData = {};
7869 }
7870 if (!target.__agComponentMetaData[instanceName]) {
7871 target.__agComponentMetaData[instanceName] = {};
7872 }
7873 return target.__agComponentMetaData[instanceName];
7874}
7875
7876
7877/***/ }),
7878/* 12 */
7879/***/ (function(module, exports, __webpack_require__) {
7880
7881"use strict";
7882/**
7883 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
7884 * @version v18.1.2
7885 * @link http://www.ag-grid.com/
7886 * @license MIT
7887 */
7888
7889var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
7890 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
7891 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
7892 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
7893 return c > 3 && r && Object.defineProperty(target, key, r), r;
7894};
7895var __metadata = (this && this.__metadata) || function (k, v) {
7896 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
7897};
7898var __param = (this && this.__param) || function (paramIndex, decorator) {
7899 return function (target, key) { decorator(target, key, paramIndex); }
7900};
7901Object.defineProperty(exports, "__esModule", { value: true });
7902var gridOptionsWrapper_1 = __webpack_require__(2);
7903var context_1 = __webpack_require__(0);
7904var context_2 = __webpack_require__(0);
7905var LoggerFactory = (function () {
7906 function LoggerFactory() {
7907 }
7908 LoggerFactory.prototype.setBeans = function (gridOptionsWrapper) {
7909 this.logging = gridOptionsWrapper.isDebug();
7910 };
7911 LoggerFactory.prototype.create = function (name) {
7912 return new Logger(name, this.isLogging.bind(this));
7913 };
7914 LoggerFactory.prototype.isLogging = function () {
7915 return this.logging;
7916 };
7917 __decorate([
7918 __param(0, context_2.Qualifier('gridOptionsWrapper')),
7919 __metadata("design:type", Function),
7920 __metadata("design:paramtypes", [gridOptionsWrapper_1.GridOptionsWrapper]),
7921 __metadata("design:returntype", void 0)
7922 ], LoggerFactory.prototype, "setBeans", null);
7923 LoggerFactory = __decorate([
7924 context_1.Bean('loggerFactory')
7925 ], LoggerFactory);
7926 return LoggerFactory;
7927}());
7928exports.LoggerFactory = LoggerFactory;
7929var Logger = (function () {
7930 function Logger(name, isLoggingFunc) {
7931 this.name = name;
7932 this.isLoggingFunc = isLoggingFunc;
7933 }
7934 Logger.prototype.isLogging = function () {
7935 return this.isLoggingFunc();
7936 };
7937 Logger.prototype.log = function (message) {
7938 if (this.isLoggingFunc()) {
7939 console.log('ag-Grid.' + this.name + ': ' + message);
7940 }
7941 };
7942 return Logger;
7943}());
7944exports.Logger = Logger;
7945
7946
7947/***/ }),
7948/* 13 */
7949/***/ (function(module, exports, __webpack_require__) {
7950
7951"use strict";
7952/**
7953 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
7954 * @version v18.1.2
7955 * @link http://www.ag-grid.com/
7956 * @license MIT
7957 */
7958
7959Object.defineProperty(exports, "__esModule", { value: true });
7960var eventService_1 = __webpack_require__(3);
7961var gridOptionsWrapper_1 = __webpack_require__(2);
7962var utils_1 = __webpack_require__(1);
7963var BeanStub = (function () {
7964 function BeanStub() {
7965 this.destroyFunctions = [];
7966 this.destroyed = false;
7967 }
7968 BeanStub.prototype.destroy = function () {
7969 this.destroyFunctions.forEach(function (func) { return func(); });
7970 this.destroyFunctions.length = 0;
7971 this.destroyed = true;
7972 this.dispatchEvent({ type: BeanStub.EVENT_DESTROYED });
7973 };
7974 BeanStub.prototype.addEventListener = function (eventType, listener) {
7975 if (!this.localEventService) {
7976 this.localEventService = new eventService_1.EventService();
7977 }
7978 this.localEventService.addEventListener(eventType, listener);
7979 };
7980 BeanStub.prototype.removeEventListener = function (eventType, listener) {
7981 if (this.localEventService) {
7982 this.localEventService.removeEventListener(eventType, listener);
7983 }
7984 };
7985 BeanStub.prototype.dispatchEventAsync = function (event) {
7986 var _this = this;
7987 setTimeout(function () { return _this.dispatchEvent(event); }, 0);
7988 };
7989 BeanStub.prototype.dispatchEvent = function (event) {
7990 if (this.localEventService) {
7991 this.localEventService.dispatchEvent(event);
7992 }
7993 };
7994 BeanStub.prototype.addDestroyableEventListener = function (eElement, event, listener) {
7995 if (this.destroyed) {
7996 return;
7997 }
7998 if (eElement instanceof HTMLElement) {
7999 utils_1._.addSafePassiveEventListener(eElement, event, listener);
8000 }
8001 else if (eElement instanceof Window) {
8002 eElement.addEventListener(event, listener);
8003 }
8004 else if (eElement instanceof gridOptionsWrapper_1.GridOptionsWrapper) {
8005 eElement.addEventListener(event, listener);
8006 }
8007 else {
8008 eElement.addEventListener(event, listener);
8009 }
8010 this.destroyFunctions.push(function () {
8011 if (eElement instanceof HTMLElement) {
8012 eElement.removeEventListener(event, listener);
8013 }
8014 else if (eElement instanceof Window) {
8015 eElement.removeEventListener(event, listener);
8016 }
8017 else if (eElement instanceof gridOptionsWrapper_1.GridOptionsWrapper) {
8018 eElement.removeEventListener(event, listener);
8019 }
8020 else {
8021 eElement.removeEventListener(event, listener);
8022 }
8023 });
8024 };
8025 BeanStub.prototype.isAlive = function () {
8026 return !this.destroyed;
8027 };
8028 BeanStub.prototype.addDestroyFunc = function (func) {
8029 // if we are already destroyed, we execute the func now
8030 if (this.isAlive()) {
8031 this.destroyFunctions.push(func);
8032 }
8033 else {
8034 func();
8035 }
8036 };
8037 BeanStub.EVENT_DESTROYED = 'destroyed';
8038 return BeanStub;
8039}());
8040exports.BeanStub = BeanStub;
8041
8042
8043/***/ }),
8044/* 14 */
8045/***/ (function(module, exports) {
8046
8047/*
8048 MIT License http://www.opensource.org/licenses/mit-license.php
8049 Author Tobias Koppers @sokra
8050*/
8051// css base code, injected by the css-loader
8052module.exports = function() {
8053 var list = [];
8054
8055 // return the list of modules as css string
8056 list.toString = function toString() {
8057 var result = [];
8058 for(var i = 0; i < this.length; i++) {
8059 var item = this[i];
8060 if(item[2]) {
8061 result.push("@media " + item[2] + "{" + item[1] + "}");
8062 } else {
8063 result.push(item[1]);
8064 }
8065 }
8066 return result.join("");
8067 };
8068
8069 // import a list of modules into the list
8070 list.i = function(modules, mediaQuery) {
8071 if(typeof modules === "string")
8072 modules = [[null, modules, ""]];
8073 var alreadyImportedModules = {};
8074 for(var i = 0; i < this.length; i++) {
8075 var id = this[i][0];
8076 if(typeof id === "number")
8077 alreadyImportedModules[id] = true;
8078 }
8079 for(i = 0; i < modules.length; i++) {
8080 var item = modules[i];
8081 // skip already imported module
8082 // this implementation is not 100% perfect for weird media query combinations
8083 // when a module is imported multiple times with different media queries.
8084 // I hope this will never occur (Hey this way we have smaller bundles)
8085 if(typeof item[0] !== "number" || !alreadyImportedModules[item[0]]) {
8086 if(mediaQuery && !item[2]) {
8087 item[2] = mediaQuery;
8088 } else if(mediaQuery) {
8089 item[2] = "(" + item[2] + ") and (" + mediaQuery + ")";
8090 }
8091 list.push(item);
8092 }
8093 }
8094 };
8095 return list;
8096};
8097
8098
8099/***/ }),
8100/* 15 */
8101/***/ (function(module, exports) {
8102
8103/*
8104 MIT License http://www.opensource.org/licenses/mit-license.php
8105 Author Tobias Koppers @sokra
8106*/
8107var stylesInDom = {},
8108 memoize = function(fn) {
8109 var memo;
8110 return function () {
8111 if (typeof memo === "undefined") memo = fn.apply(this, arguments);
8112 return memo;
8113 };
8114 },
8115 isOldIE = memoize(function() {
8116 return /msie [6-9]\b/.test(window.navigator.userAgent.toLowerCase());
8117 }),
8118 getHeadElement = memoize(function () {
8119 return document.head || document.getElementsByTagName("head")[0];
8120 }),
8121 singletonElement = null,
8122 singletonCounter = 0,
8123 styleElementsInsertedAtTop = [];
8124
8125module.exports = function(list, options) {
8126 if(typeof DEBUG !== "undefined" && DEBUG) {
8127 if(typeof document !== "object") throw new Error("The style-loader cannot be used in a non-browser environment");
8128 }
8129
8130 options = options || {};
8131 // Force single-tag solution on IE6-9, which has a hard limit on the # of <style>
8132 // tags it will allow on a page
8133 if (typeof options.singleton === "undefined") options.singleton = isOldIE();
8134
8135 // By default, add <style> tags to the bottom of <head>.
8136 if (typeof options.insertAt === "undefined") options.insertAt = "bottom";
8137
8138 var styles = listToStyles(list);
8139 addStylesToDom(styles, options);
8140
8141 return function update(newList) {
8142 var mayRemove = [];
8143 for(var i = 0; i < styles.length; i++) {
8144 var item = styles[i];
8145 var domStyle = stylesInDom[item.id];
8146 domStyle.refs--;
8147 mayRemove.push(domStyle);
8148 }
8149 if(newList) {
8150 var newStyles = listToStyles(newList);
8151 addStylesToDom(newStyles, options);
8152 }
8153 for(var i = 0; i < mayRemove.length; i++) {
8154 var domStyle = mayRemove[i];
8155 if(domStyle.refs === 0) {
8156 for(var j = 0; j < domStyle.parts.length; j++)
8157 domStyle.parts[j]();
8158 delete stylesInDom[domStyle.id];
8159 }
8160 }
8161 };
8162}
8163
8164function addStylesToDom(styles, options) {
8165 for(var i = 0; i < styles.length; i++) {
8166 var item = styles[i];
8167 var domStyle = stylesInDom[item.id];
8168 if(domStyle) {
8169 domStyle.refs++;
8170 for(var j = 0; j < domStyle.parts.length; j++) {
8171 domStyle.parts[j](item.parts[j]);
8172 }
8173 for(; j < item.parts.length; j++) {
8174 domStyle.parts.push(addStyle(item.parts[j], options));
8175 }
8176 } else {
8177 var parts = [];
8178 for(var j = 0; j < item.parts.length; j++) {
8179 parts.push(addStyle(item.parts[j], options));
8180 }
8181 stylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};
8182 }
8183 }
8184}
8185
8186function listToStyles(list) {
8187 var styles = [];
8188 var newStyles = {};
8189 for(var i = 0; i < list.length; i++) {
8190 var item = list[i];
8191 var id = item[0];
8192 var css = item[1];
8193 var media = item[2];
8194 var sourceMap = item[3];
8195 var part = {css: css, media: media, sourceMap: sourceMap};
8196 if(!newStyles[id])
8197 styles.push(newStyles[id] = {id: id, parts: [part]});
8198 else
8199 newStyles[id].parts.push(part);
8200 }
8201 return styles;
8202}
8203
8204function insertStyleElement(options, styleElement) {
8205 var head = getHeadElement();
8206 var lastStyleElementInsertedAtTop = styleElementsInsertedAtTop[styleElementsInsertedAtTop.length - 1];
8207 if (options.insertAt === "top") {
8208 if(!lastStyleElementInsertedAtTop) {
8209 head.insertBefore(styleElement, head.firstChild);
8210 } else if(lastStyleElementInsertedAtTop.nextSibling) {
8211 head.insertBefore(styleElement, lastStyleElementInsertedAtTop.nextSibling);
8212 } else {
8213 head.appendChild(styleElement);
8214 }
8215 styleElementsInsertedAtTop.push(styleElement);
8216 } else if (options.insertAt === "bottom") {
8217 head.appendChild(styleElement);
8218 } else {
8219 throw new Error("Invalid value for parameter 'insertAt'. Must be 'top' or 'bottom'.");
8220 }
8221}
8222
8223function removeStyleElement(styleElement) {
8224 styleElement.parentNode.removeChild(styleElement);
8225 var idx = styleElementsInsertedAtTop.indexOf(styleElement);
8226 if(idx >= 0) {
8227 styleElementsInsertedAtTop.splice(idx, 1);
8228 }
8229}
8230
8231function createStyleElement(options) {
8232 var styleElement = document.createElement("style");
8233 styleElement.type = "text/css";
8234 insertStyleElement(options, styleElement);
8235 return styleElement;
8236}
8237
8238function createLinkElement(options) {
8239 var linkElement = document.createElement("link");
8240 linkElement.rel = "stylesheet";
8241 insertStyleElement(options, linkElement);
8242 return linkElement;
8243}
8244
8245function addStyle(obj, options) {
8246 var styleElement, update, remove;
8247
8248 if (options.singleton) {
8249 var styleIndex = singletonCounter++;
8250 styleElement = singletonElement || (singletonElement = createStyleElement(options));
8251 update = applyToSingletonTag.bind(null, styleElement, styleIndex, false);
8252 remove = applyToSingletonTag.bind(null, styleElement, styleIndex, true);
8253 } else if(obj.sourceMap &&
8254 typeof URL === "function" &&
8255 typeof URL.createObjectURL === "function" &&
8256 typeof URL.revokeObjectURL === "function" &&
8257 typeof Blob === "function" &&
8258 typeof btoa === "function") {
8259 styleElement = createLinkElement(options);
8260 update = updateLink.bind(null, styleElement);
8261 remove = function() {
8262 removeStyleElement(styleElement);
8263 if(styleElement.href)
8264 URL.revokeObjectURL(styleElement.href);
8265 };
8266 } else {
8267 styleElement = createStyleElement(options);
8268 update = applyToTag.bind(null, styleElement);
8269 remove = function() {
8270 removeStyleElement(styleElement);
8271 };
8272 }
8273
8274 update(obj);
8275
8276 return function updateStyle(newObj) {
8277 if(newObj) {
8278 if(newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap)
8279 return;
8280 update(obj = newObj);
8281 } else {
8282 remove();
8283 }
8284 };
8285}
8286
8287var replaceText = (function () {
8288 var textStore = [];
8289
8290 return function (index, replacement) {
8291 textStore[index] = replacement;
8292 return textStore.filter(Boolean).join('\n');
8293 };
8294})();
8295
8296function applyToSingletonTag(styleElement, index, remove, obj) {
8297 var css = remove ? "" : obj.css;
8298
8299 if (styleElement.styleSheet) {
8300 styleElement.styleSheet.cssText = replaceText(index, css);
8301 } else {
8302 var cssNode = document.createTextNode(css);
8303 var childNodes = styleElement.childNodes;
8304 if (childNodes[index]) styleElement.removeChild(childNodes[index]);
8305 if (childNodes.length) {
8306 styleElement.insertBefore(cssNode, childNodes[index]);
8307 } else {
8308 styleElement.appendChild(cssNode);
8309 }
8310 }
8311}
8312
8313function applyToTag(styleElement, obj) {
8314 var css = obj.css;
8315 var media = obj.media;
8316 var sourceMap = obj.sourceMap;
8317
8318 if(media) {
8319 styleElement.setAttribute("media", media)
8320 }
8321
8322 if(styleElement.styleSheet) {
8323 styleElement.styleSheet.cssText = css;
8324 } else {
8325 while(styleElement.firstChild) {
8326 styleElement.removeChild(styleElement.firstChild);
8327 }
8328 styleElement.appendChild(document.createTextNode(css));
8329 }
8330}
8331
8332function updateLink(linkElement, obj) {
8333 var css = obj.css;
8334 var media = obj.media;
8335 var sourceMap = obj.sourceMap;
8336
8337 if(sourceMap) {
8338 // http://stackoverflow.com/a/26603875
8339 css += "\n/*# sourceMappingURL=data:application/json;base64," + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + " */";
8340 }
8341
8342 var blob = new Blob([css], { type: "text/css" });
8343
8344 var oldSrc = linkElement.href;
8345
8346 linkElement.href = URL.createObjectURL(blob);
8347
8348 if(oldSrc)
8349 URL.revokeObjectURL(oldSrc);
8350}
8351
8352
8353/***/ }),
8354/* 16 */
8355/***/ (function(module, exports, __webpack_require__) {
8356
8357"use strict";
8358/**
8359 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
8360 * @version v18.1.2
8361 * @link http://www.ag-grid.com/
8362 * @license MIT
8363 */
8364
8365var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
8366 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
8367 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
8368 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
8369 return c > 3 && r && Object.defineProperty(target, key, r), r;
8370};
8371var __metadata = (this && this.__metadata) || function (k, v) {
8372 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
8373};
8374var __param = (this && this.__param) || function (paramIndex, decorator) {
8375 return function (target, key) { decorator(target, key, paramIndex); }
8376};
8377Object.defineProperty(exports, "__esModule", { value: true });
8378var logger_1 = __webpack_require__(12);
8379var context_1 = __webpack_require__(0);
8380var utils_1 = __webpack_require__(1);
8381var gridOptionsWrapper_1 = __webpack_require__(2);
8382var dragService_1 = __webpack_require__(42);
8383var columnController_1 = __webpack_require__(4);
8384var environment_1 = __webpack_require__(43);
8385var DragSourceType;
8386(function (DragSourceType) {
8387 DragSourceType[DragSourceType["ToolPanel"] = 0] = "ToolPanel";
8388 DragSourceType[DragSourceType["HeaderCell"] = 1] = "HeaderCell";
8389 DragSourceType[DragSourceType["RowDrag"] = 2] = "RowDrag";
8390})(DragSourceType = exports.DragSourceType || (exports.DragSourceType = {}));
8391var VDirection;
8392(function (VDirection) {
8393 VDirection[VDirection["Up"] = 0] = "Up";
8394 VDirection[VDirection["Down"] = 1] = "Down";
8395})(VDirection = exports.VDirection || (exports.VDirection = {}));
8396var HDirection;
8397(function (HDirection) {
8398 HDirection[HDirection["Left"] = 0] = "Left";
8399 HDirection[HDirection["Right"] = 1] = "Right";
8400})(HDirection = exports.HDirection || (exports.HDirection = {}));
8401var DragAndDropService = (function () {
8402 function DragAndDropService() {
8403 this.dragSourceAndParamsList = [];
8404 this.dropTargets = [];
8405 }
8406 DragAndDropService_1 = DragAndDropService;
8407 DragAndDropService.prototype.init = function () {
8408 this.ePinnedIcon = utils_1.Utils.createIcon('columnMovePin', this.gridOptionsWrapper, null);
8409 this.ePlusIcon = utils_1.Utils.createIcon('columnMoveAdd', this.gridOptionsWrapper, null);
8410 this.eHiddenIcon = utils_1.Utils.createIcon('columnMoveHide', this.gridOptionsWrapper, null);
8411 this.eMoveIcon = utils_1.Utils.createIcon('columnMoveMove', this.gridOptionsWrapper, null);
8412 this.eLeftIcon = utils_1.Utils.createIcon('columnMoveLeft', this.gridOptionsWrapper, null);
8413 this.eRightIcon = utils_1.Utils.createIcon('columnMoveRight', this.gridOptionsWrapper, null);
8414 this.eGroupIcon = utils_1.Utils.createIcon('columnMoveGroup', this.gridOptionsWrapper, null);
8415 this.eAggregateIcon = utils_1.Utils.createIcon('columnMoveValue', this.gridOptionsWrapper, null);
8416 this.ePivotIcon = utils_1.Utils.createIcon('columnMovePivot', this.gridOptionsWrapper, null);
8417 this.eDropNotAllowedIcon = utils_1.Utils.createIcon('dropNotAllowed', this.gridOptionsWrapper, null);
8418 };
8419 DragAndDropService.prototype.setBeans = function (loggerFactory) {
8420 this.logger = loggerFactory.create('OldToolPanelDragAndDropService');
8421 };
8422 DragAndDropService.prototype.getStringType = function (type) {
8423 switch (type) {
8424 case DragSourceType.RowDrag: return 'row';
8425 case DragSourceType.HeaderCell: return 'headerCell';
8426 case DragSourceType.ToolPanel: return 'toolPanel';
8427 default:
8428 console.warn("ag-Grid: bug - unknown drag type " + type);
8429 return null;
8430 }
8431 };
8432 DragAndDropService.prototype.addDragSource = function (dragSource, allowTouch) {
8433 if (allowTouch === void 0) { allowTouch = false; }
8434 var params = {
8435 eElement: dragSource.eElement,
8436 dragStartPixels: dragSource.dragStartPixels,
8437 onDragStart: this.onDragStart.bind(this, dragSource),
8438 onDragStop: this.onDragStop.bind(this),
8439 onDragging: this.onDragging.bind(this)
8440 };
8441 this.dragSourceAndParamsList.push({ params: params, dragSource: dragSource });
8442 this.dragService.addDragSource(params, allowTouch);
8443 };
8444 DragAndDropService.prototype.removeDragSource = function (dragSource) {
8445 var sourceAndParams = utils_1.Utils.find(this.dragSourceAndParamsList, function (item) { return item.dragSource === dragSource; });
8446 if (sourceAndParams) {
8447 this.dragService.removeDragSource(sourceAndParams.params);
8448 utils_1.Utils.removeFromArray(this.dragSourceAndParamsList, sourceAndParams);
8449 }
8450 };
8451 DragAndDropService.prototype.destroy = function () {
8452 var _this = this;
8453 this.dragSourceAndParamsList.forEach(function (sourceAndParams) {
8454 _this.dragService.removeDragSource(sourceAndParams.params);
8455 });
8456 this.dragSourceAndParamsList.length = 0;
8457 };
8458 DragAndDropService.prototype.nudge = function () {
8459 if (this.dragging) {
8460 this.onDragging(this.eventLastTime, true);
8461 }
8462 };
8463 DragAndDropService.prototype.onDragStart = function (dragSource, mouseEvent) {
8464 this.dragging = true;
8465 this.dragSource = dragSource;
8466 this.eventLastTime = mouseEvent;
8467 this.dragItem = this.dragSource.dragItemCallback();
8468 this.lastDropTarget = this.dragSource.dragSourceDropTarget;
8469 if (this.dragSource.dragStarted) {
8470 this.dragSource.dragStarted();
8471 }
8472 this.createGhost();
8473 };
8474 DragAndDropService.prototype.onDragStop = function (mouseEvent) {
8475 this.eventLastTime = null;
8476 this.dragging = false;
8477 if (this.dragSource.dragStopped) {
8478 this.dragSource.dragStopped();
8479 }
8480 if (this.lastDropTarget && this.lastDropTarget.onDragStop) {
8481 var draggingEvent = this.createDropTargetEvent(this.lastDropTarget, mouseEvent, null, null, false);
8482 this.lastDropTarget.onDragStop(draggingEvent);
8483 }
8484 this.lastDropTarget = null;
8485 this.dragItem = null;
8486 this.removeGhost();
8487 };
8488 DragAndDropService.prototype.onDragging = function (mouseEvent, fromNudge) {
8489 var hDirection = this.workOutHDirection(mouseEvent);
8490 var vDirection = this.workOutVDirection(mouseEvent);
8491 this.eventLastTime = mouseEvent;
8492 this.positionGhost(mouseEvent);
8493 // check if mouseEvent intersects with any of the drop targets
8494 var dropTarget = utils_1.Utils.find(this.dropTargets, this.isMouseOnDropTarget.bind(this, mouseEvent));
8495 if (dropTarget !== this.lastDropTarget) {
8496 this.leaveLastTargetIfExists(mouseEvent, hDirection, vDirection, fromNudge);
8497 this.enterDragTargetIfExists(dropTarget, mouseEvent, hDirection, vDirection, fromNudge);
8498 this.lastDropTarget = dropTarget;
8499 }
8500 else if (dropTarget) {
8501 var draggingEvent = this.createDropTargetEvent(dropTarget, mouseEvent, hDirection, vDirection, fromNudge);
8502 dropTarget.onDragging(draggingEvent);
8503 }
8504 };
8505 DragAndDropService.prototype.enterDragTargetIfExists = function (dropTarget, mouseEvent, hDirection, vDirection, fromNudge) {
8506 if (!dropTarget) {
8507 return;
8508 }
8509 var dragEnterEvent = this.createDropTargetEvent(dropTarget, mouseEvent, hDirection, vDirection, fromNudge);
8510 dropTarget.onDragEnter(dragEnterEvent);
8511 this.setGhostIcon(dropTarget.getIconName ? dropTarget.getIconName() : null);
8512 };
8513 DragAndDropService.prototype.leaveLastTargetIfExists = function (mouseEvent, hDirection, vDirection, fromNudge) {
8514 if (!this.lastDropTarget) {
8515 return;
8516 }
8517 var dragLeaveEvent = this.createDropTargetEvent(this.lastDropTarget, mouseEvent, hDirection, vDirection, fromNudge);
8518 this.lastDropTarget.onDragLeave(dragLeaveEvent);
8519 this.setGhostIcon(null);
8520 };
8521 DragAndDropService.prototype.getAllContainersFromDropTarget = function (dropTarget) {
8522 var containers = [dropTarget.getContainer()];
8523 var secondaryContainers = dropTarget.getSecondaryContainers ? dropTarget.getSecondaryContainers() : null;
8524 if (secondaryContainers) {
8525 containers = containers.concat(secondaryContainers);
8526 }
8527 return containers;
8528 };
8529 // checks if the mouse is on the drop target. it checks eContainer and eSecondaryContainers
8530 DragAndDropService.prototype.isMouseOnDropTarget = function (mouseEvent, dropTarget) {
8531 var allContainers = this.getAllContainersFromDropTarget(dropTarget);
8532 var mouseOverTarget = false;
8533 allContainers.forEach(function (eContainer) {
8534 if (!eContainer) {
8535 return;
8536 } // secondary can be missing
8537 var rect = eContainer.getBoundingClientRect();
8538 // if element is not visible, then width and height are zero
8539 if (rect.width === 0 || rect.height === 0) {
8540 return;
8541 }
8542 var horizontalFit = mouseEvent.clientX >= rect.left && mouseEvent.clientX <= rect.right;
8543 var verticalFit = mouseEvent.clientY >= rect.top && mouseEvent.clientY <= rect.bottom;
8544 //console.log(`rect.width = ${rect.width} || rect.height = ${rect.height} ## verticalFit = ${verticalFit}, horizontalFit = ${horizontalFit}, `);
8545 if (horizontalFit && verticalFit) {
8546 mouseOverTarget = true;
8547 }
8548 });
8549 if (mouseOverTarget) {
8550 var mouseOverTargetAndInterested = dropTarget.isInterestedIn(this.dragSource.type);
8551 return mouseOverTargetAndInterested;
8552 }
8553 else {
8554 return false;
8555 }
8556 };
8557 DragAndDropService.prototype.addDropTarget = function (dropTarget) {
8558 this.dropTargets.push(dropTarget);
8559 };
8560 DragAndDropService.prototype.workOutHDirection = function (event) {
8561 if (this.eventLastTime.clientX > event.clientX) {
8562 return HDirection.Left;
8563 }
8564 else if (this.eventLastTime.clientX < event.clientX) {
8565 return HDirection.Right;
8566 }
8567 else {
8568 return null;
8569 }
8570 };
8571 DragAndDropService.prototype.workOutVDirection = function (event) {
8572 if (this.eventLastTime.clientY > event.clientY) {
8573 return VDirection.Up;
8574 }
8575 else if (this.eventLastTime.clientY < event.clientY) {
8576 return VDirection.Down;
8577 }
8578 else {
8579 return null;
8580 }
8581 };
8582 DragAndDropService.prototype.createDropTargetEvent = function (dropTarget, event, hDirection, vDirection, fromNudge) {
8583 // localise x and y to the target component
8584 var rect = dropTarget.getContainer().getBoundingClientRect();
8585 var x = event.clientX - rect.left;
8586 var y = event.clientY - rect.top;
8587 var dropTargetEvent = {
8588 event: event,
8589 x: x,
8590 y: y,
8591 vDirection: vDirection,
8592 hDirection: hDirection,
8593 dragSource: this.dragSource,
8594 fromNudge: fromNudge,
8595 dragItem: this.dragItem
8596 };
8597 return dropTargetEvent;
8598 };
8599 DragAndDropService.prototype.positionGhost = function (event) {
8600 var ghostRect = this.eGhost.getBoundingClientRect();
8601 var ghostHeight = ghostRect.height;
8602 // for some reason, without the '-2', it still overlapped by 1 or 2 pixels, which
8603 // then brought in scrollbars to the browser. no idea why, but putting in -2 here
8604 // works around it which is good enough for me.
8605 var browserWidth = utils_1.Utils.getBodyWidth() - 2;
8606 var browserHeight = utils_1.Utils.getBodyHeight() - 2;
8607 // put ghost vertically in middle of cursor
8608 var top = event.pageY - (ghostHeight / 2);
8609 // horizontally, place cursor just right of icon
8610 var left = event.pageX - 30;
8611 var usrDocument = this.gridOptionsWrapper.getDocument();
8612 var windowScrollY = window.pageYOffset || usrDocument.documentElement.scrollTop;
8613 var windowScrollX = window.pageXOffset || usrDocument.documentElement.scrollLeft;
8614 // check ghost is not positioned outside of the browser
8615 if (browserWidth > 0) {
8616 if ((left + this.eGhost.clientWidth) > (browserWidth + windowScrollX)) {
8617 left = browserWidth + windowScrollX - this.eGhost.clientWidth;
8618 }
8619 }
8620 if (left < 0) {
8621 left = 0;
8622 }
8623 if (browserHeight > 0) {
8624 if ((top + this.eGhost.clientHeight) > (browserHeight + windowScrollY)) {
8625 top = browserHeight + windowScrollY - this.eGhost.clientHeight;
8626 }
8627 }
8628 if (top < 0) {
8629 top = 0;
8630 }
8631 this.eGhost.style.left = left + 'px';
8632 this.eGhost.style.top = top + 'px';
8633 };
8634 DragAndDropService.prototype.removeGhost = function () {
8635 if (this.eGhost && this.eGhostParent) {
8636 this.eGhostParent.removeChild(this.eGhost);
8637 }
8638 this.eGhost = null;
8639 };
8640 DragAndDropService.prototype.createGhost = function () {
8641 this.eGhost = utils_1.Utils.loadTemplate(DragAndDropService_1.GHOST_TEMPLATE);
8642 utils_1.Utils.addCssClass(this.eGhost, this.environment.getTheme());
8643 this.eGhostIcon = this.eGhost.querySelector('.ag-dnd-ghost-icon');
8644 this.setGhostIcon(null);
8645 var eText = this.eGhost.querySelector('.ag-dnd-ghost-label');
8646 eText.innerHTML = this.dragSource.dragItemName;
8647 this.eGhost.style.height = '25px';
8648 this.eGhost.style.top = '20px';
8649 this.eGhost.style.left = '20px';
8650 var usrDocument = this.gridOptionsWrapper.getDocument();
8651 this.eGhostParent = usrDocument.querySelector('body');
8652 if (!this.eGhostParent) {
8653 console.warn('ag-Grid: could not find document body, it is needed for dragging columns');
8654 }
8655 else {
8656 this.eGhostParent.appendChild(this.eGhost);
8657 }
8658 };
8659 DragAndDropService.prototype.setGhostIcon = function (iconName, shake) {
8660 if (shake === void 0) { shake = false; }
8661 utils_1.Utils.removeAllChildren(this.eGhostIcon);
8662 var eIcon;
8663 switch (iconName) {
8664 case DragAndDropService_1.ICON_ADD:
8665 eIcon = this.ePlusIcon;
8666 break;
8667 case DragAndDropService_1.ICON_PINNED:
8668 eIcon = this.ePinnedIcon;
8669 break;
8670 case DragAndDropService_1.ICON_MOVE:
8671 eIcon = this.eMoveIcon;
8672 break;
8673 case DragAndDropService_1.ICON_LEFT:
8674 eIcon = this.eLeftIcon;
8675 break;
8676 case DragAndDropService_1.ICON_RIGHT:
8677 eIcon = this.eRightIcon;
8678 break;
8679 case DragAndDropService_1.ICON_GROUP:
8680 eIcon = this.eGroupIcon;
8681 break;
8682 case DragAndDropService_1.ICON_AGGREGATE:
8683 eIcon = this.eAggregateIcon;
8684 break;
8685 case DragAndDropService_1.ICON_PIVOT:
8686 eIcon = this.ePivotIcon;
8687 break;
8688 case DragAndDropService_1.ICON_NOT_ALLOWED:
8689 eIcon = this.eDropNotAllowedIcon;
8690 break;
8691 default:
8692 eIcon = this.eHiddenIcon;
8693 break;
8694 }
8695 this.eGhostIcon.appendChild(eIcon);
8696 utils_1.Utils.addOrRemoveCssClass(this.eGhostIcon, 'ag-shake-left-to-right', shake);
8697 };
8698 DragAndDropService.ICON_PINNED = 'pinned';
8699 DragAndDropService.ICON_ADD = 'add';
8700 DragAndDropService.ICON_MOVE = 'move';
8701 DragAndDropService.ICON_LEFT = 'left';
8702 DragAndDropService.ICON_RIGHT = 'right';
8703 DragAndDropService.ICON_GROUP = 'group';
8704 DragAndDropService.ICON_AGGREGATE = 'aggregate';
8705 DragAndDropService.ICON_PIVOT = 'pivot';
8706 DragAndDropService.ICON_NOT_ALLOWED = 'notAllowed';
8707 DragAndDropService.GHOST_TEMPLATE = '<div class="ag-dnd-ghost">' +
8708 ' <span class="ag-dnd-ghost-icon ag-shake-left-to-right"></span>' +
8709 ' <div class="ag-dnd-ghost-label">' +
8710 ' </div>' +
8711 '</div>';
8712 __decorate([
8713 context_1.Autowired('gridOptionsWrapper'),
8714 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
8715 ], DragAndDropService.prototype, "gridOptionsWrapper", void 0);
8716 __decorate([
8717 context_1.Autowired('dragService'),
8718 __metadata("design:type", dragService_1.DragService)
8719 ], DragAndDropService.prototype, "dragService", void 0);
8720 __decorate([
8721 context_1.Autowired('environment'),
8722 __metadata("design:type", environment_1.Environment)
8723 ], DragAndDropService.prototype, "environment", void 0);
8724 __decorate([
8725 context_1.Autowired('columnController'),
8726 __metadata("design:type", columnController_1.ColumnController)
8727 ], DragAndDropService.prototype, "columnController", void 0);
8728 __decorate([
8729 context_1.PostConstruct,
8730 __metadata("design:type", Function),
8731 __metadata("design:paramtypes", []),
8732 __metadata("design:returntype", void 0)
8733 ], DragAndDropService.prototype, "init", null);
8734 __decorate([
8735 __param(0, context_1.Qualifier('loggerFactory')),
8736 __metadata("design:type", Function),
8737 __metadata("design:paramtypes", [logger_1.LoggerFactory]),
8738 __metadata("design:returntype", void 0)
8739 ], DragAndDropService.prototype, "setBeans", null);
8740 __decorate([
8741 context_1.PreDestroy,
8742 __metadata("design:type", Function),
8743 __metadata("design:paramtypes", []),
8744 __metadata("design:returntype", void 0)
8745 ], DragAndDropService.prototype, "destroy", null);
8746 DragAndDropService = DragAndDropService_1 = __decorate([
8747 context_1.Bean('dragAndDropService')
8748 ], DragAndDropService);
8749 return DragAndDropService;
8750 var DragAndDropService_1;
8751}());
8752exports.DragAndDropService = DragAndDropService;
8753
8754
8755/***/ }),
8756/* 17 */
8757/***/ (function(module, exports, __webpack_require__) {
8758
8759"use strict";
8760/**
8761 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
8762 * @version v18.1.2
8763 * @link http://www.ag-grid.com/
8764 * @license MIT
8765 */
8766
8767var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
8768 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
8769 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
8770 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
8771 return c > 3 && r && Object.defineProperty(target, key, r), r;
8772};
8773var __metadata = (this && this.__metadata) || function (k, v) {
8774 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
8775};
8776Object.defineProperty(exports, "__esModule", { value: true });
8777var gridOptionsWrapper_1 = __webpack_require__(2);
8778var expressionService_1 = __webpack_require__(21);
8779var columnController_1 = __webpack_require__(4);
8780var context_1 = __webpack_require__(0);
8781var utils_1 = __webpack_require__(1);
8782var events_1 = __webpack_require__(5);
8783var eventService_1 = __webpack_require__(3);
8784var valueCache_1 = __webpack_require__(35);
8785var ValueService = (function () {
8786 function ValueService() {
8787 this.initialised = false;
8788 }
8789 ValueService.prototype.init = function () {
8790 this.cellExpressions = this.gridOptionsWrapper.isEnableCellExpressions();
8791 this.initialised = true;
8792 };
8793 ValueService.prototype.getValue = function (column, rowNode, forFilter, ignoreAggData) {
8794 // console.log(`turnActive = ${this.turnActive}`);
8795 if (forFilter === void 0) { forFilter = false; }
8796 if (ignoreAggData === void 0) { ignoreAggData = false; }
8797 // hack - the grid is getting refreshed before this bean gets initialised, race condition.
8798 // really should have a way so they get initialised in the right order???
8799 if (!this.initialised) {
8800 this.init();
8801 }
8802 // pull these out to make code below easier to read
8803 var colDef = column.getColDef();
8804 var field = colDef.field;
8805 var colId = column.getId();
8806 var data = rowNode.data;
8807 var result;
8808 // if there is a value getter, this gets precedence over a field
8809 var groupDataExists = rowNode.groupData && rowNode.groupData[colId] !== undefined;
8810 var aggDataExists = !ignoreAggData && rowNode.aggData && rowNode.aggData[colId] !== undefined;
8811 if (forFilter && colDef.filterValueGetter) {
8812 result = this.executeValueGetter(colDef.filterValueGetter, data, column, rowNode);
8813 }
8814 else if (groupDataExists) {
8815 result = rowNode.groupData[colId];
8816 }
8817 else if (aggDataExists) {
8818 result = rowNode.aggData[colId];
8819 }
8820 else if (colDef.valueGetter) {
8821 result = this.executeValueGetter(colDef.valueGetter, data, column, rowNode);
8822 }
8823 else if (field && data) {
8824 result = utils_1._.getValueUsingField(data, field, column.isFieldContainsDots());
8825 }
8826 else {
8827 result = undefined;
8828 }
8829 // the result could be an expression itself, if we are allowing cell values to be expressions
8830 if (this.cellExpressions && (typeof result === 'string') && result.indexOf('=') === 0) {
8831 var cellValueGetter = result.substring(1);
8832 result = this.executeValueGetter(cellValueGetter, data, column, rowNode);
8833 }
8834 return result;
8835 };
8836 ValueService.prototype.setValue = function (rowNode, colKey, newValue) {
8837 var column = this.columnController.getPrimaryColumn(colKey);
8838 if (!rowNode || !column) {
8839 return;
8840 }
8841 // this will only happen if user is trying to paste into a group row, which doesn't make sense
8842 // the user should not be trying to paste into group rows
8843 var data = rowNode.data;
8844 if (utils_1._.missing(data)) {
8845 rowNode.data = {};
8846 }
8847 // for backwards compatibility we are also retrieving the newValueHandler as well as the valueSetter
8848 var _a = column.getColDef(), field = _a.field, newValueHandler = _a.newValueHandler, valueSetter = _a.valueSetter;
8849 // need either a field or a newValueHandler for this to work
8850 if (utils_1._.missing(field) && utils_1._.missing(newValueHandler) && utils_1._.missing(valueSetter)) {
8851 // we don't tell user about newValueHandler, as that is deprecated
8852 console.warn("ag-Grid: you need either field or valueSetter set on colDef for editing to work");
8853 return;
8854 }
8855 var params = {
8856 node: rowNode,
8857 data: rowNode.data,
8858 oldValue: this.getValue(column, rowNode),
8859 newValue: newValue,
8860 colDef: column.getColDef(),
8861 column: column,
8862 api: this.gridOptionsWrapper.getApi(),
8863 columnApi: this.gridOptionsWrapper.getColumnApi(),
8864 context: this.gridOptionsWrapper.getContext()
8865 };
8866 params.newValue = newValue;
8867 var valueWasDifferent;
8868 if (utils_1._.exists(newValueHandler)) {
8869 valueWasDifferent = newValueHandler(params);
8870 }
8871 else if (utils_1._.exists(valueSetter)) {
8872 valueWasDifferent = this.expressionService.evaluate(valueSetter, params);
8873 }
8874 else {
8875 valueWasDifferent = this.setValueUsingField(data, field, newValue, column.isFieldContainsDots());
8876 }
8877 // in case user forgot to return something (possible if they are not using TypeScript
8878 // and just forgot, or using an old newValueHandler we didn't always expect a return
8879 // value here), we default the return value to true, so we always refresh.
8880 if (valueWasDifferent === undefined) {
8881 valueWasDifferent = true;
8882 }
8883 // if no change to the value, then no need to do the updating, or notifying via events.
8884 // otherwise the user could be tabbing around the grid, and cellValueChange would get called
8885 // all the time.
8886 if (!valueWasDifferent) {
8887 return;
8888 }
8889 // reset quick filter on this row
8890 rowNode.resetQuickFilterAggregateText();
8891 this.valueCache.onDataChanged();
8892 params.newValue = this.getValue(column, rowNode);
8893 if (typeof column.getColDef().onCellValueChanged === 'function') {
8894 // to make callback async, do in a timeout
8895 setTimeout(function () { return column.getColDef().onCellValueChanged(params); }, 0);
8896 }
8897 var event = {
8898 type: events_1.Events.EVENT_CELL_VALUE_CHANGED,
8899 event: null,
8900 rowIndex: rowNode.rowIndex,
8901 rowPinned: rowNode.rowPinned,
8902 column: params.column,
8903 api: params.api,
8904 colDef: params.colDef,
8905 columnApi: params.columnApi,
8906 context: params.context,
8907 data: rowNode.data,
8908 node: rowNode,
8909 oldValue: params.oldValue,
8910 newValue: params.newValue,
8911 value: params.newValue
8912 };
8913 this.eventService.dispatchEvent(event);
8914 };
8915 ValueService.prototype.setValueUsingField = function (data, field, newValue, isFieldContainsDots) {
8916 // if no '.', then it's not a deep value
8917 var valuesAreSame;
8918 if (!isFieldContainsDots) {
8919 data[field] = newValue;
8920 }
8921 else {
8922 // otherwise it is a deep value, so need to dig for it
8923 var fieldPieces = field.split('.');
8924 var currentObject = data;
8925 while (fieldPieces.length > 0 && currentObject) {
8926 var fieldPiece = fieldPieces.shift();
8927 if (fieldPieces.length === 0) {
8928 currentObject[fieldPiece] = newValue;
8929 }
8930 else {
8931 currentObject = currentObject[fieldPiece];
8932 }
8933 }
8934 }
8935 return !valuesAreSame;
8936 };
8937 ValueService.prototype.executeValueGetter = function (filterValueGetter, data, column, rowNode) {
8938 var colId = column.getId();
8939 // if inside the same turn, just return back the value we got last time
8940 var valueFromCache = this.valueCache.getValue(rowNode, colId);
8941 if (valueFromCache !== undefined) {
8942 return valueFromCache;
8943 }
8944 var params = {
8945 data: data,
8946 node: rowNode,
8947 column: column,
8948 colDef: column.getColDef(),
8949 api: this.gridOptionsWrapper.getApi(),
8950 columnApi: this.gridOptionsWrapper.getColumnApi(),
8951 context: this.gridOptionsWrapper.getContext(),
8952 getValue: this.getValueCallback.bind(this, rowNode)
8953 };
8954 var result = this.expressionService.evaluate(filterValueGetter, params);
8955 // if a turn is active, store the value in case the grid asks for it again
8956 this.valueCache.setValue(rowNode, colId, result);
8957 return result;
8958 };
8959 ValueService.prototype.getValueCallback = function (node, field) {
8960 var otherColumn = this.columnController.getPrimaryColumn(field);
8961 if (otherColumn) {
8962 return this.getValue(otherColumn, node);
8963 }
8964 else {
8965 return null;
8966 }
8967 };
8968 // used by row grouping and pivot, to get key for a row. col can be a pivot col or a row grouping col
8969 ValueService.prototype.getKeyForNode = function (col, rowNode) {
8970 var value = this.getValue(col, rowNode);
8971 var result;
8972 var keyCreator = col.getColDef().keyCreator;
8973 if (keyCreator) {
8974 result = keyCreator({ value: value });
8975 }
8976 else {
8977 result = value;
8978 }
8979 // if already a string, or missing, just return it
8980 if (typeof result === 'string' || result === null || result === undefined) {
8981 return result;
8982 }
8983 result = String(result);
8984 if (result === '[object Object]') {
8985 utils_1._.doOnce(function () {
8986 console.warn('ag-Grid: a column you are grouping or pivoting by has objects as values. If you want to group by complex objects then either a) use a colDef.keyCreator (se ag-Grid docs) or b) to toString() on the object to return a key');
8987 }, 'getKeyForNode - warn about [object,object]');
8988 }
8989 return result;
8990 };
8991 __decorate([
8992 context_1.Autowired('gridOptionsWrapper'),
8993 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
8994 ], ValueService.prototype, "gridOptionsWrapper", void 0);
8995 __decorate([
8996 context_1.Autowired('expressionService'),
8997 __metadata("design:type", expressionService_1.ExpressionService)
8998 ], ValueService.prototype, "expressionService", void 0);
8999 __decorate([
9000 context_1.Autowired('columnController'),
9001 __metadata("design:type", columnController_1.ColumnController)
9002 ], ValueService.prototype, "columnController", void 0);
9003 __decorate([
9004 context_1.Autowired('eventService'),
9005 __metadata("design:type", eventService_1.EventService)
9006 ], ValueService.prototype, "eventService", void 0);
9007 __decorate([
9008 context_1.Autowired('valueCache'),
9009 __metadata("design:type", valueCache_1.ValueCache)
9010 ], ValueService.prototype, "valueCache", void 0);
9011 __decorate([
9012 context_1.PostConstruct,
9013 __metadata("design:type", Function),
9014 __metadata("design:paramtypes", []),
9015 __metadata("design:returntype", void 0)
9016 ], ValueService.prototype, "init", null);
9017 ValueService = __decorate([
9018 context_1.Bean('valueService')
9019 ], ValueService);
9020 return ValueService;
9021}());
9022exports.ValueService = ValueService;
9023
9024
9025/***/ }),
9026/* 18 */
9027/***/ (function(module, exports, __webpack_require__) {
9028
9029"use strict";
9030/**
9031 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
9032 * @version v18.1.2
9033 * @link http://www.ag-grid.com/
9034 * @license MIT
9035 */
9036
9037var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
9038 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
9039 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
9040 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
9041 return c > 3 && r && Object.defineProperty(target, key, r), r;
9042};
9043var __metadata = (this && this.__metadata) || function (k, v) {
9044 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9045};
9046Object.defineProperty(exports, "__esModule", { value: true });
9047var eventService_1 = __webpack_require__(3);
9048var events_1 = __webpack_require__(5);
9049var gridOptionsWrapper_1 = __webpack_require__(2);
9050var selectionController_1 = __webpack_require__(19);
9051var valueService_1 = __webpack_require__(17);
9052var columnController_1 = __webpack_require__(4);
9053var columnApi_1 = __webpack_require__(7);
9054var context_1 = __webpack_require__(0);
9055var constants_1 = __webpack_require__(9);
9056var utils_1 = __webpack_require__(1);
9057var valueCache_1 = __webpack_require__(35);
9058var gridApi_1 = __webpack_require__(6);
9059var RowNode = (function () {
9060 function RowNode() {
9061 /** Children mapped by the pivot columns */
9062 this.childrenMapped = {};
9063 /** True by default - can be overridden via gridOptions.isRowSelectable(rowNode) */
9064 this.selectable = true;
9065 this.selected = false;
9066 }
9067 RowNode.prototype.setData = function (data) {
9068 var oldData = this.data;
9069 this.data = data;
9070 this.valueCache.onDataChanged();
9071 this.updateDataOnDetailNode();
9072 this.checkRowSelectable();
9073 var event = this.createDataChangedEvent(data, oldData, false);
9074 this.dispatchLocalEvent(event);
9075 };
9076 // when we are doing master / detail, the detail node is lazy created, but then kept around.
9077 // so if we show / hide the detail, the same detail rowNode is used. so we need to keep the data
9078 // in sync, otherwise expand/collapse of the detail would still show the old values.
9079 RowNode.prototype.updateDataOnDetailNode = function () {
9080 if (this.detailNode) {
9081 this.detailNode.data = this.data;
9082 }
9083 };
9084 RowNode.prototype.createDataChangedEvent = function (newData, oldData, update) {
9085 return {
9086 type: RowNode.EVENT_DATA_CHANGED,
9087 node: this,
9088 oldData: oldData,
9089 newData: newData,
9090 update: update
9091 };
9092 };
9093 RowNode.prototype.createLocalRowEvent = function (type) {
9094 return {
9095 type: type,
9096 node: this
9097 };
9098 };
9099 // similar to setRowData, however it is expected that the data is the same data item. this
9100 // is intended to be used with Redux type stores, where the whole data can be changed. we are
9101 // guaranteed that the data is the same entity (so grid doesn't need to worry about the id of the
9102 // underlying data changing, hence doesn't need to worry about selection). the grid, upon receiving
9103 // dataChanged event, will refresh the cells rather than rip them all out (so user can show transitions).
9104 RowNode.prototype.updateData = function (data) {
9105 var oldData = this.data;
9106 this.data = data;
9107 this.updateDataOnDetailNode();
9108 this.checkRowSelectable();
9109 this.updateDataOnDetailNode();
9110 var event = this.createDataChangedEvent(data, oldData, true);
9111 this.dispatchLocalEvent(event);
9112 };
9113 RowNode.prototype.getRowIndexString = function () {
9114 if (this.rowPinned === constants_1.Constants.PINNED_TOP) {
9115 return 't-' + this.rowIndex;
9116 }
9117 else if (this.rowPinned === constants_1.Constants.PINNED_BOTTOM) {
9118 return 'b-' + this.rowIndex;
9119 }
9120 else {
9121 return this.rowIndex.toString();
9122 }
9123 };
9124 RowNode.prototype.createDaemonNode = function () {
9125 var oldNode = new RowNode();
9126 this.context.wireBean(oldNode);
9127 // just copy the id and data, this is enough for the node to be used
9128 // in the selection controller (the selection controller is the only
9129 // place where daemon nodes can live).
9130 oldNode.id = this.id;
9131 oldNode.data = this.data;
9132 oldNode.daemon = true;
9133 oldNode.selected = this.selected;
9134 oldNode.level = this.level;
9135 return oldNode;
9136 };
9137 RowNode.prototype.setDataAndId = function (data, id) {
9138 var oldNode = utils_1.Utils.exists(this.id) ? this.createDaemonNode() : null;
9139 var oldData = this.data;
9140 this.data = data;
9141 this.updateDataOnDetailNode();
9142 this.setId(id);
9143 this.selectionController.syncInRowNode(this, oldNode);
9144 this.checkRowSelectable();
9145 var event = this.createDataChangedEvent(data, oldData, false);
9146 this.dispatchLocalEvent(event);
9147 };
9148 RowNode.prototype.checkRowSelectable = function () {
9149 var isRowSelectableFunc = this.gridOptionsWrapper.getIsRowSelectableFunc();
9150 var shouldInvokeIsRowSelectable = isRowSelectableFunc && utils_1.Utils.exists(this);
9151 this.setRowSelectable(shouldInvokeIsRowSelectable ? isRowSelectableFunc(this) : true);
9152 };
9153 RowNode.prototype.setRowSelectable = function (newVal) {
9154 if (this.selectable !== newVal) {
9155 this.selectable = newVal;
9156 if (this.eventService) {
9157 this.eventService.dispatchEvent(this.createLocalRowEvent(RowNode.EVENT_SELECTABLE_CHANGED));
9158 }
9159 }
9160 };
9161 RowNode.prototype.setId = function (id) {
9162 // see if user is providing the id's
9163 var getRowNodeId = this.gridOptionsWrapper.getRowNodeIdFunc();
9164 if (getRowNodeId) {
9165 // if user is providing the id's, then we set the id only after the data has been set.
9166 // this is important for virtual pagination and viewport, where empty rows exist.
9167 if (this.data) {
9168 this.id = getRowNodeId(this.data);
9169 }
9170 else {
9171 // this can happen if user has set blank into the rowNode after the row previously
9172 // having data. this happens in virtual page row model, when data is delete and
9173 // the page is refreshed.
9174 this.id = undefined;
9175 }
9176 }
9177 else {
9178 this.id = id;
9179 }
9180 };
9181 RowNode.prototype.isPixelInRange = function (pixel) {
9182 return pixel >= this.rowTop && pixel < (this.rowTop + this.rowHeight);
9183 };
9184 RowNode.prototype.clearRowTop = function () {
9185 this.oldRowTop = this.rowTop;
9186 this.setRowTop(null);
9187 };
9188 RowNode.prototype.setFirstChild = function (firstChild) {
9189 if (this.firstChild === firstChild) {
9190 return;
9191 }
9192 this.firstChild = firstChild;
9193 if (this.eventService) {
9194 this.eventService.dispatchEvent(this.createLocalRowEvent(RowNode.EVENT_FIRST_CHILD_CHANGED));
9195 }
9196 };
9197 RowNode.prototype.setLastChild = function (lastChild) {
9198 if (this.lastChild === lastChild) {
9199 return;
9200 }
9201 this.lastChild = lastChild;
9202 if (this.eventService) {
9203 this.eventService.dispatchEvent(this.createLocalRowEvent(RowNode.EVENT_LAST_CHILD_CHANGED));
9204 }
9205 };
9206 RowNode.prototype.setChildIndex = function (childIndex) {
9207 if (this.childIndex === childIndex) {
9208 return;
9209 }
9210 this.childIndex = childIndex;
9211 if (this.eventService) {
9212 this.eventService.dispatchEvent(this.createLocalRowEvent(RowNode.EVENT_CHILD_INDEX_CHANGED));
9213 }
9214 };
9215 RowNode.prototype.setRowTop = function (rowTop) {
9216 if (this.rowTop === rowTop) {
9217 return;
9218 }
9219 this.rowTop = rowTop;
9220 if (this.eventService) {
9221 this.eventService.dispatchEvent(this.createLocalRowEvent(RowNode.EVENT_TOP_CHANGED));
9222 }
9223 };
9224 RowNode.prototype.setDragging = function (dragging) {
9225 if (this.dragging === dragging) {
9226 return;
9227 }
9228 this.dragging = dragging;
9229 if (this.eventService) {
9230 this.eventService.dispatchEvent(this.createLocalRowEvent(RowNode.EVENT_DRAGGING_CHANGED));
9231 }
9232 };
9233 RowNode.prototype.setAllChildrenCount = function (allChildrenCount) {
9234 if (this.allChildrenCount === allChildrenCount) {
9235 return;
9236 }
9237 this.allChildrenCount = allChildrenCount;
9238 if (this.eventService) {
9239 this.eventService.dispatchEvent(this.createLocalRowEvent(RowNode.EVENT_ALL_CHILDREN_COUNT_CHANGED));
9240 }
9241 };
9242 RowNode.prototype.setRowHeight = function (rowHeight) {
9243 this.rowHeight = rowHeight;
9244 if (this.eventService) {
9245 this.eventService.dispatchEvent(this.createLocalRowEvent(RowNode.EVENT_HEIGHT_CHANGED));
9246 }
9247 };
9248 RowNode.prototype.setRowIndex = function (rowIndex) {
9249 this.rowIndex = rowIndex;
9250 if (this.eventService) {
9251 this.eventService.dispatchEvent(this.createLocalRowEvent(RowNode.EVENT_ROW_INDEX_CHANGED));
9252 }
9253 };
9254 RowNode.prototype.setUiLevel = function (uiLevel) {
9255 if (this.uiLevel === uiLevel) {
9256 return;
9257 }
9258 this.uiLevel = uiLevel;
9259 if (this.eventService) {
9260 this.eventService.dispatchEvent(this.createLocalRowEvent(RowNode.EVENT_UI_LEVEL_CHANGED));
9261 }
9262 };
9263 RowNode.prototype.setExpanded = function (expanded) {
9264 if (this.expanded === expanded) {
9265 return;
9266 }
9267 this.expanded = expanded;
9268 if (this.eventService) {
9269 this.eventService.dispatchEvent(this.createLocalRowEvent(RowNode.EVENT_EXPANDED_CHANGED));
9270 }
9271 var event = this.createGlobalRowEvent(events_1.Events.EVENT_ROW_GROUP_OPENED);
9272 this.mainEventService.dispatchEvent(event);
9273 if (this.gridOptionsWrapper.isGroupIncludeFooter()) {
9274 this.gridApi.redrawRows({ rowNodes: [this] });
9275 }
9276 };
9277 RowNode.prototype.createGlobalRowEvent = function (type) {
9278 var event = {
9279 type: type,
9280 node: this,
9281 data: this.data,
9282 rowIndex: this.rowIndex,
9283 rowPinned: this.rowPinned,
9284 context: this.gridOptionsWrapper.getContext(),
9285 api: this.gridOptionsWrapper.getApi(),
9286 columnApi: this.gridOptionsWrapper.getColumnApi()
9287 };
9288 return event;
9289 };
9290 RowNode.prototype.dispatchLocalEvent = function (event) {
9291 if (this.eventService) {
9292 this.eventService.dispatchEvent(event);
9293 }
9294 };
9295 // we also allow editing the value via the editors. when it is done via
9296 // the editors, no 'cell changed' event gets fired, as it's assumed that
9297 // the cell knows about the change given it's in charge of the editing.
9298 // this method is for the client to call, so the cell listens for the change
9299 // event, and also flashes the cell when the change occurs.
9300 RowNode.prototype.setDataValue = function (colKey, newValue) {
9301 var column = this.columnController.getPrimaryColumn(colKey);
9302 this.valueService.setValue(this, column, newValue);
9303 this.dispatchCellChangedEvent(column, newValue);
9304 };
9305 RowNode.prototype.setGroupValue = function (colKey, newValue) {
9306 var column = this.columnController.getGridColumn(colKey);
9307 if (utils_1.Utils.missing(this.groupData)) {
9308 this.groupData = {};
9309 }
9310 this.groupData[column.getColId()] = newValue;
9311 this.dispatchCellChangedEvent(column, newValue);
9312 };
9313 // sets the data for an aggregation
9314 RowNode.prototype.setAggData = function (newAggData) {
9315 var _this = this;
9316 // find out all keys that could potentially change
9317 var colIds = utils_1.Utils.getAllKeysInObjects([this.aggData, newAggData]);
9318 this.aggData = newAggData;
9319 // if no event service, nobody has registered for events, so no need fire event
9320 if (this.eventService) {
9321 colIds.forEach(function (colId) {
9322 var column = _this.columnController.getGridColumn(colId);
9323 var value = _this.aggData ? _this.aggData[colId] : undefined;
9324 _this.dispatchCellChangedEvent(column, value);
9325 });
9326 }
9327 };
9328 RowNode.prototype.hasChildren = function () {
9329 // we need to return true when this.group=true, as this is used by server side row model
9330 // (as children are lazy loaded and stored in a cache anyway). otherwise we return true
9331 // if children exist.
9332 return this.group || (this.childrenAfterGroup && this.childrenAfterGroup.length > 0);
9333 };
9334 RowNode.prototype.isEmptyFillerNode = function () {
9335 return this.group && utils_1.Utils.missingOrEmpty(this.childrenAfterGroup);
9336 };
9337 RowNode.prototype.dispatchCellChangedEvent = function (column, newValue) {
9338 var cellChangedEvent = {
9339 type: RowNode.EVENT_CELL_CHANGED,
9340 node: this,
9341 column: column,
9342 newValue: newValue
9343 };
9344 this.dispatchLocalEvent(cellChangedEvent);
9345 };
9346 RowNode.prototype.resetQuickFilterAggregateText = function () {
9347 this.quickFilterAggregateText = null;
9348 };
9349 RowNode.prototype.isExpandable = function () {
9350 return this.hasChildren() || this.master;
9351 };
9352 RowNode.prototype.isSelected = function () {
9353 // for footers, we just return what our sibling selected state is, as cannot select a footer
9354 if (this.footer) {
9355 return this.sibling.isSelected();
9356 }
9357 return this.selected;
9358 };
9359 RowNode.prototype.depthFirstSearch = function (callback) {
9360 if (this.childrenAfterGroup) {
9361 this.childrenAfterGroup.forEach(function (child) { return child.depthFirstSearch(callback); });
9362 }
9363 callback(this);
9364 };
9365 // + rowController.updateGroupsInSelection()
9366 // + selectionController.calculatedSelectedForAllGroupNodes()
9367 RowNode.prototype.calculateSelectedFromChildren = function () {
9368 var atLeastOneSelected = false;
9369 var atLeastOneDeSelected = false;
9370 var atLeastOneMixed = false;
9371 var newSelectedValue;
9372 if (this.childrenAfterGroup) {
9373 for (var i = 0; i < this.childrenAfterGroup.length; i++) {
9374 var child = this.childrenAfterGroup[i];
9375 // skip non-selectable nodes to prevent inconsistent selection values
9376 if (!child.selectable)
9377 continue;
9378 var childState = child.isSelected();
9379 switch (childState) {
9380 case true:
9381 atLeastOneSelected = true;
9382 break;
9383 case false:
9384 atLeastOneDeSelected = true;
9385 break;
9386 default:
9387 atLeastOneMixed = true;
9388 break;
9389 }
9390 }
9391 }
9392 if (atLeastOneMixed) {
9393 newSelectedValue = undefined;
9394 }
9395 else if (atLeastOneSelected && !atLeastOneDeSelected) {
9396 newSelectedValue = true;
9397 }
9398 else if (!atLeastOneSelected && atLeastOneDeSelected) {
9399 newSelectedValue = false;
9400 }
9401 else {
9402 newSelectedValue = undefined;
9403 }
9404 this.selectThisNode(newSelectedValue);
9405 };
9406 RowNode.prototype.setSelectedInitialValue = function (selected) {
9407 this.selected = selected;
9408 };
9409 RowNode.prototype.setSelected = function (newValue, clearSelection, suppressFinishActions) {
9410 if (clearSelection === void 0) { clearSelection = false; }
9411 if (suppressFinishActions === void 0) { suppressFinishActions = false; }
9412 this.setSelectedParams({
9413 newValue: newValue,
9414 clearSelection: clearSelection,
9415 suppressFinishActions: suppressFinishActions,
9416 rangeSelect: false
9417 });
9418 };
9419 RowNode.prototype.isRowPinned = function () {
9420 return this.rowPinned === constants_1.Constants.PINNED_TOP || this.rowPinned === constants_1.Constants.PINNED_BOTTOM;
9421 };
9422 // to make calling code more readable, this is the same method as setSelected except it takes names parameters
9423 RowNode.prototype.setSelectedParams = function (params) {
9424 var groupSelectsChildren = this.gridOptionsWrapper.isGroupSelectsChildren();
9425 var newValue = params.newValue === true;
9426 var clearSelection = params.clearSelection === true;
9427 var suppressFinishActions = params.suppressFinishActions === true;
9428 var rangeSelect = params.rangeSelect === true;
9429 // groupSelectsFiltered only makes sense when group selects children
9430 var groupSelectsFiltered = groupSelectsChildren && (params.groupSelectsFiltered === true);
9431 if (this.id === undefined) {
9432 console.warn('ag-Grid: cannot select node until id for node is known');
9433 return 0;
9434 }
9435 if (this.rowPinned) {
9436 console.log('ag-Grid: cannot select pinned rows');
9437 return 0;
9438 }
9439 // if we are a footer, we don't do selection, just pass the info
9440 // to the sibling (the parent of the group)
9441 if (this.footer) {
9442 var count = this.sibling.setSelectedParams(params);
9443 return count;
9444 }
9445 if (rangeSelect) {
9446 var newRowClicked = this.selectionController.getLastSelectedNode() !== this;
9447 var allowMultiSelect = this.gridOptionsWrapper.isRowSelectionMulti();
9448 if (newRowClicked && allowMultiSelect) {
9449 return this.doRowRangeSelection();
9450 }
9451 }
9452 var updatedCount = 0;
9453 // when groupSelectsFiltered, then this node may end up intermediate despite
9454 // trying to set it to true / false. this group will be calculated further on
9455 // down when we call calculatedSelectedForAllGroupNodes(). we need to skip it
9456 // here, otherwise the updatedCount would include it.
9457 var skipThisNode = groupSelectsFiltered && this.group;
9458 if (!skipThisNode) {
9459 var thisNodeWasSelected = this.selectThisNode(newValue);
9460 if (thisNodeWasSelected) {
9461 updatedCount++;
9462 }
9463 }
9464 if (groupSelectsChildren && this.group) {
9465 updatedCount += this.selectChildNodes(newValue, groupSelectsFiltered);
9466 }
9467 // clear other nodes if not doing multi select
9468 if (!suppressFinishActions) {
9469 var clearOtherNodes = newValue && (clearSelection || !this.gridOptionsWrapper.isRowSelectionMulti());
9470 if (clearOtherNodes) {
9471 updatedCount += this.selectionController.clearOtherNodes(this);
9472 }
9473 // only if we selected something, then update groups and fire events
9474 if (updatedCount > 0) {
9475 this.selectionController.updateGroupsFromChildrenSelections();
9476 // this is the very end of the 'action node', so we are finished all the updates,
9477 // include any parent / child changes that this method caused
9478 var event_1 = {
9479 type: events_1.Events.EVENT_SELECTION_CHANGED,
9480 api: this.gridApi,
9481 columnApi: this.columnApi
9482 };
9483 this.mainEventService.dispatchEvent(event_1);
9484 }
9485 // so if user next does shift-select, we know where to start the selection from
9486 if (newValue) {
9487 this.selectionController.setLastSelectedNode(this);
9488 }
9489 }
9490 return updatedCount;
9491 };
9492 // selects all rows between this node and the last selected node (or the top if this is the first selection).
9493 // not to be mixed up with 'cell range selection' where you drag the mouse, this is row range selection, by
9494 // holding down 'shift'.
9495 RowNode.prototype.doRowRangeSelection = function () {
9496 var updatedCount = 0;
9497 var groupsSelectChildren = this.gridOptionsWrapper.isGroupSelectsChildren();
9498 var lastSelectedNode = this.selectionController.getLastSelectedNode();
9499 var nodesToSelect = this.rowModel.getNodesInRangeForSelection(this, lastSelectedNode);
9500 nodesToSelect.forEach(function (rowNode) {
9501 if (rowNode.group && groupsSelectChildren) {
9502 return;
9503 }
9504 var nodeWasSelected = rowNode.selectThisNode(true);
9505 if (nodeWasSelected) {
9506 updatedCount++;
9507 }
9508 });
9509 this.selectionController.updateGroupsFromChildrenSelections();
9510 var event = {
9511 type: events_1.Events.EVENT_SELECTION_CHANGED,
9512 api: this.gridApi,
9513 columnApi: this.columnApi
9514 };
9515 this.mainEventService.dispatchEvent(event);
9516 return updatedCount;
9517 };
9518 RowNode.prototype.isParentOfNode = function (potentialParent) {
9519 var parentNode = this.parent;
9520 while (parentNode) {
9521 if (parentNode === potentialParent) {
9522 return true;
9523 }
9524 parentNode = parentNode.parent;
9525 }
9526 return false;
9527 };
9528 RowNode.prototype.selectThisNode = function (newValue) {
9529 if (!this.selectable || this.selected === newValue)
9530 return false;
9531 this.selected = newValue;
9532 if (this.eventService) {
9533 this.dispatchLocalEvent(this.createLocalRowEvent(RowNode.EVENT_ROW_SELECTED));
9534 }
9535 var event = this.createGlobalRowEvent(events_1.Events.EVENT_ROW_SELECTED);
9536 this.mainEventService.dispatchEvent(event);
9537 return true;
9538 };
9539 RowNode.prototype.selectChildNodes = function (newValue, groupSelectsFiltered) {
9540 var children = groupSelectsFiltered ? this.childrenAfterFilter : this.childrenAfterGroup;
9541 var updatedCount = 0;
9542 if (utils_1.Utils.missing(children)) {
9543 return;
9544 }
9545 for (var i = 0; i < children.length; i++) {
9546 updatedCount += children[i].setSelectedParams({
9547 newValue: newValue,
9548 clearSelection: false,
9549 suppressFinishActions: true,
9550 groupSelectsFiltered: groupSelectsFiltered
9551 });
9552 }
9553 return updatedCount;
9554 };
9555 RowNode.prototype.addEventListener = function (eventType, listener) {
9556 if (!this.eventService) {
9557 this.eventService = new eventService_1.EventService();
9558 }
9559 this.eventService.addEventListener(eventType, listener);
9560 };
9561 RowNode.prototype.removeEventListener = function (eventType, listener) {
9562 this.eventService.removeEventListener(eventType, listener);
9563 };
9564 RowNode.prototype.onMouseEnter = function () {
9565 this.dispatchLocalEvent(this.createLocalRowEvent(RowNode.EVENT_MOUSE_ENTER));
9566 };
9567 RowNode.prototype.onMouseLeave = function () {
9568 this.dispatchLocalEvent(this.createLocalRowEvent(RowNode.EVENT_MOUSE_LEAVE));
9569 };
9570 RowNode.prototype.getFirstChildOfFirstChild = function (rowGroupColumn) {
9571 var currentRowNode = this;
9572 // if we are hiding groups, then if we are the first child, of the first child,
9573 // all the way up to the column we are interested in, then we show the group cell.
9574 var isCandidate = true;
9575 var foundFirstChildPath = false;
9576 var nodeToSwapIn;
9577 while (isCandidate && !foundFirstChildPath) {
9578 var parentRowNode = currentRowNode.parent;
9579 var firstChild = utils_1.Utils.exists(parentRowNode) && currentRowNode.firstChild;
9580 if (firstChild) {
9581 if (parentRowNode.rowGroupColumn === rowGroupColumn) {
9582 foundFirstChildPath = true;
9583 nodeToSwapIn = parentRowNode;
9584 }
9585 }
9586 else {
9587 isCandidate = false;
9588 }
9589 currentRowNode = parentRowNode;
9590 }
9591 return foundFirstChildPath ? nodeToSwapIn : null;
9592 };
9593 RowNode.EVENT_ROW_SELECTED = 'rowSelected';
9594 RowNode.EVENT_DATA_CHANGED = 'dataChanged';
9595 RowNode.EVENT_CELL_CHANGED = 'cellChanged';
9596 RowNode.EVENT_ALL_CHILDREN_COUNT_CHANGED = 'allChildrenCountChanged';
9597 RowNode.EVENT_MOUSE_ENTER = 'mouseEnter';
9598 RowNode.EVENT_MOUSE_LEAVE = 'mouseLeave';
9599 RowNode.EVENT_HEIGHT_CHANGED = 'heightChanged';
9600 RowNode.EVENT_TOP_CHANGED = 'topChanged';
9601 RowNode.EVENT_FIRST_CHILD_CHANGED = 'firstChildChanged';
9602 RowNode.EVENT_LAST_CHILD_CHANGED = 'lastChildChanged';
9603 RowNode.EVENT_CHILD_INDEX_CHANGED = 'childIndexChanged';
9604 RowNode.EVENT_ROW_INDEX_CHANGED = 'rowIndexChanged';
9605 RowNode.EVENT_EXPANDED_CHANGED = 'expandedChanged';
9606 RowNode.EVENT_SELECTABLE_CHANGED = 'selectableChanged';
9607 RowNode.EVENT_UI_LEVEL_CHANGED = 'uiLevelChanged';
9608 RowNode.EVENT_DRAGGING_CHANGED = 'draggingChanged';
9609 __decorate([
9610 context_1.Autowired('eventService'),
9611 __metadata("design:type", eventService_1.EventService)
9612 ], RowNode.prototype, "mainEventService", void 0);
9613 __decorate([
9614 context_1.Autowired('gridOptionsWrapper'),
9615 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
9616 ], RowNode.prototype, "gridOptionsWrapper", void 0);
9617 __decorate([
9618 context_1.Autowired('selectionController'),
9619 __metadata("design:type", selectionController_1.SelectionController)
9620 ], RowNode.prototype, "selectionController", void 0);
9621 __decorate([
9622 context_1.Autowired('columnController'),
9623 __metadata("design:type", columnController_1.ColumnController)
9624 ], RowNode.prototype, "columnController", void 0);
9625 __decorate([
9626 context_1.Autowired('valueService'),
9627 __metadata("design:type", valueService_1.ValueService)
9628 ], RowNode.prototype, "valueService", void 0);
9629 __decorate([
9630 context_1.Autowired('rowModel'),
9631 __metadata("design:type", Object)
9632 ], RowNode.prototype, "rowModel", void 0);
9633 __decorate([
9634 context_1.Autowired('context'),
9635 __metadata("design:type", context_1.Context)
9636 ], RowNode.prototype, "context", void 0);
9637 __decorate([
9638 context_1.Autowired('valueCache'),
9639 __metadata("design:type", valueCache_1.ValueCache)
9640 ], RowNode.prototype, "valueCache", void 0);
9641 __decorate([
9642 context_1.Autowired('columnApi'),
9643 __metadata("design:type", columnApi_1.ColumnApi)
9644 ], RowNode.prototype, "columnApi", void 0);
9645 __decorate([
9646 context_1.Autowired('gridApi'),
9647 __metadata("design:type", gridApi_1.GridApi)
9648 ], RowNode.prototype, "gridApi", void 0);
9649 return RowNode;
9650}());
9651exports.RowNode = RowNode;
9652
9653
9654/***/ }),
9655/* 19 */
9656/***/ (function(module, exports, __webpack_require__) {
9657
9658"use strict";
9659/**
9660 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
9661 * @version v18.1.2
9662 * @link http://www.ag-grid.com/
9663 * @license MIT
9664 */
9665
9666var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
9667 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
9668 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
9669 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
9670 return c > 3 && r && Object.defineProperty(target, key, r), r;
9671};
9672var __metadata = (this && this.__metadata) || function (k, v) {
9673 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9674};
9675var __param = (this && this.__param) || function (paramIndex, decorator) {
9676 return function (target, key) { decorator(target, key, paramIndex); }
9677};
9678Object.defineProperty(exports, "__esModule", { value: true });
9679var utils_1 = __webpack_require__(1);
9680var context_1 = __webpack_require__(0);
9681var context_2 = __webpack_require__(0);
9682var logger_1 = __webpack_require__(12);
9683var eventService_1 = __webpack_require__(3);
9684var events_1 = __webpack_require__(5);
9685var context_3 = __webpack_require__(0);
9686var gridOptionsWrapper_1 = __webpack_require__(2);
9687var context_4 = __webpack_require__(0);
9688var constants_1 = __webpack_require__(9);
9689var columnApi_1 = __webpack_require__(7);
9690var gridApi_1 = __webpack_require__(6);
9691var SelectionController = (function () {
9692 function SelectionController() {
9693 }
9694 SelectionController.prototype.setBeans = function (loggerFactory) {
9695 this.logger = loggerFactory.create('SelectionController');
9696 this.reset();
9697 if (this.gridOptionsWrapper.isRowModelDefault()) {
9698 this.eventService.addEventListener(events_1.Events.EVENT_ROW_DATA_CHANGED, this.reset.bind(this));
9699 }
9700 else {
9701 this.logger.log('dont know what to do here');
9702 }
9703 };
9704 SelectionController.prototype.init = function () {
9705 this.groupSelectsChildren = this.gridOptionsWrapper.isGroupSelectsChildren();
9706 this.eventService.addEventListener(events_1.Events.EVENT_ROW_SELECTED, this.onRowSelected.bind(this));
9707 };
9708 SelectionController.prototype.setLastSelectedNode = function (rowNode) {
9709 this.lastSelectedNode = rowNode;
9710 };
9711 SelectionController.prototype.getLastSelectedNode = function () {
9712 return this.lastSelectedNode;
9713 };
9714 SelectionController.prototype.getSelectedNodes = function () {
9715 var selectedNodes = [];
9716 utils_1.Utils.iterateObject(this.selectedNodes, function (key, rowNode) {
9717 if (rowNode) {
9718 selectedNodes.push(rowNode);
9719 }
9720 });
9721 return selectedNodes;
9722 };
9723 SelectionController.prototype.getSelectedRows = function () {
9724 var selectedRows = [];
9725 utils_1.Utils.iterateObject(this.selectedNodes, function (key, rowNode) {
9726 if (rowNode && rowNode.data) {
9727 selectedRows.push(rowNode.data);
9728 }
9729 });
9730 return selectedRows;
9731 };
9732 SelectionController.prototype.removeGroupsFromSelection = function () {
9733 var _this = this;
9734 utils_1.Utils.iterateObject(this.selectedNodes, function (key, rowNode) {
9735 if (rowNode && rowNode.group) {
9736 _this.selectedNodes[rowNode.id] = undefined;
9737 }
9738 });
9739 };
9740 // should only be called if groupSelectsChildren=true
9741 SelectionController.prototype.updateGroupsFromChildrenSelections = function () {
9742 // we only do this when group selection state depends on selected children
9743 if (!this.gridOptionsWrapper.isGroupSelectsChildren()) {
9744 return;
9745 }
9746 // also only do it if CSRM (code should never allow this anyway)
9747 if (this.rowModel.getType() !== constants_1.Constants.ROW_MODEL_TYPE_CLIENT_SIDE) {
9748 return;
9749 }
9750 var clientSideRowModel = this.rowModel;
9751 clientSideRowModel.getTopLevelNodes().forEach(function (rowNode) {
9752 rowNode.depthFirstSearch(function (rowNode) {
9753 if (rowNode.group) {
9754 rowNode.calculateSelectedFromChildren();
9755 }
9756 });
9757 });
9758 };
9759 SelectionController.prototype.getNodeForIdIfSelected = function (id) {
9760 return this.selectedNodes[id];
9761 };
9762 SelectionController.prototype.clearOtherNodes = function (rowNodeToKeepSelected) {
9763 var _this = this;
9764 var groupsToRefresh = {};
9765 var updatedCount = 0;
9766 utils_1.Utils.iterateObject(this.selectedNodes, function (key, otherRowNode) {
9767 if (otherRowNode && otherRowNode.id !== rowNodeToKeepSelected.id) {
9768 var rowNode = _this.selectedNodes[otherRowNode.id];
9769 updatedCount += rowNode.setSelectedParams({ newValue: false, clearSelection: false, suppressFinishActions: true });
9770 if (_this.groupSelectsChildren && otherRowNode.parent) {
9771 groupsToRefresh[otherRowNode.parent.id] = otherRowNode.parent;
9772 }
9773 }
9774 });
9775 utils_1.Utils.iterateObject(groupsToRefresh, function (key, group) {
9776 group.calculateSelectedFromChildren();
9777 });
9778 return updatedCount;
9779 };
9780 SelectionController.prototype.onRowSelected = function (event) {
9781 var rowNode = event.node;
9782 // we do not store the group rows when the groups select children
9783 if (this.groupSelectsChildren && rowNode.group) {
9784 return;
9785 }
9786 if (rowNode.isSelected()) {
9787 this.selectedNodes[rowNode.id] = rowNode;
9788 }
9789 else {
9790 this.selectedNodes[rowNode.id] = undefined;
9791 }
9792 };
9793 SelectionController.prototype.syncInRowNode = function (rowNode, oldNode) {
9794 this.syncInOldRowNode(rowNode, oldNode);
9795 this.syncInNewRowNode(rowNode);
9796 };
9797 // if the id has changed for the node, then this means the rowNode
9798 // is getting used for a different data item, which breaks
9799 // our selectedNodes, as the node now is mapped by the old id
9800 // which is inconsistent. so to keep the old node as selected,
9801 // we swap in the clone (with the old id and old data). this means
9802 // the oldNode is effectively a daemon we keep a reference to,
9803 // so if client calls api.getSelectedNodes(), it gets the daemon
9804 // in the result. when the client un-selects, the reference to the
9805 // daemon is removed. the daemon, because it's an oldNode, is not
9806 // used by the grid for rendering, it's a copy of what the node used
9807 // to be like before the id was changed.
9808 SelectionController.prototype.syncInOldRowNode = function (rowNode, oldNode) {
9809 var oldNodeHasDifferentId = utils_1.Utils.exists(oldNode) && (rowNode.id !== oldNode.id);
9810 if (oldNodeHasDifferentId) {
9811 var oldNodeSelected = utils_1.Utils.exists(this.selectedNodes[oldNode.id]);
9812 if (oldNodeSelected) {
9813 this.selectedNodes[oldNode.id] = oldNode;
9814 }
9815 }
9816 };
9817 SelectionController.prototype.syncInNewRowNode = function (rowNode) {
9818 if (utils_1.Utils.exists(this.selectedNodes[rowNode.id])) {
9819 rowNode.setSelectedInitialValue(true);
9820 this.selectedNodes[rowNode.id] = rowNode;
9821 }
9822 else {
9823 rowNode.setSelectedInitialValue(false);
9824 }
9825 };
9826 SelectionController.prototype.reset = function () {
9827 this.logger.log('reset');
9828 this.selectedNodes = {};
9829 this.lastSelectedNode = null;
9830 };
9831 // returns a list of all nodes at 'best cost' - a feature to be used
9832 // with groups / trees. if a group has all it's children selected,
9833 // then the group appears in the result, but not the children.
9834 // Designed for use with 'children' as the group selection type,
9835 // where groups don't actually appear in the selection normally.
9836 SelectionController.prototype.getBestCostNodeSelection = function () {
9837 if (this.rowModel.getType() !== constants_1.Constants.ROW_MODEL_TYPE_CLIENT_SIDE) {
9838 console.warn('getBestCostNodeSelection is only avilable when using normal row model');
9839 }
9840 var clientSideRowModel = this.rowModel;
9841 var topLevelNodes = clientSideRowModel.getTopLevelNodes();
9842 if (topLevelNodes === null) {
9843 console.warn('selectAll not available doing rowModel=virtual');
9844 return;
9845 }
9846 var result = [];
9847 // recursive function, to find the selected nodes
9848 function traverse(nodes) {
9849 for (var i = 0, l = nodes.length; i < l; i++) {
9850 var node = nodes[i];
9851 if (node.isSelected()) {
9852 result.push(node);
9853 }
9854 else {
9855 // if not selected, then if it's a group, and the group
9856 // has children, continue to search for selections
9857 if (node.group && node.children) {
9858 traverse(node.children);
9859 }
9860 }
9861 }
9862 }
9863 traverse(topLevelNodes);
9864 return result;
9865 };
9866 SelectionController.prototype.setRowModel = function (rowModel) {
9867 this.rowModel = rowModel;
9868 };
9869 SelectionController.prototype.isEmpty = function () {
9870 var count = 0;
9871 utils_1.Utils.iterateObject(this.selectedNodes, function (nodeId, rowNode) {
9872 if (rowNode) {
9873 count++;
9874 }
9875 });
9876 return count === 0;
9877 };
9878 SelectionController.prototype.deselectAllRowNodes = function (justFiltered) {
9879 if (justFiltered === void 0) { justFiltered = false; }
9880 var callback = function (rowNode) { return rowNode.selectThisNode(false); };
9881 var rowModelClientSide = this.rowModel.getType() === constants_1.Constants.ROW_MODEL_TYPE_CLIENT_SIDE;
9882 if (justFiltered) {
9883 if (!rowModelClientSide) {
9884 console.error('ag-Grid: selecting just filtered only works with In Memory Row Model');
9885 return;
9886 }
9887 var clientSideRowModel = this.rowModel;
9888 clientSideRowModel.forEachNodeAfterFilter(callback);
9889 }
9890 else {
9891 utils_1.Utils.iterateObject(this.selectedNodes, function (id, rowNode) {
9892 // remember the reference can be to null, as we never 'delete' from the map
9893 if (rowNode) {
9894 callback(rowNode);
9895 }
9896 });
9897 // this clears down the map (whereas above only sets the items in map to 'undefined')
9898 this.reset();
9899 }
9900 // the above does not clean up the parent rows if they are selected
9901 if (rowModelClientSide && this.groupSelectsChildren) {
9902 this.updateGroupsFromChildrenSelections();
9903 }
9904 var event = {
9905 type: events_1.Events.EVENT_SELECTION_CHANGED,
9906 api: this.gridApi,
9907 columnApi: this.columnApi
9908 };
9909 this.eventService.dispatchEvent(event);
9910 };
9911 SelectionController.prototype.selectAllRowNodes = function (justFiltered) {
9912 if (justFiltered === void 0) { justFiltered = false; }
9913 if (this.rowModel.getType() !== constants_1.Constants.ROW_MODEL_TYPE_CLIENT_SIDE) {
9914 throw "selectAll only available with normal row model, ie not " + this.rowModel.getType();
9915 }
9916 var clientSideRowModel = this.rowModel;
9917 var callback = function (rowNode) { return rowNode.selectThisNode(true); };
9918 if (justFiltered) {
9919 clientSideRowModel.forEachNodeAfterFilter(callback);
9920 }
9921 else {
9922 clientSideRowModel.forEachNode(callback);
9923 }
9924 // the above does not clean up the parent rows if they are selected
9925 if (this.rowModel.getType() === constants_1.Constants.ROW_MODEL_TYPE_CLIENT_SIDE && this.groupSelectsChildren) {
9926 this.updateGroupsFromChildrenSelections();
9927 }
9928 var event = {
9929 type: events_1.Events.EVENT_SELECTION_CHANGED,
9930 api: this.gridApi,
9931 columnApi: this.columnApi
9932 };
9933 this.eventService.dispatchEvent(event);
9934 };
9935 // Deprecated method
9936 SelectionController.prototype.selectNode = function (rowNode, tryMulti) {
9937 rowNode.setSelectedParams({ newValue: true, clearSelection: !tryMulti });
9938 };
9939 // Deprecated method
9940 SelectionController.prototype.deselectIndex = function (rowIndex) {
9941 var node = this.rowModel.getRow(rowIndex);
9942 this.deselectNode(node);
9943 };
9944 // Deprecated method
9945 SelectionController.prototype.deselectNode = function (rowNode) {
9946 rowNode.setSelectedParams({ newValue: false, clearSelection: false });
9947 };
9948 // Deprecated method
9949 SelectionController.prototype.selectIndex = function (index, tryMulti) {
9950 var node = this.rowModel.getRow(index);
9951 this.selectNode(node, tryMulti);
9952 };
9953 __decorate([
9954 context_3.Autowired('eventService'),
9955 __metadata("design:type", eventService_1.EventService)
9956 ], SelectionController.prototype, "eventService", void 0);
9957 __decorate([
9958 context_3.Autowired('rowModel'),
9959 __metadata("design:type", Object)
9960 ], SelectionController.prototype, "rowModel", void 0);
9961 __decorate([
9962 context_3.Autowired('gridOptionsWrapper'),
9963 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
9964 ], SelectionController.prototype, "gridOptionsWrapper", void 0);
9965 __decorate([
9966 context_3.Autowired('columnApi'),
9967 __metadata("design:type", columnApi_1.ColumnApi)
9968 ], SelectionController.prototype, "columnApi", void 0);
9969 __decorate([
9970 context_3.Autowired('gridApi'),
9971 __metadata("design:type", gridApi_1.GridApi)
9972 ], SelectionController.prototype, "gridApi", void 0);
9973 __decorate([
9974 __param(0, context_2.Qualifier('loggerFactory')),
9975 __metadata("design:type", Function),
9976 __metadata("design:paramtypes", [logger_1.LoggerFactory]),
9977 __metadata("design:returntype", void 0)
9978 ], SelectionController.prototype, "setBeans", null);
9979 __decorate([
9980 context_4.PostConstruct,
9981 __metadata("design:type", Function),
9982 __metadata("design:paramtypes", []),
9983 __metadata("design:returntype", void 0)
9984 ], SelectionController.prototype, "init", null);
9985 SelectionController = __decorate([
9986 context_1.Bean('selectionController')
9987 ], SelectionController);
9988 return SelectionController;
9989}());
9990exports.SelectionController = SelectionController;
9991
9992
9993/***/ }),
9994/* 20 */
9995/***/ (function(module, exports, __webpack_require__) {
9996
9997"use strict";
9998/**
9999 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
10000 * @version v18.1.2
10001 * @link http://www.ag-grid.com/
10002 * @license MIT
10003 */
10004
10005var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
10006 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
10007 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
10008 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
10009 return c > 3 && r && Object.defineProperty(target, key, r), r;
10010};
10011var __metadata = (this && this.__metadata) || function (k, v) {
10012 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10013};
10014Object.defineProperty(exports, "__esModule", { value: true });
10015var utils_1 = __webpack_require__(1);
10016var gridOptionsWrapper_1 = __webpack_require__(2);
10017var popupService_1 = __webpack_require__(37);
10018var valueService_1 = __webpack_require__(17);
10019var columnController_1 = __webpack_require__(4);
10020var columnApi_1 = __webpack_require__(7);
10021var context_1 = __webpack_require__(0);
10022var eventService_1 = __webpack_require__(3);
10023var events_1 = __webpack_require__(5);
10024var gridApi_1 = __webpack_require__(6);
10025var componentResolver_1 = __webpack_require__(29);
10026var FilterManager = (function () {
10027 function FilterManager() {
10028 this.allFilters = {};
10029 this.quickFilter = null;
10030 this.quickFilterParts = null;
10031 }
10032 FilterManager_1 = FilterManager;
10033 FilterManager.prototype.init = function () {
10034 this.eventService.addEventListener(events_1.Events.EVENT_ROW_DATA_CHANGED, this.onNewRowsLoaded.bind(this));
10035 this.eventService.addEventListener(events_1.Events.EVENT_NEW_COLUMNS_LOADED, this.onNewColumnsLoaded.bind(this));
10036 this.quickFilter = this.parseQuickFilter(this.gridOptionsWrapper.getQuickFilterText());
10037 this.setQuickFilterParts();
10038 // check this here, in case there is a filter from the start
10039 this.checkExternalFilter();
10040 };
10041 FilterManager.prototype.setQuickFilterParts = function () {
10042 if (this.quickFilter) {
10043 this.quickFilterParts = this.quickFilter.split(' ');
10044 }
10045 else {
10046 this.quickFilterParts = null;
10047 }
10048 };
10049 FilterManager.prototype.setFilterModel = function (model) {
10050 var _this = this;
10051 var allPromises = [];
10052 if (model) {
10053 // mark the filters as we set them, so any active filters left over we stop
10054 var modelKeys_1 = Object.keys(model);
10055 utils_1.Utils.iterateObject(this.allFilters, function (colId, filterWrapper) {
10056 utils_1.Utils.removeFromArray(modelKeys_1, colId);
10057 var newModel = model[colId];
10058 _this.setModelOnFilterWrapper(filterWrapper.filterPromise, newModel);
10059 allPromises.push(filterWrapper.filterPromise);
10060 });
10061 // at this point, processedFields contains data for which we don't have a filter working yet
10062 utils_1.Utils.iterateArray(modelKeys_1, function (colId) {
10063 var column = _this.columnController.getPrimaryColumn(colId);
10064 if (!column) {
10065 console.warn('Warning ag-grid setFilterModel - no column found for colId ' + colId);
10066 return;
10067 }
10068 var filterWrapper = _this.getOrCreateFilterWrapper(column);
10069 _this.setModelOnFilterWrapper(filterWrapper.filterPromise, model[colId]);
10070 allPromises.push(filterWrapper.filterPromise);
10071 });
10072 }
10073 else {
10074 utils_1.Utils.iterateObject(this.allFilters, function (key, filterWrapper) {
10075 _this.setModelOnFilterWrapper(filterWrapper.filterPromise, null);
10076 allPromises.push(filterWrapper.filterPromise);
10077 });
10078 }
10079 utils_1.Promise.all(allPromises).then(function (whatever) {
10080 _this.onFilterChanged();
10081 });
10082 };
10083 FilterManager.prototype.setModelOnFilterWrapper = function (filterPromise, newModel) {
10084 filterPromise.then(function (filter) {
10085 if (typeof filter.setModel !== 'function') {
10086 console.warn('Warning ag-grid - filter missing setModel method, which is needed for setFilterModel');
10087 return;
10088 }
10089 filter.setModel(newModel);
10090 });
10091 };
10092 FilterManager.prototype.getFilterModel = function () {
10093 var result = {};
10094 utils_1.Utils.iterateObject(this.allFilters, function (key, filterWrapper) {
10095 // because user can provide filters, we provide useful error checking and messages
10096 var filterPromise = filterWrapper.filterPromise;
10097 var filter = filterPromise.resolveNow(null, function (filter) { return filter; });
10098 if (filter == null) {
10099 return null;
10100 }
10101 if (typeof filter.getModel !== 'function') {
10102 console.warn('Warning ag-grid - filter API missing getModel method, which is needed for getFilterModel');
10103 return;
10104 }
10105 var model = filter.getModel();
10106 if (utils_1.Utils.exists(model)) {
10107 result[key] = model;
10108 }
10109 });
10110 return result;
10111 };
10112 // returns true if any advanced filter (ie not quick filter) active
10113 FilterManager.prototype.isAdvancedFilterPresent = function () {
10114 return this.advancedFilterPresent;
10115 };
10116 FilterManager.prototype.setAdvancedFilterPresent = function () {
10117 var atLeastOneActive = false;
10118 utils_1.Utils.iterateObject(this.allFilters, function (key, filterWrapper) {
10119 if (filterWrapper.filterPromise.resolveNow(false, function (filter) { return filter.isFilterActive(); })) {
10120 atLeastOneActive = true;
10121 }
10122 });
10123 this.advancedFilterPresent = atLeastOneActive;
10124 };
10125 FilterManager.prototype.updateFilterFlagInColumns = function (source) {
10126 utils_1.Utils.iterateObject(this.allFilters, function (key, filterWrapper) {
10127 var filterActive = filterWrapper.filterPromise.resolveNow(false, function (filter) { return filter.isFilterActive(); });
10128 filterWrapper.column.setFilterActive(filterActive, source);
10129 });
10130 };
10131 // returns true if quickFilter or advancedFilter
10132 FilterManager.prototype.isAnyFilterPresent = function () {
10133 return this.isQuickFilterPresent() || this.advancedFilterPresent || this.externalFilterPresent;
10134 };
10135 FilterManager.prototype.doesFilterPass = function (node, filterToSkip) {
10136 var data = node.data;
10137 var colKeys = Object.keys(this.allFilters);
10138 for (var i = 0, l = colKeys.length; i < l; i++) {
10139 var colId = colKeys[i];
10140 var filterWrapper = this.allFilters[colId];
10141 // if no filter, always pass
10142 if (filterWrapper === undefined) {
10143 continue;
10144 }
10145 var filter = filterWrapper.filterPromise.resolveNow(undefined, function (filter) { return filter; });
10146 // if filter not yet there, continue
10147 if (filter === undefined) {
10148 continue;
10149 }
10150 if (filter === filterToSkip) {
10151 continue;
10152 }
10153 // don't bother with filters that are not active
10154 if (!filter.isFilterActive()) {
10155 continue;
10156 }
10157 if (!filter.doesFilterPass) {
10158 console.error('Filter is missing method doesFilterPass');
10159 }
10160 var params = {
10161 node: node,
10162 data: data
10163 };
10164 if (!filter.doesFilterPass(params)) {
10165 return false;
10166 }
10167 }
10168 // all filters passed
10169 return true;
10170 };
10171 FilterManager.prototype.parseQuickFilter = function (newFilter) {
10172 if (utils_1.Utils.missing(newFilter) || newFilter === "") {
10173 return null;
10174 }
10175 if (this.gridOptionsWrapper.isRowModelInfinite()) {
10176 console.warn('ag-grid: cannot do quick filtering when doing virtual paging');
10177 return null;
10178 }
10179 return newFilter.toUpperCase();
10180 };
10181 // returns true if it has changed (not just same value again)
10182 FilterManager.prototype.setQuickFilter = function (newFilter) {
10183 var parsedFilter = this.parseQuickFilter(newFilter);
10184 if (this.quickFilter !== parsedFilter) {
10185 this.quickFilter = parsedFilter;
10186 this.setQuickFilterParts();
10187 this.onFilterChanged();
10188 }
10189 };
10190 FilterManager.prototype.checkExternalFilter = function () {
10191 this.externalFilterPresent = this.gridOptionsWrapper.isExternalFilterPresent();
10192 };
10193 FilterManager.prototype.onFilterChanged = function () {
10194 this.setAdvancedFilterPresent();
10195 this.updateFilterFlagInColumns("filterChanged");
10196 this.checkExternalFilter();
10197 utils_1.Utils.iterateObject(this.allFilters, function (key, filterWrapper) {
10198 filterWrapper.filterPromise.then(function (filter) {
10199 if (filter.onAnyFilterChanged) {
10200 filter.onAnyFilterChanged();
10201 }
10202 });
10203 });
10204 var event = {
10205 type: events_1.Events.EVENT_FILTER_CHANGED,
10206 api: this.gridApi,
10207 columnApi: this.columnApi
10208 };
10209 this.eventService.dispatchEvent(event);
10210 };
10211 FilterManager.prototype.isQuickFilterPresent = function () {
10212 return this.quickFilter !== null;
10213 };
10214 FilterManager.prototype.doesRowPassOtherFilters = function (filterToSkip, node) {
10215 return this.doesRowPassFilter(node, filterToSkip);
10216 };
10217 FilterManager.prototype.doesRowPassQuickFilterNoCache = function (node, filterPart) {
10218 var _this = this;
10219 var columns = this.columnController.getAllColumnsForQuickFilter();
10220 var filterPasses = false;
10221 columns.forEach(function (column) {
10222 if (filterPasses) {
10223 return;
10224 }
10225 var part = _this.getQuickFilterTextForColumn(column, node);
10226 if (utils_1.Utils.exists(part)) {
10227 if (part.indexOf(filterPart) >= 0) {
10228 filterPasses = true;
10229 }
10230 }
10231 });
10232 return filterPasses;
10233 };
10234 FilterManager.prototype.doesRowPassQuickFilterCache = function (node, filterPart) {
10235 if (!node.quickFilterAggregateText) {
10236 this.aggregateRowForQuickFilter(node);
10237 }
10238 var filterPasses = node.quickFilterAggregateText.indexOf(filterPart) >= 0;
10239 return filterPasses;
10240 };
10241 FilterManager.prototype.doesRowPassQuickFilter = function (node) {
10242 var _this = this;
10243 var filterPasses = true;
10244 var usingCache = this.gridOptionsWrapper.isCacheQuickFilter();
10245 this.quickFilterParts.forEach(function (filterPart) {
10246 var partPasses = usingCache ?
10247 _this.doesRowPassQuickFilterCache(node, filterPart) : _this.doesRowPassQuickFilterNoCache(node, filterPart);
10248 // each part must pass, if any fails, then the whole filter fails
10249 if (!partPasses) {
10250 filterPasses = false;
10251 }
10252 });
10253 return filterPasses;
10254 };
10255 FilterManager.prototype.doesRowPassFilter = function (node, filterToSkip) {
10256 // the row must pass ALL of the filters, so if any of them fail,
10257 // we return true. that means if a row passes the quick filter,
10258 // but fails the column filter, it fails overall
10259 // first up, check quick filter
10260 if (this.isQuickFilterPresent()) {
10261 if (!this.doesRowPassQuickFilter(node)) {
10262 return false;
10263 }
10264 }
10265 // secondly, give the client a chance to reject this row
10266 if (this.externalFilterPresent) {
10267 if (!this.gridOptionsWrapper.doesExternalFilterPass(node)) {
10268 return false;
10269 }
10270 }
10271 // lastly, check our internal advanced filter
10272 if (this.advancedFilterPresent) {
10273 if (!this.doesFilterPass(node, filterToSkip)) {
10274 return false;
10275 }
10276 }
10277 // got this far, all filters pass
10278 return true;
10279 };
10280 FilterManager.prototype.getQuickFilterTextForColumn = function (column, rowNode) {
10281 var value = this.valueService.getValue(column, rowNode, true);
10282 var valueAfterCallback;
10283 var colDef = column.getColDef();
10284 if (column.getColDef().getQuickFilterText) {
10285 var params = {
10286 value: value,
10287 node: rowNode,
10288 data: rowNode.data,
10289 column: column,
10290 colDef: colDef
10291 };
10292 valueAfterCallback = column.getColDef().getQuickFilterText(params);
10293 }
10294 else {
10295 valueAfterCallback = value;
10296 }
10297 if (valueAfterCallback && valueAfterCallback !== '') {
10298 return valueAfterCallback.toString().toUpperCase();
10299 }
10300 else {
10301 return null;
10302 }
10303 };
10304 FilterManager.prototype.aggregateRowForQuickFilter = function (node) {
10305 var _this = this;
10306 var stringParts = [];
10307 var columns = this.columnController.getAllColumnsForQuickFilter();
10308 columns.forEach(function (column) {
10309 var part = _this.getQuickFilterTextForColumn(column, node);
10310 if (utils_1.Utils.exists(part)) {
10311 stringParts.push(part);
10312 }
10313 });
10314 node.quickFilterAggregateText = stringParts.join(FilterManager_1.QUICK_FILTER_SEPARATOR);
10315 };
10316 FilterManager.prototype.onNewRowsLoaded = function (source) {
10317 utils_1.Utils.iterateObject(this.allFilters, function (key, filterWrapper) {
10318 filterWrapper.filterPromise.then(function (filter) {
10319 if (filter.onNewRowsLoaded) {
10320 filter.onNewRowsLoaded();
10321 }
10322 });
10323 });
10324 this.updateFilterFlagInColumns(source);
10325 this.setAdvancedFilterPresent();
10326 };
10327 FilterManager.prototype.createValueGetter = function (column) {
10328 var _this = this;
10329 return function (node) {
10330 return _this.valueService.getValue(column, node, true);
10331 };
10332 };
10333 FilterManager.prototype.getFilterComponent = function (column) {
10334 var filterWrapper = this.getOrCreateFilterWrapper(column);
10335 return filterWrapper.filterPromise;
10336 };
10337 FilterManager.prototype.getOrCreateFilterWrapper = function (column) {
10338 var filterWrapper = this.cachedFilter(column);
10339 if (!filterWrapper) {
10340 filterWrapper = this.createFilterWrapper(column);
10341 this.allFilters[column.getColId()] = filterWrapper;
10342 }
10343 return filterWrapper;
10344 };
10345 FilterManager.prototype.cachedFilter = function (column) {
10346 return this.allFilters[column.getColId()];
10347 };
10348 FilterManager.prototype.createFilterInstance = function (column, $scope) {
10349 var _this = this;
10350 var defaultFilter = 'agTextColumnFilter';
10351 if (this.gridOptionsWrapper.isEnterprise()) {
10352 defaultFilter = 'agSetColumnFilter';
10353 }
10354 var sanitisedColDef = utils_1.Utils.cloneObject(column.getColDef());
10355 var event = {
10356 type: events_1.Events.EVENT_FILTER_MODIFIED,
10357 api: this.gridApi,
10358 columnApi: this.columnApi
10359 };
10360 var filterChangedCallback = this.onFilterChanged.bind(this);
10361 var filterModifiedCallback = function () { return _this.eventService.dispatchEvent(event); };
10362 var params = {
10363 column: column,
10364 colDef: sanitisedColDef,
10365 rowModel: this.rowModel,
10366 filterChangedCallback: filterChangedCallback,
10367 filterModifiedCallback: filterModifiedCallback,
10368 valueGetter: this.createValueGetter(column),
10369 context: this.gridOptionsWrapper.getContext(),
10370 doesRowPassOtherFilter: null,
10371 $scope: $scope
10372 };
10373 return this.componentResolver.createAgGridComponent(sanitisedColDef, params, 'filter', {
10374 api: this.gridApi,
10375 columnApi: this.columnApi,
10376 column: column,
10377 colDef: sanitisedColDef
10378 }, defaultFilter, true, function (params, filter) { return utils_1.Utils.assign(params, {
10379 doesRowPassOtherFilter: _this.doesRowPassOtherFilters.bind(_this, filter),
10380 }); });
10381 };
10382 FilterManager.prototype.createFilterWrapper = function (column) {
10383 var filterWrapper = {
10384 column: column,
10385 filterPromise: null,
10386 scope: null,
10387 compiledElement: null,
10388 guiPromise: utils_1.Promise.external()
10389 };
10390 filterWrapper.scope = this.gridOptionsWrapper.isAngularCompileFilters() ? this.$scope.$new() : null;
10391 filterWrapper.filterPromise = this.createFilterInstance(column, filterWrapper.scope);
10392 this.putIntoGui(filterWrapper);
10393 return filterWrapper;
10394 };
10395 FilterManager.prototype.putIntoGui = function (filterWrapper) {
10396 var _this = this;
10397 var eFilterGui = document.createElement('div');
10398 eFilterGui.className = 'ag-filter';
10399 filterWrapper.filterPromise.then(function (filter) {
10400 var guiFromFilter = filter.getGui();
10401 if (utils_1.Utils.missing(guiFromFilter)) {
10402 console.warn("getGui method from filter returned " + guiFromFilter + ", it should be a DOM element or an HTML template string.");
10403 }
10404 // for backwards compatibility with Angular 1 - we
10405 // used to allow providing back HTML from getGui().
10406 // once we move away from supporting Angular 1
10407 // directly, we can change this.
10408 if (typeof guiFromFilter === 'string') {
10409 guiFromFilter = utils_1.Utils.loadTemplate(guiFromFilter);
10410 }
10411 eFilterGui.appendChild(guiFromFilter);
10412 if (filterWrapper.scope) {
10413 var compiledElement = _this.$compile(eFilterGui)(filterWrapper.scope);
10414 filterWrapper.compiledElement = compiledElement;
10415 setTimeout(function () { return filterWrapper.scope.$apply(); }, 0);
10416 }
10417 filterWrapper.guiPromise.resolve(eFilterGui);
10418 });
10419 };
10420 FilterManager.prototype.onNewColumnsLoaded = function () {
10421 this.destroy();
10422 };
10423 // destroys the filter, so it not longer takes part
10424 FilterManager.prototype.destroyFilter = function (column, source) {
10425 if (source === void 0) { source = "api"; }
10426 var filterWrapper = this.allFilters[column.getColId()];
10427 if (filterWrapper) {
10428 this.disposeFilterWrapper(filterWrapper, source);
10429 this.onFilterChanged();
10430 }
10431 };
10432 FilterManager.prototype.disposeFilterWrapper = function (filterWrapper, source) {
10433 var _this = this;
10434 filterWrapper.filterPromise.then(function (filter) {
10435 filter.setModel(null);
10436 if (filter.destroy) {
10437 filter.destroy();
10438 }
10439 filterWrapper.column.setFilterActive(false, source);
10440 if (filterWrapper.scope) {
10441 if (filterWrapper.compiledElement) {
10442 filterWrapper.compiledElement.remove();
10443 }
10444 filterWrapper.scope.$destroy();
10445 }
10446 delete _this.allFilters[filterWrapper.column.getColId()];
10447 });
10448 };
10449 FilterManager.prototype.destroy = function () {
10450 var _this = this;
10451 utils_1.Utils.iterateObject(this.allFilters, function (key, filterWrapper) {
10452 _this.disposeFilterWrapper(filterWrapper, "filterDestroyed");
10453 });
10454 };
10455 FilterManager.QUICK_FILTER_SEPARATOR = '\n';
10456 __decorate([
10457 context_1.Autowired('$compile'),
10458 __metadata("design:type", Object)
10459 ], FilterManager.prototype, "$compile", void 0);
10460 __decorate([
10461 context_1.Autowired('$scope'),
10462 __metadata("design:type", Object)
10463 ], FilterManager.prototype, "$scope", void 0);
10464 __decorate([
10465 context_1.Autowired('gridOptionsWrapper'),
10466 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
10467 ], FilterManager.prototype, "gridOptionsWrapper", void 0);
10468 __decorate([
10469 context_1.Autowired('gridCore'),
10470 __metadata("design:type", Object)
10471 ], FilterManager.prototype, "gridCore", void 0);
10472 __decorate([
10473 context_1.Autowired('popupService'),
10474 __metadata("design:type", popupService_1.PopupService)
10475 ], FilterManager.prototype, "popupService", void 0);
10476 __decorate([
10477 context_1.Autowired('valueService'),
10478 __metadata("design:type", valueService_1.ValueService)
10479 ], FilterManager.prototype, "valueService", void 0);
10480 __decorate([
10481 context_1.Autowired('columnController'),
10482 __metadata("design:type", columnController_1.ColumnController)
10483 ], FilterManager.prototype, "columnController", void 0);
10484 __decorate([
10485 context_1.Autowired('rowModel'),
10486 __metadata("design:type", Object)
10487 ], FilterManager.prototype, "rowModel", void 0);
10488 __decorate([
10489 context_1.Autowired('eventService'),
10490 __metadata("design:type", eventService_1.EventService)
10491 ], FilterManager.prototype, "eventService", void 0);
10492 __decorate([
10493 context_1.Autowired('enterprise'),
10494 __metadata("design:type", Boolean)
10495 ], FilterManager.prototype, "enterprise", void 0);
10496 __decorate([
10497 context_1.Autowired('context'),
10498 __metadata("design:type", context_1.Context)
10499 ], FilterManager.prototype, "context", void 0);
10500 __decorate([
10501 context_1.Autowired('columnApi'),
10502 __metadata("design:type", columnApi_1.ColumnApi)
10503 ], FilterManager.prototype, "columnApi", void 0);
10504 __decorate([
10505 context_1.Autowired('gridApi'),
10506 __metadata("design:type", gridApi_1.GridApi)
10507 ], FilterManager.prototype, "gridApi", void 0);
10508 __decorate([
10509 context_1.Autowired('componentResolver'),
10510 __metadata("design:type", componentResolver_1.ComponentResolver)
10511 ], FilterManager.prototype, "componentResolver", void 0);
10512 __decorate([
10513 context_1.PostConstruct,
10514 __metadata("design:type", Function),
10515 __metadata("design:paramtypes", []),
10516 __metadata("design:returntype", void 0)
10517 ], FilterManager.prototype, "init", null);
10518 __decorate([
10519 context_1.PreDestroy,
10520 __metadata("design:type", Function),
10521 __metadata("design:paramtypes", []),
10522 __metadata("design:returntype", void 0)
10523 ], FilterManager.prototype, "destroy", null);
10524 FilterManager = FilterManager_1 = __decorate([
10525 context_1.Bean('filterManager')
10526 ], FilterManager);
10527 return FilterManager;
10528 var FilterManager_1;
10529}());
10530exports.FilterManager = FilterManager;
10531
10532
10533/***/ }),
10534/* 21 */
10535/***/ (function(module, exports, __webpack_require__) {
10536
10537"use strict";
10538/**
10539 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
10540 * @version v18.1.2
10541 * @link http://www.ag-grid.com/
10542 * @license MIT
10543 */
10544
10545var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
10546 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
10547 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
10548 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
10549 return c > 3 && r && Object.defineProperty(target, key, r), r;
10550};
10551var __metadata = (this && this.__metadata) || function (k, v) {
10552 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10553};
10554var __param = (this && this.__param) || function (paramIndex, decorator) {
10555 return function (target, key) { decorator(target, key, paramIndex); }
10556};
10557Object.defineProperty(exports, "__esModule", { value: true });
10558var logger_1 = __webpack_require__(12);
10559var context_1 = __webpack_require__(0);
10560var context_2 = __webpack_require__(0);
10561var ExpressionService = (function () {
10562 function ExpressionService() {
10563 this.expressionToFunctionCache = {};
10564 }
10565 ExpressionService.prototype.setBeans = function (loggerFactory) {
10566 this.logger = loggerFactory.create('ExpressionService');
10567 };
10568 ExpressionService.prototype.evaluate = function (expressionOrFunc, params) {
10569 if (typeof expressionOrFunc === 'function') {
10570 // valueGetter is a function, so just call it
10571 var func = expressionOrFunc;
10572 return func(params);
10573 }
10574 else if (typeof expressionOrFunc === 'string') {
10575 // valueGetter is an expression, so execute the expression
10576 var expression = expressionOrFunc;
10577 return this.evaluateExpression(expression, params);
10578 }
10579 else {
10580 console.error('ag-Grid: value should be either a string or a function', expressionOrFunc);
10581 }
10582 };
10583 ExpressionService.prototype.evaluateExpression = function (expression, params) {
10584 try {
10585 var javaScriptFunction = this.createExpressionFunction(expression);
10586 // the params don't have all these values, rather we add every possible
10587 // value a params can have, which makes whatever is in the params available.
10588 var result = javaScriptFunction(params.value, params.context, params.oldValue, params.newValue, params.value, params.node, params.data, params.colDef, params.rowIndex, params.api, params.columnApi, params.getValue, params.column, params.columnGroup);
10589 return result;
10590 }
10591 catch (e) {
10592 // the expression failed, which can happen, as it's the client that
10593 // provides the expression. so print a nice message
10594 console.log('Processing of the expression failed');
10595 console.log('Expression = ' + expression);
10596 console.log('Exception = ' + e);
10597 return null;
10598 }
10599 };
10600 ExpressionService.prototype.createExpressionFunction = function (expression) {
10601 // check cache first
10602 if (this.expressionToFunctionCache[expression]) {
10603 return this.expressionToFunctionCache[expression];
10604 }
10605 // if not found in cache, return the function
10606 var functionBody = this.createFunctionBody(expression);
10607 var theFunction = new Function('x, ctx, oldValue, newValue, value, node, data, colDef, rowIndex, api, columnApi, getValue, column, columnGroup', functionBody);
10608 // store in cache
10609 this.expressionToFunctionCache[expression] = theFunction;
10610 return theFunction;
10611 };
10612 ExpressionService.prototype.createFunctionBody = function (expression) {
10613 // if the expression has the 'return' word in it, then use as is,
10614 // if not, then wrap it with return and ';' to make a function
10615 if (expression.indexOf('return') >= 0) {
10616 return expression;
10617 }
10618 else {
10619 return 'return ' + expression + ';';
10620 }
10621 };
10622 __decorate([
10623 __param(0, context_2.Qualifier('loggerFactory')),
10624 __metadata("design:type", Function),
10625 __metadata("design:paramtypes", [logger_1.LoggerFactory]),
10626 __metadata("design:returntype", void 0)
10627 ], ExpressionService.prototype, "setBeans", null);
10628 ExpressionService = __decorate([
10629 context_1.Bean('expressionService')
10630 ], ExpressionService);
10631 return ExpressionService;
10632}());
10633exports.ExpressionService = ExpressionService;
10634
10635
10636/***/ }),
10637/* 22 */
10638/***/ (function(module, exports, __webpack_require__) {
10639
10640"use strict";
10641/**
10642 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
10643 * @version v18.1.2
10644 * @link http://www.ag-grid.com/
10645 * @license MIT
10646 */
10647
10648var __extends = (this && this.__extends) || (function () {
10649 var extendStatics = Object.setPrototypeOf ||
10650 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
10651 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
10652 return function (d, b) {
10653 extendStatics(d, b);
10654 function __() { this.constructor = d; }
10655 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
10656 };
10657})();
10658var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
10659 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
10660 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
10661 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
10662 return c > 3 && r && Object.defineProperty(target, key, r), r;
10663};
10664var __metadata = (this && this.__metadata) || function (k, v) {
10665 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10666};
10667var __param = (this && this.__param) || function (paramIndex, decorator) {
10668 return function (target, key) { decorator(target, key, paramIndex); }
10669};
10670Object.defineProperty(exports, "__esModule", { value: true });
10671var utils_1 = __webpack_require__(1);
10672var gridOptionsWrapper_1 = __webpack_require__(2);
10673var expressionService_1 = __webpack_require__(21);
10674var templateService_1 = __webpack_require__(51);
10675var valueService_1 = __webpack_require__(17);
10676var eventService_1 = __webpack_require__(3);
10677var rowComp_1 = __webpack_require__(52);
10678var events_1 = __webpack_require__(5);
10679var constants_1 = __webpack_require__(9);
10680var cellComp_1 = __webpack_require__(36);
10681var context_1 = __webpack_require__(0);
10682var gridCore_1 = __webpack_require__(44);
10683var columnApi_1 = __webpack_require__(7);
10684var columnController_1 = __webpack_require__(4);
10685var logger_1 = __webpack_require__(12);
10686var focusedCellController_1 = __webpack_require__(24);
10687var cellNavigationService_1 = __webpack_require__(84);
10688var gridCell_1 = __webpack_require__(25);
10689var beanStub_1 = __webpack_require__(13);
10690var paginationProxy_1 = __webpack_require__(31);
10691var gridApi_1 = __webpack_require__(6);
10692var pinnedRowModel_1 = __webpack_require__(32);
10693var beans_1 = __webpack_require__(30);
10694var animationFrameService_1 = __webpack_require__(39);
10695var heightScaler_1 = __webpack_require__(59);
10696var RowRenderer = (function (_super) {
10697 __extends(RowRenderer, _super);
10698 function RowRenderer() {
10699 var _this = _super !== null && _super.apply(this, arguments) || this;
10700 // map of row ids to row objects. keeps track of which elements
10701 // are rendered for which rows in the dom.
10702 _this.rowCompsByIndex = {};
10703 _this.floatingTopRowComps = [];
10704 _this.floatingBottomRowComps = [];
10705 // we only allow one refresh at a time, otherwise the internal memory structure here
10706 // will get messed up. this can happen if the user has a cellRenderer, and inside the
10707 // renderer they call an API method that results in another pass of the refresh,
10708 // then it will be trying to draw rows in the middle of a refresh.
10709 _this.refreshInProgress = false;
10710 return _this;
10711 }
10712 RowRenderer.prototype.agWire = function (loggerFactory) {
10713 this.logger = loggerFactory.create("RowRenderer");
10714 };
10715 RowRenderer.prototype.registerGridComp = function (gridPanel) {
10716 this.gridPanel = gridPanel;
10717 this.rowContainers = this.gridPanel.getRowContainers();
10718 this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_PAGINATION_CHANGED, this.onPageLoaded.bind(this));
10719 this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_PINNED_ROW_DATA_CHANGED, this.onPinnedRowDataChanged.bind(this));
10720 this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_DISPLAYED_COLUMNS_CHANGED, this.onDisplayedColumnsChanged.bind(this));
10721 this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_BODY_SCROLL, this.redrawAfterScroll.bind(this));
10722 this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_BODY_HEIGHT_CHANGED, this.redrawAfterScroll.bind(this));
10723 this.redrawAfterModelUpdate();
10724 };
10725 RowRenderer.prototype.onPageLoaded = function (refreshEvent) {
10726 if (utils_1.Utils.missing(refreshEvent)) {
10727 refreshEvent = {
10728 type: events_1.Events.EVENT_MODEL_UPDATED,
10729 api: this.gridApi,
10730 columnApi: this.columnApi,
10731 animate: false,
10732 keepRenderedRows: false,
10733 newData: false,
10734 newPage: false
10735 };
10736 }
10737 this.onModelUpdated(refreshEvent);
10738 };
10739 RowRenderer.prototype.getAllCellsForColumn = function (column) {
10740 var eCells = [];
10741 utils_1.Utils.iterateObject(this.rowCompsByIndex, callback);
10742 utils_1.Utils.iterateObject(this.floatingBottomRowComps, callback);
10743 utils_1.Utils.iterateObject(this.floatingTopRowComps, callback);
10744 function callback(key, rowComp) {
10745 var eCell = rowComp.getCellForCol(column);
10746 if (eCell) {
10747 eCells.push(eCell);
10748 }
10749 }
10750 return eCells;
10751 };
10752 RowRenderer.prototype.refreshFloatingRowComps = function () {
10753 this.refreshFloatingRows(this.floatingTopRowComps, this.pinnedRowModel.getPinnedTopRowData(), this.rowContainers.floatingTopPinnedLeft, this.rowContainers.floatingTopPinnedRight, this.rowContainers.floatingTop, this.rowContainers.floatingTopFullWidth);
10754 this.refreshFloatingRows(this.floatingBottomRowComps, this.pinnedRowModel.getPinnedBottomRowData(), this.rowContainers.floatingBottomPinnedLeft, this.rowContainers.floatingBottomPinnedRight, this.rowContainers.floatingBottom, this.rowContainers.floatingBottomFullWith);
10755 };
10756 RowRenderer.prototype.refreshFloatingRows = function (rowComps, rowNodes, pinnedLeftContainerComp, pinnedRightContainerComp, bodyContainerComp, fullWidthContainerComp) {
10757 var _this = this;
10758 rowComps.forEach(function (row) {
10759 row.destroy();
10760 });
10761 rowComps.length = 0;
10762 if (rowNodes) {
10763 rowNodes.forEach(function (node) {
10764 var rowComp = new rowComp_1.RowComp(_this.$scope, bodyContainerComp, pinnedLeftContainerComp, pinnedRightContainerComp, fullWidthContainerComp, node, _this.beans, false, false);
10765 rowComp.init();
10766 rowComps.push(rowComp);
10767 });
10768 }
10769 this.flushContainers(rowComps);
10770 };
10771 RowRenderer.prototype.onPinnedRowDataChanged = function () {
10772 // recycling rows in order to ensure cell editing is not cancelled
10773 var params = {
10774 recycleRows: true
10775 };
10776 this.redrawAfterModelUpdate(params);
10777 };
10778 RowRenderer.prototype.onModelUpdated = function (refreshEvent) {
10779 var params = {
10780 recycleRows: refreshEvent.keepRenderedRows,
10781 animate: refreshEvent.animate,
10782 newData: refreshEvent.newData,
10783 newPage: refreshEvent.newPage,
10784 // because this is a model updated event (not pinned rows), we
10785 // can skip updating the pinned rows. this is needed so that if user
10786 // is doing transaction updates, the pinned rows are not getting constantly
10787 // trashed - or editing cells in pinned rows are not refreshed and put into read mode
10788 onlyBody: true
10789 };
10790 this.redrawAfterModelUpdate(params);
10791 };
10792 // if the row nodes are not rendered, no index is returned
10793 RowRenderer.prototype.getRenderedIndexesForRowNodes = function (rowNodes) {
10794 var result = [];
10795 if (utils_1.Utils.missing(rowNodes)) {
10796 return result;
10797 }
10798 utils_1.Utils.iterateObject(this.rowCompsByIndex, function (index, renderedRow) {
10799 var rowNode = renderedRow.getRowNode();
10800 if (rowNodes.indexOf(rowNode) >= 0) {
10801 result.push(index);
10802 }
10803 });
10804 return result;
10805 };
10806 RowRenderer.prototype.redrawRows = function (rowNodes) {
10807 if (!rowNodes || rowNodes.length == 0) {
10808 return;
10809 }
10810 // we only need to be worried about rendered rows, as this method is
10811 // called to whats rendered. if the row isn't rendered, we don't care
10812 var indexesToRemove = this.getRenderedIndexesForRowNodes(rowNodes);
10813 // remove the rows
10814 this.removeRowComps(indexesToRemove);
10815 // add draw them again
10816 this.redrawAfterModelUpdate({
10817 recycleRows: true
10818 });
10819 };
10820 RowRenderer.prototype.getCellToRestoreFocusToAfterRefresh = function (params) {
10821 var focusedCell = params.suppressKeepFocus ? null : this.focusedCellController.getFocusCellToUseAfterRefresh();
10822 if (utils_1.Utils.missing(focusedCell)) {
10823 return null;
10824 }
10825 // if the dom is not actually focused on a cell, then we don't try to refocus. the problem this
10826 // solves is with editing - if the user is editing, eg focus is on a text field, and not on the
10827 // cell itself, then the cell can be registered as having focus, however it's the text field that
10828 // has the focus and not the cell div. therefore, when the refresh is finished, the grid will focus
10829 // the cell, and not the textfield. that means if the user is in a text field, and the grid refreshes,
10830 // the focus is lost from the text field. we do not want this.
10831 var activeElement = document.activeElement;
10832 var domData = this.gridOptionsWrapper.getDomData(activeElement, cellComp_1.CellComp.DOM_DATA_KEY_CELL_COMP);
10833 var elementIsNotACellDev = utils_1.Utils.missing(domData);
10834 if (elementIsNotACellDev) {
10835 return null;
10836 }
10837 return focusedCell;
10838 };
10839 // gets called after changes to the model.
10840 RowRenderer.prototype.redrawAfterModelUpdate = function (params) {
10841 if (params === void 0) { params = {}; }
10842 this.getLockOnRefresh();
10843 var focusedCell = this.getCellToRestoreFocusToAfterRefresh(params);
10844 this.sizeContainerToPageHeight();
10845 this.scrollToTopIfNewData(params);
10846 var recycleRows = params.recycleRows;
10847 var animate = params.animate && this.gridOptionsWrapper.isAnimateRows();
10848 var rowsToRecycle = this.binRowComps(recycleRows);
10849 this.redraw(rowsToRecycle, animate);
10850 if (!params.onlyBody) {
10851 this.refreshFloatingRowComps();
10852 }
10853 this.restoreFocusedCell(focusedCell);
10854 this.releaseLockOnRefresh();
10855 };
10856 RowRenderer.prototype.scrollToTopIfNewData = function (params) {
10857 var scrollToTop = params.newData || params.newPage;
10858 var suppressScrollToTop = this.gridOptionsWrapper.isSuppressScrollOnNewData();
10859 if (scrollToTop && !suppressScrollToTop) {
10860 this.gridPanel.scrollToTop();
10861 }
10862 };
10863 RowRenderer.prototype.sizeContainerToPageHeight = function () {
10864 var containerHeight = this.paginationProxy.getCurrentPageHeight();
10865 // we need at least 1 pixel for the horizontal scroll to work. so if there are now rows,
10866 // we still want the scroll to be present, otherwise there would be no way to access the columns
10867 // on the RHS - and if that was where the filter was that cause no rows to be presented, there
10868 // is no way to remove the filter.
10869 if (containerHeight === 0) {
10870 containerHeight = 1;
10871 }
10872 this.heightScaler.setModelHeight(containerHeight);
10873 var realHeight = this.heightScaler.getUiContainerHeight();
10874 this.rowContainers.body.setHeight(realHeight);
10875 this.rowContainers.fullWidth.setHeight(realHeight);
10876 this.rowContainers.pinnedLeft.setHeight(realHeight);
10877 this.rowContainers.pinnedRight.setHeight(realHeight);
10878 };
10879 RowRenderer.prototype.getLockOnRefresh = function () {
10880 if (this.refreshInProgress) {
10881 throw new Error("ag-Grid: cannot get grid to draw rows when it is in the middle of drawing rows. " +
10882 "Your code probably called a grid API method while the grid was in the render stage. To overcome " +
10883 "this, put the API call into a timeout, eg instead of api.refreshView(), " +
10884 "call setTimeout(function(){api.refreshView(),0}). To see what part of your code " +
10885 "that caused the refresh check this stacktrace.");
10886 }
10887 this.refreshInProgress = true;
10888 };
10889 RowRenderer.prototype.releaseLockOnRefresh = function () {
10890 this.refreshInProgress = false;
10891 };
10892 // sets the focus to the provided cell, if the cell is provided. this way, the user can call refresh without
10893 // worry about the focus been lost. this is important when the user is using keyboard navigation to do edits
10894 // and the cellEditor is calling 'refresh' to get other cells to update (as other cells might depend on the
10895 // edited cell).
10896 RowRenderer.prototype.restoreFocusedCell = function (gridCell) {
10897 if (gridCell) {
10898 this.focusedCellController.setFocusedCell(gridCell.rowIndex, gridCell.column, gridCell.floating, true);
10899 }
10900 };
10901 RowRenderer.prototype.stopEditing = function (cancel) {
10902 if (cancel === void 0) { cancel = false; }
10903 this.forEachRowComp(function (key, rowComp) {
10904 rowComp.stopEditing(cancel);
10905 });
10906 };
10907 RowRenderer.prototype.forEachCellComp = function (callback) {
10908 this.forEachRowComp(function (key, rowComp) { return rowComp.forEachCellComp(callback); });
10909 };
10910 RowRenderer.prototype.forEachRowComp = function (callback) {
10911 utils_1.Utils.iterateObject(this.rowCompsByIndex, callback);
10912 utils_1.Utils.iterateObject(this.floatingTopRowComps, callback);
10913 utils_1.Utils.iterateObject(this.floatingBottomRowComps, callback);
10914 };
10915 RowRenderer.prototype.addRenderedRowListener = function (eventName, rowIndex, callback) {
10916 var rowComp = this.rowCompsByIndex[rowIndex];
10917 if (rowComp) {
10918 rowComp.addEventListener(eventName, callback);
10919 }
10920 };
10921 RowRenderer.prototype.flashCells = function (params) {
10922 if (params === void 0) { params = {}; }
10923 this.forEachCellCompFiltered(params.rowNodes, params.columns, function (cellComp) { return cellComp.flashCell(); });
10924 };
10925 RowRenderer.prototype.refreshCells = function (params) {
10926 if (params === void 0) { params = {}; }
10927 var refreshCellParams = {
10928 forceRefresh: params.force,
10929 newData: false
10930 };
10931 this.forEachCellCompFiltered(params.rowNodes, params.columns, function (cellComp) { return cellComp.refreshCell(refreshCellParams); });
10932 };
10933 RowRenderer.prototype.getCellRendererInstances = function (params) {
10934 var res = [];
10935 this.forEachCellCompFiltered(params.rowNodes, params.columns, function (cellComp) {
10936 var cellRenderer = cellComp.getCellRenderer();
10937 if (cellRenderer) {
10938 res.push(cellRenderer);
10939 }
10940 });
10941 return res;
10942 };
10943 RowRenderer.prototype.getCellEditorInstances = function (params) {
10944 var res = [];
10945 this.forEachCellCompFiltered(params.rowNodes, params.columns, function (cellComp) {
10946 var cellEditor = cellComp.getCellEditor();
10947 if (cellEditor) {
10948 res.push(cellEditor);
10949 }
10950 });
10951 return res;
10952 };
10953 RowRenderer.prototype.getEditingCells = function () {
10954 var res = [];
10955 this.forEachCellComp(function (cellComp) {
10956 if (cellComp.isEditing()) {
10957 var gridCellDef = cellComp.getGridCell().getGridCellDef();
10958 res.push(gridCellDef);
10959 }
10960 });
10961 return res;
10962 };
10963 // calls the callback for each cellComp that match the provided rowNodes and columns. eg if one row node
10964 // and two columns provided, that identifies 4 cells, so callback gets called 4 times, once for each cell.
10965 RowRenderer.prototype.forEachCellCompFiltered = function (rowNodes, columns, callback) {
10966 var _this = this;
10967 var rowIdsMap;
10968 if (utils_1.Utils.exists(rowNodes)) {
10969 rowIdsMap = {
10970 top: {},
10971 bottom: {},
10972 normal: {}
10973 };
10974 rowNodes.forEach(function (rowNode) {
10975 if (rowNode.rowPinned === constants_1.Constants.PINNED_TOP) {
10976 rowIdsMap.top[rowNode.id] = true;
10977 }
10978 else if (rowNode.rowPinned === constants_1.Constants.PINNED_BOTTOM) {
10979 rowIdsMap.bottom[rowNode.id] = true;
10980 }
10981 else {
10982 rowIdsMap.normal[rowNode.id] = true;
10983 }
10984 });
10985 }
10986 var colIdsMap;
10987 if (utils_1.Utils.exists(columns)) {
10988 colIdsMap = {};
10989 columns.forEach(function (colKey) {
10990 var column = _this.columnController.getGridColumn(colKey);
10991 if (utils_1.Utils.exists(column)) {
10992 colIdsMap[column.getId()] = true;
10993 }
10994 });
10995 }
10996 var processRow = function (rowComp) {
10997 var rowNode = rowComp.getRowNode();
10998 var id = rowNode.id;
10999 var floating = rowNode.rowPinned;
11000 // skip this row if it is missing from the provided list
11001 if (utils_1.Utils.exists(rowIdsMap)) {
11002 if (floating === constants_1.Constants.PINNED_BOTTOM) {
11003 if (!rowIdsMap.bottom[id]) {
11004 return;
11005 }
11006 }
11007 else if (floating === constants_1.Constants.PINNED_TOP) {
11008 if (!rowIdsMap.top[id]) {
11009 return;
11010 }
11011 }
11012 else {
11013 if (!rowIdsMap.normal[id]) {
11014 return;
11015 }
11016 }
11017 }
11018 rowComp.forEachCellComp(function (cellComp) {
11019 var colId = cellComp.getColumn().getId();
11020 var excludeColFromRefresh = colIdsMap && !colIdsMap[colId];
11021 if (excludeColFromRefresh) {
11022 return;
11023 }
11024 callback(cellComp);
11025 });
11026 };
11027 utils_1.Utils.iterateObject(this.rowCompsByIndex, function (index, rowComp) {
11028 processRow(rowComp);
11029 });
11030 if (this.floatingTopRowComps) {
11031 this.floatingTopRowComps.forEach(processRow);
11032 }
11033 if (this.floatingBottomRowComps) {
11034 this.floatingBottomRowComps.forEach(processRow);
11035 }
11036 };
11037 RowRenderer.prototype.destroy = function () {
11038 _super.prototype.destroy.call(this);
11039 var rowIndexesToRemove = Object.keys(this.rowCompsByIndex);
11040 this.removeRowComps(rowIndexesToRemove);
11041 };
11042 RowRenderer.prototype.binRowComps = function (recycleRows) {
11043 var _this = this;
11044 var indexesToRemove;
11045 var rowsToRecycle = {};
11046 if (recycleRows) {
11047 indexesToRemove = [];
11048 utils_1.Utils.iterateObject(this.rowCompsByIndex, function (index, rowComp) {
11049 var rowNode = rowComp.getRowNode();
11050 if (utils_1.Utils.exists(rowNode.id)) {
11051 rowsToRecycle[rowNode.id] = rowComp;
11052 delete _this.rowCompsByIndex[index];
11053 }
11054 else {
11055 indexesToRemove.push(index);
11056 }
11057 });
11058 }
11059 else {
11060 indexesToRemove = Object.keys(this.rowCompsByIndex);
11061 }
11062 this.removeRowComps(indexesToRemove);
11063 return rowsToRecycle;
11064 };
11065 // takes array of row indexes
11066 RowRenderer.prototype.removeRowComps = function (rowsToRemove) {
11067 var _this = this;
11068 // if no fromIndex then set to -1, which will refresh everything
11069 // let realFromIndex = -1;
11070 rowsToRemove.forEach(function (indexToRemove) {
11071 var renderedRow = _this.rowCompsByIndex[indexToRemove];
11072 renderedRow.destroy();
11073 delete _this.rowCompsByIndex[indexToRemove];
11074 });
11075 };
11076 // gets called when rows don't change, but viewport does, so after:
11077 // 1) height of grid body changes, ie number of displayed rows has changed
11078 // 2) grid scrolled to new position
11079 // 3) ensure index visible (which is a scroll)
11080 RowRenderer.prototype.redrawAfterScroll = function () {
11081 this.getLockOnRefresh();
11082 this.redraw(null, false, true);
11083 this.releaseLockOnRefresh();
11084 };
11085 RowRenderer.prototype.removeRowCompsNotToDraw = function (indexesToDraw) {
11086 // for speedy lookup, dump into map
11087 var indexesToDrawMap = {};
11088 indexesToDraw.forEach(function (index) { return (indexesToDrawMap[index] = true); });
11089 var existingIndexes = Object.keys(this.rowCompsByIndex);
11090 var indexesNotToDraw = utils_1.Utils.filter(existingIndexes, function (index) { return !indexesToDrawMap[index]; });
11091 this.removeRowComps(indexesNotToDraw);
11092 };
11093 RowRenderer.prototype.calculateIndexesToDraw = function () {
11094 var _this = this;
11095 // all in all indexes in the viewport
11096 var indexesToDraw = utils_1.Utils.createArrayOfNumbers(this.firstRenderedRow, this.lastRenderedRow);
11097 // add in indexes of rows we want to keep, because they are currently editing
11098 utils_1.Utils.iterateObject(this.rowCompsByIndex, function (indexStr, rowComp) {
11099 var index = Number(indexStr);
11100 if (index < _this.firstRenderedRow || index > _this.lastRenderedRow) {
11101 if (_this.keepRowBecauseEditing(rowComp)) {
11102 indexesToDraw.push(index);
11103 }
11104 }
11105 });
11106 indexesToDraw.sort(function (a, b) { return a - b; });
11107 return indexesToDraw;
11108 };
11109 RowRenderer.prototype.redraw = function (rowsToRecycle, animate, afterScroll) {
11110 var _this = this;
11111 if (animate === void 0) { animate = false; }
11112 if (afterScroll === void 0) { afterScroll = false; }
11113 this.heightScaler.update();
11114 this.workOutFirstAndLastRowsToRender();
11115 // the row can already exist and be in the following:
11116 // rowsToRecycle -> if model change, then the index may be different, however row may
11117 // exist here from previous time (mapped by id).
11118 // this.rowCompsByIndex -> if just a scroll, then this will contain what is currently in the viewport
11119 // this is all the indexes we want, including those that already exist, so this method
11120 // will end up going through each index and drawing only if the row doesn't already exist
11121 var indexesToDraw = this.calculateIndexesToDraw();
11122 this.removeRowCompsNotToDraw(indexesToDraw);
11123 // add in new rows
11124 var nextVmTurnFunctions = [];
11125 var rowComps = [];
11126 indexesToDraw.forEach(function (rowIndex) {
11127 var rowComp = _this.createOrUpdateRowComp(rowIndex, rowsToRecycle, animate, afterScroll);
11128 if (utils_1.Utils.exists(rowComp)) {
11129 rowComps.push(rowComp);
11130 utils_1.Utils.pushAll(nextVmTurnFunctions, rowComp.getAndClearNextVMTurnFunctions());
11131 }
11132 });
11133 this.flushContainers(rowComps);
11134 utils_1.Utils.executeNextVMTurn(nextVmTurnFunctions);
11135 if (afterScroll && !this.gridOptionsWrapper.isSuppressAnimationFrame()) {
11136 this.beans.taskQueue.addP2Task(this.destroyRowComps.bind(this, rowsToRecycle, animate));
11137 }
11138 else {
11139 this.destroyRowComps(rowsToRecycle, animate);
11140 }
11141 this.checkAngularCompile();
11142 };
11143 RowRenderer.prototype.flushContainers = function (rowComps) {
11144 utils_1.Utils.iterateObject(this.rowContainers, function (key, rowContainerComp) {
11145 if (rowContainerComp) {
11146 rowContainerComp.flushRowTemplates();
11147 }
11148 });
11149 rowComps.forEach(function (rowComp) { return rowComp.afterFlush(); });
11150 };
11151 RowRenderer.prototype.onDisplayedColumnsChanged = function () {
11152 var pinningLeft = this.columnController.isPinningLeft();
11153 var pinningRight = this.columnController.isPinningRight();
11154 var atLeastOneChanged = this.pinningLeft !== pinningLeft || pinningRight !== this.pinningRight;
11155 if (atLeastOneChanged) {
11156 this.pinningLeft = pinningLeft;
11157 this.pinningRight = pinningRight;
11158 if (this.gridOptionsWrapper.isEmbedFullWidthRows()) {
11159 this.redrawFullWidthEmbeddedRows();
11160 }
11161 }
11162 };
11163 // when embedding, what gets showed in each section depends on what is pinned. eg if embedding group expand / collapse,
11164 // then it should go into the pinned left area if pinning left, or the center area if not pinning.
11165 RowRenderer.prototype.redrawFullWidthEmbeddedRows = function () {
11166 // if either of the pinned panels has shown / hidden, then need to redraw the fullWidth bits when
11167 // embedded, as what appears in each section depends on whether we are pinned or not
11168 var rowsToRemove = [];
11169 utils_1.Utils.iterateObject(this.rowCompsByIndex, function (id, rowComp) {
11170 if (rowComp.isFullWidth()) {
11171 var rowIndex = rowComp.getRowNode().rowIndex;
11172 rowsToRemove.push(rowIndex.toString());
11173 }
11174 });
11175 this.refreshFloatingRowComps();
11176 this.removeRowComps(rowsToRemove);
11177 this.redrawAfterScroll();
11178 };
11179 RowRenderer.prototype.createOrUpdateRowComp = function (rowIndex, rowsToRecycle, animate, afterScroll) {
11180 var rowNode;
11181 var rowComp = this.rowCompsByIndex[rowIndex];
11182 // if no row comp, see if we can get it from the previous rowComps
11183 if (!rowComp) {
11184 rowNode = this.paginationProxy.getRow(rowIndex);
11185 if (utils_1.Utils.exists(rowNode) && utils_1.Utils.exists(rowsToRecycle) && rowsToRecycle[rowNode.id]) {
11186 rowComp = rowsToRecycle[rowNode.id];
11187 rowsToRecycle[rowNode.id] = null;
11188 }
11189 }
11190 var creatingNewRowComp = !rowComp;
11191 if (creatingNewRowComp) {
11192 // create a new one
11193 if (!rowNode) {
11194 rowNode = this.paginationProxy.getRow(rowIndex);
11195 }
11196 if (utils_1.Utils.exists(rowNode)) {
11197 rowComp = this.createRowComp(rowNode, animate, afterScroll);
11198 }
11199 else {
11200 // this should never happen - if somehow we are trying to create
11201 // a row for a rowNode that does not exist.
11202 return;
11203 }
11204 }
11205 else {
11206 // ensure row comp is in right position in DOM
11207 rowComp.ensureDomOrder();
11208 }
11209 this.rowCompsByIndex[rowIndex] = rowComp;
11210 return rowComp;
11211 };
11212 RowRenderer.prototype.destroyRowComps = function (rowCompsMap, animate) {
11213 var delayedFuncs = [];
11214 utils_1.Utils.iterateObject(rowCompsMap, function (nodeId, rowComp) {
11215 // if row was used, then it's null
11216 if (!rowComp) {
11217 return;
11218 }
11219 rowComp.destroy(animate);
11220 utils_1.Utils.pushAll(delayedFuncs, rowComp.getAndClearDelayedDestroyFunctions());
11221 });
11222 utils_1.Utils.executeInAWhile(delayedFuncs);
11223 };
11224 RowRenderer.prototype.checkAngularCompile = function () {
11225 var _this = this;
11226 // if we are doing angular compiling, then do digest the scope here
11227 if (this.gridOptionsWrapper.isAngularCompileRows()) {
11228 // we do it in a timeout, in case we are already in an apply
11229 setTimeout(function () {
11230 _this.$scope.$apply();
11231 }, 0);
11232 }
11233 };
11234 RowRenderer.prototype.workOutFirstAndLastRowsToRender = function () {
11235 var newFirst;
11236 var newLast;
11237 if (!this.paginationProxy.isRowsToRender()) {
11238 newFirst = 0;
11239 newLast = -1; // setting to -1 means nothing in range
11240 }
11241 else {
11242 var pageFirstRow = this.paginationProxy.getPageFirstRow();
11243 var pageLastRow = this.paginationProxy.getPageLastRow();
11244 var pixelOffset = this.paginationProxy ? this.paginationProxy.getPixelOffset() : 0;
11245 var heightOffset = this.heightScaler.getOffset();
11246 var bodyVRange = this.gridPanel.getVScrollPosition();
11247 var topPixel = bodyVRange.top;
11248 var bottomPixel = bodyVRange.bottom;
11249 var realPixelTop = topPixel + pixelOffset + heightOffset;
11250 var realPixelBottom = bottomPixel + pixelOffset + heightOffset;
11251 var first = this.paginationProxy.getRowIndexAtPixel(realPixelTop);
11252 var last = this.paginationProxy.getRowIndexAtPixel(realPixelBottom);
11253 //add in buffer
11254 var buffer = this.gridOptionsWrapper.getRowBuffer();
11255 first = first - buffer;
11256 last = last + buffer;
11257 // adjust, in case buffer extended actual size
11258 if (first < pageFirstRow) {
11259 first = pageFirstRow;
11260 }
11261 if (last > pageLastRow) {
11262 last = pageLastRow;
11263 }
11264 newFirst = first;
11265 newLast = last;
11266 }
11267 var firstDiffers = newFirst !== this.firstRenderedRow;
11268 var lastDiffers = newLast !== this.lastRenderedRow;
11269 if (firstDiffers || lastDiffers) {
11270 this.firstRenderedRow = newFirst;
11271 this.lastRenderedRow = newLast;
11272 var event_1 = {
11273 type: events_1.Events.EVENT_VIEWPORT_CHANGED,
11274 firstRow: newFirst,
11275 lastRow: newLast,
11276 api: this.gridApi,
11277 columnApi: this.columnApi
11278 };
11279 this.eventService.dispatchEvent(event_1);
11280 }
11281 };
11282 RowRenderer.prototype.getFirstVirtualRenderedRow = function () {
11283 return this.firstRenderedRow;
11284 };
11285 RowRenderer.prototype.getLastVirtualRenderedRow = function () {
11286 return this.lastRenderedRow;
11287 };
11288 // check that none of the rows to remove are editing or focused as:
11289 // a) if editing, we want to keep them, otherwise the user will loose the context of the edit,
11290 // eg user starts editing, enters some text, then scrolls down and then up, next time row rendered
11291 // the edit is reset - so we want to keep it rendered.
11292 // b) if focused, we want ot keep keyboard focus, so if user ctrl+c, it goes to clipboard,
11293 // otherwise the user can range select and drag (with focus cell going out of the viewport)
11294 // and then ctrl+c, nothing will happen if cell is removed from dom.
11295 RowRenderer.prototype.keepRowBecauseEditing = function (rowComp) {
11296 var REMOVE_ROW = false;
11297 var KEEP_ROW = true;
11298 var rowNode = rowComp.getRowNode();
11299 var rowHasFocus = this.focusedCellController.isRowNodeFocused(rowNode);
11300 var rowIsEditing = rowComp.isEditing();
11301 var mightWantToKeepRow = rowHasFocus || rowIsEditing;
11302 // if we deffo don't want to keep it,
11303 if (!mightWantToKeepRow) {
11304 return REMOVE_ROW;
11305 }
11306 // editing row, only remove if it is no longer rendered, eg filtered out or new data set.
11307 // the reason we want to keep is if user is scrolling up and down, we don't want to loose
11308 // the context of the editing in process.
11309 var rowNodePresent = this.paginationProxy.isRowPresent(rowNode);
11310 return rowNodePresent ? KEEP_ROW : REMOVE_ROW;
11311 };
11312 RowRenderer.prototype.createRowComp = function (rowNode, animate, afterScroll) {
11313 var useAnimationFrameForCreate = afterScroll && !this.gridOptionsWrapper.isSuppressAnimationFrame();
11314 var rowComp = new rowComp_1.RowComp(this.$scope, this.rowContainers.body, this.rowContainers.pinnedLeft, this.rowContainers.pinnedRight, this.rowContainers.fullWidth, rowNode, this.beans, animate, useAnimationFrameForCreate);
11315 rowComp.init();
11316 return rowComp;
11317 };
11318 RowRenderer.prototype.getRenderedNodes = function () {
11319 var renderedRows = this.rowCompsByIndex;
11320 return Object.keys(renderedRows).map(function (key) {
11321 return renderedRows[key].getRowNode();
11322 });
11323 };
11324 // we use index for rows, but column object for columns, as the next column (by index) might not
11325 // be visible (header grouping) so it's not reliable, so using the column object instead.
11326 RowRenderer.prototype.navigateToNextCell = function (event, key, previousCell, allowUserOverride) {
11327 var nextCell = previousCell;
11328 // we keep searching for a next cell until we find one. this is how the group rows get skipped
11329 while (true) {
11330 nextCell = this.cellNavigationService.getNextCellToFocus(key, nextCell);
11331 if (utils_1.Utils.missing(nextCell)) {
11332 break;
11333 }
11334 var skipGroupRows = this.gridOptionsWrapper.isGroupUseEntireRow();
11335 if (skipGroupRows) {
11336 var rowNode = this.paginationProxy.getRow(nextCell.rowIndex);
11337 if (!rowNode.group) {
11338 break;
11339 }
11340 }
11341 else {
11342 break;
11343 }
11344 }
11345 // allow user to override what cell to go to next. when doing normal cell navigation (with keys)
11346 // we allow this, however if processing 'enter after edit' we don't allow override
11347 if (allowUserOverride) {
11348 var userFunc = this.gridOptionsWrapper.getNavigateToNextCellFunc();
11349 if (utils_1.Utils.exists(userFunc)) {
11350 var params = {
11351 key: key,
11352 previousCellDef: previousCell,
11353 nextCellDef: nextCell ? nextCell.getGridCellDef() : null,
11354 event: event
11355 };
11356 var nextCellDef = userFunc(params);
11357 if (utils_1.Utils.exists(nextCellDef)) {
11358 nextCell = new gridCell_1.GridCell(nextCellDef);
11359 }
11360 else {
11361 nextCell = null;
11362 }
11363 }
11364 }
11365 // no next cell means we have reached a grid boundary, eg left, right, top or bottom of grid
11366 if (!nextCell) {
11367 return;
11368 }
11369 this.ensureCellVisible(nextCell);
11370 this.focusedCellController.setFocusedCell(nextCell.rowIndex, nextCell.column, nextCell.floating, true);
11371 if (this.rangeController) {
11372 var gridCell = new gridCell_1.GridCell({ rowIndex: nextCell.rowIndex, floating: nextCell.floating, column: nextCell.column });
11373 this.rangeController.setRangeToCell(gridCell);
11374 }
11375 };
11376 RowRenderer.prototype.ensureCellVisible = function (gridCell) {
11377 // this scrolls the row into view
11378 if (utils_1.Utils.missing(gridCell.floating)) {
11379 this.gridPanel.ensureIndexVisible(gridCell.rowIndex);
11380 }
11381 if (!gridCell.column.isPinned()) {
11382 this.gridPanel.ensureColumnVisible(gridCell.column);
11383 }
11384 // need to nudge the scrolls for the floating items. otherwise when we set focus on a non-visible
11385 // floating cell, the scrolls get out of sync
11386 this.gridPanel.horizontallyScrollHeaderCenterAndFloatingCenter();
11387 // need to flush frames, to make sure the correct cells are rendered
11388 this.animationFrameService.flushAllFrames();
11389 };
11390 RowRenderer.prototype.startEditingCell = function (gridCell, keyPress, charPress) {
11391 var cell = this.getComponentForCell(gridCell);
11392 if (cell) {
11393 cell.startRowOrCellEdit(keyPress, charPress);
11394 }
11395 };
11396 RowRenderer.prototype.getComponentForCell = function (gridCell) {
11397 var rowComponent;
11398 switch (gridCell.floating) {
11399 case constants_1.Constants.PINNED_TOP:
11400 rowComponent = this.floatingTopRowComps[gridCell.rowIndex];
11401 break;
11402 case constants_1.Constants.PINNED_BOTTOM:
11403 rowComponent = this.floatingBottomRowComps[gridCell.rowIndex];
11404 break;
11405 default:
11406 rowComponent = this.rowCompsByIndex[gridCell.rowIndex];
11407 break;
11408 }
11409 if (!rowComponent) {
11410 return null;
11411 }
11412 var cellComponent = rowComponent.getRenderedCellForColumn(gridCell.column);
11413 return cellComponent;
11414 };
11415 RowRenderer.prototype.onTabKeyDown = function (previousRenderedCell, keyboardEvent) {
11416 var backwards = keyboardEvent.shiftKey;
11417 var success = this.moveToCellAfter(previousRenderedCell, backwards);
11418 if (success) {
11419 keyboardEvent.preventDefault();
11420 }
11421 };
11422 RowRenderer.prototype.tabToNextCell = function (backwards) {
11423 var focusedCell = this.focusedCellController.getFocusedCell();
11424 // if no focus, then cannot navigate
11425 if (utils_1.Utils.missing(focusedCell)) {
11426 return false;
11427 }
11428 var renderedCell = this.getComponentForCell(focusedCell);
11429 // if cell is not rendered, means user has scrolled away from the cell
11430 if (utils_1.Utils.missing(renderedCell)) {
11431 return false;
11432 }
11433 var result = this.moveToCellAfter(renderedCell, backwards);
11434 return result;
11435 };
11436 RowRenderer.prototype.moveToCellAfter = function (previousRenderedCell, backwards) {
11437 var editing = previousRenderedCell.isEditing();
11438 var res;
11439 if (editing) {
11440 if (this.gridOptionsWrapper.isFullRowEdit()) {
11441 res = this.moveToNextEditingRow(previousRenderedCell, backwards);
11442 }
11443 else {
11444 res = this.moveToNextEditingCell(previousRenderedCell, backwards);
11445 }
11446 }
11447 else {
11448 res = this.moveToNextCellNotEditing(previousRenderedCell, backwards);
11449 }
11450 return res;
11451 };
11452 RowRenderer.prototype.moveToNextEditingCell = function (previousRenderedCell, backwards) {
11453 var gridCell = previousRenderedCell.getGridCell();
11454 // need to do this before getting next cell to edit, in case the next cell
11455 // has editable function (eg colDef.editable=func() ) and it depends on the
11456 // result of this cell, so need to save updates from the first edit, in case
11457 // the value is referenced in the function.
11458 previousRenderedCell.stopEditing();
11459 // find the next cell to start editing
11460 var nextRenderedCell = this.findNextCellToFocusOn(gridCell, backwards, true);
11461 var foundCell = utils_1.Utils.exists(nextRenderedCell);
11462 // only prevent default if we found a cell. so if user is on last cell and hits tab, then we default
11463 // to the normal tabbing so user can exit the grid.
11464 if (foundCell) {
11465 nextRenderedCell.startEditingIfEnabled(null, null, true);
11466 nextRenderedCell.focusCell(false);
11467 }
11468 return foundCell;
11469 };
11470 RowRenderer.prototype.moveToNextEditingRow = function (previousRenderedCell, backwards) {
11471 var gridCell = previousRenderedCell.getGridCell();
11472 // find the next cell to start editing
11473 var nextRenderedCell = this.findNextCellToFocusOn(gridCell, backwards, true);
11474 var foundCell = utils_1.Utils.exists(nextRenderedCell);
11475 // only prevent default if we found a cell. so if user is on last cell and hits tab, then we default
11476 // to the normal tabbing so user can exit the grid.
11477 if (foundCell) {
11478 this.moveEditToNextCellOrRow(previousRenderedCell, nextRenderedCell);
11479 }
11480 return foundCell;
11481 };
11482 RowRenderer.prototype.moveToNextCellNotEditing = function (previousRenderedCell, backwards) {
11483 var gridCell = previousRenderedCell.getGridCell();
11484 // find the next cell to start editing
11485 var nextRenderedCell = this.findNextCellToFocusOn(gridCell, backwards, false);
11486 var foundCell = utils_1.Utils.exists(nextRenderedCell);
11487 // only prevent default if we found a cell. so if user is on last cell and hits tab, then we default
11488 // to the normal tabbing so user can exit the grid.
11489 if (foundCell) {
11490 nextRenderedCell.focusCell(true);
11491 }
11492 return foundCell;
11493 };
11494 RowRenderer.prototype.moveEditToNextCellOrRow = function (previousRenderedCell, nextRenderedCell) {
11495 var pGridCell = previousRenderedCell.getGridCell();
11496 var nGridCell = nextRenderedCell.getGridCell();
11497 var rowsMatch = pGridCell.rowIndex === nGridCell.rowIndex && pGridCell.floating === nGridCell.floating;
11498 if (rowsMatch) {
11499 // same row, so we don't start / stop editing, we just move the focus along
11500 previousRenderedCell.setFocusOutOnEditor();
11501 nextRenderedCell.setFocusInOnEditor();
11502 }
11503 else {
11504 var pRow = previousRenderedCell.getRenderedRow();
11505 var nRow = nextRenderedCell.getRenderedRow();
11506 previousRenderedCell.setFocusOutOnEditor();
11507 pRow.stopEditing();
11508 nRow.startRowEditing();
11509 nextRenderedCell.setFocusInOnEditor();
11510 }
11511 nextRenderedCell.focusCell();
11512 };
11513 // called by the cell, when tab is pressed while editing.
11514 // @return: RenderedCell when navigation successful, otherwise null
11515 RowRenderer.prototype.findNextCellToFocusOn = function (gridCell, backwards, startEditing) {
11516 var nextCell = gridCell;
11517 while (true) {
11518 nextCell = this.cellNavigationService.getNextTabbedCell(nextCell, backwards);
11519 // allow user to override what cell to go to next
11520 var userFunc = this.gridOptionsWrapper.getTabToNextCellFunc();
11521 if (utils_1.Utils.exists(userFunc)) {
11522 var params = {
11523 backwards: backwards,
11524 editing: startEditing,
11525 previousCellDef: gridCell.getGridCellDef(),
11526 nextCellDef: nextCell ? nextCell.getGridCellDef() : null
11527 };
11528 var nextCellDef = userFunc(params);
11529 if (utils_1.Utils.exists(nextCellDef)) {
11530 nextCell = new gridCell_1.GridCell(nextCellDef);
11531 }
11532 else {
11533 nextCell = null;
11534 }
11535 }
11536 // if no 'next cell', means we have got to last cell of grid, so nothing to move to,
11537 // so bottom right cell going forwards, or top left going backwards
11538 if (!nextCell) {
11539 return null;
11540 }
11541 // if editing, but cell not editable, skip cell. we do this before we do all of
11542 // the 'ensure index visible' and 'flush all frames', otherwise if we are skipping
11543 // a bunch of cells (eg 10 rows) then all the work on ensuring cell visible is useless
11544 // (except for the last one) which causes grid to stall for a while.
11545 if (startEditing) {
11546 var rowNode = this.paginationProxy.getRow(nextCell.rowIndex);
11547 var cellIsEditable = nextCell.column.isCellEditable(rowNode);
11548 if (!cellIsEditable) {
11549 continue;
11550 }
11551 }
11552 // this scrolls the row into view
11553 var cellIsNotFloating = utils_1.Utils.missing(nextCell.floating);
11554 if (cellIsNotFloating) {
11555 this.gridPanel.ensureIndexVisible(nextCell.rowIndex);
11556 }
11557 // pinned columns don't scroll, so no need to ensure index visible
11558 if (!nextCell.column.isPinned()) {
11559 this.gridPanel.ensureColumnVisible(nextCell.column);
11560 }
11561 // need to nudge the scrolls for the floating items. otherwise when we set focus on a non-visible
11562 // floating cell, the scrolls get out of sync
11563 this.gridPanel.horizontallyScrollHeaderCenterAndFloatingCenter();
11564 // get the grid panel to flush all animation frames - otherwise the call below to get the cellComp
11565 // could fail, if we just scrolled the grid (to make a cell visible) and the rendering hasn't finished.
11566 this.animationFrameService.flushAllFrames();
11567 // we have to call this after ensureColumnVisible - otherwise it could be a virtual column
11568 // or row that is not currently in view, hence the renderedCell would not exist
11569 var nextCellComp = this.getComponentForCell(nextCell);
11570 // if next cell is fullWidth row, then no rendered cell,
11571 // as fullWidth rows have no cells, so we skip it
11572 if (utils_1.Utils.missing(nextCellComp)) {
11573 continue;
11574 }
11575 if (nextCellComp.isSuppressNavigable()) {
11576 continue;
11577 }
11578 // by default, when we click a cell, it gets selected into a range, so to keep keyboard navigation
11579 // consistent, we set into range here also.
11580 if (this.rangeController) {
11581 var gridCell_2 = new gridCell_1.GridCell({ rowIndex: nextCell.rowIndex, floating: nextCell.floating, column: nextCell.column });
11582 this.rangeController.setRangeToCell(gridCell_2);
11583 }
11584 // we successfully tabbed onto a grid cell, so return true
11585 return nextCellComp;
11586 }
11587 };
11588 __decorate([
11589 context_1.Autowired("paginationProxy"),
11590 __metadata("design:type", paginationProxy_1.PaginationProxy)
11591 ], RowRenderer.prototype, "paginationProxy", void 0);
11592 __decorate([
11593 context_1.Autowired("columnController"),
11594 __metadata("design:type", columnController_1.ColumnController)
11595 ], RowRenderer.prototype, "columnController", void 0);
11596 __decorate([
11597 context_1.Autowired("gridOptionsWrapper"),
11598 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
11599 ], RowRenderer.prototype, "gridOptionsWrapper", void 0);
11600 __decorate([
11601 context_1.Autowired("gridCore"),
11602 __metadata("design:type", gridCore_1.GridCore)
11603 ], RowRenderer.prototype, "gridCore", void 0);
11604 __decorate([
11605 context_1.Autowired("$scope"),
11606 __metadata("design:type", Object)
11607 ], RowRenderer.prototype, "$scope", void 0);
11608 __decorate([
11609 context_1.Autowired("expressionService"),
11610 __metadata("design:type", expressionService_1.ExpressionService)
11611 ], RowRenderer.prototype, "expressionService", void 0);
11612 __decorate([
11613 context_1.Autowired("templateService"),
11614 __metadata("design:type", templateService_1.TemplateService)
11615 ], RowRenderer.prototype, "templateService", void 0);
11616 __decorate([
11617 context_1.Autowired("valueService"),
11618 __metadata("design:type", valueService_1.ValueService)
11619 ], RowRenderer.prototype, "valueService", void 0);
11620 __decorate([
11621 context_1.Autowired("eventService"),
11622 __metadata("design:type", eventService_1.EventService)
11623 ], RowRenderer.prototype, "eventService", void 0);
11624 __decorate([
11625 context_1.Autowired("pinnedRowModel"),
11626 __metadata("design:type", pinnedRowModel_1.PinnedRowModel)
11627 ], RowRenderer.prototype, "pinnedRowModel", void 0);
11628 __decorate([
11629 context_1.Autowired("context"),
11630 __metadata("design:type", context_1.Context)
11631 ], RowRenderer.prototype, "context", void 0);
11632 __decorate([
11633 context_1.Autowired("loggerFactory"),
11634 __metadata("design:type", logger_1.LoggerFactory)
11635 ], RowRenderer.prototype, "loggerFactory", void 0);
11636 __decorate([
11637 context_1.Autowired("focusedCellController"),
11638 __metadata("design:type", focusedCellController_1.FocusedCellController)
11639 ], RowRenderer.prototype, "focusedCellController", void 0);
11640 __decorate([
11641 context_1.Autowired("cellNavigationService"),
11642 __metadata("design:type", cellNavigationService_1.CellNavigationService)
11643 ], RowRenderer.prototype, "cellNavigationService", void 0);
11644 __decorate([
11645 context_1.Autowired("columnApi"),
11646 __metadata("design:type", columnApi_1.ColumnApi)
11647 ], RowRenderer.prototype, "columnApi", void 0);
11648 __decorate([
11649 context_1.Autowired("gridApi"),
11650 __metadata("design:type", gridApi_1.GridApi)
11651 ], RowRenderer.prototype, "gridApi", void 0);
11652 __decorate([
11653 context_1.Autowired("beans"),
11654 __metadata("design:type", beans_1.Beans)
11655 ], RowRenderer.prototype, "beans", void 0);
11656 __decorate([
11657 context_1.Autowired("heightScaler"),
11658 __metadata("design:type", heightScaler_1.HeightScaler)
11659 ], RowRenderer.prototype, "heightScaler", void 0);
11660 __decorate([
11661 context_1.Autowired("animationFrameService"),
11662 __metadata("design:type", animationFrameService_1.AnimationFrameService)
11663 ], RowRenderer.prototype, "animationFrameService", void 0);
11664 __decorate([
11665 context_1.Optional("rangeController"),
11666 __metadata("design:type", Object)
11667 ], RowRenderer.prototype, "rangeController", void 0);
11668 __decorate([
11669 __param(0, context_1.Qualifier("loggerFactory")),
11670 __metadata("design:type", Function),
11671 __metadata("design:paramtypes", [logger_1.LoggerFactory]),
11672 __metadata("design:returntype", void 0)
11673 ], RowRenderer.prototype, "agWire", null);
11674 __decorate([
11675 context_1.PreDestroy,
11676 __metadata("design:type", Function),
11677 __metadata("design:paramtypes", []),
11678 __metadata("design:returntype", void 0)
11679 ], RowRenderer.prototype, "destroy", null);
11680 RowRenderer = __decorate([
11681 context_1.Bean("rowRenderer")
11682 ], RowRenderer);
11683 return RowRenderer;
11684}(beanStub_1.BeanStub));
11685exports.RowRenderer = RowRenderer;
11686
11687
11688/***/ }),
11689/* 23 */
11690/***/ (function(module, exports, __webpack_require__) {
11691
11692"use strict";
11693/**
11694 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
11695 * @version v18.1.2
11696 * @link http://www.ag-grid.com/
11697 * @license MIT
11698 */
11699
11700var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
11701 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
11702 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
11703 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
11704 return c > 3 && r && Object.defineProperty(target, key, r), r;
11705};
11706var __metadata = (this && this.__metadata) || function (k, v) {
11707 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
11708};
11709Object.defineProperty(exports, "__esModule", { value: true });
11710var context_1 = __webpack_require__(0);
11711var floatingFilter_1 = __webpack_require__(92);
11712var gridOptionsWrapper_1 = __webpack_require__(2);
11713var floatingFilterWrapper_1 = __webpack_require__(126);
11714var filterManager_1 = __webpack_require__(20);
11715var componentResolver_1 = __webpack_require__(29);
11716var utils_1 = __webpack_require__(1);
11717var overlayWrapperComponent_1 = __webpack_require__(128);
11718var gridApi_1 = __webpack_require__(6);
11719var columnApi_1 = __webpack_require__(7);
11720var ComponentType;
11721(function (ComponentType) {
11722 ComponentType[ComponentType["AG_GRID"] = 0] = "AG_GRID";
11723 ComponentType[ComponentType["FRAMEWORK"] = 1] = "FRAMEWORK";
11724})(ComponentType || (ComponentType = {}));
11725var ComponentRecipes = (function () {
11726 function ComponentRecipes() {
11727 }
11728 ComponentRecipes_1 = ComponentRecipes;
11729 ComponentRecipes.prototype.newDateComponent = function (params) {
11730 return this.componentResolver.createAgGridComponent(this.gridOptions, params, "dateComponent", {
11731 api: this.gridApi,
11732 columnApi: this.columnApi
11733 }, "agDateInput");
11734 };
11735 ComponentRecipes.prototype.newHeaderComponent = function (params) {
11736 return this.componentResolver.createAgGridComponent(params.column.getColDef(), params, "headerComponent", {
11737 api: this.gridApi,
11738 columnApi: this.columnApi,
11739 column: params.column,
11740 colDef: params.column.getColDef()
11741 }, "agColumnHeader");
11742 };
11743 ComponentRecipes.prototype.newHeaderGroupComponent = function (params) {
11744 return this.componentResolver.createAgGridComponent(params.columnGroup.getColGroupDef(), params, "headerGroupComponent", {
11745 api: this.gridApi,
11746 columnApi: this.columnApi
11747 }, "agColumnGroupHeader");
11748 };
11749 ComponentRecipes.prototype.newFloatingFilterWrapperComponent = function (column, params) {
11750 var _this = this;
11751 var colDef = column.getColDef();
11752 if (colDef.suppressFilter) {
11753 return this.newEmptyFloatingFilterWrapperComponent(column);
11754 }
11755 var defaultFloatingFilterType;
11756 if (!colDef.filter) {
11757 defaultFloatingFilterType = this.gridOptionsWrapper.isEnterprise() ? 'agSetColumnFloatingFilter' : 'agTextColumnFloatingFilter';
11758 }
11759 else if (typeof colDef.filter === 'string' && Object.keys(ComponentRecipes_1.filterToFloatingFilterNames).indexOf(colDef.filter) > -1) {
11760 defaultFloatingFilterType = ComponentRecipes_1.filterToFloatingFilterNames[colDef.filter];
11761 }
11762 var dynamicComponentParams = {
11763 column: column,
11764 colDef: colDef,
11765 api: this.gridApi,
11766 columnApi: this.columnApi
11767 };
11768 var floatingFilter = this.componentResolver.createAgGridComponent(colDef, params, "floatingFilterComponent", dynamicComponentParams, defaultFloatingFilterType, false);
11769 var floatingFilterWrapperComponentParams = {
11770 column: column,
11771 floatingFilterComp: floatingFilter,
11772 suppressFilterButton: this.componentResolver.mergeParams(colDef, 'floatingFilterComponent', dynamicComponentParams, params).suppressFilterButton
11773 };
11774 if (!floatingFilter) {
11775 var filterComponent = this.getFilterComponentPrototype(colDef);
11776 if (filterComponent && !filterComponent.component.prototype.getModelAsString) {
11777 return this.newEmptyFloatingFilterWrapperComponent(column);
11778 }
11779 var rawModelFn_1 = params.currentParentModel;
11780 params.currentParentModel = function () {
11781 var parentPromise = _this.filterManager.getFilterComponent(column);
11782 return parentPromise.resolveNow(null, function (parent) { return parent.getModelAsString ? parent.getModelAsString(rawModelFn_1()) : null; });
11783 };
11784 floatingFilterWrapperComponentParams.floatingFilterComp = utils_1.Promise.resolve(this.componentResolver.createInternalAgGridComponent(floatingFilter_1.ReadModelAsStringFloatingFilterComp, params));
11785 }
11786 return this.componentResolver.createInternalAgGridComponent(floatingFilterWrapper_1.FloatingFilterWrapperComp, floatingFilterWrapperComponentParams);
11787 };
11788 ComponentRecipes.prototype.newFullWidthGroupRowInnerCellRenderer = function (params) {
11789 return this.componentResolver.createAgGridComponent(this.gridOptions, params, "groupRowInnerRenderer", params, null, false);
11790 };
11791 ComponentRecipes.prototype.newCellRenderer = function (target, params) {
11792 return this.componentResolver.createAgGridComponent(target, params, "cellRenderer", params, null, false);
11793 };
11794 ComponentRecipes.prototype.newInnerCellRenderer = function (target, params) {
11795 return this.componentResolver.createAgGridComponent(target, params, "innerRenderer", params, null);
11796 };
11797 ComponentRecipes.prototype.newFullRowGroupRenderer = function (params) {
11798 return this.componentResolver.createAgGridComponent(this.gridOptionsWrapper, params, "fullWidthCellRenderer", params, null);
11799 };
11800 ComponentRecipes.prototype.newOverlayWrapperComponent = function () {
11801 return this.componentResolver.createInternalAgGridComponent(overlayWrapperComponent_1.OverlayWrapperComponent, null);
11802 };
11803 ComponentRecipes.prototype.newLoadingOverlayComponent = function () {
11804 return this.componentResolver.createAgGridComponent(this.gridOptions, null, "loadingOverlayComponent", {
11805 api: this.gridApi,
11806 columnApi: this.columnApi
11807 }, "agLoadingOverlay");
11808 };
11809 ComponentRecipes.prototype.newNoRowsOverlayComponent = function () {
11810 return this.componentResolver.createAgGridComponent(this.gridOptions, null, "noRowsOverlayComponent", {
11811 api: this.gridApi,
11812 columnApi: this.columnApi
11813 }, "agNoRowsOverlay");
11814 };
11815 ComponentRecipes.prototype.getFilterComponentPrototype = function (colDef) {
11816 return this.componentResolver.getComponentToUse(colDef, "filter", {
11817 api: this.gridApi,
11818 columnApi: this.columnApi,
11819 colDef: colDef
11820 });
11821 };
11822 ComponentRecipes.prototype.newEmptyFloatingFilterWrapperComponent = function (column) {
11823 var floatingFilterWrapperComponentParams = {
11824 column: column,
11825 floatingFilterComp: null
11826 };
11827 return this.componentResolver.createInternalAgGridComponent(floatingFilterWrapper_1.EmptyFloatingFilterWrapperComp, floatingFilterWrapperComponentParams);
11828 };
11829 ComponentRecipes.filterToFloatingFilterNames = {
11830 set: 'agSetColumnFloatingFilter',
11831 agSetColumnFilter: 'agSetColumnFloatingFilter',
11832 number: 'agNumberColumnFloatingFilter',
11833 agNumberColumnFilter: 'agNumberColumnFloatingFilter',
11834 date: 'agDateColumnFloatingFilter',
11835 agDateColumnFilter: 'agDateColumnFloatingFilter',
11836 text: 'agTextColumnFloatingFilter',
11837 agTextColumnFilter: 'agTextColumnFloatingFilter'
11838 };
11839 __decorate([
11840 context_1.Autowired("componentResolver"),
11841 __metadata("design:type", componentResolver_1.ComponentResolver)
11842 ], ComponentRecipes.prototype, "componentResolver", void 0);
11843 __decorate([
11844 context_1.Autowired("gridOptions"),
11845 __metadata("design:type", Object)
11846 ], ComponentRecipes.prototype, "gridOptions", void 0);
11847 __decorate([
11848 context_1.Autowired("gridApi"),
11849 __metadata("design:type", gridApi_1.GridApi)
11850 ], ComponentRecipes.prototype, "gridApi", void 0);
11851 __decorate([
11852 context_1.Autowired("columnApi"),
11853 __metadata("design:type", columnApi_1.ColumnApi)
11854 ], ComponentRecipes.prototype, "columnApi", void 0);
11855 __decorate([
11856 context_1.Autowired("gridOptionsWrapper"),
11857 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
11858 ], ComponentRecipes.prototype, "gridOptionsWrapper", void 0);
11859 __decorate([
11860 context_1.Autowired('filterManager'),
11861 __metadata("design:type", filterManager_1.FilterManager)
11862 ], ComponentRecipes.prototype, "filterManager", void 0);
11863 ComponentRecipes = ComponentRecipes_1 = __decorate([
11864 context_1.Bean('componentRecipes')
11865 ], ComponentRecipes);
11866 return ComponentRecipes;
11867 var ComponentRecipes_1;
11868}());
11869exports.ComponentRecipes = ComponentRecipes;
11870
11871
11872/***/ }),
11873/* 24 */
11874/***/ (function(module, exports, __webpack_require__) {
11875
11876"use strict";
11877/**
11878 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
11879 * @version v18.1.2
11880 * @link http://www.ag-grid.com/
11881 * @license MIT
11882 */
11883
11884var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
11885 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
11886 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
11887 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
11888 return c > 3 && r && Object.defineProperty(target, key, r), r;
11889};
11890var __metadata = (this && this.__metadata) || function (k, v) {
11891 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
11892};
11893Object.defineProperty(exports, "__esModule", { value: true });
11894var context_1 = __webpack_require__(0);
11895var eventService_1 = __webpack_require__(3);
11896var events_1 = __webpack_require__(5);
11897var gridOptionsWrapper_1 = __webpack_require__(2);
11898var columnApi_1 = __webpack_require__(7);
11899var columnController_1 = __webpack_require__(4);
11900var utils_1 = __webpack_require__(1);
11901var gridCell_1 = __webpack_require__(25);
11902var gridApi_1 = __webpack_require__(6);
11903var cellComp_1 = __webpack_require__(36);
11904var FocusedCellController = (function () {
11905 function FocusedCellController() {
11906 }
11907 FocusedCellController.prototype.init = function () {
11908 this.eventService.addEventListener(events_1.Events.EVENT_COLUMN_PIVOT_MODE_CHANGED, this.clearFocusedCell.bind(this));
11909 this.eventService.addEventListener(events_1.Events.EVENT_COLUMN_EVERYTHING_CHANGED, this.clearFocusedCell.bind(this));
11910 this.eventService.addEventListener(events_1.Events.EVENT_COLUMN_GROUP_OPENED, this.clearFocusedCell.bind(this));
11911 this.eventService.addEventListener(events_1.Events.EVENT_COLUMN_MOVED, this.clearFocusedCell.bind(this));
11912 this.eventService.addEventListener(events_1.Events.EVENT_COLUMN_PINNED, this.clearFocusedCell.bind(this));
11913 this.eventService.addEventListener(events_1.Events.EVENT_COLUMN_ROW_GROUP_CHANGED, this.clearFocusedCell.bind(this));
11914 this.eventService.addEventListener(events_1.Events.EVENT_COLUMN_VISIBLE, this.clearFocusedCell.bind(this));
11915 };
11916 FocusedCellController.prototype.clearFocusedCell = function () {
11917 this.focusedCell = null;
11918 this.onCellFocused(false);
11919 };
11920 FocusedCellController.prototype.getFocusedCell = function () {
11921 return this.focusedCell;
11922 };
11923 // we check if the browser is focusing something, and if it is, and
11924 // it's the cell we think is focused, then return the cell. so this
11925 // methods returns the cell if a) we think it has focus and b) the
11926 // browser thinks it has focus. this then returns nothing if we
11927 // first focus a cell, then second click outside the grid, as then the
11928 // grid cell will still be focused as far as the grid is concerned,
11929 // however the browser focus will have moved somewhere else.
11930 FocusedCellController.prototype.getFocusCellToUseAfterRefresh = function () {
11931 if (this.gridOptionsWrapper.isSuppressFocusAfterRefresh()) {
11932 return null;
11933 }
11934 if (!this.focusedCell) {
11935 return null;
11936 }
11937 // we check that the browser is actually focusing on the grid, if it is not, then
11938 // we have nothing to worry about
11939 var browserFocusedCell = this.getGridCellForDomElement(document.activeElement);
11940 if (!browserFocusedCell) {
11941 return null;
11942 }
11943 return this.focusedCell;
11944 };
11945 FocusedCellController.prototype.getGridCellForDomElement = function (eBrowserCell) {
11946 var ePointer = eBrowserCell;
11947 while (ePointer) {
11948 var cellComp = this.gridOptionsWrapper.getDomData(ePointer, cellComp_1.CellComp.DOM_DATA_KEY_CELL_COMP);
11949 if (cellComp) {
11950 return cellComp.getGridCell();
11951 }
11952 ePointer = ePointer.parentNode;
11953 }
11954 return null;
11955 };
11956 FocusedCellController.prototype.setFocusedCell = function (rowIndex, colKey, floating, forceBrowserFocus) {
11957 if (forceBrowserFocus === void 0) { forceBrowserFocus = false; }
11958 var column = utils_1.Utils.makeNull(this.columnController.getGridColumn(colKey));
11959 this.focusedCell = new gridCell_1.GridCell({ rowIndex: rowIndex,
11960 floating: utils_1.Utils.makeNull(floating),
11961 column: column });
11962 this.onCellFocused(forceBrowserFocus);
11963 };
11964 FocusedCellController.prototype.isCellFocused = function (gridCell) {
11965 if (utils_1.Utils.missing(this.focusedCell)) {
11966 return false;
11967 }
11968 return this.focusedCell.column === gridCell.column && this.isRowFocused(gridCell.rowIndex, gridCell.floating);
11969 };
11970 FocusedCellController.prototype.isRowNodeFocused = function (rowNode) {
11971 return this.isRowFocused(rowNode.rowIndex, rowNode.rowPinned);
11972 };
11973 FocusedCellController.prototype.isAnyCellFocused = function () {
11974 return !!this.focusedCell;
11975 };
11976 FocusedCellController.prototype.isRowFocused = function (rowIndex, floating) {
11977 if (utils_1.Utils.missing(this.focusedCell)) {
11978 return false;
11979 }
11980 var floatingOrNull = utils_1.Utils.makeNull(floating);
11981 return this.focusedCell.rowIndex === rowIndex && this.focusedCell.floating === floatingOrNull;
11982 };
11983 FocusedCellController.prototype.onCellFocused = function (forceBrowserFocus) {
11984 var event = {
11985 type: events_1.Events.EVENT_CELL_FOCUSED,
11986 forceBrowserFocus: forceBrowserFocus,
11987 rowIndex: null,
11988 column: null,
11989 floating: null,
11990 api: this.gridApi,
11991 columnApi: this.columnApi,
11992 rowPinned: null
11993 };
11994 if (this.focusedCell) {
11995 event.rowIndex = this.focusedCell.rowIndex;
11996 event.column = this.focusedCell.column;
11997 event.rowPinned = this.focusedCell.floating;
11998 }
11999 this.eventService.dispatchEvent(event);
12000 };
12001 __decorate([
12002 context_1.Autowired('eventService'),
12003 __metadata("design:type", eventService_1.EventService)
12004 ], FocusedCellController.prototype, "eventService", void 0);
12005 __decorate([
12006 context_1.Autowired('gridOptionsWrapper'),
12007 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
12008 ], FocusedCellController.prototype, "gridOptionsWrapper", void 0);
12009 __decorate([
12010 context_1.Autowired('columnController'),
12011 __metadata("design:type", columnController_1.ColumnController)
12012 ], FocusedCellController.prototype, "columnController", void 0);
12013 __decorate([
12014 context_1.Autowired('columnApi'),
12015 __metadata("design:type", columnApi_1.ColumnApi)
12016 ], FocusedCellController.prototype, "columnApi", void 0);
12017 __decorate([
12018 context_1.Autowired('gridApi'),
12019 __metadata("design:type", gridApi_1.GridApi)
12020 ], FocusedCellController.prototype, "gridApi", void 0);
12021 __decorate([
12022 context_1.PostConstruct,
12023 __metadata("design:type", Function),
12024 __metadata("design:paramtypes", []),
12025 __metadata("design:returntype", void 0)
12026 ], FocusedCellController.prototype, "init", null);
12027 FocusedCellController = __decorate([
12028 context_1.Bean('focusedCellController')
12029 ], FocusedCellController);
12030 return FocusedCellController;
12031}());
12032exports.FocusedCellController = FocusedCellController;
12033
12034
12035/***/ }),
12036/* 25 */
12037/***/ (function(module, exports, __webpack_require__) {
12038
12039"use strict";
12040/**
12041 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
12042 * @version v18.1.2
12043 * @link http://www.ag-grid.com/
12044 * @license MIT
12045 */
12046
12047Object.defineProperty(exports, "__esModule", { value: true });
12048var utils_1 = __webpack_require__(1);
12049var gridRow_1 = __webpack_require__(66);
12050var GridCell = (function () {
12051 function GridCell(gridCellDef) {
12052 this.rowIndex = gridCellDef.rowIndex;
12053 this.column = gridCellDef.column;
12054 this.floating = utils_1.Utils.makeNull(gridCellDef.floating);
12055 }
12056 GridCell.prototype.getGridCellDef = function () {
12057 return {
12058 rowIndex: this.rowIndex,
12059 column: this.column,
12060 floating: this.floating
12061 };
12062 };
12063 GridCell.prototype.getGridRow = function () {
12064 return new gridRow_1.GridRow(this.rowIndex, this.floating);
12065 };
12066 GridCell.prototype.toString = function () {
12067 return "rowIndex = " + this.rowIndex + ", floating = " + this.floating + ", column = " + (this.column ? this.column.getId() : null);
12068 };
12069 GridCell.prototype.createId = function () {
12070 return this.rowIndex + "." + this.floating + "." + this.column.getId();
12071 };
12072 GridCell.prototype.equals = function (other) {
12073 var colsMatch = this.column === other.column;
12074 var floatingMatch = this.floating === other.floating;
12075 var indexMatch = this.rowIndex === other.rowIndex;
12076 return colsMatch && floatingMatch && indexMatch;
12077 };
12078 return GridCell;
12079}());
12080exports.GridCell = GridCell;
12081
12082
12083/***/ }),
12084/* 26 */
12085/***/ (function(module, exports, __webpack_require__) {
12086
12087"use strict";
12088/**
12089 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
12090 * @version v18.1.2
12091 * @link http://www.ag-grid.com/
12092 * @license MIT
12093 */
12094
12095var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
12096 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
12097 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
12098 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
12099 return c > 3 && r && Object.defineProperty(target, key, r), r;
12100};
12101var __metadata = (this && this.__metadata) || function (k, v) {
12102 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
12103};
12104Object.defineProperty(exports, "__esModule", { value: true });
12105var column_1 = __webpack_require__(10);
12106var context_1 = __webpack_require__(0);
12107var gridOptionsWrapper_1 = __webpack_require__(2);
12108var columnApi_1 = __webpack_require__(7);
12109var columnController_1 = __webpack_require__(4);
12110var eventService_1 = __webpack_require__(3);
12111var events_1 = __webpack_require__(5);
12112var context_2 = __webpack_require__(0);
12113var utils_1 = __webpack_require__(1);
12114var gridApi_1 = __webpack_require__(6);
12115var SortController = (function () {
12116 function SortController() {
12117 }
12118 SortController_1 = SortController;
12119 SortController.prototype.progressSort = function (column, multiSort, source) {
12120 if (source === void 0) { source = "api"; }
12121 var nextDirection = this.getNextSortDirection(column);
12122 this.setSortForColumn(column, nextDirection, multiSort, source);
12123 };
12124 SortController.prototype.setSortForColumn = function (column, sort, multiSort, source) {
12125 if (source === void 0) { source = "api"; }
12126 // auto correct - if sort not legal value, then set it to 'no sort' (which is null)
12127 if (sort !== column_1.Column.SORT_ASC && sort !== column_1.Column.SORT_DESC) {
12128 sort = null;
12129 }
12130 // update sort on current col
12131 column.setSort(sort, source);
12132 // sortedAt used for knowing order of cols when multi-col sort
12133 if (column.getSort()) {
12134 var sortedAt = Number(new Date().valueOf());
12135 column.setSortedAt(sortedAt);
12136 }
12137 else {
12138 column.setSortedAt(null);
12139 }
12140 var doingMultiSort = multiSort && !this.gridOptionsWrapper.isSuppressMultiSort();
12141 // clear sort on all columns except this one, and update the icons
12142 if (!doingMultiSort) {
12143 this.clearSortBarThisColumn(column, source);
12144 }
12145 this.dispatchSortChangedEvents();
12146 };
12147 // gets called by API, so if data changes, use can call this, which will end up
12148 // working out the sort order again of the rows.
12149 SortController.prototype.onSortChanged = function () {
12150 this.dispatchSortChangedEvents();
12151 };
12152 SortController.prototype.dispatchSortChangedEvents = function () {
12153 var event = {
12154 type: events_1.Events.EVENT_SORT_CHANGED,
12155 api: this.gridApi,
12156 columnApi: this.columnApi
12157 };
12158 this.eventService.dispatchEvent(event);
12159 };
12160 SortController.prototype.clearSortBarThisColumn = function (columnToSkip, source) {
12161 this.columnController.getPrimaryAndSecondaryAndAutoColumns().forEach(function (columnToClear) {
12162 // Do not clear if either holding shift, or if column in question was clicked
12163 if (!(columnToClear === columnToSkip)) {
12164 // setting to 'undefined' as null means 'none' rather than cleared, otherwise issue will arise
12165 // if sort order is: ['desc', null , 'asc'], as it will start at null rather than 'desc'.
12166 columnToClear.setSort(undefined, source);
12167 }
12168 });
12169 };
12170 SortController.prototype.getNextSortDirection = function (column) {
12171 var sortingOrder;
12172 if (column.getColDef().sortingOrder) {
12173 sortingOrder = column.getColDef().sortingOrder;
12174 }
12175 else if (this.gridOptionsWrapper.getSortingOrder()) {
12176 sortingOrder = this.gridOptionsWrapper.getSortingOrder();
12177 }
12178 else {
12179 sortingOrder = SortController_1.DEFAULT_SORTING_ORDER;
12180 }
12181 if (!Array.isArray(sortingOrder) || sortingOrder.length <= 0) {
12182 console.warn('ag-grid: sortingOrder must be an array with at least one element, currently it\'s ' + sortingOrder);
12183 return;
12184 }
12185 var currentIndex = sortingOrder.indexOf(column.getSort());
12186 var notInArray = currentIndex < 0;
12187 var lastItemInArray = currentIndex == sortingOrder.length - 1;
12188 var result;
12189 if (notInArray || lastItemInArray) {
12190 result = sortingOrder[0];
12191 }
12192 else {
12193 result = sortingOrder[currentIndex + 1];
12194 }
12195 // verify the sort type exists, as the user could provide the sortingOrder, need to make sure it's valid
12196 if (SortController_1.DEFAULT_SORTING_ORDER.indexOf(result) < 0) {
12197 console.warn('ag-grid: invalid sort type ' + result);
12198 return null;
12199 }
12200 return result;
12201 };
12202 // used by the public api, for saving the sort model
12203 SortController.prototype.getSortModel = function () {
12204 var columnsWithSorting = this.getColumnsWithSortingOrdered();
12205 return utils_1.Utils.map(columnsWithSorting, function (column) {
12206 return {
12207 colId: column.getColId(),
12208 sort: column.getSort()
12209 };
12210 });
12211 };
12212 SortController.prototype.setSortModel = function (sortModel, source) {
12213 var _this = this;
12214 if (source === void 0) { source = "api"; }
12215 if (!this.gridOptionsWrapper.isEnableSorting()) {
12216 console.warn('ag-grid: You are setting the sort model on a grid that does not have sorting enabled');
12217 return;
12218 }
12219 // first up, clear any previous sort
12220 var sortModelProvided = sortModel && sortModel.length > 0;
12221 var allColumnsIncludingAuto = this.columnController.getPrimaryAndSecondaryAndAutoColumns();
12222 allColumnsIncludingAuto.forEach(function (column) {
12223 var sortForCol = null;
12224 var sortedAt = -1;
12225 if (sortModelProvided && !column.getColDef().suppressSorting) {
12226 for (var j = 0; j < sortModel.length; j++) {
12227 var sortModelEntry = sortModel[j];
12228 if (typeof sortModelEntry.colId === 'string'
12229 && typeof column.getColId() === 'string'
12230 && _this.compareColIds(sortModelEntry, column)) {
12231 sortForCol = sortModelEntry.sort;
12232 sortedAt = j;
12233 }
12234 }
12235 }
12236 if (sortForCol) {
12237 column.setSort(sortForCol, source);
12238 column.setSortedAt(sortedAt);
12239 }
12240 else {
12241 column.setSort(null, source);
12242 column.setSortedAt(null);
12243 }
12244 });
12245 this.dispatchSortChangedEvents();
12246 };
12247 SortController.prototype.compareColIds = function (sortModelEntry, column) {
12248 return sortModelEntry.colId === column.getColId();
12249 };
12250 SortController.prototype.getColumnsWithSortingOrdered = function () {
12251 // pull out all the columns that have sorting set
12252 var allColumnsIncludingAuto = this.columnController.getPrimaryAndSecondaryAndAutoColumns();
12253 var columnsWithSorting = utils_1.Utils.filter(allColumnsIncludingAuto, function (column) { return !!column.getSort(); });
12254 // put the columns in order of which one got sorted first
12255 columnsWithSorting.sort(function (a, b) { return a.sortedAt - b.sortedAt; });
12256 return columnsWithSorting;
12257 };
12258 // used by row controller, when doing the sorting
12259 SortController.prototype.getSortForRowController = function () {
12260 var columnsWithSorting = this.getColumnsWithSortingOrdered();
12261 return utils_1.Utils.map(columnsWithSorting, function (column) {
12262 var ascending = column.getSort() === column_1.Column.SORT_ASC;
12263 return {
12264 inverter: ascending ? 1 : -1,
12265 column: column
12266 };
12267 });
12268 };
12269 SortController.DEFAULT_SORTING_ORDER = [column_1.Column.SORT_ASC, column_1.Column.SORT_DESC, null];
12270 __decorate([
12271 context_1.Autowired('gridOptionsWrapper'),
12272 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
12273 ], SortController.prototype, "gridOptionsWrapper", void 0);
12274 __decorate([
12275 context_1.Autowired('columnController'),
12276 __metadata("design:type", columnController_1.ColumnController)
12277 ], SortController.prototype, "columnController", void 0);
12278 __decorate([
12279 context_1.Autowired('eventService'),
12280 __metadata("design:type", eventService_1.EventService)
12281 ], SortController.prototype, "eventService", void 0);
12282 __decorate([
12283 context_1.Autowired('columnApi'),
12284 __metadata("design:type", columnApi_1.ColumnApi)
12285 ], SortController.prototype, "columnApi", void 0);
12286 __decorate([
12287 context_1.Autowired('gridApi'),
12288 __metadata("design:type", gridApi_1.GridApi)
12289 ], SortController.prototype, "gridApi", void 0);
12290 SortController = SortController_1 = __decorate([
12291 context_2.Bean('sortController')
12292 ], SortController);
12293 return SortController;
12294 var SortController_1;
12295}());
12296exports.SortController = SortController;
12297
12298
12299/***/ }),
12300/* 27 */
12301/***/ (function(module, exports, __webpack_require__) {
12302
12303"use strict";
12304/**
12305 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
12306 * @version v18.1.2
12307 * @link http://www.ag-grid.com/
12308 * @license MIT
12309 */
12310
12311Object.defineProperty(exports, "__esModule", { value: true });
12312var Events = (function () {
12313 function Events() {
12314 }
12315 /** Everything has changed with the columns. Either complete new set of columns set, or user called setState()*/
12316 Events.EVENT_COLUMN_EVERYTHING_CHANGED = 'columnEverythingChanged';
12317 /** User has set in new columns. */
12318 Events.EVENT_NEW_COLUMNS_LOADED = 'newColumnsLoaded';
12319 /** The pivot mode flag was changed */
12320 Events.EVENT_COLUMN_PIVOT_MODE_CHANGED = 'columnPivotModeChanged';
12321 /** A row group column was added, removed or order changed. */
12322 Events.EVENT_COLUMN_ROW_GROUP_CHANGED = 'columnRowGroupChanged';
12323 /** A pivot column was added, removed or order changed. */
12324 Events.EVENT_COLUMN_PIVOT_CHANGED = 'columnPivotChanged';
12325 /** The list of grid columns has changed. */
12326 Events.EVENT_GRID_COLUMNS_CHANGED = 'gridColumnsChanged';
12327 /** A value column was added, removed or agg function was changed. */
12328 Events.EVENT_COLUMN_VALUE_CHANGED = 'columnValueChanged';
12329 /** A column was moved */
12330 Events.EVENT_COLUMN_MOVED = 'columnMoved';
12331 /** One or more columns was shown / hidden */
12332 Events.EVENT_COLUMN_VISIBLE = 'columnVisible';
12333 /** One or more columns was pinned / unpinned*/
12334 Events.EVENT_COLUMN_PINNED = 'columnPinned';
12335 /** A column group was opened / closed */
12336 Events.EVENT_COLUMN_GROUP_OPENED = 'columnGroupOpened';
12337 /** One or more columns was resized. If just one, the column in the event is set. */
12338 Events.EVENT_COLUMN_RESIZED = 'columnResized';
12339 /** The list of displayed columns has changed, can result from columns open / close, column move, pivot, group, etc */
12340 Events.EVENT_DISPLAYED_COLUMNS_CHANGED = 'displayedColumnsChanged';
12341 /** The list of virtual columns has changed, results from viewport changing */
12342 Events.EVENT_VIRTUAL_COLUMNS_CHANGED = 'virtualColumnsChanged';
12343 /** A row group was opened / closed */
12344 Events.EVENT_ROW_GROUP_OPENED = 'rowGroupOpened';
12345 /** The client has set new data into the grid */
12346 Events.EVENT_ROW_DATA_CHANGED = 'rowDataChanged';
12347 /** The client has updated data for the grid */
12348 Events.EVENT_ROW_DATA_UPDATED = 'rowDataUpdated';
12349 /** The client has set new floating data into the grid */
12350 Events.EVENT_PINNED_ROW_DATA_CHANGED = 'pinnedRowDataChanged';
12351 /** Range selection has changed */
12352 Events.EVENT_RANGE_SELECTION_CHANGED = 'rangeSelectionChanged';
12353 /** For when the tool panel is shown / hidden */
12354 Events.EVENT_TOOL_PANEL_VISIBLE_CHANGED = 'toolPanelVisibleChanged';
12355 /** Model was updated - grid updates the drawn rows when this happens */
12356 Events.EVENT_MODEL_UPDATED = 'modelUpdated';
12357 Events.EVENT_PASTE_START = 'pasteStart';
12358 Events.EVENT_PASTE_END = 'pasteEnd';
12359 Events.EVENT_CELL_CLICKED = 'cellClicked';
12360 Events.EVENT_CELL_DOUBLE_CLICKED = 'cellDoubleClicked';
12361 Events.EVENT_CELL_MOUSE_DOWN = 'cellMouseDown';
12362 Events.EVENT_CELL_CONTEXT_MENU = 'cellContextMenu';
12363 Events.EVENT_CELL_VALUE_CHANGED = 'cellValueChanged';
12364 Events.EVENT_ROW_VALUE_CHANGED = 'rowValueChanged';
12365 Events.EVENT_CELL_FOCUSED = 'cellFocused';
12366 Events.EVENT_ROW_SELECTED = 'rowSelected';
12367 Events.EVENT_SELECTION_CHANGED = 'selectionChanged';
12368 Events.EVENT_CELL_MOUSE_OVER = 'cellMouseOver';
12369 Events.EVENT_CELL_MOUSE_OUT = 'cellMouseOut';
12370 /** 2 events for filtering. The grid LISTENS for filterChanged and afterFilterChanged */
12371 Events.EVENT_FILTER_CHANGED = 'filterChanged';
12372 /** Filter was change but not applied. Only useful if apply buttons are used in filters. */
12373 Events.EVENT_FILTER_MODIFIED = 'filterModified';
12374 Events.EVENT_SORT_CHANGED = 'sortChanged';
12375 /** A row was removed from the dom, for any reason. Use to clean up resources (if any) used by the row. */
12376 Events.EVENT_VIRTUAL_ROW_REMOVED = 'virtualRowRemoved';
12377 Events.EVENT_ROW_CLICKED = 'rowClicked';
12378 Events.EVENT_ROW_DOUBLE_CLICKED = 'rowDoubleClicked';
12379 /** Gets called once after the grid has finished initialising. */
12380 Events.EVENT_GRID_READY = 'gridReady';
12381 /** Width of height of the main grid div has changed. Grid listens for this and does layout of grid if it's
12382 * changed, so always filling the space it was given. */
12383 Events.EVENT_GRID_SIZE_CHANGED = 'gridSizeChanged';
12384 /** The indexes of the rows rendered has changed, eg user has scrolled to a new vertical position. */
12385 Events.EVENT_VIEWPORT_CHANGED = 'viewportChanged';
12386 /** A column drag has started, either resizing a column or moving a column. */
12387 Events.EVENT_DRAG_STARTED = 'dragStarted';
12388 /** A column drag has stopped */
12389 Events.EVENT_DRAG_STOPPED = 'dragStopped';
12390 Events.EVENT_ROW_EDITING_STARTED = 'rowEditingStarted';
12391 Events.EVENT_ROW_EDITING_STOPPED = 'rowEditingStopped';
12392 Events.EVENT_CELL_EDITING_STARTED = 'cellEditingStarted';
12393 Events.EVENT_CELL_EDITING_STOPPED = 'cellEditingStopped';
12394 /** Main body of grid has scrolled, either horizontally or vertically */
12395 Events.EVENT_BODY_SCROLL = 'bodyScroll';
12396 Events.EVENT_ANIMATION_QUEUE_EMPTY = 'animationQueueEmpty';
12397 Events.EVENT_HEIGHT_SCALE_CHANGED = 'heightScaleChanged';
12398 /** The displayed page for pagination has changed. For example the data was filtered or sorted,
12399 * or the user has moved to a different page. */
12400 Events.EVENT_PAGINATION_CHANGED = 'paginationChanged';
12401 /** Only used by React, Angular 2+, Web Components, Aurelia and VueJS ag-Grid components
12402 * (not used if doing plain JavaScript or Angular 1.x). If the grid receives changes due
12403 * to bound properties, this event fires after the grid has finished processing the change. */
12404 Events.EVENT_COMPONENT_STATE_CHANGED = 'componentStateChanged';
12405 /** All items from here down are used internally by the grid, not intended for external use. */
12406 // not documented, either experimental, or we just don't want users using an depending on them
12407 Events.EVENT_BODY_HEIGHT_CHANGED = 'bodyHeightChanged';
12408 Events.EVENT_DISPLAYED_COLUMNS_WIDTH_CHANGED = 'displayedColumnsWidthChanged';
12409 Events.EVENT_SCROLL_VISIBILITY_CHANGED = 'scrollVisibilityChanged';
12410 Events.EVENT_COLUMN_HOVER_CHANGED = 'columnHoverChanged';
12411 Events.EVENT_FLASH_CELLS = 'flashCells';
12412 Events.EVENT_ROW_DRAG_ENTER = 'rowDragEnter';
12413 Events.EVENT_ROW_DRAG_MOVE = 'rowDragMove';
12414 Events.EVENT_ROW_DRAG_LEAVE = 'rowDragLeave';
12415 Events.EVENT_ROW_DRAG_END = 'rowDragEnd';
12416 // these are used for server side group and agg - only used by CS with Viewport Row Model - intention is
12417 // to design these better around server side functions and then release to general public when fully working with
12418 // all the row models.
12419 Events.EVENT_COLUMN_ROW_GROUP_CHANGE_REQUEST = 'columnRowGroupChangeRequest';
12420 Events.EVENT_COLUMN_PIVOT_CHANGE_REQUEST = 'columnPivotChangeRequest';
12421 Events.EVENT_COLUMN_VALUE_CHANGE_REQUEST = 'columnValueChangeRequest';
12422 Events.EVENT_COLUMN_AGG_FUNC_CHANGE_REQUEST = 'columnAggFuncChangeRequest';
12423 return Events;
12424}());
12425exports.Events = Events;
12426
12427
12428/***/ }),
12429/* 28 */
12430/***/ (function(module, exports, __webpack_require__) {
12431
12432"use strict";
12433/**
12434 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
12435 * @version v18.1.2
12436 * @link http://www.ag-grid.com/
12437 * @license MIT
12438 */
12439
12440var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
12441 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
12442 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
12443 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
12444 return c > 3 && r && Object.defineProperty(target, key, r), r;
12445};
12446var __metadata = (this && this.__metadata) || function (k, v) {
12447 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
12448};
12449Object.defineProperty(exports, "__esModule", { value: true });
12450var column_1 = __webpack_require__(10);
12451var eventService_1 = __webpack_require__(3);
12452var context_1 = __webpack_require__(0);
12453var gridOptionsWrapper_1 = __webpack_require__(2);
12454var columnApi_1 = __webpack_require__(7);
12455var gridApi_1 = __webpack_require__(6);
12456var ColumnGroup = (function () {
12457 function ColumnGroup(originalColumnGroup, groupId, instanceId) {
12458 // depends on the open/closed state of the group, only displaying columns are stored here
12459 this.displayedChildren = [];
12460 this.localEventService = new eventService_1.EventService();
12461 this.groupId = groupId;
12462 this.instanceId = instanceId;
12463 this.originalColumnGroup = originalColumnGroup;
12464 }
12465 // this is static, a it is used outside of this class
12466 ColumnGroup.createUniqueId = function (groupId, instanceId) {
12467 return groupId + '_' + instanceId;
12468 };
12469 // as the user is adding and removing columns, the groups are recalculated.
12470 // this reset clears out all children, ready for children to be added again
12471 ColumnGroup.prototype.reset = function () {
12472 this.parent = null;
12473 this.children = null;
12474 this.displayedChildren = null;
12475 };
12476 ColumnGroup.prototype.getParent = function () {
12477 return this.parent;
12478 };
12479 ColumnGroup.prototype.setParent = function (parent) {
12480 this.parent = parent;
12481 };
12482 ColumnGroup.prototype.getUniqueId = function () {
12483 return ColumnGroup.createUniqueId(this.groupId, this.instanceId);
12484 };
12485 ColumnGroup.prototype.isEmptyGroup = function () {
12486 return this.displayedChildren.length === 0;
12487 };
12488 ColumnGroup.prototype.isMoving = function () {
12489 var allLeafColumns = this.getOriginalColumnGroup().getLeafColumns();
12490 if (!allLeafColumns || allLeafColumns.length === 0) {
12491 return false;
12492 }
12493 var allMoving = true;
12494 allLeafColumns.forEach(function (col) {
12495 if (!col.isMoving()) {
12496 allMoving = false;
12497 }
12498 });
12499 return allMoving;
12500 };
12501 ColumnGroup.prototype.checkLeft = function () {
12502 // first get all children to setLeft, as it impacts our decision below
12503 this.displayedChildren.forEach(function (child) {
12504 if (child instanceof ColumnGroup) {
12505 child.checkLeft();
12506 }
12507 });
12508 // set our left based on first displayed column
12509 if (this.displayedChildren.length > 0) {
12510 if (this.gridOptionsWrapper.isEnableRtl()) {
12511 var lastChild = this.displayedChildren[this.displayedChildren.length - 1];
12512 var lastChildLeft = lastChild.getLeft();
12513 this.setLeft(lastChildLeft);
12514 }
12515 else {
12516 var firstChildLeft = this.displayedChildren[0].getLeft();
12517 this.setLeft(firstChildLeft);
12518 }
12519 }
12520 else {
12521 // this should never happen, as if we have no displayed columns, then
12522 // this groups should not even exist.
12523 this.setLeft(null);
12524 }
12525 };
12526 ColumnGroup.prototype.getLeft = function () {
12527 return this.left;
12528 };
12529 ColumnGroup.prototype.getOldLeft = function () {
12530 return this.oldLeft;
12531 };
12532 ColumnGroup.prototype.setLeft = function (left) {
12533 this.oldLeft = left;
12534 if (this.left !== left) {
12535 this.left = left;
12536 this.localEventService.dispatchEvent(this.createAgEvent(ColumnGroup.EVENT_LEFT_CHANGED));
12537 }
12538 };
12539 ColumnGroup.prototype.createAgEvent = function (type) {
12540 return {
12541 type: type,
12542 };
12543 };
12544 ColumnGroup.prototype.addEventListener = function (eventType, listener) {
12545 this.localEventService.addEventListener(eventType, listener);
12546 };
12547 ColumnGroup.prototype.removeEventListener = function (eventType, listener) {
12548 this.localEventService.removeEventListener(eventType, listener);
12549 };
12550 ColumnGroup.prototype.getGroupId = function () {
12551 return this.groupId;
12552 };
12553 ColumnGroup.prototype.getInstanceId = function () {
12554 return this.instanceId;
12555 };
12556 ColumnGroup.prototype.isChildInThisGroupDeepSearch = function (wantedChild) {
12557 var result = false;
12558 this.children.forEach(function (foundChild) {
12559 if (wantedChild === foundChild) {
12560 result = true;
12561 }
12562 if (foundChild instanceof ColumnGroup) {
12563 if (foundChild.isChildInThisGroupDeepSearch(wantedChild)) {
12564 result = true;
12565 }
12566 }
12567 });
12568 return result;
12569 };
12570 ColumnGroup.prototype.getActualWidth = function () {
12571 var groupActualWidth = 0;
12572 if (this.displayedChildren) {
12573 this.displayedChildren.forEach(function (child) {
12574 groupActualWidth += child.getActualWidth();
12575 });
12576 }
12577 return groupActualWidth;
12578 };
12579 ColumnGroup.prototype.isResizable = function () {
12580 if (!this.displayedChildren) {
12581 return false;
12582 }
12583 // if at least one child is resizable, then the group is resizable
12584 var result = false;
12585 this.displayedChildren.forEach(function (child) {
12586 if (child.isResizable()) {
12587 result = true;
12588 }
12589 });
12590 return result;
12591 };
12592 ColumnGroup.prototype.getMinWidth = function () {
12593 var result = 0;
12594 this.displayedChildren.forEach(function (groupChild) {
12595 result += groupChild.getMinWidth();
12596 });
12597 return result;
12598 };
12599 ColumnGroup.prototype.addChild = function (child) {
12600 if (!this.children) {
12601 this.children = [];
12602 }
12603 this.children.push(child);
12604 };
12605 ColumnGroup.prototype.getDisplayedChildren = function () {
12606 return this.displayedChildren;
12607 };
12608 ColumnGroup.prototype.getLeafColumns = function () {
12609 var result = [];
12610 this.addLeafColumns(result);
12611 return result;
12612 };
12613 ColumnGroup.prototype.getDisplayedLeafColumns = function () {
12614 var result = [];
12615 this.addDisplayedLeafColumns(result);
12616 return result;
12617 };
12618 // why two methods here doing the same thing?
12619 ColumnGroup.prototype.getDefinition = function () {
12620 return this.originalColumnGroup.getColGroupDef();
12621 };
12622 ColumnGroup.prototype.getColGroupDef = function () {
12623 return this.originalColumnGroup.getColGroupDef();
12624 };
12625 ColumnGroup.prototype.isPadding = function () {
12626 return this.originalColumnGroup.isPadding();
12627 };
12628 ColumnGroup.prototype.isExpandable = function () {
12629 return this.originalColumnGroup.isExpandable();
12630 };
12631 ColumnGroup.prototype.isExpanded = function () {
12632 return this.originalColumnGroup.isExpanded();
12633 };
12634 ColumnGroup.prototype.setExpanded = function (expanded) {
12635 this.originalColumnGroup.setExpanded(expanded);
12636 };
12637 ColumnGroup.prototype.addDisplayedLeafColumns = function (leafColumns) {
12638 this.displayedChildren.forEach(function (child) {
12639 if (child instanceof column_1.Column) {
12640 leafColumns.push(child);
12641 }
12642 else if (child instanceof ColumnGroup) {
12643 child.addDisplayedLeafColumns(leafColumns);
12644 }
12645 });
12646 };
12647 ColumnGroup.prototype.addLeafColumns = function (leafColumns) {
12648 this.children.forEach(function (child) {
12649 if (child instanceof column_1.Column) {
12650 leafColumns.push(child);
12651 }
12652 else if (child instanceof ColumnGroup) {
12653 child.addLeafColumns(leafColumns);
12654 }
12655 });
12656 };
12657 ColumnGroup.prototype.getChildren = function () {
12658 return this.children;
12659 };
12660 ColumnGroup.prototype.getColumnGroupShow = function () {
12661 return this.originalColumnGroup.getColumnGroupShow();
12662 };
12663 ColumnGroup.prototype.getOriginalColumnGroup = function () {
12664 return this.originalColumnGroup;
12665 };
12666 ColumnGroup.prototype.calculateDisplayedColumns = function () {
12667 var _this = this;
12668 // clear out last time we calculated
12669 this.displayedChildren = [];
12670 // it not expandable, everything is visible
12671 if (!this.originalColumnGroup.isExpandable()) {
12672 this.displayedChildren = this.children;
12673 }
12674 else {
12675 // and calculate again
12676 this.children.forEach(function (abstractColumn) {
12677 var headerGroupShow = abstractColumn.getColumnGroupShow();
12678 switch (headerGroupShow) {
12679 case ColumnGroup.HEADER_GROUP_SHOW_OPEN:
12680 // when set to open, only show col if group is open
12681 if (_this.originalColumnGroup.isExpanded()) {
12682 _this.displayedChildren.push(abstractColumn);
12683 }
12684 break;
12685 case ColumnGroup.HEADER_GROUP_SHOW_CLOSED:
12686 // when set to open, only show col if group is open
12687 if (!_this.originalColumnGroup.isExpanded()) {
12688 _this.displayedChildren.push(abstractColumn);
12689 }
12690 break;
12691 default:
12692 // default is always show the column
12693 _this.displayedChildren.push(abstractColumn);
12694 break;
12695 }
12696 });
12697 }
12698 this.localEventService.dispatchEvent(this.createAgEvent(ColumnGroup.EVENT_DISPLAYED_CHILDREN_CHANGED));
12699 };
12700 ColumnGroup.HEADER_GROUP_SHOW_OPEN = 'open';
12701 ColumnGroup.HEADER_GROUP_SHOW_CLOSED = 'closed';
12702 ColumnGroup.EVENT_LEFT_CHANGED = 'leftChanged';
12703 ColumnGroup.EVENT_DISPLAYED_CHILDREN_CHANGED = 'displayedChildrenChanged';
12704 __decorate([
12705 context_1.Autowired('gridOptionsWrapper'),
12706 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
12707 ], ColumnGroup.prototype, "gridOptionsWrapper", void 0);
12708 __decorate([
12709 context_1.Autowired('columnApi'),
12710 __metadata("design:type", columnApi_1.ColumnApi)
12711 ], ColumnGroup.prototype, "columnApi", void 0);
12712 __decorate([
12713 context_1.Autowired('gridApi'),
12714 __metadata("design:type", gridApi_1.GridApi)
12715 ], ColumnGroup.prototype, "gridApi", void 0);
12716 return ColumnGroup;
12717}());
12718exports.ColumnGroup = ColumnGroup;
12719
12720
12721/***/ }),
12722/* 29 */
12723/***/ (function(module, exports, __webpack_require__) {
12724
12725"use strict";
12726/**
12727 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
12728 * @version v18.1.2
12729 * @link http://www.ag-grid.com/
12730 * @license MIT
12731 */
12732
12733var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
12734 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
12735 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
12736 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
12737 return c > 3 && r && Object.defineProperty(target, key, r), r;
12738};
12739var __metadata = (this && this.__metadata) || function (k, v) {
12740 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
12741};
12742Object.defineProperty(exports, "__esModule", { value: true });
12743var context_1 = __webpack_require__(0);
12744var gridOptionsWrapper_1 = __webpack_require__(2);
12745var utils_1 = __webpack_require__(1);
12746var componentProvider_1 = __webpack_require__(68);
12747var agComponentUtils_1 = __webpack_require__(78);
12748var componentMetadataProvider_1 = __webpack_require__(79);
12749var ComponentType;
12750(function (ComponentType) {
12751 ComponentType[ComponentType["AG_GRID"] = 0] = "AG_GRID";
12752 ComponentType[ComponentType["FRAMEWORK"] = 1] = "FRAMEWORK";
12753})(ComponentType = exports.ComponentType || (exports.ComponentType = {}));
12754var ComponentSource;
12755(function (ComponentSource) {
12756 ComponentSource[ComponentSource["DEFAULT"] = 0] = "DEFAULT";
12757 ComponentSource[ComponentSource["REGISTERED_BY_NAME"] = 1] = "REGISTERED_BY_NAME";
12758 ComponentSource[ComponentSource["HARDCODED"] = 2] = "HARDCODED";
12759})(ComponentSource = exports.ComponentSource || (exports.ComponentSource = {}));
12760var ComponentResolver = (function () {
12761 function ComponentResolver() {
12762 }
12763 /**
12764 * This method returns the underlying representation of the component to be created. ie for Javascript the
12765 * underlying function where we should be calling new into. In case of the frameworks, the framework class
12766 * object that represents the component to be created.
12767 *
12768 * This method is handy for different reasons, for example if you want to check if a component has a particular
12769 * method implemented without having to create the component, just by inspecting the source component
12770 *
12771 * It takes
12772 * @param holder: This is the context for which this component needs to be created, it can be gridOptions
12773 * (global) or columnDef mostly.
12774 * @param propertyName: The name of the property used in ag-grid as a convention to refer to the component, it can be:
12775 * 'floatingFilter', 'cellRenderer', is used to find if the user is specifying a custom component
12776 * @param dynamicComponentParams: Params to be passed to the dynamic component function in case it needs to be
12777 * invoked
12778 * @param defaultComponentName: The name of the component to load if there is no component specified
12779 */
12780 ComponentResolver.prototype.getComponentToUse = function (holder, propertyName, dynamicComponentParams, defaultComponentName) {
12781 /**
12782 * There are five things that can happen when resolving a component.
12783 * a) HardcodedFwComponent: That holder[propertyName]Framework has associated a Framework native component
12784 * b) HardcodedJsComponent: That holder[propertyName] has associate a JS component
12785 * c) hardcodedJsFunction: That holder[propertyName] has associate a JS function
12786 * d) hardcodedNameComponent: That holder[propertyName] has associate a string that represents a component to load
12787 * e) That none of the three previous are specified, then we need to use the DefaultRegisteredComponent
12788 */
12789 var hardcodedNameComponent = null;
12790 var HardcodedJsComponent = null;
12791 var hardcodedJsFunction = null;
12792 var HardcodedFwComponent = null;
12793 var dynamicComponentFn;
12794 if (holder != null) {
12795 var componentPropertyValue = holder[propertyName];
12796 if (componentPropertyValue != null) {
12797 if (typeof componentPropertyValue === 'string') {
12798 hardcodedNameComponent = componentPropertyValue;
12799 }
12800 else if (this.agComponentUtils.doesImplementIComponent(componentPropertyValue)) {
12801 HardcodedJsComponent = componentPropertyValue;
12802 }
12803 else {
12804 hardcodedJsFunction = componentPropertyValue;
12805 }
12806 }
12807 HardcodedFwComponent = holder[propertyName + "Framework"];
12808 dynamicComponentFn = holder[propertyName + "Selector"];
12809 }
12810 /**
12811 * Since we allow many types of flavors for specifying the components, let's make sure this is not an illegal
12812 * combination
12813 */
12814 if ((HardcodedJsComponent && HardcodedFwComponent) ||
12815 (hardcodedNameComponent && HardcodedFwComponent) ||
12816 (hardcodedJsFunction && HardcodedFwComponent)) {
12817 throw Error("ag-grid: you are trying to specify: " + propertyName + " twice as a component.");
12818 }
12819 if (HardcodedFwComponent && !this.frameworkComponentWrapper) {
12820 throw Error("ag-grid: you are specifying a framework component but you are not using a framework version of ag-grid for : " + propertyName);
12821 }
12822 if (dynamicComponentFn && (hardcodedNameComponent || HardcodedJsComponent || hardcodedJsFunction || HardcodedFwComponent)) {
12823 throw Error("ag-grid: you can't specify both, the selector and the component of ag-grid for : " + propertyName);
12824 }
12825 /**
12826 * At this stage we are guaranteed to either have,
12827 * DEPRECATED
12828 * - A unique HardcodedFwComponent
12829 * - A unique HardcodedJsComponent
12830 * - A unique hardcodedJsFunction
12831 * BY NAME- FAVOURED APPROACH
12832 * - A unique hardcodedNameComponent
12833 * - None of the previous, hence we revert to: RegisteredComponent
12834 */
12835 if (HardcodedFwComponent) {
12836 // console.warn(`ag-grid: Since version 12.1.0 specifying a component directly is deprecated, you should register the component by name`);
12837 // console.warn(`${HardcodedFwComponent}`);
12838 return {
12839 type: ComponentType.FRAMEWORK,
12840 component: HardcodedFwComponent,
12841 source: ComponentSource.HARDCODED,
12842 dynamicParams: null
12843 };
12844 }
12845 if (HardcodedJsComponent) {
12846 // console.warn(`ag-grid: Since version 12.1.0 specifying a component directly is deprecated, you should register the component by name`);
12847 // console.warn(`${HardcodedJsComponent}`);
12848 return {
12849 type: ComponentType.AG_GRID,
12850 component: HardcodedJsComponent,
12851 source: ComponentSource.HARDCODED,
12852 dynamicParams: null
12853 };
12854 }
12855 if (hardcodedJsFunction) {
12856 // console.warn(`ag-grid: Since version 12.1.0 specifying a function directly is deprecated, you should register the component by name`);
12857 // console.warn(`${hardcodedJsFunction}`);
12858 return this.agComponentUtils.adaptFunction(propertyName, hardcodedJsFunction, ComponentType.AG_GRID, ComponentSource.HARDCODED);
12859 }
12860 if (dynamicComponentFn) {
12861 var dynamicComponentDef = dynamicComponentFn(dynamicComponentParams);
12862 if (dynamicComponentDef != null) {
12863 if (dynamicComponentDef.component == null) {
12864 dynamicComponentDef.component = defaultComponentName;
12865 }
12866 var dynamicComponent = this.resolveByName(propertyName, dynamicComponentDef.component);
12867 return utils_1._.assign(dynamicComponent, {
12868 dynamicParams: dynamicComponentDef.params
12869 });
12870 }
12871 }
12872 //^^^^^ABOVE DEPRECATED - AT THIS POINT WE ARE RESOLVING BY NAME
12873 var componentNameToUse;
12874 if (hardcodedNameComponent) {
12875 componentNameToUse = hardcodedNameComponent;
12876 }
12877 else {
12878 componentNameToUse = defaultComponentName;
12879 }
12880 return componentNameToUse == null ? null : this.resolveByName(propertyName, componentNameToUse);
12881 };
12882 ComponentResolver.prototype.resolveByName = function (propertyName, componentNameOpt) {
12883 var componentName = componentNameOpt != null ? componentNameOpt : propertyName;
12884 var registeredComponent = this.componentProvider.retrieve(componentName);
12885 if (registeredComponent == null)
12886 return null;
12887 //If it is a FW it has to be registered as a component
12888 if (registeredComponent.type == ComponentType.FRAMEWORK) {
12889 return {
12890 component: registeredComponent.component,
12891 type: ComponentType.FRAMEWORK,
12892 source: ComponentSource.REGISTERED_BY_NAME,
12893 dynamicParams: null
12894 };
12895 }
12896 //If it is JS it may be a function or a component
12897 if (this.agComponentUtils.doesImplementIComponent(registeredComponent.component)) {
12898 return {
12899 component: registeredComponent.component,
12900 type: ComponentType.AG_GRID,
12901 source: (registeredComponent.source == componentProvider_1.RegisteredComponentSource.REGISTERED) ? ComponentSource.REGISTERED_BY_NAME : ComponentSource.DEFAULT,
12902 dynamicParams: null
12903 };
12904 }
12905 // This is a function
12906 return this.agComponentUtils.adaptFunction(propertyName, registeredComponent.component, registeredComponent.type, (registeredComponent.source == componentProvider_1.RegisteredComponentSource.REGISTERED) ? ComponentSource.REGISTERED_BY_NAME : ComponentSource.DEFAULT);
12907 };
12908 /**
12909 * Useful to check what would be the resultant params for a given object
12910 * @param holder: This is the context for which this component needs to be created, it can be gridOptions
12911 * (global) or columnDef mostly.
12912 * @param propertyName: The name of the property used in ag-grid as a convention to refer to the component, it can be:
12913 * 'floatingFilter', 'cellRenderer', is used to find if the user is specifying a custom component
12914 * @param agGridParams: Params to be passed to the component and passed by ag-Grid. This will get merged with any params
12915 * specified by the user in the configuration
12916 * @returns {any} It merges the user agGridParams with the actual params specified by the user.
12917 */
12918 ComponentResolver.prototype.mergeParams = function (holder, propertyName, agGridParams, dynamicCustomParams, dynamicParams) {
12919 if (dynamicParams === void 0) { dynamicParams = null; }
12920 var customParamsRaw = holder ? holder[propertyName + "Params"] : null;
12921 var finalParams = {};
12922 utils_1._.mergeDeep(finalParams, agGridParams);
12923 if (customParamsRaw != null) {
12924 var customParams = null;
12925 if (typeof customParamsRaw === 'function') {
12926 customParams = customParamsRaw(dynamicCustomParams);
12927 }
12928 else {
12929 customParams = customParamsRaw;
12930 }
12931 utils_1._.mergeDeep(finalParams, customParams);
12932 }
12933 utils_1._.mergeDeep(finalParams, dynamicParams);
12934 if (!finalParams.api) {
12935 finalParams.api = this.gridOptions.api;
12936 }
12937 return finalParams;
12938 };
12939 /**
12940 * This method creates a component given everything needed to guess what sort of component needs to be instantiated
12941 * It takes
12942 * @param holderOpt: This is the context for which this component needs to be created, it can be gridOptions
12943 * (global) or columnDef mostly.
12944 * @param agGridParams: Params to be passed to the component and passed by ag-Grid. This will get merged with any params
12945 * specified by the user in the configuration
12946 * @param propertyName: The name of the property used in ag-grid as a convention to refer to the component, it can be:
12947 * 'floatingFilter', 'cellRenderer', is used to find if the user is specifying a custom component
12948 * @param dynamicComponentParams: Params to be passed to the dynamic component function in case it needs to be
12949 * invoked
12950 * @param defaultComponentName: The actual name of the component to instantiate, this is usually the same as propertyName, but in
12951 * some cases is not, like floatingFilter, if it is the same is not necessary to specify
12952 * @param mandatory: Handy method to tell if this should return a component ALWAYS. if that is the case, but there is no
12953 * component found, it throws an error, by default all components are MANDATORY
12954 * @param customInitParamsCb: A chance to customise the params passed to the init method. It receives what the current
12955 * params are and the component that init is about to get called for
12956 */
12957 ComponentResolver.prototype.createAgGridComponent = function (holderOpt, agGridParams, propertyName, dynamicComponentParams, defaultComponentName, mandatory, customInitParamsCb) {
12958 if (mandatory === void 0) { mandatory = true; }
12959 var holder = holderOpt == null ? this.gridOptions : holderOpt;
12960 //Create the component instance
12961 var componentAndParams = this.newAgGridComponent(holder, propertyName, dynamicComponentParams, defaultComponentName, mandatory);
12962 if (!componentAndParams)
12963 return null;
12964 // Wire the component and call the init method with the correct params
12965 var finalParams = this.mergeParams(holder, propertyName, agGridParams, dynamicComponentParams, componentAndParams[1]);
12966 // a temporary fix for AG-1574
12967 // AG-1715 raised to do a wider ranging refactor to improve this
12968 finalParams.agGridReact = this.context.getBean('agGridReact') ? utils_1._.cloneObject(this.context.getBean('agGridReact')) : {};
12969 // AG-1716 - directly related to AG-1574 and AG-1715
12970 finalParams.frameworkComponentWrapper = this.context.getBean('frameworkComponentWrapper') ? this.context.getBean('frameworkComponentWrapper') : {};
12971 var deferredInit = this.initialiseComponent(componentAndParams[0], finalParams, customInitParamsCb);
12972 if (deferredInit == null) {
12973 return utils_1.Promise.resolve(componentAndParams[0]);
12974 }
12975 else {
12976 var asPromise = deferredInit;
12977 return asPromise.map(function (notRelevant) { return componentAndParams[0]; });
12978 }
12979 };
12980 /**
12981 * This method creates a component given everything needed to guess what sort of component needs to be instantiated
12982 * It takes
12983 * @param clazz: The class to instantiate,
12984 * @param agGridParams: Params to be passed to the component and passed by ag-Grid. This will get merged with any params
12985 * specified by the user in the configuration
12986 * @param customInitParamsCb: A chance to customise the params passed to the init method. It receives what the current
12987 * params are and the component that init is about to get called for
12988 */
12989 ComponentResolver.prototype.createInternalAgGridComponent = function (clazz, agGridParams, customInitParamsCb) {
12990 var internalComponent = new clazz();
12991 this.initialiseComponent(internalComponent, agGridParams, customInitParamsCb);
12992 return internalComponent;
12993 };
12994 ComponentResolver.prototype.newAgGridComponent = function (holder, propertyName, dynamicComponentParams, defaultComponentName, mandatory) {
12995 if (mandatory === void 0) { mandatory = true; }
12996 var componentToUse = this.getComponentToUse(holder, propertyName, dynamicComponentParams, defaultComponentName);
12997 if (!componentToUse || !componentToUse.component) {
12998 if (mandatory) {
12999 console.error("Error creating component " + propertyName + "=>" + defaultComponentName);
13000 }
13001 return null;
13002 }
13003 if (componentToUse.type === ComponentType.AG_GRID) {
13004 return [
13005 new componentToUse.component(),
13006 componentToUse.dynamicParams
13007 ];
13008 }
13009 //Using framework component
13010 var FrameworkComponentRaw = componentToUse.component;
13011 var thisComponentConfig = this.componentMetadataProvider.retrieve(propertyName);
13012 return [
13013 this.frameworkComponentWrapper.wrap(FrameworkComponentRaw, thisComponentConfig.mandatoryMethodList, thisComponentConfig.optionalMethodList, defaultComponentName),
13014 componentToUse.dynamicParams
13015 ];
13016 };
13017 ComponentResolver.prototype.initialiseComponent = function (component, agGridParams, customInitParamsCb) {
13018 this.context.wireBean(component);
13019 if (customInitParamsCb == null) {
13020 return component.init(agGridParams);
13021 }
13022 else {
13023 return component.init(customInitParamsCb(agGridParams, component));
13024 }
13025 };
13026 __decorate([
13027 context_1.Autowired("gridOptions"),
13028 __metadata("design:type", Object)
13029 ], ComponentResolver.prototype, "gridOptions", void 0);
13030 __decorate([
13031 context_1.Autowired("gridOptionsWrapper"),
13032 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
13033 ], ComponentResolver.prototype, "gridOptionsWrapper", void 0);
13034 __decorate([
13035 context_1.Autowired("context"),
13036 __metadata("design:type", context_1.Context)
13037 ], ComponentResolver.prototype, "context", void 0);
13038 __decorate([
13039 context_1.Autowired("agComponentUtils"),
13040 __metadata("design:type", agComponentUtils_1.AgComponentUtils)
13041 ], ComponentResolver.prototype, "agComponentUtils", void 0);
13042 __decorate([
13043 context_1.Autowired("componentMetadataProvider"),
13044 __metadata("design:type", componentMetadataProvider_1.ComponentMetadataProvider)
13045 ], ComponentResolver.prototype, "componentMetadataProvider", void 0);
13046 __decorate([
13047 context_1.Autowired("componentProvider"),
13048 __metadata("design:type", componentProvider_1.ComponentProvider)
13049 ], ComponentResolver.prototype, "componentProvider", void 0);
13050 __decorate([
13051 context_1.Optional("frameworkComponentWrapper"),
13052 __metadata("design:type", Object)
13053 ], ComponentResolver.prototype, "frameworkComponentWrapper", void 0);
13054 ComponentResolver = __decorate([
13055 context_1.Bean('componentResolver')
13056 ], ComponentResolver);
13057 return ComponentResolver;
13058}());
13059exports.ComponentResolver = ComponentResolver;
13060
13061
13062/***/ }),
13063/* 30 */
13064/***/ (function(module, exports, __webpack_require__) {
13065
13066"use strict";
13067/**
13068 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
13069 * @version v18.1.2
13070 * @link http://www.ag-grid.com/
13071 * @license MIT
13072 */
13073
13074var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
13075 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
13076 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
13077 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
13078 return c > 3 && r && Object.defineProperty(target, key, r), r;
13079};
13080var __metadata = (this && this.__metadata) || function (k, v) {
13081 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
13082};
13083Object.defineProperty(exports, "__esModule", { value: true });
13084var context_1 = __webpack_require__(0);
13085var columnApi_1 = __webpack_require__(7);
13086var columnController_1 = __webpack_require__(4);
13087var gridApi_1 = __webpack_require__(6);
13088var gridOptionsWrapper_1 = __webpack_require__(2);
13089var expressionService_1 = __webpack_require__(21);
13090var rowRenderer_1 = __webpack_require__(22);
13091var templateService_1 = __webpack_require__(51);
13092var valueService_1 = __webpack_require__(17);
13093var eventService_1 = __webpack_require__(3);
13094var columnAnimationService_1 = __webpack_require__(55);
13095var focusedCellController_1 = __webpack_require__(24);
13096var cellEditorFactory_1 = __webpack_require__(56);
13097var cellRendererFactory_1 = __webpack_require__(57);
13098var popupService_1 = __webpack_require__(37);
13099var cellRendererService_1 = __webpack_require__(58);
13100var valueFormatterService_1 = __webpack_require__(45);
13101var stylingService_1 = __webpack_require__(75);
13102var columnHoverService_1 = __webpack_require__(47);
13103var paginationProxy_1 = __webpack_require__(31);
13104var animationFrameService_1 = __webpack_require__(39);
13105var componentResolver_1 = __webpack_require__(29);
13106var dragAndDropService_1 = __webpack_require__(16);
13107var sortController_1 = __webpack_require__(26);
13108var filterManager_1 = __webpack_require__(20);
13109var heightScaler_1 = __webpack_require__(59);
13110/** Using the IoC has a slight performance consideration, which is no problem most of the
13111 * time, unless we are trashing objects - which is the case when scrolling and rowComp
13112 * and cellComp. So for performance reasons, RowComp and CellComp do not get autowired
13113 * with the IoC. Instead they get passed this object which is all the beans the RowComp
13114 * and CellComp need. Not autowiring all the cells gives performance improvement. */
13115var Beans = (function () {
13116 function Beans() {
13117 }
13118 Beans.prototype.registerGridComp = function (gridPanel) {
13119 this.gridPanel = gridPanel;
13120 };
13121 Beans.prototype.postConstruct = function () {
13122 this.doingMasterDetail = this.gridOptionsWrapper.isMasterDetail();
13123 };
13124 __decorate([
13125 context_1.Autowired('paginationProxy'),
13126 __metadata("design:type", paginationProxy_1.PaginationProxy)
13127 ], Beans.prototype, "paginationProxy", void 0);
13128 __decorate([
13129 context_1.Autowired('context'),
13130 __metadata("design:type", context_1.Context)
13131 ], Beans.prototype, "context", void 0);
13132 __decorate([
13133 context_1.Autowired('columnApi'),
13134 __metadata("design:type", columnApi_1.ColumnApi)
13135 ], Beans.prototype, "columnApi", void 0);
13136 __decorate([
13137 context_1.Autowired('gridApi'),
13138 __metadata("design:type", gridApi_1.GridApi)
13139 ], Beans.prototype, "gridApi", void 0);
13140 __decorate([
13141 context_1.Autowired('gridOptionsWrapper'),
13142 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
13143 ], Beans.prototype, "gridOptionsWrapper", void 0);
13144 __decorate([
13145 context_1.Autowired('expressionService'),
13146 __metadata("design:type", expressionService_1.ExpressionService)
13147 ], Beans.prototype, "expressionService", void 0);
13148 __decorate([
13149 context_1.Autowired('rowRenderer'),
13150 __metadata("design:type", rowRenderer_1.RowRenderer)
13151 ], Beans.prototype, "rowRenderer", void 0);
13152 __decorate([
13153 context_1.Autowired('$compile'),
13154 __metadata("design:type", Object)
13155 ], Beans.prototype, "$compile", void 0);
13156 __decorate([
13157 context_1.Autowired('templateService'),
13158 __metadata("design:type", templateService_1.TemplateService)
13159 ], Beans.prototype, "templateService", void 0);
13160 __decorate([
13161 context_1.Autowired('valueService'),
13162 __metadata("design:type", valueService_1.ValueService)
13163 ], Beans.prototype, "valueService", void 0);
13164 __decorate([
13165 context_1.Autowired('eventService'),
13166 __metadata("design:type", eventService_1.EventService)
13167 ], Beans.prototype, "eventService", void 0);
13168 __decorate([
13169 context_1.Autowired('columnController'),
13170 __metadata("design:type", columnController_1.ColumnController)
13171 ], Beans.prototype, "columnController", void 0);
13172 __decorate([
13173 context_1.Autowired('columnAnimationService'),
13174 __metadata("design:type", columnAnimationService_1.ColumnAnimationService)
13175 ], Beans.prototype, "columnAnimationService", void 0);
13176 __decorate([
13177 context_1.Optional('rangeController'),
13178 __metadata("design:type", Object)
13179 ], Beans.prototype, "rangeController", void 0);
13180 __decorate([
13181 context_1.Autowired('focusedCellController'),
13182 __metadata("design:type", focusedCellController_1.FocusedCellController)
13183 ], Beans.prototype, "focusedCellController", void 0);
13184 __decorate([
13185 context_1.Optional('contextMenuFactory'),
13186 __metadata("design:type", Object)
13187 ], Beans.prototype, "contextMenuFactory", void 0);
13188 __decorate([
13189 context_1.Autowired('cellEditorFactory'),
13190 __metadata("design:type", cellEditorFactory_1.CellEditorFactory)
13191 ], Beans.prototype, "cellEditorFactory", void 0);
13192 __decorate([
13193 context_1.Autowired('cellRendererFactory'),
13194 __metadata("design:type", cellRendererFactory_1.CellRendererFactory)
13195 ], Beans.prototype, "cellRendererFactory", void 0);
13196 __decorate([
13197 context_1.Autowired('popupService'),
13198 __metadata("design:type", popupService_1.PopupService)
13199 ], Beans.prototype, "popupService", void 0);
13200 __decorate([
13201 context_1.Autowired('cellRendererService'),
13202 __metadata("design:type", cellRendererService_1.CellRendererService)
13203 ], Beans.prototype, "cellRendererService", void 0);
13204 __decorate([
13205 context_1.Autowired('valueFormatterService'),
13206 __metadata("design:type", valueFormatterService_1.ValueFormatterService)
13207 ], Beans.prototype, "valueFormatterService", void 0);
13208 __decorate([
13209 context_1.Autowired('stylingService'),
13210 __metadata("design:type", stylingService_1.StylingService)
13211 ], Beans.prototype, "stylingService", void 0);
13212 __decorate([
13213 context_1.Autowired('columnHoverService'),
13214 __metadata("design:type", columnHoverService_1.ColumnHoverService)
13215 ], Beans.prototype, "columnHoverService", void 0);
13216 __decorate([
13217 context_1.Autowired('enterprise'),
13218 __metadata("design:type", Boolean)
13219 ], Beans.prototype, "enterprise", void 0);
13220 __decorate([
13221 context_1.Autowired('componentResolver'),
13222 __metadata("design:type", componentResolver_1.ComponentResolver)
13223 ], Beans.prototype, "componentResolver", void 0);
13224 __decorate([
13225 context_1.Autowired('animationFrameService'),
13226 __metadata("design:type", animationFrameService_1.AnimationFrameService)
13227 ], Beans.prototype, "taskQueue", void 0);
13228 __decorate([
13229 context_1.Autowired('dragAndDropService'),
13230 __metadata("design:type", dragAndDropService_1.DragAndDropService)
13231 ], Beans.prototype, "dragAndDropService", void 0);
13232 __decorate([
13233 context_1.Autowired('sortController'),
13234 __metadata("design:type", sortController_1.SortController)
13235 ], Beans.prototype, "sortController", void 0);
13236 __decorate([
13237 context_1.Autowired('filterManager'),
13238 __metadata("design:type", filterManager_1.FilterManager)
13239 ], Beans.prototype, "filterManager", void 0);
13240 __decorate([
13241 context_1.Autowired('heightScaler'),
13242 __metadata("design:type", heightScaler_1.HeightScaler)
13243 ], Beans.prototype, "heightScaler", void 0);
13244 __decorate([
13245 context_1.PostConstruct,
13246 __metadata("design:type", Function),
13247 __metadata("design:paramtypes", []),
13248 __metadata("design:returntype", void 0)
13249 ], Beans.prototype, "postConstruct", null);
13250 Beans = __decorate([
13251 context_1.Bean('beans')
13252 ], Beans);
13253 return Beans;
13254}());
13255exports.Beans = Beans;
13256
13257
13258/***/ }),
13259/* 31 */
13260/***/ (function(module, exports, __webpack_require__) {
13261
13262"use strict";
13263/**
13264 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
13265 * @version v18.1.2
13266 * @link http://www.ag-grid.com/
13267 * @license MIT
13268 */
13269
13270var __extends = (this && this.__extends) || (function () {
13271 var extendStatics = Object.setPrototypeOf ||
13272 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
13273 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
13274 return function (d, b) {
13275 extendStatics(d, b);
13276 function __() { this.constructor = d; }
13277 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
13278 };
13279})();
13280var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
13281 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
13282 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
13283 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
13284 return c > 3 && r && Object.defineProperty(target, key, r), r;
13285};
13286var __metadata = (this && this.__metadata) || function (k, v) {
13287 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
13288};
13289Object.defineProperty(exports, "__esModule", { value: true });
13290var beanStub_1 = __webpack_require__(13);
13291var eventService_1 = __webpack_require__(3);
13292var events_1 = __webpack_require__(5);
13293var utils_1 = __webpack_require__(1);
13294var context_1 = __webpack_require__(0);
13295var gridOptionsWrapper_1 = __webpack_require__(2);
13296var scrollVisibleService_1 = __webpack_require__(38);
13297var selectionController_1 = __webpack_require__(19);
13298var columnApi_1 = __webpack_require__(7);
13299var gridApi_1 = __webpack_require__(6);
13300var PaginationAutoPageSizeService = (function (_super) {
13301 __extends(PaginationAutoPageSizeService, _super);
13302 function PaginationAutoPageSizeService() {
13303 return _super !== null && _super.apply(this, arguments) || this;
13304 }
13305 PaginationAutoPageSizeService.prototype.registerGridComp = function (gridPanel) {
13306 this.gridPanel = gridPanel;
13307 this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_BODY_HEIGHT_CHANGED, this.onBodyHeightChanged.bind(this));
13308 this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_SCROLL_VISIBILITY_CHANGED, this.onScrollVisibilityChanged.bind(this));
13309 this.checkPageSize();
13310 };
13311 PaginationAutoPageSizeService.prototype.notActive = function () {
13312 return !this.gridOptionsWrapper.isPaginationAutoPageSize();
13313 };
13314 PaginationAutoPageSizeService.prototype.onScrollVisibilityChanged = function () {
13315 this.checkPageSize();
13316 };
13317 PaginationAutoPageSizeService.prototype.onBodyHeightChanged = function () {
13318 this.checkPageSize();
13319 };
13320 PaginationAutoPageSizeService.prototype.checkPageSize = function () {
13321 if (this.notActive()) {
13322 return;
13323 }
13324 var rowHeight = this.gridOptionsWrapper.getRowHeightAsNumber();
13325 var bodyHeight = this.gridPanel.getBodyHeight();
13326 if (this.scrollVisibleService.isBodyHorizontalScrollShowing()) {
13327 bodyHeight = bodyHeight - this.gridOptionsWrapper.getScrollbarWidth();
13328 }
13329 if (bodyHeight > 0) {
13330 var newPageSize = Math.floor(bodyHeight / rowHeight);
13331 this.gridOptionsWrapper.setProperty('paginationPageSize', newPageSize);
13332 }
13333 };
13334 __decorate([
13335 context_1.Autowired('eventService'),
13336 __metadata("design:type", eventService_1.EventService)
13337 ], PaginationAutoPageSizeService.prototype, "eventService", void 0);
13338 __decorate([
13339 context_1.Autowired('gridOptionsWrapper'),
13340 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
13341 ], PaginationAutoPageSizeService.prototype, "gridOptionsWrapper", void 0);
13342 __decorate([
13343 context_1.Autowired('scrollVisibleService'),
13344 __metadata("design:type", scrollVisibleService_1.ScrollVisibleService)
13345 ], PaginationAutoPageSizeService.prototype, "scrollVisibleService", void 0);
13346 PaginationAutoPageSizeService = __decorate([
13347 context_1.Bean('paginationAutoPageSizeService')
13348 ], PaginationAutoPageSizeService);
13349 return PaginationAutoPageSizeService;
13350}(beanStub_1.BeanStub));
13351exports.PaginationAutoPageSizeService = PaginationAutoPageSizeService;
13352var PaginationProxy = (function (_super) {
13353 __extends(PaginationProxy, _super);
13354 function PaginationProxy() {
13355 var _this = _super !== null && _super.apply(this, arguments) || this;
13356 _this.currentPage = 0;
13357 _this.topRowIndex = 0;
13358 _this.bottomRowIndex = 0;
13359 _this.pixelOffset = 0;
13360 return _this;
13361 }
13362 PaginationProxy.prototype.postConstruct = function () {
13363 this.active = this.gridOptionsWrapper.isPagination();
13364 this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_MODEL_UPDATED, this.onModelUpdated.bind(this));
13365 this.addDestroyableEventListener(this.gridOptionsWrapper, 'paginationPageSize', this.onModelUpdated.bind(this));
13366 this.onModelUpdated();
13367 };
13368 PaginationProxy.prototype.isLastRowFound = function () {
13369 return this.rowModel.isLastRowFound();
13370 };
13371 PaginationProxy.prototype.onModelUpdated = function (modelUpdatedEvent) {
13372 this.setIndexesAndBounds();
13373 var paginationChangedEvent = {
13374 type: events_1.Events.EVENT_PAGINATION_CHANGED,
13375 animate: modelUpdatedEvent ? modelUpdatedEvent.animate : false,
13376 newData: modelUpdatedEvent ? modelUpdatedEvent.newData : false,
13377 newPage: modelUpdatedEvent ? modelUpdatedEvent.newPage : false,
13378 keepRenderedRows: modelUpdatedEvent ? modelUpdatedEvent.keepRenderedRows : false,
13379 api: this.gridApi,
13380 columnApi: this.columnApi
13381 };
13382 this.eventService.dispatchEvent(paginationChangedEvent);
13383 };
13384 PaginationProxy.prototype.goToPage = function (page) {
13385 if (!this.active) {
13386 return;
13387 }
13388 if (this.currentPage === page) {
13389 return;
13390 }
13391 this.currentPage = page;
13392 var event = {
13393 type: events_1.Events.EVENT_MODEL_UPDATED,
13394 animate: false,
13395 keepRenderedRows: false,
13396 newData: false,
13397 newPage: true,
13398 api: this.gridApi,
13399 columnApi: this.columnApi
13400 };
13401 this.onModelUpdated(event);
13402 };
13403 PaginationProxy.prototype.getPixelOffset = function () {
13404 return this.pixelOffset;
13405 };
13406 PaginationProxy.prototype.getRow = function (index) {
13407 return this.rowModel.getRow(index);
13408 };
13409 PaginationProxy.prototype.getRowNode = function (id) {
13410 return this.rowModel.getRowNode(id);
13411 };
13412 PaginationProxy.prototype.getRowIndexAtPixel = function (pixel) {
13413 return this.rowModel.getRowIndexAtPixel(pixel);
13414 };
13415 PaginationProxy.prototype.getCurrentPageHeight = function () {
13416 if (utils_1._.missing(this.topRowBounds) || utils_1._.missing(this.bottomRowBounds)) {
13417 return 0;
13418 }
13419 return this.bottomRowBounds.rowTop + this.bottomRowBounds.rowHeight - this.topRowBounds.rowTop;
13420 };
13421 PaginationProxy.prototype.isRowPresent = function (rowNode) {
13422 if (!this.rowModel.isRowPresent(rowNode)) {
13423 return false;
13424 }
13425 var nodeIsInPage = rowNode.rowIndex >= this.topRowIndex && rowNode.rowIndex <= this.bottomRowIndex;
13426 return nodeIsInPage;
13427 };
13428 PaginationProxy.prototype.isEmpty = function () {
13429 return this.rowModel.isEmpty();
13430 };
13431 PaginationProxy.prototype.isRowsToRender = function () {
13432 return this.rowModel.isRowsToRender();
13433 };
13434 PaginationProxy.prototype.getNodesInRangeForSelection = function (firstInRange, lastInRange) {
13435 return this.rowModel.getNodesInRangeForSelection(firstInRange, lastInRange);
13436 };
13437 PaginationProxy.prototype.forEachNode = function (callback) {
13438 return this.rowModel.forEachNode(callback);
13439 };
13440 PaginationProxy.prototype.getType = function () {
13441 return this.rowModel.getType();
13442 };
13443 PaginationProxy.prototype.getRowBounds = function (index) {
13444 return this.rowModel.getRowBounds(index);
13445 };
13446 PaginationProxy.prototype.getPageFirstRow = function () {
13447 return this.pageSize * this.currentPage;
13448 };
13449 PaginationProxy.prototype.getPageLastRow = function () {
13450 var totalLastRow = (this.pageSize * (this.currentPage + 1)) - 1;
13451 var pageLastRow = this.rowModel.getPageLastRow();
13452 if (pageLastRow > totalLastRow) {
13453 return totalLastRow;
13454 }
13455 else {
13456 return pageLastRow;
13457 }
13458 };
13459 PaginationProxy.prototype.getRowCount = function () {
13460 return this.rowModel.getRowCount();
13461 };
13462 PaginationProxy.prototype.goToPageWithIndex = function (index) {
13463 if (!this.active) {
13464 return;
13465 }
13466 var pageNumber = Math.floor(index / this.pageSize);
13467 this.goToPage(pageNumber);
13468 };
13469 PaginationProxy.prototype.getTotalRowCount = function () {
13470 return this.rowModel.getPageLastRow() + 1;
13471 };
13472 PaginationProxy.prototype.isLastPageFound = function () {
13473 return this.rowModel.isLastRowFound();
13474 };
13475 PaginationProxy.prototype.getCurrentPage = function () {
13476 return this.currentPage;
13477 };
13478 PaginationProxy.prototype.goToNextPage = function () {
13479 this.goToPage(this.currentPage + 1);
13480 };
13481 PaginationProxy.prototype.goToPreviousPage = function () {
13482 this.goToPage(this.currentPage - 1);
13483 };
13484 PaginationProxy.prototype.goToFirstPage = function () {
13485 this.goToPage(0);
13486 };
13487 PaginationProxy.prototype.goToLastPage = function () {
13488 var rowCount = this.rowModel.getPageLastRow() + 1;
13489 var lastPage = Math.floor(rowCount / this.pageSize);
13490 this.goToPage(lastPage);
13491 };
13492 PaginationProxy.prototype.getPageSize = function () {
13493 return this.pageSize;
13494 };
13495 PaginationProxy.prototype.getTotalPages = function () {
13496 return this.totalPages;
13497 };
13498 PaginationProxy.prototype.setPageSize = function () {
13499 // show put this into super class
13500 this.pageSize = this.gridOptionsWrapper.getPaginationPageSize();
13501 if (!(this.pageSize >= 1)) {
13502 this.pageSize = 100;
13503 }
13504 };
13505 PaginationProxy.prototype.setIndexesAndBounds = function () {
13506 if (this.active) {
13507 this.setPageSize();
13508 var totalRowCount = this.getTotalRowCount();
13509 this.totalPages = Math.floor((totalRowCount - 1) / this.pageSize) + 1;
13510 if (this.currentPage >= this.totalPages) {
13511 this.currentPage = this.totalPages - 1;
13512 }
13513 if (!utils_1._.isNumeric(this.currentPage) || this.currentPage < 0) {
13514 this.currentPage = 0;
13515 }
13516 this.topRowIndex = this.pageSize * this.currentPage;
13517 this.bottomRowIndex = (this.pageSize * (this.currentPage + 1)) - 1;
13518 var maxRowAllowed = this.rowModel.getPageLastRow();
13519 if (this.bottomRowIndex > maxRowAllowed) {
13520 this.bottomRowIndex = maxRowAllowed;
13521 }
13522 }
13523 else {
13524 this.pageSize = this.rowModel.getPageLastRow() + 1;
13525 this.totalPages = 1;
13526 this.currentPage = 0;
13527 this.topRowIndex = 0;
13528 this.bottomRowIndex = this.rowModel.getPageLastRow();
13529 }
13530 this.topRowBounds = this.rowModel.getRowBounds(this.topRowIndex);
13531 this.bottomRowBounds = this.rowModel.getRowBounds(this.bottomRowIndex);
13532 this.pixelOffset = utils_1._.exists(this.topRowBounds) ? this.topRowBounds.rowTop : 0;
13533 };
13534 __decorate([
13535 context_1.Autowired('rowModel'),
13536 __metadata("design:type", Object)
13537 ], PaginationProxy.prototype, "rowModel", void 0);
13538 __decorate([
13539 context_1.Autowired('eventService'),
13540 __metadata("design:type", eventService_1.EventService)
13541 ], PaginationProxy.prototype, "eventService", void 0);
13542 __decorate([
13543 context_1.Autowired('gridOptionsWrapper'),
13544 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
13545 ], PaginationProxy.prototype, "gridOptionsWrapper", void 0);
13546 __decorate([
13547 context_1.Autowired('selectionController'),
13548 __metadata("design:type", selectionController_1.SelectionController)
13549 ], PaginationProxy.prototype, "selectionController", void 0);
13550 __decorate([
13551 context_1.Autowired('columnApi'),
13552 __metadata("design:type", columnApi_1.ColumnApi)
13553 ], PaginationProxy.prototype, "columnApi", void 0);
13554 __decorate([
13555 context_1.Autowired('gridApi'),
13556 __metadata("design:type", gridApi_1.GridApi)
13557 ], PaginationProxy.prototype, "gridApi", void 0);
13558 __decorate([
13559 context_1.PostConstruct,
13560 __metadata("design:type", Function),
13561 __metadata("design:paramtypes", []),
13562 __metadata("design:returntype", void 0)
13563 ], PaginationProxy.prototype, "postConstruct", null);
13564 PaginationProxy = __decorate([
13565 context_1.Bean('paginationProxy')
13566 ], PaginationProxy);
13567 return PaginationProxy;
13568}(beanStub_1.BeanStub));
13569exports.PaginationProxy = PaginationProxy;
13570
13571
13572/***/ }),
13573/* 32 */
13574/***/ (function(module, exports, __webpack_require__) {
13575
13576"use strict";
13577/**
13578 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
13579 * @version v18.1.2
13580 * @link http://www.ag-grid.com/
13581 * @license MIT
13582 */
13583
13584var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
13585 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
13586 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
13587 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
13588 return c > 3 && r && Object.defineProperty(target, key, r), r;
13589};
13590var __metadata = (this && this.__metadata) || function (k, v) {
13591 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
13592};
13593Object.defineProperty(exports, "__esModule", { value: true });
13594var gridOptionsWrapper_1 = __webpack_require__(2);
13595var rowNode_1 = __webpack_require__(18);
13596var context_1 = __webpack_require__(0);
13597var eventService_1 = __webpack_require__(3);
13598var context_2 = __webpack_require__(0);
13599var events_1 = __webpack_require__(5);
13600var context_3 = __webpack_require__(0);
13601var constants_1 = __webpack_require__(9);
13602var utils_1 = __webpack_require__(1);
13603var columnApi_1 = __webpack_require__(7);
13604var gridApi_1 = __webpack_require__(6);
13605var PinnedRowModel = (function () {
13606 function PinnedRowModel() {
13607 }
13608 PinnedRowModel.prototype.init = function () {
13609 this.setPinnedTopRowData(this.gridOptionsWrapper.getPinnedTopRowData());
13610 this.setPinnedBottomRowData(this.gridOptionsWrapper.getPinnedBottomRowData());
13611 };
13612 PinnedRowModel.prototype.isEmpty = function (floating) {
13613 var rows = floating === constants_1.Constants.PINNED_TOP ? this.pinnedTopRows : this.pinnedBottomRows;
13614 return utils_1.Utils.missingOrEmpty(rows);
13615 };
13616 PinnedRowModel.prototype.isRowsToRender = function (floating) {
13617 return !this.isEmpty(floating);
13618 };
13619 PinnedRowModel.prototype.getRowAtPixel = function (pixel, floating) {
13620 var rows = floating === constants_1.Constants.PINNED_TOP ? this.pinnedTopRows : this.pinnedBottomRows;
13621 if (utils_1.Utils.missingOrEmpty(rows)) {
13622 return 0; // this should never happen, just in case, 0 is graceful failure
13623 }
13624 for (var i = 0; i < rows.length; i++) {
13625 var rowNode = rows[i];
13626 var rowTopPixel = rowNode.rowTop + rowNode.rowHeight - 1;
13627 // only need to range check against the top pixel, as we are going through the list
13628 // in order, first row to hit the pixel wins
13629 if (rowTopPixel >= pixel) {
13630 return i;
13631 }
13632 }
13633 return rows.length - 1;
13634 };
13635 PinnedRowModel.prototype.setPinnedTopRowData = function (rowData) {
13636 this.pinnedTopRows = this.createNodesFromData(rowData, true);
13637 var event = {
13638 type: events_1.Events.EVENT_PINNED_ROW_DATA_CHANGED,
13639 api: this.gridApi,
13640 columnApi: this.columnApi
13641 };
13642 this.eventService.dispatchEvent(event);
13643 };
13644 PinnedRowModel.prototype.setPinnedBottomRowData = function (rowData) {
13645 this.pinnedBottomRows = this.createNodesFromData(rowData, false);
13646 var event = {
13647 type: events_1.Events.EVENT_PINNED_ROW_DATA_CHANGED,
13648 api: this.gridApi,
13649 columnApi: this.columnApi
13650 };
13651 this.eventService.dispatchEvent(event);
13652 };
13653 PinnedRowModel.prototype.createNodesFromData = function (allData, isTop) {
13654 var _this = this;
13655 var rowNodes = [];
13656 if (allData) {
13657 var nextRowTop_1 = 0;
13658 allData.forEach(function (dataItem, index) {
13659 var rowNode = new rowNode_1.RowNode();
13660 _this.context.wireBean(rowNode);
13661 rowNode.data = dataItem;
13662 rowNode.rowPinned = isTop ? constants_1.Constants.PINNED_TOP : constants_1.Constants.PINNED_BOTTOM;
13663 rowNode.setRowTop(nextRowTop_1);
13664 rowNode.setRowHeight(_this.gridOptionsWrapper.getRowHeightForNode(rowNode));
13665 rowNode.setRowIndex(index);
13666 nextRowTop_1 += rowNode.rowHeight;
13667 rowNodes.push(rowNode);
13668 });
13669 }
13670 return rowNodes;
13671 };
13672 PinnedRowModel.prototype.getPinnedTopRowData = function () {
13673 return this.pinnedTopRows;
13674 };
13675 PinnedRowModel.prototype.getPinnedBottomRowData = function () {
13676 return this.pinnedBottomRows;
13677 };
13678 PinnedRowModel.prototype.getPinnedTopTotalHeight = function () {
13679 return this.getTotalHeight(this.pinnedTopRows);
13680 };
13681 PinnedRowModel.prototype.getPinnedTopRowCount = function () {
13682 return this.pinnedTopRows ? this.pinnedTopRows.length : 0;
13683 };
13684 PinnedRowModel.prototype.getPinnedBottomRowCount = function () {
13685 return this.pinnedBottomRows ? this.pinnedBottomRows.length : 0;
13686 };
13687 PinnedRowModel.prototype.getPinnedTopRow = function (index) {
13688 return this.pinnedTopRows[index];
13689 };
13690 PinnedRowModel.prototype.getPinnedBottomRow = function (index) {
13691 return this.pinnedBottomRows[index];
13692 };
13693 PinnedRowModel.prototype.forEachPinnedTopRow = function (callback) {
13694 if (utils_1.Utils.missingOrEmpty(this.pinnedTopRows)) {
13695 return;
13696 }
13697 this.pinnedTopRows.forEach(callback);
13698 };
13699 PinnedRowModel.prototype.forEachPinnedBottomRow = function (callback) {
13700 if (utils_1.Utils.missingOrEmpty(this.pinnedBottomRows)) {
13701 return;
13702 }
13703 this.pinnedBottomRows.forEach(callback);
13704 };
13705 PinnedRowModel.prototype.getPinnedBottomTotalHeight = function () {
13706 return this.getTotalHeight(this.pinnedBottomRows);
13707 };
13708 PinnedRowModel.prototype.getTotalHeight = function (rowNodes) {
13709 if (!rowNodes || rowNodes.length === 0) {
13710 return 0;
13711 }
13712 else {
13713 var lastNode = rowNodes[rowNodes.length - 1];
13714 return lastNode.rowTop + lastNode.rowHeight;
13715 }
13716 };
13717 __decorate([
13718 context_2.Autowired('gridOptionsWrapper'),
13719 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
13720 ], PinnedRowModel.prototype, "gridOptionsWrapper", void 0);
13721 __decorate([
13722 context_2.Autowired('eventService'),
13723 __metadata("design:type", eventService_1.EventService)
13724 ], PinnedRowModel.prototype, "eventService", void 0);
13725 __decorate([
13726 context_2.Autowired('context'),
13727 __metadata("design:type", context_1.Context)
13728 ], PinnedRowModel.prototype, "context", void 0);
13729 __decorate([
13730 context_2.Autowired('columnApi'),
13731 __metadata("design:type", columnApi_1.ColumnApi)
13732 ], PinnedRowModel.prototype, "columnApi", void 0);
13733 __decorate([
13734 context_2.Autowired('gridApi'),
13735 __metadata("design:type", gridApi_1.GridApi)
13736 ], PinnedRowModel.prototype, "gridApi", void 0);
13737 __decorate([
13738 context_3.PostConstruct,
13739 __metadata("design:type", Function),
13740 __metadata("design:paramtypes", []),
13741 __metadata("design:returntype", void 0)
13742 ], PinnedRowModel.prototype, "init", null);
13743 PinnedRowModel = __decorate([
13744 context_1.Bean('pinnedRowModel')
13745 ], PinnedRowModel);
13746 return PinnedRowModel;
13747}());
13748exports.PinnedRowModel = PinnedRowModel;
13749
13750
13751/***/ }),
13752/* 33 */
13753/***/ (function(module, exports, __webpack_require__) {
13754
13755"use strict";
13756/**
13757 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
13758 * @version v18.1.2
13759 * @link http://www.ag-grid.com/
13760 * @license MIT
13761 */
13762
13763var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
13764 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
13765 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
13766 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
13767 return c > 3 && r && Object.defineProperty(target, key, r), r;
13768};
13769var __metadata = (this && this.__metadata) || function (k, v) {
13770 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
13771};
13772Object.defineProperty(exports, "__esModule", { value: true });
13773var gridOptionsWrapper_1 = __webpack_require__(2);
13774var columnGroup_1 = __webpack_require__(28);
13775var originalColumnGroup_1 = __webpack_require__(34);
13776var context_1 = __webpack_require__(0);
13777var context_2 = __webpack_require__(0);
13778// takes in a list of columns, as specified by the column definitions, and returns column groups
13779var ColumnUtils = (function () {
13780 function ColumnUtils() {
13781 }
13782 ColumnUtils.prototype.calculateColInitialWidth = function (colDef) {
13783 if (!colDef.width) {
13784 // if no width defined in colDef, use default
13785 return this.gridOptionsWrapper.getColWidth();
13786 }
13787 else if (colDef.width < this.gridOptionsWrapper.getMinColWidth()) {
13788 // if width in col def to small, set to min width
13789 return this.gridOptionsWrapper.getMinColWidth();
13790 }
13791 else {
13792 // otherwise use the provided width
13793 return colDef.width;
13794 }
13795 };
13796 ColumnUtils.prototype.getOriginalPathForColumn = function (column, originalBalancedTree) {
13797 var result = [];
13798 var found = false;
13799 recursePath(originalBalancedTree, 0);
13800 // we should always find the path, but in case there is a bug somewhere, returning null
13801 // will make it fail rather than provide a 'hard to track down' bug
13802 if (found) {
13803 return result;
13804 }
13805 else {
13806 return null;
13807 }
13808 function recursePath(balancedColumnTree, dept) {
13809 for (var i = 0; i < balancedColumnTree.length; i++) {
13810 if (found) {
13811 // quit the search, so 'result' is kept with the found result
13812 return;
13813 }
13814 var node = balancedColumnTree[i];
13815 if (node instanceof originalColumnGroup_1.OriginalColumnGroup) {
13816 var nextNode = node;
13817 recursePath(nextNode.getChildren(), dept + 1);
13818 result[dept] = node;
13819 }
13820 else {
13821 if (node === column) {
13822 found = true;
13823 }
13824 }
13825 }
13826 }
13827 };
13828 /* public getPathForColumn(column: Column, allDisplayedColumnGroups: ColumnGroupChild[]): ColumnGroup[] {
13829 let result: ColumnGroup[] = [];
13830 let found = false;
13831
13832 recursePath(allDisplayedColumnGroups, 0);
13833
13834 // we should always find the path, but in case there is a bug somewhere, returning null
13835 // will make it fail rather than provide a 'hard to track down' bug
13836 if (found) {
13837 return result;
13838 } else {
13839 return null;
13840 }
13841
13842 function recursePath(balancedColumnTree: ColumnGroupChild[], dept: number): void {
13843
13844 for (let i = 0; i<balancedColumnTree.length; i++) {
13845 if (found) {
13846 // quit the search, so 'result' is kept with the found result
13847 return;
13848 }
13849 let node = balancedColumnTree[i];
13850 if (node instanceof ColumnGroup) {
13851 let nextNode = <ColumnGroup> node;
13852 recursePath(nextNode.getChildren(), dept+1);
13853 result[dept] = node;
13854 } else {
13855 if (node === column) {
13856 found = true;
13857 }
13858 }
13859 }
13860 }
13861 }*/
13862 ColumnUtils.prototype.depthFirstOriginalTreeSearch = function (tree, callback) {
13863 var _this = this;
13864 if (!tree) {
13865 return;
13866 }
13867 tree.forEach(function (child) {
13868 if (child instanceof originalColumnGroup_1.OriginalColumnGroup) {
13869 _this.depthFirstOriginalTreeSearch(child.getChildren(), callback);
13870 }
13871 callback(child);
13872 });
13873 };
13874 ColumnUtils.prototype.depthFirstAllColumnTreeSearch = function (tree, callback) {
13875 var _this = this;
13876 if (!tree) {
13877 return;
13878 }
13879 tree.forEach(function (child) {
13880 if (child instanceof columnGroup_1.ColumnGroup) {
13881 _this.depthFirstAllColumnTreeSearch(child.getChildren(), callback);
13882 }
13883 callback(child);
13884 });
13885 };
13886 ColumnUtils.prototype.depthFirstDisplayedColumnTreeSearch = function (tree, callback) {
13887 var _this = this;
13888 if (!tree) {
13889 return;
13890 }
13891 tree.forEach(function (child) {
13892 if (child instanceof columnGroup_1.ColumnGroup) {
13893 _this.depthFirstDisplayedColumnTreeSearch(child.getDisplayedChildren(), callback);
13894 }
13895 callback(child);
13896 });
13897 };
13898 __decorate([
13899 context_2.Autowired('gridOptionsWrapper'),
13900 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
13901 ], ColumnUtils.prototype, "gridOptionsWrapper", void 0);
13902 ColumnUtils = __decorate([
13903 context_1.Bean('columnUtils')
13904 ], ColumnUtils);
13905 return ColumnUtils;
13906}());
13907exports.ColumnUtils = ColumnUtils;
13908
13909
13910/***/ }),
13911/* 34 */
13912/***/ (function(module, exports, __webpack_require__) {
13913
13914"use strict";
13915/**
13916 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
13917 * @version v18.1.2
13918 * @link http://www.ag-grid.com/
13919 * @license MIT
13920 */
13921
13922var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
13923 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
13924 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
13925 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
13926 return c > 3 && r && Object.defineProperty(target, key, r), r;
13927};
13928var __metadata = (this && this.__metadata) || function (k, v) {
13929 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
13930};
13931Object.defineProperty(exports, "__esModule", { value: true });
13932var columnGroup_1 = __webpack_require__(28);
13933var column_1 = __webpack_require__(10);
13934var eventService_1 = __webpack_require__(3);
13935var context_1 = __webpack_require__(0);
13936var columnApi_1 = __webpack_require__(7);
13937var gridApi_1 = __webpack_require__(6);
13938var OriginalColumnGroup = (function () {
13939 function OriginalColumnGroup(colGroupDef, groupId, padding, level) {
13940 this.localEventService = new eventService_1.EventService();
13941 this.expandable = false;
13942 this.colGroupDef = colGroupDef;
13943 this.groupId = groupId;
13944 this.expanded = colGroupDef && !!colGroupDef.openByDefault;
13945 this.padding = padding;
13946 this.level = level;
13947 }
13948 OriginalColumnGroup.prototype.getLevel = function () {
13949 return this.level;
13950 };
13951 OriginalColumnGroup.prototype.isVisible = function () {
13952 // return true if at least one child is visible
13953 if (this.children) {
13954 return this.children.some(function (child) { return child.isVisible(); });
13955 }
13956 else {
13957 return false;
13958 }
13959 };
13960 OriginalColumnGroup.prototype.isPadding = function () {
13961 return this.padding;
13962 };
13963 OriginalColumnGroup.prototype.setExpanded = function (expanded) {
13964 this.expanded = expanded;
13965 var event = {
13966 type: OriginalColumnGroup.EVENT_EXPANDED_CHANGED
13967 };
13968 this.localEventService.dispatchEvent(event);
13969 };
13970 OriginalColumnGroup.prototype.isExpandable = function () {
13971 return this.expandable;
13972 };
13973 OriginalColumnGroup.prototype.isExpanded = function () {
13974 return this.expanded;
13975 };
13976 OriginalColumnGroup.prototype.getGroupId = function () {
13977 return this.groupId;
13978 };
13979 OriginalColumnGroup.prototype.getId = function () {
13980 return this.getGroupId();
13981 };
13982 OriginalColumnGroup.prototype.setChildren = function (children) {
13983 this.children = children;
13984 };
13985 OriginalColumnGroup.prototype.getChildren = function () {
13986 return this.children;
13987 };
13988 OriginalColumnGroup.prototype.getColGroupDef = function () {
13989 return this.colGroupDef;
13990 };
13991 OriginalColumnGroup.prototype.getLeafColumns = function () {
13992 var result = [];
13993 this.addLeafColumns(result);
13994 return result;
13995 };
13996 OriginalColumnGroup.prototype.addLeafColumns = function (leafColumns) {
13997 if (!this.children) {
13998 return;
13999 }
14000 this.children.forEach(function (child) {
14001 if (child instanceof column_1.Column) {
14002 leafColumns.push(child);
14003 }
14004 else if (child instanceof OriginalColumnGroup) {
14005 child.addLeafColumns(leafColumns);
14006 }
14007 });
14008 };
14009 OriginalColumnGroup.prototype.getColumnGroupShow = function () {
14010 if (!this.padding) {
14011 return this.colGroupDef.columnGroupShow;
14012 }
14013 else {
14014 // if this is padding we have exactly only child. we then
14015 // take the value from the child and push it up, making
14016 // this group 'invisible'.
14017 return this.children[0].getColumnGroupShow();
14018 }
14019 };
14020 // need to check that this group has at least one col showing when both expanded and contracted.
14021 // if not, then we don't allow expanding and contracting on this group
14022 OriginalColumnGroup.prototype.setupExpandable = function () {
14023 var _this = this;
14024 this.setExpandable();
14025 // note - we should be removing this event listener
14026 this.getLeafColumns().forEach(function (col) { return col.addEventListener(column_1.Column.EVENT_VISIBLE_CHANGED, _this.onColumnVisibilityChanged.bind(_this)); });
14027 };
14028 OriginalColumnGroup.prototype.setExpandable = function () {
14029 // want to make sure the group doesn't disappear when it's open
14030 var atLeastOneShowingWhenOpen = false;
14031 // want to make sure the group doesn't disappear when it's closed
14032 var atLeastOneShowingWhenClosed = false;
14033 // want to make sure the group has something to show / hide
14034 var atLeastOneChangeable = false;
14035 for (var i = 0, j = this.children.length; i < j; i++) {
14036 var abstractColumn = this.children[i];
14037 if (!abstractColumn.isVisible()) {
14038 continue;
14039 }
14040 // if the abstractColumn is a grid generated group, there will be no colDef
14041 var headerGroupShow = abstractColumn.getColumnGroupShow();
14042 if (headerGroupShow === columnGroup_1.ColumnGroup.HEADER_GROUP_SHOW_OPEN) {
14043 atLeastOneShowingWhenOpen = true;
14044 atLeastOneChangeable = true;
14045 }
14046 else if (headerGroupShow === columnGroup_1.ColumnGroup.HEADER_GROUP_SHOW_CLOSED) {
14047 atLeastOneShowingWhenClosed = true;
14048 atLeastOneChangeable = true;
14049 }
14050 else {
14051 atLeastOneShowingWhenOpen = true;
14052 atLeastOneShowingWhenClosed = true;
14053 }
14054 }
14055 var expandable = atLeastOneShowingWhenOpen && atLeastOneShowingWhenClosed && atLeastOneChangeable;
14056 if (this.expandable !== expandable) {
14057 this.expandable = expandable;
14058 var event_1 = {
14059 type: OriginalColumnGroup.EVENT_EXPANDABLE_CHANGED
14060 };
14061 this.localEventService.dispatchEvent(event_1);
14062 }
14063 };
14064 OriginalColumnGroup.prototype.onColumnVisibilityChanged = function () {
14065 this.setExpandable();
14066 };
14067 OriginalColumnGroup.prototype.addEventListener = function (eventType, listener) {
14068 this.localEventService.addEventListener(eventType, listener);
14069 };
14070 OriginalColumnGroup.prototype.removeEventListener = function (eventType, listener) {
14071 this.localEventService.removeEventListener(eventType, listener);
14072 };
14073 OriginalColumnGroup.EVENT_EXPANDED_CHANGED = 'expandedChanged';
14074 OriginalColumnGroup.EVENT_EXPANDABLE_CHANGED = 'expandableChanged';
14075 __decorate([
14076 context_1.Autowired('columnApi'),
14077 __metadata("design:type", columnApi_1.ColumnApi)
14078 ], OriginalColumnGroup.prototype, "columnApi", void 0);
14079 __decorate([
14080 context_1.Autowired('gridApi'),
14081 __metadata("design:type", gridApi_1.GridApi)
14082 ], OriginalColumnGroup.prototype, "gridApi", void 0);
14083 return OriginalColumnGroup;
14084}());
14085exports.OriginalColumnGroup = OriginalColumnGroup;
14086
14087
14088/***/ }),
14089/* 35 */
14090/***/ (function(module, exports, __webpack_require__) {
14091
14092"use strict";
14093/**
14094 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
14095 * @version v18.1.2
14096 * @link http://www.ag-grid.com/
14097 * @license MIT
14098 */
14099
14100var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
14101 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
14102 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
14103 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
14104 return c > 3 && r && Object.defineProperty(target, key, r), r;
14105};
14106var __metadata = (this && this.__metadata) || function (k, v) {
14107 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
14108};
14109Object.defineProperty(exports, "__esModule", { value: true });
14110var context_1 = __webpack_require__(0);
14111var gridOptionsWrapper_1 = __webpack_require__(2);
14112var ValueCache = (function () {
14113 function ValueCache() {
14114 this.cacheVersion = 0;
14115 }
14116 ValueCache.prototype.init = function () {
14117 this.active = this.gridOptionsWrapper.isValueCache();
14118 this.neverExpires = this.gridOptionsWrapper.isValueCacheNeverExpires();
14119 };
14120 ValueCache.prototype.onDataChanged = function () {
14121 if (this.neverExpires) {
14122 return;
14123 }
14124 this.expire();
14125 };
14126 ValueCache.prototype.expire = function () {
14127 this.cacheVersion++;
14128 };
14129 ValueCache.prototype.setValue = function (rowNode, colId, value) {
14130 if (this.active) {
14131 if (rowNode.__cacheVersion !== this.cacheVersion) {
14132 rowNode.__cacheVersion = this.cacheVersion;
14133 rowNode.__cacheData = {};
14134 }
14135 rowNode.__cacheData[colId] = value;
14136 }
14137 };
14138 ValueCache.prototype.getValue = function (rowNode, colId) {
14139 var valueInCache = this.active
14140 && rowNode.__cacheVersion === this.cacheVersion
14141 && rowNode.__cacheData[colId] !== undefined;
14142 if (valueInCache) {
14143 return rowNode.__cacheData[colId];
14144 }
14145 else {
14146 return undefined;
14147 }
14148 };
14149 __decorate([
14150 context_1.Autowired('gridOptionsWrapper'),
14151 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
14152 ], ValueCache.prototype, "gridOptionsWrapper", void 0);
14153 __decorate([
14154 context_1.PostConstruct,
14155 __metadata("design:type", Function),
14156 __metadata("design:paramtypes", []),
14157 __metadata("design:returntype", void 0)
14158 ], ValueCache.prototype, "init", null);
14159 ValueCache = __decorate([
14160 context_1.Bean('valueCache')
14161 ], ValueCache);
14162 return ValueCache;
14163}());
14164exports.ValueCache = ValueCache;
14165
14166
14167/***/ }),
14168/* 36 */
14169/***/ (function(module, exports, __webpack_require__) {
14170
14171"use strict";
14172/**
14173 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
14174 * @version v18.1.2
14175 * @link http://www.ag-grid.com/
14176 * @license MIT
14177 */
14178
14179var __extends = (this && this.__extends) || (function () {
14180 var extendStatics = Object.setPrototypeOf ||
14181 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
14182 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
14183 return function (d, b) {
14184 extendStatics(d, b);
14185 function __() { this.constructor = d; }
14186 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
14187 };
14188})();
14189Object.defineProperty(exports, "__esModule", { value: true });
14190var utils_1 = __webpack_require__(1);
14191var column_1 = __webpack_require__(10);
14192var rowNode_1 = __webpack_require__(18);
14193var constants_1 = __webpack_require__(9);
14194var events_1 = __webpack_require__(5);
14195var gridCell_1 = __webpack_require__(25);
14196var component_1 = __webpack_require__(8);
14197var checkboxSelectionComponent_1 = __webpack_require__(67);
14198var rowDragComp_1 = __webpack_require__(125);
14199var CellComp = (function (_super) {
14200 __extends(CellComp, _super);
14201 function CellComp(scope, beans, column, rowNode, rowComp, autoHeightCell) {
14202 var _this = _super.call(this) || this;
14203 _this.editingCell = false;
14204 // every time we go into edit mode, or back again, this gets incremented.
14205 // it's the components way of dealing with the async nature of framework components,
14206 // so if a framework component takes a while to be created, we know if the object
14207 // is still relevant when creating is finished. eg we could click edit / unedit 20
14208 // times before the first React edit component comes back - we should discard
14209 // the first 19.
14210 _this.cellEditorVersion = 0;
14211 _this.cellRendererVersion = 0;
14212 _this.scope = scope;
14213 _this.beans = beans;
14214 _this.column = column;
14215 _this.rowNode = rowNode;
14216 _this.rowComp = rowComp;
14217 _this.autoHeightCell = autoHeightCell;
14218 _this.createGridCellVo();
14219 _this.rangeSelectionEnabled = beans.enterprise && beans.gridOptionsWrapper.isEnableRangeSelection();
14220 _this.cellFocused = _this.beans.focusedCellController.isCellFocused(_this.gridCell);
14221 _this.firstRightPinned = _this.column.isFirstRightPinned();
14222 _this.lastLeftPinned = _this.column.isLastLeftPinned();
14223 if (_this.rangeSelectionEnabled) {
14224 _this.rangeCount = _this.beans.rangeController.getCellRangeCount(_this.gridCell);
14225 }
14226 _this.getValueAndFormat();
14227 _this.setUsingWrapper();
14228 _this.chooseCellRenderer();
14229 _this.setupColSpan();
14230 _this.rowSpan = _this.column.getRowSpan(_this.rowNode);
14231 return _this;
14232 }
14233 CellComp.prototype.getCreateTemplate = function () {
14234 var templateParts = [];
14235 var col = this.column;
14236 var width = this.getCellWidth();
14237 var left = col.getLeft();
14238 var valueToRender = this.getInitialValueToRender();
14239 var valueSanitised = utils_1._.get(this.column, 'colDef.template', null) ? valueToRender : utils_1._.escape(valueToRender);
14240 this.tooltip = this.getToolTip();
14241 var tooltipSanitised = utils_1._.escape(this.tooltip);
14242 var colIdSanitised = utils_1._.escape(col.getId());
14243 var wrapperStartTemplate;
14244 var wrapperEndTemplate;
14245 var stylesFromColDef = this.preProcessStylesFromColDef();
14246 var cssClasses = this.getInitialCssClasses();
14247 var stylesForRowSpanning = this.getStylesForRowSpanning();
14248 if (this.usingWrapper) {
14249 wrapperStartTemplate = '<span ref="eCellWrapper" class="ag-cell-wrapper"><span ref="eCellValue" class="ag-cell-value">';
14250 wrapperEndTemplate = '</span></span>';
14251 }
14252 // hey, this looks like React!!!
14253 templateParts.push("<div");
14254 templateParts.push(" tabindex=\"-1\"");
14255 templateParts.push(" role=\"gridcell\"");
14256 templateParts.push(" comp-id=\"" + this.getCompId() + "\" ");
14257 templateParts.push(" col-id=\"" + colIdSanitised + "\"");
14258 templateParts.push(" class=\"" + cssClasses.join(' ') + "\"");
14259 templateParts.push(tooltipSanitised ? " title=\"" + tooltipSanitised + "\"" : "");
14260 templateParts.push(" style=\"width: " + width + "px; left: " + left + "px; " + stylesFromColDef + " " + stylesForRowSpanning + "\" >");
14261 templateParts.push(wrapperStartTemplate);
14262 templateParts.push(valueSanitised);
14263 templateParts.push(wrapperEndTemplate);
14264 templateParts.push("</div>");
14265 return templateParts.join('');
14266 };
14267 CellComp.prototype.getStylesForRowSpanning = function () {
14268 if (this.rowSpan === 1) {
14269 return '';
14270 }
14271 var singleRowHeight = this.beans.gridOptionsWrapper.getRowHeightAsNumber();
14272 var totalRowHeight = singleRowHeight * this.rowSpan;
14273 return "height: " + totalRowHeight + "px; z-index: 1;";
14274 };
14275 CellComp.prototype.afterAttached = function () {
14276 var querySelector = "[comp-id=\"" + this.getCompId() + "\"]";
14277 var eGui = this.eParentRow.querySelector(querySelector);
14278 this.setGui(eGui);
14279 // all of these have dependencies on the eGui, so only do them after eGui is set
14280 this.addDomData();
14281 this.populateTemplate();
14282 this.attachCellRenderer();
14283 this.angular1Compile();
14284 this.addDestroyableEventListener(this.beans.eventService, events_1.Events.EVENT_CELL_FOCUSED, this.onCellFocused.bind(this));
14285 this.addDestroyableEventListener(this.beans.eventService, events_1.Events.EVENT_FLASH_CELLS, this.onFlashCells.bind(this));
14286 this.addDestroyableEventListener(this.beans.eventService, events_1.Events.EVENT_COLUMN_HOVER_CHANGED, this.onColumnHover.bind(this));
14287 this.addDestroyableEventListener(this.rowNode, rowNode_1.RowNode.EVENT_ROW_INDEX_CHANGED, this.onRowIndexChanged.bind(this));
14288 this.addDestroyableEventListener(this.rowNode, rowNode_1.RowNode.EVENT_CELL_CHANGED, this.onCellChanged.bind(this));
14289 this.addDestroyableEventListener(this.column, column_1.Column.EVENT_LEFT_CHANGED, this.onLeftChanged.bind(this));
14290 this.addDestroyableEventListener(this.column, column_1.Column.EVENT_WIDTH_CHANGED, this.onWidthChanged.bind(this));
14291 this.addDestroyableEventListener(this.column, column_1.Column.EVENT_FIRST_RIGHT_PINNED_CHANGED, this.onFirstRightPinnedChanged.bind(this));
14292 this.addDestroyableEventListener(this.column, column_1.Column.EVENT_LAST_LEFT_PINNED_CHANGED, this.onLastLeftPinnedChanged.bind(this));
14293 // if not doing enterprise, then range selection service would be missing
14294 // so need to check before trying to use it
14295 if (this.rangeSelectionEnabled) {
14296 this.addDestroyableEventListener(this.beans.eventService, events_1.Events.EVENT_RANGE_SELECTION_CHANGED, this.onRangeSelectionChanged.bind(this));
14297 }
14298 };
14299 CellComp.prototype.onColumnHover = function () {
14300 var isHovered = this.beans.columnHoverService.isHovered(this.column);
14301 utils_1._.addOrRemoveCssClass(this.getGui(), 'ag-column-hover', isHovered);
14302 };
14303 CellComp.prototype.onCellChanged = function (event) {
14304 var eventImpactsThisCell = event.column === this.column;
14305 if (eventImpactsThisCell) {
14306 this.refreshCell({});
14307 }
14308 };
14309 CellComp.prototype.getCellLeft = function () {
14310 var mostLeftCol;
14311 if (this.beans.gridOptionsWrapper.isEnableRtl() && this.colsSpanning) {
14312 mostLeftCol = this.colsSpanning[this.colsSpanning.length - 1];
14313 }
14314 else {
14315 mostLeftCol = this.column;
14316 }
14317 return mostLeftCol.getLeft();
14318 };
14319 CellComp.prototype.getCellWidth = function () {
14320 if (this.colsSpanning) {
14321 var result_1 = 0;
14322 this.colsSpanning.forEach(function (col) { return result_1 += col.getActualWidth(); });
14323 return result_1;
14324 }
14325 else {
14326 return this.column.getActualWidth();
14327 }
14328 };
14329 CellComp.prototype.onFlashCells = function (event) {
14330 var cellId = this.gridCell.createId();
14331 var shouldFlash = event.cells[cellId];
14332 if (shouldFlash) {
14333 this.animateCell('highlight');
14334 }
14335 };
14336 CellComp.prototype.setupColSpan = function () {
14337 // if no col span is active, then we don't set it up, as it would be wasteful of CPU
14338 if (utils_1._.missing(this.column.getColDef().colSpan)) {
14339 return;
14340 }
14341 // because we are col spanning, a reorder of the cols can change what cols we are spanning over
14342 this.addDestroyableEventListener(this.beans.eventService, events_1.Events.EVENT_DISPLAYED_COLUMNS_CHANGED, this.onDisplayColumnsChanged.bind(this));
14343 // because we are spanning over multiple cols, we check for width any time any cols width changes.
14344 // this is expensive - really we should be explicitly checking only the cols we are spanning over
14345 // instead of every col, however it would be tricky code to track the cols we are spanning over, so
14346 // because hardly anyone will be using colSpan, am favoring this easier way for more maintainable code.
14347 this.addDestroyableEventListener(this.beans.eventService, events_1.Events.EVENT_DISPLAYED_COLUMNS_WIDTH_CHANGED, this.onWidthChanged.bind(this));
14348 this.colsSpanning = this.getColSpanningList();
14349 };
14350 CellComp.prototype.getColSpanningList = function () {
14351 var colSpan = this.column.getColSpan(this.rowNode);
14352 var colsSpanning = [];
14353 // if just one col, the col span is just the column we are in
14354 if (colSpan === 1) {
14355 colsSpanning.push(this.column);
14356 }
14357 else {
14358 var pointer = this.column;
14359 var pinned = this.column.getPinned();
14360 for (var i = 0; i < colSpan; i++) {
14361 colsSpanning.push(pointer);
14362 pointer = this.beans.columnController.getDisplayedColAfter(pointer);
14363 if (utils_1._.missing(pointer)) {
14364 break;
14365 }
14366 // we do not allow col spanning to span outside of pinned areas
14367 if (pinned !== pointer.getPinned()) {
14368 break;
14369 }
14370 }
14371 }
14372 return colsSpanning;
14373 };
14374 CellComp.prototype.onDisplayColumnsChanged = function () {
14375 var colsSpanning = this.getColSpanningList();
14376 if (!utils_1._.compareArrays(this.colsSpanning, colsSpanning)) {
14377 this.colsSpanning = colsSpanning;
14378 this.onWidthChanged();
14379 this.onLeftChanged(); // left changes when doing RTL
14380 }
14381 };
14382 CellComp.prototype.getInitialCssClasses = function () {
14383 var cssClasses = ["ag-cell", "ag-cell-not-inline-editing"];
14384 // if we are putting the cell into a dummy container, to work out it's height,
14385 // then we don't put the height css in, as we want cell to fit height in that case.
14386 if (!this.autoHeightCell) {
14387 cssClasses.push('ag-cell-with-height');
14388 }
14389 var doingFocusCss = !this.beans.gridOptionsWrapper.isSuppressCellSelection();
14390 if (doingFocusCss) {
14391 // otherwise the class depends on the focus state
14392 cssClasses.push(this.cellFocused ? 'ag-cell-focus' : 'ag-cell-no-focus');
14393 }
14394 else {
14395 // if we are not doing cell selection, then ag-cell-no-focus gets put onto every cell
14396 cssClasses.push('ag-cell-no-focus');
14397 }
14398 if (this.firstRightPinned) {
14399 cssClasses.push('ag-cell-first-right-pinned');
14400 }
14401 if (this.lastLeftPinned) {
14402 cssClasses.push('ag-cell-last-left-pinned');
14403 }
14404 if (this.beans.columnHoverService.isHovered(this.column)) {
14405 cssClasses.push('ag-column-hover');
14406 }
14407 utils_1._.pushAll(cssClasses, this.preProcessClassesFromColDef());
14408 utils_1._.pushAll(cssClasses, this.preProcessCellClassRules());
14409 utils_1._.pushAll(cssClasses, this.getRangeClasses());
14410 // if using the wrapper, this class goes on the wrapper instead
14411 if (!this.usingWrapper) {
14412 cssClasses.push('ag-cell-value');
14413 }
14414 return cssClasses;
14415 };
14416 CellComp.prototype.getInitialValueToRender = function () {
14417 // if using a cellRenderer, then render the html from the cell renderer if it exists
14418 if (this.usingCellRenderer) {
14419 if (typeof this.cellRendererGui === 'string') {
14420 return this.cellRendererGui;
14421 }
14422 else {
14423 return '';
14424 }
14425 }
14426 var colDef = this.column.getColDef();
14427 if (colDef.template) {
14428 // template is really only used for angular 1 - as people using ng1 are used to providing templates with
14429 // bindings in it. in ng2, people will hopefully want to provide components, not templates.
14430 return colDef.template;
14431 }
14432 else if (colDef.templateUrl) {
14433 // likewise for templateUrl - it's for ng1 really - when we move away from ng1, we can take these out.
14434 // niall was pro angular 1 when writing template and templateUrl, if writing from scratch now, would
14435 // not do these, but would follow a pattern that was friendly towards components, not templates.
14436 var template = this.beans.templateService.getTemplate(colDef.templateUrl, this.refreshCell.bind(this, true));
14437 if (template) {
14438 return template;
14439 }
14440 else {
14441 return '';
14442 }
14443 }
14444 else {
14445 return this.getValueToUse();
14446 }
14447 };
14448 CellComp.prototype.getRenderedRow = function () {
14449 return this.rowComp;
14450 };
14451 CellComp.prototype.isSuppressNavigable = function () {
14452 return this.column.isSuppressNavigable(this.rowNode);
14453 };
14454 CellComp.prototype.getCellRenderer = function () {
14455 return this.cellRenderer;
14456 };
14457 CellComp.prototype.getCellEditor = function () {
14458 return this.cellEditor;
14459 };
14460 // + stop editing {forceRefresh: true, suppressFlash: true}
14461 // + event cellChanged {}
14462 // + cellRenderer.params.refresh() {} -> method passes 'as is' to the cellRenderer, so params could be anything
14463 // + rowComp: event dataChanged {animate: update, newData: !update}
14464 // + rowComp: api refreshCells() {animate: true/false}
14465 // + rowRenderer: api softRefreshView() {}
14466 CellComp.prototype.refreshCell = function (params) {
14467 if (this.editingCell) {
14468 return;
14469 }
14470 var newData = params && params.newData;
14471 var suppressFlash = (params && params.suppressFlash) || this.column.getColDef().suppressCellFlash;
14472 var forceRefresh = params && params.forceRefresh;
14473 var oldValue = this.value;
14474 this.getValueAndFormat();
14475 // for simple values only (not pojo's), see if the value is the same, and if it is, skip the refresh.
14476 // when never allow skipping after an edit, as after editing, we need to put the GUI back to the way
14477 // if was before the edit.
14478 var valuesDifferent = !this.valuesAreEqual(oldValue, this.value);
14479 var dataNeedsUpdating = forceRefresh || valuesDifferent;
14480 if (dataNeedsUpdating) {
14481 var cellRendererRefreshed = void 0;
14482 // if it's 'new data', then we don't refresh the cellRenderer, even if refresh method is available.
14483 // this is because if the whole data is new (ie we are showing stock price 'BBA' now and not 'SSD')
14484 // then we are not showing a movement in the stock price, rather we are showing different stock.
14485 if (newData || suppressFlash) {
14486 cellRendererRefreshed = false;
14487 }
14488 else {
14489 cellRendererRefreshed = this.attemptCellRendererRefresh();
14490 }
14491 // we do the replace if not doing refresh, or if refresh was unsuccessful.
14492 // the refresh can be unsuccessful if we are using a framework (eg ng2 or react) and the framework
14493 // wrapper has the refresh method, but the underlying component doesn't
14494 if (!cellRendererRefreshed) {
14495 this.replaceContentsAfterRefresh();
14496 }
14497 if (!suppressFlash) {
14498 var flashCell = this.beans.gridOptionsWrapper.isEnableCellChangeFlash()
14499 || this.column.getColDef().enableCellChangeFlash;
14500 if (flashCell) {
14501 this.flashCell();
14502 }
14503 }
14504 // need to check rules. note, we ignore colDef classes and styles, these are assumed to be static
14505 this.postProcessStylesFromColDef();
14506 this.postProcessClassesFromColDef();
14507 }
14508 this.refreshToolTip();
14509 // we do cellClassRules even if the value has not changed, so that users who have rules that
14510 // look at other parts of the row (where the other part of the row might of changed) will work.
14511 this.postProcessCellClassRules();
14512 };
14513 // user can also call this via API
14514 CellComp.prototype.flashCell = function () {
14515 this.animateCell('data-changed');
14516 };
14517 CellComp.prototype.animateCell = function (cssName) {
14518 var fullName = 'ag-cell-' + cssName;
14519 var animationFullName = 'ag-cell-' + cssName + '-animation';
14520 var element = this.getGui();
14521 // we want to highlight the cells, without any animation
14522 utils_1._.addCssClass(element, fullName);
14523 utils_1._.removeCssClass(element, animationFullName);
14524 // then once that is applied, we remove the highlight with animation
14525 setTimeout(function () {
14526 utils_1._.removeCssClass(element, fullName);
14527 utils_1._.addCssClass(element, animationFullName);
14528 setTimeout(function () {
14529 // and then to leave things as we got them, we remove the animation
14530 utils_1._.removeCssClass(element, animationFullName);
14531 }, 1000);
14532 }, 500);
14533 };
14534 CellComp.prototype.replaceContentsAfterRefresh = function () {
14535 // otherwise we rip out the cell and replace it
14536 utils_1._.removeAllChildren(this.eParentOfValue);
14537 // remove old renderer component if it exists
14538 if (this.cellRenderer && this.cellRenderer.destroy) {
14539 this.cellRenderer.destroy();
14540 }
14541 this.cellRenderer = null;
14542 this.cellRendererGui = null;
14543 // populate
14544 this.putDataIntoCellAfterRefresh();
14545 this.angular1Compile();
14546 };
14547 CellComp.prototype.angular1Compile = function () {
14548 // if angular compiling, then need to also compile the cell again (angular compiling sucks, please wait...)
14549 if (this.beans.gridOptionsWrapper.isAngularCompileRows()) {
14550 var eGui = this.getGui();
14551 var compiledElement_1 = this.beans.$compile(eGui)(this.scope);
14552 this.addDestroyFunc(function () {
14553 compiledElement_1.remove();
14554 });
14555 }
14556 };
14557 CellComp.prototype.postProcessStylesFromColDef = function () {
14558 var stylesToUse = this.processStylesFromColDef();
14559 if (stylesToUse) {
14560 utils_1._.addStylesToElement(this.getGui(), stylesToUse);
14561 }
14562 };
14563 CellComp.prototype.preProcessStylesFromColDef = function () {
14564 var stylesToUse = this.processStylesFromColDef();
14565 return utils_1._.cssStyleObjectToMarkup(stylesToUse);
14566 };
14567 CellComp.prototype.processStylesFromColDef = function () {
14568 var colDef = this.column.getColDef();
14569 if (colDef.cellStyle) {
14570 var cssToUse = void 0;
14571 if (typeof colDef.cellStyle === 'function') {
14572 var cellStyleParams = {
14573 value: this.value,
14574 data: this.rowNode.data,
14575 node: this.rowNode,
14576 colDef: colDef,
14577 column: this.column,
14578 $scope: this.scope,
14579 context: this.beans.gridOptionsWrapper.getContext(),
14580 api: this.beans.gridOptionsWrapper.getApi()
14581 };
14582 var cellStyleFunc = colDef.cellStyle;
14583 cssToUse = cellStyleFunc(cellStyleParams);
14584 }
14585 else {
14586 cssToUse = colDef.cellStyle;
14587 }
14588 return cssToUse;
14589 }
14590 };
14591 CellComp.prototype.postProcessClassesFromColDef = function () {
14592 var _this = this;
14593 this.processClassesFromColDef(function (className) { return utils_1._.addCssClass(_this.getGui(), className); });
14594 };
14595 CellComp.prototype.preProcessClassesFromColDef = function () {
14596 var res = [];
14597 this.processClassesFromColDef(function (className) { return res.push(className); });
14598 return res;
14599 };
14600 CellComp.prototype.processClassesFromColDef = function (onApplicableClass) {
14601 this.beans.stylingService.processStaticCellClasses(this.column.getColDef(), {
14602 value: this.value,
14603 data: this.rowNode.data,
14604 node: this.rowNode,
14605 colDef: this.column.getColDef(),
14606 rowIndex: this.rowNode.rowIndex,
14607 $scope: this.scope,
14608 api: this.beans.gridOptionsWrapper.getApi(),
14609 context: this.beans.gridOptionsWrapper.getContext()
14610 }, onApplicableClass);
14611 };
14612 CellComp.prototype.putDataIntoCellAfterRefresh = function () {
14613 // template gets preference, then cellRenderer, then do it ourselves
14614 var colDef = this.column.getColDef();
14615 if (colDef.template) {
14616 // template is really only used for angular 1 - as people using ng1 are used to providing templates with
14617 // bindings in it. in ng2, people will hopefully want to provide components, not templates.
14618 this.eParentOfValue.innerHTML = colDef.template;
14619 }
14620 else if (colDef.templateUrl) {
14621 // likewise for templateUrl - it's for ng1 really - when we move away from ng1, we can take these out.
14622 // niall was pro angular 1 when writing template and templateUrl, if writing from scratch now, would
14623 // not do these, but would follow a pattern that was friendly towards components, not templates.
14624 var template = this.beans.templateService.getTemplate(colDef.templateUrl, this.refreshCell.bind(this, true));
14625 if (template) {
14626 this.eParentOfValue.innerHTML = template;
14627 }
14628 // use cell renderer if it exists
14629 }
14630 else if (this.usingCellRenderer) {
14631 this.attachCellRenderer();
14632 }
14633 else {
14634 var valueToUse = this.getValueToUse();
14635 if (valueToUse !== null && valueToUse !== undefined) {
14636 this.eParentOfValue.innerText = valueToUse;
14637 }
14638 }
14639 };
14640 CellComp.prototype.attemptCellRendererRefresh = function () {
14641 if (utils_1._.missing(this.cellRenderer) || utils_1._.missing(this.cellRenderer.refresh)) {
14642 return false;
14643 }
14644 // if the cell renderer has a refresh method, we call this instead of doing a refresh
14645 // note: should pass in params here instead of value?? so that client has formattedValue
14646 var params = this.createCellRendererParams();
14647 var result = this.cellRenderer.refresh(params);
14648 // NOTE on undefined: previous version of the cellRenderer.refresh() interface
14649 // returned nothing, if the method existed, we assumed it refreshed. so for
14650 // backwards compatibility, we assume if method exists and returns nothing,
14651 // that it was successful.
14652 return result === true || result === undefined;
14653 };
14654 CellComp.prototype.refreshToolTip = function () {
14655 var newTooltip = this.getToolTip();
14656 if (this.tooltip !== newTooltip) {
14657 this.tooltip = newTooltip;
14658 if (utils_1._.exists(newTooltip)) {
14659 var tooltipSanitised = utils_1._.escape(this.tooltip);
14660 this.eParentOfValue.setAttribute('title', tooltipSanitised);
14661 }
14662 else {
14663 this.eParentOfValue.removeAttribute('title');
14664 }
14665 }
14666 };
14667 CellComp.prototype.valuesAreEqual = function (val1, val2) {
14668 // if the user provided an equals method, use that, otherwise do simple comparison
14669 var colDef = this.column.getColDef();
14670 var equalsMethod = colDef ? colDef.equals : null;
14671 if (equalsMethod) {
14672 return equalsMethod(val1, val2);
14673 }
14674 else {
14675 return val1 === val2;
14676 }
14677 };
14678 CellComp.prototype.getToolTip = function () {
14679 var colDef = this.column.getColDef();
14680 var data = this.rowNode.data;
14681 if (colDef.tooltipField && utils_1._.exists(data)) {
14682 return utils_1._.getValueUsingField(data, colDef.tooltipField, this.column.isTooltipFieldContainsDots());
14683 }
14684 else if (colDef.tooltip) {
14685 return colDef.tooltip({
14686 value: this.value,
14687 valueFormatted: this.valueFormatted,
14688 data: this.rowNode.data,
14689 node: this.rowNode,
14690 colDef: this.column.getColDef(),
14691 api: this.beans.gridOptionsWrapper.getApi(),
14692 $scope: this.scope,
14693 context: this.beans.gridOptionsWrapper.getContext(),
14694 rowIndex: this.gridCell.rowIndex
14695 });
14696 }
14697 else {
14698 return null;
14699 }
14700 };
14701 CellComp.prototype.processCellClassRules = function (onApplicableClass, onNotApplicableClass) {
14702 this.beans.stylingService.processClassRules(this.column.getColDef().cellClassRules, {
14703 value: this.value,
14704 data: this.rowNode.data,
14705 node: this.rowNode,
14706 colDef: this.column.getColDef(),
14707 rowIndex: this.gridCell.rowIndex,
14708 api: this.beans.gridOptionsWrapper.getApi(),
14709 $scope: this.scope,
14710 context: this.beans.gridOptionsWrapper.getContext()
14711 }, onApplicableClass, onNotApplicableClass);
14712 };
14713 CellComp.prototype.postProcessCellClassRules = function () {
14714 var _this = this;
14715 this.processCellClassRules(function (className) {
14716 utils_1._.addCssClass(_this.getGui(), className);
14717 }, function (className) {
14718 utils_1._.removeCssClass(_this.getGui(), className);
14719 });
14720 };
14721 CellComp.prototype.preProcessCellClassRules = function () {
14722 var res = [];
14723 this.processCellClassRules(function (className) {
14724 res.push(className);
14725 }, function (className) {
14726 // not catered for, if creating, no need
14727 // to remove class as it was never there
14728 });
14729 return res;
14730 };
14731 // a wrapper is used when we are putting a selection checkbox in the cell with the value
14732 CellComp.prototype.setUsingWrapper = function () {
14733 var colDef = this.column.getColDef();
14734 // never allow selection or dragging on pinned rows
14735 if (this.rowNode.rowPinned) {
14736 this.usingWrapper = false;
14737 this.includeSelectionComponent = false;
14738 this.includeRowDraggingComponent = false;
14739 return;
14740 }
14741 var cbSelectionIsFunc = typeof colDef.checkboxSelection === 'function';
14742 var rowDraggableIsFunc = typeof colDef.rowDrag === 'function';
14743 this.includeSelectionComponent = cbSelectionIsFunc || colDef.checkboxSelection === true;
14744 this.includeRowDraggingComponent = rowDraggableIsFunc || colDef.rowDrag === true;
14745 this.usingWrapper = this.includeRowDraggingComponent || this.includeSelectionComponent;
14746 };
14747 CellComp.prototype.chooseCellRenderer = function () {
14748 // template gets preference, then cellRenderer, then do it ourselves
14749 var colDef = this.column.getColDef();
14750 // templates are for ng1, ideally we wouldn't have these, they are ng1 support
14751 // inside the core which is bad
14752 if (colDef.template || colDef.templateUrl) {
14753 this.usingCellRenderer = false;
14754 return;
14755 }
14756 var params = this.createCellRendererParams();
14757 var cellRenderer = this.beans.componentResolver.getComponentToUse(colDef, 'cellRenderer', params, null);
14758 var pinnedRowCellRenderer = this.beans.componentResolver.getComponentToUse(colDef, 'pinnedRowCellRenderer', params, null);
14759 if (pinnedRowCellRenderer && this.rowNode.rowPinned) {
14760 this.cellRendererType = 'pinnedRowCellRenderer';
14761 this.usingCellRenderer = true;
14762 }
14763 else if (cellRenderer) {
14764 this.cellRendererType = 'cellRenderer';
14765 this.usingCellRenderer = true;
14766 }
14767 else {
14768 this.usingCellRenderer = false;
14769 }
14770 };
14771 CellComp.prototype.createCellRendererInstance = function () {
14772 var params = this.createCellRendererParams();
14773 this.cellRendererVersion++;
14774 var callback = this.afterCellRendererCreated.bind(this, this.cellRendererVersion);
14775 this.beans.componentResolver.createAgGridComponent(this.column.getColDef(), params, this.cellRendererType, params, null).then(callback);
14776 };
14777 CellComp.prototype.afterCellRendererCreated = function (cellRendererVersion, cellRenderer) {
14778 // see if daemon
14779 if (!this.isAlive() || (cellRendererVersion !== this.cellRendererVersion)) {
14780 if (cellRenderer.destroy) {
14781 cellRenderer.destroy();
14782 }
14783 return;
14784 }
14785 this.cellRenderer = cellRenderer;
14786 this.cellRendererGui = this.cellRenderer.getGui();
14787 if (utils_1._.missing(this.cellRendererGui)) {
14788 return;
14789 }
14790 // if async components, then it's possible the user started editing since
14791 // this call was made
14792 if (!this.editingCell) {
14793 this.eParentOfValue.appendChild(this.cellRendererGui);
14794 }
14795 };
14796 CellComp.prototype.attachCellRenderer = function () {
14797 if (!this.usingCellRenderer) {
14798 return;
14799 }
14800 this.createCellRendererInstance();
14801 };
14802 CellComp.prototype.createCellRendererParams = function () {
14803 var _this = this;
14804 var params = {
14805 value: this.value,
14806 valueFormatted: this.valueFormatted,
14807 getValue: this.getValue.bind(this),
14808 setValue: function (value) {
14809 _this.beans.valueService.setValue(_this.rowNode, _this.column, value);
14810 },
14811 formatValue: this.formatValue.bind(this),
14812 data: this.rowNode.data,
14813 node: this.rowNode,
14814 colDef: this.column.getColDef(),
14815 column: this.column,
14816 $scope: this.scope,
14817 rowIndex: this.gridCell.rowIndex,
14818 api: this.beans.gridOptionsWrapper.getApi(),
14819 columnApi: this.beans.gridOptionsWrapper.getColumnApi(),
14820 context: this.beans.gridOptionsWrapper.getContext(),
14821 refreshCell: this.refreshCell.bind(this),
14822 eGridCell: this.getGui(),
14823 eParentOfValue: this.eParentOfValue,
14824 // these bits are not documented anywhere, so we could drop them?
14825 // it was in the olden days to allow user to register for when rendered
14826 // row was removed (the row comp was removed), however now that the user
14827 // can provide components for cells, the destroy method gets call when this
14828 // happens so no longer need to fire event.
14829 addRowCompListener: this.rowComp ? this.rowComp.addEventListener.bind(this.rowComp) : null,
14830 addRenderedRowListener: function (eventType, listener) {
14831 console.warn('ag-Grid: since ag-Grid .v11, params.addRenderedRowListener() is now params.addRowCompListener()');
14832 if (_this.rowComp) {
14833 _this.rowComp.addEventListener(eventType, listener);
14834 }
14835 }
14836 };
14837 return params;
14838 };
14839 CellComp.prototype.formatValue = function (value) {
14840 var valueFormatted = this.beans.valueFormatterService.formatValue(this.column, this.rowNode, this.scope, value);
14841 var valueFormattedExists = valueFormatted !== null && valueFormatted !== undefined;
14842 return valueFormattedExists ? valueFormatted : value;
14843 };
14844 CellComp.prototype.getValueToUse = function () {
14845 var valueFormattedExists = this.valueFormatted !== null && this.valueFormatted !== undefined;
14846 return valueFormattedExists ? this.valueFormatted : this.value;
14847 };
14848 CellComp.prototype.getValueAndFormat = function () {
14849 this.value = this.getValue();
14850 this.valueFormatted = this.beans.valueFormatterService.formatValue(this.column, this.rowNode, this.scope, this.value);
14851 };
14852 CellComp.prototype.getValue = function () {
14853 // if we don't check this, then the grid will render leaf groups as open even if we are not
14854 // allowing the user to open leaf groups. confused? remember for pivot mode we don't allow
14855 // opening leaf groups, so we have to force leafGroups to be closed in case the user expanded
14856 // them via the API, or user user expanded them in the UI before turning on pivot mode
14857 var lockedClosedGroup = this.rowNode.leafGroup && this.beans.columnController.isPivotMode();
14858 var isOpenGroup = this.rowNode.group && this.rowNode.expanded && !this.rowNode.footer && !lockedClosedGroup;
14859 if (isOpenGroup && this.beans.gridOptionsWrapper.isGroupIncludeFooter()) {
14860 // if doing grouping and footers, we don't want to include the agg value
14861 // in the header when the group is open
14862 return this.beans.valueService.getValue(this.column, this.rowNode, false, true);
14863 }
14864 else {
14865 return this.beans.valueService.getValue(this.column, this.rowNode);
14866 }
14867 };
14868 CellComp.prototype.onMouseEvent = function (eventName, mouseEvent) {
14869 if (utils_1._.isStopPropagationForAgGrid(mouseEvent)) {
14870 return;
14871 }
14872 switch (eventName) {
14873 case 'click':
14874 this.onCellClicked(mouseEvent);
14875 break;
14876 case 'mousedown':
14877 this.onMouseDown(mouseEvent);
14878 break;
14879 case 'dblclick':
14880 this.onCellDoubleClicked(mouseEvent);
14881 break;
14882 case 'mouseout':
14883 this.onMouseOut(mouseEvent);
14884 break;
14885 case 'mouseover':
14886 this.onMouseOver(mouseEvent);
14887 break;
14888 }
14889 };
14890 CellComp.prototype.dispatchCellContextMenuEvent = function (event) {
14891 var colDef = this.column.getColDef();
14892 var cellContextMenuEvent = this.createEvent(event, events_1.Events.EVENT_CELL_CONTEXT_MENU);
14893 this.beans.eventService.dispatchEvent(cellContextMenuEvent);
14894 if (colDef.onCellContextMenu) {
14895 // to make the callback async, do in a timeout
14896 setTimeout(function () { return colDef.onCellContextMenu(cellContextMenuEvent); }, 0);
14897 }
14898 };
14899 CellComp.prototype.createEvent = function (domEvent, eventType) {
14900 var event = {
14901 node: this.rowNode,
14902 data: this.rowNode.data,
14903 value: this.value,
14904 column: this.column,
14905 colDef: this.column.getColDef(),
14906 context: this.beans.gridOptionsWrapper.getContext(),
14907 api: this.beans.gridApi,
14908 columnApi: this.beans.columnApi,
14909 rowPinned: this.rowNode.rowPinned,
14910 event: domEvent,
14911 type: eventType,
14912 rowIndex: this.rowNode.rowIndex
14913 };
14914 // because we are hacking in $scope for angular 1, we have to de-reference
14915 if (this.scope) {
14916 event.$scope = this.scope;
14917 }
14918 return event;
14919 };
14920 CellComp.prototype.onMouseOut = function (mouseEvent) {
14921 var cellMouseOutEvent = this.createEvent(mouseEvent, events_1.Events.EVENT_CELL_MOUSE_OUT);
14922 this.beans.eventService.dispatchEvent(cellMouseOutEvent);
14923 this.beans.columnHoverService.clearMouseOver();
14924 };
14925 CellComp.prototype.onMouseOver = function (mouseEvent) {
14926 var cellMouseOverEvent = this.createEvent(mouseEvent, events_1.Events.EVENT_CELL_MOUSE_OVER);
14927 this.beans.eventService.dispatchEvent(cellMouseOverEvent);
14928 this.beans.columnHoverService.setMouseOver([this.column]);
14929 };
14930 CellComp.prototype.onCellDoubleClicked = function (mouseEvent) {
14931 var colDef = this.column.getColDef();
14932 // always dispatch event to eventService
14933 var cellDoubleClickedEvent = this.createEvent(mouseEvent, events_1.Events.EVENT_CELL_DOUBLE_CLICKED);
14934 this.beans.eventService.dispatchEvent(cellDoubleClickedEvent);
14935 // check if colDef also wants to handle event
14936 if (typeof colDef.onCellDoubleClicked === 'function') {
14937 // to make the callback async, do in a timeout
14938 setTimeout(function () { return colDef.onCellDoubleClicked(cellDoubleClickedEvent); }, 0);
14939 }
14940 var editOnDoubleClick = !this.beans.gridOptionsWrapper.isSingleClickEdit()
14941 && !this.beans.gridOptionsWrapper.isSuppressClickEdit();
14942 if (editOnDoubleClick) {
14943 this.startRowOrCellEdit();
14944 }
14945 };
14946 // called by rowRenderer when user navigates via tab key
14947 CellComp.prototype.startRowOrCellEdit = function (keyPress, charPress) {
14948 if (this.beans.gridOptionsWrapper.isFullRowEdit()) {
14949 this.rowComp.startRowEditing(keyPress, charPress, this);
14950 }
14951 else {
14952 this.startEditingIfEnabled(keyPress, charPress, true);
14953 }
14954 };
14955 CellComp.prototype.isCellEditable = function () {
14956 return this.column.isCellEditable(this.rowNode);
14957 };
14958 // either called internally if single cell editing, or called by rowRenderer if row editing
14959 CellComp.prototype.startEditingIfEnabled = function (keyPress, charPress, cellStartedEdit) {
14960 if (keyPress === void 0) { keyPress = null; }
14961 if (charPress === void 0) { charPress = null; }
14962 if (cellStartedEdit === void 0) { cellStartedEdit = false; }
14963 // don't do it if not editable
14964 if (!this.isCellEditable()) {
14965 return;
14966 }
14967 // don't do it if already editing
14968 if (this.editingCell) {
14969 return;
14970 }
14971 this.editingCell = true;
14972 this.cellEditorVersion++;
14973 var callback = this.afterCellEditorCreated.bind(this, this.cellEditorVersion);
14974 var params = this.createCellEditorParams(keyPress, charPress, cellStartedEdit);
14975 this.beans.cellEditorFactory.createCellEditor(this.column.getColDef(), params).then(callback);
14976 // if we don't do this, and editor component is async, then there will be a period
14977 // when the component isn't present and keyboard navigation won't work - so example
14978 // of user hitting tab quickly (more quickly than renderers getting created) won't work
14979 var cellEditorAsync = utils_1._.missing(this.cellEditor);
14980 if (cellEditorAsync && cellStartedEdit) {
14981 this.focusCell(true);
14982 }
14983 };
14984 CellComp.prototype.afterCellEditorCreated = function (cellEditorVersion, cellEditor) {
14985 // if editingCell=false, means user cancelled the editor before component was ready.
14986 // if versionMismatch, then user cancelled the edit, then started the edit again, and this
14987 // is the first editor which is now stale.
14988 var versionMismatch = cellEditorVersion !== this.cellEditorVersion;
14989 if (versionMismatch || !this.editingCell) {
14990 if (cellEditor.destroy) {
14991 cellEditor.destroy();
14992 }
14993 return;
14994 }
14995 if (cellEditor.isCancelBeforeStart && cellEditor.isCancelBeforeStart()) {
14996 if (cellEditor.destroy) {
14997 cellEditor.destroy();
14998 }
14999 this.editingCell = false;
15000 return;
15001 }
15002 if (!cellEditor.getGui) {
15003 console.warn("ag-Grid: cellEditor for column " + this.column.getId() + " is missing getGui() method");
15004 // no getGui, for React guys, see if they attached a react component directly
15005 if (cellEditor.render) {
15006 console.warn("ag-Grid: we found 'render' on the component, are you trying to set a React renderer but added it as colDef.cellEditor instead of colDef.cellEditorFmk?");
15007 }
15008 if (cellEditor.destroy) {
15009 cellEditor.destroy();
15010 }
15011 this.editingCell = false;
15012 return;
15013 }
15014 this.cellEditor = cellEditor;
15015 this.cellEditorInPopup = cellEditor.isPopup && cellEditor.isPopup();
15016 this.setInlineEditingClass();
15017 if (this.cellEditorInPopup) {
15018 this.addPopupCellEditor();
15019 }
15020 else {
15021 this.addInCellEditor();
15022 }
15023 if (cellEditor.afterGuiAttached) {
15024 cellEditor.afterGuiAttached();
15025 }
15026 var event = this.createEvent(null, events_1.Events.EVENT_CELL_EDITING_STARTED);
15027 this.beans.eventService.dispatchEvent(event);
15028 };
15029 CellComp.prototype.addInCellEditor = function () {
15030 utils_1._.removeAllChildren(this.getGui());
15031 this.getGui().appendChild(this.cellEditor.getGui());
15032 this.angular1Compile();
15033 };
15034 CellComp.prototype.addPopupCellEditor = function () {
15035 var _this = this;
15036 var ePopupGui = this.cellEditor.getGui();
15037 this.hideEditorPopup = this.beans.popupService.addAsModalPopup(ePopupGui, true,
15038 // callback for when popup disappears
15039 function () {
15040 _this.onPopupEditorClosed();
15041 });
15042 this.beans.popupService.positionPopupOverComponent({
15043 column: this.column,
15044 rowNode: this.rowNode,
15045 type: 'popupCellEditor',
15046 eventSource: this.getGui(),
15047 ePopup: ePopupGui,
15048 keepWithinBounds: true
15049 });
15050 this.angular1Compile();
15051 };
15052 CellComp.prototype.onPopupEditorClosed = function () {
15053 // we only call stopEditing if we are editing, as
15054 // it's possible the popup called 'stop editing'
15055 // before this, eg if 'enter key' was pressed on
15056 // the editor.
15057 if (this.editingCell) {
15058 // note: this only happens when use clicks outside of the grid. if use clicks on another
15059 // cell, then the editing will have already stopped on this cell
15060 this.stopRowOrCellEdit();
15061 // we only focus cell again if this cell is still focused. it is possible
15062 // it is not focused if the user cancelled the edit by clicking on another
15063 // cell outside of this one
15064 if (this.beans.focusedCellController.isCellFocused(this.gridCell)) {
15065 this.focusCell(true);
15066 }
15067 }
15068 };
15069 // if we are editing inline, then we don't have the padding in the cell (set in the themes)
15070 // to allow the text editor full access to the entire cell
15071 CellComp.prototype.setInlineEditingClass = function () {
15072 // ag-cell-inline-editing - appears when user is inline editing
15073 // ag-cell-not-inline-editing - appears when user is no inline editing
15074 // ag-cell-popup-editing - appears when user is editing cell in popup (appears on the cell, not on the popup)
15075 // note: one of {ag-cell-inline-editing, ag-cell-not-inline-editing} is always present, they toggle.
15076 // however {ag-cell-popup-editing} shows when popup, so you have both {ag-cell-popup-editing}
15077 // and {ag-cell-not-inline-editing} showing at the same time.
15078 var editingInline = this.editingCell && !this.cellEditorInPopup;
15079 var popupEditorShowing = this.editingCell && this.cellEditorInPopup;
15080 utils_1._.addOrRemoveCssClass(this.getGui(), "ag-cell-inline-editing", editingInline);
15081 utils_1._.addOrRemoveCssClass(this.getGui(), "ag-cell-not-inline-editing", !editingInline);
15082 utils_1._.addOrRemoveCssClass(this.getGui(), "ag-cell-popup-editing", popupEditorShowing);
15083 utils_1._.addOrRemoveCssClass(this.getGui().parentNode, "ag-row-inline-editing", editingInline);
15084 utils_1._.addOrRemoveCssClass(this.getGui().parentNode, "ag-row-not-inline-editing", !editingInline);
15085 };
15086 CellComp.prototype.createCellEditorParams = function (keyPress, charPress, cellStartedEdit) {
15087 var params = {
15088 value: this.getValue(),
15089 keyPress: keyPress,
15090 charPress: charPress,
15091 column: this.column,
15092 rowIndex: this.gridCell.rowIndex,
15093 node: this.rowNode,
15094 api: this.beans.gridOptionsWrapper.getApi(),
15095 cellStartedEdit: cellStartedEdit,
15096 columnApi: this.beans.gridOptionsWrapper.getColumnApi(),
15097 context: this.beans.gridOptionsWrapper.getContext(),
15098 $scope: this.scope,
15099 onKeyDown: this.onKeyDown.bind(this),
15100 stopEditing: this.stopEditingAndFocus.bind(this),
15101 eGridCell: this.getGui(),
15102 parseValue: this.parseValue.bind(this),
15103 formatValue: this.formatValue.bind(this)
15104 };
15105 return params;
15106 };
15107 // cell editors call this, when they want to stop for reasons other
15108 // than what we pick up on. eg selecting from a dropdown ends editing.
15109 CellComp.prototype.stopEditingAndFocus = function (suppressNavigateAfterEdit) {
15110 if (suppressNavigateAfterEdit === void 0) { suppressNavigateAfterEdit = false; }
15111 this.stopRowOrCellEdit();
15112 this.focusCell(true);
15113 if (!suppressNavigateAfterEdit) {
15114 this.navigateAfterEdit();
15115 }
15116 };
15117 CellComp.prototype.parseValue = function (newValue) {
15118 var params = {
15119 node: this.rowNode,
15120 data: this.rowNode.data,
15121 oldValue: this.value,
15122 newValue: newValue,
15123 colDef: this.column.getColDef(),
15124 column: this.column,
15125 api: this.beans.gridOptionsWrapper.getApi(),
15126 columnApi: this.beans.gridOptionsWrapper.getColumnApi(),
15127 context: this.beans.gridOptionsWrapper.getContext()
15128 };
15129 var valueParser = this.column.getColDef().valueParser;
15130 return utils_1._.exists(valueParser) ? this.beans.expressionService.evaluate(valueParser, params) : newValue;
15131 };
15132 CellComp.prototype.focusCell = function (forceBrowserFocus) {
15133 if (forceBrowserFocus === void 0) { forceBrowserFocus = false; }
15134 this.beans.focusedCellController.setFocusedCell(this.gridCell.rowIndex, this.column, this.rowNode.rowPinned, forceBrowserFocus);
15135 };
15136 CellComp.prototype.setFocusInOnEditor = function () {
15137 if (this.editingCell) {
15138 if (this.cellEditor && this.cellEditor.focusIn) {
15139 // if the editor is present, then we just focus it
15140 this.cellEditor.focusIn();
15141 }
15142 else {
15143 // if the editor is not present, it means async cell editor (eg React fibre)
15144 // and we are trying to set focus before the cell editor is present, so we
15145 // focus the cell instead
15146 this.focusCell(true);
15147 }
15148 }
15149 };
15150 CellComp.prototype.isEditing = function () {
15151 return this.editingCell;
15152 };
15153 CellComp.prototype.onKeyDown = function (event) {
15154 var key = event.which || event.keyCode;
15155 // give user a chance to cancel event processing
15156 if (this.doesUserWantToCancelKeyboardEvent(event)) {
15157 return;
15158 }
15159 switch (key) {
15160 case constants_1.Constants.KEY_ENTER:
15161 this.onEnterKeyDown();
15162 break;
15163 case constants_1.Constants.KEY_F2:
15164 this.onF2KeyDown();
15165 break;
15166 case constants_1.Constants.KEY_ESCAPE:
15167 this.onEscapeKeyDown();
15168 break;
15169 case constants_1.Constants.KEY_TAB:
15170 this.onTabKeyDown(event);
15171 break;
15172 case constants_1.Constants.KEY_BACKSPACE:
15173 case constants_1.Constants.KEY_DELETE:
15174 this.onBackspaceOrDeleteKeyPressed(key);
15175 break;
15176 case constants_1.Constants.KEY_DOWN:
15177 case constants_1.Constants.KEY_UP:
15178 case constants_1.Constants.KEY_RIGHT:
15179 case constants_1.Constants.KEY_LEFT:
15180 this.onNavigationKeyPressed(event, key);
15181 break;
15182 }
15183 };
15184 CellComp.prototype.doesUserWantToCancelKeyboardEvent = function (event) {
15185 var callback = this.column.getColDef().suppressKeyboardEvent;
15186 if (utils_1._.missing(callback)) {
15187 return false;
15188 }
15189 else {
15190 // if editing is null or undefined, this sets it to false
15191 var params = {
15192 event: event,
15193 editing: this.editingCell,
15194 column: this.column,
15195 api: this.beans.gridOptionsWrapper.getApi(),
15196 node: this.rowNode,
15197 data: this.rowNode.data,
15198 colDef: this.column.getColDef(),
15199 context: this.beans.gridOptionsWrapper.getContext(),
15200 columnApi: this.beans.gridOptionsWrapper.getColumnApi()
15201 };
15202 return callback(params);
15203 }
15204 };
15205 CellComp.prototype.setFocusOutOnEditor = function () {
15206 if (this.editingCell && this.cellEditor && this.cellEditor.focusOut) {
15207 this.cellEditor.focusOut();
15208 }
15209 };
15210 CellComp.prototype.onNavigationKeyPressed = function (event, key) {
15211 if (this.editingCell) {
15212 this.stopRowOrCellEdit();
15213 }
15214 if (event.shiftKey && this.rangeSelectionEnabled) {
15215 this.onShiftRangeSelect(key);
15216 }
15217 else {
15218 this.beans.rowRenderer.navigateToNextCell(event, key, this.gridCell, true);
15219 }
15220 // if we don't prevent default, the grid will scroll with the navigation keys
15221 event.preventDefault();
15222 };
15223 CellComp.prototype.onShiftRangeSelect = function (key) {
15224 var success = this.beans.rangeController.extendRangeInDirection(this.gridCell, key);
15225 if (!success) {
15226 return;
15227 }
15228 var ranges = this.beans.rangeController.getCellRanges();
15229 // this should never happen, as extendRangeFromCell should always have one range after getting called
15230 if (utils_1._.missing(ranges) || ranges.length !== 1) {
15231 return;
15232 }
15233 var endCell = ranges[0].end;
15234 this.beans.rowRenderer.ensureCellVisible(endCell);
15235 };
15236 CellComp.prototype.onTabKeyDown = function (event) {
15237 if (this.beans.gridOptionsWrapper.isSuppressTabbing()) {
15238 return;
15239 }
15240 this.beans.rowRenderer.onTabKeyDown(this, event);
15241 };
15242 CellComp.prototype.onBackspaceOrDeleteKeyPressed = function (key) {
15243 if (!this.editingCell) {
15244 this.startRowOrCellEdit(key);
15245 }
15246 };
15247 CellComp.prototype.onEnterKeyDown = function () {
15248 if (this.editingCell || this.rowComp.isEditing()) {
15249 this.stopEditingAndFocus();
15250 }
15251 else {
15252 if (this.beans.gridOptionsWrapper.isEnterMovesDown()) {
15253 this.beans.rowRenderer.navigateToNextCell(null, constants_1.Constants.KEY_DOWN, this.gridCell, false);
15254 }
15255 else {
15256 this.startRowOrCellEdit(constants_1.Constants.KEY_ENTER);
15257 }
15258 }
15259 };
15260 CellComp.prototype.navigateAfterEdit = function () {
15261 var fullRowEdit = this.beans.gridOptionsWrapper.isFullRowEdit();
15262 if (fullRowEdit) {
15263 return;
15264 }
15265 var enterMovesDownAfterEdit = this.beans.gridOptionsWrapper.isEnterMovesDownAfterEdit();
15266 if (enterMovesDownAfterEdit) {
15267 this.beans.rowRenderer.navigateToNextCell(null, constants_1.Constants.KEY_DOWN, this.gridCell, false);
15268 }
15269 };
15270 CellComp.prototype.onF2KeyDown = function () {
15271 if (!this.editingCell) {
15272 this.startRowOrCellEdit(constants_1.Constants.KEY_F2);
15273 }
15274 };
15275 CellComp.prototype.onEscapeKeyDown = function () {
15276 if (this.editingCell) {
15277 this.stopRowOrCellEdit(true);
15278 this.focusCell(true);
15279 }
15280 };
15281 CellComp.prototype.onKeyPress = function (event) {
15282 // check this, in case focus is on a (for example) a text field inside the cell,
15283 // in which cse we should not be listening for these key pressed
15284 var eventTarget = utils_1._.getTarget(event);
15285 var eventOnChildComponent = eventTarget !== this.getGui();
15286 if (eventOnChildComponent) {
15287 return;
15288 }
15289 if (!this.editingCell) {
15290 var pressedChar = String.fromCharCode(event.charCode);
15291 if (pressedChar === ' ') {
15292 this.onSpaceKeyPressed(event);
15293 }
15294 else {
15295 if (utils_1._.isEventFromPrintableCharacter(event)) {
15296 this.startRowOrCellEdit(null, pressedChar);
15297 // if we don't prevent default, then the keypress also gets applied to the text field
15298 // (at least when doing the default editor), but we need to allow the editor to decide
15299 // what it wants to do. we only do this IF editing was started - otherwise it messes
15300 // up when the use is not doing editing, but using rendering with text fields in cellRenderer
15301 // (as it would block the the user from typing into text fields).
15302 event.preventDefault();
15303 }
15304 }
15305 }
15306 };
15307 CellComp.prototype.onSpaceKeyPressed = function (event) {
15308 if (!this.editingCell && this.beans.gridOptionsWrapper.isRowSelection()) {
15309 var selected = this.rowNode.isSelected();
15310 this.rowNode.setSelected(!selected);
15311 }
15312 // prevent default as space key, by default, moves browser scroll down
15313 event.preventDefault();
15314 };
15315 CellComp.prototype.onMouseDown = function (mouseEvent) {
15316 // we pass false to focusCell, as we don't want the cell to focus
15317 // also get the browser focus. if we did, then the cellRenderer could
15318 // have a text field in it, for example, and as the user clicks on the
15319 // text field, the text field, the focus doesn't get to the text
15320 // field, instead to goes to the div behind, making it impossible to
15321 // select the text field.
15322 this.focusCell(false);
15323 // if it's a right click, then if the cell is already in range,
15324 // don't change the range, however if the cell is not in a range,
15325 // we set a new range
15326 if (this.beans.rangeController) {
15327 var thisCell = this.gridCell;
15328 if (mouseEvent.shiftKey) {
15329 this.beans.rangeController.extendRangeToCell(thisCell);
15330 }
15331 else {
15332 var cellAlreadyInRange = this.beans.rangeController.isCellInAnyRange(thisCell);
15333 if (!cellAlreadyInRange) {
15334 var ctrlKeyPressed = mouseEvent.ctrlKey || mouseEvent.metaKey;
15335 this.beans.rangeController.setRangeToCell(thisCell, ctrlKeyPressed);
15336 }
15337 }
15338 }
15339 var cellMouseDownEvent = this.createEvent(mouseEvent, events_1.Events.EVENT_CELL_MOUSE_DOWN);
15340 this.beans.eventService.dispatchEvent(cellMouseDownEvent);
15341 };
15342 // returns true if on iPad and this is second 'click' event in 200ms
15343 CellComp.prototype.isDoubleClickOnIPad = function () {
15344 if (!utils_1._.isUserAgentIPad()) {
15345 return false;
15346 }
15347 var nowMillis = new Date().getTime();
15348 var res = nowMillis - this.lastIPadMouseClickEvent < 200;
15349 this.lastIPadMouseClickEvent = nowMillis;
15350 return res;
15351 };
15352 CellComp.prototype.onCellClicked = function (mouseEvent) {
15353 // iPad doesn't have double click - so we need to mimic it do enable editing for
15354 // iPad.
15355 if (this.isDoubleClickOnIPad()) {
15356 this.onCellDoubleClicked(mouseEvent);
15357 mouseEvent.preventDefault(); // if we don't do this, then ipad zooms in
15358 return;
15359 }
15360 var cellClickedEvent = this.createEvent(mouseEvent, events_1.Events.EVENT_CELL_CLICKED);
15361 this.beans.eventService.dispatchEvent(cellClickedEvent);
15362 var colDef = this.column.getColDef();
15363 if (colDef.onCellClicked) {
15364 // to make callback async, do in a timeout
15365 setTimeout(function () { return colDef.onCellClicked(cellClickedEvent); }, 0);
15366 }
15367 var editOnSingleClick = (this.beans.gridOptionsWrapper.isSingleClickEdit() || colDef.singleClickEdit)
15368 && !this.beans.gridOptionsWrapper.isSuppressClickEdit();
15369 if (editOnSingleClick) {
15370 this.startRowOrCellEdit();
15371 }
15372 this.doIeFocusHack();
15373 };
15374 // https://ag-grid.com/forum/showthread.php?tid=4362
15375 // when in IE or Edge, when you are editing a cell, then click on another cell,
15376 // the other cell doesn't keep focus, so navigation keys, type to start edit etc
15377 // don't work. appears that when you update the dom in IE it looses focus
15378 CellComp.prototype.doIeFocusHack = function () {
15379 if (utils_1._.isBrowserIE() || utils_1._.isBrowserEdge()) {
15380 if (utils_1._.missing(document.activeElement) || document.activeElement === document.body) {
15381 // console.log('missing focus');
15382 this.getGui().focus();
15383 }
15384 }
15385 };
15386 CellComp.prototype.createGridCellVo = function () {
15387 var gridCellDef = {
15388 rowIndex: this.rowNode.rowIndex,
15389 floating: this.rowNode.rowPinned,
15390 column: this.column
15391 };
15392 this.gridCell = new gridCell_1.GridCell(gridCellDef);
15393 };
15394 CellComp.prototype.getGridCell = function () {
15395 return this.gridCell;
15396 };
15397 CellComp.prototype.getParentRow = function () {
15398 return this.eParentRow;
15399 };
15400 CellComp.prototype.setParentRow = function (eParentRow) {
15401 this.eParentRow = eParentRow;
15402 };
15403 CellComp.prototype.getColumn = function () {
15404 return this.column;
15405 };
15406 CellComp.prototype.detach = function () {
15407 this.eParentRow.removeChild(this.getGui());
15408 };
15409 // if the row is also getting destroyed, then we don't need to remove from dom,
15410 // as the row will also get removed, so no need to take out the cells from the row
15411 // if the row is going (removing is an expensive operation, so only need to remove
15412 // the top part)
15413 CellComp.prototype.destroy = function () {
15414 _super.prototype.destroy.call(this);
15415 if (this.cellEditor && this.cellEditor.destroy) {
15416 this.cellEditor.destroy();
15417 this.cellEditor = null;
15418 }
15419 if (this.cellRenderer && this.cellRenderer.destroy) {
15420 this.cellRenderer.destroy();
15421 this.cellRenderer = null;
15422 }
15423 };
15424 CellComp.prototype.onLeftChanged = function () {
15425 var left = this.getCellLeft();
15426 this.getGui().style.left = left + 'px';
15427 };
15428 CellComp.prototype.onWidthChanged = function () {
15429 var width = this.getCellWidth();
15430 this.getGui().style.width = width + 'px';
15431 };
15432 CellComp.prototype.getRangeClasses = function () {
15433 var res = [];
15434 if (!this.rangeSelectionEnabled) {
15435 return res;
15436 }
15437 if (this.rangeCount !== 0) {
15438 res.push('ag-cell-range-selected');
15439 }
15440 if (this.rangeCount === 1) {
15441 res.push('ag-cell-range-selected-1');
15442 }
15443 if (this.rangeCount === 2) {
15444 res.push('ag-cell-range-selected-2');
15445 }
15446 if (this.rangeCount === 3) {
15447 res.push('ag-cell-range-selected-3');
15448 }
15449 if (this.rangeCount >= 4) {
15450 res.push('ag-cell-range-selected-4');
15451 }
15452 return res;
15453 };
15454 CellComp.prototype.onRowIndexChanged = function () {
15455 // when index changes, this influences items that need the index, so we update the
15456 // grid cell so they are working off the new index.
15457 this.createGridCellVo();
15458 // when the index of the row changes, ie means the cell may have lost or gained focus
15459 this.onCellFocused();
15460 // check range selection
15461 this.onRangeSelectionChanged();
15462 };
15463 CellComp.prototype.onRangeSelectionChanged = function () {
15464 if (!this.beans.enterprise) {
15465 return;
15466 }
15467 var newRangeCount = this.beans.rangeController.getCellRangeCount(this.gridCell);
15468 var element = this.getGui();
15469 if (this.rangeCount !== newRangeCount) {
15470 utils_1._.addOrRemoveCssClass(element, 'ag-cell-range-selected', newRangeCount !== 0);
15471 utils_1._.addOrRemoveCssClass(element, 'ag-cell-range-selected-1', newRangeCount === 1);
15472 utils_1._.addOrRemoveCssClass(element, 'ag-cell-range-selected-2', newRangeCount === 2);
15473 utils_1._.addOrRemoveCssClass(element, 'ag-cell-range-selected-3', newRangeCount === 3);
15474 utils_1._.addOrRemoveCssClass(element, 'ag-cell-range-selected-4', newRangeCount >= 4);
15475 this.rangeCount = newRangeCount;
15476 }
15477 };
15478 CellComp.prototype.onFirstRightPinnedChanged = function () {
15479 var firstRightPinned = this.column.isFirstRightPinned();
15480 if (this.firstRightPinned !== firstRightPinned) {
15481 this.firstRightPinned = firstRightPinned;
15482 utils_1._.addOrRemoveCssClass(this.getGui(), 'ag-cell-first-right-pinned', firstRightPinned);
15483 }
15484 };
15485 CellComp.prototype.onLastLeftPinnedChanged = function () {
15486 var lastLeftPinned = this.column.isLastLeftPinned();
15487 if (this.lastLeftPinned !== lastLeftPinned) {
15488 this.lastLeftPinned = lastLeftPinned;
15489 utils_1._.addOrRemoveCssClass(this.getGui(), 'ag-cell-last-left-pinned', lastLeftPinned);
15490 }
15491 };
15492 CellComp.prototype.populateTemplate = function () {
15493 if (this.usingWrapper) {
15494 this.eParentOfValue = this.getRefElement('eCellValue');
15495 this.eCellWrapper = this.getRefElement('eCellWrapper');
15496 if (this.includeRowDraggingComponent) {
15497 this.addRowDragging();
15498 }
15499 if (this.includeSelectionComponent) {
15500 this.addSelectionCheckbox();
15501 }
15502 }
15503 else {
15504 this.eParentOfValue = this.getGui();
15505 }
15506 };
15507 CellComp.prototype.addRowDragging = function () {
15508 // row dragging only available in default row model
15509 if (!this.beans.gridOptionsWrapper.isRowModelDefault()) {
15510 utils_1._.doOnce(function () { return console.warn('ag-Grid: row dragging is only allowed in the In Memory Row Model'); }, 'CellComp.addRowDragging');
15511 return;
15512 }
15513 if (this.beans.gridOptionsWrapper.isPagination()) {
15514 utils_1._.doOnce(function () { return console.warn('ag-Grid: row dragging is not possible when doing pagination'); }, 'CellComp.addRowDragging');
15515 return;
15516 }
15517 var rowDraggingComp = new rowDragComp_1.RowDragComp(this.rowNode, this.column, this.getValueToUse(), this.beans);
15518 this.addFeature(this.beans.context, rowDraggingComp);
15519 // let visibleFunc = this.column.getColDef().checkboxSelection;
15520 // visibleFunc = typeof visibleFunc === 'function' ? visibleFunc : null;
15521 // cbSelectionComponent.init({rowNode: this.rowNode, column: this.column, visibleFunc: visibleFunc});
15522 // put the checkbox in before the value
15523 this.eCellWrapper.insertBefore(rowDraggingComp.getGui(), this.eParentOfValue);
15524 };
15525 CellComp.prototype.addSelectionCheckbox = function () {
15526 var cbSelectionComponent = new checkboxSelectionComponent_1.CheckboxSelectionComponent();
15527 this.beans.context.wireBean(cbSelectionComponent);
15528 var visibleFunc = this.column.getColDef().checkboxSelection;
15529 visibleFunc = typeof visibleFunc === 'function' ? visibleFunc : null;
15530 cbSelectionComponent.init({ rowNode: this.rowNode, column: this.column, visibleFunc: visibleFunc });
15531 this.addDestroyFunc(function () { return cbSelectionComponent.destroy(); });
15532 // put the checkbox in before the value
15533 this.eCellWrapper.insertBefore(cbSelectionComponent.getGui(), this.eParentOfValue);
15534 };
15535 CellComp.prototype.addDomData = function () {
15536 var _this = this;
15537 var element = this.getGui();
15538 this.beans.gridOptionsWrapper.setDomData(element, CellComp.DOM_DATA_KEY_CELL_COMP, this);
15539 this.addDestroyFunc(function () {
15540 return _this.beans.gridOptionsWrapper.setDomData(element, CellComp.DOM_DATA_KEY_CELL_COMP, null);
15541 });
15542 };
15543 CellComp.prototype.onCellFocused = function (event) {
15544 var cellFocused = this.beans.focusedCellController.isCellFocused(this.gridCell);
15545 // see if we need to change the classes on this cell
15546 if (cellFocused !== this.cellFocused) {
15547 // if we are not doing cell selection, then the focus class does not change, all cells will
15548 // stay with ag-cell-no-focus class
15549 var doingFocusCss = !this.beans.gridOptionsWrapper.isSuppressCellSelection();
15550 if (doingFocusCss) {
15551 utils_1._.addOrRemoveCssClass(this.getGui(), 'ag-cell-focus', cellFocused);
15552 utils_1._.addOrRemoveCssClass(this.getGui(), 'ag-cell-no-focus', !cellFocused);
15553 }
15554 this.cellFocused = cellFocused;
15555 }
15556 // if this cell was just focused, see if we need to force browser focus, his can
15557 // happen if focus is programmatically set.
15558 if (cellFocused && event && event.forceBrowserFocus) {
15559 this.getGui().focus();
15560 }
15561 // if another cell was focused, and we are editing, then stop editing
15562 var fullRowEdit = this.beans.gridOptionsWrapper.isFullRowEdit();
15563 if (!cellFocused && !fullRowEdit && this.editingCell) {
15564 this.stopRowOrCellEdit();
15565 }
15566 };
15567 // pass in 'true' to cancel the editing.
15568 CellComp.prototype.stopRowOrCellEdit = function (cancel) {
15569 if (cancel === void 0) { cancel = false; }
15570 if (this.beans.gridOptionsWrapper.isFullRowEdit()) {
15571 this.rowComp.stopRowEditing(cancel);
15572 }
15573 else {
15574 this.stopEditing(cancel);
15575 }
15576 };
15577 CellComp.prototype.stopEditing = function (cancel) {
15578 if (cancel === void 0) { cancel = false; }
15579 if (!this.editingCell) {
15580 return;
15581 }
15582 // if no cell editor, this means due to async, that the cell editor never got initialised,
15583 // so we just carry on regardless as if the editing was never started.
15584 if (!this.cellEditor) {
15585 this.editingCell = false;
15586 return;
15587 }
15588 var newValueExists = false;
15589 var newValue;
15590 if (!cancel) {
15591 // also have another option here to cancel after editing, so for example user could have a popup editor and
15592 // it is closed by user clicking outside the editor. then the editor will close automatically (with false
15593 // passed above) and we need to see if the editor wants to accept the new value.
15594 var userWantsToCancel = this.cellEditor.isCancelAfterEnd && this.cellEditor.isCancelAfterEnd();
15595 if (!userWantsToCancel) {
15596 newValue = this.cellEditor.getValue();
15597 newValueExists = true;
15598 }
15599 }
15600 // it is important we set this after setValue() above, as otherwise the cell will flash
15601 // when editing stops. the 'refresh' method checks editing, and doesn't refresh editing cells.
15602 // thus it will skip the refresh on this cell until the end of this method where we call
15603 // refresh directly and we suppress the flash.
15604 this.editingCell = false;
15605 if (this.cellEditor.destroy) {
15606 this.cellEditor.destroy();
15607 }
15608 // important to clear this out - as parts of the code will check for
15609 // this to see if an async cellEditor has yet to be created
15610 this.cellEditor = null;
15611 if (this.cellEditorInPopup) {
15612 this.hideEditorPopup();
15613 this.hideEditorPopup = null;
15614 }
15615 else {
15616 utils_1._.removeAllChildren(this.getGui());
15617 // put the cell back the way it was before editing
15618 if (this.usingWrapper) {
15619 // if wrapper, then put the wrapper back
15620 this.getGui().appendChild(this.eCellWrapper);
15621 }
15622 else {
15623 // if cellRenderer, then put the gui back in. if the renderer has
15624 // a refresh, it will be called. however if it doesn't, then later
15625 // the renderer will be destroyed and a new one will be created.
15626 if (this.cellRenderer) {
15627 // we know it's a dom element (not a string) because we converted
15628 // it after the gui was attached if it was a string.
15629 var eCell = this.cellRendererGui;
15630 // can be null if cell was previously null / contained empty string,
15631 // this will result in new value not being rendered.
15632 if (eCell) {
15633 this.getGui().appendChild(eCell);
15634 }
15635 }
15636 }
15637 }
15638 this.setInlineEditingClass();
15639 if (newValueExists) {
15640 this.rowNode.setDataValue(this.column, newValue);
15641 this.getValueAndFormat();
15642 }
15643 // we suppress the flash, as it is not correct to flash the cell the user has finished editing,
15644 // the user doesn't need to flash as they were the one who did the edit, the flash is pointless
15645 // (as the flash is meant to draw the user to a change that they didn't manually do themselves).
15646 this.refreshCell({ forceRefresh: true, suppressFlash: true });
15647 var event = this.createEvent(null, events_1.Events.EVENT_CELL_EDITING_STOPPED);
15648 this.beans.eventService.dispatchEvent(event);
15649 };
15650 CellComp.DOM_DATA_KEY_CELL_COMP = 'cellComp';
15651 return CellComp;
15652}(component_1.Component));
15653exports.CellComp = CellComp;
15654
15655
15656/***/ }),
15657/* 37 */
15658/***/ (function(module, exports, __webpack_require__) {
15659
15660"use strict";
15661/**
15662 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
15663 * @version v18.1.2
15664 * @link http://www.ag-grid.com/
15665 * @license MIT
15666 */
15667
15668var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
15669 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
15670 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
15671 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
15672 return c > 3 && r && Object.defineProperty(target, key, r), r;
15673};
15674var __metadata = (this && this.__metadata) || function (k, v) {
15675 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
15676};
15677Object.defineProperty(exports, "__esModule", { value: true });
15678var utils_1 = __webpack_require__(1);
15679var constants_1 = __webpack_require__(9);
15680var context_1 = __webpack_require__(0);
15681var gridCore_1 = __webpack_require__(44);
15682var gridOptionsWrapper_1 = __webpack_require__(2);
15683var environment_1 = __webpack_require__(43);
15684var PopupService = (function () {
15685 function PopupService() {
15686 this.activePopupElements = [];
15687 }
15688 PopupService.prototype.getPopupParent = function () {
15689 var ePopupParent = this.gridOptionsWrapper.getPopupParent();
15690 if (ePopupParent) {
15691 // user provided popup parent, may not have the right theme applied
15692 return ePopupParent;
15693 }
15694 else {
15695 return this.gridCore.getRootGui();
15696 }
15697 };
15698 PopupService.prototype.positionPopupForMenu = function (params) {
15699 var sourceRect = params.eventSource.getBoundingClientRect();
15700 var parentRect = this.getPopupParent().getBoundingClientRect();
15701 var y = sourceRect.top - parentRect.top;
15702 y = this.keepYWithinBounds(params, y);
15703 var minWidth = (params.ePopup.clientWidth > 0) ? params.ePopup.clientWidth : 200;
15704 var widthOfParent = parentRect.right - parentRect.left;
15705 var maxX = widthOfParent - minWidth;
15706 // the x position of the popup depends on RTL or LTR. for normal cases, LTR, we put the child popup
15707 // to the right, unless it doesn't fit and we then put it to the left. for RTL it's the other way around,
15708 // we try place it first to the left, and then if not to the right.
15709 var x;
15710 if (this.gridOptionsWrapper.isEnableRtl()) {
15711 // for RTL, try left first
15712 x = xLeftPosition();
15713 if (x < 0) {
15714 x = xRightPosition();
15715 }
15716 if (x > maxX) {
15717 x = 0;
15718 }
15719 }
15720 else {
15721 // for LTR, try right first
15722 x = xRightPosition();
15723 if (x > maxX) {
15724 x = xLeftPosition();
15725 }
15726 if (x < 0) {
15727 x = 0;
15728 }
15729 }
15730 params.ePopup.style.left = x + "px";
15731 params.ePopup.style.top = y + "px";
15732 function xRightPosition() {
15733 return sourceRect.right - parentRect.left - 2;
15734 }
15735 function xLeftPosition() {
15736 return sourceRect.left - parentRect.left - minWidth;
15737 }
15738 };
15739 PopupService.prototype.positionPopupUnderMouseEvent = function (params) {
15740 var parentRect = this.getPopupParent().getBoundingClientRect();
15741 this.positionPopup({
15742 ePopup: params.ePopup,
15743 x: params.mouseEvent.clientX - parentRect.left,
15744 y: params.mouseEvent.clientY - parentRect.top,
15745 keepWithinBounds: true
15746 });
15747 this.callPostProcessPopup(params.ePopup, null, params.mouseEvent, params.type, params.column, params.rowNode);
15748 };
15749 PopupService.prototype.positionPopupUnderComponent = function (params) {
15750 var sourceRect = params.eventSource.getBoundingClientRect();
15751 var parentRect = this.getPopupParent().getBoundingClientRect();
15752 this.positionPopup({
15753 ePopup: params.ePopup,
15754 minWidth: params.minWidth,
15755 nudgeX: params.nudgeX,
15756 nudgeY: params.nudgeY,
15757 x: sourceRect.left - parentRect.left,
15758 y: sourceRect.top - parentRect.top + sourceRect.height,
15759 keepWithinBounds: params.keepWithinBounds
15760 });
15761 this.callPostProcessPopup(params.ePopup, params.eventSource, null, params.type, params.column, params.rowNode);
15762 };
15763 PopupService.prototype.callPostProcessPopup = function (ePopup, eventSource, mouseEvent, type, column, rowNode) {
15764 var callback = this.gridOptionsWrapper.getPostProcessPopupFunc();
15765 if (callback) {
15766 var params = {
15767 column: column,
15768 rowNode: rowNode,
15769 ePopup: ePopup,
15770 type: type,
15771 eventSource: eventSource,
15772 mouseEvent: mouseEvent
15773 };
15774 callback(params);
15775 }
15776 };
15777 PopupService.prototype.positionPopupOverComponent = function (params) {
15778 var sourceRect = params.eventSource.getBoundingClientRect();
15779 var parentRect = this.getPopupParent().getBoundingClientRect();
15780 this.positionPopup({
15781 ePopup: params.ePopup,
15782 minWidth: params.minWidth,
15783 nudgeX: params.nudgeX,
15784 nudgeY: params.nudgeY,
15785 x: sourceRect.left - parentRect.left,
15786 y: sourceRect.top - parentRect.top,
15787 keepWithinBounds: params.keepWithinBounds
15788 });
15789 this.callPostProcessPopup(params.ePopup, params.eventSource, null, params.type, params.column, params.rowNode);
15790 };
15791 PopupService.prototype.positionPopup = function (params) {
15792 var x = params.x;
15793 var y = params.y;
15794 if (params.nudgeX) {
15795 x += params.nudgeX;
15796 }
15797 if (params.nudgeY) {
15798 y += params.nudgeY;
15799 }
15800 // if popup is overflowing to the bottom, move it up
15801 if (params.keepWithinBounds) {
15802 x = this.keepXWithinBounds(params, x);
15803 y = this.keepYWithinBounds(params, y);
15804 }
15805 params.ePopup.style.left = x + "px";
15806 params.ePopup.style.top = y + "px";
15807 };
15808 PopupService.prototype.keepYWithinBounds = function (params, y) {
15809 var parentRect = this.getPopupParent().getBoundingClientRect();
15810 var minHeight;
15811 if (params.ePopup.clientHeight > 0) {
15812 minHeight = params.ePopup.clientHeight;
15813 }
15814 else {
15815 minHeight = 200;
15816 }
15817 var heightOfParent = parentRect.bottom - parentRect.top;
15818 var maxY = heightOfParent - minHeight - 5;
15819 if (y > maxY) {
15820 return maxY;
15821 }
15822 else if (y < 0) {
15823 return 0;
15824 }
15825 else {
15826 return y;
15827 }
15828 };
15829 PopupService.prototype.keepXWithinBounds = function (params, x) {
15830 var parentRect = this.getPopupParent().getBoundingClientRect();
15831 var minWidth;
15832 if (params.minWidth > 0) {
15833 minWidth = params.minWidth;
15834 }
15835 else if (params.ePopup.clientWidth > 0) {
15836 minWidth = params.ePopup.clientWidth;
15837 }
15838 else {
15839 minWidth = 200;
15840 }
15841 var widthOfParent = parentRect.right - parentRect.left;
15842 var maxX = widthOfParent - minWidth - 5;
15843 if (x > maxX) {
15844 return maxX;
15845 }
15846 else if (x < 0) {
15847 return 0;
15848 }
15849 else {
15850 return x;
15851 }
15852 };
15853 //adds an element to a div, but also listens to background checking for clicks,
15854 //so that when the background is clicked, the child is removed again, giving
15855 //a model look to popups.
15856 PopupService.prototype.addAsModalPopup = function (eChild, closeOnEsc, closedCallback, click) {
15857 var _this = this;
15858 var eBody = this.gridOptionsWrapper.getDocument();
15859 if (!eBody) {
15860 console.warn('ag-grid: could not find the body of the document, document.body is empty');
15861 return;
15862 }
15863 eChild.style.top = '0px';
15864 eChild.style.left = '0px';
15865 var popupAlreadyShown = utils_1.Utils.isVisible(eChild);
15866 if (popupAlreadyShown) {
15867 return;
15868 }
15869 var ePopupParent = this.getPopupParent();
15870 // add env CSS class to child, in case user provided a popup parent, which means
15871 // theme class may be missing
15872 var eWrapper = document.createElement('div');
15873 utils_1.Utils.addCssClass(eWrapper, this.environment.getTheme());
15874 eWrapper.appendChild(eChild);
15875 ePopupParent.appendChild(eWrapper);
15876 this.activePopupElements.push(eChild);
15877 var popupHidden = false;
15878 var hidePopupOnKeyboardEvent = function (event) {
15879 var key = event.which || event.keyCode;
15880 if (key === constants_1.Constants.KEY_ESCAPE) {
15881 hidePopup(null);
15882 }
15883 };
15884 var hidePopupOnMouseEvent = function (event) {
15885 hidePopup(event);
15886 };
15887 var hidePopupOnTouchEvent = function (event) {
15888 hidePopup(null, event);
15889 };
15890 var hidePopup = function (mouseEvent, touchEvent) {
15891 // we don't hide popup if the event was on the child, or any
15892 // children of this child
15893 if (_this.isEventFromCurrentPopup(mouseEvent, touchEvent, eChild)) {
15894 return;
15895 }
15896 // if the event to close is actually the open event, then ignore it
15897 if (_this.isEventSameChainAsOriginalEvent(click, mouseEvent, touchEvent)) {
15898 return;
15899 }
15900 // this method should only be called once. the client can have different
15901 // paths, each one wanting to close, so this method may be called multiple times.
15902 if (popupHidden) {
15903 return;
15904 }
15905 popupHidden = true;
15906 ePopupParent.removeChild(eWrapper);
15907 utils_1.Utils.removeFromArray(_this.activePopupElements, eChild);
15908 eBody.removeEventListener('keydown', hidePopupOnKeyboardEvent);
15909 eBody.removeEventListener('click', hidePopupOnMouseEvent);
15910 eBody.removeEventListener('touchstart', hidePopupOnTouchEvent);
15911 eBody.removeEventListener('contextmenu', hidePopupOnMouseEvent);
15912 if (closedCallback) {
15913 closedCallback();
15914 }
15915 };
15916 // if we add these listeners now, then the current mouse
15917 // click will be included, which we don't want
15918 setTimeout(function () {
15919 if (closeOnEsc) {
15920 eBody.addEventListener('keydown', hidePopupOnKeyboardEvent);
15921 }
15922 eBody.addEventListener('click', hidePopupOnMouseEvent);
15923 eBody.addEventListener('touchstart', hidePopupOnTouchEvent);
15924 eBody.addEventListener('contextmenu', hidePopupOnMouseEvent);
15925 }, 0);
15926 return hidePopup;
15927 };
15928 PopupService.prototype.isEventFromCurrentPopup = function (mouseEvent, touchEvent, eChild) {
15929 var event = mouseEvent ? mouseEvent : touchEvent;
15930 if (event) {
15931 var indexOfThisChild = this.activePopupElements.indexOf(eChild);
15932 for (var i = indexOfThisChild; i < this.activePopupElements.length; i++) {
15933 var element = this.activePopupElements[i];
15934 if (utils_1.Utils.isElementInEventPath(element, event)) {
15935 return true;
15936 }
15937 }
15938 }
15939 return false;
15940 };
15941 // in some browsers, the context menu event can be fired before the click event, which means
15942 // the context menu event could open the popup, but then the click event closes it straight away.
15943 PopupService.prototype.isEventSameChainAsOriginalEvent = function (originalClick, mouseEvent, touchEvent) {
15944 // we check the coordinates of the event, to see if it's the same event. there is a 1 / 1000 chance that
15945 // the event is a different event, however that is an edge case that is not very relevant (the user clicking
15946 // twice on the same location isn't a normal path).
15947 // event could be mouse event or touch event.
15948 var mouseEventOrTouch;
15949 if (mouseEvent) {
15950 // mouse event can be used direction, it has coordinates
15951 mouseEventOrTouch = mouseEvent;
15952 }
15953 else if (touchEvent) {
15954 // touch event doesn't have coordinates, need it's touch object
15955 mouseEventOrTouch = touchEvent.touches[0];
15956 }
15957 if (mouseEventOrTouch && originalClick) {
15958 // for x, allow 4px margin, to cover iPads, where touch (which opens menu) is followed
15959 // by browser click (when you life finger up, touch is interrupted as click in browser)
15960 var xMatch = Math.abs(originalClick.screenX - mouseEvent.screenX) < 5;
15961 var yMatch = Math.abs(originalClick.screenY - mouseEvent.screenY) < 5;
15962 if (xMatch && yMatch) {
15963 return true;
15964 }
15965 }
15966 return false;
15967 };
15968 __decorate([
15969 context_1.Autowired('gridCore'),
15970 __metadata("design:type", gridCore_1.GridCore)
15971 ], PopupService.prototype, "gridCore", void 0);
15972 __decorate([
15973 context_1.Autowired('gridOptionsWrapper'),
15974 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
15975 ], PopupService.prototype, "gridOptionsWrapper", void 0);
15976 __decorate([
15977 context_1.Autowired('environment'),
15978 __metadata("design:type", environment_1.Environment)
15979 ], PopupService.prototype, "environment", void 0);
15980 PopupService = __decorate([
15981 context_1.Bean('popupService')
15982 ], PopupService);
15983 return PopupService;
15984}());
15985exports.PopupService = PopupService;
15986
15987
15988/***/ }),
15989/* 38 */
15990/***/ (function(module, exports, __webpack_require__) {
15991
15992"use strict";
15993/**
15994 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
15995 * @version v18.1.2
15996 * @link http://www.ag-grid.com/
15997 * @license MIT
15998 */
15999
16000var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
16001 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
16002 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
16003 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
16004 return c > 3 && r && Object.defineProperty(target, key, r), r;
16005};
16006var __metadata = (this && this.__metadata) || function (k, v) {
16007 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
16008};
16009Object.defineProperty(exports, "__esModule", { value: true });
16010var context_1 = __webpack_require__(0);
16011var eventService_1 = __webpack_require__(3);
16012var events_1 = __webpack_require__(5);
16013var columnController_1 = __webpack_require__(4);
16014var columnApi_1 = __webpack_require__(7);
16015var gridApi_1 = __webpack_require__(6);
16016var gridOptionsWrapper_1 = __webpack_require__(2);
16017var ScrollVisibleService = (function () {
16018 function ScrollVisibleService() {
16019 }
16020 ScrollVisibleService.prototype.setScrollsVisible = function (params) {
16021 var atLeastOneDifferent = this.bodyHorizontalScrollShowing !== params.bodyHorizontalScrollShowing ||
16022 this.leftVerticalScrollShowing !== params.leftVerticalScrollShowing ||
16023 this.rightVerticalScrollShowing !== params.rightVerticalScrollShowing;
16024 if (atLeastOneDifferent) {
16025 this.bodyHorizontalScrollShowing = params.bodyHorizontalScrollShowing;
16026 this.leftVerticalScrollShowing = params.leftVerticalScrollShowing;
16027 this.rightVerticalScrollShowing = params.rightVerticalScrollShowing;
16028 var event_1 = {
16029 type: events_1.Events.EVENT_SCROLL_VISIBILITY_CHANGED,
16030 api: this.gridApi,
16031 columnApi: this.columnApi
16032 };
16033 this.eventService.dispatchEvent(event_1);
16034 }
16035 };
16036 // used by pagination service - to know page height
16037 ScrollVisibleService.prototype.isBodyHorizontalScrollShowing = function () {
16038 return this.bodyHorizontalScrollShowing;
16039 };
16040 // used by header container
16041 ScrollVisibleService.prototype.isLeftVerticalScrollShowing = function () {
16042 return this.leftVerticalScrollShowing;
16043 };
16044 // used by header container
16045 ScrollVisibleService.prototype.isRightVerticalScrollShowing = function () {
16046 return this.rightVerticalScrollShowing;
16047 };
16048 __decorate([
16049 context_1.Autowired('eventService'),
16050 __metadata("design:type", eventService_1.EventService)
16051 ], ScrollVisibleService.prototype, "eventService", void 0);
16052 __decorate([
16053 context_1.Autowired('columnController'),
16054 __metadata("design:type", columnController_1.ColumnController)
16055 ], ScrollVisibleService.prototype, "columnController", void 0);
16056 __decorate([
16057 context_1.Autowired('columnApi'),
16058 __metadata("design:type", columnApi_1.ColumnApi)
16059 ], ScrollVisibleService.prototype, "columnApi", void 0);
16060 __decorate([
16061 context_1.Autowired('gridApi'),
16062 __metadata("design:type", gridApi_1.GridApi)
16063 ], ScrollVisibleService.prototype, "gridApi", void 0);
16064 __decorate([
16065 context_1.Autowired('gridOptionsWrapper'),
16066 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
16067 ], ScrollVisibleService.prototype, "gridOptionsWrapper", void 0);
16068 ScrollVisibleService = __decorate([
16069 context_1.Bean('scrollVisibleService')
16070 ], ScrollVisibleService);
16071 return ScrollVisibleService;
16072}());
16073exports.ScrollVisibleService = ScrollVisibleService;
16074
16075
16076/***/ }),
16077/* 39 */
16078/***/ (function(module, exports, __webpack_require__) {
16079
16080"use strict";
16081/**
16082 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
16083 * @version v18.1.2
16084 * @link http://www.ag-grid.com/
16085 * @license MIT
16086 */
16087
16088var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
16089 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
16090 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
16091 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
16092 return c > 3 && r && Object.defineProperty(target, key, r), r;
16093};
16094var __metadata = (this && this.__metadata) || function (k, v) {
16095 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
16096};
16097Object.defineProperty(exports, "__esModule", { value: true });
16098var context_1 = __webpack_require__(0);
16099var linkedList_1 = __webpack_require__(127);
16100var gridOptionsWrapper_1 = __webpack_require__(2);
16101var eventKeys_1 = __webpack_require__(27);
16102var eventService_1 = __webpack_require__(3);
16103var AnimationFrameService = (function () {
16104 function AnimationFrameService() {
16105 this.p1Tasks = new linkedList_1.LinkedList();
16106 this.p2Tasks = new linkedList_1.LinkedList();
16107 this.ticking = false;
16108 }
16109 AnimationFrameService.prototype.registerGridComp = function (gridPanel) {
16110 this.gridPanel = gridPanel;
16111 };
16112 AnimationFrameService.prototype.init = function () {
16113 this.useAnimationFrame = !this.gridOptionsWrapper.isSuppressAnimationFrame();
16114 };
16115 // this method is for our ag-Grid sanity only - if animation frames are turned off,
16116 // then no place in the code should be looking to add any work to be done in animation
16117 // frames. this stops bugs - where some code is asking for a frame to be executed
16118 // when it should not.
16119 AnimationFrameService.prototype.verifyAnimationFrameOn = function (methodName) {
16120 if (this.useAnimationFrame === false) {
16121 console.warn("ag-Grid: AnimationFrameService." + methodName + " called but animation frames are off");
16122 }
16123 };
16124 AnimationFrameService.prototype.addP1Task = function (task) {
16125 this.verifyAnimationFrameOn('addP1Task');
16126 this.p1Tasks.add(task);
16127 this.schedule();
16128 };
16129 AnimationFrameService.prototype.addP2Task = function (task) {
16130 this.verifyAnimationFrameOn('addP2Task');
16131 this.p2Tasks.add(task);
16132 this.schedule();
16133 };
16134 AnimationFrameService.prototype.executeFrame = function (millis) {
16135 this.verifyAnimationFrameOn('executeFrame');
16136 var frameStart = new Date().getTime();
16137 var duration = (new Date().getTime()) - frameStart;
16138 var gridPanelNeedsAFrame = true;
16139 // 16ms is 60 fps
16140 var noMaxMillis = millis <= 0;
16141 while (noMaxMillis || duration < millis) {
16142 if (gridPanelNeedsAFrame) {
16143 gridPanelNeedsAFrame = this.gridPanel.executeFrame();
16144 }
16145 else if (!this.p1Tasks.isEmpty()) {
16146 var task = this.p1Tasks.remove();
16147 task();
16148 }
16149 else if (!this.p2Tasks.isEmpty()) {
16150 var task = this.p2Tasks.remove();
16151 task();
16152 }
16153 else {
16154 break;
16155 }
16156 duration = (new Date().getTime()) - frameStart;
16157 }
16158 if (gridPanelNeedsAFrame || !this.p1Tasks.isEmpty() || !this.p2Tasks.isEmpty()) {
16159 this.requestFrame();
16160 }
16161 else {
16162 this.stopTicking();
16163 }
16164 };
16165 AnimationFrameService.prototype.stopTicking = function () {
16166 this.ticking = false;
16167 var event = {
16168 type: eventKeys_1.Events.EVENT_ANIMATION_QUEUE_EMPTY,
16169 columnApi: this.gridOptionsWrapper.getColumnApi(),
16170 api: this.gridOptionsWrapper.getApi()
16171 };
16172 this.eventService.dispatchEvent(event);
16173 };
16174 AnimationFrameService.prototype.flushAllFrames = function () {
16175 if (!this.useAnimationFrame) {
16176 return;
16177 }
16178 this.executeFrame(-1);
16179 };
16180 AnimationFrameService.prototype.schedule = function () {
16181 if (!this.useAnimationFrame) {
16182 return;
16183 }
16184 if (!this.ticking) {
16185 this.ticking = true;
16186 this.requestFrame();
16187 }
16188 };
16189 AnimationFrameService.prototype.requestFrame = function () {
16190 // check for the existence of requestAnimationFrame, and if
16191 // it's missing, then we polyfill it with setTimeout()
16192 var callback = this.executeFrame.bind(this, 60);
16193 if (window.requestAnimationFrame) {
16194 window.requestAnimationFrame(callback);
16195 }
16196 else if (window.webkitRequestAnimationFrame) {
16197 window.webkitRequestAnimationFrame(callback);
16198 }
16199 else {
16200 setTimeout(callback, 0);
16201 }
16202 };
16203 AnimationFrameService.prototype.isQueueEmpty = function () {
16204 return this.ticking;
16205 };
16206 __decorate([
16207 context_1.Autowired('gridOptionsWrapper'),
16208 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
16209 ], AnimationFrameService.prototype, "gridOptionsWrapper", void 0);
16210 __decorate([
16211 context_1.Autowired('eventService'),
16212 __metadata("design:type", eventService_1.EventService)
16213 ], AnimationFrameService.prototype, "eventService", void 0);
16214 __decorate([
16215 context_1.PostConstruct,
16216 __metadata("design:type", Function),
16217 __metadata("design:paramtypes", []),
16218 __metadata("design:returntype", void 0)
16219 ], AnimationFrameService.prototype, "init", null);
16220 AnimationFrameService = __decorate([
16221 context_1.Bean('animationFrameService')
16222 ], AnimationFrameService);
16223 return AnimationFrameService;
16224}());
16225exports.AnimationFrameService = AnimationFrameService;
16226
16227
16228/***/ }),
16229/* 40 */
16230/***/ (function(module, exports, __webpack_require__) {
16231
16232"use strict";
16233/**
16234 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
16235 * @version v18.1.2
16236 * @link http://www.ag-grid.com/
16237 * @license MIT
16238 */
16239
16240var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
16241 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
16242 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
16243 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
16244 return c > 3 && r && Object.defineProperty(target, key, r), r;
16245};
16246var __metadata = (this && this.__metadata) || function (k, v) {
16247 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
16248};
16249var __param = (this && this.__param) || function (paramIndex, decorator) {
16250 return function (target, key) { decorator(target, key, paramIndex); }
16251};
16252Object.defineProperty(exports, "__esModule", { value: true });
16253var gridOptionsWrapper_1 = __webpack_require__(2);
16254var logger_1 = __webpack_require__(12);
16255var columnUtils_1 = __webpack_require__(33);
16256var columnKeyCreator_1 = __webpack_require__(109);
16257var originalColumnGroup_1 = __webpack_require__(34);
16258var column_1 = __webpack_require__(10);
16259var context_1 = __webpack_require__(0);
16260var utils_1 = __webpack_require__(1);
16261var defaultColumnTypes_1 = __webpack_require__(137);
16262// takes in a list of columns, as specified by the column definitions, and returns column groups
16263var BalancedColumnTreeBuilder = (function () {
16264 function BalancedColumnTreeBuilder() {
16265 }
16266 BalancedColumnTreeBuilder.prototype.setBeans = function (loggerFactory) {
16267 this.logger = loggerFactory.create('BalancedColumnTreeBuilder');
16268 };
16269 BalancedColumnTreeBuilder.prototype.createForAutoGroups = function (autoGroupCols, gridBalancedTree) {
16270 var _this = this;
16271 var autoColBalancedTree = [];
16272 autoGroupCols.forEach(function (col) {
16273 var fakeTreeItem = _this.createAutoGroupTreeItem(gridBalancedTree, col);
16274 autoColBalancedTree.push(fakeTreeItem);
16275 });
16276 return autoColBalancedTree;
16277 };
16278 BalancedColumnTreeBuilder.prototype.createAutoGroupTreeItem = function (balancedColumnTree, column) {
16279 var dept = this.findDept(balancedColumnTree);
16280 // at the end, this will be the top of the tree item.
16281 var nextChild = column;
16282 for (var i = dept - 1; i >= 0; i--) {
16283 var autoGroup = new originalColumnGroup_1.OriginalColumnGroup(null, "FAKE_PATH_" + column.getId() + "}_" + i, true, i);
16284 this.context.wireBean(autoGroup);
16285 autoGroup.setChildren([nextChild]);
16286 nextChild = autoGroup;
16287 }
16288 // at this point, the nextChild is the top most item in the tree
16289 return nextChild;
16290 };
16291 BalancedColumnTreeBuilder.prototype.findDept = function (balancedColumnTree) {
16292 var dept = 0;
16293 var pointer = balancedColumnTree;
16294 while (pointer && pointer[0] && pointer[0] instanceof originalColumnGroup_1.OriginalColumnGroup) {
16295 dept++;
16296 pointer = pointer[0].getChildren();
16297 }
16298 return dept;
16299 };
16300 BalancedColumnTreeBuilder.prototype.createBalancedColumnGroups = function (abstractColDefs, primaryColumns) {
16301 // column key creator dishes out unique column id's in a deterministic way,
16302 // so if we have two grids (that cold be master/slave) with same column definitions,
16303 // then this ensures the two grids use identical id's.
16304 var columnKeyCreator = new columnKeyCreator_1.ColumnKeyCreator();
16305 // create am unbalanced tree that maps the provided definitions
16306 var unbalancedTree = this.recursivelyCreateColumns(abstractColDefs, 0, columnKeyCreator, primaryColumns);
16307 var treeDept = this.findMaxDept(unbalancedTree, 0);
16308 this.logger.log('Number of levels for grouped columns is ' + treeDept);
16309 var balancedTree = this.balanceColumnTree(unbalancedTree, 0, treeDept, columnKeyCreator);
16310 this.columnUtils.depthFirstOriginalTreeSearch(balancedTree, function (child) {
16311 if (child instanceof originalColumnGroup_1.OriginalColumnGroup) {
16312 child.setupExpandable();
16313 }
16314 });
16315 return {
16316 balancedTree: balancedTree,
16317 treeDept: treeDept
16318 };
16319 };
16320 BalancedColumnTreeBuilder.prototype.balanceColumnTree = function (unbalancedTree, currentDept, columnDept, columnKeyCreator) {
16321 var _this = this;
16322 var result = [];
16323 // go through each child, for groups, recurse a level deeper,
16324 // for columns we need to pad
16325 unbalancedTree.forEach(function (child) {
16326 if (child instanceof originalColumnGroup_1.OriginalColumnGroup) {
16327 var originalGroup = child;
16328 var newChildren = _this.balanceColumnTree(originalGroup.getChildren(), currentDept + 1, columnDept, columnKeyCreator);
16329 originalGroup.setChildren(newChildren);
16330 result.push(originalGroup);
16331 }
16332 else {
16333 var newChild = child;
16334 for (var i = columnDept - 1; i >= currentDept; i--) {
16335 var newColId = columnKeyCreator.getUniqueKey(null, null);
16336 var colGroupDefMerged = _this.createMergedColGroupDef(null);
16337 var paddedGroup = new originalColumnGroup_1.OriginalColumnGroup(colGroupDefMerged, newColId, true, currentDept);
16338 _this.context.wireBean(paddedGroup);
16339 paddedGroup.setChildren([newChild]);
16340 newChild = paddedGroup;
16341 }
16342 result.push(newChild);
16343 }
16344 });
16345 return result;
16346 };
16347 BalancedColumnTreeBuilder.prototype.findMaxDept = function (treeChildren, dept) {
16348 var maxDeptThisLevel = dept;
16349 for (var i = 0; i < treeChildren.length; i++) {
16350 var abstractColumn = treeChildren[i];
16351 if (abstractColumn instanceof originalColumnGroup_1.OriginalColumnGroup) {
16352 var originalGroup = abstractColumn;
16353 var newDept = this.findMaxDept(originalGroup.getChildren(), dept + 1);
16354 if (maxDeptThisLevel < newDept) {
16355 maxDeptThisLevel = newDept;
16356 }
16357 }
16358 }
16359 return maxDeptThisLevel;
16360 };
16361 BalancedColumnTreeBuilder.prototype.recursivelyCreateColumns = function (abstractColDefs, level, columnKeyCreator, primaryColumns) {
16362 var _this = this;
16363 var result = [];
16364 if (!abstractColDefs) {
16365 return result;
16366 }
16367 abstractColDefs.forEach(function (abstractColDef) {
16368 var newGroupOrColumn;
16369 if (_this.isColumnGroup(abstractColDef)) {
16370 newGroupOrColumn = _this.createColumnGroup(columnKeyCreator, primaryColumns, abstractColDef, level);
16371 }
16372 else {
16373 newGroupOrColumn = _this.createColumn(columnKeyCreator, primaryColumns, abstractColDef);
16374 }
16375 result.push(newGroupOrColumn);
16376 });
16377 return result;
16378 };
16379 BalancedColumnTreeBuilder.prototype.createColumnGroup = function (columnKeyCreator, primaryColumns, colGroupDef, level) {
16380 var colGroupDefMerged = this.createMergedColGroupDef(colGroupDef);
16381 var groupId = columnKeyCreator.getUniqueKey(colGroupDefMerged.groupId, null);
16382 var originalGroup = new originalColumnGroup_1.OriginalColumnGroup(colGroupDefMerged, groupId, false, level);
16383 this.context.wireBean(originalGroup);
16384 var children = this.recursivelyCreateColumns(colGroupDefMerged.children, level + 1, columnKeyCreator, primaryColumns);
16385 originalGroup.setChildren(children);
16386 return originalGroup;
16387 };
16388 BalancedColumnTreeBuilder.prototype.createMergedColGroupDef = function (colGroupDef) {
16389 var colGroupDefMerged = {};
16390 utils_1.Utils.assign(colGroupDefMerged, this.gridOptionsWrapper.getDefaultColGroupDef());
16391 utils_1.Utils.assign(colGroupDefMerged, colGroupDef);
16392 this.checkForDeprecatedItems(colGroupDefMerged);
16393 return colGroupDefMerged;
16394 };
16395 BalancedColumnTreeBuilder.prototype.createColumn = function (columnKeyCreator, primaryColumns, colDef) {
16396 var colDefMerged = this.mergeColDefs(colDef);
16397 this.checkForDeprecatedItems(colDefMerged);
16398 var colId = columnKeyCreator.getUniqueKey(colDefMerged.colId, colDefMerged.field);
16399 var column = new column_1.Column(colDefMerged, colId, primaryColumns);
16400 this.context.wireBean(column);
16401 return column;
16402 };
16403 BalancedColumnTreeBuilder.prototype.mergeColDefs = function (colDef) {
16404 // start with empty merged definition
16405 var colDefMerged = {};
16406 // merge properties from default column definitions
16407 utils_1.Utils.assign(colDefMerged, this.gridOptionsWrapper.getDefaultColDef());
16408 // merge properties from column type properties
16409 if (colDef.type) {
16410 this.assignColumnTypes(colDef, colDefMerged);
16411 }
16412 // merge properties from column definitions
16413 utils_1.Utils.assign(colDefMerged, colDef);
16414 return colDefMerged;
16415 };
16416 BalancedColumnTreeBuilder.prototype.assignColumnTypes = function (colDef, colDefMerged) {
16417 var typeKeys;
16418 if (colDef.type instanceof Array) {
16419 var invalidArray = colDef.type.some(function (a) { return typeof a !== 'string'; });
16420 if (invalidArray) {
16421 console.warn("ag-grid: if colDef.type is supplied an array it should be of type 'string[]'");
16422 }
16423 else {
16424 typeKeys = colDef.type;
16425 }
16426 }
16427 else if (typeof colDef.type === 'string') {
16428 typeKeys = colDef.type.split(',');
16429 }
16430 else {
16431 console.warn("ag-grid: colDef.type should be of type 'string' | 'string[]'");
16432 return;
16433 }
16434 // merge user defined with default column types
16435 var allColumnTypes = utils_1.Utils.assign({}, this.gridOptionsWrapper.getColumnTypes(), defaultColumnTypes_1.DefaultColumnTypes);
16436 typeKeys.forEach(function (t) {
16437 var typeColDef = allColumnTypes[t.trim()];
16438 if (typeColDef) {
16439 utils_1.Utils.assign(colDefMerged, typeColDef);
16440 }
16441 else {
16442 console.warn("ag-grid: colDef.type '" + t + "' does not correspond to defined gridOptions.columnTypes");
16443 }
16444 });
16445 };
16446 BalancedColumnTreeBuilder.prototype.checkForDeprecatedItems = function (colDef) {
16447 if (colDef) {
16448 var colDefNoType = colDef; // take out the type, so we can access attributes not defined in the type
16449 if (colDefNoType.group !== undefined) {
16450 console.warn('ag-grid: colDef.group is invalid, please check documentation on how to do grouping as it changed in version 3');
16451 }
16452 if (colDefNoType.headerGroup !== undefined) {
16453 console.warn('ag-grid: colDef.headerGroup is invalid, please check documentation on how to do grouping as it changed in version 3');
16454 }
16455 if (colDefNoType.headerGroupShow !== undefined) {
16456 console.warn('ag-grid: colDef.headerGroupShow is invalid, should be columnGroupShow, please check documentation on how to do grouping as it changed in version 3');
16457 }
16458 if (colDefNoType.suppressRowGroup !== undefined) {
16459 console.warn('ag-grid: colDef.suppressRowGroup is deprecated, please use colDef.type instead');
16460 }
16461 if (colDefNoType.suppressAggregation !== undefined) {
16462 console.warn('ag-grid: colDef.suppressAggregation is deprecated, please use colDef.type instead');
16463 }
16464 if (colDefNoType.suppressRowGroup || colDefNoType.suppressAggregation) {
16465 console.warn('ag-grid: colDef.suppressAggregation and colDef.suppressRowGroup are deprecated, use allowRowGroup, allowPivot and allowValue instead');
16466 }
16467 if (colDefNoType.displayName) {
16468 console.warn("ag-grid: Found displayName " + colDefNoType.displayName + ", please use headerName instead, displayName is deprecated.");
16469 colDefNoType.headerName = colDefNoType.displayName;
16470 }
16471 }
16472 };
16473 // if object has children, we assume it's a group
16474 BalancedColumnTreeBuilder.prototype.isColumnGroup = function (abstractColDef) {
16475 return abstractColDef.children !== undefined;
16476 };
16477 __decorate([
16478 context_1.Autowired('gridOptionsWrapper'),
16479 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
16480 ], BalancedColumnTreeBuilder.prototype, "gridOptionsWrapper", void 0);
16481 __decorate([
16482 context_1.Autowired('columnUtils'),
16483 __metadata("design:type", columnUtils_1.ColumnUtils)
16484 ], BalancedColumnTreeBuilder.prototype, "columnUtils", void 0);
16485 __decorate([
16486 context_1.Autowired('context'),
16487 __metadata("design:type", context_1.Context)
16488 ], BalancedColumnTreeBuilder.prototype, "context", void 0);
16489 __decorate([
16490 __param(0, context_1.Qualifier('loggerFactory')),
16491 __metadata("design:type", Function),
16492 __metadata("design:paramtypes", [logger_1.LoggerFactory]),
16493 __metadata("design:returntype", void 0)
16494 ], BalancedColumnTreeBuilder.prototype, "setBeans", null);
16495 BalancedColumnTreeBuilder = __decorate([
16496 context_1.Bean('balancedColumnTreeBuilder')
16497 ], BalancedColumnTreeBuilder);
16498 return BalancedColumnTreeBuilder;
16499}());
16500exports.BalancedColumnTreeBuilder = BalancedColumnTreeBuilder;
16501
16502
16503/***/ }),
16504/* 41 */
16505/***/ (function(module, exports, __webpack_require__) {
16506
16507"use strict";
16508/**
16509 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
16510 * @version v18.1.2
16511 * @link http://www.ag-grid.com/
16512 * @license MIT
16513 */
16514
16515var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
16516 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
16517 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
16518 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
16519 return c > 3 && r && Object.defineProperty(target, key, r), r;
16520};
16521var __metadata = (this && this.__metadata) || function (k, v) {
16522 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
16523};
16524Object.defineProperty(exports, "__esModule", { value: true });
16525var rowRenderer_1 = __webpack_require__(22);
16526var context_1 = __webpack_require__(0);
16527var gridOptionsWrapper_1 = __webpack_require__(2);
16528var headerWrapperComp_1 = __webpack_require__(102);
16529var AutoWidthCalculator = (function () {
16530 function AutoWidthCalculator() {
16531 }
16532 AutoWidthCalculator.prototype.registerGridComp = function (gridPanel) {
16533 this.gridPanel = gridPanel;
16534 };
16535 AutoWidthCalculator.prototype.registerHeaderRootComp = function (headerRootComp) {
16536 this.headerRootComp = headerRootComp;
16537 };
16538 // this is the trick: we create a dummy container and clone all the cells
16539 // into the dummy, then check the dummy's width. then destroy the dummy
16540 // as we don't need it any more.
16541 // drawback: only the cells visible on the screen are considered
16542 AutoWidthCalculator.prototype.getPreferredWidthForColumn = function (column) {
16543 var eHeaderCell = this.getHeaderCellForColumn(column);
16544 // cell isn't visible
16545 if (!eHeaderCell) {
16546 return -1;
16547 }
16548 var eDummyContainer = document.createElement('span');
16549 // position fixed, so it isn't restricted to the boundaries of the parent
16550 eDummyContainer.style.position = 'fixed';
16551 // we put the dummy into the body container, so it will inherit all the
16552 // css styles that the real cells are inheriting
16553 var eBodyContainer = this.gridPanel.getBodyContainer();
16554 eBodyContainer.appendChild(eDummyContainer);
16555 // get all the cells that are currently displayed (this only brings back
16556 // rendered cells, rows not rendered due to row visualisation will not be here)
16557 this.putRowCellsIntoDummyContainer(column, eDummyContainer);
16558 // also put header cell in
16559 // we only consider the lowest level cell, not the group cell. in 99% of the time, this
16560 // will be enough. if we consider groups, then it gets to complicated for what it's worth,
16561 // as the groups can span columns and this class only considers one column at a time.
16562 this.cloneItemIntoDummy(eHeaderCell, eDummyContainer);
16563 // at this point, all the clones are lined up vertically with natural widths. the dummy
16564 // container will have a width wide enough just to fit the largest.
16565 var dummyContainerWidth = eDummyContainer.offsetWidth;
16566 // we are finished with the dummy container, so get rid of it
16567 eBodyContainer.removeChild(eDummyContainer);
16568 // we add padding as I found sometimes the gui still put '...' after some of the texts. so the
16569 // user can configure the grid to add a few more pixels after the calculated width
16570 var autoSizePadding = this.gridOptionsWrapper.getAutoSizePadding();
16571 return dummyContainerWidth + autoSizePadding;
16572 };
16573 AutoWidthCalculator.prototype.getHeaderCellForColumn = function (column) {
16574 var comp = null;
16575 // find the rendered header cell
16576 this.headerRootComp.forEachHeaderElement(function (headerElement) {
16577 if (headerElement instanceof headerWrapperComp_1.HeaderWrapperComp) {
16578 var headerWrapperComp = headerElement;
16579 if (headerWrapperComp.getColumn() === column) {
16580 comp = headerWrapperComp;
16581 }
16582 }
16583 });
16584 return comp ? comp.getGui() : null;
16585 };
16586 AutoWidthCalculator.prototype.putRowCellsIntoDummyContainer = function (column, eDummyContainer) {
16587 var _this = this;
16588 var eCells = this.rowRenderer.getAllCellsForColumn(column);
16589 eCells.forEach(function (eCell) { return _this.cloneItemIntoDummy(eCell, eDummyContainer); });
16590 };
16591 AutoWidthCalculator.prototype.cloneItemIntoDummy = function (eCell, eDummyContainer) {
16592 // make a deep clone of the cell
16593 var eCellClone = eCell.cloneNode(true);
16594 // the original has a fixed width, we remove this to allow the natural width based on content
16595 eCellClone.style.width = '';
16596 // the original has position = absolute, we need to remove this so it's positioned normally
16597 eCellClone.style.position = 'static';
16598 eCellClone.style.left = '';
16599 // we put the cell into a containing div, as otherwise the cells would just line up
16600 // on the same line, standard flow layout, by putting them into divs, they are laid
16601 // out one per line
16602 var eCloneParent = document.createElement('div');
16603 // table-row, so that each cell is on a row. i also tried display='block', but this
16604 // didn't work in IE
16605 eCloneParent.style.display = 'table-row';
16606 // the twig on the branch, the branch on the tree, the tree in the hole,
16607 // the hole in the bog, the bog in the clone, the clone in the parent,
16608 // the parent in the dummy, and the dummy down in the vall-e-ooo, OOOOOOOOO! Oh row the rattling bog....
16609 eCloneParent.appendChild(eCellClone);
16610 eDummyContainer.appendChild(eCloneParent);
16611 };
16612 __decorate([
16613 context_1.Autowired('rowRenderer'),
16614 __metadata("design:type", rowRenderer_1.RowRenderer)
16615 ], AutoWidthCalculator.prototype, "rowRenderer", void 0);
16616 __decorate([
16617 context_1.Autowired('gridOptionsWrapper'),
16618 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
16619 ], AutoWidthCalculator.prototype, "gridOptionsWrapper", void 0);
16620 AutoWidthCalculator = __decorate([
16621 context_1.Bean('autoWidthCalculator')
16622 ], AutoWidthCalculator);
16623 return AutoWidthCalculator;
16624}());
16625exports.AutoWidthCalculator = AutoWidthCalculator;
16626
16627
16628/***/ }),
16629/* 42 */
16630/***/ (function(module, exports, __webpack_require__) {
16631
16632"use strict";
16633/**
16634 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
16635 * @version v18.1.2
16636 * @link http://www.ag-grid.com/
16637 * @license MIT
16638 */
16639
16640var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
16641 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
16642 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
16643 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
16644 return c > 3 && r && Object.defineProperty(target, key, r), r;
16645};
16646var __metadata = (this && this.__metadata) || function (k, v) {
16647 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
16648};
16649Object.defineProperty(exports, "__esModule", { value: true });
16650var context_1 = __webpack_require__(0);
16651var logger_1 = __webpack_require__(12);
16652var utils_1 = __webpack_require__(1);
16653var eventService_1 = __webpack_require__(3);
16654var events_1 = __webpack_require__(5);
16655var gridOptionsWrapper_1 = __webpack_require__(2);
16656var columnApi_1 = __webpack_require__(7);
16657var gridApi_1 = __webpack_require__(6);
16658/** Adds drag listening onto an element. In ag-Grid this is used twice, first is resizing columns,
16659 * second is moving the columns and column groups around (ie the 'drag' part of Drag and Drop. */
16660var DragService = (function () {
16661 function DragService() {
16662 this.onMouseUpListener = this.onMouseUp.bind(this);
16663 this.onMouseMoveListener = this.onMouseMove.bind(this);
16664 this.onTouchEndListener = this.onTouchUp.bind(this);
16665 this.onTouchMoveListener = this.onTouchMove.bind(this);
16666 this.dragEndFunctions = [];
16667 this.dragSources = [];
16668 }
16669 DragService.prototype.init = function () {
16670 this.logger = this.loggerFactory.create('DragService');
16671 };
16672 DragService.prototype.destroy = function () {
16673 this.dragSources.forEach(this.removeListener.bind(this));
16674 this.dragSources.length = 0;
16675 };
16676 DragService.prototype.removeListener = function (dragSourceAndListener) {
16677 var element = dragSourceAndListener.dragSource.eElement;
16678 var mouseDownListener = dragSourceAndListener.mouseDownListener;
16679 element.removeEventListener('mousedown', mouseDownListener);
16680 // remove touch listener only if it exists
16681 if (dragSourceAndListener.touchEnabled) {
16682 var touchStartListener = dragSourceAndListener.touchStartListener;
16683 element.removeEventListener('touchstart', touchStartListener, { passive: true });
16684 }
16685 };
16686 DragService.prototype.removeDragSource = function (params) {
16687 var dragSourceAndListener = utils_1.Utils.find(this.dragSources, function (item) { return item.dragSource === params; });
16688 if (!dragSourceAndListener) {
16689 return;
16690 }
16691 this.removeListener(dragSourceAndListener);
16692 utils_1.Utils.removeFromArray(this.dragSources, dragSourceAndListener);
16693 };
16694 DragService.prototype.setNoSelectToBody = function (noSelect) {
16695 var usrDocument = this.gridOptionsWrapper.getDocument();
16696 var eBody = usrDocument.querySelector('body');
16697 if (utils_1.Utils.exists(eBody)) {
16698 utils_1.Utils.addOrRemoveCssClass(eBody, 'ag-body-no-select', noSelect);
16699 }
16700 };
16701 DragService.prototype.addDragSource = function (params, includeTouch) {
16702 if (includeTouch === void 0) { includeTouch = false; }
16703 var mouseListener = this.onMouseDown.bind(this, params);
16704 params.eElement.addEventListener('mousedown', mouseListener);
16705 var touchListener = null;
16706 var suppressTouch = this.gridOptionsWrapper.isSuppressTouch();
16707 var reallyIncludeTouch = includeTouch && !suppressTouch;
16708 if (reallyIncludeTouch) {
16709 touchListener = this.onTouchStart.bind(this, params);
16710 params.eElement.addEventListener('touchstart', touchListener, { passive: false });
16711 }
16712 this.dragSources.push({
16713 dragSource: params,
16714 mouseDownListener: mouseListener,
16715 touchStartListener: touchListener,
16716 touchEnabled: includeTouch
16717 });
16718 };
16719 // gets called whenever mouse down on any drag source
16720 DragService.prototype.onTouchStart = function (params, touchEvent) {
16721 var _this = this;
16722 this.currentDragParams = params;
16723 this.dragging = false;
16724 var touch = touchEvent.touches[0];
16725 this.touchLastTime = touch;
16726 this.touchStart = touch;
16727 touchEvent.preventDefault();
16728 // we temporally add these listeners, for the duration of the drag, they
16729 // are removed in touch end handling.
16730 params.eElement.addEventListener('touchmove', this.onTouchMoveListener, { passive: true });
16731 params.eElement.addEventListener('touchend', this.onTouchEndListener, { passive: true });
16732 params.eElement.addEventListener('touchcancel', this.onTouchEndListener, { passive: true });
16733 this.dragEndFunctions.push(function () {
16734 params.eElement.removeEventListener('touchmove', _this.onTouchMoveListener, { passive: true });
16735 params.eElement.removeEventListener('touchend', _this.onTouchEndListener, { passive: true });
16736 params.eElement.removeEventListener('touchcancel', _this.onTouchEndListener, { passive: true });
16737 });
16738 // see if we want to start dragging straight away
16739 if (params.dragStartPixels === 0) {
16740 this.onCommonMove(touch, this.touchStart);
16741 }
16742 };
16743 // gets called whenever mouse down on any drag source
16744 DragService.prototype.onMouseDown = function (params, mouseEvent) {
16745 var _this = this;
16746 // we ignore when shift key is pressed. this is for the range selection, as when
16747 // user shift-clicks a cell, this should not be interpreted as the start of a drag.
16748 // if (mouseEvent.shiftKey) { return; }
16749 if (params.skipMouseEvent) {
16750 if (params.skipMouseEvent(mouseEvent)) {
16751 return;
16752 }
16753 }
16754 // if there are two elements with parent / child relationship, and both are draggable,
16755 // when we drag the child, we should NOT drag the parent. an example of this is row moving
16756 // and range selection - row moving should get preference when use drags the rowDrag component.
16757 if (mouseEvent._alreadyProcessedByDragService) {
16758 return;
16759 }
16760 mouseEvent._alreadyProcessedByDragService = true;
16761 // only interested in left button clicks
16762 if (mouseEvent.button !== 0) {
16763 return;
16764 }
16765 this.currentDragParams = params;
16766 this.dragging = false;
16767 this.mouseEventLastTime = mouseEvent;
16768 this.mouseStartEvent = mouseEvent;
16769 var usrDocument = this.gridOptionsWrapper.getDocument();
16770 // we temporally add these listeners, for the duration of the drag, they
16771 // are removed in mouseup handling.
16772 usrDocument.addEventListener('mousemove', this.onMouseMoveListener);
16773 usrDocument.addEventListener('mouseup', this.onMouseUpListener);
16774 this.dragEndFunctions.push(function () {
16775 usrDocument.removeEventListener('mousemove', _this.onMouseMoveListener);
16776 usrDocument.removeEventListener('mouseup', _this.onMouseUpListener);
16777 });
16778 // see if we want to start dragging straight away
16779 if (params.dragStartPixels === 0) {
16780 this.onMouseMove(mouseEvent);
16781 }
16782 };
16783 // returns true if the event is close to the original event by X pixels either vertically or horizontally.
16784 // we only start dragging after X pixels so this allows us to know if we should start dragging yet.
16785 DragService.prototype.isEventNearStartEvent = function (currentEvent, startEvent) {
16786 // by default, we wait 4 pixels before starting the drag
16787 var requiredPixelDiff = utils_1.Utils.exists(this.currentDragParams.dragStartPixels) ? this.currentDragParams.dragStartPixels : 4;
16788 return utils_1.Utils.areEventsNear(currentEvent, startEvent, requiredPixelDiff);
16789 };
16790 DragService.prototype.getFirstActiveTouch = function (touchList) {
16791 for (var i = 0; i < touchList.length; i++) {
16792 var matches = touchList[i].identifier === this.touchStart.identifier;
16793 if (matches) {
16794 return touchList[i];
16795 }
16796 }
16797 return null;
16798 };
16799 DragService.prototype.onCommonMove = function (currentEvent, startEvent) {
16800 if (!this.dragging) {
16801 // if mouse hasn't travelled from the start position enough, do nothing
16802 var toEarlyToDrag = !this.dragging && this.isEventNearStartEvent(currentEvent, startEvent);
16803 if (toEarlyToDrag) {
16804 return;
16805 }
16806 else {
16807 // alert(`started`);
16808 this.dragging = true;
16809 var event_1 = {
16810 type: events_1.Events.EVENT_DRAG_STARTED,
16811 api: this.gridApi,
16812 columnApi: this.columnApi
16813 };
16814 this.eventService.dispatchEvent(event_1);
16815 this.currentDragParams.onDragStart(startEvent);
16816 this.setNoSelectToBody(true);
16817 }
16818 }
16819 this.currentDragParams.onDragging(currentEvent);
16820 };
16821 DragService.prototype.onTouchMove = function (touchEvent) {
16822 var touch = this.getFirstActiveTouch(touchEvent.touches);
16823 if (!touch) {
16824 return;
16825 }
16826 // this.___statusBar.setInfoText(Math.random() + ' onTouchMove preventDefault stopPropagation');
16827 // if we don't preview default, then the browser will try and do it's own touch stuff,
16828 // like do 'back button' (chrome does this) or scroll the page (eg drag column could be confused
16829 // with scroll page in the app)
16830 // touchEvent.preventDefault();
16831 this.onCommonMove(touch, this.touchStart);
16832 };
16833 // only gets called after a mouse down - as this is only added after mouseDown
16834 // and is removed when mouseUp happens
16835 DragService.prototype.onMouseMove = function (mouseEvent) {
16836 this.onCommonMove(mouseEvent, this.mouseStartEvent);
16837 };
16838 DragService.prototype.onTouchUp = function (touchEvent) {
16839 var touch = this.getFirstActiveTouch(touchEvent.changedTouches);
16840 // i haven't worked this out yet, but there is no matching touch
16841 // when we get the touch up event. to get around this, we swap in
16842 // the last touch. this is a hack to 'get it working' while we
16843 // figure out what's going on, why we are not getting a touch in
16844 // current event.
16845 if (!touch) {
16846 touch = this.touchLastTime;
16847 }
16848 // if mouse was left up before we started to move, then this is a tap.
16849 // we check this before onUpCommon as onUpCommon resets the dragging
16850 // let tap = !this.dragging;
16851 // let tapTarget = this.currentDragParams.eElement;
16852 this.onUpCommon(touch);
16853 // if tap, tell user
16854 // console.log(`${Math.random()} tap = ${tap}`);
16855 // if (tap) {
16856 // tapTarget.click();
16857 // }
16858 };
16859 DragService.prototype.onMouseUp = function (mouseEvent) {
16860 this.onUpCommon(mouseEvent);
16861 };
16862 DragService.prototype.onUpCommon = function (eventOrTouch) {
16863 if (this.dragging) {
16864 this.dragging = false;
16865 this.currentDragParams.onDragStop(eventOrTouch);
16866 var event_2 = {
16867 type: events_1.Events.EVENT_DRAG_STOPPED,
16868 api: this.gridApi,
16869 columnApi: this.columnApi
16870 };
16871 this.eventService.dispatchEvent(event_2);
16872 }
16873 this.setNoSelectToBody(false);
16874 this.mouseStartEvent = null;
16875 this.mouseEventLastTime = null;
16876 this.touchStart = null;
16877 this.touchLastTime = null;
16878 this.currentDragParams = null;
16879 this.dragEndFunctions.forEach(function (func) { return func(); });
16880 this.dragEndFunctions.length = 0;
16881 };
16882 __decorate([
16883 context_1.Autowired('loggerFactory'),
16884 __metadata("design:type", logger_1.LoggerFactory)
16885 ], DragService.prototype, "loggerFactory", void 0);
16886 __decorate([
16887 context_1.Autowired('eventService'),
16888 __metadata("design:type", eventService_1.EventService)
16889 ], DragService.prototype, "eventService", void 0);
16890 __decorate([
16891 context_1.Autowired('gridOptionsWrapper'),
16892 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
16893 ], DragService.prototype, "gridOptionsWrapper", void 0);
16894 __decorate([
16895 context_1.Autowired('columnApi'),
16896 __metadata("design:type", columnApi_1.ColumnApi)
16897 ], DragService.prototype, "columnApi", void 0);
16898 __decorate([
16899 context_1.Autowired('gridApi'),
16900 __metadata("design:type", gridApi_1.GridApi)
16901 ], DragService.prototype, "gridApi", void 0);
16902 __decorate([
16903 context_1.PostConstruct,
16904 __metadata("design:type", Function),
16905 __metadata("design:paramtypes", []),
16906 __metadata("design:returntype", void 0)
16907 ], DragService.prototype, "init", null);
16908 __decorate([
16909 context_1.PreDestroy,
16910 __metadata("design:type", Function),
16911 __metadata("design:paramtypes", []),
16912 __metadata("design:returntype", void 0)
16913 ], DragService.prototype, "destroy", null);
16914 DragService = __decorate([
16915 context_1.Bean('dragService')
16916 ], DragService);
16917 return DragService;
16918}());
16919exports.DragService = DragService;
16920
16921
16922/***/ }),
16923/* 43 */
16924/***/ (function(module, exports, __webpack_require__) {
16925
16926"use strict";
16927/**
16928 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
16929 * @version v18.1.2
16930 * @link http://www.ag-grid.com/
16931 * @license MIT
16932 */
16933
16934var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
16935 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
16936 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
16937 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
16938 return c > 3 && r && Object.defineProperty(target, key, r), r;
16939};
16940var __metadata = (this && this.__metadata) || function (k, v) {
16941 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
16942};
16943Object.defineProperty(exports, "__esModule", { value: true });
16944var context_1 = __webpack_require__(0);
16945var themeNames = ['fresh', 'dark', 'blue', 'bootstrap', 'material', 'balham-dark', 'balham'];
16946var themes = themeNames.concat(themeNames.map(function (name) { return "theme-" + name; }));
16947var themeClass = new RegExp("ag-(" + themes.join('|') + ")");
16948var matGridSize = 8;
16949var freshGridSize = 4;
16950var balhamGridSize = 4;
16951var HARD_CODED_SIZES = {
16952 'ag-theme-material': {
16953 headerHeight: matGridSize * 7,
16954 virtualItemHeight: matGridSize * 5,
16955 rowHeight: matGridSize * 6
16956 },
16957 'ag-theme-classic': {
16958 headerHeight: 25,
16959 virtualItemHeight: freshGridSize * 5,
16960 rowHeight: 25
16961 },
16962 'ag-theme-balham': {
16963 headerHeight: balhamGridSize * 8,
16964 virtualItemHeight: balhamGridSize * 7,
16965 rowHeight: balhamGridSize * 7
16966 }
16967};
16968var Environment = (function () {
16969 function Environment() {
16970 this.sassVariables = {};
16971 }
16972 // Approach described here:
16973 // https://www.ofcodeandcolor.com/2017/04/02/encoding-data-in-css/
16974 Environment.prototype.loadSassVariables = function () {
16975 /*
16976 var element = document.createElement('div');
16977 element.className = 'sass-variables';
16978 this.eGridDiv.appendChild(element);
16979
16980 var content = window.getComputedStyle(element, '::after').content;
16981
16982 try {
16983 this.sassVariables = JSON.parse(JSON.parse(content));
16984 } catch (e) {
16985 throw new Error("Failed loading the theme sizing - check that you have the theme set up correctly.");
16986 }
16987
16988 this.eGridDiv.removeChild(element);
16989 */
16990 };
16991 Environment.prototype.getSassVariable = function (theme, key) {
16992 if (theme == 'ag-theme-material') {
16993 return HARD_CODED_SIZES['ag-theme-material'][key];
16994 }
16995 else if (theme == 'ag-theme-balham' || theme == 'ag-theme-balham-dark') {
16996 return HARD_CODED_SIZES['ag-theme-balham'][key];
16997 }
16998 return HARD_CODED_SIZES['ag-theme-classic'][key];
16999 /*
17000 const result = parseInt(this.sassVariables[key]);
17001 if (!result || isNaN(result)) {
17002 throw new Error(`Failed loading ${key} Sass variable from ${this.sassVariables}`);
17003 }
17004 return result;
17005 */
17006 };
17007 Environment.prototype.getTheme = function () {
17008 var themeMatch;
17009 var element = this.eGridDiv;
17010 while (element != document.documentElement && themeMatch == null) {
17011 themeMatch = element.className.match(themeClass);
17012 element = element.parentElement;
17013 if (element == null) {
17014 break;
17015 }
17016 }
17017 if (themeMatch) {
17018 return themeMatch[0];
17019 }
17020 else {
17021 return 'ag-fresh';
17022 }
17023 };
17024 __decorate([
17025 context_1.Autowired('eGridDiv'),
17026 __metadata("design:type", HTMLElement)
17027 ], Environment.prototype, "eGridDiv", void 0);
17028 Environment = __decorate([
17029 context_1.Bean('environment')
17030 ], Environment);
17031 return Environment;
17032}());
17033exports.Environment = Environment;
17034
17035
17036/***/ }),
17037/* 44 */
17038/***/ (function(module, exports, __webpack_require__) {
17039
17040"use strict";
17041/**
17042 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
17043 * @version v18.1.2
17044 * @link http://www.ag-grid.com/
17045 * @license MIT
17046 */
17047
17048var __extends = (this && this.__extends) || (function () {
17049 var extendStatics = Object.setPrototypeOf ||
17050 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
17051 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
17052 return function (d, b) {
17053 extendStatics(d, b);
17054 function __() { this.constructor = d; }
17055 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
17056 };
17057})();
17058var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
17059 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
17060 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
17061 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
17062 return c > 3 && r && Object.defineProperty(target, key, r), r;
17063};
17064var __metadata = (this && this.__metadata) || function (k, v) {
17065 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
17066};
17067Object.defineProperty(exports, "__esModule", { value: true });
17068var gridOptionsWrapper_1 = __webpack_require__(2);
17069var columnApi_1 = __webpack_require__(7);
17070var columnController_1 = __webpack_require__(4);
17071var rowRenderer_1 = __webpack_require__(22);
17072var filterManager_1 = __webpack_require__(20);
17073var eventService_1 = __webpack_require__(3);
17074var gridPanel_1 = __webpack_require__(80);
17075var logger_1 = __webpack_require__(12);
17076var popupService_1 = __webpack_require__(37);
17077var utils_1 = __webpack_require__(1);
17078var context_1 = __webpack_require__(0);
17079var focusedCellController_1 = __webpack_require__(24);
17080var component_1 = __webpack_require__(8);
17081var gridApi_1 = __webpack_require__(6);
17082var componentAnnotations_1 = __webpack_require__(11);
17083var resizeObserver_1 = __webpack_require__(98);
17084var events_1 = __webpack_require__(5);
17085var GridCore = (function (_super) {
17086 __extends(GridCore, _super);
17087 function GridCore() {
17088 return _super.call(this) || this;
17089 }
17090 GridCore_1 = GridCore;
17091 GridCore.prototype.init = function () {
17092 var _this = this;
17093 this.logger = this.loggerFactory.create('GridCore');
17094 var template = this.enterprise ? GridCore_1.TEMPLATE_ENTERPRISE : GridCore_1.TEMPLATE_NORMAL;
17095 this.setTemplate(template);
17096 this.instantiate(this.context);
17097 if (this.enterprise) {
17098 this.toolPanelComp.registerGridComp(this.gridPanel);
17099 this.statusBar.registerGridPanel(this.gridPanel);
17100 }
17101 this.gridOptionsWrapper.addLayoutElement(this.getGui());
17102 // see what the grid options are for default of toolbar
17103 this.showToolPanel(this.gridOptionsWrapper.isShowToolPanel());
17104 this.eGridDiv.appendChild(this.getGui());
17105 this.addDestroyFunc(function () {
17106 _this.eGridDiv.removeChild(_this.getGui());
17107 });
17108 // if using angular, watch for quickFilter changes
17109 if (this.$scope) {
17110 var quickFilterUnregisterFn = this.$scope.$watch(this.quickFilterOnScope, function (newFilter) { return _this.filterManager.setQuickFilter(newFilter); });
17111 this.addDestroyFunc(quickFilterUnregisterFn);
17112 }
17113 // important to set rtl before doLayout, as setting the RTL class impacts the scroll position,
17114 // which doLayout indirectly depends on
17115 this.addRtlSupport();
17116 this.finished = false;
17117 this.addDestroyFunc(function () { return _this.finished = true; });
17118 this.logger.log('ready');
17119 this.gridOptionsWrapper.addLayoutElement(this.eRootWrapperBody);
17120 var unsubscribeFromResize = resizeObserver_1.observeResize(this.eGridDiv, this.onGridSizeChanged.bind(this));
17121 this.addDestroyFunc(function () { return unsubscribeFromResize(); });
17122 };
17123 GridCore.prototype.onGridSizeChanged = function () {
17124 var event = {
17125 type: events_1.Events.EVENT_GRID_SIZE_CHANGED,
17126 api: this.gridApi,
17127 columnApi: this.columnApi,
17128 clientWidth: this.eGridDiv.clientWidth,
17129 clientHeight: this.eGridDiv.clientHeight
17130 };
17131 this.eventService.dispatchEvent(event);
17132 };
17133 GridCore.prototype.getPreferredWidth = function () {
17134 var widthForCols = this.columnController.getBodyContainerWidth()
17135 + this.columnController.getPinnedLeftContainerWidth()
17136 + this.columnController.getPinnedRightContainerWidth();
17137 var widthForToolpanel = this.toolPanelComp ? this.toolPanelComp.getPreferredWidth() : 0;
17138 return widthForCols + widthForToolpanel;
17139 };
17140 GridCore.prototype.addRtlSupport = function () {
17141 var cssClass = this.gridOptionsWrapper.isEnableRtl() ? 'ag-rtl' : 'ag-ltr';
17142 utils_1.Utils.addCssClass(this.getGui(), cssClass);
17143 };
17144 GridCore.prototype.getRootGui = function () {
17145 return this.getGui();
17146 };
17147 GridCore.prototype.showToolPanel = function (show) {
17148 if (!this.toolPanelComp) {
17149 if (show) {
17150 console.warn('ag-Grid: toolPanel is only available in ag-Grid Enterprise');
17151 }
17152 return;
17153 }
17154 this.toolPanelComp.showToolPanel(show);
17155 };
17156 GridCore.prototype.isToolPanelShowing = function () {
17157 return this.toolPanelComp.isToolPanelShowing();
17158 };
17159 // need to override, as parent class isn't marked with PreDestroy
17160 GridCore.prototype.destroy = function () {
17161 _super.prototype.destroy.call(this);
17162 this.logger.log('Grid DOM removed');
17163 };
17164 // Valid values for position are bottom, middle and top
17165 GridCore.prototype.ensureNodeVisible = function (comparator, position) {
17166 if (position === void 0) { position = 'top'; }
17167 if (this.doingVirtualPaging) {
17168 throw 'Cannot use ensureNodeVisible when doing virtual paging, as we cannot check rows that are not in memory';
17169 }
17170 // look for the node index we want to display
17171 var rowCount = this.rowModel.getPageLastRow() + 1;
17172 var comparatorIsAFunction = typeof comparator === 'function';
17173 var indexToSelect = -1;
17174 // go through all the nodes, find the one we want to show
17175 for (var i = 0; i < rowCount; i++) {
17176 var node = this.rowModel.getRow(i);
17177 if (comparatorIsAFunction) {
17178 if (comparator(node)) {
17179 indexToSelect = i;
17180 break;
17181 }
17182 }
17183 else {
17184 // check object equality against node and data
17185 if (comparator === node || comparator === node.data) {
17186 indexToSelect = i;
17187 break;
17188 }
17189 }
17190 }
17191 if (indexToSelect >= 0) {
17192 this.gridPanel.ensureIndexVisible(indexToSelect, position);
17193 }
17194 };
17195 GridCore.TEMPLATE_NORMAL = "<div class=\"ag-root-wrapper\">\n <div class=\"ag-root-wrapper-body\" ref=\"rootWrapperBody\">\n <ag-grid-comp ref=\"gridPanel\"></ag-grid-comp>\n </div>\n <ag-pagination></ag-pagination>\n </div>";
17196 GridCore.TEMPLATE_ENTERPRISE = "<div class=\"ag-root-wrapper\">\n <ag-header-column-drop></ag-header-column-drop>\n <div ref=\"rootWrapperBody\" class=\"ag-root-wrapper-body\">\n <ag-grid-comp ref=\"gridPanel\"></ag-grid-comp>\n <ag-tool-panel ref=\"toolPanel\"></ag-tool-panel>\n </div>\n <ag-status-bar ref=\"statusBar\"></ag-status-bar>\n <ag-pagination></ag-pagination>\n </div>";
17197 __decorate([
17198 context_1.Autowired('enterprise'),
17199 __metadata("design:type", Boolean)
17200 ], GridCore.prototype, "enterprise", void 0);
17201 __decorate([
17202 context_1.Autowired('gridOptions'),
17203 __metadata("design:type", Object)
17204 ], GridCore.prototype, "gridOptions", void 0);
17205 __decorate([
17206 context_1.Autowired('gridOptionsWrapper'),
17207 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
17208 ], GridCore.prototype, "gridOptionsWrapper", void 0);
17209 __decorate([
17210 context_1.Autowired('rowModel'),
17211 __metadata("design:type", Object)
17212 ], GridCore.prototype, "rowModel", void 0);
17213 __decorate([
17214 context_1.Autowired('frameworkFactory'),
17215 __metadata("design:type", Object)
17216 ], GridCore.prototype, "frameworkFactory", void 0);
17217 __decorate([
17218 context_1.Autowired('columnController'),
17219 __metadata("design:type", columnController_1.ColumnController)
17220 ], GridCore.prototype, "columnController", void 0);
17221 __decorate([
17222 context_1.Autowired('rowRenderer'),
17223 __metadata("design:type", rowRenderer_1.RowRenderer)
17224 ], GridCore.prototype, "rowRenderer", void 0);
17225 __decorate([
17226 context_1.Autowired('filterManager'),
17227 __metadata("design:type", filterManager_1.FilterManager)
17228 ], GridCore.prototype, "filterManager", void 0);
17229 __decorate([
17230 context_1.Autowired('eventService'),
17231 __metadata("design:type", eventService_1.EventService)
17232 ], GridCore.prototype, "eventService", void 0);
17233 __decorate([
17234 context_1.Autowired('eGridDiv'),
17235 __metadata("design:type", HTMLElement)
17236 ], GridCore.prototype, "eGridDiv", void 0);
17237 __decorate([
17238 context_1.Autowired('$scope'),
17239 __metadata("design:type", Object)
17240 ], GridCore.prototype, "$scope", void 0);
17241 __decorate([
17242 context_1.Autowired('quickFilterOnScope'),
17243 __metadata("design:type", String)
17244 ], GridCore.prototype, "quickFilterOnScope", void 0);
17245 __decorate([
17246 context_1.Autowired('popupService'),
17247 __metadata("design:type", popupService_1.PopupService)
17248 ], GridCore.prototype, "popupService", void 0);
17249 __decorate([
17250 context_1.Autowired('focusedCellController'),
17251 __metadata("design:type", focusedCellController_1.FocusedCellController)
17252 ], GridCore.prototype, "focusedCellController", void 0);
17253 __decorate([
17254 context_1.Autowired('context'),
17255 __metadata("design:type", context_1.Context)
17256 ], GridCore.prototype, "context", void 0);
17257 __decorate([
17258 context_1.Autowired('loggerFactory'),
17259 __metadata("design:type", logger_1.LoggerFactory)
17260 ], GridCore.prototype, "loggerFactory", void 0);
17261 __decorate([
17262 context_1.Autowired('columnApi'),
17263 __metadata("design:type", columnApi_1.ColumnApi)
17264 ], GridCore.prototype, "columnApi", void 0);
17265 __decorate([
17266 context_1.Autowired('gridApi'),
17267 __metadata("design:type", gridApi_1.GridApi)
17268 ], GridCore.prototype, "gridApi", void 0);
17269 __decorate([
17270 context_1.Optional('rowGroupCompFactory'),
17271 __metadata("design:type", Object)
17272 ], GridCore.prototype, "rowGroupCompFactory", void 0);
17273 __decorate([
17274 context_1.Optional('pivotCompFactory'),
17275 __metadata("design:type", Object)
17276 ], GridCore.prototype, "pivotCompFactory", void 0);
17277 __decorate([
17278 componentAnnotations_1.RefSelector('statusBar'),
17279 __metadata("design:type", Object)
17280 ], GridCore.prototype, "statusBar", void 0);
17281 __decorate([
17282 componentAnnotations_1.RefSelector('gridPanel'),
17283 __metadata("design:type", gridPanel_1.GridPanel)
17284 ], GridCore.prototype, "gridPanel", void 0);
17285 __decorate([
17286 componentAnnotations_1.RefSelector('toolPanel'),
17287 __metadata("design:type", Object)
17288 ], GridCore.prototype, "toolPanelComp", void 0);
17289 __decorate([
17290 componentAnnotations_1.RefSelector('rootWrapperBody'),
17291 __metadata("design:type", HTMLElement)
17292 ], GridCore.prototype, "eRootWrapperBody", void 0);
17293 __decorate([
17294 context_1.PostConstruct,
17295 __metadata("design:type", Function),
17296 __metadata("design:paramtypes", []),
17297 __metadata("design:returntype", void 0)
17298 ], GridCore.prototype, "init", null);
17299 __decorate([
17300 context_1.PreDestroy,
17301 __metadata("design:type", Function),
17302 __metadata("design:paramtypes", []),
17303 __metadata("design:returntype", void 0)
17304 ], GridCore.prototype, "destroy", null);
17305 GridCore = GridCore_1 = __decorate([
17306 context_1.Bean('gridCore'),
17307 __metadata("design:paramtypes", [])
17308 ], GridCore);
17309 return GridCore;
17310 var GridCore_1;
17311}(component_1.Component));
17312exports.GridCore = GridCore;
17313
17314
17315/***/ }),
17316/* 45 */
17317/***/ (function(module, exports, __webpack_require__) {
17318
17319"use strict";
17320/**
17321 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
17322 * @version v18.1.2
17323 * @link http://www.ag-grid.com/
17324 * @license MIT
17325 */
17326
17327var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
17328 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
17329 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
17330 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
17331 return c > 3 && r && Object.defineProperty(target, key, r), r;
17332};
17333var __metadata = (this && this.__metadata) || function (k, v) {
17334 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
17335};
17336Object.defineProperty(exports, "__esModule", { value: true });
17337var context_1 = __webpack_require__(0);
17338var gridOptionsWrapper_1 = __webpack_require__(2);
17339var expressionService_1 = __webpack_require__(21);
17340var ValueFormatterService = (function () {
17341 function ValueFormatterService() {
17342 }
17343 ValueFormatterService.prototype.formatValue = function (column, rowNode, $scope, value) {
17344 var formatter;
17345 var colDef = column.getColDef();
17346 // if floating, give preference to the floating formatter
17347 if (rowNode && rowNode.rowPinned) {
17348 formatter = colDef.pinnedRowValueFormatter ? colDef.pinnedRowValueFormatter : colDef.valueFormatter;
17349 }
17350 else {
17351 formatter = colDef.valueFormatter;
17352 }
17353 var result = null;
17354 if (formatter) {
17355 var params = {
17356 value: value,
17357 node: rowNode,
17358 data: rowNode ? rowNode.data : null,
17359 colDef: column.getColDef(),
17360 column: column,
17361 api: this.gridOptionsWrapper.getApi(),
17362 columnApi: this.gridOptionsWrapper.getColumnApi(),
17363 context: this.gridOptionsWrapper.getContext()
17364 };
17365 // originally we put the angular 1 scope here, but we don't want the scope
17366 // in the params interface, as other frameworks will see the interface, and
17367 // angular 1 is not cool any more. so we hack the scope in here (we cannot
17368 // include it above, as it's not in the interface, so would cause a compile error).
17369 // in the future, when we stop supporting angular 1, we can take this out.
17370 params.$scope = $scope;
17371 result = this.expressionService.evaluate(formatter, params);
17372 }
17373 else if (colDef.refData) {
17374 return colDef.refData[value];
17375 }
17376 // if we don't do this, then arrays get displayed as 1,2,3, but we want 1, 2, 3 (ie with spaces)
17377 if ((result === null || result === undefined) && Array.isArray(value)) {
17378 result = value.join(', ');
17379 }
17380 return result;
17381 };
17382 __decorate([
17383 context_1.Autowired('gridOptionsWrapper'),
17384 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
17385 ], ValueFormatterService.prototype, "gridOptionsWrapper", void 0);
17386 __decorate([
17387 context_1.Autowired('expressionService'),
17388 __metadata("design:type", expressionService_1.ExpressionService)
17389 ], ValueFormatterService.prototype, "expressionService", void 0);
17390 ValueFormatterService = __decorate([
17391 context_1.Bean('valueFormatterService')
17392 ], ValueFormatterService);
17393 return ValueFormatterService;
17394}());
17395exports.ValueFormatterService = ValueFormatterService;
17396
17397
17398/***/ }),
17399/* 46 */
17400/***/ (function(module, exports, __webpack_require__) {
17401
17402"use strict";
17403/**
17404 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
17405 * @version v18.1.2
17406 * @link http://www.ag-grid.com/
17407 * @license MIT
17408 */
17409
17410var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
17411 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
17412 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
17413 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
17414 return c > 3 && r && Object.defineProperty(target, key, r), r;
17415};
17416var __metadata = (this && this.__metadata) || function (k, v) {
17417 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
17418};
17419Object.defineProperty(exports, "__esModule", { value: true });
17420var context_1 = __webpack_require__(0);
17421var context_2 = __webpack_require__(0);
17422var utils_1 = __webpack_require__(1);
17423var gridOptionsWrapper_1 = __webpack_require__(2);
17424var cellComp_1 = __webpack_require__(36);
17425var MouseEventService = (function () {
17426 function MouseEventService() {
17427 this.gridInstanceId = MouseEventService_1.gridInstanceSequence.next();
17428 }
17429 MouseEventService_1 = MouseEventService;
17430 MouseEventService.prototype.init = function () {
17431 this.stampDomElementWithGridInstance();
17432 };
17433 // we put the instance id onto the main DOM element. this is used for events, when grids are inside grids,
17434 // so the grid can work out if the even came from this grid or a grid inside this one. see the ctrl+v logic
17435 // for where this is used.
17436 MouseEventService.prototype.stampDomElementWithGridInstance = function () {
17437 this.eGridDiv[MouseEventService_1.GRID_DOM_KEY] = this.gridInstanceId;
17438 };
17439 MouseEventService.prototype.getRenderedCellForEvent = function (event) {
17440 var sourceElement = utils_1.Utils.getTarget(event);
17441 while (sourceElement) {
17442 var renderedCell = this.gridOptionsWrapper.getDomData(sourceElement, cellComp_1.CellComp.DOM_DATA_KEY_CELL_COMP);
17443 if (renderedCell) {
17444 return renderedCell;
17445 }
17446 sourceElement = sourceElement.parentElement;
17447 }
17448 return null;
17449 };
17450 // walks the path of the event, and returns true if this grid is the first one that it finds. if doing
17451 // master / detail grids, and a child grid is found, then it returns false. this stops things like copy/paste
17452 // getting executed on many grids at the same time.
17453 MouseEventService.prototype.isEventFromThisGrid = function (event) {
17454 var path = utils_1.Utils.getEventPath(event);
17455 for (var i = 0; i < path.length; i++) {
17456 var element = path[i];
17457 var instanceId = element[MouseEventService_1.GRID_DOM_KEY];
17458 if (utils_1.Utils.exists(instanceId)) {
17459 var eventFromThisGrid = instanceId === this.gridInstanceId;
17460 return eventFromThisGrid;
17461 }
17462 }
17463 return false;
17464 };
17465 MouseEventService.prototype.getGridCellForEvent = function (event) {
17466 var cellComp = this.getRenderedCellForEvent(event);
17467 return cellComp ? cellComp.getGridCell() : null;
17468 };
17469 MouseEventService.gridInstanceSequence = new utils_1.NumberSequence();
17470 MouseEventService.GRID_DOM_KEY = '__ag_grid_instance';
17471 __decorate([
17472 context_2.Autowired('gridOptionsWrapper'),
17473 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
17474 ], MouseEventService.prototype, "gridOptionsWrapper", void 0);
17475 __decorate([
17476 context_2.Autowired('eGridDiv'),
17477 __metadata("design:type", HTMLElement)
17478 ], MouseEventService.prototype, "eGridDiv", void 0);
17479 __decorate([
17480 context_1.PostConstruct,
17481 __metadata("design:type", Function),
17482 __metadata("design:paramtypes", []),
17483 __metadata("design:returntype", void 0)
17484 ], MouseEventService.prototype, "init", null);
17485 MouseEventService = MouseEventService_1 = __decorate([
17486 context_1.Bean('mouseEventService')
17487 ], MouseEventService);
17488 return MouseEventService;
17489 var MouseEventService_1;
17490}());
17491exports.MouseEventService = MouseEventService;
17492
17493
17494/***/ }),
17495/* 47 */
17496/***/ (function(module, exports, __webpack_require__) {
17497
17498"use strict";
17499/**
17500 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
17501 * @version v18.1.2
17502 * @link http://www.ag-grid.com/
17503 * @license MIT
17504 */
17505
17506var __extends = (this && this.__extends) || (function () {
17507 var extendStatics = Object.setPrototypeOf ||
17508 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
17509 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
17510 return function (d, b) {
17511 extendStatics(d, b);
17512 function __() { this.constructor = d; }
17513 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
17514 };
17515})();
17516var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
17517 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
17518 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
17519 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
17520 return c > 3 && r && Object.defineProperty(target, key, r), r;
17521};
17522var __metadata = (this && this.__metadata) || function (k, v) {
17523 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
17524};
17525Object.defineProperty(exports, "__esModule", { value: true });
17526var eventService_1 = __webpack_require__(3);
17527var context_1 = __webpack_require__(0);
17528var events_1 = __webpack_require__(5);
17529var beanStub_1 = __webpack_require__(13);
17530var columnApi_1 = __webpack_require__(7);
17531var gridApi_1 = __webpack_require__(6);
17532var ColumnHoverService = (function (_super) {
17533 __extends(ColumnHoverService, _super);
17534 function ColumnHoverService() {
17535 return _super !== null && _super.apply(this, arguments) || this;
17536 }
17537 ColumnHoverService.prototype.setMouseOver = function (columns) {
17538 this.selectedColumns = columns;
17539 var event = {
17540 type: events_1.Events.EVENT_COLUMN_HOVER_CHANGED,
17541 api: this.gridApi,
17542 columnApi: this.columnApi
17543 };
17544 this.eventService.dispatchEvent(event);
17545 };
17546 ColumnHoverService.prototype.clearMouseOver = function () {
17547 this.selectedColumns = null;
17548 var event = {
17549 type: events_1.Events.EVENT_COLUMN_HOVER_CHANGED,
17550 api: this.gridApi,
17551 columnApi: this.columnApi
17552 };
17553 this.eventService.dispatchEvent(event);
17554 };
17555 ColumnHoverService.prototype.isHovered = function (column) {
17556 return this.selectedColumns && this.selectedColumns.indexOf(column) >= 0;
17557 };
17558 __decorate([
17559 context_1.Autowired('eventService'),
17560 __metadata("design:type", eventService_1.EventService)
17561 ], ColumnHoverService.prototype, "eventService", void 0);
17562 __decorate([
17563 context_1.Autowired('columnApi'),
17564 __metadata("design:type", columnApi_1.ColumnApi)
17565 ], ColumnHoverService.prototype, "columnApi", void 0);
17566 __decorate([
17567 context_1.Autowired('gridApi'),
17568 __metadata("design:type", gridApi_1.GridApi)
17569 ], ColumnHoverService.prototype, "gridApi", void 0);
17570 ColumnHoverService = __decorate([
17571 context_1.Bean('columnHoverService')
17572 ], ColumnHoverService);
17573 return ColumnHoverService;
17574}(beanStub_1.BeanStub));
17575exports.ColumnHoverService = ColumnHoverService;
17576
17577
17578/***/ }),
17579/* 48 */
17580/***/ (function(module, exports, __webpack_require__) {
17581
17582"use strict";
17583/**
17584 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
17585 * @version v18.1.2
17586 * @link http://www.ag-grid.com/
17587 * @license MIT
17588 */
17589
17590Object.defineProperty(exports, "__esModule", { value: true });
17591var eventService_1 = __webpack_require__(3);
17592var utils_1 = __webpack_require__(1);
17593var TouchListener = (function () {
17594 function TouchListener(eElement, preventMouseClick) {
17595 if (preventMouseClick === void 0) { preventMouseClick = false; }
17596 var _this = this;
17597 this.destroyFuncs = [];
17598 this.touching = false;
17599 this.eventService = new eventService_1.EventService();
17600 this.eElement = eElement;
17601 this.preventMouseClick = preventMouseClick;
17602 var startListener = this.onTouchStart.bind(this);
17603 var moveListener = this.onTouchMove.bind(this);
17604 var endListener = this.onTouchEnd.bind(this);
17605 this.eElement.addEventListener("touchstart", startListener, { passive: true });
17606 this.eElement.addEventListener("touchmove", moveListener, { passive: true });
17607 // we set passive=false, as we want to prevent default on this event
17608 this.eElement.addEventListener("touchend", endListener, { passive: false });
17609 this.destroyFuncs.push(function () {
17610 _this.eElement.addEventListener("touchstart", startListener, { passive: true });
17611 _this.eElement.addEventListener("touchmove", moveListener, { passive: true });
17612 _this.eElement.addEventListener("touchend", endListener, { passive: false });
17613 });
17614 }
17615 TouchListener.prototype.getActiveTouch = function (touchList) {
17616 for (var i = 0; i < touchList.length; i++) {
17617 var matches = touchList[i].identifier === this.touchStart.identifier;
17618 if (matches) {
17619 return touchList[i];
17620 }
17621 }
17622 return null;
17623 };
17624 TouchListener.prototype.addEventListener = function (eventType, listener) {
17625 this.eventService.addEventListener(eventType, listener);
17626 };
17627 TouchListener.prototype.removeEventListener = function (eventType, listener) {
17628 this.eventService.removeEventListener(eventType, listener);
17629 };
17630 TouchListener.prototype.onTouchStart = function (touchEvent) {
17631 var _this = this;
17632 // only looking at one touch point at any time
17633 if (this.touching) {
17634 return;
17635 }
17636 this.touchStart = touchEvent.touches[0];
17637 this.touching = true;
17638 this.moved = false;
17639 var touchStartCopy = this.touchStart;
17640 setTimeout(function () {
17641 var touchesMatch = _this.touchStart === touchStartCopy;
17642 if (_this.touching && touchesMatch && !_this.moved) {
17643 _this.moved = true;
17644 var event_1 = {
17645 type: TouchListener.EVENT_LONG_TAP,
17646 touchStart: _this.touchStart,
17647 touchEvent: touchEvent
17648 };
17649 _this.eventService.dispatchEvent(event_1);
17650 }
17651 }, 500);
17652 };
17653 TouchListener.prototype.onTouchMove = function (touchEvent) {
17654 if (!this.touching) {
17655 return;
17656 }
17657 var touch = this.getActiveTouch(touchEvent.touches);
17658 if (!touch) {
17659 return;
17660 }
17661 var eventIsFarAway = !utils_1.Utils.areEventsNear(touch, this.touchStart, 4);
17662 if (eventIsFarAway) {
17663 this.moved = true;
17664 }
17665 };
17666 TouchListener.prototype.onTouchEnd = function (touchEvent) {
17667 if (!this.touching) {
17668 return;
17669 }
17670 if (!this.moved) {
17671 var event_2 = {
17672 type: TouchListener.EVENT_TAP,
17673 touchStart: this.touchStart
17674 };
17675 this.eventService.dispatchEvent(event_2);
17676 this.checkForDoubleTap();
17677 // stops the tap from also been processed as a mouse click
17678 if (this.preventMouseClick) {
17679 touchEvent.preventDefault();
17680 }
17681 }
17682 this.touching = false;
17683 };
17684 TouchListener.prototype.checkForDoubleTap = function () {
17685 var now = new Date().getTime();
17686 if (this.lastTapTime > 0) {
17687 // if previous tap, see if duration is short enough to be considered double tap
17688 var interval = now - this.lastTapTime;
17689 if (interval > TouchListener.DOUBLE_TAP_MILLIS) {
17690 // dispatch double tap event
17691 var event_3 = {
17692 type: TouchListener.EVENT_DOUBLE_TAP,
17693 touchStart: this.touchStart
17694 };
17695 this.eventService.dispatchEvent(event_3);
17696 // this stops a tripple tap ending up as two double taps
17697 this.lastTapTime = null;
17698 }
17699 else {
17700 this.lastTapTime = now;
17701 }
17702 }
17703 else {
17704 this.lastTapTime = now;
17705 }
17706 };
17707 TouchListener.prototype.destroy = function () {
17708 this.destroyFuncs.forEach(function (func) { return func(); });
17709 };
17710 TouchListener.EVENT_TAP = "tap";
17711 TouchListener.EVENT_DOUBLE_TAP = "doubleTap";
17712 TouchListener.EVENT_LONG_TAP = "longTap";
17713 TouchListener.DOUBLE_TAP_MILLIS = 500;
17714 return TouchListener;
17715}());
17716exports.TouchListener = TouchListener;
17717
17718
17719/***/ }),
17720/* 49 */
17721/***/ (function(module, exports, __webpack_require__) {
17722
17723"use strict";
17724/**
17725 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
17726 * @version v18.1.2
17727 * @link http://www.ag-grid.com/
17728 * @license MIT
17729 */
17730
17731var __extends = (this && this.__extends) || (function () {
17732 var extendStatics = Object.setPrototypeOf ||
17733 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
17734 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
17735 return function (d, b) {
17736 extendStatics(d, b);
17737 function __() { this.constructor = d; }
17738 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
17739 };
17740})();
17741var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
17742 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
17743 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
17744 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
17745 return c > 3 && r && Object.defineProperty(target, key, r), r;
17746};
17747var __metadata = (this && this.__metadata) || function (k, v) {
17748 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
17749};
17750Object.defineProperty(exports, "__esModule", { value: true });
17751var context_1 = __webpack_require__(0);
17752var gridSerializer_1 = __webpack_require__(65);
17753var downloader_1 = __webpack_require__(86);
17754var columnController_1 = __webpack_require__(4);
17755var valueService_1 = __webpack_require__(17);
17756var gridOptionsWrapper_1 = __webpack_require__(2);
17757var constants_1 = __webpack_require__(9);
17758var utils_1 = __webpack_require__(1);
17759var LINE_SEPARATOR = '\r\n';
17760var CsvSerializingSession = (function (_super) {
17761 __extends(CsvSerializingSession, _super);
17762 function CsvSerializingSession(columnController, valueService, gridOptionsWrapper, processCellCallback, processHeaderCallback, suppressQuotes, columnSeparator) {
17763 var _this = _super.call(this, columnController, valueService, gridOptionsWrapper, processCellCallback, processHeaderCallback) || this;
17764 _this.suppressQuotes = suppressQuotes;
17765 _this.columnSeparator = columnSeparator;
17766 _this.result = '';
17767 _this.lineOpened = false;
17768 return _this;
17769 }
17770 CsvSerializingSession.prototype.prepare = function (columnsToExport) {
17771 };
17772 CsvSerializingSession.prototype.addCustomHeader = function (customHeader) {
17773 if (!customHeader)
17774 return;
17775 this.result += customHeader + LINE_SEPARATOR;
17776 };
17777 CsvSerializingSession.prototype.addCustomFooter = function (customFooter) {
17778 if (!customFooter)
17779 return;
17780 this.result += customFooter + LINE_SEPARATOR;
17781 };
17782 CsvSerializingSession.prototype.onNewHeaderGroupingRow = function () {
17783 if (this.lineOpened)
17784 this.result += LINE_SEPARATOR;
17785 return {
17786 onColumn: this.onNewHeaderGroupingRowColumn.bind(this)
17787 };
17788 };
17789 CsvSerializingSession.prototype.onNewHeaderGroupingRowColumn = function (header, index, span) {
17790 if (index != 0) {
17791 this.result += this.columnSeparator;
17792 }
17793 this.result += header;
17794 for (var i = 1; i <= span; i++) {
17795 this.result += this.columnSeparator + this.putInQuotes("", this.suppressQuotes);
17796 }
17797 this.lineOpened = true;
17798 };
17799 CsvSerializingSession.prototype.onNewHeaderRow = function () {
17800 if (this.lineOpened)
17801 this.result += LINE_SEPARATOR;
17802 return {
17803 onColumn: this.onNewHeaderRowColumn.bind(this)
17804 };
17805 };
17806 CsvSerializingSession.prototype.onNewHeaderRowColumn = function (column, index, node) {
17807 if (index != 0) {
17808 this.result += this.columnSeparator;
17809 }
17810 this.result += this.putInQuotes(this.extractHeaderValue(column), this.suppressQuotes);
17811 this.lineOpened = true;
17812 };
17813 CsvSerializingSession.prototype.onNewBodyRow = function () {
17814 if (this.lineOpened)
17815 this.result += LINE_SEPARATOR;
17816 return {
17817 onColumn: this.onNewBodyRowColumn.bind(this)
17818 };
17819 };
17820 CsvSerializingSession.prototype.onNewBodyRowColumn = function (column, index, node) {
17821 if (index != 0) {
17822 this.result += this.columnSeparator;
17823 }
17824 this.result += this.putInQuotes(this.extractRowCellValue(column, index, constants_1.Constants.EXPORT_TYPE_CSV, node), this.suppressQuotes);
17825 this.lineOpened = true;
17826 };
17827 CsvSerializingSession.prototype.putInQuotes = function (value, suppressQuotes) {
17828 if (suppressQuotes) {
17829 return value;
17830 }
17831 if (value === null || value === undefined) {
17832 return '""';
17833 }
17834 var stringValue;
17835 if (typeof value === 'string') {
17836 stringValue = value;
17837 }
17838 else if (typeof value.toString === 'function') {
17839 stringValue = value.toString();
17840 }
17841 else {
17842 console.warn('unknown value type during csv conversion');
17843 stringValue = '';
17844 }
17845 // replace each " with "" (ie two sets of double quotes is how to do double quotes in csv)
17846 var valueEscaped = stringValue.replace(/"/g, "\"\"");
17847 return '"' + valueEscaped + '"';
17848 };
17849 CsvSerializingSession.prototype.parse = function () {
17850 return this.result;
17851 };
17852 return CsvSerializingSession;
17853}(gridSerializer_1.BaseGridSerializingSession));
17854exports.CsvSerializingSession = CsvSerializingSession;
17855var BaseCreator = (function () {
17856 function BaseCreator() {
17857 }
17858 BaseCreator.prototype.setBeans = function (beans) {
17859 this.beans = beans;
17860 };
17861 BaseCreator.prototype.export = function (userParams) {
17862 if (this.isExportSuppressed()) {
17863 console.warn("ag-grid: Export canceled. Export is not allowed as per your configuration.");
17864 return "";
17865 }
17866 var _a = this.getMergedParamsAndData(userParams), mergedParams = _a.mergedParams, data = _a.data;
17867 var fileNamePresent = mergedParams && mergedParams.fileName && mergedParams.fileName.length !== 0;
17868 var fileName = fileNamePresent ? mergedParams.fileName : this.getDefaultFileName();
17869 if (fileName.indexOf(".") === -1) {
17870 fileName = fileName + "." + this.getDefaultFileExtension();
17871 }
17872 this.beans.downloader.download(fileName, data, this.getMimeType());
17873 return data;
17874 };
17875 BaseCreator.prototype.getData = function (params) {
17876 return this.getMergedParamsAndData(params).data;
17877 };
17878 BaseCreator.prototype.getMergedParamsAndData = function (userParams) {
17879 var mergedParams = this.mergeDefaultParams(userParams);
17880 var data = this.beans.gridSerializer.serialize(this.createSerializingSession(mergedParams), mergedParams);
17881 return { mergedParams: mergedParams, data: data };
17882 };
17883 BaseCreator.prototype.mergeDefaultParams = function (userParams) {
17884 var baseParams = this.beans.gridOptionsWrapper.getDefaultExportParams();
17885 var params = {};
17886 utils_1._.assign(params, baseParams);
17887 utils_1._.assign(params, userParams);
17888 return params;
17889 };
17890 return BaseCreator;
17891}());
17892exports.BaseCreator = BaseCreator;
17893var CsvCreator = (function (_super) {
17894 __extends(CsvCreator, _super);
17895 function CsvCreator() {
17896 return _super !== null && _super.apply(this, arguments) || this;
17897 }
17898 CsvCreator.prototype.postConstruct = function () {
17899 this.setBeans({
17900 downloader: this.downloader,
17901 gridSerializer: this.gridSerializer,
17902 gridOptionsWrapper: this.gridOptionsWrapper
17903 });
17904 };
17905 CsvCreator.prototype.exportDataAsCsv = function (params) {
17906 return this.export(params);
17907 };
17908 CsvCreator.prototype.getDataAsCsv = function (params) {
17909 return this.getData(params);
17910 };
17911 CsvCreator.prototype.getMimeType = function () {
17912 return "text/csv;charset=utf-8;";
17913 };
17914 CsvCreator.prototype.getDefaultFileName = function () {
17915 return 'export.csv';
17916 };
17917 CsvCreator.prototype.getDefaultFileExtension = function () {
17918 return 'csv';
17919 };
17920 CsvCreator.prototype.createSerializingSession = function (params) {
17921 return new CsvSerializingSession(this.columnController, this.valueService, this.gridOptionsWrapper, params ? params.processCellCallback : null, params ? params.processHeaderCallback : null, params && params.suppressQuotes, (params && params.columnSeparator) || ',');
17922 };
17923 CsvCreator.prototype.isExportSuppressed = function () {
17924 return this.gridOptionsWrapper.isSuppressCsvExport();
17925 };
17926 __decorate([
17927 context_1.Autowired('columnController'),
17928 __metadata("design:type", columnController_1.ColumnController)
17929 ], CsvCreator.prototype, "columnController", void 0);
17930 __decorate([
17931 context_1.Autowired('valueService'),
17932 __metadata("design:type", valueService_1.ValueService)
17933 ], CsvCreator.prototype, "valueService", void 0);
17934 __decorate([
17935 context_1.Autowired('downloader'),
17936 __metadata("design:type", downloader_1.Downloader)
17937 ], CsvCreator.prototype, "downloader", void 0);
17938 __decorate([
17939 context_1.Autowired('gridSerializer'),
17940 __metadata("design:type", gridSerializer_1.GridSerializer)
17941 ], CsvCreator.prototype, "gridSerializer", void 0);
17942 __decorate([
17943 context_1.Autowired('gridOptionsWrapper'),
17944 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
17945 ], CsvCreator.prototype, "gridOptionsWrapper", void 0);
17946 __decorate([
17947 context_1.PostConstruct,
17948 __metadata("design:type", Function),
17949 __metadata("design:paramtypes", []),
17950 __metadata("design:returntype", void 0)
17951 ], CsvCreator.prototype, "postConstruct", null);
17952 CsvCreator = __decorate([
17953 context_1.Bean('csvCreator')
17954 ], CsvCreator);
17955 return CsvCreator;
17956}(BaseCreator));
17957exports.CsvCreator = CsvCreator;
17958
17959
17960/***/ }),
17961/* 50 */
17962/***/ (function(module, exports, __webpack_require__) {
17963
17964"use strict";
17965/**
17966 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
17967 * @version v18.1.2
17968 * @link http://www.ag-grid.com/
17969 * @license MIT
17970 */
17971
17972var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
17973 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
17974 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
17975 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
17976 return c > 3 && r && Object.defineProperty(target, key, r), r;
17977};
17978var __metadata = (this && this.__metadata) || function (k, v) {
17979 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
17980};
17981Object.defineProperty(exports, "__esModule", { value: true });
17982var columnUtils_1 = __webpack_require__(33);
17983var columnGroup_1 = __webpack_require__(28);
17984var originalColumnGroup_1 = __webpack_require__(34);
17985var context_1 = __webpack_require__(0);
17986var utils_1 = __webpack_require__(1);
17987var context_2 = __webpack_require__(0);
17988// takes in a list of columns, as specified by the column definitions, and returns column groups
17989var DisplayedGroupCreator = (function () {
17990 function DisplayedGroupCreator() {
17991 }
17992 DisplayedGroupCreator.prototype.createDisplayedGroups = function (
17993 // all displayed columns sorted - this is the columns the grid should show
17994 sortedVisibleColumns,
17995 // the tree of columns, as provided by the users, used to know what groups columns roll up into
17996 balancedColumnTree,
17997 // create's unique id's for the group
17998 groupInstanceIdCreator,
17999 // we try to reuse old groups if we can, to allow gui to do animation
18000 oldDisplayedGroups) {
18001 var _this = this;
18002 var result = [];
18003 var previousRealPath;
18004 var previousOriginalPath;
18005 var oldColumnsMapped = this.mapOldGroupsById(oldDisplayedGroups);
18006 // go through each column, then do a bottom up comparison to the previous column, and start
18007 // to share groups if they converge at any point.
18008 sortedVisibleColumns.forEach(function (currentColumn) {
18009 var currentOriginalPath = _this.getOriginalPathForColumn(balancedColumnTree, currentColumn);
18010 var currentRealPath = [];
18011 var firstColumn = !previousOriginalPath;
18012 for (var i = 0; i < currentOriginalPath.length; i++) {
18013 if (firstColumn || currentOriginalPath[i] !== previousOriginalPath[i]) {
18014 // new group needed
18015 var newGroup = _this.createColumnGroup(currentOriginalPath[i], groupInstanceIdCreator, oldColumnsMapped);
18016 currentRealPath[i] = newGroup;
18017 // if top level, add to result, otherwise add to parent
18018 if (i == 0) {
18019 result.push(newGroup);
18020 }
18021 else {
18022 currentRealPath[i - 1].addChild(newGroup);
18023 }
18024 }
18025 else {
18026 // reuse old group
18027 currentRealPath[i] = previousRealPath[i];
18028 }
18029 }
18030 var noColumnGroups = currentRealPath.length === 0;
18031 if (noColumnGroups) {
18032 // if we are not grouping, then the result of the above is an empty
18033 // path (no groups), and we just add the column to the root list.
18034 result.push(currentColumn);
18035 }
18036 else {
18037 var leafGroup = currentRealPath[currentRealPath.length - 1];
18038 leafGroup.addChild(currentColumn);
18039 }
18040 previousRealPath = currentRealPath;
18041 previousOriginalPath = currentOriginalPath;
18042 });
18043 this.setupParentsIntoColumns(result, null);
18044 return result;
18045 };
18046 DisplayedGroupCreator.prototype.createColumnGroup = function (originalGroup, groupInstanceIdCreator, oldColumnsMapped) {
18047 var groupId = originalGroup.getGroupId();
18048 var instanceId = groupInstanceIdCreator.getInstanceIdForKey(groupId);
18049 var uniqueId = columnGroup_1.ColumnGroup.createUniqueId(groupId, instanceId);
18050 var columnGroup = oldColumnsMapped[uniqueId];
18051 // if the user is setting new colDefs, it is possible that the id's overlap, and we
18052 // would have a false match from above. so we double check we are talking about the
18053 // same original column group.
18054 if (columnGroup && columnGroup.getOriginalColumnGroup() !== originalGroup) {
18055 columnGroup = null;
18056 }
18057 if (utils_1.Utils.exists(columnGroup)) {
18058 // clean out the old column group here, as we will be adding children into it again
18059 columnGroup.reset();
18060 }
18061 else {
18062 columnGroup = new columnGroup_1.ColumnGroup(originalGroup, groupId, instanceId);
18063 this.context.wireBean(columnGroup);
18064 }
18065 return columnGroup;
18066 };
18067 // returns back a 2d map of ColumnGroup as follows: groupId -> instanceId -> ColumnGroup
18068 DisplayedGroupCreator.prototype.mapOldGroupsById = function (displayedGroups) {
18069 var result = {};
18070 var recursive = function (columnsOrGroups) {
18071 columnsOrGroups.forEach(function (columnOrGroup) {
18072 if (columnOrGroup instanceof columnGroup_1.ColumnGroup) {
18073 var columnGroup = columnOrGroup;
18074 result[columnOrGroup.getUniqueId()] = columnGroup;
18075 recursive(columnGroup.getChildren());
18076 }
18077 });
18078 };
18079 if (displayedGroups) {
18080 recursive(displayedGroups);
18081 }
18082 return result;
18083 };
18084 DisplayedGroupCreator.prototype.setupParentsIntoColumns = function (columnsOrGroups, parent) {
18085 var _this = this;
18086 columnsOrGroups.forEach(function (columnsOrGroup) {
18087 columnsOrGroup.setParent(parent);
18088 if (columnsOrGroup instanceof columnGroup_1.ColumnGroup) {
18089 var columnGroup = columnsOrGroup;
18090 _this.setupParentsIntoColumns(columnGroup.getChildren(), columnGroup);
18091 }
18092 });
18093 };
18094 // private createFakePath(balancedColumnTree: OriginalColumnGroupChild[], column: Column): OriginalColumnGroup[] {
18095 // let fakePath: OriginalColumnGroup[] = [];
18096 // let currentChildren = balancedColumnTree;
18097 // // this while loop does search on the balanced tree, so our result is the right length
18098 // let index = 0;
18099 // while (currentChildren && currentChildren[0] && currentChildren[0] instanceof OriginalColumnGroup) {
18100 // // putting in a deterministic fake id, in case the API in the future needs to reference the col
18101 // let fakeGroup = new OriginalColumnGroup(null, 'FAKE_PATH_' + index, true);
18102 // this.context.wireBean(fakeGroup);
18103 //
18104 // // fakePath.setChildren(children);
18105 //
18106 // fakePath.push(fakeGroup);
18107 // currentChildren = (<OriginalColumnGroup>currentChildren[0]).getChildren();
18108 // index++;
18109 // }
18110 //
18111 // fakePath.forEach( (fakePathGroup: OriginalColumnGroup, i: number) => {
18112 // let lastItemInList = i === fakePath.length-1;
18113 // let child = lastItemInList ? column : fakePath[i+1];
18114 // fakePathGroup.setChildren([child]);
18115 // });
18116 //
18117 // return fakePath;
18118 // }
18119 DisplayedGroupCreator.prototype.getOriginalPathForColumn = function (balancedColumnTree, column) {
18120 var result = [];
18121 var found = false;
18122 recursePath(balancedColumnTree, 0);
18123 // it's possible we didn't find a path. this happens if the column is generated
18124 // by the grid (auto-group), in that the definition didn't come from the client. in this case,
18125 // we create a fake original path.
18126 if (found) {
18127 return result;
18128 }
18129 else {
18130 console.log('could not get path');
18131 return null;
18132 // return this.createFakePath(balancedColumnTree, column);
18133 }
18134 function recursePath(balancedColumnTree, dept) {
18135 for (var i = 0; i < balancedColumnTree.length; i++) {
18136 if (found) {
18137 // quit the search, so 'result' is kept with the found result
18138 return;
18139 }
18140 var node = balancedColumnTree[i];
18141 if (node instanceof originalColumnGroup_1.OriginalColumnGroup) {
18142 var nextNode = node;
18143 recursePath(nextNode.getChildren(), dept + 1);
18144 result[dept] = node;
18145 }
18146 else {
18147 if (node === column) {
18148 found = true;
18149 }
18150 }
18151 }
18152 }
18153 };
18154 __decorate([
18155 context_2.Autowired('columnUtils'),
18156 __metadata("design:type", columnUtils_1.ColumnUtils)
18157 ], DisplayedGroupCreator.prototype, "columnUtils", void 0);
18158 __decorate([
18159 context_2.Autowired('context'),
18160 __metadata("design:type", context_1.Context)
18161 ], DisplayedGroupCreator.prototype, "context", void 0);
18162 DisplayedGroupCreator = __decorate([
18163 context_1.Bean('displayedGroupCreator')
18164 ], DisplayedGroupCreator);
18165 return DisplayedGroupCreator;
18166}());
18167exports.DisplayedGroupCreator = DisplayedGroupCreator;
18168
18169
18170/***/ }),
18171/* 51 */
18172/***/ (function(module, exports, __webpack_require__) {
18173
18174"use strict";
18175/**
18176 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
18177 * @version v18.1.2
18178 * @link http://www.ag-grid.com/
18179 * @license MIT
18180 */
18181
18182var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
18183 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
18184 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
18185 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
18186 return c > 3 && r && Object.defineProperty(target, key, r), r;
18187};
18188var __metadata = (this && this.__metadata) || function (k, v) {
18189 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
18190};
18191Object.defineProperty(exports, "__esModule", { value: true });
18192var context_1 = __webpack_require__(0);
18193var context_2 = __webpack_require__(0);
18194var TemplateService = (function () {
18195 function TemplateService() {
18196 this.templateCache = {};
18197 this.waitingCallbacks = {};
18198 }
18199 // returns the template if it is loaded, or null if it is not loaded
18200 // but will call the callback when it is loaded
18201 TemplateService.prototype.getTemplate = function (url, callback) {
18202 var templateFromCache = this.templateCache[url];
18203 if (templateFromCache) {
18204 return templateFromCache;
18205 }
18206 var callbackList = this.waitingCallbacks[url];
18207 var that = this;
18208 if (!callbackList) {
18209 // first time this was called, so need a new list for callbacks
18210 callbackList = [];
18211 this.waitingCallbacks[url] = callbackList;
18212 // and also need to do the http request
18213 var client = new XMLHttpRequest();
18214 client.onload = function () {
18215 that.handleHttpResult(this, url);
18216 };
18217 client.open("GET", url);
18218 client.send();
18219 }
18220 // add this callback
18221 if (callback) {
18222 callbackList.push(callback);
18223 }
18224 // caller needs to wait for template to load, so return null
18225 return null;
18226 };
18227 TemplateService.prototype.handleHttpResult = function (httpResult, url) {
18228 if (httpResult.status !== 200 || httpResult.response === null) {
18229 console.warn('Unable to get template error ' + httpResult.status + ' - ' + url);
18230 return;
18231 }
18232 // response success, so process it
18233 // in IE9 the response is in - responseText
18234 this.templateCache[url] = httpResult.response || httpResult.responseText;
18235 // inform all listeners that this is now in the cache
18236 var callbacks = this.waitingCallbacks[url];
18237 for (var i = 0; i < callbacks.length; i++) {
18238 var callback = callbacks[i];
18239 // we could pass the callback the response, however we know the client of this code
18240 // is the cell renderer, and it passes the 'cellRefresh' method in as the callback
18241 // which doesn't take any parameters.
18242 callback();
18243 }
18244 if (this.$scope) {
18245 var that_1 = this;
18246 setTimeout(function () {
18247 that_1.$scope.$apply();
18248 }, 0);
18249 }
18250 };
18251 __decorate([
18252 context_2.Autowired('$scope'),
18253 __metadata("design:type", Object)
18254 ], TemplateService.prototype, "$scope", void 0);
18255 TemplateService = __decorate([
18256 context_1.Bean('templateService')
18257 ], TemplateService);
18258 return TemplateService;
18259}());
18260exports.TemplateService = TemplateService;
18261
18262
18263/***/ }),
18264/* 52 */
18265/***/ (function(module, exports, __webpack_require__) {
18266
18267"use strict";
18268/**
18269 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
18270 * @version v18.1.2
18271 * @link http://www.ag-grid.com/
18272 * @license MIT
18273 */
18274
18275var __extends = (this && this.__extends) || (function () {
18276 var extendStatics = Object.setPrototypeOf ||
18277 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
18278 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
18279 return function (d, b) {
18280 extendStatics(d, b);
18281 function __() { this.constructor = d; }
18282 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
18283 };
18284})();
18285var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
18286 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
18287 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
18288 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
18289 return c > 3 && r && Object.defineProperty(target, key, r), r;
18290};
18291var __metadata = (this && this.__metadata) || function (k, v) {
18292 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
18293};
18294Object.defineProperty(exports, "__esModule", { value: true });
18295var utils_1 = __webpack_require__(1);
18296var cellComp_1 = __webpack_require__(36);
18297var rowNode_1 = __webpack_require__(18);
18298var gridOptionsWrapper_1 = __webpack_require__(2);
18299var column_1 = __webpack_require__(10);
18300var events_1 = __webpack_require__(5);
18301var context_1 = __webpack_require__(0);
18302var component_1 = __webpack_require__(8);
18303var componentAnnotations_1 = __webpack_require__(11);
18304var LoadingCellRenderer = (function (_super) {
18305 __extends(LoadingCellRenderer, _super);
18306 function LoadingCellRenderer() {
18307 return _super.call(this, LoadingCellRenderer.TEMPLATE) || this;
18308 }
18309 LoadingCellRenderer.prototype.init = function (params) {
18310 var eLoadingIcon = utils_1._.createIconNoSpan('groupLoading', this.gridOptionsWrapper, null);
18311 this.eLoadingIcon.appendChild(eLoadingIcon);
18312 var localeTextFunc = this.gridOptionsWrapper.getLocaleTextFunc();
18313 this.eLoadingText.innerText = localeTextFunc('loadingOoo', 'Loading');
18314 };
18315 LoadingCellRenderer.prototype.refresh = function (params) {
18316 return false;
18317 };
18318 LoadingCellRenderer.TEMPLATE = "<div class=\"ag-stub-cell\">\n <span class=\"ag-loading-icon\" ref=\"eLoadingIcon\"></span>\n <span class=\"ag-loading-text\" ref=\"eLoadingText\"></span>\n </div>";
18319 __decorate([
18320 context_1.Autowired('gridOptionsWrapper'),
18321 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
18322 ], LoadingCellRenderer.prototype, "gridOptionsWrapper", void 0);
18323 __decorate([
18324 componentAnnotations_1.RefSelector('eLoadingIcon'),
18325 __metadata("design:type", HTMLElement)
18326 ], LoadingCellRenderer.prototype, "eLoadingIcon", void 0);
18327 __decorate([
18328 componentAnnotations_1.RefSelector('eLoadingText'),
18329 __metadata("design:type", HTMLElement)
18330 ], LoadingCellRenderer.prototype, "eLoadingText", void 0);
18331 return LoadingCellRenderer;
18332}(component_1.Component));
18333exports.LoadingCellRenderer = LoadingCellRenderer;
18334var RowComp = (function (_super) {
18335 __extends(RowComp, _super);
18336 function RowComp(parentScope, bodyContainerComp, pinnedLeftContainerComp, pinnedRightContainerComp, fullWidthContainerComp, rowNode, beans, animateIn, useAnimationFrameForCreate) {
18337 var _this = _super.call(this) || this;
18338 _this.eAllRowContainers = [];
18339 _this.active = true;
18340 _this.columnRefreshPending = false;
18341 _this.cellComps = {};
18342 // for animations, there are bits we want done in the next VM turn, to all DOM to update first.
18343 // instead of each row doing a setTimeout(func,0), we put the functions here and the rowRenderer
18344 // executes them all in one timeout
18345 _this.createSecondPassFuncs = [];
18346 // these get called before the row is destroyed - they set up the DOM for the remove animation (ie they
18347 // set the DOM up for the animation), then the delayedDestroyFunctions get called when the animation is
18348 // complete (ie removes from the dom).
18349 _this.removeFirstPassFuncs = [];
18350 // for animations, these functions get called 400ms after the row is cleared, called by the rowRenderer
18351 // so each row isn't setting up it's own timeout
18352 _this.removeSecondPassFuncs = [];
18353 _this.initialised = false;
18354 _this.parentScope = parentScope;
18355 _this.beans = beans;
18356 _this.bodyContainerComp = bodyContainerComp;
18357 _this.pinnedLeftContainerComp = pinnedLeftContainerComp;
18358 _this.pinnedRightContainerComp = pinnedRightContainerComp;
18359 _this.fullWidthContainerComp = fullWidthContainerComp;
18360 _this.rowNode = rowNode;
18361 _this.rowIsEven = _this.rowNode.rowIndex % 2 === 0;
18362 _this.paginationPage = _this.beans.paginationProxy.getCurrentPage();
18363 _this.useAnimationFrameForCreate = useAnimationFrameForCreate;
18364 _this.setAnimateFlags(animateIn);
18365 return _this;
18366 }
18367 RowComp.prototype.init = function () {
18368 var _this = this;
18369 this.rowFocused = this.beans.focusedCellController.isRowFocused(this.rowNode.rowIndex, this.rowNode.rowPinned);
18370 this.scope = this.createChildScopeOrNull(this.rowNode.data);
18371 this.setupRowContainers();
18372 this.addListeners();
18373 if (this.slideRowIn) {
18374 this.createSecondPassFuncs.push(function () {
18375 _this.onTopChanged();
18376 });
18377 }
18378 if (this.fadeRowIn) {
18379 this.createSecondPassFuncs.push(function () {
18380 _this.eAllRowContainers.forEach(function (eRow) { return utils_1._.removeCssClass(eRow, 'ag-opacity-zero'); });
18381 });
18382 }
18383 };
18384 RowComp.prototype.createTemplate = function (contents, extraCssClass) {
18385 if (extraCssClass === void 0) { extraCssClass = null; }
18386 var templateParts = [];
18387 var rowHeight = this.rowNode.rowHeight;
18388 var rowClasses = this.getInitialRowClasses(extraCssClass).join(' ');
18389 var rowIdSanitised = utils_1._.escape(this.rowNode.id);
18390 var userRowStyles = this.preProcessStylesFromGridOptions();
18391 var businessKey = this.getRowBusinessKey();
18392 var businessKeySanitised = utils_1._.escape(businessKey);
18393 var rowTopStyle = this.getInitialRowTopStyle();
18394 templateParts.push("<div");
18395 templateParts.push(" role=\"row\"");
18396 templateParts.push(" row-index=\"" + this.rowNode.getRowIndexString() + "\"");
18397 templateParts.push(rowIdSanitised ? " row-id=\"" + rowIdSanitised + "\"" : "");
18398 templateParts.push(businessKey ? " row-business-key=\"" + businessKeySanitised + "\"" : "");
18399 templateParts.push(" comp-id=\"" + this.getCompId() + "\"");
18400 templateParts.push(" class=\"" + rowClasses + "\"");
18401 templateParts.push(" style=\"height: " + rowHeight + "px; " + rowTopStyle + " " + userRowStyles + "\">");
18402 // add in the template for the cells
18403 templateParts.push(contents);
18404 templateParts.push("</div>");
18405 return templateParts.join('');
18406 };
18407 RowComp.prototype.getCellForCol = function (column) {
18408 var cellComp = this.cellComps[column.getColId()];
18409 if (cellComp) {
18410 return cellComp.getGui();
18411 }
18412 else {
18413 return null;
18414 }
18415 };
18416 RowComp.prototype.afterFlush = function () {
18417 if (!this.initialised) {
18418 this.initialised = true;
18419 this.executeProcessRowPostCreateFunc();
18420 }
18421 };
18422 RowComp.prototype.executeProcessRowPostCreateFunc = function () {
18423 var func = this.beans.gridOptionsWrapper.getProcessRowPostCreateFunc();
18424 if (func) {
18425 var params = {
18426 eRow: this.eBodyRow,
18427 ePinnedLeftRow: this.ePinnedLeftRow,
18428 ePinnedRightRow: this.ePinnedRightRow,
18429 node: this.rowNode,
18430 api: this.beans.gridOptionsWrapper.getApi(),
18431 rowIndex: this.rowNode.rowIndex,
18432 addRenderedRowListener: this.addEventListener.bind(this),
18433 columnApi: this.beans.gridOptionsWrapper.getColumnApi(),
18434 context: this.beans.gridOptionsWrapper.getContext()
18435 };
18436 func(params);
18437 }
18438 };
18439 RowComp.prototype.getInitialRowTopStyle = function () {
18440 // if sliding in, we take the old row top. otherwise we just set the current row top.
18441 var pixels = this.slideRowIn ? this.roundRowTopToBounds(this.rowNode.oldRowTop) : this.rowNode.rowTop;
18442 var afterPaginationPixels = this.applyPaginationOffset(pixels);
18443 var afterScalingPixels = this.beans.heightScaler.getRealPixelPosition(afterPaginationPixels);
18444 if (this.beans.gridOptionsWrapper.isSuppressRowTransform()) {
18445 return "top: " + afterScalingPixels + "px; ";
18446 }
18447 else {
18448 return "transform: translateY(" + afterScalingPixels + "px); ";
18449 }
18450 };
18451 RowComp.prototype.getRowBusinessKey = function () {
18452 if (typeof this.beans.gridOptionsWrapper.getBusinessKeyForNodeFunc() === 'function') {
18453 var businessKey = this.beans.gridOptionsWrapper.getBusinessKeyForNodeFunc()(this.rowNode);
18454 return businessKey;
18455 }
18456 };
18457 RowComp.prototype.lazyCreateCells = function (cols, eRow) {
18458 if (this.active) {
18459 var cellTemplatesAndComps = this.createCells(cols);
18460 eRow.innerHTML = cellTemplatesAndComps.template;
18461 this.callAfterRowAttachedOnCells(cellTemplatesAndComps.cellComps, eRow);
18462 }
18463 };
18464 RowComp.prototype.createRowContainer = function (rowContainerComp, cols, callback) {
18465 var _this = this;
18466 var cellTemplatesAndComps;
18467 if (this.useAnimationFrameForCreate) {
18468 cellTemplatesAndComps = { cellComps: [], template: '' };
18469 }
18470 else {
18471 cellTemplatesAndComps = this.createCells(cols);
18472 }
18473 var rowTemplate = this.createTemplate(cellTemplatesAndComps.template);
18474 rowContainerComp.appendRowTemplate(rowTemplate, function () {
18475 var eRow = rowContainerComp.getRowElement(_this.getCompId());
18476 _this.afterRowAttached(rowContainerComp, eRow);
18477 callback(eRow);
18478 if (_this.useAnimationFrameForCreate) {
18479 _this.beans.taskQueue.addP1Task(_this.lazyCreateCells.bind(_this, cols, eRow));
18480 }
18481 else {
18482 _this.callAfterRowAttachedOnCells(cellTemplatesAndComps.cellComps, eRow);
18483 }
18484 });
18485 };
18486 RowComp.prototype.createChildScopeOrNull = function (data) {
18487 if (this.beans.gridOptionsWrapper.isAngularCompileRows()) {
18488 var newChildScope_1 = this.parentScope.$new();
18489 newChildScope_1.data = data;
18490 newChildScope_1.rowNode = this.rowNode;
18491 newChildScope_1.context = this.beans.gridOptionsWrapper.getContext();
18492 this.addDestroyFunc(function () {
18493 newChildScope_1.$destroy();
18494 newChildScope_1.data = null;
18495 newChildScope_1.rowNode = null;
18496 newChildScope_1.context = null;
18497 });
18498 return newChildScope_1;
18499 }
18500 else {
18501 return null;
18502 }
18503 };
18504 RowComp.prototype.setupRowContainers = function () {
18505 var isFullWidthCellFunc = this.beans.gridOptionsWrapper.getIsFullWidthCellFunc();
18506 var isFullWidthCell = isFullWidthCellFunc ? isFullWidthCellFunc(this.rowNode) : false;
18507 var isDetailCell = this.beans.doingMasterDetail && this.rowNode.detail;
18508 var isGroupSpanningRow = this.rowNode.group && this.beans.gridOptionsWrapper.isGroupUseEntireRow();
18509 if (this.rowNode.stub) {
18510 this.createFullWidthRows(RowComp.LOADING_CELL_RENDERER, RowComp.LOADING_CELL_RENDERER_COMP_NAME);
18511 }
18512 else if (isDetailCell) {
18513 this.createFullWidthRows(RowComp.DETAIL_CELL_RENDERER, RowComp.DETAIL_CELL_RENDERER_COMP_NAME);
18514 }
18515 else if (isFullWidthCell) {
18516 this.createFullWidthRows(RowComp.FULL_WIDTH_CELL_RENDERER, null);
18517 }
18518 else if (isGroupSpanningRow) {
18519 this.createFullWidthRows(RowComp.GROUP_ROW_RENDERER, RowComp.GROUP_ROW_RENDERER_COMP_NAME);
18520 }
18521 else {
18522 this.setupNormalRowContainers();
18523 }
18524 };
18525 RowComp.prototype.setupNormalRowContainers = function () {
18526 var _this = this;
18527 var centerCols = this.beans.columnController.getAllDisplayedCenterVirtualColumnsForRow(this.rowNode);
18528 this.createRowContainer(this.bodyContainerComp, centerCols, function (eRow) { return _this.eBodyRow = eRow; });
18529 var leftCols = this.beans.columnController.getDisplayedLeftColumnsForRow(this.rowNode);
18530 var rightCols = this.beans.columnController.getDisplayedRightColumnsForRow(this.rowNode);
18531 this.createRowContainer(this.pinnedRightContainerComp, rightCols, function (eRow) { return _this.ePinnedRightRow = eRow; });
18532 this.createRowContainer(this.pinnedLeftContainerComp, leftCols, function (eRow) { return _this.ePinnedLeftRow = eRow; });
18533 };
18534 RowComp.prototype.createFullWidthRows = function (type, name) {
18535 var _this = this;
18536 this.fullWidthRow = true;
18537 this.fullWidthRowEmbedded = this.beans.gridOptionsWrapper.isEmbedFullWidthRows();
18538 if (this.fullWidthRowEmbedded) {
18539 this.createFullWidthRowContainer(this.bodyContainerComp, null, null, type, name, function (eRow) {
18540 _this.eFullWidthRowBody = eRow;
18541 }, function (cellRenderer) {
18542 _this.fullWidthRowComponentBody = cellRenderer;
18543 });
18544 this.createFullWidthRowContainer(this.pinnedLeftContainerComp, column_1.Column.PINNED_LEFT, 'ag-cell-last-left-pinned', type, name, function (eRow) {
18545 _this.eFullWidthRowLeft = eRow;
18546 }, function (cellRenderer) {
18547 _this.fullWidthRowComponentLeft = cellRenderer;
18548 });
18549 this.createFullWidthRowContainer(this.pinnedRightContainerComp, column_1.Column.PINNED_RIGHT, 'ag-cell-first-right-pinned', type, name, function (eRow) {
18550 _this.eFullWidthRowRight = eRow;
18551 }, function (cellRenderer) {
18552 _this.fullWidthRowComponentRight = cellRenderer;
18553 });
18554 }
18555 else {
18556 // otherwise we add to the fullWidth container as normal
18557 // let previousFullWidth = ensureDomOrder ? this.lastPlacedElements.eFullWidth : null;
18558 this.createFullWidthRowContainer(this.fullWidthContainerComp, null, null, type, name, function (eRow) {
18559 _this.eFullWidthRow = eRow;
18560 }, function (cellRenderer) {
18561 _this.fullWidthRowComponent = cellRenderer;
18562 });
18563 }
18564 };
18565 RowComp.prototype.setAnimateFlags = function (animateIn) {
18566 if (animateIn) {
18567 var oldRowTopExists = utils_1._.exists(this.rowNode.oldRowTop);
18568 // if the row had a previous position, we slide it in (animate row top)
18569 this.slideRowIn = oldRowTopExists;
18570 // if the row had no previous position, we fade it in (animate
18571 this.fadeRowIn = !oldRowTopExists;
18572 }
18573 else {
18574 this.slideRowIn = false;
18575 this.fadeRowIn = false;
18576 }
18577 };
18578 RowComp.prototype.isEditing = function () {
18579 return this.editingRow;
18580 };
18581 RowComp.prototype.stopRowEditing = function (cancel) {
18582 this.stopEditing(cancel);
18583 };
18584 RowComp.prototype.isFullWidth = function () {
18585 return this.fullWidthRow;
18586 };
18587 RowComp.prototype.addListeners = function () {
18588 this.addDestroyableEventListener(this.rowNode, rowNode_1.RowNode.EVENT_HEIGHT_CHANGED, this.onRowHeightChanged.bind(this));
18589 this.addDestroyableEventListener(this.rowNode, rowNode_1.RowNode.EVENT_ROW_SELECTED, this.onRowSelected.bind(this));
18590 this.addDestroyableEventListener(this.rowNode, rowNode_1.RowNode.EVENT_ROW_INDEX_CHANGED, this.onRowIndexChanged.bind(this));
18591 this.addDestroyableEventListener(this.rowNode, rowNode_1.RowNode.EVENT_TOP_CHANGED, this.onTopChanged.bind(this));
18592 this.addDestroyableEventListener(this.rowNode, rowNode_1.RowNode.EVENT_EXPANDED_CHANGED, this.onExpandedChanged.bind(this));
18593 this.addDestroyableEventListener(this.rowNode, rowNode_1.RowNode.EVENT_DATA_CHANGED, this.onRowNodeDataChanged.bind(this));
18594 this.addDestroyableEventListener(this.rowNode, rowNode_1.RowNode.EVENT_CELL_CHANGED, this.onRowNodeCellChanged.bind(this));
18595 this.addDestroyableEventListener(this.rowNode, rowNode_1.RowNode.EVENT_DRAGGING_CHANGED, this.onRowNodeDraggingChanged.bind(this));
18596 var eventService = this.beans.eventService;
18597 this.addDestroyableEventListener(eventService, events_1.Events.EVENT_HEIGHT_SCALE_CHANGED, this.onTopChanged.bind(this));
18598 this.addDestroyableEventListener(eventService, events_1.Events.EVENT_DISPLAYED_COLUMNS_CHANGED, this.onDisplayedColumnsChanged.bind(this));
18599 this.addDestroyableEventListener(eventService, events_1.Events.EVENT_VIRTUAL_COLUMNS_CHANGED, this.onVirtualColumnsChanged.bind(this));
18600 this.addDestroyableEventListener(eventService, events_1.Events.EVENT_COLUMN_RESIZED, this.onColumnResized.bind(this));
18601 this.addDestroyableEventListener(eventService, events_1.Events.EVENT_CELL_FOCUSED, this.onCellFocusChanged.bind(this));
18602 this.addDestroyableEventListener(eventService, events_1.Events.EVENT_PAGINATION_CHANGED, this.onPaginationChanged.bind(this));
18603 this.addDestroyableEventListener(eventService, events_1.Events.EVENT_GRID_COLUMNS_CHANGED, this.onGridColumnsChanged.bind(this));
18604 };
18605 // when grid columns change, then all cells should be cleaned out,
18606 // as the new columns could have same id as the previous columns and may conflict
18607 RowComp.prototype.onGridColumnsChanged = function () {
18608 var allRenderedCellIds = Object.keys(this.cellComps);
18609 this.removeRenderedCells(allRenderedCellIds);
18610 };
18611 RowComp.prototype.onRowNodeDataChanged = function (event) {
18612 // if this is an update, we want to refresh, as this will allow the user to put in a transition
18613 // into the cellRenderer refresh method. otherwise this might be completely new data, in which case
18614 // we will want to completely replace the cells
18615 this.forEachCellComp(function (cellComp) {
18616 return cellComp.refreshCell({
18617 suppressFlash: !event.update,
18618 newData: !event.update
18619 });
18620 });
18621 // check for selected also, as this could be after lazy loading of the row data, in which case
18622 // the id might of just gotten set inside the row and the row selected state may of changed
18623 // as a result. this is what happens when selected rows are loaded in virtual pagination.
18624 // - niall note - since moving to the stub component, this may no longer be true, as replacing
18625 // the stub component now replaces the entire row
18626 this.onRowSelected();
18627 // as data has changed, then the style and class needs to be recomputed
18628 this.postProcessCss();
18629 };
18630 RowComp.prototype.onRowNodeCellChanged = function (event) {
18631 // as data has changed, then the style and class needs to be recomputed
18632 this.postProcessCss();
18633 };
18634 RowComp.prototype.postProcessCss = function () {
18635 this.postProcessStylesFromGridOptions();
18636 this.postProcessClassesFromGridOptions();
18637 this.postProcessRowClassRules();
18638 this.postProcessRowDragging();
18639 };
18640 RowComp.prototype.onRowNodeDraggingChanged = function () {
18641 this.postProcessRowDragging();
18642 };
18643 RowComp.prototype.postProcessRowDragging = function () {
18644 var dragging = this.rowNode.dragging;
18645 this.eAllRowContainers.forEach(function (row) { return utils_1._.addOrRemoveCssClass(row, 'ag-row-dragging', dragging); });
18646 };
18647 RowComp.prototype.onExpandedChanged = function () {
18648 if (this.rowNode.group && !this.rowNode.footer) {
18649 var expanded_1 = this.rowNode.expanded;
18650 this.eAllRowContainers.forEach(function (row) { return utils_1._.addOrRemoveCssClass(row, 'ag-row-group-expanded', expanded_1); });
18651 this.eAllRowContainers.forEach(function (row) { return utils_1._.addOrRemoveCssClass(row, 'ag-row-group-contracted', !expanded_1); });
18652 }
18653 };
18654 RowComp.prototype.onDisplayedColumnsChanged = function () {
18655 if (!this.fullWidthRow) {
18656 this.refreshCells();
18657 }
18658 };
18659 RowComp.prototype.destroyFullWidthComponents = function () {
18660 if (this.fullWidthRowComponent) {
18661 if (this.fullWidthRowComponent.destroy) {
18662 this.fullWidthRowComponent.destroy();
18663 }
18664 this.fullWidthRowComponent = null;
18665 }
18666 if (this.fullWidthRowComponentBody) {
18667 if (this.fullWidthRowComponentBody.destroy) {
18668 this.fullWidthRowComponentBody.destroy();
18669 }
18670 this.fullWidthRowComponent = null;
18671 }
18672 if (this.fullWidthRowComponentLeft) {
18673 if (this.fullWidthRowComponentLeft.destroy) {
18674 this.fullWidthRowComponentLeft.destroy();
18675 }
18676 this.fullWidthRowComponentLeft = null;
18677 }
18678 if (this.fullWidthRowComponentRight) {
18679 if (this.fullWidthRowComponentRight.destroy) {
18680 this.fullWidthRowComponentRight.destroy();
18681 }
18682 this.fullWidthRowComponent = null;
18683 }
18684 };
18685 RowComp.prototype.getContainerForCell = function (pinnedType) {
18686 switch (pinnedType) {
18687 case column_1.Column.PINNED_LEFT: return this.ePinnedLeftRow;
18688 case column_1.Column.PINNED_RIGHT: return this.ePinnedRightRow;
18689 default: return this.eBodyRow;
18690 }
18691 };
18692 RowComp.prototype.onVirtualColumnsChanged = function () {
18693 if (!this.fullWidthRow) {
18694 this.refreshCells();
18695 }
18696 };
18697 RowComp.prototype.onColumnResized = function () {
18698 if (!this.fullWidthRow) {
18699 this.refreshCells();
18700 }
18701 };
18702 RowComp.prototype.refreshCells = function () {
18703 if (this.beans.gridOptionsWrapper.isSuppressAnimationFrame()) {
18704 this.refreshCellsInAnimationFrame();
18705 }
18706 else {
18707 if (this.columnRefreshPending) {
18708 return;
18709 }
18710 this.beans.taskQueue.addP1Task(this.refreshCellsInAnimationFrame.bind(this));
18711 }
18712 };
18713 RowComp.prototype.refreshCellsInAnimationFrame = function () {
18714 if (!this.active) {
18715 return;
18716 }
18717 this.columnRefreshPending = false;
18718 var centerCols = this.beans.columnController.getAllDisplayedCenterVirtualColumnsForRow(this.rowNode);
18719 var leftCols = this.beans.columnController.getDisplayedLeftColumnsForRow(this.rowNode);
18720 var rightCols = this.beans.columnController.getDisplayedRightColumnsForRow(this.rowNode);
18721 this.insertCellsIntoContainer(this.eBodyRow, centerCols);
18722 this.insertCellsIntoContainer(this.ePinnedLeftRow, leftCols);
18723 this.insertCellsIntoContainer(this.ePinnedRightRow, rightCols);
18724 var colIdsToRemove = Object.keys(this.cellComps);
18725 centerCols.forEach(function (col) { return utils_1._.removeFromArray(colIdsToRemove, col.getId()); });
18726 leftCols.forEach(function (col) { return utils_1._.removeFromArray(colIdsToRemove, col.getId()); });
18727 rightCols.forEach(function (col) { return utils_1._.removeFromArray(colIdsToRemove, col.getId()); });
18728 // we never remove editing cells, as this would cause the cells to loose their values while editing
18729 // as the grid is scrolling horizontally.
18730 colIdsToRemove = utils_1._.filter(colIdsToRemove, this.isCellEligibleToBeRemoved.bind(this));
18731 // remove old cells from gui, but we don't destroy them, we might use them again
18732 this.removeRenderedCells(colIdsToRemove);
18733 };
18734 RowComp.prototype.removeRenderedCells = function (colIds) {
18735 var _this = this;
18736 colIds.forEach(function (key) {
18737 var cellComp = _this.cellComps[key];
18738 // could be old reference, ie removed cell
18739 if (utils_1._.missing(cellComp)) {
18740 return;
18741 }
18742 cellComp.detach();
18743 cellComp.destroy();
18744 _this.cellComps[key] = null;
18745 });
18746 };
18747 RowComp.prototype.isCellEligibleToBeRemoved = function (indexStr) {
18748 var displayedColumns = this.beans.columnController.getAllDisplayedColumns();
18749 var REMOVE_CELL = true;
18750 var KEEP_CELL = false;
18751 var renderedCell = this.cellComps[indexStr];
18752 if (!renderedCell) {
18753 return REMOVE_CELL;
18754 }
18755 // always remove the cell if it's in the wrong pinned location
18756 if (this.isCellInWrongRow(renderedCell)) {
18757 return REMOVE_CELL;
18758 }
18759 // we want to try and keep editing and focused cells
18760 var editing = renderedCell.isEditing();
18761 var focused = this.beans.focusedCellController.isCellFocused(renderedCell.getGridCell());
18762 var mightWantToKeepCell = editing || focused;
18763 if (mightWantToKeepCell) {
18764 var column = renderedCell.getColumn();
18765 var cellStillDisplayed = displayedColumns.indexOf(column) >= 0;
18766 return cellStillDisplayed ? KEEP_CELL : REMOVE_CELL;
18767 }
18768 else {
18769 return REMOVE_CELL;
18770 }
18771 };
18772 RowComp.prototype.ensureCellInCorrectContainer = function (cellComp) {
18773 var element = cellComp.getGui();
18774 var column = cellComp.getColumn();
18775 var pinnedType = column.getPinned();
18776 var eContainer = this.getContainerForCell(pinnedType);
18777 // if in wrong container, remove it
18778 var eOldContainer = cellComp.getParentRow();
18779 var inWrongRow = eOldContainer !== eContainer;
18780 if (inWrongRow) {
18781 // take out from old row
18782 if (eOldContainer) {
18783 eOldContainer.removeChild(element);
18784 }
18785 eContainer.appendChild(element);
18786 cellComp.setParentRow(eContainer);
18787 }
18788 };
18789 RowComp.prototype.isCellInWrongRow = function (cellComp) {
18790 var column = cellComp.getColumn();
18791 var rowWeWant = this.getContainerForCell(column.getPinned());
18792 // if in wrong container, remove it
18793 var oldRow = cellComp.getParentRow();
18794 return oldRow !== rowWeWant;
18795 };
18796 RowComp.prototype.insertCellsIntoContainer = function (eRow, cols) {
18797 var _this = this;
18798 if (!eRow) {
18799 return;
18800 }
18801 var cellTemplates = [];
18802 var newCellComps = [];
18803 cols.forEach(function (col) {
18804 var colId = col.getId();
18805 var oldCell = _this.cellComps[colId];
18806 if (oldCell) {
18807 _this.ensureCellInCorrectContainer(oldCell);
18808 }
18809 else {
18810 _this.createNewCell(col, eRow, cellTemplates, newCellComps);
18811 }
18812 });
18813 if (cellTemplates.length > 0) {
18814 utils_1._.appendHtml(eRow, cellTemplates.join(''));
18815 this.callAfterRowAttachedOnCells(newCellComps, eRow);
18816 }
18817 };
18818 RowComp.prototype.addDomData = function (eRowContainer) {
18819 var gow = this.beans.gridOptionsWrapper;
18820 gow.setDomData(eRowContainer, RowComp.DOM_DATA_KEY_RENDERED_ROW, this);
18821 this.addDestroyFunc(function () {
18822 gow.setDomData(eRowContainer, RowComp.DOM_DATA_KEY_RENDERED_ROW, null);
18823 });
18824 };
18825 RowComp.prototype.createNewCell = function (col, eContainer, cellTemplates, newCellComps) {
18826 var newCellComp = new cellComp_1.CellComp(this.scope, this.beans, col, this.rowNode, this, false);
18827 var cellTemplate = newCellComp.getCreateTemplate();
18828 cellTemplates.push(cellTemplate);
18829 newCellComps.push(newCellComp);
18830 this.cellComps[col.getId()] = newCellComp;
18831 newCellComp.setParentRow(eContainer);
18832 };
18833 RowComp.prototype.onMouseEvent = function (eventName, mouseEvent) {
18834 switch (eventName) {
18835 case 'dblclick':
18836 this.onRowDblClick(mouseEvent);
18837 break;
18838 case 'click':
18839 this.onRowClick(mouseEvent);
18840 break;
18841 }
18842 };
18843 RowComp.prototype.createRowEvent = function (type, domEvent) {
18844 return {
18845 type: type,
18846 node: this.rowNode,
18847 data: this.rowNode.data,
18848 rowIndex: this.rowNode.rowIndex,
18849 rowPinned: this.rowNode.rowPinned,
18850 context: this.beans.gridOptionsWrapper.getContext(),
18851 api: this.beans.gridOptionsWrapper.getApi(),
18852 columnApi: this.beans.gridOptionsWrapper.getColumnApi(),
18853 event: domEvent
18854 };
18855 };
18856 RowComp.prototype.createRowEventWithSource = function (type, domEvent) {
18857 var event = this.createRowEvent(type, domEvent);
18858 // when first developing this, we included the rowComp in the event.
18859 // this seems very weird. so when introducing the event types, i left the 'source'
18860 // out of the type, and just include the source in the two places where this event
18861 // was fired (rowClicked and rowDoubleClicked). it doesn't make sense for any
18862 // users to be using this, as the rowComp isn't an object we expose, so would be
18863 // very surprising if a user was using it.
18864 event.source = this;
18865 return event;
18866 };
18867 RowComp.prototype.onRowDblClick = function (mouseEvent) {
18868 if (utils_1._.isStopPropagationForAgGrid(mouseEvent)) {
18869 return;
18870 }
18871 var agEvent = this.createRowEventWithSource(events_1.Events.EVENT_ROW_DOUBLE_CLICKED, mouseEvent);
18872 this.beans.eventService.dispatchEvent(agEvent);
18873 };
18874 RowComp.prototype.onRowClick = function (mouseEvent) {
18875 var stop = utils_1._.isStopPropagationForAgGrid(mouseEvent);
18876 if (stop) {
18877 return;
18878 }
18879 var agEvent = this.createRowEventWithSource(events_1.Events.EVENT_ROW_CLICKED, mouseEvent);
18880 this.beans.eventService.dispatchEvent(agEvent);
18881 // ctrlKey for windows, metaKey for Apple
18882 var multiSelectKeyPressed = mouseEvent.ctrlKey || mouseEvent.metaKey;
18883 var shiftKeyPressed = mouseEvent.shiftKey;
18884 // we do not allow selecting groups by clicking (as the click here expands the group)
18885 // so return if it's a group row
18886 if (this.rowNode.group) {
18887 return;
18888 }
18889 // we also don't allow selection of pinned rows
18890 if (this.rowNode.rowPinned) {
18891 return;
18892 }
18893 // if no selection method enabled, do nothing
18894 if (!this.beans.gridOptionsWrapper.isRowSelection()) {
18895 return;
18896 }
18897 // if click selection suppressed, do nothing
18898 if (this.beans.gridOptionsWrapper.isSuppressRowClickSelection()) {
18899 return;
18900 }
18901 var multiSelectOnClick = this.beans.gridOptionsWrapper.isRowMultiSelectWithClick();
18902 var rowDeselectionWithCtrl = this.beans.gridOptionsWrapper.isRowDeselection();
18903 if (this.rowNode.isSelected()) {
18904 if (multiSelectOnClick) {
18905 this.rowNode.setSelectedParams({ newValue: false });
18906 }
18907 else if (multiSelectKeyPressed) {
18908 if (rowDeselectionWithCtrl) {
18909 this.rowNode.setSelectedParams({ newValue: false });
18910 }
18911 }
18912 else {
18913 // selected with no multi key, must make sure anything else is unselected
18914 this.rowNode.setSelectedParams({ newValue: true, clearSelection: true });
18915 }
18916 }
18917 else {
18918 var clearSelection = multiSelectOnClick ? false : !multiSelectKeyPressed;
18919 this.rowNode.setSelectedParams({ newValue: true, clearSelection: clearSelection, rangeSelect: shiftKeyPressed });
18920 }
18921 };
18922 RowComp.prototype.createFullWidthRowContainer = function (rowContainerComp, pinned, extraCssClass, cellRendererType, cellRendererName, eRowCallback, cellRendererCallback) {
18923 var _this = this;
18924 var rowTemplate = this.createTemplate('', extraCssClass);
18925 rowContainerComp.appendRowTemplate(rowTemplate, function () {
18926 var eRow = rowContainerComp.getRowElement(_this.getCompId());
18927 var params = _this.createFullWidthParams(eRow, pinned);
18928 var callback = function (cellRenderer) {
18929 if (_this.isAlive()) {
18930 var gui = cellRenderer.getGui();
18931 eRow.appendChild(gui);
18932 cellRendererCallback(cellRenderer);
18933 }
18934 else {
18935 if (cellRenderer.destroy) {
18936 cellRenderer.destroy();
18937 }
18938 }
18939 };
18940 _this.beans.componentResolver.createAgGridComponent(null, params, cellRendererType, params, cellRendererName).then(callback);
18941 _this.afterRowAttached(rowContainerComp, eRow);
18942 eRowCallback(eRow);
18943 _this.angular1Compile(eRow);
18944 });
18945 };
18946 RowComp.prototype.angular1Compile = function (element) {
18947 if (this.scope) {
18948 this.beans.$compile(element)(this.scope);
18949 }
18950 };
18951 RowComp.prototype.createFullWidthParams = function (eRow, pinned) {
18952 var params = {
18953 fullWidth: true,
18954 data: this.rowNode.data,
18955 node: this.rowNode,
18956 value: this.rowNode.key,
18957 $scope: this.scope,
18958 rowIndex: this.rowNode.rowIndex,
18959 api: this.beans.gridOptionsWrapper.getApi(),
18960 columnApi: this.beans.gridOptionsWrapper.getColumnApi(),
18961 context: this.beans.gridOptionsWrapper.getContext(),
18962 // these need to be taken out, as part of 'afterAttached' now
18963 eGridCell: eRow,
18964 eParentOfValue: eRow,
18965 pinned: pinned,
18966 addRenderedRowListener: this.addEventListener.bind(this)
18967 };
18968 return params;
18969 };
18970 RowComp.prototype.getInitialRowClasses = function (extraCssClass) {
18971 var classes = [];
18972 if (utils_1._.exists(extraCssClass)) {
18973 classes.push(extraCssClass);
18974 }
18975 classes.push('ag-row');
18976 classes.push(this.rowFocused ? 'ag-row-focus' : 'ag-row-no-focus');
18977 if (this.fadeRowIn) {
18978 classes.push('ag-opacity-zero');
18979 }
18980 if (this.rowIsEven) {
18981 classes.push('ag-row-even');
18982 }
18983 else {
18984 classes.push('ag-row-odd');
18985 }
18986 if (this.rowNode.isSelected()) {
18987 classes.push('ag-row-selected');
18988 }
18989 if (this.rowNode.group) {
18990 classes.push('ag-row-group');
18991 // if a group, put the level of the group in
18992 classes.push('ag-row-level-' + this.rowNode.level);
18993 if (this.rowNode.footer) {
18994 classes.push('ag-row-footer');
18995 }
18996 }
18997 else {
18998 // if a leaf, and a parent exists, put a level of the parent, else put level of 0 for top level item
18999 if (this.rowNode.parent) {
19000 classes.push('ag-row-level-' + (this.rowNode.parent.level + 1));
19001 }
19002 else {
19003 classes.push('ag-row-level-0');
19004 }
19005 }
19006 if (this.rowNode.stub) {
19007 classes.push('ag-row-stub');
19008 }
19009 if (this.fullWidthRow) {
19010 classes.push('ag-full-width-row');
19011 }
19012 if (this.rowNode.group && !this.rowNode.footer) {
19013 classes.push(this.rowNode.expanded ? 'ag-row-group-expanded' : 'ag-row-group-contracted');
19014 }
19015 if (this.rowNode.dragging) {
19016 classes.push('ag-row-dragging');
19017 }
19018 utils_1._.pushAll(classes, this.processClassesFromGridOptions());
19019 utils_1._.pushAll(classes, this.preProcessRowClassRules());
19020 return classes;
19021 };
19022 RowComp.prototype.preProcessRowClassRules = function () {
19023 var res = [];
19024 this.processRowClassRules(function (className) {
19025 res.push(className);
19026 }, function (className) {
19027 // not catered for, if creating, no need
19028 // to remove class as it was never there
19029 });
19030 return res;
19031 };
19032 RowComp.prototype.processRowClassRules = function (onApplicableClass, onNotApplicableClass) {
19033 this.beans.stylingService.processClassRules(this.beans.gridOptionsWrapper.rowClassRules(), {
19034 value: undefined,
19035 colDef: undefined,
19036 data: this.rowNode.data,
19037 node: this.rowNode,
19038 rowIndex: this.rowNode.rowIndex,
19039 api: this.beans.gridOptionsWrapper.getApi(),
19040 $scope: this.scope,
19041 context: this.beans.gridOptionsWrapper.getContext()
19042 }, onApplicableClass, onNotApplicableClass);
19043 };
19044 RowComp.prototype.stopEditing = function (cancel) {
19045 if (cancel === void 0) { cancel = false; }
19046 this.forEachCellComp(function (renderedCell) {
19047 renderedCell.stopEditing(cancel);
19048 });
19049 if (this.editingRow) {
19050 if (!cancel) {
19051 var event_1 = this.createRowEvent(events_1.Events.EVENT_ROW_VALUE_CHANGED);
19052 this.beans.eventService.dispatchEvent(event_1);
19053 }
19054 this.setEditingRow(false);
19055 }
19056 };
19057 RowComp.prototype.setEditingRow = function (value) {
19058 this.editingRow = value;
19059 this.eAllRowContainers.forEach(function (row) { return utils_1._.addOrRemoveCssClass(row, 'ag-row-editing', value); });
19060 var event = value ?
19061 this.createRowEvent(events_1.Events.EVENT_ROW_EDITING_STARTED)
19062 : this.createRowEvent(events_1.Events.EVENT_ROW_EDITING_STOPPED);
19063 this.beans.eventService.dispatchEvent(event);
19064 };
19065 RowComp.prototype.startRowEditing = function (keyPress, charPress, sourceRenderedCell) {
19066 if (keyPress === void 0) { keyPress = null; }
19067 if (charPress === void 0) { charPress = null; }
19068 if (sourceRenderedCell === void 0) { sourceRenderedCell = null; }
19069 // don't do it if already editing
19070 if (this.editingRow) {
19071 return;
19072 }
19073 this.forEachCellComp(function (renderedCell) {
19074 var cellStartedEdit = renderedCell === sourceRenderedCell;
19075 if (cellStartedEdit) {
19076 renderedCell.startEditingIfEnabled(keyPress, charPress, cellStartedEdit);
19077 }
19078 else {
19079 renderedCell.startEditingIfEnabled(null, null, cellStartedEdit);
19080 }
19081 });
19082 this.setEditingRow(true);
19083 };
19084 RowComp.prototype.forEachCellComp = function (callback) {
19085 utils_1._.iterateObject(this.cellComps, function (key, cellComp) {
19086 if (cellComp) {
19087 callback(cellComp);
19088 }
19089 });
19090 };
19091 RowComp.prototype.postProcessClassesFromGridOptions = function () {
19092 var _this = this;
19093 var cssClasses = this.processClassesFromGridOptions();
19094 if (cssClasses) {
19095 cssClasses.forEach(function (classStr) {
19096 _this.eAllRowContainers.forEach(function (row) { return utils_1._.addCssClass(row, classStr); });
19097 });
19098 }
19099 };
19100 RowComp.prototype.postProcessRowClassRules = function () {
19101 var _this = this;
19102 this.processRowClassRules(function (className) {
19103 _this.eAllRowContainers.forEach(function (row) { return utils_1._.addCssClass(row, className); });
19104 }, function (className) {
19105 _this.eAllRowContainers.forEach(function (row) { return utils_1._.removeCssClass(row, className); });
19106 });
19107 };
19108 RowComp.prototype.processClassesFromGridOptions = function () {
19109 var res = [];
19110 var process = function (rowClass) {
19111 if (typeof rowClass === 'string') {
19112 res.push(rowClass);
19113 }
19114 else if (Array.isArray(rowClass)) {
19115 rowClass.forEach(function (e) { return res.push(e); });
19116 }
19117 };
19118 // part 1 - rowClass
19119 var rowClass = this.beans.gridOptionsWrapper.getRowClass();
19120 if (rowClass) {
19121 if (typeof rowClass === 'function') {
19122 console.warn('ag-Grid: rowClass should not be a function, please use getRowClass instead');
19123 return;
19124 }
19125 process(rowClass);
19126 }
19127 // part 2 - rowClassFunc
19128 var rowClassFunc = this.beans.gridOptionsWrapper.getRowClassFunc();
19129 if (rowClassFunc) {
19130 var params = {
19131 node: this.rowNode,
19132 data: this.rowNode.data,
19133 rowIndex: this.rowNode.rowIndex,
19134 context: this.beans.gridOptionsWrapper.getContext(),
19135 api: this.beans.gridOptionsWrapper.getApi()
19136 };
19137 var rowClassFuncResult = rowClassFunc(params);
19138 process(rowClassFuncResult);
19139 }
19140 return res;
19141 };
19142 RowComp.prototype.preProcessStylesFromGridOptions = function () {
19143 var rowStyles = this.processStylesFromGridOptions();
19144 return utils_1._.cssStyleObjectToMarkup(rowStyles);
19145 };
19146 RowComp.prototype.postProcessStylesFromGridOptions = function () {
19147 var rowStyles = this.processStylesFromGridOptions();
19148 this.eAllRowContainers.forEach(function (row) { return utils_1._.addStylesToElement(row, rowStyles); });
19149 };
19150 RowComp.prototype.processStylesFromGridOptions = function () {
19151 // part 1 - rowStyle
19152 var rowStyle = this.beans.gridOptionsWrapper.getRowStyle();
19153 if (rowStyle && typeof rowStyle === 'function') {
19154 console.log('ag-Grid: rowStyle should be an object of key/value styles, not be a function, use getRowStyle() instead');
19155 return;
19156 }
19157 // part 1 - rowStyleFunc
19158 var rowStyleFunc = this.beans.gridOptionsWrapper.getRowStyleFunc();
19159 var rowStyleFuncResult;
19160 if (rowStyleFunc) {
19161 var params = {
19162 data: this.rowNode.data,
19163 node: this.rowNode,
19164 api: this.beans.gridOptionsWrapper.getApi(),
19165 context: this.beans.gridOptionsWrapper.getContext(),
19166 $scope: this.scope
19167 };
19168 rowStyleFuncResult = rowStyleFunc(params);
19169 }
19170 return utils_1._.assign({}, rowStyle, rowStyleFuncResult);
19171 };
19172 RowComp.prototype.createCells = function (cols) {
19173 var _this = this;
19174 var templateParts = [];
19175 var newCellComps = [];
19176 cols.forEach(function (col) {
19177 var newCellComp = new cellComp_1.CellComp(_this.scope, _this.beans, col, _this.rowNode, _this, false);
19178 var cellTemplate = newCellComp.getCreateTemplate();
19179 templateParts.push(cellTemplate);
19180 newCellComps.push(newCellComp);
19181 _this.cellComps[col.getId()] = newCellComp;
19182 });
19183 var templateAndComps = {
19184 template: templateParts.join(''),
19185 cellComps: newCellComps
19186 };
19187 return templateAndComps;
19188 };
19189 RowComp.prototype.onRowSelected = function () {
19190 var selected = this.rowNode.isSelected();
19191 this.eAllRowContainers.forEach(function (row) { return utils_1._.addOrRemoveCssClass(row, 'ag-row-selected', selected); });
19192 };
19193 // called:
19194 // + after row created for first time
19195 // + after horizontal scroll, so new cells due to column virtualisation
19196 RowComp.prototype.callAfterRowAttachedOnCells = function (newCellComps, eRow) {
19197 var _this = this;
19198 newCellComps.forEach(function (cellComp) {
19199 cellComp.setParentRow(eRow);
19200 cellComp.afterAttached();
19201 // if we are editing the row, then the cell needs to turn
19202 // into edit mode
19203 if (_this.editingRow) {
19204 cellComp.startEditingIfEnabled();
19205 }
19206 });
19207 };
19208 RowComp.prototype.afterRowAttached = function (rowContainerComp, eRow) {
19209 var _this = this;
19210 this.addDomData(eRow);
19211 this.removeSecondPassFuncs.push(function () {
19212 // console.log(eRow);
19213 rowContainerComp.removeRowElement(eRow);
19214 });
19215 this.removeFirstPassFuncs.push(function () {
19216 if (utils_1._.exists(_this.rowNode.rowTop)) {
19217 // the row top is updated anyway, however we set it here again
19218 // to something more reasonable for the animation - ie if the
19219 // row top is 10000px away, the row will flash out, so this
19220 // gives it a rounded value, so row animates out more slowly
19221 var rowTop = _this.roundRowTopToBounds(_this.rowNode.rowTop);
19222 _this.setRowTop(rowTop);
19223 }
19224 else {
19225 utils_1._.addCssClass(eRow, 'ag-opacity-zero');
19226 }
19227 });
19228 this.eAllRowContainers.push(eRow);
19229 // adding hover functionality adds listener to this row, so we
19230 // do it lazily in an animation frame
19231 if (this.useAnimationFrameForCreate) {
19232 this.beans.taskQueue.addP1Task(this.addHoverFunctionality.bind(this, eRow));
19233 }
19234 else {
19235 this.addHoverFunctionality(eRow);
19236 }
19237 };
19238 RowComp.prototype.addHoverFunctionality = function (eRow) {
19239 var _this = this;
19240 // because we use animation frames to do this, it's possible the row no longer exists
19241 // by the time we get to add it
19242 if (!this.active) {
19243 return;
19244 }
19245 // because mouseenter and mouseleave do not propagate, we cannot listen on the gridPanel
19246 // like we do for all the other mouse events.
19247 // because of the pinning, we cannot simply add / remove the class based on the eRow. we
19248 // have to check all eRow's (body & pinned). so the trick is if any of the rows gets a
19249 // mouse hover, it sets such in the rowNode, and then all three reflect the change as
19250 // all are listening for event on the row node.
19251 // step 1 - add listener, to set flag on row node
19252 this.addDestroyableEventListener(eRow, 'mouseenter', function () { return _this.rowNode.onMouseEnter(); });
19253 this.addDestroyableEventListener(eRow, 'mouseleave', function () { return _this.rowNode.onMouseLeave(); });
19254 // step 2 - listen for changes on row node (which any eRow can trigger)
19255 this.addDestroyableEventListener(this.rowNode, rowNode_1.RowNode.EVENT_MOUSE_ENTER, function () {
19256 // if hover turned off, we don't add the class. we do this here so that if the application
19257 // toggles this property mid way, we remove the hover form the last row, but we stop
19258 // adding hovers from that point onwards.
19259 if (!_this.beans.gridOptionsWrapper.isSuppressRowHoverHighlight()) {
19260 utils_1._.addCssClass(eRow, 'ag-row-hover');
19261 }
19262 });
19263 this.addDestroyableEventListener(this.rowNode, rowNode_1.RowNode.EVENT_MOUSE_LEAVE, function () {
19264 utils_1._.removeCssClass(eRow, 'ag-row-hover');
19265 });
19266 };
19267 // for animation, we don't want to animate entry or exit to a very far away pixel,
19268 // otherwise the row would move so fast, it would appear to disappear. so this method
19269 // moves the row closer to the viewport if it is far away, so the row slide in / out
19270 // at a speed the user can see.
19271 RowComp.prototype.roundRowTopToBounds = function (rowTop) {
19272 var range = this.beans.gridPanel.getVScrollPosition();
19273 var minPixel = this.applyPaginationOffset(range.top, true) - 100;
19274 var maxPixel = this.applyPaginationOffset(range.bottom, true) + 100;
19275 if (rowTop < minPixel) {
19276 return minPixel;
19277 }
19278 else if (rowTop > maxPixel) {
19279 return maxPixel;
19280 }
19281 else {
19282 return rowTop;
19283 }
19284 };
19285 RowComp.prototype.onRowHeightChanged = function () {
19286 // check for exists first - if the user is resetting the row height, then
19287 // it will be null (or undefined) momentarily until the next time the flatten
19288 // stage is called where the row will then update again with a new height
19289 if (utils_1._.exists(this.rowNode.rowHeight)) {
19290 var heightPx_1 = this.rowNode.rowHeight + 'px';
19291 this.eAllRowContainers.forEach(function (row) { return row.style.height = heightPx_1; });
19292 }
19293 };
19294 RowComp.prototype.addEventListener = function (eventType, listener) {
19295 if (eventType === 'renderedRowRemoved' || eventType === 'rowRemoved') {
19296 eventType = events_1.Events.EVENT_VIRTUAL_ROW_REMOVED;
19297 console.warn('ag-Grid: Since version 11, event renderedRowRemoved is now called ' + events_1.Events.EVENT_VIRTUAL_ROW_REMOVED);
19298 }
19299 _super.prototype.addEventListener.call(this, eventType, listener);
19300 };
19301 RowComp.prototype.removeEventListener = function (eventType, listener) {
19302 if (eventType === 'renderedRowRemoved' || eventType === 'rowRemoved') {
19303 eventType = events_1.Events.EVENT_VIRTUAL_ROW_REMOVED;
19304 console.warn('ag-Grid: Since version 11, event renderedRowRemoved and rowRemoved is now called ' + events_1.Events.EVENT_VIRTUAL_ROW_REMOVED);
19305 }
19306 _super.prototype.removeEventListener.call(this, eventType, listener);
19307 };
19308 RowComp.prototype.destroy = function (animate) {
19309 if (animate === void 0) { animate = false; }
19310 _super.prototype.destroy.call(this);
19311 this.active = false;
19312 // why do we have this method? shouldn't everything below be added as a destroy func beside
19313 // the corresponding create logic?
19314 this.destroyFullWidthComponents();
19315 if (animate) {
19316 this.removeFirstPassFuncs.forEach(function (func) { return func(); });
19317 this.removeSecondPassFuncs.push(this.destroyContainingCells.bind(this));
19318 }
19319 else {
19320 this.destroyContainingCells();
19321 // we are not animating, so execute the second stage of removal now.
19322 // we call getAndClear, so that they are only called once
19323 var delayedDestroyFunctions = this.getAndClearDelayedDestroyFunctions();
19324 delayedDestroyFunctions.forEach(function (func) { return func(); });
19325 }
19326 var event = this.createRowEvent(events_1.Events.EVENT_VIRTUAL_ROW_REMOVED);
19327 this.dispatchEvent(event);
19328 this.beans.eventService.dispatchEvent(event);
19329 };
19330 RowComp.prototype.destroyContainingCells = function () {
19331 this.forEachCellComp(function (renderedCell) { return renderedCell.destroy(); });
19332 this.destroyFullWidthComponents();
19333 };
19334 // we clear so that the functions are never executed twice
19335 RowComp.prototype.getAndClearDelayedDestroyFunctions = function () {
19336 var result = this.removeSecondPassFuncs;
19337 this.removeSecondPassFuncs = [];
19338 return result;
19339 };
19340 RowComp.prototype.onCellFocusChanged = function () {
19341 var rowFocused = this.beans.focusedCellController.isRowFocused(this.rowNode.rowIndex, this.rowNode.rowPinned);
19342 if (rowFocused !== this.rowFocused) {
19343 this.eAllRowContainers.forEach(function (row) { return utils_1._.addOrRemoveCssClass(row, 'ag-row-focus', rowFocused); });
19344 this.eAllRowContainers.forEach(function (row) { return utils_1._.addOrRemoveCssClass(row, 'ag-row-no-focus', !rowFocused); });
19345 this.rowFocused = rowFocused;
19346 }
19347 // if we are editing, then moving the focus out of a row will stop editing
19348 if (!rowFocused && this.editingRow) {
19349 this.stopEditing(false);
19350 }
19351 };
19352 RowComp.prototype.onPaginationChanged = function () {
19353 var currentPage = this.beans.paginationProxy.getCurrentPage();
19354 // it is possible this row is in the new page, but the page number has changed, which means
19355 // it needs to reposition itself relative to the new page
19356 if (this.paginationPage !== currentPage) {
19357 this.paginationPage = currentPage;
19358 this.onTopChanged();
19359 }
19360 };
19361 RowComp.prototype.onTopChanged = function () {
19362 this.setRowTop(this.rowNode.rowTop);
19363 };
19364 // applies pagination offset, eg if on second page, and page height is 500px, then removes
19365 // 500px from the top position, so a row with rowTop 600px is displayed at location 100px.
19366 // reverse will take the offset away rather than add.
19367 RowComp.prototype.applyPaginationOffset = function (topPx, reverse) {
19368 if (reverse === void 0) { reverse = false; }
19369 if (this.rowNode.isRowPinned()) {
19370 return topPx;
19371 }
19372 else {
19373 var pixelOffset = this.beans.paginationProxy.getPixelOffset();
19374 if (reverse) {
19375 return topPx + pixelOffset;
19376 }
19377 else {
19378 return topPx - pixelOffset;
19379 }
19380 }
19381 };
19382 RowComp.prototype.setRowTop = function (pixels) {
19383 // need to make sure rowTop is not null, as this can happen if the node was once
19384 // visible (ie parent group was expanded) but is now not visible
19385 if (utils_1._.exists(pixels)) {
19386 var afterPaginationPixels = this.applyPaginationOffset(pixels);
19387 var afterScalingPixels = this.beans.heightScaler.getRealPixelPosition(afterPaginationPixels);
19388 var topPx_1 = afterScalingPixels + "px";
19389 if (this.beans.gridOptionsWrapper.isSuppressRowTransform()) {
19390 this.eAllRowContainers.forEach(function (row) { return row.style.top = "" + topPx_1; });
19391 }
19392 else {
19393 this.eAllRowContainers.forEach(function (row) { return row.style.transform = "translateY(" + topPx_1 + ")"; });
19394 }
19395 }
19396 };
19397 // we clear so that the functions are never executed twice
19398 RowComp.prototype.getAndClearNextVMTurnFunctions = function () {
19399 var result = this.createSecondPassFuncs;
19400 this.createSecondPassFuncs = [];
19401 return result;
19402 };
19403 RowComp.prototype.getRowNode = function () {
19404 return this.rowNode;
19405 };
19406 RowComp.prototype.getRenderedCellForColumn = function (column) {
19407 return this.cellComps[column.getColId()];
19408 };
19409 RowComp.prototype.onRowIndexChanged = function () {
19410 this.onCellFocusChanged();
19411 this.updateRowIndexes();
19412 };
19413 RowComp.prototype.updateRowIndexes = function () {
19414 var rowIndexStr = this.rowNode.getRowIndexString();
19415 var rowIsEven = this.rowNode.rowIndex % 2 === 0;
19416 var rowIsEvenChanged = this.rowIsEven !== rowIsEven;
19417 if (rowIsEvenChanged) {
19418 this.rowIsEven = rowIsEven;
19419 }
19420 this.eAllRowContainers.forEach(function (eRow) {
19421 eRow.setAttribute('row-index', rowIndexStr);
19422 if (rowIsEvenChanged) {
19423 utils_1._.addOrRemoveCssClass(eRow, 'ag-row-even', rowIsEven);
19424 utils_1._.addOrRemoveCssClass(eRow, 'ag-row-odd', !rowIsEven);
19425 }
19426 });
19427 };
19428 RowComp.prototype.ensureDomOrder = function () {
19429 var body = this.getBodyRowElement();
19430 if (body) {
19431 this.bodyContainerComp.ensureDomOrder(body);
19432 }
19433 var left = this.getPinnedLeftRowElement();
19434 if (left) {
19435 this.pinnedLeftContainerComp.ensureDomOrder(left);
19436 }
19437 var right = this.getPinnedRightRowElement();
19438 if (right) {
19439 this.pinnedRightContainerComp.ensureDomOrder(right);
19440 }
19441 var fullWidth = this.getFullWidthRowElement();
19442 if (fullWidth) {
19443 this.fullWidthContainerComp.ensureDomOrder(fullWidth);
19444 }
19445 };
19446 // returns the pinned left container, either the normal one, or the embedded full with one if exists
19447 RowComp.prototype.getPinnedLeftRowElement = function () {
19448 return this.ePinnedLeftRow ? this.ePinnedLeftRow : this.eFullWidthRowLeft;
19449 };
19450 // returns the pinned right container, either the normal one, or the embedded full with one if exists
19451 RowComp.prototype.getPinnedRightRowElement = function () {
19452 return this.ePinnedRightRow ? this.ePinnedRightRow : this.eFullWidthRowRight;
19453 };
19454 // returns the body container, either the normal one, or the embedded full with one if exists
19455 RowComp.prototype.getBodyRowElement = function () {
19456 return this.eBodyRow ? this.eBodyRow : this.eFullWidthRowBody;
19457 };
19458 // returns the full width container
19459 RowComp.prototype.getFullWidthRowElement = function () {
19460 return this.eFullWidthRow;
19461 };
19462 RowComp.DOM_DATA_KEY_RENDERED_ROW = 'renderedRow';
19463 RowComp.FULL_WIDTH_CELL_RENDERER = 'fullWidthCellRenderer';
19464 RowComp.GROUP_ROW_RENDERER = 'groupRowRenderer';
19465 RowComp.GROUP_ROW_RENDERER_COMP_NAME = 'agGroupRowRenderer';
19466 RowComp.LOADING_CELL_RENDERER = 'loadingCellRenderer';
19467 RowComp.LOADING_CELL_RENDERER_COMP_NAME = 'agLoadingCellRenderer';
19468 RowComp.DETAIL_CELL_RENDERER = 'detailCellRenderer';
19469 RowComp.DETAIL_CELL_RENDERER_COMP_NAME = 'agDetailCellRenderer';
19470 return RowComp;
19471}(component_1.Component));
19472exports.RowComp = RowComp;
19473
19474
19475/***/ }),
19476/* 53 */
19477/***/ (function(module, exports, __webpack_require__) {
19478
19479"use strict";
19480/**
19481 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
19482 * @version v18.1.2
19483 * @link http://www.ag-grid.com/
19484 * @license MIT
19485 */
19486
19487var __extends = (this && this.__extends) || (function () {
19488 var extendStatics = Object.setPrototypeOf ||
19489 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
19490 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
19491 return function (d, b) {
19492 extendStatics(d, b);
19493 function __() { this.constructor = d; }
19494 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
19495 };
19496})();
19497var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
19498 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
19499 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
19500 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
19501 return c > 3 && r && Object.defineProperty(target, key, r), r;
19502};
19503var __metadata = (this && this.__metadata) || function (k, v) {
19504 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
19505};
19506Object.defineProperty(exports, "__esModule", { value: true });
19507var component_1 = __webpack_require__(8);
19508var componentAnnotations_1 = __webpack_require__(11);
19509var context_1 = __webpack_require__(0);
19510var gridOptionsWrapper_1 = __webpack_require__(2);
19511var utils_1 = __webpack_require__(1);
19512var FilterConditionType;
19513(function (FilterConditionType) {
19514 FilterConditionType[FilterConditionType["MAIN"] = 0] = "MAIN";
19515 FilterConditionType[FilterConditionType["CONDITION"] = 1] = "CONDITION";
19516})(FilterConditionType = exports.FilterConditionType || (exports.FilterConditionType = {}));
19517var DEFAULT_TRANSLATIONS = {
19518 loadingOoo: 'Loading...',
19519 equals: 'Equals',
19520 notEqual: 'Not equal',
19521 lessThan: 'Less than',
19522 greaterThan: 'Greater than',
19523 inRange: 'In range',
19524 lessThanOrEqual: 'Less than or equals',
19525 greaterThanOrEqual: 'Greater than or equals',
19526 filterOoo: 'Filter...',
19527 contains: 'Contains',
19528 notContains: 'Not contains',
19529 startsWith: 'Starts with',
19530 endsWith: 'Ends with',
19531 searchOoo: 'Search...',
19532 selectAll: 'Select All',
19533 applyFilter: 'Apply Filter',
19534 clearFilter: 'Clear Filter'
19535};
19536/**
19537 * T(ype) The type of this filter. ie in DateFilter T=Date
19538 * P(arams) The params that this filter can take
19539 * M(model getModel/setModel) The object that this filter serializes to
19540 * F Floating filter params
19541 *
19542 * Contains common logic to ALL filters.. Translation, apply and clear button
19543 * get/setModel context wiring....
19544 */
19545var BaseFilter = (function (_super) {
19546 __extends(BaseFilter, _super);
19547 function BaseFilter() {
19548 return _super !== null && _super.apply(this, arguments) || this;
19549 }
19550 BaseFilter.prototype.init = function (params) {
19551 this.filterParams = params;
19552 this.defaultFilter = this.filterParams.defaultOption;
19553 if (this.filterParams.filterOptions && !this.defaultFilter) {
19554 if (this.filterParams.filterOptions.lastIndexOf(BaseFilter.EQUALS) < 0) {
19555 this.defaultFilter = this.filterParams.filterOptions[0];
19556 }
19557 }
19558 this.customInit();
19559 this.filter = this.defaultFilter;
19560 this.filterCondition = this.defaultFilter;
19561 this.clearActive = params.clearButton === true;
19562 //Allowing for old param property apply, even though is not advertised through the interface
19563 this.applyActive = ((params.applyButton === true) || (params.apply === true));
19564 this.newRowsActionKeep = params.newRowsAction === 'keep';
19565 this.setTemplate(this.generateTemplate());
19566 utils_1._.setVisible(this.eApplyButton, this.applyActive);
19567 if (this.applyActive) {
19568 this.addDestroyableEventListener(this.eApplyButton, "click", this.filterParams.filterChangedCallback);
19569 }
19570 utils_1._.setVisible(this.eClearButton, this.clearActive);
19571 if (this.clearActive) {
19572 this.addDestroyableEventListener(this.eClearButton, "click", this.onClearButton.bind(this));
19573 }
19574 var anyButtonVisible = this.applyActive || this.clearActive;
19575 utils_1._.setVisible(this.eButtonsPanel, anyButtonVisible);
19576 this.instantiate(this.context);
19577 this.initialiseFilterBodyUi(FilterConditionType.MAIN);
19578 this.refreshFilterBodyUi(FilterConditionType.MAIN);
19579 };
19580 BaseFilter.prototype.onClearButton = function () {
19581 this.setModel(null);
19582 this.onFilterChanged();
19583 };
19584 BaseFilter.prototype.floatingFilter = function (from) {
19585 if (from !== '') {
19586 var model = this.modelFromFloatingFilter(from);
19587 this.setModel(model);
19588 }
19589 else {
19590 this.resetState();
19591 }
19592 this.onFilterChanged();
19593 };
19594 BaseFilter.prototype.onNewRowsLoaded = function () {
19595 if (!this.newRowsActionKeep) {
19596 this.resetState();
19597 }
19598 };
19599 BaseFilter.prototype.getModel = function () {
19600 if (this.isFilterActive()) {
19601 if (!this.isFilterConditionActive(FilterConditionType.CONDITION)) {
19602 return this.serialize(FilterConditionType.MAIN);
19603 }
19604 else {
19605 return {
19606 condition1: this.serialize(FilterConditionType.MAIN),
19607 condition2: this.serialize(FilterConditionType.CONDITION),
19608 operator: this.conditionValue
19609 };
19610 }
19611 }
19612 else {
19613 return null;
19614 }
19615 };
19616 BaseFilter.prototype.getNullableModel = function () {
19617 if (!this.isFilterConditionActive(FilterConditionType.CONDITION)) {
19618 return this.serialize(FilterConditionType.MAIN);
19619 }
19620 else {
19621 return {
19622 condition1: this.serialize(FilterConditionType.MAIN),
19623 condition2: this.serialize(FilterConditionType.CONDITION),
19624 operator: this.conditionValue
19625 };
19626 }
19627 };
19628 BaseFilter.prototype.setModel = function (model) {
19629 if (model) {
19630 if (!model.operator) {
19631 this.resetState();
19632 this.parse(model, FilterConditionType.MAIN);
19633 }
19634 else {
19635 var asCombinedFilter = model;
19636 this.parse((asCombinedFilter).condition1, FilterConditionType.MAIN);
19637 this.parse((asCombinedFilter).condition2, FilterConditionType.CONDITION);
19638 this.conditionValue = asCombinedFilter.operator;
19639 }
19640 }
19641 else {
19642 this.resetState();
19643 }
19644 this.redrawCondition();
19645 this.refreshFilterBodyUi(FilterConditionType.MAIN);
19646 this.refreshFilterBodyUi(FilterConditionType.CONDITION);
19647 };
19648 BaseFilter.prototype.doOnFilterChanged = function (applyNow) {
19649 if (applyNow === void 0) { applyNow = false; }
19650 this.filterParams.filterModifiedCallback();
19651 var requiresApplyAndIsApplying = this.applyActive && applyNow;
19652 var notRequiresApply = !this.applyActive;
19653 var shouldFilter = notRequiresApply || requiresApplyAndIsApplying;
19654 if (shouldFilter) {
19655 this.filterParams.filterChangedCallback();
19656 }
19657 this.refreshFilterBodyUi(FilterConditionType.MAIN);
19658 this.refreshFilterBodyUi(FilterConditionType.CONDITION);
19659 return shouldFilter;
19660 };
19661 BaseFilter.prototype.onFilterChanged = function (applyNow) {
19662 if (applyNow === void 0) { applyNow = false; }
19663 this.doOnFilterChanged(applyNow);
19664 this.redrawCondition();
19665 this.refreshFilterBodyUi(FilterConditionType.MAIN);
19666 this.refreshFilterBodyUi(FilterConditionType.CONDITION);
19667 };
19668 BaseFilter.prototype.redrawCondition = function () {
19669 var _this = this;
19670 var filterCondition = this.eFilterBodyWrapper.querySelector('.ag-filter-condition');
19671 if (!filterCondition && this.isFilterActive() && this.acceptsBooleanLogic()) {
19672 this.eConditionWrapper = utils_1._.loadTemplate(this.createConditionTemplate(FilterConditionType.CONDITION));
19673 this.eFilterBodyWrapper.appendChild(this.eConditionWrapper);
19674 this.wireQuerySelectors();
19675 var _a = this.refreshOperatorUi(), andButton = _a.andButton, orButton = _a.orButton;
19676 this.addDestroyableEventListener(andButton, 'change', function () {
19677 _this.conditionValue = 'AND';
19678 _this.onFilterChanged();
19679 });
19680 this.addDestroyableEventListener(orButton, 'change', function () {
19681 _this.conditionValue = 'OR';
19682 _this.onFilterChanged();
19683 });
19684 this.initialiseFilterBodyUi(FilterConditionType.CONDITION);
19685 }
19686 else if (filterCondition && !this.isFilterActive()) {
19687 this.eFilterBodyWrapper.removeChild(this.eConditionWrapper);
19688 this.eConditionWrapper = null;
19689 }
19690 else {
19691 this.refreshFilterBodyUi(FilterConditionType.CONDITION);
19692 if (this.eConditionWrapper) {
19693 this.refreshOperatorUi();
19694 }
19695 }
19696 };
19697 BaseFilter.prototype.refreshOperatorUi = function () {
19698 var andButton = this.eConditionWrapper.querySelector('.and');
19699 var orButton = this.eConditionWrapper.querySelector('.or');
19700 this.conditionValue = this.conditionValue == null ? 'AND' : this.conditionValue;
19701 andButton.checked = this.conditionValue === 'AND';
19702 orButton.checked = this.conditionValue === 'OR';
19703 return { andButton: andButton, orButton: orButton };
19704 };
19705 BaseFilter.prototype.onFloatingFilterChanged = function (change) {
19706 //It has to be of the type FloatingFilterWithApplyChange if it gets here
19707 var casted = change;
19708 if (casted == null) {
19709 this.setModel(null);
19710 }
19711 else if (!this.isFilterConditionActive(FilterConditionType.CONDITION)) {
19712 this.setModel(casted ? casted.model : null);
19713 }
19714 else {
19715 var combinedFilter = {
19716 condition1: casted.model,
19717 condition2: this.serialize(FilterConditionType.CONDITION),
19718 operator: this.conditionValue
19719 };
19720 this.setModel(combinedFilter);
19721 }
19722 return this.doOnFilterChanged(casted ? casted.apply : false);
19723 };
19724 BaseFilter.prototype.generateFilterHeader = function (type) {
19725 return '';
19726 };
19727 BaseFilter.prototype.generateTemplate = function () {
19728 var translate = this.translate.bind(this);
19729 var mainConditionBody = this.createConditionBody(FilterConditionType.MAIN);
19730 var bodyWithBooleanLogic = !this.acceptsBooleanLogic() ?
19731 mainConditionBody :
19732 this.wrapCondition(mainConditionBody);
19733 return "<div>\n <div class='ag-filter-body-wrapper'>" + bodyWithBooleanLogic + "</div>\n <div class=\"ag-filter-apply-panel\" id=\"applyPanel\">\n <button type=\"button\" id=\"clearButton\">" + translate('clearFilter') + "</button>\n <button type=\"button\" id=\"applyButton\">" + translate('applyFilter') + "</button>\n </div>\n </div>";
19734 };
19735 BaseFilter.prototype.acceptsBooleanLogic = function () {
19736 return false;
19737 };
19738 BaseFilter.prototype.wrapCondition = function (mainCondition) {
19739 if (!this.isFilterActive())
19740 return mainCondition;
19741 return "" + mainCondition + this.createConditionTemplate(FilterConditionType.CONDITION);
19742 };
19743 BaseFilter.prototype.createConditionTemplate = function (type) {
19744 return "<div class=\"ag-filter-condition\">\n <input id=\"andId\" type=\"radio\" class=\"and\" name=\"booleanLogic\" value=\"AND\" checked=\"checked\" /><label style=\"display: inline\" for=\"andId\">AND</label>\n <input id=\"orId\" type=\"radio\" class=\"or\" name=\"booleanLogic\" value=\"OR\" /><label style=\"display: inline\" for=\"orId\">OR</label>\n <div>" + this.createConditionBody(type) + "</div>\n </div>";
19745 };
19746 BaseFilter.prototype.createConditionBody = function (type) {
19747 var body = this.bodyTemplate(type);
19748 return this.generateFilterHeader(type) + body;
19749 };
19750 BaseFilter.prototype.translate = function (toTranslate) {
19751 var translate = this.gridOptionsWrapper.getLocaleTextFunc();
19752 return translate(toTranslate, DEFAULT_TRANSLATIONS[toTranslate]);
19753 };
19754 BaseFilter.prototype.getDebounceMs = function (filterParams) {
19755 if (filterParams.applyButton && filterParams.debounceMs) {
19756 console.warn('ag-Grid: debounceMs is ignored when applyButton = true');
19757 return 0;
19758 }
19759 return filterParams.debounceMs != null ? filterParams.debounceMs : 500;
19760 };
19761 BaseFilter.EQUALS = 'equals';
19762 BaseFilter.NOT_EQUAL = 'notEqual';
19763 BaseFilter.LESS_THAN = 'lessThan';
19764 BaseFilter.LESS_THAN_OR_EQUAL = 'lessThanOrEqual';
19765 BaseFilter.GREATER_THAN = 'greaterThan';
19766 BaseFilter.GREATER_THAN_OR_EQUAL = 'greaterThanOrEqual';
19767 BaseFilter.IN_RANGE = 'inRange';
19768 BaseFilter.CONTAINS = 'contains'; //1;
19769 BaseFilter.NOT_CONTAINS = 'notContains'; //1;
19770 BaseFilter.STARTS_WITH = 'startsWith'; //4;
19771 BaseFilter.ENDS_WITH = 'endsWith'; //5;
19772 __decorate([
19773 componentAnnotations_1.QuerySelector('#applyPanel'),
19774 __metadata("design:type", HTMLElement)
19775 ], BaseFilter.prototype, "eButtonsPanel", void 0);
19776 __decorate([
19777 componentAnnotations_1.QuerySelector('.ag-filter-body-wrapper'),
19778 __metadata("design:type", HTMLElement)
19779 ], BaseFilter.prototype, "eFilterBodyWrapper", void 0);
19780 __decorate([
19781 componentAnnotations_1.QuerySelector('#applyButton'),
19782 __metadata("design:type", HTMLElement)
19783 ], BaseFilter.prototype, "eApplyButton", void 0);
19784 __decorate([
19785 componentAnnotations_1.QuerySelector('#clearButton'),
19786 __metadata("design:type", HTMLElement)
19787 ], BaseFilter.prototype, "eClearButton", void 0);
19788 __decorate([
19789 context_1.Autowired('context'),
19790 __metadata("design:type", context_1.Context)
19791 ], BaseFilter.prototype, "context", void 0);
19792 __decorate([
19793 context_1.Autowired('gridOptionsWrapper'),
19794 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
19795 ], BaseFilter.prototype, "gridOptionsWrapper", void 0);
19796 return BaseFilter;
19797}(component_1.Component));
19798exports.BaseFilter = BaseFilter;
19799/**
19800 * Every filter with a dropdown where the user can specify a comparing type against the filter values
19801 */
19802var ComparableBaseFilter = (function (_super) {
19803 __extends(ComparableBaseFilter, _super);
19804 function ComparableBaseFilter() {
19805 return _super !== null && _super.apply(this, arguments) || this;
19806 }
19807 ComparableBaseFilter.prototype.doesFilterPass = function (params) {
19808 var mainFilterResult = this.individualFilterPasses(params, FilterConditionType.MAIN);
19809 if (this.eTypeConditionSelector == null) {
19810 return mainFilterResult;
19811 }
19812 var auxFilterResult = this.individualFilterPasses(params, FilterConditionType.CONDITION);
19813 return this.conditionValue === 'AND' ? mainFilterResult && auxFilterResult : mainFilterResult || auxFilterResult;
19814 };
19815 ComparableBaseFilter.prototype.init = function (params) {
19816 _super.prototype.init.call(this, params);
19817 this.suppressAndOrCondition = params.suppressAndOrCondition;
19818 };
19819 ComparableBaseFilter.prototype.customInit = function () {
19820 if (!this.defaultFilter) {
19821 this.defaultFilter = this.getDefaultType();
19822 }
19823 };
19824 ComparableBaseFilter.prototype.acceptsBooleanLogic = function () {
19825 return this.suppressAndOrCondition !== true;
19826 };
19827 ComparableBaseFilter.prototype.generateFilterHeader = function (type) {
19828 var _this = this;
19829 var defaultFilterTypes = this.getApplicableFilterTypes();
19830 var restrictedFilterTypes = this.filterParams.filterOptions;
19831 var actualFilterTypes = restrictedFilterTypes ? restrictedFilterTypes : defaultFilterTypes;
19832 var optionsHtml = actualFilterTypes.map(function (filterType) {
19833 var localeFilterName = _this.translate(filterType);
19834 return "<option value=\"" + filterType + "\">" + localeFilterName + "</option>";
19835 });
19836 var readOnly = optionsHtml.length == 1 ? 'disabled' : '';
19837 var id = type == FilterConditionType.MAIN ? 'filterType' : 'filterConditionType';
19838 return optionsHtml.length <= 0 ?
19839 '' :
19840 "<div>\n <select class=\"ag-filter-select\" id=\"" + id + "\" " + readOnly + ">\n " + optionsHtml.join('') + "\n </select>\n </div>";
19841 };
19842 ComparableBaseFilter.prototype.initialiseFilterBodyUi = function (type) {
19843 var _this = this;
19844 if (type === FilterConditionType.MAIN) {
19845 this.setFilterType(this.filter, type);
19846 this.addDestroyableEventListener(this.eTypeSelector, "change", function () { return _this.onFilterTypeChanged(type); });
19847 }
19848 else {
19849 this.setFilterType(this.filterCondition, type);
19850 this.addDestroyableEventListener(this.eTypeConditionSelector, "change", function () { return _this.onFilterTypeChanged(type); });
19851 }
19852 };
19853 ComparableBaseFilter.prototype.onFilterTypeChanged = function (type) {
19854 if (type === FilterConditionType.MAIN) {
19855 this.filter = this.eTypeSelector.value;
19856 }
19857 else {
19858 this.filterCondition = this.eTypeConditionSelector.value;
19859 }
19860 this.refreshFilterBodyUi(type);
19861 // we check if filter is active, so that if user changes the type (eg from 'less than' to 'equals'),
19862 // well this doesn't matter if the user has no value in the text field, so don't fire 'onFilterChanged'.
19863 // this means we don't refresh the grid when the type changes if no value is present.
19864 if (this.isFilterActive()) {
19865 this.onFilterChanged();
19866 }
19867 };
19868 ComparableBaseFilter.prototype.isFilterActive = function () {
19869 var rawFilterValues = this.filterValues(FilterConditionType.MAIN);
19870 if (this.filter === BaseFilter.IN_RANGE) {
19871 var filterValueArray = rawFilterValues;
19872 return filterValueArray[0] != null && filterValueArray[1] != null;
19873 }
19874 else {
19875 return rawFilterValues != null;
19876 }
19877 };
19878 ComparableBaseFilter.prototype.setFilterType = function (filterType, type) {
19879 if (type === FilterConditionType.MAIN) {
19880 this.filter = filterType;
19881 if (!this.eTypeSelector)
19882 return;
19883 this.eTypeSelector.value = filterType;
19884 }
19885 else {
19886 this.filterCondition = filterType;
19887 if (!this.eTypeConditionSelector)
19888 return;
19889 this.eTypeConditionSelector.value = filterType;
19890 }
19891 };
19892 ComparableBaseFilter.prototype.isFilterConditionActive = function (type) {
19893 return this.filterValues(type) != null;
19894 };
19895 __decorate([
19896 componentAnnotations_1.QuerySelector('#filterType'),
19897 __metadata("design:type", HTMLSelectElement)
19898 ], ComparableBaseFilter.prototype, "eTypeSelector", void 0);
19899 __decorate([
19900 componentAnnotations_1.QuerySelector('#filterConditionType'),
19901 __metadata("design:type", HTMLSelectElement)
19902 ], ComparableBaseFilter.prototype, "eTypeConditionSelector", void 0);
19903 return ComparableBaseFilter;
19904}(BaseFilter));
19905exports.ComparableBaseFilter = ComparableBaseFilter;
19906/**
19907 * Comparable filter with scalar underlying values (ie numbers and dates. Strings are not scalar so have to extend
19908 * ComparableBaseFilter)
19909 */
19910var ScalarBaseFilter = (function (_super) {
19911 __extends(ScalarBaseFilter, _super);
19912 function ScalarBaseFilter() {
19913 return _super !== null && _super.apply(this, arguments) || this;
19914 }
19915 ScalarBaseFilter.prototype.nullComparator = function (type) {
19916 var _this = this;
19917 return function (filterValue, gridValue) {
19918 if (gridValue == null) {
19919 var nullValue = _this.translateNull(type);
19920 if (_this.filter === BaseFilter.EQUALS) {
19921 return nullValue ? 0 : 1;
19922 }
19923 if (_this.filter === BaseFilter.GREATER_THAN) {
19924 return nullValue ? 1 : -1;
19925 }
19926 if (_this.filter === BaseFilter.GREATER_THAN_OR_EQUAL) {
19927 return nullValue ? 1 : -1;
19928 }
19929 if (_this.filter === BaseFilter.LESS_THAN_OR_EQUAL) {
19930 return nullValue ? -1 : 1;
19931 }
19932 if (_this.filter === BaseFilter.LESS_THAN) {
19933 return nullValue ? -1 : 1;
19934 }
19935 if (_this.filter === BaseFilter.NOT_EQUAL) {
19936 return nullValue ? 1 : 0;
19937 }
19938 }
19939 var actualComparator = _this.comparator();
19940 return actualComparator(filterValue, gridValue);
19941 };
19942 };
19943 ScalarBaseFilter.prototype.getDefaultType = function () {
19944 return BaseFilter.EQUALS;
19945 };
19946 ScalarBaseFilter.prototype.translateNull = function (type) {
19947 var reducedType = type.indexOf('greater') > -1 ? 'greaterThan' :
19948 type.indexOf('lessThan') > -1 ? 'lessThan' :
19949 'equals';
19950 if (this.filterParams.nullComparator && this.filterParams.nullComparator[reducedType]) {
19951 return this.filterParams.nullComparator[reducedType];
19952 }
19953 return ScalarBaseFilter.DEFAULT_NULL_COMPARATOR[reducedType];
19954 };
19955 ScalarBaseFilter.prototype.individualFilterPasses = function (params, type) {
19956 return this.doIndividualFilterPasses(params, type, type === FilterConditionType.MAIN ? this.filter : this.filterCondition);
19957 };
19958 ScalarBaseFilter.prototype.doIndividualFilterPasses = function (params, type, filter) {
19959 var value = this.filterParams.valueGetter(params.node);
19960 var comparator = this.nullComparator(filter);
19961 var rawFilterValues = this.filterValues(type);
19962 var from = Array.isArray(rawFilterValues) ? rawFilterValues[0] : rawFilterValues;
19963 if (from == null) {
19964 return type === FilterConditionType.MAIN ? true : this.conditionValue === 'AND';
19965 }
19966 var compareResult = comparator(from, value);
19967 if (filter === BaseFilter.EQUALS) {
19968 return compareResult === 0;
19969 }
19970 if (filter === BaseFilter.GREATER_THAN) {
19971 return compareResult > 0;
19972 }
19973 if (filter === BaseFilter.GREATER_THAN_OR_EQUAL) {
19974 return compareResult >= 0;
19975 }
19976 if (filter === BaseFilter.LESS_THAN_OR_EQUAL) {
19977 return compareResult <= 0;
19978 }
19979 if (filter === BaseFilter.LESS_THAN) {
19980 return compareResult < 0;
19981 }
19982 if (filter === BaseFilter.NOT_EQUAL) {
19983 return compareResult != 0;
19984 }
19985 //From now on the type is a range and rawFilterValues must be an array!
19986 var compareToResult = comparator(rawFilterValues[1], value);
19987 if (filter === BaseFilter.IN_RANGE) {
19988 if (!this.filterParams.inRangeInclusive) {
19989 return compareResult > 0 && compareToResult < 0;
19990 }
19991 else {
19992 return compareResult >= 0 && compareToResult <= 0;
19993 }
19994 }
19995 throw new Error('Unexpected type of filter!: ' + filter);
19996 };
19997 ScalarBaseFilter.DEFAULT_NULL_COMPARATOR = {
19998 equals: false,
19999 lessThan: false,
20000 greaterThan: false
20001 };
20002 return ScalarBaseFilter;
20003}(ComparableBaseFilter));
20004exports.ScalarBaseFilter = ScalarBaseFilter;
20005
20006
20007/***/ }),
20008/* 54 */
20009/***/ (function(module, exports, __webpack_require__) {
20010
20011"use strict";
20012/**
20013 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
20014 * @version v18.1.2
20015 * @link http://www.ag-grid.com/
20016 * @license MIT
20017 */
20018
20019var __extends = (this && this.__extends) || (function () {
20020 var extendStatics = Object.setPrototypeOf ||
20021 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
20022 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
20023 return function (d, b) {
20024 extendStatics(d, b);
20025 function __() { this.constructor = d; }
20026 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
20027 };
20028})();
20029Object.defineProperty(exports, "__esModule", { value: true });
20030var utils_1 = __webpack_require__(1);
20031var column_1 = __webpack_require__(10);
20032var beanStub_1 = __webpack_require__(13);
20033var SetLeftFeature = (function (_super) {
20034 __extends(SetLeftFeature, _super);
20035 function SetLeftFeature(columnOrGroup, eCell, beans, colsSpanning) {
20036 var _this = _super.call(this) || this;
20037 _this.columnOrGroup = columnOrGroup;
20038 _this.eCell = eCell;
20039 _this.colsSpanning = colsSpanning;
20040 _this.beans = beans;
20041 return _this;
20042 }
20043 SetLeftFeature.prototype.setColsSpanning = function (colsSpanning) {
20044 this.colsSpanning = colsSpanning;
20045 this.onLeftChanged();
20046 };
20047 SetLeftFeature.prototype.getColumnOrGroup = function () {
20048 if (this.beans.gridOptionsWrapper.isEnableRtl() && this.colsSpanning) {
20049 return this.colsSpanning[this.colsSpanning.length - 1];
20050 }
20051 else {
20052 return this.columnOrGroup;
20053 }
20054 };
20055 SetLeftFeature.prototype.init = function () {
20056 this.addDestroyableEventListener(this.columnOrGroup, column_1.Column.EVENT_LEFT_CHANGED, this.onLeftChanged.bind(this));
20057 this.setLeftFirstTime();
20058 };
20059 SetLeftFeature.prototype.setLeftFirstTime = function () {
20060 var suppressMoveAnimation = this.beans.gridOptionsWrapper.isSuppressColumnMoveAnimation();
20061 var oldLeftExists = utils_1.Utils.exists(this.columnOrGroup.getOldLeft());
20062 var animateColumnMove = this.beans.columnAnimationService.isActive() && oldLeftExists && !suppressMoveAnimation;
20063 if (animateColumnMove) {
20064 this.animateInLeft();
20065 }
20066 else {
20067 this.onLeftChanged();
20068 }
20069 };
20070 SetLeftFeature.prototype.animateInLeft = function () {
20071 var _this = this;
20072 var left = this.getColumnOrGroup().getLeft();
20073 var oldLeft = this.getColumnOrGroup().getOldLeft();
20074 this.setLeft(oldLeft);
20075 // we must keep track of the left we want to set to, as this would otherwise lead to a race
20076 // condition, if the user changed the left value many times in one VM turn, then we want to make
20077 // make sure the actualLeft we set in the timeout below (in the next VM turn) is the correct left
20078 // position. eg if user changes column position twice, then setLeft() below executes twice in next
20079 // VM turn, but only one (the correct one) should get applied.
20080 this.actualLeft = left;
20081 this.beans.columnAnimationService.executeNextVMTurn(function () {
20082 // test this left value is the latest one to be applied, and if not, do nothing
20083 if (_this.actualLeft === left) {
20084 _this.setLeft(left);
20085 }
20086 });
20087 };
20088 SetLeftFeature.prototype.onLeftChanged = function () {
20089 this.actualLeft = this.getColumnOrGroup().getLeft();
20090 this.setLeft(this.actualLeft);
20091 };
20092 SetLeftFeature.prototype.setLeft = function (value) {
20093 // if the value is null, then that means the column is no longer
20094 // displayed. there is logic in the rendering to fade these columns
20095 // out, so we don't try and change their left positions.
20096 if (utils_1.Utils.exists(value)) {
20097 this.eCell.style.left = value + 'px';
20098 }
20099 };
20100 return SetLeftFeature;
20101}(beanStub_1.BeanStub));
20102exports.SetLeftFeature = SetLeftFeature;
20103
20104
20105/***/ }),
20106/* 55 */
20107/***/ (function(module, exports, __webpack_require__) {
20108
20109"use strict";
20110/**
20111 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
20112 * @version v18.1.2
20113 * @link http://www.ag-grid.com/
20114 * @license MIT
20115 */
20116
20117var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
20118 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20119 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
20120 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
20121 return c > 3 && r && Object.defineProperty(target, key, r), r;
20122};
20123var __metadata = (this && this.__metadata) || function (k, v) {
20124 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
20125};
20126Object.defineProperty(exports, "__esModule", { value: true });
20127var context_1 = __webpack_require__(0);
20128var gridOptionsWrapper_1 = __webpack_require__(2);
20129var ColumnAnimationService = (function () {
20130 function ColumnAnimationService() {
20131 this.executeNextFuncs = [];
20132 this.executeLaterFuncs = [];
20133 this.active = false;
20134 this.animationThreadCount = 0;
20135 }
20136 ColumnAnimationService.prototype.registerGridComp = function (gridPanel) {
20137 this.gridPanel = gridPanel;
20138 };
20139 ColumnAnimationService.prototype.isActive = function () {
20140 return this.active;
20141 };
20142 ColumnAnimationService.prototype.start = function () {
20143 if (this.active) {
20144 return;
20145 }
20146 if (this.gridOptionsWrapper.isSuppressColumnMoveAnimation()) {
20147 return;
20148 }
20149 // if doing RTL, we don't animate open / close as due to how the pixels are inverted,
20150 // the animation moves all the row the the right rather than to the left (ie it's the static
20151 // columns that actually get their coordinates updated)
20152 if (this.gridOptionsWrapper.isEnableRtl()) {
20153 return;
20154 }
20155 this.ensureAnimationCssClassPresent();
20156 this.active = true;
20157 };
20158 ColumnAnimationService.prototype.finish = function () {
20159 if (!this.active) {
20160 return;
20161 }
20162 this.flush();
20163 this.active = false;
20164 };
20165 ColumnAnimationService.prototype.executeNextVMTurn = function (func) {
20166 if (this.active) {
20167 this.executeNextFuncs.push(func);
20168 }
20169 else {
20170 func();
20171 }
20172 };
20173 ColumnAnimationService.prototype.executeLaterVMTurn = function (func) {
20174 if (this.active) {
20175 this.executeLaterFuncs.push(func);
20176 }
20177 else {
20178 func();
20179 }
20180 };
20181 ColumnAnimationService.prototype.ensureAnimationCssClassPresent = function () {
20182 var _this = this;
20183 // up the count, so we can tell if someone else has updated the count
20184 // by the time the 'wait' func executes
20185 this.animationThreadCount++;
20186 var animationThreadCountCopy = this.animationThreadCount;
20187 this.gridPanel.setColumnMovingCss(true);
20188 this.executeLaterFuncs.push(function () {
20189 // only remove the class if this thread was the last one to update it
20190 if (_this.animationThreadCount === animationThreadCountCopy) {
20191 _this.gridPanel.setColumnMovingCss(false);
20192 }
20193 });
20194 };
20195 ColumnAnimationService.prototype.flush = function () {
20196 var nowFuncs = this.executeNextFuncs;
20197 this.executeNextFuncs = [];
20198 var waitFuncs = this.executeLaterFuncs;
20199 this.executeLaterFuncs = [];
20200 if (nowFuncs.length === 0 && waitFuncs.length === 0) {
20201 return;
20202 }
20203 setTimeout(function () { return nowFuncs.forEach(function (func) { return func(); }); }, 0);
20204 setTimeout(function () { return waitFuncs.forEach(function (func) { return func(); }); }, 300);
20205 };
20206 __decorate([
20207 context_1.Autowired('gridOptionsWrapper'),
20208 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
20209 ], ColumnAnimationService.prototype, "gridOptionsWrapper", void 0);
20210 ColumnAnimationService = __decorate([
20211 context_1.Bean('columnAnimationService')
20212 ], ColumnAnimationService);
20213 return ColumnAnimationService;
20214}());
20215exports.ColumnAnimationService = ColumnAnimationService;
20216
20217
20218/***/ }),
20219/* 56 */
20220/***/ (function(module, exports, __webpack_require__) {
20221
20222"use strict";
20223/**
20224 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
20225 * @version v18.1.2
20226 * @link http://www.ag-grid.com/
20227 * @license MIT
20228 */
20229
20230var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
20231 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20232 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
20233 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
20234 return c > 3 && r && Object.defineProperty(target, key, r), r;
20235};
20236var __metadata = (this && this.__metadata) || function (k, v) {
20237 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
20238};
20239Object.defineProperty(exports, "__esModule", { value: true });
20240var context_1 = __webpack_require__(0);
20241var popupEditorWrapper_1 = __webpack_require__(71);
20242var gridOptionsWrapper_1 = __webpack_require__(2);
20243var componentResolver_1 = __webpack_require__(29);
20244var CellEditorFactory = (function () {
20245 function CellEditorFactory() {
20246 }
20247 CellEditorFactory.prototype.init = function () {
20248 };
20249 CellEditorFactory.prototype.addCellEditor = function (key, cellEditor) {
20250 console.warn("ag-grid: since v13.3.1 this method is not supported anymore. If you want to register your own editor check the docs: https://www.ag-grid.com/javascript-grid-cell-editor/");
20251 };
20252 // private registerEditorsFromGridOptions(): void {
20253 // let userProvidedCellEditors = this.gridOptionsWrapper.getCellEditors();
20254 // _.iterateObject(userProvidedCellEditors, (key: string, cellEditor: {new(): ICellEditor})=> {
20255 // this.addCellEditor(key, cellEditor);
20256 // });
20257 // }
20258 CellEditorFactory.prototype.createCellEditor = function (column, params) {
20259 var _this = this;
20260 var cellEditorPromise = this.componentResolver.createAgGridComponent(column, params, 'cellEditor', {
20261 api: params.api,
20262 columnApi: params.columnApi,
20263 node: params.node,
20264 data: params.node.data,
20265 rowIndex: params.rowIndex,
20266 column: params.column,
20267 colDef: params.column.getColDef()
20268 }, 'agCellEditor');
20269 return cellEditorPromise.map(function (cellEditor) {
20270 var isPopup = cellEditor.isPopup && cellEditor.isPopup();
20271 if (!isPopup) {
20272 return cellEditor;
20273 }
20274 if (_this.gridOptionsWrapper.isFullRowEdit()) {
20275 console.warn('ag-Grid: popup cellEditor does not work with fullRowEdit - you cannot use them both ' +
20276 '- either turn off fullRowEdit, or stop using popup editors.');
20277 }
20278 // if a popup, then we wrap in a popup editor and return the popup
20279 var popupEditorWrapper = new popupEditorWrapper_1.PopupEditorWrapper(cellEditor);
20280 _this.context.wireBean(popupEditorWrapper);
20281 popupEditorWrapper.init(params);
20282 return popupEditorWrapper;
20283 });
20284 };
20285 __decorate([
20286 context_1.Autowired('context'),
20287 __metadata("design:type", context_1.Context)
20288 ], CellEditorFactory.prototype, "context", void 0);
20289 __decorate([
20290 context_1.Autowired('componentResolver'),
20291 __metadata("design:type", componentResolver_1.ComponentResolver)
20292 ], CellEditorFactory.prototype, "componentResolver", void 0);
20293 __decorate([
20294 context_1.Autowired('gridOptionsWrapper'),
20295 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
20296 ], CellEditorFactory.prototype, "gridOptionsWrapper", void 0);
20297 __decorate([
20298 context_1.PostConstruct,
20299 __metadata("design:type", Function),
20300 __metadata("design:paramtypes", []),
20301 __metadata("design:returntype", void 0)
20302 ], CellEditorFactory.prototype, "init", null);
20303 CellEditorFactory = __decorate([
20304 context_1.Bean('cellEditorFactory')
20305 ], CellEditorFactory);
20306 return CellEditorFactory;
20307}());
20308exports.CellEditorFactory = CellEditorFactory;
20309
20310
20311/***/ }),
20312/* 57 */
20313/***/ (function(module, exports, __webpack_require__) {
20314
20315"use strict";
20316/**
20317 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
20318 * @version v18.1.2
20319 * @link http://www.ag-grid.com/
20320 * @license MIT
20321 */
20322
20323var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
20324 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20325 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
20326 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
20327 return c > 3 && r && Object.defineProperty(target, key, r), r;
20328};
20329var __metadata = (this && this.__metadata) || function (k, v) {
20330 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
20331};
20332Object.defineProperty(exports, "__esModule", { value: true });
20333var context_1 = __webpack_require__(0);
20334var utils_1 = __webpack_require__(1);
20335var gridOptionsWrapper_1 = __webpack_require__(2);
20336var eventService_1 = __webpack_require__(3);
20337var expressionService_1 = __webpack_require__(21);
20338var animateSlideCellRenderer_1 = __webpack_require__(72);
20339var animateShowChangeCellRenderer_1 = __webpack_require__(73);
20340var groupCellRenderer_1 = __webpack_require__(74);
20341var CellRendererFactory = (function () {
20342 function CellRendererFactory() {
20343 this.cellRendererMap = {};
20344 }
20345 CellRendererFactory_1 = CellRendererFactory;
20346 CellRendererFactory.prototype.init = function () {
20347 this.cellRendererMap[CellRendererFactory_1.ANIMATE_SLIDE] = animateSlideCellRenderer_1.AnimateSlideCellRenderer;
20348 this.cellRendererMap[CellRendererFactory_1.ANIMATE_SHOW_CHANGE] = animateShowChangeCellRenderer_1.AnimateShowChangeCellRenderer;
20349 this.cellRendererMap[CellRendererFactory_1.GROUP] = groupCellRenderer_1.GroupCellRenderer;
20350 // this.registerRenderersFromGridOptions();
20351 };
20352 // private registerRenderersFromGridOptions(): void {
20353 // let userProvidedCellRenderers = this.gridOptionsWrapper.getCellRenderers();
20354 // _.iterateObject(userProvidedCellRenderers, (key: string, cellRenderer: {new(): ICellRenderer} | ICellRendererFunc)=> {
20355 // this.addCellRenderer(key, cellRenderer);
20356 // });
20357 // }
20358 CellRendererFactory.prototype.addCellRenderer = function (key, cellRenderer) {
20359 this.cellRendererMap[key] = cellRenderer;
20360 };
20361 CellRendererFactory.prototype.getCellRenderer = function (key) {
20362 var result = this.cellRendererMap[key];
20363 if (utils_1.Utils.missing(result)) {
20364 console.warn('ag-Grid: unable to find cellRenderer for key ' + key);
20365 return null;
20366 }
20367 return result;
20368 };
20369 CellRendererFactory.ANIMATE_SLIDE = 'animateSlide';
20370 CellRendererFactory.ANIMATE_SHOW_CHANGE = 'animateShowChange';
20371 CellRendererFactory.GROUP = 'group';
20372 __decorate([
20373 context_1.Autowired('gridOptionsWrapper'),
20374 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
20375 ], CellRendererFactory.prototype, "gridOptionsWrapper", void 0);
20376 __decorate([
20377 context_1.Autowired('expressionService'),
20378 __metadata("design:type", expressionService_1.ExpressionService)
20379 ], CellRendererFactory.prototype, "expressionService", void 0);
20380 __decorate([
20381 context_1.Autowired('eventService'),
20382 __metadata("design:type", eventService_1.EventService)
20383 ], CellRendererFactory.prototype, "eventService", void 0);
20384 __decorate([
20385 context_1.PostConstruct,
20386 __metadata("design:type", Function),
20387 __metadata("design:paramtypes", []),
20388 __metadata("design:returntype", void 0)
20389 ], CellRendererFactory.prototype, "init", null);
20390 CellRendererFactory = CellRendererFactory_1 = __decorate([
20391 context_1.Bean('cellRendererFactory')
20392 ], CellRendererFactory);
20393 return CellRendererFactory;
20394 var CellRendererFactory_1;
20395}());
20396exports.CellRendererFactory = CellRendererFactory;
20397
20398
20399/***/ }),
20400/* 58 */
20401/***/ (function(module, exports, __webpack_require__) {
20402
20403"use strict";
20404/**
20405 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
20406 * @version v18.1.2
20407 * @link http://www.ag-grid.com/
20408 * @license MIT
20409 */
20410
20411var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
20412 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20413 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
20414 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
20415 return c > 3 && r && Object.defineProperty(target, key, r), r;
20416};
20417var __metadata = (this && this.__metadata) || function (k, v) {
20418 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
20419};
20420Object.defineProperty(exports, "__esModule", { value: true });
20421var context_1 = __webpack_require__(0);
20422var componentRecipes_1 = __webpack_require__(23);
20423var componentResolver_1 = __webpack_require__(29);
20424var utils_1 = __webpack_require__(1);
20425var gridOptionsWrapper_1 = __webpack_require__(2);
20426/** Class to use a cellRenderer. */
20427var CellRendererService = (function () {
20428 function CellRendererService() {
20429 }
20430 CellRendererService.prototype.useCellRenderer = function (target, eTarget, params) {
20431 var _this = this;
20432 var cellRendererPromise = this.componentRecipes.newCellRenderer(target, params);
20433 if (cellRendererPromise != null) {
20434 cellRendererPromise.then(function (cellRenderer) {
20435 if (cellRenderer == null) {
20436 eTarget.innerText = params.valueFormatted != null ? params.valueFormatted : params.value;
20437 }
20438 else {
20439 _this.bindToHtml(cellRendererPromise, eTarget);
20440 }
20441 });
20442 }
20443 else {
20444 eTarget.innerText = params.valueFormatted != null ? params.valueFormatted : params.value;
20445 }
20446 return cellRendererPromise;
20447 };
20448 CellRendererService.prototype.useFilterCellRenderer = function (target, eTarget, params) {
20449 var cellRendererPromise = this.componentRecipes.newCellRenderer(target.filterParams, params);
20450 if (cellRendererPromise != null) {
20451 this.bindToHtml(cellRendererPromise, eTarget);
20452 }
20453 else {
20454 if (params.valueFormatted == null && params.value == null) {
20455 var localeTextFunc = this.gridOptionsWrapper.getLocaleTextFunc();
20456 eTarget.innerText = '(' + localeTextFunc('blanks', 'Blanks') + ')';
20457 }
20458 else {
20459 eTarget.innerText = params.valueFormatted != null ? params.valueFormatted : params.value;
20460 }
20461 }
20462 return cellRendererPromise;
20463 };
20464 CellRendererService.prototype.useRichSelectCellRenderer = function (target, eTarget, params) {
20465 var cellRendererPromise = this.componentRecipes.newCellRenderer(target.cellEditorParams, params);
20466 if (cellRendererPromise != null) {
20467 this.bindToHtml(cellRendererPromise, eTarget);
20468 }
20469 else {
20470 eTarget.innerText = params.valueFormatted != null ? params.valueFormatted : params.value;
20471 }
20472 return cellRendererPromise;
20473 };
20474 CellRendererService.prototype.useInnerCellRenderer = function (target, originalColumn, eTarget, params) {
20475 var _this = this;
20476 var rendererToUsePromise = null;
20477 var componentToUse = this.componentResolver.getComponentToUse(target, "innerRenderer", null);
20478 if (componentToUse && componentToUse.component != null && componentToUse.source != componentResolver_1.ComponentSource.DEFAULT) {
20479 //THERE IS ONE INNER CELL RENDERER HARDCODED IN THE COLDEF FOR THIS GROUP COLUMN
20480 rendererToUsePromise = this.componentRecipes.newInnerCellRenderer(target, params);
20481 }
20482 else {
20483 var otherRenderer = this.componentResolver.getComponentToUse(originalColumn, "cellRenderer", null);
20484 if (otherRenderer && otherRenderer.source != componentResolver_1.ComponentSource.DEFAULT) {
20485 //Only if the original column is using an specific renderer, it it is a using a DEFAULT one
20486 //ignore it
20487 //THIS COMES FROM A COLUMN WHICH HAS BEEN GROUPED DYNAMICALLY, WE REUSE ITS RENDERER
20488 rendererToUsePromise = this.componentRecipes.newCellRenderer(originalColumn, params);
20489 }
20490 else if (otherRenderer && otherRenderer.source == componentResolver_1.ComponentSource.DEFAULT && (utils_1._.get(originalColumn, 'cellRendererParams.innerRenderer', null))) {
20491 //EDGE CASE - THIS COMES FROM A COLUMN WHICH HAS BEEN GROUPED DYNAMICALLY, THAT HAS AS RENDERER 'group'
20492 //AND HAS A INNER CELL RENDERER
20493 rendererToUsePromise = this.componentRecipes.newInnerCellRenderer(originalColumn.cellRendererParams, params);
20494 }
20495 else {
20496 //This forces the retrieval of the default plain cellRenderer that just renders the values.
20497 rendererToUsePromise = this.componentRecipes.newCellRenderer({}, params);
20498 }
20499 }
20500 if (rendererToUsePromise != null) {
20501 rendererToUsePromise.then(function (rendererToUse) {
20502 if (rendererToUse == null) {
20503 eTarget.innerText = params.valueFormatted != null ? params.valueFormatted : params.value;
20504 return;
20505 }
20506 _this.bindToHtml(rendererToUsePromise, eTarget);
20507 });
20508 }
20509 else {
20510 eTarget.innerText = params.valueFormatted != null ? params.valueFormatted : params.value;
20511 }
20512 return rendererToUsePromise;
20513 };
20514 CellRendererService.prototype.useFullWidthGroupRowInnerCellRenderer = function (eTarget, params) {
20515 var cellRendererPromise = this.componentRecipes.newFullWidthGroupRowInnerCellRenderer(params);
20516 if (cellRendererPromise != null) {
20517 this.bindToHtml(cellRendererPromise, eTarget);
20518 }
20519 else {
20520 eTarget.innerText = params.valueFormatted != null ? params.valueFormatted : params.value;
20521 }
20522 return cellRendererPromise;
20523 };
20524 CellRendererService.prototype.bindToHtml = function (cellRendererPromise, eTarget) {
20525 cellRendererPromise.then(function (cellRenderer) {
20526 var gui = cellRenderer.getGui();
20527 if (gui != null) {
20528 if (typeof gui == 'object') {
20529 eTarget.appendChild(gui);
20530 }
20531 else {
20532 eTarget.innerHTML = gui;
20533 }
20534 }
20535 });
20536 return cellRendererPromise;
20537 };
20538 __decorate([
20539 context_1.Autowired('componentRecipes'),
20540 __metadata("design:type", componentRecipes_1.ComponentRecipes)
20541 ], CellRendererService.prototype, "componentRecipes", void 0);
20542 __decorate([
20543 context_1.Autowired('componentResolver'),
20544 __metadata("design:type", componentResolver_1.ComponentResolver)
20545 ], CellRendererService.prototype, "componentResolver", void 0);
20546 __decorate([
20547 context_1.Autowired('gridOptionsWrapper'),
20548 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
20549 ], CellRendererService.prototype, "gridOptionsWrapper", void 0);
20550 CellRendererService = __decorate([
20551 context_1.Bean('cellRendererService')
20552 ], CellRendererService);
20553 return CellRendererService;
20554}());
20555exports.CellRendererService = CellRendererService;
20556
20557
20558/***/ }),
20559/* 59 */
20560/***/ (function(module, exports, __webpack_require__) {
20561
20562"use strict";
20563/**
20564 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
20565 * @version v18.1.2
20566 * @link http://www.ag-grid.com/
20567 * @license MIT
20568 */
20569
20570var __extends = (this && this.__extends) || (function () {
20571 var extendStatics = Object.setPrototypeOf ||
20572 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
20573 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
20574 return function (d, b) {
20575 extendStatics(d, b);
20576 function __() { this.constructor = d; }
20577 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
20578 };
20579})();
20580var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
20581 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20582 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
20583 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
20584 return c > 3 && r && Object.defineProperty(target, key, r), r;
20585};
20586var __metadata = (this && this.__metadata) || function (k, v) {
20587 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
20588};
20589Object.defineProperty(exports, "__esModule", { value: true });
20590var beanStub_1 = __webpack_require__(13);
20591var context_1 = __webpack_require__(0);
20592var eventService_1 = __webpack_require__(3);
20593var eventKeys_1 = __webpack_require__(27);
20594var utils_1 = __webpack_require__(1);
20595/**
20596 * This class solves the 'max height' problem, where the user might want to show more data than
20597 * the max div height actually allows.
20598 */
20599var HeightScaler = (function (_super) {
20600 __extends(HeightScaler, _super);
20601 function HeightScaler() {
20602 var _this = _super !== null && _super.apply(this, arguments) || this;
20603 // the scrollY position
20604 _this.scrollY = 0;
20605 // how tall the body is
20606 _this.uiBodyHeight = 0;
20607 return _this;
20608 }
20609 HeightScaler.prototype.postConstruct = function () {
20610 this.addDestroyableEventListener(this.eventService, eventKeys_1.Events.EVENT_BODY_HEIGHT_CHANGED, this.update.bind(this));
20611 this.scrollBarWidth = utils_1._.getScrollbarWidth();
20612 this.maxDivHeight = utils_1._.getMaxDivHeight();
20613 };
20614 HeightScaler.prototype.registerGridComp = function (gridPanel) {
20615 this.gridPanel = gridPanel;
20616 };
20617 HeightScaler.prototype.isScaling = function () {
20618 return this.scaling;
20619 };
20620 HeightScaler.prototype.getOffset = function () {
20621 return this.offset;
20622 };
20623 HeightScaler.prototype.update = function () {
20624 if (!this.scaling) {
20625 return;
20626 }
20627 var newScrollY = this.gridPanel.getVScrollPosition().top;
20628 var newBodyHeight = this.getUiBodyHeight();
20629 var atLeastOneChanged = newScrollY !== this.scrollY || newBodyHeight !== this.uiBodyHeight;
20630 if (atLeastOneChanged) {
20631 this.scrollY = newScrollY;
20632 this.uiBodyHeight = newBodyHeight;
20633 this.calculateOffset();
20634 }
20635 };
20636 HeightScaler.prototype.calculateOffset = function () {
20637 this.uiContainerHeight = this.maxDivHeight;
20638 this.pixelsToShave = this.modelHeight - this.uiContainerHeight;
20639 this.maxScrollY = this.uiContainerHeight - this.uiBodyHeight;
20640 var scrollPercent = this.scrollY / this.maxScrollY;
20641 this.setOffset(scrollPercent * this.pixelsToShave);
20642 };
20643 HeightScaler.prototype.clearOffset = function () {
20644 this.uiContainerHeight = this.modelHeight;
20645 this.pixelsToShave = 0;
20646 this.setOffset(0);
20647 };
20648 HeightScaler.prototype.setOffset = function (newOffset) {
20649 // because we are talking pixels, no point in confusing things with half numbers
20650 var newOffsetFloor = typeof newOffset === 'number' ? Math.floor(newOffset) : null;
20651 if (this.offset !== newOffsetFloor) {
20652 this.offset = newOffsetFloor;
20653 this.eventService.dispatchEvent({ type: eventKeys_1.Events.EVENT_HEIGHT_SCALE_CHANGED });
20654 }
20655 };
20656 HeightScaler.prototype.setModelHeight = function (modelHeight) {
20657 this.modelHeight = modelHeight;
20658 this.scaling = this.maxDivHeight > 0 && modelHeight > this.maxDivHeight;
20659 if (this.scaling) {
20660 this.calculateOffset();
20661 }
20662 else {
20663 this.clearOffset();
20664 }
20665 };
20666 HeightScaler.prototype.getUiContainerHeight = function () {
20667 return this.uiContainerHeight;
20668 };
20669 HeightScaler.prototype.getRealPixelPosition = function (modelPixel) {
20670 var uiPixel = modelPixel - this.offset;
20671 return uiPixel;
20672 };
20673 HeightScaler.prototype.getUiBodyHeight = function () {
20674 var pos = this.gridPanel.getVScrollPosition();
20675 var bodyHeight = pos.bottom - pos.top;
20676 if (this.gridPanel.isHorizontalScrollShowing()) {
20677 bodyHeight -= this.scrollBarWidth;
20678 }
20679 return bodyHeight;
20680 };
20681 HeightScaler.prototype.getScrollPositionForPixel = function (rowTop) {
20682 if (this.pixelsToShave <= 0) {
20683 return rowTop;
20684 }
20685 else {
20686 var modelMaxScroll = this.modelHeight - this.getUiBodyHeight();
20687 var scrollPercent = rowTop / modelMaxScroll;
20688 var scrollPixel = this.maxScrollY * scrollPercent;
20689 return scrollPixel;
20690 }
20691 };
20692 __decorate([
20693 context_1.Autowired('eventService'),
20694 __metadata("design:type", eventService_1.EventService)
20695 ], HeightScaler.prototype, "eventService", void 0);
20696 __decorate([
20697 context_1.PostConstruct,
20698 __metadata("design:type", Function),
20699 __metadata("design:paramtypes", []),
20700 __metadata("design:returntype", void 0)
20701 ], HeightScaler.prototype, "postConstruct", null);
20702 HeightScaler = __decorate([
20703 context_1.Bean('heightScaler')
20704 ], HeightScaler);
20705 return HeightScaler;
20706}(beanStub_1.BeanStub));
20707exports.HeightScaler = HeightScaler;
20708
20709
20710/***/ }),
20711/* 60 */
20712/***/ (function(module, exports, __webpack_require__) {
20713
20714"use strict";
20715/**
20716 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
20717 * @version v18.1.2
20718 * @link http://www.ag-grid.com/
20719 * @license MIT
20720 */
20721
20722var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
20723 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20724 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
20725 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
20726 return c > 3 && r && Object.defineProperty(target, key, r), r;
20727};
20728var __metadata = (this && this.__metadata) || function (k, v) {
20729 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
20730};
20731var __param = (this && this.__param) || function (paramIndex, decorator) {
20732 return function (target, key) { decorator(target, key, paramIndex); }
20733};
20734Object.defineProperty(exports, "__esModule", { value: true });
20735var gridOptionsWrapper_1 = __webpack_require__(2);
20736var columnController_1 = __webpack_require__(4);
20737var eventService_1 = __webpack_require__(3);
20738var logger_1 = __webpack_require__(12);
20739var events_1 = __webpack_require__(5);
20740var context_1 = __webpack_require__(0);
20741var context_2 = __webpack_require__(0);
20742var context_3 = __webpack_require__(0);
20743var context_4 = __webpack_require__(0);
20744var AlignedGridsService = (function () {
20745 function AlignedGridsService() {
20746 // flag to mark if we are consuming. to avoid cyclic events (ie other grid firing back to master
20747 // while processing a master event) we mark this if consuming an event, and if we are, then
20748 // we don't fire back any events.
20749 this.consuming = false;
20750 }
20751 AlignedGridsService.prototype.setBeans = function (loggerFactory) {
20752 this.logger = loggerFactory.create('AlignedGridsService');
20753 };
20754 AlignedGridsService.prototype.registerGridComp = function (gridPanel) {
20755 this.gridPanel = gridPanel;
20756 };
20757 AlignedGridsService.prototype.init = function () {
20758 this.eventService.addEventListener(events_1.Events.EVENT_COLUMN_MOVED, this.fireColumnEvent.bind(this));
20759 this.eventService.addEventListener(events_1.Events.EVENT_COLUMN_VISIBLE, this.fireColumnEvent.bind(this));
20760 this.eventService.addEventListener(events_1.Events.EVENT_COLUMN_PINNED, this.fireColumnEvent.bind(this));
20761 this.eventService.addEventListener(events_1.Events.EVENT_COLUMN_GROUP_OPENED, this.fireColumnEvent.bind(this));
20762 this.eventService.addEventListener(events_1.Events.EVENT_COLUMN_RESIZED, this.fireColumnEvent.bind(this));
20763 this.eventService.addEventListener(events_1.Events.EVENT_BODY_SCROLL, this.fireScrollEvent.bind(this));
20764 };
20765 // common logic across all the fire methods
20766 AlignedGridsService.prototype.fireEvent = function (callback) {
20767 // if we are already consuming, then we are acting on an event from a master,
20768 // so we don't cause a cyclic firing of events
20769 if (this.consuming) {
20770 return;
20771 }
20772 // iterate through the aligned grids, and pass each aligned grid service to the callback
20773 var otherGrids = this.gridOptionsWrapper.getAlignedGrids();
20774 if (otherGrids) {
20775 otherGrids.forEach(function (otherGridOptions) {
20776 if (otherGridOptions.api) {
20777 var alignedGridService = otherGridOptions.api.__getAlignedGridService();
20778 callback(alignedGridService);
20779 }
20780 });
20781 }
20782 };
20783 // common logic across all consume methods. very little common logic, however extracting
20784 // guarantees consistency across the methods.
20785 AlignedGridsService.prototype.onEvent = function (callback) {
20786 this.consuming = true;
20787 callback();
20788 this.consuming = false;
20789 };
20790 AlignedGridsService.prototype.fireColumnEvent = function (event) {
20791 this.fireEvent(function (alignedGridsService) {
20792 alignedGridsService.onColumnEvent(event);
20793 });
20794 };
20795 AlignedGridsService.prototype.fireScrollEvent = function (event) {
20796 if (event.direction !== 'horizontal') {
20797 return;
20798 }
20799 this.fireEvent(function (alignedGridsService) {
20800 alignedGridsService.onScrollEvent(event);
20801 });
20802 };
20803 AlignedGridsService.prototype.onScrollEvent = function (event) {
20804 var _this = this;
20805 this.onEvent(function () {
20806 _this.gridPanel.setHorizontalScrollPosition(event.left);
20807 });
20808 };
20809 AlignedGridsService.prototype.getMasterColumns = function (event) {
20810 var result = [];
20811 if (event.columns) {
20812 event.columns.forEach(function (column) {
20813 result.push(column);
20814 });
20815 }
20816 else if (event.column) {
20817 result.push(event.column);
20818 }
20819 return result;
20820 };
20821 AlignedGridsService.prototype.getColumnIds = function (event) {
20822 var result = [];
20823 if (event.columns) {
20824 event.columns.forEach(function (column) {
20825 result.push(column.getColId());
20826 });
20827 }
20828 else if (event.columns) {
20829 result.push(event.column.getColId());
20830 }
20831 return result;
20832 };
20833 AlignedGridsService.prototype.onColumnEvent = function (event) {
20834 var _this = this;
20835 this.onEvent(function () {
20836 switch (event.type) {
20837 case events_1.Events.EVENT_COLUMN_MOVED:
20838 case events_1.Events.EVENT_COLUMN_VISIBLE:
20839 case events_1.Events.EVENT_COLUMN_PINNED:
20840 case events_1.Events.EVENT_COLUMN_RESIZED:
20841 var colEvent = event;
20842 _this.processColumnEvent(colEvent);
20843 break;
20844 case events_1.Events.EVENT_COLUMN_GROUP_OPENED:
20845 var groupOpenedEvent = event;
20846 _this.processGroupOpenedEvent(groupOpenedEvent);
20847 break;
20848 case events_1.Events.EVENT_COLUMN_PIVOT_CHANGED:
20849 // we cannot support pivoting with aligned grids as the columns will be out of sync as the
20850 // grids will have columns created based on the row data of the grid.
20851 console.warn('ag-Grid: pivoting is not supported with aligned grids. ' +
20852 'You can only use one of these features at a time in a grid.');
20853 break;
20854 }
20855 });
20856 };
20857 AlignedGridsService.prototype.processGroupOpenedEvent = function (groupOpenedEvent) {
20858 // likewise for column group
20859 var masterColumnGroup = groupOpenedEvent.columnGroup;
20860 var otherColumnGroup;
20861 if (masterColumnGroup) {
20862 var groupId = masterColumnGroup.getGroupId();
20863 otherColumnGroup = this.columnController.getOriginalColumnGroup(groupId);
20864 }
20865 if (masterColumnGroup && !otherColumnGroup) {
20866 return;
20867 }
20868 this.logger.log('onColumnEvent-> processing ' + event + ' expanded = ' + masterColumnGroup.isExpanded());
20869 this.columnController.setColumnGroupOpened(otherColumnGroup, masterColumnGroup.isExpanded(), "alignedGridChanged");
20870 };
20871 AlignedGridsService.prototype.processColumnEvent = function (colEvent) {
20872 var _this = this;
20873 // the column in the event is from the master grid. need to
20874 // look up the equivalent from this (other) grid
20875 var masterColumn = colEvent.column;
20876 var otherColumn;
20877 if (masterColumn) {
20878 otherColumn = this.columnController.getPrimaryColumn(masterColumn.getColId());
20879 }
20880 // if event was with respect to a master column, that is not present in this
20881 // grid, then we ignore the event
20882 if (masterColumn && !otherColumn) {
20883 return;
20884 }
20885 // in time, all the methods below should use the column ids, it's a more generic way
20886 // of handling columns, and also allows for single or multi column events
20887 var columnIds = this.getColumnIds(colEvent);
20888 var masterColumns = this.getMasterColumns(colEvent);
20889 switch (colEvent.type) {
20890 case events_1.Events.EVENT_COLUMN_MOVED:
20891 var movedEvent = colEvent;
20892 this.logger.log('onColumnEvent-> processing ' + colEvent.type + ' toIndex = ' + movedEvent.toIndex);
20893 this.columnController.moveColumns(columnIds, movedEvent.toIndex, "alignedGridChanged");
20894 break;
20895 case events_1.Events.EVENT_COLUMN_VISIBLE:
20896 var visibleEvent = colEvent;
20897 this.logger.log('onColumnEvent-> processing ' + colEvent.type + ' visible = ' + visibleEvent.visible);
20898 this.columnController.setColumnsVisible(columnIds, visibleEvent.visible, "alignedGridChanged");
20899 break;
20900 case events_1.Events.EVENT_COLUMN_PINNED:
20901 var pinnedEvent = colEvent;
20902 this.logger.log('onColumnEvent-> processing ' + colEvent.type + ' pinned = ' + pinnedEvent.pinned);
20903 this.columnController.setColumnsPinned(columnIds, pinnedEvent.pinned, "alignedGridChanged");
20904 break;
20905 case events_1.Events.EVENT_COLUMN_RESIZED:
20906 var resizedEvent_1 = colEvent;
20907 masterColumns.forEach(function (masterColumn) {
20908 _this.logger.log('onColumnEvent-> processing ' + colEvent.type + ' actualWidth = ' + masterColumn.getActualWidth());
20909 _this.columnController.setColumnWidth(masterColumn.getColId(), masterColumn.getActualWidth(), false, resizedEvent_1.finished, "alignedGridChanged");
20910 });
20911 break;
20912 }
20913 };
20914 __decorate([
20915 context_3.Autowired('gridOptionsWrapper'),
20916 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
20917 ], AlignedGridsService.prototype, "gridOptionsWrapper", void 0);
20918 __decorate([
20919 context_3.Autowired('columnController'),
20920 __metadata("design:type", columnController_1.ColumnController)
20921 ], AlignedGridsService.prototype, "columnController", void 0);
20922 __decorate([
20923 context_3.Autowired('eventService'),
20924 __metadata("design:type", eventService_1.EventService)
20925 ], AlignedGridsService.prototype, "eventService", void 0);
20926 __decorate([
20927 __param(0, context_2.Qualifier('loggerFactory')),
20928 __metadata("design:type", Function),
20929 __metadata("design:paramtypes", [logger_1.LoggerFactory]),
20930 __metadata("design:returntype", void 0)
20931 ], AlignedGridsService.prototype, "setBeans", null);
20932 __decorate([
20933 context_4.PostConstruct,
20934 __metadata("design:type", Function),
20935 __metadata("design:paramtypes", []),
20936 __metadata("design:returntype", void 0)
20937 ], AlignedGridsService.prototype, "init", null);
20938 AlignedGridsService = __decorate([
20939 context_1.Bean('alignedGridsService')
20940 ], AlignedGridsService);
20941 return AlignedGridsService;
20942}());
20943exports.AlignedGridsService = AlignedGridsService;
20944
20945
20946/***/ }),
20947/* 61 */
20948/***/ (function(module, exports, __webpack_require__) {
20949
20950"use strict";
20951/**
20952 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
20953 * @version v18.1.2
20954 * @link http://www.ag-grid.com/
20955 * @license MIT
20956 */
20957
20958var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
20959 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
20960 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
20961 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
20962 return c > 3 && r && Object.defineProperty(target, key, r), r;
20963};
20964var __metadata = (this && this.__metadata) || function (k, v) {
20965 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
20966};
20967Object.defineProperty(exports, "__esModule", { value: true });
20968var gridOptionsWrapper_1 = __webpack_require__(2);
20969var context_1 = __webpack_require__(0);
20970var dragService_1 = __webpack_require__(42);
20971var HorizontalResizeService = (function () {
20972 function HorizontalResizeService() {
20973 }
20974 HorizontalResizeService.prototype.addResizeBar = function (params) {
20975 var _this = this;
20976 var dragSource = {
20977 dragStartPixels: 0,
20978 eElement: params.eResizeBar,
20979 onDragStart: this.onDragStart.bind(this, params),
20980 onDragStop: this.onDragStop.bind(this, params),
20981 onDragging: this.onDragging.bind(this, params)
20982 };
20983 this.dragService.addDragSource(dragSource, true);
20984 // we pass remove func back to the caller, so call can tell us when they
20985 // are finished, and then we remove the listener from the drag source
20986 var finishedWithResizeFunc = function () { return _this.dragService.removeDragSource(dragSource); };
20987 return finishedWithResizeFunc;
20988 };
20989 HorizontalResizeService.prototype.onDragStart = function (params, mouseEvent) {
20990 this.draggingStarted = true;
20991 this.dragStartX = mouseEvent.clientX;
20992 this.setResizeIcons();
20993 var shiftKey = mouseEvent instanceof MouseEvent ? mouseEvent.shiftKey === true : false;
20994 params.onResizeStart(shiftKey);
20995 };
20996 HorizontalResizeService.prototype.setResizeIcons = function () {
20997 this.oldBodyCursor = this.eGridDiv.style.cursor;
20998 this.oldMsUserSelect = this.eGridDiv.style.msUserSelect;
20999 this.oldWebkitUserSelect = this.eGridDiv.style.webkitUserSelect;
21000 // change the body cursor, so when drag moves out of the drag bar, the cursor is still 'resize' (or 'move'
21001 this.eGridDiv.style.cursor = 'col-resize';
21002 // we don't want text selection outside the grid (otherwise it looks weird as text highlights when we move)
21003 this.eGridDiv.style.msUserSelect = 'none';
21004 this.eGridDiv.style.webkitUserSelect = 'none';
21005 };
21006 HorizontalResizeService.prototype.onDragStop = function (params, mouseEvent) {
21007 params.onResizeEnd(this.resizeAmount);
21008 this.resetIcons();
21009 };
21010 HorizontalResizeService.prototype.resetIcons = function () {
21011 // we don't want text selection outside the grid (otherwise it looks weird as text highlights when we move)
21012 this.eGridDiv.style.cursor = this.oldBodyCursor;
21013 this.eGridDiv.style.msUserSelect = this.oldMsUserSelect;
21014 this.eGridDiv.style.webkitUserSelect = this.oldWebkitUserSelect;
21015 };
21016 HorizontalResizeService.prototype.onDragging = function (params, mouseEvent) {
21017 this.resizeAmount = mouseEvent.clientX - this.dragStartX;
21018 params.onResizing(this.resizeAmount);
21019 };
21020 __decorate([
21021 context_1.Autowired('gridOptionsWrapper'),
21022 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
21023 ], HorizontalResizeService.prototype, "gridOptionsWrapper", void 0);
21024 __decorate([
21025 context_1.Autowired('dragService'),
21026 __metadata("design:type", dragService_1.DragService)
21027 ], HorizontalResizeService.prototype, "dragService", void 0);
21028 __decorate([
21029 context_1.Autowired('eGridDiv'),
21030 __metadata("design:type", HTMLElement)
21031 ], HorizontalResizeService.prototype, "eGridDiv", void 0);
21032 HorizontalResizeService = __decorate([
21033 context_1.Bean('horizontalResizeService')
21034 ], HorizontalResizeService);
21035 return HorizontalResizeService;
21036}());
21037exports.HorizontalResizeService = HorizontalResizeService;
21038
21039
21040/***/ }),
21041/* 62 */
21042/***/ (function(module, exports, __webpack_require__) {
21043
21044"use strict";
21045/**
21046 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
21047 * @version v18.1.2
21048 * @link http://www.ag-grid.com/
21049 * @license MIT
21050 */
21051
21052var __extends = (this && this.__extends) || (function () {
21053 var extendStatics = Object.setPrototypeOf ||
21054 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
21055 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
21056 return function (d, b) {
21057 extendStatics(d, b);
21058 function __() { this.constructor = d; }
21059 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
21060 };
21061})();
21062var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
21063 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
21064 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21065 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
21066 return c > 3 && r && Object.defineProperty(target, key, r), r;
21067};
21068var __metadata = (this && this.__metadata) || function (k, v) {
21069 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
21070};
21071Object.defineProperty(exports, "__esModule", { value: true });
21072var component_1 = __webpack_require__(8);
21073var componentAnnotations_1 = __webpack_require__(11);
21074var utils_1 = __webpack_require__(1);
21075var context_1 = __webpack_require__(0);
21076var gridOptionsWrapper_1 = __webpack_require__(2);
21077var AgCheckbox = (function (_super) {
21078 __extends(AgCheckbox, _super);
21079 function AgCheckbox() {
21080 var _this = _super.call(this) || this;
21081 _this.selected = false;
21082 _this.readOnly = false;
21083 _this.passive = false;
21084 return _this;
21085 }
21086 AgCheckbox.prototype.preConstruct = function () {
21087 this.setTemplate(AgCheckbox.TEMPLATE);
21088 };
21089 AgCheckbox.prototype.postConstruct = function () {
21090 this.loadIcons();
21091 this.updateIcons();
21092 if (this.props.label) {
21093 this.eLabel.innerText = this.props.label;
21094 }
21095 };
21096 AgCheckbox.prototype.loadIcons = function () {
21097 utils_1.Utils.removeAllChildren(this.eChecked);
21098 utils_1.Utils.removeAllChildren(this.eUnchecked);
21099 utils_1.Utils.removeAllChildren(this.eIndeterminate);
21100 if (this.readOnly) {
21101 this.eChecked.appendChild(utils_1.Utils.createIconNoSpan('checkboxCheckedReadOnly', this.gridOptionsWrapper, null));
21102 this.eUnchecked.appendChild(utils_1.Utils.createIconNoSpan('checkboxUncheckedReadOnly', this.gridOptionsWrapper, null));
21103 this.eIndeterminate.appendChild(utils_1.Utils.createIconNoSpan('checkboxIndeterminateReadOnly', this.gridOptionsWrapper, null));
21104 }
21105 else {
21106 this.eChecked.appendChild(utils_1.Utils.createIconNoSpan('checkboxChecked', this.gridOptionsWrapper, null));
21107 this.eUnchecked.appendChild(utils_1.Utils.createIconNoSpan('checkboxUnchecked', this.gridOptionsWrapper, null));
21108 this.eIndeterminate.appendChild(utils_1.Utils.createIconNoSpan('checkboxIndeterminate', this.gridOptionsWrapper, null));
21109 }
21110 };
21111 AgCheckbox.prototype.onClick = function (event) {
21112 // if we don't set the path, then won't work in Edge, as once the <span> is removed from the dom,
21113 // it's not possible to calculate the path by following the parent's chain. in other browser (eg
21114 // chrome) there is event.path for this purpose, but missing in Edge.
21115 utils_1.Utils.addAgGridEventPath(event);
21116 if (!this.readOnly) {
21117 this.toggle();
21118 }
21119 };
21120 AgCheckbox.prototype.getNextValue = function () {
21121 if (this.selected === undefined) {
21122 return true;
21123 }
21124 else {
21125 return !this.selected;
21126 }
21127 };
21128 AgCheckbox.prototype.setPassive = function (passive) {
21129 this.passive = passive;
21130 };
21131 AgCheckbox.prototype.setReadOnly = function (readOnly) {
21132 this.readOnly = readOnly;
21133 this.loadIcons();
21134 };
21135 AgCheckbox.prototype.isReadOnly = function () {
21136 return this.readOnly;
21137 };
21138 AgCheckbox.prototype.isSelected = function () {
21139 return this.selected;
21140 };
21141 AgCheckbox.prototype.toggle = function () {
21142 var nextValue = this.getNextValue();
21143 if (this.passive) {
21144 var event_1 = {
21145 type: AgCheckbox.EVENT_CHANGED,
21146 selected: nextValue
21147 };
21148 this.dispatchEvent(event_1);
21149 }
21150 else {
21151 this.setSelected(nextValue);
21152 }
21153 };
21154 AgCheckbox.prototype.setSelected = function (selected) {
21155 if (this.selected === selected) {
21156 return;
21157 }
21158 if (selected === true) {
21159 this.selected = true;
21160 }
21161 else if (selected === false) {
21162 this.selected = false;
21163 }
21164 else {
21165 this.selected = undefined;
21166 }
21167 this.updateIcons();
21168 var event = {
21169 type: AgCheckbox.EVENT_CHANGED,
21170 selected: this.selected
21171 };
21172 this.dispatchEvent(event);
21173 };
21174 AgCheckbox.prototype.updateIcons = function () {
21175 utils_1.Utils.setVisible(this.eChecked, this.selected === true);
21176 utils_1.Utils.setVisible(this.eUnchecked, this.selected === false);
21177 utils_1.Utils.setVisible(this.eIndeterminate, this.selected === undefined);
21178 };
21179 AgCheckbox.EVENT_CHANGED = 'change';
21180 AgCheckbox.TEMPLATE = '<span class="ag-checkbox" role="presentation">' +
21181 ' <span class="ag-checkbox-checked" role="presentation"></span>' +
21182 ' <span class="ag-checkbox-unchecked" role="presentation"></span>' +
21183 ' <span class="ag-checkbox-indeterminate" role="presentation"></span>' +
21184 ' <span class="ag-checkbox-label" role="presentation"></span>' +
21185 '</span>';
21186 __decorate([
21187 context_1.Autowired('gridOptionsWrapper'),
21188 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
21189 ], AgCheckbox.prototype, "gridOptionsWrapper", void 0);
21190 __decorate([
21191 componentAnnotations_1.QuerySelector('.ag-checkbox-checked'),
21192 __metadata("design:type", HTMLElement)
21193 ], AgCheckbox.prototype, "eChecked", void 0);
21194 __decorate([
21195 componentAnnotations_1.QuerySelector('.ag-checkbox-unchecked'),
21196 __metadata("design:type", HTMLElement)
21197 ], AgCheckbox.prototype, "eUnchecked", void 0);
21198 __decorate([
21199 componentAnnotations_1.QuerySelector('.ag-checkbox-indeterminate'),
21200 __metadata("design:type", HTMLElement)
21201 ], AgCheckbox.prototype, "eIndeterminate", void 0);
21202 __decorate([
21203 componentAnnotations_1.QuerySelector('.ag-checkbox-label'),
21204 __metadata("design:type", HTMLElement)
21205 ], AgCheckbox.prototype, "eLabel", void 0);
21206 __decorate([
21207 context_1.PreConstruct,
21208 __metadata("design:type", Function),
21209 __metadata("design:paramtypes", []),
21210 __metadata("design:returntype", void 0)
21211 ], AgCheckbox.prototype, "preConstruct", null);
21212 __decorate([
21213 context_1.PostConstruct,
21214 __metadata("design:type", Function),
21215 __metadata("design:paramtypes", []),
21216 __metadata("design:returntype", void 0)
21217 ], AgCheckbox.prototype, "postConstruct", null);
21218 __decorate([
21219 componentAnnotations_1.Listener('click'),
21220 __metadata("design:type", Function),
21221 __metadata("design:paramtypes", [MouseEvent]),
21222 __metadata("design:returntype", void 0)
21223 ], AgCheckbox.prototype, "onClick", null);
21224 return AgCheckbox;
21225}(component_1.Component));
21226exports.AgCheckbox = AgCheckbox;
21227
21228
21229/***/ }),
21230/* 63 */
21231/***/ (function(module, exports, __webpack_require__) {
21232
21233"use strict";
21234/**
21235 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
21236 * @version v18.1.2
21237 * @link http://www.ag-grid.com/
21238 * @license MIT
21239 */
21240
21241var __extends = (this && this.__extends) || (function () {
21242 var extendStatics = Object.setPrototypeOf ||
21243 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
21244 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
21245 return function (d, b) {
21246 extendStatics(d, b);
21247 function __() { this.constructor = d; }
21248 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
21249 };
21250})();
21251Object.defineProperty(exports, "__esModule", { value: true });
21252var utils_1 = __webpack_require__(1);
21253var rowNode_1 = __webpack_require__(18);
21254var beanStub_1 = __webpack_require__(13);
21255var RowNodeBlock = (function (_super) {
21256 __extends(RowNodeBlock, _super);
21257 function RowNodeBlock(blockNumber, rowNodeCacheParams) {
21258 var _this = _super.call(this) || this;
21259 _this.version = 0;
21260 _this.state = RowNodeBlock.STATE_DIRTY;
21261 _this.rowNodeCacheParams = rowNodeCacheParams;
21262 _this.blockNumber = blockNumber;
21263 // we don't need to calculate these now, as the inputs don't change,
21264 // however it makes the code easier to read if we work them out up front
21265 _this.startRow = blockNumber * rowNodeCacheParams.blockSize;
21266 _this.endRow = _this.startRow + rowNodeCacheParams.blockSize;
21267 return _this;
21268 }
21269 RowNodeBlock.prototype.isAnyNodeOpen = function (rowCount) {
21270 var result = false;
21271 this.forEachNodeCallback(function (rowNode) {
21272 if (rowNode.expanded) {
21273 result = true;
21274 }
21275 }, rowCount);
21276 return result;
21277 };
21278 RowNodeBlock.prototype.forEachNodeCallback = function (callback, rowCount) {
21279 for (var rowIndex = this.startRow; rowIndex < this.endRow; rowIndex++) {
21280 // we check against rowCount as this page may be the last one, and if it is, then
21281 // the last rows are not part of the set
21282 if (rowIndex < rowCount) {
21283 var rowNode = this.getRowUsingLocalIndex(rowIndex);
21284 callback(rowNode, rowIndex);
21285 }
21286 }
21287 };
21288 RowNodeBlock.prototype.forEachNode = function (callback, sequence, rowCount, deep) {
21289 this.forEachNodeCallback(function (rowNode) {
21290 callback(rowNode, sequence.next());
21291 // this will only every happen for server side row model, as infinite
21292 // row model doesn't have groups
21293 if (deep && rowNode.childrenCache) {
21294 rowNode.childrenCache.forEachNodeDeep(callback, sequence);
21295 }
21296 }, rowCount);
21297 };
21298 RowNodeBlock.prototype.forEachNodeDeep = function (callback, sequence, rowCount) {
21299 this.forEachNode(callback, sequence, rowCount, true);
21300 };
21301 RowNodeBlock.prototype.forEachNodeShallow = function (callback, sequence, rowCount) {
21302 this.forEachNode(callback, sequence, rowCount, false);
21303 };
21304 RowNodeBlock.prototype.getVersion = function () {
21305 return this.version;
21306 };
21307 RowNodeBlock.prototype.getLastAccessed = function () {
21308 return this.lastAccessed;
21309 };
21310 RowNodeBlock.prototype.getRowUsingLocalIndex = function (rowIndex, dontTouchLastAccessed) {
21311 if (dontTouchLastAccessed === void 0) { dontTouchLastAccessed = false; }
21312 if (!dontTouchLastAccessed) {
21313 this.lastAccessed = this.rowNodeCacheParams.lastAccessedSequence.next();
21314 }
21315 var localIndex = rowIndex - this.startRow;
21316 return this.rowNodes[localIndex];
21317 };
21318 RowNodeBlock.prototype.init = function (beans) {
21319 this.beans = beans;
21320 this.createRowNodes();
21321 };
21322 RowNodeBlock.prototype.getStartRow = function () {
21323 return this.startRow;
21324 };
21325 RowNodeBlock.prototype.getEndRow = function () {
21326 return this.endRow;
21327 };
21328 RowNodeBlock.prototype.getBlockNumber = function () {
21329 return this.blockNumber;
21330 };
21331 RowNodeBlock.prototype.setDirty = function () {
21332 // in case any current loads in progress, this will have their results ignored
21333 this.version++;
21334 this.state = RowNodeBlock.STATE_DIRTY;
21335 };
21336 RowNodeBlock.prototype.setDirtyAndPurge = function () {
21337 this.setDirty();
21338 this.rowNodes.forEach(function (rowNode) {
21339 rowNode.setData(null);
21340 });
21341 };
21342 RowNodeBlock.prototype.getState = function () {
21343 return this.state;
21344 };
21345 RowNodeBlock.prototype.setRowNode = function (rowIndex, rowNode) {
21346 var localIndex = rowIndex - this.startRow;
21347 this.rowNodes[localIndex] = rowNode;
21348 };
21349 RowNodeBlock.prototype.setBlankRowNode = function (rowIndex) {
21350 var localIndex = rowIndex - this.startRow;
21351 var newRowNode = this.createBlankRowNode(rowIndex);
21352 this.rowNodes[localIndex] = newRowNode;
21353 return newRowNode;
21354 };
21355 RowNodeBlock.prototype.setNewData = function (rowIndex, dataItem) {
21356 var newRowNode = this.setBlankRowNode(rowIndex);
21357 this.setDataAndId(newRowNode, dataItem, this.startRow + rowIndex);
21358 return newRowNode;
21359 };
21360 RowNodeBlock.prototype.createBlankRowNode = function (rowIndex) {
21361 var rowNode = new rowNode_1.RowNode();
21362 this.beans.context.wireBean(rowNode);
21363 rowNode.setRowHeight(this.rowNodeCacheParams.rowHeight);
21364 return rowNode;
21365 };
21366 // creates empty row nodes, data is missing as not loaded yet
21367 RowNodeBlock.prototype.createRowNodes = function () {
21368 this.rowNodes = [];
21369 for (var i = 0; i < this.rowNodeCacheParams.blockSize; i++) {
21370 var rowIndex = this.startRow + i;
21371 var rowNode = this.createBlankRowNode(rowIndex);
21372 this.rowNodes.push(rowNode);
21373 }
21374 };
21375 RowNodeBlock.prototype.load = function () {
21376 this.state = RowNodeBlock.STATE_LOADING;
21377 this.loadFromDatasource();
21378 };
21379 RowNodeBlock.prototype.pageLoadFailed = function () {
21380 this.state = RowNodeBlock.STATE_FAILED;
21381 var event = {
21382 type: RowNodeBlock.EVENT_LOAD_COMPLETE,
21383 success: false,
21384 page: this,
21385 lastRow: null
21386 };
21387 this.dispatchEvent(event);
21388 };
21389 RowNodeBlock.prototype.populateWithRowData = function (rows) {
21390 var _this = this;
21391 var rowNodesToRefresh = [];
21392 this.rowNodes.forEach(function (rowNode, index) {
21393 var data = rows[index];
21394 if (rowNode.stub) {
21395 rowNodesToRefresh.push(rowNode);
21396 }
21397 _this.setDataAndId(rowNode, data, _this.startRow + index);
21398 });
21399 if (rowNodesToRefresh.length > 0) {
21400 this.beans.rowRenderer.redrawRows(rowNodesToRefresh);
21401 }
21402 };
21403 RowNodeBlock.prototype.destroy = function () {
21404 _super.prototype.destroy.call(this);
21405 this.rowNodes.forEach(function (rowNode) {
21406 if (rowNode.childrenCache) {
21407 rowNode.childrenCache.destroy();
21408 rowNode.childrenCache = null;
21409 }
21410 // this is needed, so row render knows to fade out the row, otherwise it
21411 // see's row top is present, and thinks the row should be shown. maybe
21412 // rowNode should have a flag on whether it is visible???
21413 rowNode.clearRowTop();
21414 });
21415 };
21416 RowNodeBlock.prototype.pageLoaded = function (version, rows, lastRow) {
21417 // we need to check the version, in case there was an old request
21418 // from the server that was sent before we refreshed the cache,
21419 // if the load was done as a result of a cache refresh
21420 if (version === this.version) {
21421 this.state = RowNodeBlock.STATE_LOADED;
21422 this.populateWithRowData(rows);
21423 }
21424 lastRow = utils_1.Utils.cleanNumber(lastRow);
21425 // check here if lastrow should be set
21426 var event = {
21427 type: RowNodeBlock.EVENT_LOAD_COMPLETE,
21428 success: true,
21429 page: this,
21430 lastRow: lastRow
21431 };
21432 this.dispatchEvent(event);
21433 };
21434 RowNodeBlock.EVENT_LOAD_COMPLETE = 'loadComplete';
21435 RowNodeBlock.STATE_DIRTY = 'dirty';
21436 RowNodeBlock.STATE_LOADING = 'loading';
21437 RowNodeBlock.STATE_LOADED = 'loaded';
21438 RowNodeBlock.STATE_FAILED = 'failed';
21439 return RowNodeBlock;
21440}(beanStub_1.BeanStub));
21441exports.RowNodeBlock = RowNodeBlock;
21442
21443
21444/***/ }),
21445/* 64 */
21446/***/ (function(module, exports, __webpack_require__) {
21447
21448"use strict";
21449/**
21450 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
21451 * @version v18.1.2
21452 * @link http://www.ag-grid.com/
21453 * @license MIT
21454 */
21455
21456Object.defineProperty(exports, "__esModule", { value: true });
21457var events_1 = __webpack_require__(5);
21458var propertyKeys_1 = __webpack_require__(91);
21459var utils_1 = __webpack_require__(1);
21460var gridOptionsWrapper_1 = __webpack_require__(2);
21461var ComponentUtil = (function () {
21462 function ComponentUtil() {
21463 }
21464 ComponentUtil.getEventCallbacks = function () {
21465 if (!ComponentUtil.EVENT_CALLBACKS) {
21466 ComponentUtil.EVENT_CALLBACKS = [];
21467 ComponentUtil.EVENT_CALLBACKS_NO_PREFIX = [];
21468 ComponentUtil.EVENTS.forEach(function (eventName) {
21469 ComponentUtil.EVENT_CALLBACKS.push(ComponentUtil.getCallbackForEvent(eventName));
21470 ComponentUtil.EVENT_CALLBACKS_NO_PREFIX.push(eventName);
21471 });
21472 }
21473 return ComponentUtil.EVENT_CALLBACKS;
21474 };
21475 ComponentUtil.copyAttributesToGridOptions = function (gridOptions, component, skipEventDeprecationCheck) {
21476 if (skipEventDeprecationCheck === void 0) { skipEventDeprecationCheck = false; }
21477 checkForDeprecated(component);
21478 // create empty grid options if none were passed
21479 if (typeof gridOptions !== 'object') {
21480 gridOptions = {};
21481 }
21482 // to allow array style lookup in TypeScript, take type away from 'this' and 'gridOptions'
21483 var pGridOptions = gridOptions;
21484 // add in all the simple properties
21485 ComponentUtil.ARRAY_PROPERTIES
21486 .concat(ComponentUtil.STRING_PROPERTIES)
21487 .concat(ComponentUtil.OBJECT_PROPERTIES)
21488 .concat(ComponentUtil.FUNCTION_PROPERTIES)
21489 .forEach(function (key) {
21490 if (typeof component[key] !== 'undefined') {
21491 pGridOptions[key] = component[key];
21492 }
21493 });
21494 ComponentUtil.BOOLEAN_PROPERTIES.forEach(function (key) {
21495 if (typeof component[key] !== 'undefined') {
21496 pGridOptions[key] = ComponentUtil.toBoolean(component[key]);
21497 }
21498 });
21499 ComponentUtil.NUMBER_PROPERTIES.forEach(function (key) {
21500 if (typeof component[key] !== 'undefined') {
21501 pGridOptions[key] = ComponentUtil.toNumber(component[key]);
21502 }
21503 });
21504 ComponentUtil.getEventCallbacks().forEach(function (funcName) {
21505 if (typeof component[funcName] !== 'undefined') {
21506 pGridOptions[funcName] = component[funcName];
21507 }
21508 });
21509 // purely for event deprecation checks (for frameworks - wouldn't apply for non-fw versions)
21510 if (!skipEventDeprecationCheck) {
21511 ComponentUtil.EVENT_CALLBACKS_NO_PREFIX.forEach(function (funcName) {
21512 // react uses onXXX...not sure why this is diff to the other frameworks
21513 var onMethodName = ComponentUtil.getCallbackForEvent(funcName);
21514 if (typeof component[funcName] !== 'undefined' ||
21515 typeof component[onMethodName] !== 'undefined') {
21516 gridOptionsWrapper_1.GridOptionsWrapper.checkEventDeprecation(funcName);
21517 }
21518 });
21519 }
21520 return gridOptions;
21521 };
21522 ComponentUtil.getCallbackForEvent = function (eventName) {
21523 if (!eventName || eventName.length < 2) {
21524 return eventName;
21525 }
21526 else {
21527 return 'on' + eventName[0].toUpperCase() + eventName.substr(1);
21528 }
21529 };
21530 ComponentUtil.processOnChange = function (changes, gridOptions, api, columnApi) {
21531 if (!changes) {
21532 return;
21533 }
21534 checkForDeprecated(changes);
21535 // to allow array style lookup in TypeScript, take type away from 'this' and 'gridOptions'
21536 var pGridOptions = gridOptions;
21537 // check if any change for the simple types, and if so, then just copy in the new value
21538 ComponentUtil.ARRAY_PROPERTIES
21539 .concat(ComponentUtil.OBJECT_PROPERTIES)
21540 .concat(ComponentUtil.STRING_PROPERTIES)
21541 .forEach(function (key) {
21542 if (changes[key]) {
21543 pGridOptions[key] = changes[key].currentValue;
21544 }
21545 });
21546 ComponentUtil.BOOLEAN_PROPERTIES.forEach(function (key) {
21547 if (changes[key]) {
21548 pGridOptions[key] = ComponentUtil.toBoolean(changes[key].currentValue);
21549 }
21550 });
21551 ComponentUtil.NUMBER_PROPERTIES.forEach(function (key) {
21552 if (changes[key]) {
21553 pGridOptions[key] = ComponentUtil.toNumber(changes[key].currentValue);
21554 }
21555 });
21556 ComponentUtil.getEventCallbacks().forEach(function (funcName) {
21557 if (changes[funcName]) {
21558 pGridOptions[funcName] = changes[funcName].currentValue;
21559 }
21560 });
21561 if (changes.showToolPanel) {
21562 api.showToolPanel(ComponentUtil.toBoolean(changes.showToolPanel.currentValue));
21563 }
21564 if (changes.quickFilterText) {
21565 api.setQuickFilter(changes.quickFilterText.currentValue);
21566 }
21567 if (changes.rowData) {
21568 api.setRowData(changes.rowData.currentValue);
21569 }
21570 if (changes.pinnedTopRowData) {
21571 api.setPinnedTopRowData(changes.pinnedTopRowData.currentValue);
21572 }
21573 if (changes.pinnedBottomRowData) {
21574 api.setPinnedBottomRowData(changes.pinnedBottomRowData.currentValue);
21575 }
21576 if (changes.columnDefs) {
21577 api.setColumnDefs(changes.columnDefs.currentValue, "gridOptionsChanged");
21578 }
21579 if (changes.datasource) {
21580 api.setDatasource(changes.datasource.currentValue);
21581 }
21582 if (changes.headerHeight) {
21583 api.setHeaderHeight(ComponentUtil.toNumber(changes.headerHeight.currentValue));
21584 }
21585 if (changes.paginationPageSize) {
21586 api.paginationSetPageSize(ComponentUtil.toNumber(changes.paginationPageSize.currentValue));
21587 }
21588 if (changes.pivotMode) {
21589 columnApi.setPivotMode(ComponentUtil.toBoolean(changes.pivotMode.currentValue));
21590 }
21591 if (changes.groupRemoveSingleChildren) {
21592 api.setGroupRemoveSingleChildren(ComponentUtil.toBoolean(changes.groupRemoveSingleChildren.currentValue));
21593 }
21594 if (changes.suppressRowDrag) {
21595 api.setSuppressRowDrag(ComponentUtil.toBoolean(changes.suppressRowDrag.currentValue));
21596 }
21597 if (changes.gridAutoHeight) {
21598 api.setGridAutoHeight(ComponentUtil.toBoolean(changes.gridAutoHeight.currentValue));
21599 }
21600 if (changes.suppressClipboardPaste) {
21601 api.setSuppressClipboardPaste(ComponentUtil.toBoolean(changes.suppressClipboardPaste.currentValue));
21602 }
21603 // copy changes into an event for dispatch
21604 var event = {
21605 type: events_1.Events.EVENT_COMPONENT_STATE_CHANGED,
21606 api: gridOptions.api,
21607 columnApi: gridOptions.columnApi
21608 };
21609 utils_1.Utils.iterateObject(changes, function (key, value) {
21610 event[key] = value;
21611 });
21612 api.dispatchEvent(event);
21613 };
21614 ComponentUtil.toBoolean = function (value) {
21615 if (typeof value === 'boolean') {
21616 return value;
21617 }
21618 else if (typeof value === 'string') {
21619 // for boolean, compare to empty String to allow attributes appearing with
21620 // not value to be treated as 'true'
21621 return value.toUpperCase() === 'TRUE' || value == '';
21622 }
21623 else {
21624 return false;
21625 }
21626 };
21627 ComponentUtil.toNumber = function (value) {
21628 if (typeof value === 'number') {
21629 return value;
21630 }
21631 else if (typeof value === 'string') {
21632 return Number(value);
21633 }
21634 else {
21635 return undefined;
21636 }
21637 };
21638 // all the events are populated in here AFTER this class (at the bottom of the file).
21639 ComponentUtil.EVENTS = [];
21640 ComponentUtil.STRING_PROPERTIES = propertyKeys_1.PropertyKeys.STRING_PROPERTIES;
21641 ComponentUtil.OBJECT_PROPERTIES = propertyKeys_1.PropertyKeys.OBJECT_PROPERTIES;
21642 ComponentUtil.ARRAY_PROPERTIES = propertyKeys_1.PropertyKeys.ARRAY_PROPERTIES;
21643 ComponentUtil.NUMBER_PROPERTIES = propertyKeys_1.PropertyKeys.NUMBER_PROPERTIES;
21644 ComponentUtil.BOOLEAN_PROPERTIES = propertyKeys_1.PropertyKeys.BOOLEAN_PROPERTIES;
21645 ComponentUtil.FUNCTION_PROPERTIES = propertyKeys_1.PropertyKeys.FUNCTION_PROPERTIES;
21646 ComponentUtil.ALL_PROPERTIES = propertyKeys_1.PropertyKeys.ALL_PROPERTIES;
21647 return ComponentUtil;
21648}());
21649exports.ComponentUtil = ComponentUtil;
21650utils_1.Utils.iterateObject(events_1.Events, function (key, value) {
21651 ComponentUtil.EVENTS.push(value);
21652});
21653function checkForDeprecated(changes) {
21654 if (changes.rowDeselected || changes.onRowDeselected) {
21655 console.warn('ag-grid: as of v3.4 rowDeselected no longer exists. Please check the docs.');
21656 }
21657}
21658
21659
21660/***/ }),
21661/* 65 */
21662/***/ (function(module, exports, __webpack_require__) {
21663
21664"use strict";
21665/**
21666 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
21667 * @version v18.1.2
21668 * @link http://www.ag-grid.com/
21669 * @license MIT
21670 */
21671
21672var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
21673 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
21674 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
21675 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
21676 return c > 3 && r && Object.defineProperty(target, key, r), r;
21677};
21678var __metadata = (this && this.__metadata) || function (k, v) {
21679 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
21680};
21681Object.defineProperty(exports, "__esModule", { value: true });
21682var context_1 = __webpack_require__(0);
21683var columnController_1 = __webpack_require__(4);
21684var constants_1 = __webpack_require__(9);
21685var utils_1 = __webpack_require__(1);
21686var selectionController_1 = __webpack_require__(19);
21687var gridOptionsWrapper_1 = __webpack_require__(2);
21688var displayedGroupCreator_1 = __webpack_require__(50);
21689var balancedColumnTreeBuilder_1 = __webpack_require__(40);
21690var groupInstanceIdCreator_1 = __webpack_require__(85);
21691var columnGroup_1 = __webpack_require__(28);
21692var pinnedRowModel_1 = __webpack_require__(32);
21693var BaseGridSerializingSession = (function () {
21694 function BaseGridSerializingSession(columnController, valueService, gridOptionsWrapper, processCellCallback, processHeaderCallback, cellAndHeaderEscaper) {
21695 this.columnController = columnController;
21696 this.valueService = valueService;
21697 this.gridOptionsWrapper = gridOptionsWrapper;
21698 this.processCellCallback = processCellCallback;
21699 this.processHeaderCallback = processHeaderCallback;
21700 this.cellAndHeaderEscaper = cellAndHeaderEscaper;
21701 }
21702 BaseGridSerializingSession.prototype.extractHeaderValue = function (column) {
21703 var nameForCol = this.getHeaderName(this.processHeaderCallback, column);
21704 if (nameForCol === null || nameForCol === undefined) {
21705 nameForCol = '';
21706 }
21707 return this.cellAndHeaderEscaper ? this.cellAndHeaderEscaper(nameForCol) : nameForCol;
21708 };
21709 BaseGridSerializingSession.prototype.extractRowCellValue = function (column, index, type, node) {
21710 var isRowGrouping = this.columnController.getRowGroupColumns().length > 0;
21711 var valueForCell;
21712 if (node.group && isRowGrouping && index === 0) {
21713 valueForCell = this.createValueForGroupNode(node);
21714 }
21715 else {
21716 valueForCell = this.valueService.getValue(column, node);
21717 }
21718 valueForCell = this.processCell(node, column, valueForCell, this.processCellCallback, type);
21719 if (valueForCell === null || valueForCell === undefined) {
21720 valueForCell = '';
21721 }
21722 return this.cellAndHeaderEscaper ? this.cellAndHeaderEscaper(valueForCell) : valueForCell;
21723 };
21724 BaseGridSerializingSession.prototype.getHeaderName = function (callback, column) {
21725 if (callback) {
21726 return callback({
21727 column: column,
21728 api: this.gridOptionsWrapper.getApi(),
21729 columnApi: this.gridOptionsWrapper.getColumnApi(),
21730 context: this.gridOptionsWrapper.getContext()
21731 });
21732 }
21733 else {
21734 return this.columnController.getDisplayNameForColumn(column, 'csv', true);
21735 }
21736 };
21737 BaseGridSerializingSession.prototype.createValueForGroupNode = function (node) {
21738 var keys = [node.key];
21739 while (node.parent) {
21740 node = node.parent;
21741 keys.push(node.key);
21742 }
21743 return keys.reverse().join(' -> ');
21744 };
21745 BaseGridSerializingSession.prototype.processCell = function (rowNode, column, value, processCellCallback, type) {
21746 if (processCellCallback) {
21747 return processCellCallback({
21748 column: column,
21749 node: rowNode,
21750 value: value,
21751 api: this.gridOptionsWrapper.getApi(),
21752 columnApi: this.gridOptionsWrapper.getColumnApi(),
21753 context: this.gridOptionsWrapper.getContext(),
21754 type: type
21755 });
21756 }
21757 else {
21758 return value;
21759 }
21760 };
21761 return BaseGridSerializingSession;
21762}());
21763exports.BaseGridSerializingSession = BaseGridSerializingSession;
21764var GridSerializer = (function () {
21765 function GridSerializer() {
21766 }
21767 GridSerializer.prototype.serialize = function (gridSerializingSession, params) {
21768 var dontSkipRows = function () { return false; };
21769 var skipGroups = params && params.skipGroups;
21770 var skipHeader = params && params.skipHeader;
21771 var columnGroups = params && params.columnGroups;
21772 var skipFooters = params && params.skipFooters;
21773 var skipPinnedTop = params && params.skipPinnedTop;
21774 var skipPinnedBottom = params && params.skipPinnedBottom;
21775 var includeCustomHeader = params && params.customHeader;
21776 var includeCustomFooter = params && params.customFooter;
21777 var allColumns = params && params.allColumns;
21778 var onlySelected = params && params.onlySelected;
21779 var columnKeys = params && params.columnKeys;
21780 var onlySelectedAllPages = params && params.onlySelectedAllPages;
21781 var rowSkipper = (params && params.shouldRowBeSkipped) || dontSkipRows;
21782 var api = this.gridOptionsWrapper.getApi();
21783 var context = this.gridOptionsWrapper.getContext();
21784 // when in pivot mode, we always render cols on screen, never 'all columns'
21785 var isPivotMode = this.columnController.isPivotMode();
21786 var rowModelNormal = this.rowModel.getType() === constants_1.Constants.ROW_MODEL_TYPE_CLIENT_SIDE;
21787 var onlySelectedNonStandardModel = !rowModelNormal && onlySelected;
21788 var columnsToExport;
21789 if (utils_1.Utils.existsAndNotEmpty(columnKeys)) {
21790 columnsToExport = this.columnController.getGridColumns(columnKeys);
21791 }
21792 else if (allColumns && !isPivotMode) {
21793 columnsToExport = this.columnController.getAllPrimaryColumns();
21794 }
21795 else {
21796 columnsToExport = this.columnController.getAllDisplayedColumns();
21797 }
21798 if (!columnsToExport || columnsToExport.length === 0) {
21799 return '';
21800 }
21801 gridSerializingSession.prepare(columnsToExport);
21802 if (includeCustomHeader) {
21803 gridSerializingSession.addCustomHeader(params.customHeader);
21804 }
21805 // first pass, put in the header names of the cols
21806 if (columnGroups) {
21807 var groupInstanceIdCreator = new groupInstanceIdCreator_1.GroupInstanceIdCreator();
21808 var displayedGroups = this.displayedGroupCreator.createDisplayedGroups(columnsToExport, this.columnController.getGridBalancedTree(), groupInstanceIdCreator);
21809 this.recursivelyAddHeaderGroups(displayedGroups, gridSerializingSession);
21810 }
21811 if (!skipHeader) {
21812 var gridRowIterator_1 = gridSerializingSession.onNewHeaderRow();
21813 columnsToExport.forEach(function (column, index) {
21814 gridRowIterator_1.onColumn(column, index, null);
21815 });
21816 }
21817 this.pinnedRowModel.forEachPinnedTopRow(processRow);
21818 if (isPivotMode) {
21819 if (this.rowModel.forEachPivotNode) {
21820 this.rowModel.forEachPivotNode(processRow);
21821 }
21822 else {
21823 //Must be enterprise, so we can just loop through all the nodes
21824 this.rowModel.forEachNode(processRow);
21825 }
21826 }
21827 else {
21828 // onlySelectedAllPages: user doing pagination and wants selected items from
21829 // other pages, so cannot use the standard row model as it won't have rows from
21830 // other pages.
21831 // onlySelectedNonStandardModel: if user wants selected in non standard row model
21832 // (eg viewport) then again rowmodel cannot be used, so need to use selected instead.
21833 if (onlySelectedAllPages || onlySelectedNonStandardModel) {
21834 var selectedNodes = this.selectionController.getSelectedNodes();
21835 selectedNodes.forEach(function (node) {
21836 processRow(node);
21837 });
21838 }
21839 else {
21840 // here is everything else - including standard row model and selected. we don't use
21841 // the selection model even when just using selected, so that the result is the order
21842 // of the rows appearing on the screen.
21843 if (rowModelNormal) {
21844 this.rowModel.forEachNodeAfterFilterAndSort(processRow);
21845 }
21846 else {
21847 this.rowModel.forEachNode(processRow);
21848 }
21849 }
21850 }
21851 this.pinnedRowModel.forEachPinnedBottomRow(processRow);
21852 if (includeCustomFooter) {
21853 gridSerializingSession.addCustomFooter(params.customFooter);
21854 }
21855 function processRow(node) {
21856 if (skipGroups && node.group) {
21857 return;
21858 }
21859 if (skipFooters && node.footer) {
21860 return;
21861 }
21862 if (onlySelected && !node.isSelected()) {
21863 return;
21864 }
21865 if (skipPinnedTop && node.rowPinned === 'top') {
21866 return;
21867 }
21868 if (skipPinnedBottom && node.rowPinned === 'bottom') {
21869 return;
21870 }
21871 // if we are in pivotMode, then the grid will show the root node only
21872 // if it's not a leaf group
21873 var nodeIsRootNode = node.level === -1;
21874 if (nodeIsRootNode && !node.leafGroup) {
21875 return;
21876 }
21877 var shouldRowBeSkipped = rowSkipper({
21878 node: node,
21879 api: api,
21880 context: context
21881 });
21882 if (shouldRowBeSkipped)
21883 return;
21884 var rowAccumulator = gridSerializingSession.onNewBodyRow();
21885 columnsToExport.forEach(function (column, index) {
21886 rowAccumulator.onColumn(column, index, node);
21887 });
21888 }
21889 return gridSerializingSession.parse();
21890 };
21891 GridSerializer.prototype.recursivelyAddHeaderGroups = function (displayedGroups, gridSerializingSession) {
21892 var directChildrenHeaderGroups = [];
21893 displayedGroups.forEach(function (columnGroupChild) {
21894 var columnGroup = columnGroupChild;
21895 if (!columnGroup.getChildren)
21896 return;
21897 columnGroup.getChildren().forEach(function (it) { return directChildrenHeaderGroups.push(it); });
21898 });
21899 if (displayedGroups.length > 0 && displayedGroups[0] instanceof columnGroup_1.ColumnGroup) {
21900 this.doAddHeaderHeader(gridSerializingSession, displayedGroups);
21901 }
21902 if (directChildrenHeaderGroups && directChildrenHeaderGroups.length > 0) {
21903 this.recursivelyAddHeaderGroups(directChildrenHeaderGroups, gridSerializingSession);
21904 }
21905 };
21906 GridSerializer.prototype.doAddHeaderHeader = function (gridSerializingSession, displayedGroups) {
21907 var _this = this;
21908 var gridRowIterator = gridSerializingSession.onNewHeaderGroupingRow();
21909 var columnIndex = 0;
21910 displayedGroups.forEach(function (columnGroupChild) {
21911 var columnGroup = columnGroupChild;
21912 var colDef = columnGroup.getDefinition();
21913 var columnName = _this.columnController.getDisplayNameForColumnGroup(columnGroup, 'header');
21914 gridRowIterator.onColumn(columnName, columnIndex++, columnGroup.getLeafColumns().length - 1);
21915 });
21916 };
21917 __decorate([
21918 context_1.Autowired('displayedGroupCreator'),
21919 __metadata("design:type", displayedGroupCreator_1.DisplayedGroupCreator)
21920 ], GridSerializer.prototype, "displayedGroupCreator", void 0);
21921 __decorate([
21922 context_1.Autowired('columnController'),
21923 __metadata("design:type", columnController_1.ColumnController)
21924 ], GridSerializer.prototype, "columnController", void 0);
21925 __decorate([
21926 context_1.Autowired('rowModel'),
21927 __metadata("design:type", Object)
21928 ], GridSerializer.prototype, "rowModel", void 0);
21929 __decorate([
21930 context_1.Autowired('pinnedRowModel'),
21931 __metadata("design:type", pinnedRowModel_1.PinnedRowModel)
21932 ], GridSerializer.prototype, "pinnedRowModel", void 0);
21933 __decorate([
21934 context_1.Autowired('selectionController'),
21935 __metadata("design:type", selectionController_1.SelectionController)
21936 ], GridSerializer.prototype, "selectionController", void 0);
21937 __decorate([
21938 context_1.Autowired('balancedColumnTreeBuilder'),
21939 __metadata("design:type", balancedColumnTreeBuilder_1.BalancedColumnTreeBuilder)
21940 ], GridSerializer.prototype, "balancedColumnTreeBuilder", void 0);
21941 __decorate([
21942 context_1.Autowired('gridOptionsWrapper'),
21943 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
21944 ], GridSerializer.prototype, "gridOptionsWrapper", void 0);
21945 GridSerializer = __decorate([
21946 context_1.Bean("gridSerializer")
21947 ], GridSerializer);
21948 return GridSerializer;
21949}());
21950exports.GridSerializer = GridSerializer;
21951var RowType;
21952(function (RowType) {
21953 RowType[RowType["HEADER_GROUPING"] = 0] = "HEADER_GROUPING";
21954 RowType[RowType["HEADER"] = 1] = "HEADER";
21955 RowType[RowType["BODY"] = 2] = "BODY";
21956})(RowType = exports.RowType || (exports.RowType = {}));
21957
21958
21959/***/ }),
21960/* 66 */
21961/***/ (function(module, exports, __webpack_require__) {
21962
21963"use strict";
21964/**
21965 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
21966 * @version v18.1.2
21967 * @link http://www.ag-grid.com/
21968 * @license MIT
21969 */
21970
21971Object.defineProperty(exports, "__esModule", { value: true });
21972var constants_1 = __webpack_require__(9);
21973var utils_1 = __webpack_require__(1);
21974var gridCell_1 = __webpack_require__(25);
21975var GridRow = (function () {
21976 function GridRow(rowIndex, floating) {
21977 this.rowIndex = rowIndex;
21978 this.floating = utils_1.Utils.makeNull(floating);
21979 }
21980 GridRow.prototype.isFloatingTop = function () {
21981 return this.floating === constants_1.Constants.PINNED_TOP;
21982 };
21983 GridRow.prototype.isFloatingBottom = function () {
21984 return this.floating === constants_1.Constants.PINNED_BOTTOM;
21985 };
21986 GridRow.prototype.isNotFloating = function () {
21987 return !this.isFloatingBottom() && !this.isFloatingTop();
21988 };
21989 GridRow.prototype.equals = function (otherSelection) {
21990 return this.rowIndex === otherSelection.rowIndex
21991 && this.floating === otherSelection.floating;
21992 };
21993 GridRow.prototype.toString = function () {
21994 return "rowIndex = " + this.rowIndex + ", floating = " + this.floating;
21995 };
21996 GridRow.prototype.getGridCell = function (column) {
21997 var gridCellDef = { rowIndex: this.rowIndex, floating: this.floating, column: column };
21998 return new gridCell_1.GridCell(gridCellDef);
21999 };
22000 // tests if this row selection is before the other row selection
22001 GridRow.prototype.before = function (otherSelection) {
22002 var otherFloating = otherSelection.floating;
22003 switch (this.floating) {
22004 case constants_1.Constants.PINNED_TOP:
22005 // we we are floating top, and other isn't, then we are always before
22006 if (otherFloating !== constants_1.Constants.PINNED_TOP) {
22007 return true;
22008 }
22009 break;
22010 case constants_1.Constants.PINNED_BOTTOM:
22011 // if we are floating bottom, and the other isn't, then we are never before
22012 if (otherFloating !== constants_1.Constants.PINNED_BOTTOM) {
22013 return false;
22014 }
22015 break;
22016 default:
22017 // if we are not floating, but the other one is floating...
22018 if (utils_1.Utils.exists(otherFloating)) {
22019 if (otherFloating === constants_1.Constants.PINNED_TOP) {
22020 // we are not floating, other is floating top, we are first
22021 return false;
22022 }
22023 else {
22024 // we are not floating, other is floating bottom, we are always first
22025 return true;
22026 }
22027 }
22028 break;
22029 }
22030 return this.rowIndex < otherSelection.rowIndex;
22031 };
22032 return GridRow;
22033}());
22034exports.GridRow = GridRow;
22035
22036
22037/***/ }),
22038/* 67 */
22039/***/ (function(module, exports, __webpack_require__) {
22040
22041"use strict";
22042/**
22043 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
22044 * @version v18.1.2
22045 * @link http://www.ag-grid.com/
22046 * @license MIT
22047 */
22048
22049var __extends = (this && this.__extends) || (function () {
22050 var extendStatics = Object.setPrototypeOf ||
22051 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
22052 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
22053 return function (d, b) {
22054 extendStatics(d, b);
22055 function __() { this.constructor = d; }
22056 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
22057 };
22058})();
22059var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
22060 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
22061 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
22062 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22063 return c > 3 && r && Object.defineProperty(target, key, r), r;
22064};
22065var __metadata = (this && this.__metadata) || function (k, v) {
22066 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
22067};
22068Object.defineProperty(exports, "__esModule", { value: true });
22069var component_1 = __webpack_require__(8);
22070var rowNode_1 = __webpack_require__(18);
22071var utils_1 = __webpack_require__(1);
22072var context_1 = __webpack_require__(0);
22073var gridOptionsWrapper_1 = __webpack_require__(2);
22074var events_1 = __webpack_require__(5);
22075var eventService_1 = __webpack_require__(3);
22076var gridApi_1 = __webpack_require__(6);
22077var columnApi_1 = __webpack_require__(7);
22078var CheckboxSelectionComponent = (function (_super) {
22079 __extends(CheckboxSelectionComponent, _super);
22080 function CheckboxSelectionComponent() {
22081 return _super.call(this, "<span class=\"ag-selection-checkbox\"/>") || this;
22082 }
22083 CheckboxSelectionComponent.prototype.createAndAddIcons = function () {
22084 this.eCheckedIcon = utils_1.Utils.createIconNoSpan('checkboxChecked', this.gridOptionsWrapper, this.column);
22085 this.eUncheckedIcon = utils_1.Utils.createIconNoSpan('checkboxUnchecked', this.gridOptionsWrapper, this.column);
22086 this.eIndeterminateIcon = utils_1.Utils.createIconNoSpan('checkboxIndeterminate', this.gridOptionsWrapper, this.column);
22087 var element = this.getGui();
22088 element.appendChild(this.eCheckedIcon);
22089 element.appendChild(this.eUncheckedIcon);
22090 element.appendChild(this.eIndeterminateIcon);
22091 };
22092 CheckboxSelectionComponent.prototype.onDataChanged = function () {
22093 // when rows are loaded for the second time, this can impact the selection, as a row
22094 // could be loaded as already selected (if user scrolls down, and then up again).
22095 this.onSelectionChanged();
22096 };
22097 CheckboxSelectionComponent.prototype.onSelectableChanged = function () {
22098 this.showOrHideSelect();
22099 };
22100 CheckboxSelectionComponent.prototype.onSelectionChanged = function () {
22101 var state = this.rowNode.isSelected();
22102 utils_1.Utils.setVisible(this.eCheckedIcon, state === true);
22103 utils_1.Utils.setVisible(this.eUncheckedIcon, state === false);
22104 utils_1.Utils.setVisible(this.eIndeterminateIcon, typeof state !== 'boolean');
22105 };
22106 CheckboxSelectionComponent.prototype.onCheckedClicked = function () {
22107 var groupSelectsFiltered = this.gridOptionsWrapper.isGroupSelectsFiltered();
22108 var updatedCount = this.rowNode.setSelectedParams({ newValue: false, groupSelectsFiltered: groupSelectsFiltered });
22109 return updatedCount;
22110 };
22111 CheckboxSelectionComponent.prototype.onUncheckedClicked = function (event) {
22112 var groupSelectsFiltered = this.gridOptionsWrapper.isGroupSelectsFiltered();
22113 var updatedCount = this.rowNode.setSelectedParams({ newValue: true, rangeSelect: event.shiftKey, groupSelectsFiltered: groupSelectsFiltered });
22114 return updatedCount;
22115 };
22116 CheckboxSelectionComponent.prototype.onIndeterminateClicked = function (event) {
22117 var result = this.onUncheckedClicked(event);
22118 if (result === 0) {
22119 this.onCheckedClicked();
22120 }
22121 };
22122 CheckboxSelectionComponent.prototype.init = function (params) {
22123 this.rowNode = params.rowNode;
22124 this.column = params.column;
22125 this.createAndAddIcons();
22126 this.onSelectionChanged();
22127 // we don't want the row clicked event to fire when selecting the checkbox, otherwise the row
22128 // would possibly get selected twice
22129 this.addGuiEventListener('click', function (event) { return utils_1.Utils.stopPropagationForAgGrid(event); });
22130 // likewise we don't want double click on this icon to open a group
22131 this.addGuiEventListener('dblclick', function (event) { return utils_1.Utils.stopPropagationForAgGrid(event); });
22132 this.addDestroyableEventListener(this.eCheckedIcon, 'click', this.onCheckedClicked.bind(this));
22133 this.addDestroyableEventListener(this.eUncheckedIcon, 'click', this.onUncheckedClicked.bind(this));
22134 this.addDestroyableEventListener(this.eIndeterminateIcon, 'click', this.onIndeterminateClicked.bind(this));
22135 this.addDestroyableEventListener(this.rowNode, rowNode_1.RowNode.EVENT_ROW_SELECTED, this.onSelectionChanged.bind(this));
22136 this.addDestroyableEventListener(this.rowNode, rowNode_1.RowNode.EVENT_DATA_CHANGED, this.onDataChanged.bind(this));
22137 this.addDestroyableEventListener(this.rowNode, rowNode_1.RowNode.EVENT_SELECTABLE_CHANGED, this.onSelectableChanged.bind(this));
22138 this.isRowSelectableFunc = this.gridOptionsWrapper.getIsRowSelectableFunc();
22139 var checkboxVisibleIsDynamic = this.isRowSelectableFunc || this.checkboxCallbackExists();
22140 if (checkboxVisibleIsDynamic) {
22141 this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_DISPLAYED_COLUMNS_CHANGED, this.showOrHideSelect.bind(this));
22142 this.showOrHideSelect();
22143 }
22144 };
22145 CheckboxSelectionComponent.prototype.showOrHideSelect = function () {
22146 // if the isRowSelectable() is not provided the row node is selectable by default
22147 var selectable = this.rowNode.selectable;
22148 // checkboxSelection callback is deemed a legacy solution however we will still consider it's result.
22149 // If selectable, then also check the colDef callback. if not selectable, this it short circuits - no need
22150 // to call the colDef callback.
22151 if (selectable && this.checkboxCallbackExists()) {
22152 selectable = this.column.isCellCheckboxSelection(this.rowNode);
22153 }
22154 // show checkbox if both conditions are true
22155 this.setVisible(selectable);
22156 };
22157 CheckboxSelectionComponent.prototype.checkboxCallbackExists = function () {
22158 // column will be missing if groupUseEntireRow=true
22159 var colDef = this.column ? this.column.getColDef() : null;
22160 return colDef && typeof colDef.checkboxSelection === 'function';
22161 };
22162 __decorate([
22163 context_1.Autowired('gridOptionsWrapper'),
22164 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
22165 ], CheckboxSelectionComponent.prototype, "gridOptionsWrapper", void 0);
22166 __decorate([
22167 context_1.Autowired('eventService'),
22168 __metadata("design:type", eventService_1.EventService)
22169 ], CheckboxSelectionComponent.prototype, "eventService", void 0);
22170 __decorate([
22171 context_1.Autowired('gridApi'),
22172 __metadata("design:type", gridApi_1.GridApi)
22173 ], CheckboxSelectionComponent.prototype, "gridApi", void 0);
22174 __decorate([
22175 context_1.Autowired('columnApi'),
22176 __metadata("design:type", columnApi_1.ColumnApi)
22177 ], CheckboxSelectionComponent.prototype, "columnApi", void 0);
22178 return CheckboxSelectionComponent;
22179}(component_1.Component));
22180exports.CheckboxSelectionComponent = CheckboxSelectionComponent;
22181
22182
22183/***/ }),
22184/* 68 */
22185/***/ (function(module, exports, __webpack_require__) {
22186
22187"use strict";
22188/**
22189 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
22190 * @version v18.1.2
22191 * @link http://www.ag-grid.com/
22192 * @license MIT
22193 */
22194
22195var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
22196 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
22197 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
22198 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22199 return c > 3 && r && Object.defineProperty(target, key, r), r;
22200};
22201var __metadata = (this && this.__metadata) || function (k, v) {
22202 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
22203};
22204Object.defineProperty(exports, "__esModule", { value: true });
22205var textCellEditor_1 = __webpack_require__(69);
22206var context_1 = __webpack_require__(0);
22207var dateFilter_1 = __webpack_require__(70);
22208var headerComp_1 = __webpack_require__(129);
22209var headerGroupComp_1 = __webpack_require__(130);
22210var floatingFilter_1 = __webpack_require__(92);
22211var componentResolver_1 = __webpack_require__(29);
22212var groupCellRenderer_1 = __webpack_require__(74);
22213var animateShowChangeCellRenderer_1 = __webpack_require__(73);
22214var animateSlideCellRenderer_1 = __webpack_require__(72);
22215var rowComp_1 = __webpack_require__(52);
22216var selectCellEditor_1 = __webpack_require__(77);
22217var popupTextCellEditor_1 = __webpack_require__(93);
22218var popupSelectCellEditor_1 = __webpack_require__(94);
22219var largeTextCellEditor_1 = __webpack_require__(95);
22220var textFilter_1 = __webpack_require__(96);
22221var numberFilter_1 = __webpack_require__(97);
22222var loadingOverlayComponent_1 = __webpack_require__(131);
22223var noRowsOverlayComponent_1 = __webpack_require__(132);
22224var utils_1 = __webpack_require__(1);
22225var RegisteredComponentSource;
22226(function (RegisteredComponentSource) {
22227 RegisteredComponentSource[RegisteredComponentSource["DEFAULT"] = 0] = "DEFAULT";
22228 RegisteredComponentSource[RegisteredComponentSource["REGISTERED"] = 1] = "REGISTERED";
22229})(RegisteredComponentSource = exports.RegisteredComponentSource || (exports.RegisteredComponentSource = {}));
22230var ComponentProvider = (function () {
22231 function ComponentProvider() {
22232 this.agGridDefaults = {
22233 //date
22234 agDateInput: dateFilter_1.DefaultDateComponent,
22235 //header
22236 agColumnHeader: headerComp_1.HeaderComp,
22237 agColumnGroupHeader: headerGroupComp_1.HeaderGroupComp,
22238 //floating filters
22239 agSetColumnFloatingFilter: floatingFilter_1.SetFloatingFilterComp,
22240 agTextColumnFloatingFilter: floatingFilter_1.TextFloatingFilterComp,
22241 agNumberColumnFloatingFilter: floatingFilter_1.NumberFloatingFilterComp,
22242 agDateColumnFloatingFilter: floatingFilter_1.DateFloatingFilterComp,
22243 // renderers
22244 agAnimateShowChangeCellRenderer: animateShowChangeCellRenderer_1.AnimateShowChangeCellRenderer,
22245 agAnimateSlideCellRenderer: animateSlideCellRenderer_1.AnimateSlideCellRenderer,
22246 agGroupCellRenderer: groupCellRenderer_1.GroupCellRenderer,
22247 agGroupRowRenderer: groupCellRenderer_1.GroupCellRenderer,
22248 agLoadingCellRenderer: rowComp_1.LoadingCellRenderer,
22249 //editors
22250 agCellEditor: textCellEditor_1.TextCellEditor,
22251 agTextCellEditor: textCellEditor_1.TextCellEditor,
22252 agSelectCellEditor: selectCellEditor_1.SelectCellEditor,
22253 agPopupTextCellEditor: popupTextCellEditor_1.PopupTextCellEditor,
22254 agPopupSelectCellEditor: popupSelectCellEditor_1.PopupSelectCellEditor,
22255 agLargeTextCellEditor: largeTextCellEditor_1.LargeTextCellEditor,
22256 //filter
22257 agTextColumnFilter: textFilter_1.TextFilter,
22258 agNumberColumnFilter: numberFilter_1.NumberFilter,
22259 agDateColumnFilter: dateFilter_1.DateFilter,
22260 //overlays
22261 agLoadingOverlay: loadingOverlayComponent_1.LoadingOverlayComponent,
22262 agNoRowsOverlay: noRowsOverlayComponent_1.NoRowsOverlayComponent
22263 };
22264 this.agDeprecatedNames = {
22265 set: {
22266 newComponentName: 'agSetColumnFilter',
22267 propertyHolder: 'filter'
22268 },
22269 text: {
22270 newComponentName: 'agTextColumnFilter',
22271 propertyHolder: 'filter'
22272 },
22273 number: {
22274 newComponentName: 'agNumberColumnFilter',
22275 propertyHolder: 'filter'
22276 },
22277 date: {
22278 newComponentName: 'agDateColumnFilter',
22279 propertyHolder: 'filter'
22280 },
22281 group: {
22282 newComponentName: 'agGroupCellRenderer',
22283 propertyHolder: 'cellRenderer'
22284 },
22285 animateShowChange: {
22286 newComponentName: 'agAnimateShowChangeCellRenderer',
22287 propertyHolder: 'cellRenderer'
22288 },
22289 animateSlide: {
22290 newComponentName: 'agAnimateSlideCellRenderer',
22291 propertyHolder: 'cellRenderer'
22292 },
22293 select: {
22294 newComponentName: 'agSelectCellEditor',
22295 propertyHolder: 'cellEditor'
22296 },
22297 largeText: {
22298 newComponentName: 'agLargeTextCellEditor',
22299 propertyHolder: 'cellEditor'
22300 },
22301 popupSelect: {
22302 newComponentName: 'agPopupSelectCellEditor',
22303 propertyHolder: 'cellEditor'
22304 },
22305 popupText: {
22306 newComponentName: 'agPopupTextCellEditor',
22307 propertyHolder: 'cellEditor'
22308 },
22309 richSelect: {
22310 newComponentName: 'agRichSelectCellEditor',
22311 propertyHolder: 'cellEditor'
22312 },
22313 headerComponent: {
22314 newComponentName: 'agColumnHeader',
22315 propertyHolder: 'headerComponent'
22316 }
22317 };
22318 this.jsComponents = {};
22319 this.frameworkComponents = {};
22320 }
22321 ComponentProvider.prototype.init = function () {
22322 var _this = this;
22323 if (this.gridOptions.components != null) {
22324 Object.keys(this.gridOptions.components).forEach(function (it) {
22325 _this.registerComponent(it, _this.gridOptions.components[it]);
22326 });
22327 }
22328 if (this.gridOptions.frameworkComponents != null) {
22329 Object.keys(this.gridOptions.frameworkComponents).forEach(function (it) {
22330 _this.registerFwComponent(it, _this.gridOptions.frameworkComponents[it]);
22331 });
22332 }
22333 };
22334 ComponentProvider.prototype.registerDefaultComponent = function (rawName, component, overridable) {
22335 if (overridable === void 0) { overridable = true; }
22336 var name = this.translateIfDeprecated(rawName);
22337 if (this.agGridDefaults[name]) {
22338 console.error("Trying to overwrite a default component. You should call registerComponent");
22339 return;
22340 }
22341 this.agGridDefaults[name] = component;
22342 };
22343 ComponentProvider.prototype.registerComponent = function (rawName, component) {
22344 var name = this.translateIfDeprecated(rawName);
22345 if (this.frameworkComponents[name]) {
22346 console.error("Trying to register a component that you have already registered for frameworks: " + name);
22347 return;
22348 }
22349 this.jsComponents[name] = component;
22350 };
22351 /**
22352 * B the business interface (ie IHeader)
22353 * A the agGridComponent interface (ie IHeaderComp). The final object acceptable by ag-grid
22354 */
22355 ComponentProvider.prototype.registerFwComponent = function (rawName, component) {
22356 var name = this.translateIfDeprecated(rawName);
22357 if (this.jsComponents[name]) {
22358 console.error("Trying to register a component that you have already registered for plain javascript: " + name);
22359 return;
22360 }
22361 this.frameworkComponents[name] = component;
22362 };
22363 /**
22364 * B the business interface (ie IHeader)
22365 * A the agGridComponent interface (ie IHeaderComp). The final object acceptable by ag-grid
22366 */
22367 ComponentProvider.prototype.retrieve = function (rawName) {
22368 var name = this.translateIfDeprecated(rawName);
22369 if (this.frameworkComponents[name]) {
22370 return {
22371 type: componentResolver_1.ComponentType.FRAMEWORK,
22372 component: this.frameworkComponents[name],
22373 source: RegisteredComponentSource.REGISTERED
22374 };
22375 }
22376 if (this.jsComponents[name]) {
22377 return {
22378 type: componentResolver_1.ComponentType.AG_GRID,
22379 component: this.jsComponents[name],
22380 source: RegisteredComponentSource.REGISTERED
22381 };
22382 }
22383 if (this.agGridDefaults[name]) {
22384 return this.agGridDefaults[name] ?
22385 {
22386 type: componentResolver_1.ComponentType.AG_GRID,
22387 component: this.agGridDefaults[name],
22388 source: RegisteredComponentSource.DEFAULT
22389 } :
22390 null;
22391 }
22392 if (Object.keys(this.agGridDefaults).indexOf(name) < 0) {
22393 console.warn("ag-grid: Looking for component [" + name + "] but it wasn't found.");
22394 }
22395 return null;
22396 };
22397 ComponentProvider.prototype.translateIfDeprecated = function (raw) {
22398 var deprecatedInfo = this.agDeprecatedNames[raw];
22399 if (deprecatedInfo != null) {
22400 utils_1._.doOnce(function () {
22401 console.warn("ag-grid. Since v15.0 component names have been renamed to be namespaced. You should rename " + deprecatedInfo.propertyHolder + ":" + raw + " to " + deprecatedInfo.propertyHolder + ":" + deprecatedInfo.newComponentName);
22402 }, 'DEPREACTE_COMPONENT_' + raw);
22403 return deprecatedInfo.newComponentName;
22404 }
22405 return raw;
22406 };
22407 __decorate([
22408 context_1.Autowired('gridOptions'),
22409 __metadata("design:type", Object)
22410 ], ComponentProvider.prototype, "gridOptions", void 0);
22411 __decorate([
22412 context_1.PostConstruct,
22413 __metadata("design:type", Function),
22414 __metadata("design:paramtypes", []),
22415 __metadata("design:returntype", void 0)
22416 ], ComponentProvider.prototype, "init", null);
22417 ComponentProvider = __decorate([
22418 context_1.Bean('componentProvider')
22419 ], ComponentProvider);
22420 return ComponentProvider;
22421}());
22422exports.ComponentProvider = ComponentProvider;
22423
22424
22425/***/ }),
22426/* 69 */
22427/***/ (function(module, exports, __webpack_require__) {
22428
22429"use strict";
22430/**
22431 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
22432 * @version v18.1.2
22433 * @link http://www.ag-grid.com/
22434 * @license MIT
22435 */
22436
22437var __extends = (this && this.__extends) || (function () {
22438 var extendStatics = Object.setPrototypeOf ||
22439 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
22440 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
22441 return function (d, b) {
22442 extendStatics(d, b);
22443 function __() { this.constructor = d; }
22444 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
22445 };
22446})();
22447Object.defineProperty(exports, "__esModule", { value: true });
22448var constants_1 = __webpack_require__(9);
22449var component_1 = __webpack_require__(8);
22450var utils_1 = __webpack_require__(1);
22451var TextCellEditor = (function (_super) {
22452 __extends(TextCellEditor, _super);
22453 function TextCellEditor() {
22454 return _super.call(this, TextCellEditor.TEMPLATE) || this;
22455 }
22456 TextCellEditor.prototype.init = function (params) {
22457 this.params = params;
22458 var eInput = this.getGui();
22459 var startValue;
22460 // cellStartedEdit is only false if we are doing fullRow editing
22461 if (params.cellStartedEdit) {
22462 this.focusAfterAttached = true;
22463 var keyPressBackspaceOrDelete = params.keyPress === constants_1.Constants.KEY_BACKSPACE
22464 || params.keyPress === constants_1.Constants.KEY_DELETE;
22465 if (keyPressBackspaceOrDelete) {
22466 startValue = '';
22467 }
22468 else if (params.charPress) {
22469 startValue = params.charPress;
22470 }
22471 else {
22472 startValue = this.getStartValue(params);
22473 if (params.keyPress !== constants_1.Constants.KEY_F2) {
22474 this.highlightAllOnFocus = true;
22475 }
22476 }
22477 }
22478 else {
22479 this.focusAfterAttached = false;
22480 startValue = this.getStartValue(params);
22481 }
22482 if (utils_1.Utils.exists(startValue)) {
22483 eInput.value = startValue;
22484 }
22485 this.addDestroyableEventListener(eInput, 'keydown', function (event) {
22486 var isNavigationKey = event.keyCode === constants_1.Constants.KEY_LEFT
22487 || event.keyCode === constants_1.Constants.KEY_RIGHT
22488 || event.keyCode === constants_1.Constants.KEY_UP
22489 || event.keyCode === constants_1.Constants.KEY_DOWN
22490 || event.keyCode === constants_1.Constants.KEY_PAGE_DOWN
22491 || event.keyCode === constants_1.Constants.KEY_PAGE_UP
22492 || event.keyCode === constants_1.Constants.KEY_PAGE_HOME
22493 || event.keyCode === constants_1.Constants.KEY_PAGE_END;
22494 if (isNavigationKey) {
22495 // this stops the grid from executing keyboard navigation
22496 event.stopPropagation();
22497 // this stops the browser from scrolling up / down
22498 var pageUp = event.keyCode === constants_1.Constants.KEY_PAGE_UP;
22499 var pageDown = event.keyCode === constants_1.Constants.KEY_PAGE_DOWN;
22500 if (pageUp || pageDown) {
22501 event.preventDefault();
22502 }
22503 }
22504 });
22505 };
22506 TextCellEditor.prototype.afterGuiAttached = function () {
22507 if (!this.focusAfterAttached) {
22508 return;
22509 }
22510 var eInput = this.getGui();
22511 eInput.focus();
22512 if (this.highlightAllOnFocus) {
22513 eInput.select();
22514 }
22515 else {
22516 // when we started editing, we want the carot at the end, not the start.
22517 // this comes into play in two scenarios: a) when user hits F2 and b)
22518 // when user hits a printable character, then on IE (and only IE) the carot
22519 // was placed after the first character, thus 'apply' would end up as 'pplea'
22520 var length_1 = eInput.value ? eInput.value.length : 0;
22521 if (length_1 > 0) {
22522 eInput.setSelectionRange(length_1, length_1);
22523 }
22524 }
22525 };
22526 // gets called when tabbing trough cells and in full row edit mode
22527 TextCellEditor.prototype.focusIn = function () {
22528 var eInput = this.getGui();
22529 eInput.focus();
22530 eInput.select();
22531 };
22532 TextCellEditor.prototype.getValue = function () {
22533 var eInput = this.getGui();
22534 return this.params.parseValue(eInput.value);
22535 };
22536 TextCellEditor.prototype.getStartValue = function (params) {
22537 var formatValue = params.useFormatter || params.column.getColDef().refData;
22538 return formatValue ? params.formatValue(params.value) : params.value;
22539 };
22540 TextCellEditor.TEMPLATE = '<input class="ag-cell-edit-input" type="text"/>';
22541 return TextCellEditor;
22542}(component_1.Component));
22543exports.TextCellEditor = TextCellEditor;
22544
22545
22546/***/ }),
22547/* 70 */
22548/***/ (function(module, exports, __webpack_require__) {
22549
22550"use strict";
22551/**
22552 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
22553 * @version v18.1.2
22554 * @link http://www.ag-grid.com/
22555 * @license MIT
22556 */
22557
22558var __extends = (this && this.__extends) || (function () {
22559 var extendStatics = Object.setPrototypeOf ||
22560 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
22561 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
22562 return function (d, b) {
22563 extendStatics(d, b);
22564 function __() { this.constructor = d; }
22565 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
22566 };
22567})();
22568var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
22569 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
22570 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
22571 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22572 return c > 3 && r && Object.defineProperty(target, key, r), r;
22573};
22574var __metadata = (this && this.__metadata) || function (k, v) {
22575 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
22576};
22577Object.defineProperty(exports, "__esModule", { value: true });
22578var component_1 = __webpack_require__(8);
22579var componentAnnotations_1 = __webpack_require__(11);
22580var utils_1 = __webpack_require__(1);
22581var baseFilter_1 = __webpack_require__(53);
22582var context_1 = __webpack_require__(0);
22583var componentRecipes_1 = __webpack_require__(23);
22584var DateFilter = (function (_super) {
22585 __extends(DateFilter, _super);
22586 function DateFilter() {
22587 return _super !== null && _super.apply(this, arguments) || this;
22588 }
22589 DateFilter.prototype.modelFromFloatingFilter = function (from) {
22590 return {
22591 dateFrom: from,
22592 dateTo: this.getDateTo(),
22593 type: this.filter,
22594 filterType: 'date'
22595 };
22596 };
22597 DateFilter.prototype.getApplicableFilterTypes = function () {
22598 return [baseFilter_1.BaseFilter.EQUALS, baseFilter_1.BaseFilter.GREATER_THAN, baseFilter_1.BaseFilter.LESS_THAN, baseFilter_1.BaseFilter.NOT_EQUAL, baseFilter_1.BaseFilter.IN_RANGE];
22599 };
22600 DateFilter.prototype.bodyTemplate = function (type) {
22601 var fromPanelId = type == baseFilter_1.FilterConditionType.MAIN ? "filterDateFromPanel" : "filterDateFromConditionPanel";
22602 var toPanelId = type == baseFilter_1.FilterConditionType.MAIN ? "filterDateToPanel" : "filterDateToConditionPanel";
22603 return "<div class=\"ag-filter-body\">\n <div class=\"ag-filter-date-from\" id=\"" + fromPanelId + "\">\n </div>\n <div class=\"ag-filter-date-to\" id=\"" + toPanelId + "\">\n </div>\n </div>";
22604 };
22605 DateFilter.prototype.initialiseFilterBodyUi = function (type) {
22606 _super.prototype.initialiseFilterBodyUi.call(this, type);
22607 this.createComponents(type);
22608 if (type === baseFilter_1.FilterConditionType.MAIN) {
22609 this.setDateFrom_date(this.dateFrom, baseFilter_1.FilterConditionType.MAIN);
22610 this.setDateTo_date(this.dateTo, baseFilter_1.FilterConditionType.MAIN);
22611 this.setFilterType(this.filterCondition, baseFilter_1.FilterConditionType.MAIN);
22612 }
22613 else {
22614 this.setDateFrom_date(this.dateFromCondition, baseFilter_1.FilterConditionType.CONDITION);
22615 this.setDateTo_date(this.dateToCondition, baseFilter_1.FilterConditionType.CONDITION);
22616 this.setFilterType(this.filterCondition, baseFilter_1.FilterConditionType.CONDITION);
22617 }
22618 };
22619 DateFilter.prototype.createComponents = function (type) {
22620 var _this = this;
22621 var dateComponentParams = {
22622 onDateChanged: function () { _this.onDateChanged(type); },
22623 filterParams: this.filterParams
22624 };
22625 this.componentRecipes.newDateComponent(dateComponentParams).then(function (dateToComponent) {
22626 if (type === baseFilter_1.FilterConditionType.MAIN) {
22627 _this.dateToComponent = dateToComponent;
22628 }
22629 else {
22630 _this.dateToConditionComponent = dateToComponent;
22631 }
22632 var dateToElement = dateToComponent.getGui();
22633 if (type === baseFilter_1.FilterConditionType.MAIN) {
22634 _this.eDateToPanel.appendChild(dateToElement);
22635 if (_this.dateToComponent.afterGuiAttached) {
22636 _this.dateToComponent.afterGuiAttached();
22637 }
22638 }
22639 else {
22640 _this.eDateToConditionPanel.appendChild(dateToElement);
22641 if (_this.dateToConditionComponent.afterGuiAttached) {
22642 _this.dateToConditionComponent.afterGuiAttached();
22643 }
22644 }
22645 });
22646 this.componentRecipes.newDateComponent(dateComponentParams).then(function (dateComponent) {
22647 if (type === baseFilter_1.FilterConditionType.MAIN) {
22648 _this.dateFromComponent = dateComponent;
22649 }
22650 else {
22651 _this.dateFromConditionComponent = dateComponent;
22652 }
22653 var dateFromElement = dateComponent.getGui();
22654 if (type === baseFilter_1.FilterConditionType.MAIN) {
22655 _this.eDateFromPanel.appendChild(dateFromElement);
22656 if (_this.dateFromComponent.afterGuiAttached) {
22657 _this.dateFromComponent.afterGuiAttached();
22658 }
22659 }
22660 else {
22661 _this.eDateFromConditionPanel.appendChild(dateFromElement);
22662 if (_this.dateFromConditionComponent.afterGuiAttached) {
22663 _this.dateFromConditionComponent.afterGuiAttached();
22664 }
22665 }
22666 });
22667 };
22668 DateFilter.prototype.onDateChanged = function (type) {
22669 if (type === baseFilter_1.FilterConditionType.MAIN) {
22670 this.dateFrom = DateFilter.removeTimezone(this.dateFromComponent.getDate());
22671 this.dateTo = DateFilter.removeTimezone(this.dateToComponent.getDate());
22672 }
22673 else {
22674 this.dateFromCondition = DateFilter.removeTimezone(this.dateFromComponent.getDate());
22675 this.dateToCondition = DateFilter.removeTimezone(this.dateToComponent.getDate());
22676 }
22677 this.onFilterChanged();
22678 };
22679 DateFilter.prototype.refreshFilterBodyUi = function (type) {
22680 var panel;
22681 var filterTypeValue;
22682 if (type === baseFilter_1.FilterConditionType.MAIN) {
22683 panel = this.eDateToPanel;
22684 filterTypeValue = this.filter;
22685 }
22686 else {
22687 panel = this.eDateToConditionPanel;
22688 filterTypeValue = this.filterCondition;
22689 }
22690 if (!panel)
22691 return;
22692 var visible = filterTypeValue === baseFilter_1.BaseFilter.IN_RANGE;
22693 utils_1.Utils.setVisible(panel, visible);
22694 };
22695 DateFilter.prototype.comparator = function () {
22696 return this.filterParams.comparator ? this.filterParams.comparator : this.defaultComparator.bind(this);
22697 };
22698 DateFilter.prototype.defaultComparator = function (filterDate, cellValue) {
22699 //The default comparator assumes that the cellValue is a date
22700 var cellAsDate = cellValue;
22701 if (cellAsDate < filterDate) {
22702 return -1;
22703 }
22704 if (cellAsDate > filterDate) {
22705 return 1;
22706 }
22707 return cellValue != null ? 0 : -1;
22708 };
22709 DateFilter.prototype.serialize = function (type) {
22710 var dateToComponent = type === baseFilter_1.FilterConditionType.MAIN ? this.dateToComponent : this.dateToConditionComponent;
22711 var dateFromComponent = type === baseFilter_1.FilterConditionType.MAIN ? this.dateFromComponent : this.dateFromConditionComponent;
22712 var filterType = type === baseFilter_1.FilterConditionType.MAIN ? this.filter : this.filterCondition;
22713 return {
22714 dateTo: utils_1.Utils.serializeDateToYyyyMmDd(dateToComponent.getDate(), "-"),
22715 dateFrom: utils_1.Utils.serializeDateToYyyyMmDd(dateFromComponent.getDate(), "-"),
22716 type: filterType ? filterType : this.defaultFilter,
22717 filterType: 'date'
22718 };
22719 };
22720 DateFilter.prototype.filterValues = function (type) {
22721 if (type === baseFilter_1.FilterConditionType.MAIN) {
22722 if (!this.dateFromComponent)
22723 return null;
22724 return this.filter !== baseFilter_1.BaseFilter.IN_RANGE ?
22725 this.dateFromComponent.getDate() :
22726 [this.dateFromComponent.getDate(), this.dateToComponent.getDate()];
22727 }
22728 if (!this.dateFromConditionComponent)
22729 return null;
22730 return this.filterCondition !== baseFilter_1.BaseFilter.IN_RANGE ?
22731 this.dateFromConditionComponent.getDate() :
22732 [this.dateFromConditionComponent.getDate(), this.dateToConditionComponent.getDate()];
22733 };
22734 // not used by ag-Grid, but exposed as part of the filter API for the client if they want it
22735 DateFilter.prototype.getDateFrom = function () {
22736 return utils_1.Utils.serializeDateToYyyyMmDd(this.dateFromComponent.getDate(), "-");
22737 };
22738 // not used by ag-Grid, but exposed as part of the filter API for the client if they want it
22739 DateFilter.prototype.getDateTo = function () {
22740 return utils_1.Utils.serializeDateToYyyyMmDd(this.dateToComponent.getDate(), "-");
22741 };
22742 // not used by ag-Grid, but exposed as part of the filter API for the client if they want it
22743 DateFilter.prototype.getFilterType = function () {
22744 return this.filter;
22745 };
22746 DateFilter.prototype.setDateFrom = function (date, type) {
22747 var parsedDate = utils_1.Utils.parseYyyyMmDdToDate(date, "-");
22748 this.setDateFrom_date(parsedDate, type);
22749 };
22750 DateFilter.prototype.setDateFrom_date = function (parsedDate, type) {
22751 if (type === baseFilter_1.FilterConditionType.MAIN) {
22752 this.dateFrom = parsedDate;
22753 if (!this.dateFromComponent)
22754 return;
22755 this.dateFromComponent.setDate(this.dateFrom);
22756 }
22757 else {
22758 this.dateFromCondition = parsedDate;
22759 if (!this.dateFromConditionComponent)
22760 return;
22761 this.dateFromConditionComponent.setDate(this.dateFromCondition);
22762 }
22763 };
22764 DateFilter.prototype.setDateTo = function (date, type) {
22765 var parsedDate = utils_1.Utils.parseYyyyMmDdToDate(date, "-");
22766 this.setDateTo_date(parsedDate, type);
22767 };
22768 DateFilter.prototype.setDateTo_date = function (parsedDate, type) {
22769 if (type === baseFilter_1.FilterConditionType.MAIN) {
22770 this.dateTo = parsedDate;
22771 if (!this.dateToComponent)
22772 return;
22773 this.dateToComponent.setDate(this.dateTo);
22774 }
22775 else {
22776 this.dateToCondition = parsedDate;
22777 if (!this.dateToConditionComponent)
22778 return;
22779 this.dateToConditionComponent.setDate(this.dateToCondition);
22780 }
22781 };
22782 DateFilter.prototype.resetState = function () {
22783 this.setDateFrom(null, baseFilter_1.FilterConditionType.MAIN);
22784 this.setDateTo(null, baseFilter_1.FilterConditionType.MAIN);
22785 this.setFilterType(this.defaultFilter, baseFilter_1.FilterConditionType.MAIN);
22786 this.setDateFrom(null, baseFilter_1.FilterConditionType.CONDITION);
22787 this.setDateTo(null, baseFilter_1.FilterConditionType.CONDITION);
22788 this.setFilterType(this.defaultFilter, baseFilter_1.FilterConditionType.MAIN);
22789 };
22790 DateFilter.prototype.parse = function (model, type) {
22791 this.setDateFrom(model.dateFrom, type);
22792 this.setDateTo(model.dateTo, type);
22793 this.setFilterType(model.type, type);
22794 };
22795 DateFilter.prototype.setType = function (filterType, type) {
22796 this.setFilterType(filterType, type);
22797 };
22798 DateFilter.removeTimezone = function (from) {
22799 if (!from) {
22800 return null;
22801 }
22802 return new Date(from.getFullYear(), from.getMonth(), from.getDate());
22803 };
22804 __decorate([
22805 context_1.Autowired('componentRecipes'),
22806 __metadata("design:type", componentRecipes_1.ComponentRecipes)
22807 ], DateFilter.prototype, "componentRecipes", void 0);
22808 __decorate([
22809 componentAnnotations_1.QuerySelector('#filterDateFromPanel'),
22810 __metadata("design:type", HTMLElement)
22811 ], DateFilter.prototype, "eDateFromPanel", void 0);
22812 __decorate([
22813 componentAnnotations_1.QuerySelector('#filterDateFromConditionPanel'),
22814 __metadata("design:type", HTMLElement)
22815 ], DateFilter.prototype, "eDateFromConditionPanel", void 0);
22816 __decorate([
22817 componentAnnotations_1.QuerySelector('#filterDateToPanel'),
22818 __metadata("design:type", HTMLElement)
22819 ], DateFilter.prototype, "eDateToPanel", void 0);
22820 __decorate([
22821 componentAnnotations_1.QuerySelector('#filterDateToConditionPanel'),
22822 __metadata("design:type", HTMLElement)
22823 ], DateFilter.prototype, "eDateToConditionPanel", void 0);
22824 return DateFilter;
22825}(baseFilter_1.ScalarBaseFilter));
22826exports.DateFilter = DateFilter;
22827var DefaultDateComponent = (function (_super) {
22828 __extends(DefaultDateComponent, _super);
22829 function DefaultDateComponent() {
22830 return _super.call(this, "<input class=\"ag-filter-filter\" type=\"text\" placeholder=\"yyyy-mm-dd\">") || this;
22831 }
22832 DefaultDateComponent.prototype.init = function (params) {
22833 this.eDateInput = this.getGui();
22834 if (utils_1.Utils.isBrowserChrome() || params.filterParams.browserDatePicker) {
22835 if (utils_1.Utils.isBrowserIE()) {
22836 console.warn('ag-grid: browserDatePicker is specified to true, but it is not supported in IE 11, reverting to plain text date picker');
22837 }
22838 else {
22839 this.eDateInput.type = 'date';
22840 }
22841 }
22842 this.listener = params.onDateChanged;
22843 this.addGuiEventListener('input', this.listener);
22844 };
22845 DefaultDateComponent.prototype.getDate = function () {
22846 return utils_1.Utils.parseYyyyMmDdToDate(this.eDateInput.value, "-");
22847 };
22848 DefaultDateComponent.prototype.setDate = function (date) {
22849 this.eDateInput.value = utils_1.Utils.serializeDateToYyyyMmDd(date, "-");
22850 };
22851 return DefaultDateComponent;
22852}(component_1.Component));
22853exports.DefaultDateComponent = DefaultDateComponent;
22854
22855
22856/***/ }),
22857/* 71 */
22858/***/ (function(module, exports, __webpack_require__) {
22859
22860"use strict";
22861/**
22862 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
22863 * @version v18.1.2
22864 * @link http://www.ag-grid.com/
22865 * @license MIT
22866 */
22867
22868var __extends = (this && this.__extends) || (function () {
22869 var extendStatics = Object.setPrototypeOf ||
22870 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
22871 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
22872 return function (d, b) {
22873 extendStatics(d, b);
22874 function __() { this.constructor = d; }
22875 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
22876 };
22877})();
22878var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
22879 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
22880 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
22881 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
22882 return c > 3 && r && Object.defineProperty(target, key, r), r;
22883};
22884var __metadata = (this && this.__metadata) || function (k, v) {
22885 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
22886};
22887Object.defineProperty(exports, "__esModule", { value: true });
22888var component_1 = __webpack_require__(8);
22889var context_1 = __webpack_require__(0);
22890var gridOptionsWrapper_1 = __webpack_require__(2);
22891var PopupEditorWrapper = (function (_super) {
22892 __extends(PopupEditorWrapper, _super);
22893 function PopupEditorWrapper(cellEditor) {
22894 var _this = _super.call(this, "<div class=\"ag-popup-editor\" tabindex=\"-1\"/>") || this;
22895 _this.getGuiCalledOnChild = false;
22896 _this.cellEditor = cellEditor;
22897 return _this;
22898 }
22899 PopupEditorWrapper.prototype.onKeyDown = function (event) {
22900 this.params.onKeyDown(event);
22901 };
22902 PopupEditorWrapper.prototype.getGui = function () {
22903 // we call getGui() on child here (rather than in the constructor)
22904 // as we should wait for 'init' to be called on child first.
22905 if (!this.getGuiCalledOnChild) {
22906 this.appendChild(this.cellEditor.getGui());
22907 this.getGuiCalledOnChild = true;
22908 }
22909 return _super.prototype.getGui.call(this);
22910 };
22911 PopupEditorWrapper.prototype.init = function (params) {
22912 var _this = this;
22913 this.params = params;
22914 this.gridOptionsWrapper.setDomData(this.getGui(), PopupEditorWrapper.DOM_KEY_POPUP_EDITOR_WRAPPER, true);
22915 this.addDestroyFunc(function () {
22916 if (_this.cellEditor.destroy) {
22917 _this.cellEditor.destroy();
22918 }
22919 });
22920 this.addDestroyableEventListener(
22921 // this needs to be 'super' and not 'this' as if we call 'this',
22922 // it ends up called 'getGui()' on the child before 'init' was called,
22923 // which is not good
22924 _super.prototype.getGui.call(this), 'keydown', this.onKeyDown.bind(this));
22925 };
22926 PopupEditorWrapper.prototype.afterGuiAttached = function () {
22927 if (this.cellEditor.afterGuiAttached) {
22928 this.cellEditor.afterGuiAttached();
22929 }
22930 };
22931 PopupEditorWrapper.prototype.getValue = function () {
22932 return this.cellEditor.getValue();
22933 };
22934 PopupEditorWrapper.prototype.isPopup = function () {
22935 return true;
22936 };
22937 PopupEditorWrapper.prototype.isCancelBeforeStart = function () {
22938 if (this.cellEditor.isCancelBeforeStart) {
22939 return this.cellEditor.isCancelBeforeStart();
22940 }
22941 };
22942 PopupEditorWrapper.prototype.isCancelAfterEnd = function () {
22943 if (this.cellEditor.isCancelAfterEnd) {
22944 return this.cellEditor.isCancelAfterEnd();
22945 }
22946 };
22947 PopupEditorWrapper.prototype.focusIn = function () {
22948 if (this.cellEditor.focusIn) {
22949 this.cellEditor.focusIn();
22950 }
22951 };
22952 PopupEditorWrapper.prototype.focusOut = function () {
22953 if (this.cellEditor.focusOut) {
22954 this.cellEditor.focusOut();
22955 }
22956 };
22957 PopupEditorWrapper.DOM_KEY_POPUP_EDITOR_WRAPPER = 'popupEditorWrapper';
22958 __decorate([
22959 context_1.Autowired('gridOptionsWrapper'),
22960 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
22961 ], PopupEditorWrapper.prototype, "gridOptionsWrapper", void 0);
22962 return PopupEditorWrapper;
22963}(component_1.Component));
22964exports.PopupEditorWrapper = PopupEditorWrapper;
22965
22966
22967/***/ }),
22968/* 72 */
22969/***/ (function(module, exports, __webpack_require__) {
22970
22971"use strict";
22972/**
22973 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
22974 * @version v18.1.2
22975 * @link http://www.ag-grid.com/
22976 * @license MIT
22977 */
22978
22979var __extends = (this && this.__extends) || (function () {
22980 var extendStatics = Object.setPrototypeOf ||
22981 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
22982 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
22983 return function (d, b) {
22984 extendStatics(d, b);
22985 function __() { this.constructor = d; }
22986 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
22987 };
22988})();
22989Object.defineProperty(exports, "__esModule", { value: true });
22990var utils_1 = __webpack_require__(1);
22991var component_1 = __webpack_require__(8);
22992var AnimateSlideCellRenderer = (function (_super) {
22993 __extends(AnimateSlideCellRenderer, _super);
22994 function AnimateSlideCellRenderer() {
22995 var _this = _super.call(this, AnimateSlideCellRenderer.TEMPLATE) || this;
22996 _this.refreshCount = 0;
22997 _this.eCurrent = _this.queryForHtmlElement('.ag-value-slide-current');
22998 return _this;
22999 }
23000 AnimateSlideCellRenderer.prototype.init = function (params) {
23001 this.params = params;
23002 this.refresh(params);
23003 };
23004 AnimateSlideCellRenderer.prototype.addSlideAnimation = function () {
23005 var _this = this;
23006 this.refreshCount++;
23007 // below we keep checking this, and stop working on the animation
23008 // if it no longer matches - this means another animation has started
23009 // and this one is stale.
23010 var refreshCountCopy = this.refreshCount;
23011 // if old animation, remove it
23012 if (this.ePrevious) {
23013 this.getGui().removeChild(this.ePrevious);
23014 }
23015 this.ePrevious = utils_1.Utils.loadTemplate('<span class="ag-value-slide-previous ag-value-slide-out"></span>');
23016 this.ePrevious.innerHTML = this.eCurrent.innerHTML;
23017 this.getGui().insertBefore(this.ePrevious, this.eCurrent);
23018 // having timeout of 0 allows use to skip to the next css turn,
23019 // so we know the previous css classes have been applied. so the
23020 // complex set of setTimeout below creates the animation
23021 setTimeout(function () {
23022 if (refreshCountCopy !== _this.refreshCount) {
23023 return;
23024 }
23025 utils_1.Utils.addCssClass(_this.ePrevious, 'ag-value-slide-out-end');
23026 }, 50);
23027 setTimeout(function () {
23028 if (refreshCountCopy !== _this.refreshCount) {
23029 return;
23030 }
23031 _this.getGui().removeChild(_this.ePrevious);
23032 _this.ePrevious = null;
23033 }, 3000);
23034 };
23035 AnimateSlideCellRenderer.prototype.refresh = function (params) {
23036 var value = params.value;
23037 if (utils_1.Utils.missing(value)) {
23038 value = '';
23039 }
23040 if (value === this.lastValue) {
23041 return;
23042 }
23043 this.addSlideAnimation();
23044 this.lastValue = value;
23045 if (utils_1.Utils.exists(params.valueFormatted)) {
23046 this.eCurrent.innerHTML = params.valueFormatted;
23047 }
23048 else if (utils_1.Utils.exists(params.value)) {
23049 this.eCurrent.innerHTML = value;
23050 }
23051 else {
23052 this.eCurrent.innerHTML = '';
23053 }
23054 return true;
23055 };
23056 AnimateSlideCellRenderer.TEMPLATE = '<span>' +
23057 '<span class="ag-value-slide-current"></span>' +
23058 '</span>';
23059 return AnimateSlideCellRenderer;
23060}(component_1.Component));
23061exports.AnimateSlideCellRenderer = AnimateSlideCellRenderer;
23062
23063
23064/***/ }),
23065/* 73 */
23066/***/ (function(module, exports, __webpack_require__) {
23067
23068"use strict";
23069/**
23070 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
23071 * @version v18.1.2
23072 * @link http://www.ag-grid.com/
23073 * @license MIT
23074 */
23075
23076var __extends = (this && this.__extends) || (function () {
23077 var extendStatics = Object.setPrototypeOf ||
23078 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
23079 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
23080 return function (d, b) {
23081 extendStatics(d, b);
23082 function __() { this.constructor = d; }
23083 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
23084 };
23085})();
23086Object.defineProperty(exports, "__esModule", { value: true });
23087var utils_1 = __webpack_require__(1);
23088var component_1 = __webpack_require__(8);
23089var ARROW_UP = '&#65514;';
23090var ARROW_DOWN = '&#65516;';
23091var AnimateShowChangeCellRenderer = (function (_super) {
23092 __extends(AnimateShowChangeCellRenderer, _super);
23093 function AnimateShowChangeCellRenderer() {
23094 var _this = _super.call(this, AnimateShowChangeCellRenderer.TEMPLATE) || this;
23095 _this.refreshCount = 0;
23096 return _this;
23097 }
23098 AnimateShowChangeCellRenderer.prototype.init = function (params) {
23099 // this.params = params;
23100 this.eValue = this.queryForHtmlElement('.ag-value-change-value');
23101 this.eDelta = this.queryForHtmlElement('.ag-value-change-delta');
23102 this.refresh(params);
23103 };
23104 AnimateShowChangeCellRenderer.prototype.showDelta = function (params, delta) {
23105 var absDelta = Math.abs(delta);
23106 var valueFormatted = params.formatValue(absDelta);
23107 var valueToUse = utils_1.Utils.exists(valueFormatted) ? valueFormatted : absDelta;
23108 var deltaUp = (delta >= 0);
23109 if (deltaUp) {
23110 this.eDelta.innerHTML = ARROW_UP + valueToUse;
23111 }
23112 else {
23113 // because negative, use ABS to remove sign
23114 this.eDelta.innerHTML = ARROW_DOWN + valueToUse;
23115 }
23116 // class makes it green (in ag-fresh)
23117 utils_1.Utils.addOrRemoveCssClass(this.eDelta, 'ag-value-change-delta-up', deltaUp);
23118 // class makes it red (in ag-fresh)
23119 utils_1.Utils.addOrRemoveCssClass(this.eDelta, 'ag-value-change-delta-down', !deltaUp);
23120 };
23121 AnimateShowChangeCellRenderer.prototype.setTimerToRemoveDelta = function () {
23122 var _this = this;
23123 // the refreshCount makes sure that if the value updates again while
23124 // the below timer is waiting, then the below timer will realise it
23125 // is not the most recent and will not try to remove the delta value.
23126 this.refreshCount++;
23127 var refreshCountCopy = this.refreshCount;
23128 setTimeout(function () {
23129 if (refreshCountCopy === _this.refreshCount) {
23130 _this.hideDeltaValue();
23131 }
23132 }, 2000);
23133 };
23134 AnimateShowChangeCellRenderer.prototype.hideDeltaValue = function () {
23135 utils_1.Utils.removeCssClass(this.eValue, 'ag-value-change-value-highlight');
23136 this.eDelta.innerHTML = '';
23137 };
23138 AnimateShowChangeCellRenderer.prototype.refresh = function (params) {
23139 var value = params.value;
23140 if (value === this.lastValue) {
23141 return;
23142 }
23143 if (utils_1.Utils.exists(params.valueFormatted)) {
23144 this.eValue.innerHTML = params.valueFormatted;
23145 }
23146 else if (utils_1.Utils.exists(params.value)) {
23147 this.eValue.innerHTML = value;
23148 }
23149 else {
23150 this.eValue.innerHTML = '';
23151 }
23152 if (typeof value === 'number' && typeof this.lastValue === 'number') {
23153 var delta = value - this.lastValue;
23154 this.showDelta(params, delta);
23155 }
23156 // highlight the current value, but only if it's not new, otherwise it
23157 // would get highlighted first time the value is shown
23158 if (this.lastValue) {
23159 utils_1.Utils.addCssClass(this.eValue, 'ag-value-change-value-highlight');
23160 }
23161 this.setTimerToRemoveDelta();
23162 this.lastValue = value;
23163 return true;
23164 };
23165 AnimateShowChangeCellRenderer.TEMPLATE = '<span>' +
23166 '<span class="ag-value-change-delta"></span>' +
23167 '<span class="ag-value-change-value"></span>' +
23168 '</span>';
23169 return AnimateShowChangeCellRenderer;
23170}(component_1.Component));
23171exports.AnimateShowChangeCellRenderer = AnimateShowChangeCellRenderer;
23172
23173
23174/***/ }),
23175/* 74 */
23176/***/ (function(module, exports, __webpack_require__) {
23177
23178"use strict";
23179/**
23180 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
23181 * @version v18.1.2
23182 * @link http://www.ag-grid.com/
23183 * @license MIT
23184 */
23185
23186var __extends = (this && this.__extends) || (function () {
23187 var extendStatics = Object.setPrototypeOf ||
23188 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
23189 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
23190 return function (d, b) {
23191 extendStatics(d, b);
23192 function __() { this.constructor = d; }
23193 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
23194 };
23195})();
23196var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
23197 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
23198 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
23199 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
23200 return c > 3 && r && Object.defineProperty(target, key, r), r;
23201};
23202var __metadata = (this && this.__metadata) || function (k, v) {
23203 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
23204};
23205Object.defineProperty(exports, "__esModule", { value: true });
23206var gridOptionsWrapper_1 = __webpack_require__(2);
23207var expressionService_1 = __webpack_require__(21);
23208var eventService_1 = __webpack_require__(3);
23209var constants_1 = __webpack_require__(9);
23210var utils_1 = __webpack_require__(1);
23211var context_1 = __webpack_require__(0);
23212var component_1 = __webpack_require__(8);
23213var rowNode_1 = __webpack_require__(18);
23214var cellRendererService_1 = __webpack_require__(58);
23215var valueFormatterService_1 = __webpack_require__(45);
23216var checkboxSelectionComponent_1 = __webpack_require__(67);
23217var columnController_1 = __webpack_require__(4);
23218var column_1 = __webpack_require__(10);
23219var componentAnnotations_1 = __webpack_require__(11);
23220var mouseEventService_1 = __webpack_require__(46);
23221var GroupCellRenderer = (function (_super) {
23222 __extends(GroupCellRenderer, _super);
23223 function GroupCellRenderer() {
23224 return _super.call(this, GroupCellRenderer.TEMPLATE) || this;
23225 }
23226 GroupCellRenderer.prototype.init = function (params) {
23227 this.params = params;
23228 if (this.gridOptionsWrapper.isGroupIncludeTotalFooter()) {
23229 this.assignBlankValueToGroupFooterCell(params);
23230 }
23231 var embeddedRowMismatch = this.isEmbeddedRowMismatch();
23232 // This allows for empty strings to appear as groups since
23233 // it will only return for null or undefined.
23234 var cellIsEmpty = params.value == null;
23235 this.cellIsBlank = embeddedRowMismatch || cellIsEmpty;
23236 if (this.cellIsBlank) {
23237 return;
23238 }
23239 this.setupDragOpenParents();
23240 this.addExpandAndContract();
23241 this.addCheckboxIfNeeded();
23242 this.addValueElement();
23243 this.setupIndent();
23244 };
23245 GroupCellRenderer.prototype.assignBlankValueToGroupFooterCell = function (params) {
23246 // this is not ideal, but it was the only way we could get footer working for the root node
23247 if (!params.value && params.node.level == -1) {
23248 params.value = '';
23249 }
23250 };
23251 // if we are doing embedded full width rows, we only show the renderer when
23252 // in the body, or if pinning in the pinned section, or if pinning and RTL,
23253 // in the right section. otherwise we would have the cell repeated in each section.
23254 GroupCellRenderer.prototype.isEmbeddedRowMismatch = function () {
23255 if (this.params.fullWidth && this.gridOptionsWrapper.isEmbedFullWidthRows()) {
23256 var pinnedLeftCell = this.params.pinned === column_1.Column.PINNED_LEFT;
23257 var pinnedRightCell = this.params.pinned === column_1.Column.PINNED_RIGHT;
23258 var bodyCell = !pinnedLeftCell && !pinnedRightCell;
23259 if (this.gridOptionsWrapper.isEnableRtl()) {
23260 if (this.columnController.isPinningLeft()) {
23261 return !pinnedRightCell;
23262 }
23263 else {
23264 return !bodyCell;
23265 }
23266 }
23267 else {
23268 if (this.columnController.isPinningLeft()) {
23269 return !pinnedLeftCell;
23270 }
23271 else {
23272 return !bodyCell;
23273 }
23274 }
23275 }
23276 else {
23277 return false;
23278 }
23279 };
23280 GroupCellRenderer.prototype.setIndent = function () {
23281 if (this.gridOptionsWrapper.isGroupHideOpenParents()) {
23282 return;
23283 }
23284 var params = this.params;
23285 var rowNode = params.node;
23286 // let paddingPx: number;
23287 var paddingCount = rowNode.uiLevel;
23288 var userProvidedPaddingPixelsTheDeprecatedWay = params.padding >= 0;
23289 if (userProvidedPaddingPixelsTheDeprecatedWay) {
23290 this.setPaddingDeprecatedWay(paddingCount, params.padding);
23291 return;
23292 }
23293 if (this.indentClass) {
23294 this.removeCssClass(this.indentClass);
23295 }
23296 this.indentClass = 'ag-row-group-indent-' + paddingCount;
23297 this.addCssClass(this.indentClass);
23298 };
23299 GroupCellRenderer.prototype.setPaddingDeprecatedWay = function (paddingCount, padding) {
23300 utils_1.Utils.doOnce(function () { return console.warn('ag-Grid: since v14.2, configuring padding for groupCellRenderer should be done with Sass variables and themes. Please see the ag-Grid documentation page for Themes, in particular the property $row-group-indent-size.'); }, 'groupCellRenderer->doDeprecatedWay');
23301 var paddingPx = paddingCount * padding;
23302 if (this.gridOptionsWrapper.isEnableRtl()) {
23303 // if doing rtl, padding is on the right
23304 this.getGui().style.paddingRight = paddingPx + 'px';
23305 }
23306 else {
23307 // otherwise it is on the left
23308 this.getGui().style.paddingLeft = paddingPx + 'px';
23309 }
23310 };
23311 GroupCellRenderer.prototype.setupIndent = function () {
23312 // only do this if an indent - as this overwrites the padding that
23313 // the theme set, which will make things look 'not aligned' for the
23314 // first group level.
23315 var node = this.params.node;
23316 var suppressPadding = this.params.suppressPadding;
23317 if (!suppressPadding) {
23318 this.addDestroyableEventListener(node, rowNode_1.RowNode.EVENT_UI_LEVEL_CHANGED, this.setIndent.bind(this));
23319 this.setIndent();
23320 }
23321 };
23322 GroupCellRenderer.prototype.addValueElement = function () {
23323 var params = this.params;
23324 var rowNode = this.displayedGroup;
23325 if (rowNode.footer) {
23326 this.createFooterCell();
23327 }
23328 else if (rowNode.hasChildren() ||
23329 utils_1.Utils.get(params.colDef, 'cellRendererParams.innerRenderer', null) ||
23330 utils_1.Utils.get(params.colDef, 'cellRendererParams.innerRendererFramework', null)) {
23331 this.createGroupCell();
23332 if (rowNode.hasChildren()) {
23333 this.addChildCount();
23334 }
23335 }
23336 else {
23337 this.createLeafCell();
23338 }
23339 };
23340 GroupCellRenderer.prototype.createFooterCell = function () {
23341 var footerValue;
23342 var footerValueGetter = this.params.footerValueGetter;
23343 if (footerValueGetter) {
23344 // params is same as we were given, except we set the value as the item to display
23345 var paramsClone = utils_1.Utils.cloneObject(this.params);
23346 paramsClone.value = this.params.value;
23347 if (typeof footerValueGetter === 'function') {
23348 footerValue = footerValueGetter(paramsClone);
23349 }
23350 else if (typeof footerValueGetter === 'string') {
23351 footerValue = this.expressionService.evaluate(footerValueGetter, paramsClone);
23352 }
23353 else {
23354 console.warn('ag-Grid: footerValueGetter should be either a function or a string (expression)');
23355 }
23356 }
23357 else {
23358 footerValue = 'Total ' + this.params.value;
23359 }
23360 this.eValue.innerHTML = footerValue;
23361 };
23362 GroupCellRenderer.prototype.createGroupCell = function () {
23363 var _this = this;
23364 var params = this.params;
23365 var rowGroupColumn = this.displayedGroup.rowGroupColumn;
23366 // we try and use the cellRenderer of the column used for the grouping if we can
23367 var columnToUse = rowGroupColumn ? rowGroupColumn : params.column;
23368 var groupName = this.params.value;
23369 var valueFormatted = columnToUse ?
23370 this.valueFormatterService.formatValue(columnToUse, params.node, params.scope, groupName) : null;
23371 params.valueFormatted = valueFormatted;
23372 var rendererPromise;
23373 if (params.fullWidth == true) {
23374 rendererPromise = this.cellRendererService.useFullWidthGroupRowInnerCellRenderer(this.eValue, params);
23375 }
23376 else {
23377 rendererPromise = this.cellRendererService.useInnerCellRenderer(this.params.colDef.cellRendererParams, columnToUse.getColDef(), this.eValue, params);
23378 }
23379 // retain a reference to the created renderer - we'll use this later for cleanup (in destroy)
23380 if (rendererPromise) {
23381 rendererPromise.then(function (value) {
23382 _this.innerCellRenderer = value;
23383 });
23384 }
23385 };
23386 GroupCellRenderer.prototype.addChildCount = function () {
23387 // only include the child count if it's included, eg if user doing custom aggregation,
23388 // then this could be left out, or set to -1, ie no child count
23389 if (this.params.suppressCount) {
23390 return;
23391 }
23392 this.addDestroyableEventListener(this.displayedGroup, rowNode_1.RowNode.EVENT_ALL_CHILDREN_COUNT_CHANGED, this.updateChildCount.bind(this));
23393 // filtering changes the child count, so need to cater for it
23394 this.updateChildCount();
23395 };
23396 GroupCellRenderer.prototype.updateChildCount = function () {
23397 var allChildrenCount = this.displayedGroup.allChildrenCount;
23398 this.eChildCount.innerHTML = allChildrenCount >= 0 ? "(" + allChildrenCount + ")" : "";
23399 };
23400 GroupCellRenderer.prototype.createLeafCell = function () {
23401 if (utils_1.Utils.exists(this.params.value)) {
23402 this.eValue.innerHTML = this.params.valueFormatted ? this.params.valueFormatted : this.params.value;
23403 }
23404 };
23405 GroupCellRenderer.prototype.isUserWantsSelected = function () {
23406 var paramsCheckbox = this.params.checkbox;
23407 if (typeof paramsCheckbox === 'function') {
23408 return paramsCheckbox(this.params);
23409 }
23410 else {
23411 return paramsCheckbox === true;
23412 }
23413 };
23414 GroupCellRenderer.prototype.addCheckboxIfNeeded = function () {
23415 var rowNode = this.displayedGroup;
23416 var checkboxNeeded = this.isUserWantsSelected()
23417 && !rowNode.footer
23418 && !rowNode.rowPinned
23419 && !rowNode.detail;
23420 if (checkboxNeeded) {
23421 var cbSelectionComponent_1 = new checkboxSelectionComponent_1.CheckboxSelectionComponent();
23422 this.context.wireBean(cbSelectionComponent_1);
23423 cbSelectionComponent_1.init({ rowNode: rowNode, column: this.params.column });
23424 this.eCheckbox.appendChild(cbSelectionComponent_1.getGui());
23425 this.addDestroyFunc(function () { return cbSelectionComponent_1.destroy(); });
23426 }
23427 };
23428 GroupCellRenderer.prototype.addExpandAndContract = function () {
23429 var params = this.params;
23430 var eGroupCell = params.eGridCell;
23431 var eExpandedIcon = utils_1.Utils.createIconNoSpan('groupExpanded', this.gridOptionsWrapper, null);
23432 var eContractedIcon = utils_1.Utils.createIconNoSpan('groupContracted', this.gridOptionsWrapper, null);
23433 this.eExpanded.appendChild(eExpandedIcon);
23434 this.eContracted.appendChild(eContractedIcon);
23435 this.addDestroyableEventListener(this.eExpanded, 'click', this.onExpandClicked.bind(this));
23436 this.addDestroyableEventListener(this.eContracted, 'click', this.onExpandClicked.bind(this));
23437 // expand / contract as the user hits enter
23438 this.addDestroyableEventListener(eGroupCell, 'keydown', this.onKeyDown.bind(this));
23439 this.addDestroyableEventListener(params.node, rowNode_1.RowNode.EVENT_EXPANDED_CHANGED, this.showExpandAndContractIcons.bind(this));
23440 this.showExpandAndContractIcons();
23441 // because we don't show the expand / contract when there are no children, we need to check every time
23442 // the number of children change.
23443 this.addDestroyableEventListener(this.displayedGroup, rowNode_1.RowNode.EVENT_ALL_CHILDREN_COUNT_CHANGED, this.onAllChildrenCountChanged.bind(this));
23444 // if editing groups, then double click is to start editing
23445 if (!this.gridOptionsWrapper.isEnableGroupEdit() && this.isExpandable() && !params.suppressDoubleClickExpand) {
23446 this.addDestroyableEventListener(eGroupCell, 'dblclick', this.onCellDblClicked.bind(this));
23447 }
23448 };
23449 GroupCellRenderer.prototype.onAllChildrenCountChanged = function () {
23450 // maybe if no children now, we should hide the expand / contract icons
23451 this.showExpandAndContractIcons();
23452 // if we have no children, this impacts the indent
23453 this.setIndent();
23454 };
23455 GroupCellRenderer.prototype.onKeyDown = function (event) {
23456 if (utils_1.Utils.isKeyPressed(event, constants_1.Constants.KEY_ENTER)) {
23457 var cellEditable = this.params.column.isCellEditable(this.params.node);
23458 if (cellEditable) {
23459 return;
23460 }
23461 event.preventDefault();
23462 this.onExpandOrContract();
23463 }
23464 };
23465 GroupCellRenderer.prototype.setupDragOpenParents = function () {
23466 var column = this.params.column;
23467 var rowNode = this.params.node;
23468 if (!this.gridOptionsWrapper.isGroupHideOpenParents()) {
23469 this.draggedFromHideOpenParents = false;
23470 }
23471 else if (!rowNode.hasChildren()) {
23472 // if we are here, and we are not a group, then we must of been dragged down,
23473 // as otherwise the cell would be blank, and if cell is blank, this method is never called.
23474 this.draggedFromHideOpenParents = true;
23475 }
23476 else {
23477 var rowGroupColumn = rowNode.rowGroupColumn;
23478 // if the displayGroup column for this col matches the rowGroupColumn we grouped by for this node,
23479 // then nothing was dragged down
23480 this.draggedFromHideOpenParents = !column.isRowGroupDisplayed(rowGroupColumn.getId());
23481 }
23482 if (this.draggedFromHideOpenParents) {
23483 var pointer = rowNode.parent;
23484 while (true) {
23485 if (utils_1.Utils.missing(pointer)) {
23486 break;
23487 }
23488 if (pointer.rowGroupColumn && column.isRowGroupDisplayed(pointer.rowGroupColumn.getId())) {
23489 this.displayedGroup = pointer;
23490 break;
23491 }
23492 pointer = pointer.parent;
23493 }
23494 }
23495 // if we didn't find a displayed group, set it to the row node
23496 if (utils_1.Utils.missing(this.displayedGroup)) {
23497 this.displayedGroup = rowNode;
23498 }
23499 };
23500 GroupCellRenderer.prototype.onExpandClicked = function (mouseEvent) {
23501 if (utils_1.Utils.isStopPropagationForAgGrid(mouseEvent)) {
23502 return;
23503 }
23504 // so if we expand a node, it does not also get selected.
23505 utils_1.Utils.stopPropagationForAgGrid(mouseEvent);
23506 this.onExpandOrContract();
23507 };
23508 GroupCellRenderer.prototype.onCellDblClicked = function (mouseEvent) {
23509 if (utils_1.Utils.isStopPropagationForAgGrid(mouseEvent)) {
23510 return;
23511 }
23512 // we want to avoid acting on double click events on the expand / contract icon,
23513 // as that icons already has expand / collapse functionality on it. otherwise if
23514 // the icon was double clicked, we would get 'click', 'click', 'dblclick' which
23515 // is open->close->open, however double click should be open->close only.
23516 var targetIsExpandIcon = utils_1.Utils.isElementInEventPath(this.eExpanded, mouseEvent)
23517 || utils_1.Utils.isElementInEventPath(this.eContracted, mouseEvent);
23518 if (!targetIsExpandIcon) {
23519 this.onExpandOrContract();
23520 }
23521 };
23522 GroupCellRenderer.prototype.onExpandOrContract = function () {
23523 // must use the displayedGroup, so if data was dragged down, we expand the parent, not this row
23524 var rowNode = this.displayedGroup;
23525 rowNode.setExpanded(!rowNode.expanded);
23526 };
23527 GroupCellRenderer.prototype.isExpandable = function () {
23528 var rowNode = this.params.node;
23529 var reducedLeafNode = this.columnController.isPivotMode() && rowNode.leafGroup;
23530 return this.draggedFromHideOpenParents ||
23531 (rowNode.isExpandable() && !rowNode.footer && !reducedLeafNode);
23532 };
23533 GroupCellRenderer.prototype.showExpandAndContractIcons = function () {
23534 var rowNode = this.params.node;
23535 if (this.isExpandable()) {
23536 // if expandable, show one based on expand state.
23537 // if we were dragged down, means our parent is always expanded
23538 var expanded = this.draggedFromHideOpenParents ? true : rowNode.expanded;
23539 utils_1.Utils.setVisible(this.eContracted, !expanded);
23540 utils_1.Utils.setVisible(this.eExpanded, expanded);
23541 }
23542 else {
23543 // it not expandable, show neither
23544 utils_1.Utils.setVisible(this.eExpanded, false);
23545 utils_1.Utils.setVisible(this.eContracted, false);
23546 }
23547 var displayedGroup = this.displayedGroup;
23548 // compensation padding for leaf nodes, so there is blank space instead of the expand icon
23549 var pivotModeAndLeafGroup = this.columnController.isPivotMode() && displayedGroup.leafGroup;
23550 var notExpandable = !displayedGroup.isExpandable();
23551 var addLeafIndentClass = displayedGroup.footer || notExpandable || pivotModeAndLeafGroup;
23552 this.addOrRemoveCssClass('ag-row-group-leaf-indent', addLeafIndentClass);
23553 };
23554 GroupCellRenderer.prototype.destroy = function () {
23555 _super.prototype.destroy.call(this);
23556 if (this.innerCellRenderer && this.innerCellRenderer.destroy) {
23557 this.innerCellRenderer.destroy();
23558 }
23559 };
23560 GroupCellRenderer.prototype.refresh = function () {
23561 return false;
23562 };
23563 GroupCellRenderer.TEMPLATE = '<span>' +
23564 '<span class="ag-group-expanded" ref="eExpanded"></span>' +
23565 '<span class="ag-group-contracted" ref="eContracted"></span>' +
23566 '<span class="ag-group-checkbox" ref="eCheckbox"></span>' +
23567 '<span class="ag-group-value" ref="eValue"></span>' +
23568 '<span class="ag-group-child-count" ref="eChildCount"></span>' +
23569 '</span>';
23570 __decorate([
23571 context_1.Autowired('gridOptionsWrapper'),
23572 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
23573 ], GroupCellRenderer.prototype, "gridOptionsWrapper", void 0);
23574 __decorate([
23575 context_1.Autowired('expressionService'),
23576 __metadata("design:type", expressionService_1.ExpressionService)
23577 ], GroupCellRenderer.prototype, "expressionService", void 0);
23578 __decorate([
23579 context_1.Autowired('eventService'),
23580 __metadata("design:type", eventService_1.EventService)
23581 ], GroupCellRenderer.prototype, "eventService", void 0);
23582 __decorate([
23583 context_1.Autowired('cellRendererService'),
23584 __metadata("design:type", cellRendererService_1.CellRendererService)
23585 ], GroupCellRenderer.prototype, "cellRendererService", void 0);
23586 __decorate([
23587 context_1.Autowired('valueFormatterService'),
23588 __metadata("design:type", valueFormatterService_1.ValueFormatterService)
23589 ], GroupCellRenderer.prototype, "valueFormatterService", void 0);
23590 __decorate([
23591 context_1.Autowired('context'),
23592 __metadata("design:type", context_1.Context)
23593 ], GroupCellRenderer.prototype, "context", void 0);
23594 __decorate([
23595 context_1.Autowired('columnController'),
23596 __metadata("design:type", columnController_1.ColumnController)
23597 ], GroupCellRenderer.prototype, "columnController", void 0);
23598 __decorate([
23599 context_1.Autowired('mouseEventService'),
23600 __metadata("design:type", mouseEventService_1.MouseEventService)
23601 ], GroupCellRenderer.prototype, "mouseEventService", void 0);
23602 __decorate([
23603 componentAnnotations_1.RefSelector('eExpanded'),
23604 __metadata("design:type", HTMLElement)
23605 ], GroupCellRenderer.prototype, "eExpanded", void 0);
23606 __decorate([
23607 componentAnnotations_1.RefSelector('eContracted'),
23608 __metadata("design:type", HTMLElement)
23609 ], GroupCellRenderer.prototype, "eContracted", void 0);
23610 __decorate([
23611 componentAnnotations_1.RefSelector('eCheckbox'),
23612 __metadata("design:type", HTMLElement)
23613 ], GroupCellRenderer.prototype, "eCheckbox", void 0);
23614 __decorate([
23615 componentAnnotations_1.RefSelector('eValue'),
23616 __metadata("design:type", HTMLElement)
23617 ], GroupCellRenderer.prototype, "eValue", void 0);
23618 __decorate([
23619 componentAnnotations_1.RefSelector('eChildCount'),
23620 __metadata("design:type", HTMLElement)
23621 ], GroupCellRenderer.prototype, "eChildCount", void 0);
23622 return GroupCellRenderer;
23623}(component_1.Component));
23624exports.GroupCellRenderer = GroupCellRenderer;
23625
23626
23627/***/ }),
23628/* 75 */
23629/***/ (function(module, exports, __webpack_require__) {
23630
23631"use strict";
23632/**
23633 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
23634 * @version v18.1.2
23635 * @link http://www.ag-grid.com/
23636 * @license MIT
23637 */
23638
23639var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
23640 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
23641 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
23642 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
23643 return c > 3 && r && Object.defineProperty(target, key, r), r;
23644};
23645var __metadata = (this && this.__metadata) || function (k, v) {
23646 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
23647};
23648Object.defineProperty(exports, "__esModule", { value: true });
23649var context_1 = __webpack_require__(0);
23650var expressionService_1 = __webpack_require__(21);
23651var StylingService = (function () {
23652 function StylingService() {
23653 }
23654 StylingService.prototype.processAllCellClasses = function (colDef, params, onApplicableClass, onNotApplicableClass) {
23655 this.processClassRules(colDef.cellClassRules, params, onApplicableClass, onNotApplicableClass);
23656 this.processStaticCellClasses(colDef, params, onApplicableClass);
23657 };
23658 StylingService.prototype.processClassRules = function (classRules, params, onApplicableClass, onNotApplicableClass) {
23659 if (typeof classRules === 'object' && classRules !== null) {
23660 var classNames = Object.keys(classRules);
23661 for (var i = 0; i < classNames.length; i++) {
23662 var className = classNames[i];
23663 var rule = classRules[className];
23664 var resultOfRule = void 0;
23665 if (typeof rule === 'string') {
23666 resultOfRule = this.expressionService.evaluate(rule, params);
23667 }
23668 else if (typeof rule === 'function') {
23669 resultOfRule = rule(params);
23670 }
23671 if (resultOfRule) {
23672 onApplicableClass(className);
23673 }
23674 else if (onNotApplicableClass) {
23675 onNotApplicableClass(className);
23676 }
23677 }
23678 }
23679 };
23680 StylingService.prototype.processStaticCellClasses = function (colDef, params, onApplicableClass) {
23681 var cellClass = colDef.cellClass;
23682 if (cellClass) {
23683 var classOrClasses = void 0;
23684 if (typeof colDef.cellClass === 'function') {
23685 var cellClassFunc = colDef.cellClass;
23686 classOrClasses = cellClassFunc(params);
23687 }
23688 else {
23689 classOrClasses = colDef.cellClass;
23690 }
23691 if (typeof classOrClasses === 'string') {
23692 onApplicableClass(classOrClasses);
23693 }
23694 else if (Array.isArray(classOrClasses)) {
23695 classOrClasses.forEach(function (cssClassItem) {
23696 onApplicableClass(cssClassItem);
23697 });
23698 }
23699 }
23700 };
23701 __decorate([
23702 context_1.Autowired('expressionService'),
23703 __metadata("design:type", expressionService_1.ExpressionService)
23704 ], StylingService.prototype, "expressionService", void 0);
23705 StylingService = __decorate([
23706 context_1.Bean('stylingService')
23707 ], StylingService);
23708 return StylingService;
23709}());
23710exports.StylingService = StylingService;
23711
23712
23713/***/ }),
23714/* 76 */
23715/***/ (function(module, exports, __webpack_require__) {
23716
23717"use strict";
23718/**
23719 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
23720 * @version v18.1.2
23721 * @link http://www.ag-grid.com/
23722 * @license MIT
23723 */
23724
23725var __extends = (this && this.__extends) || (function () {
23726 var extendStatics = Object.setPrototypeOf ||
23727 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
23728 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
23729 return function (d, b) {
23730 extendStatics(d, b);
23731 function __() { this.constructor = d; }
23732 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
23733 };
23734})();
23735var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
23736 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
23737 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
23738 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
23739 return c > 3 && r && Object.defineProperty(target, key, r), r;
23740};
23741var __metadata = (this && this.__metadata) || function (k, v) {
23742 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
23743};
23744Object.defineProperty(exports, "__esModule", { value: true });
23745var beanStub_1 = __webpack_require__(13);
23746var context_1 = __webpack_require__(0);
23747var columnHoverService_1 = __webpack_require__(47);
23748var HoverFeature = (function (_super) {
23749 __extends(HoverFeature, _super);
23750 function HoverFeature(columns, element) {
23751 var _this = _super.call(this) || this;
23752 _this.columns = columns;
23753 _this.addMouseHoverListeners(element);
23754 return _this;
23755 }
23756 HoverFeature.prototype.addMouseHoverListeners = function (element) {
23757 this.addDestroyableEventListener(element, 'mouseout', this.onMouseOut.bind(this));
23758 this.addDestroyableEventListener(element, 'mouseover', this.onMouseOver.bind(this));
23759 };
23760 HoverFeature.prototype.onMouseOut = function () {
23761 this.columnHoverService.clearMouseOver();
23762 };
23763 HoverFeature.prototype.onMouseOver = function () {
23764 this.columnHoverService.setMouseOver(this.columns);
23765 };
23766 __decorate([
23767 context_1.Autowired('columnHoverService'),
23768 __metadata("design:type", columnHoverService_1.ColumnHoverService)
23769 ], HoverFeature.prototype, "columnHoverService", void 0);
23770 return HoverFeature;
23771}(beanStub_1.BeanStub));
23772exports.HoverFeature = HoverFeature;
23773
23774
23775/***/ }),
23776/* 77 */
23777/***/ (function(module, exports, __webpack_require__) {
23778
23779"use strict";
23780/**
23781 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
23782 * @version v18.1.2
23783 * @link http://www.ag-grid.com/
23784 * @license MIT
23785 */
23786
23787var __extends = (this && this.__extends) || (function () {
23788 var extendStatics = Object.setPrototypeOf ||
23789 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
23790 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
23791 return function (d, b) {
23792 extendStatics(d, b);
23793 function __() { this.constructor = d; }
23794 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
23795 };
23796})();
23797var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
23798 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
23799 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
23800 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
23801 return c > 3 && r && Object.defineProperty(target, key, r), r;
23802};
23803var __metadata = (this && this.__metadata) || function (k, v) {
23804 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
23805};
23806Object.defineProperty(exports, "__esModule", { value: true });
23807var component_1 = __webpack_require__(8);
23808var utils_1 = __webpack_require__(1);
23809var constants_1 = __webpack_require__(9);
23810var context_1 = __webpack_require__(0);
23811var gridOptionsWrapper_1 = __webpack_require__(2);
23812var valueFormatterService_1 = __webpack_require__(45);
23813var SelectCellEditor = (function (_super) {
23814 __extends(SelectCellEditor, _super);
23815 function SelectCellEditor() {
23816 var _this = _super.call(this, '<div class="ag-cell-edit-input"><select class="ag-cell-edit-input"/></div>') || this;
23817 _this.eSelect = _this.getGui().querySelector('select');
23818 return _this;
23819 }
23820 SelectCellEditor.prototype.init = function (params) {
23821 var _this = this;
23822 this.focusAfterAttached = params.cellStartedEdit;
23823 if (utils_1.Utils.missing(params.values)) {
23824 console.log('ag-Grid: no values found for select cellEditor');
23825 return;
23826 }
23827 params.values.forEach(function (value) {
23828 var option = document.createElement('option');
23829 option.value = value;
23830 var valueFormatted = _this.valueFormatterService.formatValue(params.column, null, null, value);
23831 var valueFormattedExits = valueFormatted !== null && valueFormatted !== undefined;
23832 option.text = valueFormattedExits ? valueFormatted : value;
23833 if (params.value === value) {
23834 option.selected = true;
23835 }
23836 _this.eSelect.appendChild(option);
23837 });
23838 // we don't want to add this if full row editing, otherwise selecting will stop the
23839 // full row editing.
23840 if (!this.gridOptionsWrapper.isFullRowEdit()) {
23841 this.addDestroyableEventListener(this.eSelect, 'change', function () { return params.stopEditing(); });
23842 }
23843 this.addDestroyableEventListener(this.eSelect, 'keydown', function (event) {
23844 var isNavigationKey = event.keyCode === constants_1.Constants.KEY_UP || event.keyCode === constants_1.Constants.KEY_DOWN;
23845 if (isNavigationKey) {
23846 event.stopPropagation();
23847 }
23848 });
23849 this.addDestroyableEventListener(this.eSelect, 'mousedown', function (event) {
23850 event.stopPropagation();
23851 });
23852 };
23853 SelectCellEditor.prototype.afterGuiAttached = function () {
23854 if (this.focusAfterAttached) {
23855 this.eSelect.focus();
23856 }
23857 };
23858 SelectCellEditor.prototype.focusIn = function () {
23859 this.eSelect.focus();
23860 };
23861 SelectCellEditor.prototype.getValue = function () {
23862 return this.eSelect.value;
23863 };
23864 __decorate([
23865 context_1.Autowired('gridOptionsWrapper'),
23866 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
23867 ], SelectCellEditor.prototype, "gridOptionsWrapper", void 0);
23868 __decorate([
23869 context_1.Autowired('valueFormatterService'),
23870 __metadata("design:type", valueFormatterService_1.ValueFormatterService)
23871 ], SelectCellEditor.prototype, "valueFormatterService", void 0);
23872 return SelectCellEditor;
23873}(component_1.Component));
23874exports.SelectCellEditor = SelectCellEditor;
23875
23876
23877/***/ }),
23878/* 78 */
23879/***/ (function(module, exports, __webpack_require__) {
23880
23881"use strict";
23882/**
23883 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
23884 * @version v18.1.2
23885 * @link http://www.ag-grid.com/
23886 * @license MIT
23887 */
23888
23889var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
23890 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
23891 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
23892 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
23893 return c > 3 && r && Object.defineProperty(target, key, r), r;
23894};
23895var __metadata = (this && this.__metadata) || function (k, v) {
23896 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
23897};
23898Object.defineProperty(exports, "__esModule", { value: true });
23899var context_1 = __webpack_require__(0);
23900var componentMetadataProvider_1 = __webpack_require__(79);
23901var utils_1 = __webpack_require__(1);
23902var AgComponentUtils = (function () {
23903 function AgComponentUtils() {
23904 }
23905 AgComponentUtils.prototype.adaptFunction = function (propertyName, hardcodedJsFunction, type, source) {
23906 if (hardcodedJsFunction == null)
23907 return {
23908 component: null,
23909 type: type,
23910 source: source,
23911 dynamicParams: null
23912 };
23913 var metadata = this.componentMetadataProvider.retrieve(propertyName);
23914 if (metadata && metadata.functionAdapter) {
23915 return {
23916 type: type,
23917 component: metadata.functionAdapter(hardcodedJsFunction),
23918 source: source,
23919 dynamicParams: null
23920 };
23921 }
23922 return null;
23923 };
23924 AgComponentUtils.prototype.adaptCellRendererFunction = function (callback) {
23925 var Adapter = (function () {
23926 function Adapter() {
23927 }
23928 Adapter.prototype.refresh = function (params) {
23929 return false;
23930 };
23931 Adapter.prototype.getGui = function () {
23932 var callbackResult = callback(this.params);
23933 var type = typeof callbackResult;
23934 if (type === 'string' || type === 'number' || type === 'boolean') {
23935 return utils_1._.loadTemplate('<span>' + callbackResult + '</span>');
23936 }
23937 else {
23938 return callbackResult;
23939 }
23940 };
23941 Adapter.prototype.init = function (params) {
23942 this.params = params;
23943 };
23944 return Adapter;
23945 }());
23946 return Adapter;
23947 };
23948 AgComponentUtils.prototype.doesImplementIComponent = function (candidate) {
23949 if (!candidate)
23950 return false;
23951 return candidate.prototype && 'getGui' in candidate.prototype;
23952 };
23953 __decorate([
23954 context_1.Autowired("componentMetadataProvider"),
23955 __metadata("design:type", componentMetadataProvider_1.ComponentMetadataProvider)
23956 ], AgComponentUtils.prototype, "componentMetadataProvider", void 0);
23957 AgComponentUtils = __decorate([
23958 context_1.Bean("agComponentUtils")
23959 ], AgComponentUtils);
23960 return AgComponentUtils;
23961}());
23962exports.AgComponentUtils = AgComponentUtils;
23963
23964
23965/***/ }),
23966/* 79 */
23967/***/ (function(module, exports, __webpack_require__) {
23968
23969"use strict";
23970/**
23971 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
23972 * @version v18.1.2
23973 * @link http://www.ag-grid.com/
23974 * @license MIT
23975 */
23976
23977var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
23978 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
23979 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
23980 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
23981 return c > 3 && r && Object.defineProperty(target, key, r), r;
23982};
23983var __metadata = (this && this.__metadata) || function (k, v) {
23984 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
23985};
23986Object.defineProperty(exports, "__esModule", { value: true });
23987var context_1 = __webpack_require__(0);
23988var agComponentUtils_1 = __webpack_require__(78);
23989var ComponentMetadataProvider = (function () {
23990 function ComponentMetadataProvider() {
23991 }
23992 ComponentMetadataProvider.prototype.postConstruct = function () {
23993 this.componentMetaData = {
23994 dateComponent: {
23995 mandatoryMethodList: ['getDate', 'setDate'],
23996 optionalMethodList: ['afterGuiAttached']
23997 },
23998 detailCellRenderer: {
23999 mandatoryMethodList: [],
24000 optionalMethodList: []
24001 },
24002 headerComponent: {
24003 mandatoryMethodList: [],
24004 optionalMethodList: []
24005 },
24006 headerGroupComponent: {
24007 mandatoryMethodList: [],
24008 optionalMethodList: []
24009 },
24010 loadingOverlayComponent: {
24011 mandatoryMethodList: [],
24012 optionalMethodList: []
24013 },
24014 noRowsOverlayComponent: {
24015 mandatoryMethodList: [],
24016 optionalMethodList: []
24017 },
24018 floatingFilterComponent: {
24019 mandatoryMethodList: ['onParentModelChanged'],
24020 optionalMethodList: ['afterGuiAttached']
24021 },
24022 floatingFilterWrapperComponent: {
24023 mandatoryMethodList: [],
24024 optionalMethodList: []
24025 },
24026 cellRenderer: {
24027 mandatoryMethodList: [],
24028 optionalMethodList: ['refresh', 'afterGuiAttached'],
24029 functionAdapter: this.agComponentUtils.adaptCellRendererFunction.bind(this.agComponentUtils)
24030 },
24031 cellEditor: {
24032 mandatoryMethodList: ['getValue'],
24033 optionalMethodList: ['isPopup', 'isCancelBeforeStart', 'isCancelAfterEnd', 'focusIn', 'focusOut', 'afterGuiAttached']
24034 },
24035 innerRenderer: {
24036 mandatoryMethodList: [],
24037 optionalMethodList: ['afterGuiAttached'],
24038 functionAdapter: this.agComponentUtils.adaptCellRendererFunction.bind(this.agComponentUtils)
24039 },
24040 fullWidthCellRenderer: {
24041 mandatoryMethodList: [],
24042 optionalMethodList: ['afterGuiAttached'],
24043 functionAdapter: this.agComponentUtils.adaptCellRendererFunction.bind(this.agComponentUtils)
24044 },
24045 pinnedRowCellRenderer: {
24046 mandatoryMethodList: [],
24047 optionalMethodList: ['afterGuiAttached'],
24048 functionAdapter: this.agComponentUtils.adaptCellRendererFunction.bind(this.agComponentUtils)
24049 },
24050 groupRowInnerRenderer: {
24051 mandatoryMethodList: [],
24052 optionalMethodList: ['afterGuiAttached'],
24053 functionAdapter: this.agComponentUtils.adaptCellRendererFunction.bind(this.agComponentUtils)
24054 },
24055 groupRowRenderer: {
24056 mandatoryMethodList: [],
24057 optionalMethodList: ['afterGuiAttached'],
24058 functionAdapter: this.agComponentUtils.adaptCellRendererFunction.bind(this.agComponentUtils)
24059 },
24060 filter: {
24061 mandatoryMethodList: ['isFilterActive', 'doesFilterPass', 'getModel', 'setModel'],
24062 optionalMethodList: ['afterGuiAttached', 'onNewRowsLoaded', 'getModelAsString', 'onFloatingFilterChanged', 'afterGuiAttached']
24063 },
24064 filterComponent: {
24065 mandatoryMethodList: ['isFilterActive', 'doesFilterPass', 'getModel', 'setModel'],
24066 optionalMethodList: ['afterGuiAttached', 'onNewRowsLoaded', 'getModelAsString', 'onFloatingFilterChanged', 'afterGuiAttached']
24067 }
24068 };
24069 };
24070 ComponentMetadataProvider.prototype.retrieve = function (name) {
24071 return this.componentMetaData[name];
24072 };
24073 __decorate([
24074 context_1.Autowired("agComponentUtils"),
24075 __metadata("design:type", agComponentUtils_1.AgComponentUtils)
24076 ], ComponentMetadataProvider.prototype, "agComponentUtils", void 0);
24077 __decorate([
24078 context_1.PostConstruct,
24079 __metadata("design:type", Function),
24080 __metadata("design:paramtypes", []),
24081 __metadata("design:returntype", void 0)
24082 ], ComponentMetadataProvider.prototype, "postConstruct", null);
24083 ComponentMetadataProvider = __decorate([
24084 context_1.Bean("componentMetadataProvider")
24085 ], ComponentMetadataProvider);
24086 return ComponentMetadataProvider;
24087}());
24088exports.ComponentMetadataProvider = ComponentMetadataProvider;
24089
24090
24091/***/ }),
24092/* 80 */
24093/***/ (function(module, exports, __webpack_require__) {
24094
24095"use strict";
24096/**
24097 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
24098 * @version v18.1.2
24099 * @link http://www.ag-grid.com/
24100 * @license MIT
24101 */
24102
24103var __extends = (this && this.__extends) || (function () {
24104 var extendStatics = Object.setPrototypeOf ||
24105 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
24106 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
24107 return function (d, b) {
24108 extendStatics(d, b);
24109 function __() { this.constructor = d; }
24110 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
24111 };
24112})();
24113var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
24114 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
24115 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
24116 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
24117 return c > 3 && r && Object.defineProperty(target, key, r), r;
24118};
24119var __metadata = (this && this.__metadata) || function (k, v) {
24120 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
24121};
24122Object.defineProperty(exports, "__esModule", { value: true });
24123var utils_1 = __webpack_require__(1);
24124var resizeObserver_1 = __webpack_require__(98);
24125var gridOptionsWrapper_1 = __webpack_require__(2);
24126var columnController_1 = __webpack_require__(4);
24127var columnApi_1 = __webpack_require__(7);
24128var rowRenderer_1 = __webpack_require__(22);
24129var context_1 = __webpack_require__(0);
24130var eventService_1 = __webpack_require__(3);
24131var events_1 = __webpack_require__(5);
24132var dragService_1 = __webpack_require__(42);
24133var constants_1 = __webpack_require__(9);
24134var selectionController_1 = __webpack_require__(19);
24135var csvCreator_1 = __webpack_require__(49);
24136var mouseEventService_1 = __webpack_require__(46);
24137var focusedCellController_1 = __webpack_require__(24);
24138var scrollVisibleService_1 = __webpack_require__(38);
24139var rowContainerComponent_1 = __webpack_require__(133);
24140var paginationProxy_1 = __webpack_require__(31);
24141var popupEditorWrapper_1 = __webpack_require__(71);
24142var alignedGridsService_1 = __webpack_require__(60);
24143var pinnedRowModel_1 = __webpack_require__(32);
24144var gridApi_1 = __webpack_require__(6);
24145var animationFrameService_1 = __webpack_require__(39);
24146var rowComp_1 = __webpack_require__(52);
24147var navigationService_1 = __webpack_require__(99);
24148var valueService_1 = __webpack_require__(17);
24149var touchListener_1 = __webpack_require__(48);
24150var componentRecipes_1 = __webpack_require__(23);
24151var dragAndDropService_1 = __webpack_require__(16);
24152var rowDragFeature_1 = __webpack_require__(134);
24153var heightScaler_1 = __webpack_require__(59);
24154var component_1 = __webpack_require__(8);
24155var autoHeightCalculator_1 = __webpack_require__(81);
24156var columnAnimationService_1 = __webpack_require__(55);
24157var autoWidthCalculator_1 = __webpack_require__(41);
24158var beans_1 = __webpack_require__(30);
24159var componentAnnotations_1 = __webpack_require__(11);
24160var headerRootComp_1 = __webpack_require__(82);
24161// in the html below, it is important that there are no white space between some of the divs, as if there is white space,
24162// it won't render correctly in safari, as safari renders white space as a gap
24163var GRID_PANEL_NORMAL_TEMPLATE = "<div class=\"ag-root ag-font-style\" role=\"grid\">\n <ag-header-root ref=\"headerRoot\"></ag-header-root>\n <div class=\"ag-floating-top\" ref=\"eTop\" role=\"presentation\">\n <div class=\"ag-pinned-left-floating-top\" ref=\"eLeftTop\" role=\"presentation\"></div>\n <div class=\"ag-floating-top-viewport\" ref=\"eTopViewport\" role=\"presentation\">\n <div class=\"ag-floating-top-container\" ref=\"eTopContainer\" role=\"presentation\"></div>\n </div>\n <div class=\"ag-pinned-right-floating-top\" ref=\"eRightTop\" role=\"presentation\"></div>\n <div class=\"ag-floating-top-full-width-container\" ref=\"eTopFullWidthContainer\" role=\"presentation\"></div>\n </div>\n <div class=\"ag-body\" ref=\"eBody\" role=\"presentation\">\n <div class=\"ag-pinned-left-cols-viewport-wrapper\" ref=\"eLeftViewportWrapper\" role=\"presentation\">\n <div class=\"ag-pinned-left-cols-viewport\" ref=\"eLeftViewport\" role=\"presentation\">\n <div class=\"ag-pinned-left-cols-container\" ref=\"eLeftContainer\" role=\"presentation\"></div>\n </div>\n </div>\n <div class=\"ag-body-viewport-wrapper\" role=\"presentation\">\n <div class=\"ag-body-viewport\" ref=\"eBodyViewport\" role=\"presentation\">\n <div class=\"ag-body-container\" ref=\"eBodyContainer\" role=\"presentation\"></div>\n </div>\n </div>\n <div class=\"ag-pinned-right-cols-viewport-wrapper\" ref=\"eRightViewportWrapper\" role=\"presentation\">\n <div class=\"ag-pinned-right-cols-viewport\" ref=\"eRightViewport\" role=\"presentation\">\n <div class=\"ag-pinned-right-cols-container\" ref=\"eRightContainer\" role=\"presentation\"></div>\n </div>\n </div>\n <div class=\"ag-full-width-viewport-wrapper\" ref=\"eFullWidthViewportWrapper\" role=\"presentation\">\n <div class=\"ag-full-width-viewport\" ref=\"eFullWidthViewport\" role=\"presentation\">\n <div class=\"ag-full-width-container\" ref=\"eFullWidthContainer\" role=\"presentation\"></div>\n </div>\n </div>\n </div>\n <div class=\"ag-floating-bottom\" ref=\"eBottom\" role=\"presentation\">\n <div class=\"ag-pinned-left-floating-bottom\" ref=\"eLeftBottom\" role=\"presentation\"></div>\n <div class=\"ag-floating-bottom-viewport\" ref=\"eBottomViewport\" role=\"presentation\">\n <div class=\"ag-floating-bottom-container\" ref=\"eBottomContainer\" role=\"presentation\"></div>\n </div>\n <div class=\"ag-pinned-right-floating-bottom\" ref=\"eRightBottom\" role=\"presentation\"></div>\n <div class=\"ag-floating-bottom-full-width-container\" ref=\"eBottomFullWidthContainer\" role=\"presentation\"></div>\n </div>\n <div class=\"ag-overlay\" ref=\"eOverlay\"></div>\n </div>";
24164var GridPanel = (function (_super) {
24165 __extends(GridPanel, _super);
24166 function GridPanel() {
24167 var _this = _super.call(this, GRID_PANEL_NORMAL_TEMPLATE) || this;
24168 _this.scrollLeft = -1;
24169 _this.nextScrollLeft = -1;
24170 _this.scrollTop = -1;
24171 _this.nextScrollTop = -1;
24172 _this.verticalRedrawNeeded = false;
24173 return _this;
24174 }
24175 GridPanel.prototype.getVScrollPosition = function () {
24176 var result = {
24177 top: this.eBodyViewport.scrollTop,
24178 bottom: this.eBodyViewport.scrollTop + this.eBodyViewport.offsetHeight
24179 };
24180 return result;
24181 };
24182 // used by range controller
24183 GridPanel.prototype.getHScrollPosition = function () {
24184 var result = {
24185 left: this.eBodyViewport.scrollLeft,
24186 right: this.eBodyViewport.scrollTop + this.eBodyViewport.offsetWidth
24187 };
24188 return result;
24189 };
24190 // we override this, as the base class is missing the annotation
24191 GridPanel.prototype.destroy = function () {
24192 _super.prototype.destroy.call(this);
24193 };
24194 GridPanel.prototype.onRowDataChanged = function () {
24195 this.showOrHideOverlay();
24196 };
24197 GridPanel.prototype.showOrHideOverlay = function () {
24198 if (this.paginationProxy.isEmpty() && !this.gridOptionsWrapper.isSuppressNoRowsOverlay()) {
24199 this.showNoRowsOverlay();
24200 }
24201 else {
24202 this.hideOverlay();
24203 }
24204 };
24205 GridPanel.prototype.onNewColumnsLoaded = function () {
24206 // hide overlay if columns and rows exist, this can happen if columns are loaded after data.
24207 // this problem exists before of the race condition between the services (column controller in this case)
24208 // and the view (grid panel). if the model beans were all initialised first, and then the view beans second,
24209 // this race condition would not happen.
24210 if (this.columnController.isReady() && !this.paginationProxy.isEmpty()) {
24211 this.hideOverlay();
24212 }
24213 };
24214 GridPanel.prototype.init = function () {
24215 this.instantiate(this.context);
24216 // makes code below more readable if we pull 'forPrint' out
24217 this.scrollWidth = this.gridOptionsWrapper.getScrollbarWidth();
24218 this.enableRtl = this.gridOptionsWrapper.isEnableRtl();
24219 this.useAnimationFrame = !this.gridOptionsWrapper.isSuppressAnimationFrame();
24220 // if the browser is Windows based, then the scrollbars take up space, and we clip by
24221 // the width of the scrollbar. however if the scroll bars do not take up space (iOS)
24222 // then they overlay on top of the div, so we clip some extra blank space instead.
24223 this.scrollClipWidth = this.scrollWidth > 0 ? this.scrollWidth : 20;
24224 // all of these element have different CSS when layout changes
24225 this.gridOptionsWrapper.addLayoutElement(this.getGui());
24226 this.gridOptionsWrapper.addLayoutElement(this.eBody);
24227 this.gridOptionsWrapper.addLayoutElement(this.eBodyViewport);
24228 this.gridOptionsWrapper.addLayoutElement(this.eTopViewport);
24229 this.gridOptionsWrapper.addLayoutElement(this.eBodyContainer);
24230 this.suppressScrollOnFloatingRow();
24231 this.setupRowAnimationCssClass();
24232 this.buildRowContainerComponents();
24233 this.addEventListeners();
24234 this.addDragListeners();
24235 this.addScrollListener();
24236 if (this.gridOptionsWrapper.isSuppressHorizontalScroll()) {
24237 this.eBodyViewport.style.overflowX = 'hidden';
24238 }
24239 this.setupOverlay();
24240 if (this.gridOptionsWrapper.isRowModelDefault() && !this.gridOptionsWrapper.getRowData()) {
24241 this.showLoadingOverlay();
24242 }
24243 this.setPinnedContainersVisible();
24244 this.setBodyAndHeaderHeights();
24245 this.disableBrowserDragging();
24246 this.addShortcutKeyListeners();
24247 this.addMouseListeners();
24248 this.addKeyboardEvents();
24249 this.addBodyViewportListener();
24250 this.addStopEditingWhenGridLosesFocus();
24251 this.mockContextMenuForIPad();
24252 this.addRowDragListener();
24253 if (this.$scope) {
24254 this.addAngularApplyCheck();
24255 }
24256 this.onDisplayedColumnsWidthChanged();
24257 // this.addWindowResizeListener();
24258 this.gridApi.registerGridComp(this);
24259 this.alignedGridsService.registerGridComp(this);
24260 this.headerRootComp.registerGridComp(this);
24261 this.animationFrameService.registerGridComp(this);
24262 this.navigationService.registerGridComp(this);
24263 this.heightScaler.registerGridComp(this);
24264 this.autoHeightCalculator.registerGridComp(this);
24265 this.columnAnimationService.registerGridComp(this);
24266 this.autoWidthCalculator.registerGridComp(this);
24267 this.paginationAutoPageSizeService.registerGridComp(this);
24268 this.beans.registerGridComp(this);
24269 this.rowRenderer.registerGridComp(this);
24270 if (this.rangeController) {
24271 this.rangeController.registerGridComp(this);
24272 }
24273 var unsubscribeFromResize = resizeObserver_1.observeResize(this.eBodyViewport, this.onBodyViewportResized.bind(this));
24274 this.addDestroyFunc(function () { return unsubscribeFromResize(); });
24275 };
24276 GridPanel.prototype.onBodyViewportResized = function () {
24277 this.checkViewportAndScrolls();
24278 };
24279 // used by ColumnAnimationService
24280 GridPanel.prototype.setColumnMovingCss = function (moving) {
24281 this.addOrRemoveCssClass('ag-column-moving', moving);
24282 };
24283 GridPanel.prototype.setupOverlay = function () {
24284 this.overlayWrapper = this.componentRecipes.newOverlayWrapperComponent();
24285 this.eOverlay = this.queryForHtmlElement('[ref="eOverlay"]');
24286 this.overlayWrapper.hideOverlay(this.eOverlay);
24287 };
24288 GridPanel.prototype.addRowDragListener = function () {
24289 var rowDragFeature = new rowDragFeature_1.RowDragFeature(this.eBody, this);
24290 this.context.wireBean(rowDragFeature);
24291 this.dragAndDropService.addDropTarget(rowDragFeature);
24292 };
24293 GridPanel.prototype.addStopEditingWhenGridLosesFocus = function () {
24294 var _this = this;
24295 if (this.gridOptionsWrapper.isStopEditingWhenGridLosesFocus()) {
24296 this.addDestroyableEventListener(this.eBody, 'focusout', function (event) {
24297 // this is the element the focus is moving to
24298 var elementWithFocus = event.relatedTarget;
24299 // see if the element the focus is going to is part of the grid
24300 var clickInsideGrid = false;
24301 var pointer = elementWithFocus;
24302 while (utils_1.Utils.exists(pointer) && !clickInsideGrid) {
24303 var isPopup = !!_this.gridOptionsWrapper.getDomData(pointer, popupEditorWrapper_1.PopupEditorWrapper.DOM_KEY_POPUP_EDITOR_WRAPPER);
24304 var isBody = _this.eBody == pointer;
24305 clickInsideGrid = isPopup || isBody;
24306 pointer = pointer.parentNode;
24307 }
24308 if (!clickInsideGrid) {
24309 _this.rowRenderer.stopEditing();
24310 }
24311 });
24312 }
24313 };
24314 GridPanel.prototype.addAngularApplyCheck = function () {
24315 var _this = this;
24316 // this makes sure if we queue up requests, we only execute oe
24317 var applyTriggered = false;
24318 var listener = function () {
24319 // only need to do one apply at a time
24320 if (applyTriggered) {
24321 return;
24322 }
24323 applyTriggered = true; // mark 'need apply' to true
24324 setTimeout(function () {
24325 applyTriggered = false;
24326 _this.$scope.$apply();
24327 }, 0);
24328 };
24329 // these are the events we need to do an apply after - these are the ones that can end up
24330 // with columns added or removed
24331 this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_DISPLAYED_COLUMNS_CHANGED, listener);
24332 this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_VIRTUAL_COLUMNS_CHANGED, listener);
24333 };
24334 // if we do not do this, then the user can select a pic in the grid (eg an image in a custom cell renderer)
24335 // and then that will start the browser native drag n' drop, which messes up with our own drag and drop.
24336 GridPanel.prototype.disableBrowserDragging = function () {
24337 this.getGui().addEventListener('dragstart', function (event) {
24338 if (event.target instanceof HTMLImageElement) {
24339 event.preventDefault();
24340 return false;
24341 }
24342 });
24343 };
24344 GridPanel.prototype.addEventListeners = function () {
24345 this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_DISPLAYED_COLUMNS_CHANGED, this.onDisplayedColumnsChanged.bind(this));
24346 this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_DISPLAYED_COLUMNS_WIDTH_CHANGED, this.onDisplayedColumnsWidthChanged.bind(this));
24347 this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_PINNED_ROW_DATA_CHANGED, this.setBodyAndHeaderHeights.bind(this));
24348 this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_ROW_DATA_CHANGED, this.onRowDataChanged.bind(this));
24349 this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_ROW_DATA_UPDATED, this.onRowDataChanged.bind(this));
24350 this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_NEW_COLUMNS_LOADED, this.onNewColumnsLoaded.bind(this));
24351 this.addDestroyableEventListener(this.gridOptionsWrapper, gridOptionsWrapper_1.GridOptionsWrapper.PROP_HEADER_HEIGHT, this.setBodyAndHeaderHeights.bind(this));
24352 this.addDestroyableEventListener(this.gridOptionsWrapper, gridOptionsWrapper_1.GridOptionsWrapper.PROP_PIVOT_HEADER_HEIGHT, this.setBodyAndHeaderHeights.bind(this));
24353 this.addDestroyableEventListener(this.gridOptionsWrapper, gridOptionsWrapper_1.GridOptionsWrapper.PROP_GROUP_HEADER_HEIGHT, this.setBodyAndHeaderHeights.bind(this));
24354 this.addDestroyableEventListener(this.gridOptionsWrapper, gridOptionsWrapper_1.GridOptionsWrapper.PROP_PIVOT_GROUP_HEADER_HEIGHT, this.setBodyAndHeaderHeights.bind(this));
24355 this.addDestroyableEventListener(this.gridOptionsWrapper, gridOptionsWrapper_1.GridOptionsWrapper.PROP_FLOATING_FILTERS_HEIGHT, this.setBodyAndHeaderHeights.bind(this));
24356 };
24357 GridPanel.prototype.addDragListeners = function () {
24358 var _this = this;
24359 if (!this.gridOptionsWrapper.isEnableRangeSelection() // no range selection if no property
24360 || utils_1.Utils.missing(this.rangeController)) {
24361 return;
24362 }
24363 var containers = [this.eLeftContainer, this.eRightContainer, this.eBodyContainer,
24364 this.eTop, this.eBottom];
24365 containers.forEach(function (container) {
24366 var params = {
24367 eElement: container,
24368 onDragStart: _this.rangeController.onDragStart.bind(_this.rangeController),
24369 onDragStop: _this.rangeController.onDragStop.bind(_this.rangeController),
24370 onDragging: _this.rangeController.onDragging.bind(_this.rangeController),
24371 // for range selection by dragging the mouse, we want to ignore the event if shift key is pressed,
24372 // as shift key click is another type of range selection
24373 skipMouseEvent: function (mouseEvent) { return mouseEvent.shiftKey; }
24374 };
24375 _this.dragService.addDragSource(params);
24376 _this.addDestroyFunc(function () { return _this.dragService.removeDragSource(params); });
24377 });
24378 };
24379 GridPanel.prototype.addMouseListeners = function () {
24380 var _this = this;
24381 var eventNames = ['click', 'mousedown', 'dblclick', 'contextmenu', 'mouseover', 'mouseout'];
24382 eventNames.forEach(function (eventName) {
24383 var listener = _this.processMouseEvent.bind(_this, eventName);
24384 _this.eAllCellContainers.forEach(function (container) {
24385 return _this.addDestroyableEventListener(container, eventName, listener);
24386 });
24387 });
24388 };
24389 GridPanel.prototype.addKeyboardEvents = function () {
24390 var _this = this;
24391 var eventNames = ['keydown', 'keypress'];
24392 eventNames.forEach(function (eventName) {
24393 var listener = _this.processKeyboardEvent.bind(_this, eventName);
24394 _this.eAllCellContainers.forEach(function (container) {
24395 _this.addDestroyableEventListener(container, eventName, listener);
24396 });
24397 });
24398 };
24399 GridPanel.prototype.addBodyViewportListener = function () {
24400 var _this = this;
24401 // we want to listen for clicks directly on the eBodyViewport, so the user has a way of showing
24402 // the context menu if no rows are displayed, or user simply clicks outside of a cell
24403 var listener = function (mouseEvent) {
24404 var target = utils_1.Utils.getTarget(mouseEvent);
24405 if (target === _this.eBodyViewport || target === _this.eLeftViewport || target === _this.eRightViewport) {
24406 // show it
24407 _this.onContextMenu(mouseEvent, null, null, null, null);
24408 _this.preventDefaultOnContextMenu(mouseEvent);
24409 }
24410 };
24411 //For some reason listening only to this.eBody doesnt work... Maybe because the event is consumed somewhere else?
24412 //In any case, not expending much time on this, if anyome comes accross this and knows how to make this work with
24413 //one listener please go ahead and change it...
24414 this.addDestroyableEventListener(this.eBodyViewport, 'contextmenu', listener);
24415 this.addDestroyableEventListener(this.eRightViewport, 'contextmenu', listener);
24416 this.addDestroyableEventListener(this.eLeftViewport, 'contextmenu', listener);
24417 };
24418 // + rangeController
24419 GridPanel.prototype.getBodyClientRect = function () {
24420 if (this.eBody) {
24421 return this.eBody.getBoundingClientRect();
24422 }
24423 };
24424 GridPanel.prototype.getRowForEvent = function (event) {
24425 var sourceElement = utils_1.Utils.getTarget(event);
24426 while (sourceElement) {
24427 var renderedRow = this.gridOptionsWrapper.getDomData(sourceElement, rowComp_1.RowComp.DOM_DATA_KEY_RENDERED_ROW);
24428 if (renderedRow) {
24429 return renderedRow;
24430 }
24431 sourceElement = sourceElement.parentElement;
24432 }
24433 return null;
24434 };
24435 GridPanel.prototype.processKeyboardEvent = function (eventName, keyboardEvent) {
24436 var renderedCell = this.mouseEventService.getRenderedCellForEvent(keyboardEvent);
24437 if (!renderedCell) {
24438 return;
24439 }
24440 switch (eventName) {
24441 case 'keydown':
24442 // first see if it's a scroll key, page up / down, home / end etc
24443 var wasScrollKey = this.navigationService.handlePageScrollingKey(keyboardEvent);
24444 // if not a scroll key, then we pass onto cell
24445 if (!wasScrollKey) {
24446 renderedCell.onKeyDown(keyboardEvent);
24447 }
24448 break;
24449 case 'keypress':
24450 renderedCell.onKeyPress(keyboardEvent);
24451 break;
24452 }
24453 };
24454 // gets called by rowRenderer when new data loaded, as it will want to scroll to the top
24455 GridPanel.prototype.scrollToTop = function () {
24456 this.eBodyViewport.scrollTop = 0;
24457 };
24458 GridPanel.prototype.processMouseEvent = function (eventName, mouseEvent) {
24459 if (!this.mouseEventService.isEventFromThisGrid(mouseEvent)) {
24460 return;
24461 }
24462 if (utils_1.Utils.isStopPropagationForAgGrid(mouseEvent)) {
24463 return;
24464 }
24465 var rowComp = this.getRowForEvent(mouseEvent);
24466 var cellComp = this.mouseEventService.getRenderedCellForEvent(mouseEvent);
24467 if (eventName === "contextmenu") {
24468 this.handleContextMenuMouseEvent(mouseEvent, null, rowComp, cellComp);
24469 }
24470 else {
24471 if (cellComp) {
24472 cellComp.onMouseEvent(eventName, mouseEvent);
24473 }
24474 if (rowComp) {
24475 rowComp.onMouseEvent(eventName, mouseEvent);
24476 }
24477 }
24478 this.preventDefaultOnContextMenu(mouseEvent);
24479 };
24480 GridPanel.prototype.mockContextMenuForIPad = function () {
24481 var _this = this;
24482 // we do NOT want this when not in ipad, otherwise we will be doing
24483 if (!utils_1.Utils.isUserAgentIPad()) {
24484 return;
24485 }
24486 this.eAllCellContainers.forEach(function (container) {
24487 var touchListener = new touchListener_1.TouchListener(container);
24488 var longTapListener = function (event) {
24489 var rowComp = _this.getRowForEvent(event.touchEvent);
24490 var cellComp = _this.mouseEventService.getRenderedCellForEvent(event.touchEvent);
24491 _this.handleContextMenuMouseEvent(null, event.touchEvent, rowComp, cellComp);
24492 };
24493 _this.addDestroyableEventListener(touchListener, touchListener_1.TouchListener.EVENT_LONG_TAP, longTapListener);
24494 _this.addDestroyFunc(function () { return touchListener.destroy(); });
24495 });
24496 };
24497 GridPanel.prototype.handleContextMenuMouseEvent = function (mouseEvent, touchEvent, rowComp, cellComp) {
24498 var rowNode = rowComp ? rowComp.getRowNode() : null;
24499 var column = cellComp ? cellComp.getColumn() : null;
24500 var value = null;
24501 if (column) {
24502 var event_1 = mouseEvent ? mouseEvent : touchEvent;
24503 cellComp.dispatchCellContextMenuEvent(event_1);
24504 value = this.valueService.getValue(column, rowNode);
24505 }
24506 this.onContextMenu(mouseEvent, touchEvent, rowNode, column, value);
24507 };
24508 GridPanel.prototype.onContextMenu = function (mouseEvent, touchEvent, rowNode, column, value) {
24509 // to allow us to debug in chrome, we ignore the event if ctrl is pressed.
24510 // not everyone wants this, so first 'if' below allows to turn this hack off.
24511 if (!this.gridOptionsWrapper.isAllowContextMenuWithControlKey()) {
24512 // then do the check
24513 if (mouseEvent && (mouseEvent.ctrlKey || mouseEvent.metaKey)) {
24514 return;
24515 }
24516 }
24517 if (this.contextMenuFactory && !this.gridOptionsWrapper.isSuppressContextMenu()) {
24518 var eventOrTouch = mouseEvent ? mouseEvent : touchEvent.touches[0];
24519 this.contextMenuFactory.showMenu(rowNode, column, value, eventOrTouch);
24520 var event_2 = mouseEvent ? mouseEvent : touchEvent;
24521 event_2.preventDefault();
24522 }
24523 };
24524 GridPanel.prototype.preventDefaultOnContextMenu = function (mouseEvent) {
24525 // if we don't do this, then middle click will never result in a 'click' event, as 'mousedown'
24526 // will be consumed by the browser to mean 'scroll' (as you can scroll with the middle mouse
24527 // button in the browser). so this property allows the user to receive middle button clicks if
24528 // they want.
24529 if (this.gridOptionsWrapper.isSuppressMiddleClickScrolls() && mouseEvent.which === 2) {
24530 mouseEvent.preventDefault();
24531 }
24532 };
24533 GridPanel.prototype.addShortcutKeyListeners = function () {
24534 var _this = this;
24535 this.eAllCellContainers.forEach(function (container) {
24536 container.addEventListener('keydown', function (event) {
24537 // if the cell the event came from is editing, then we do not
24538 // want to do the default shortcut keys, otherwise the editor
24539 // (eg a text field) would not be able to do the normal cut/copy/paste
24540 var renderedCell = _this.mouseEventService.getRenderedCellForEvent(event);
24541 if (renderedCell && renderedCell.isEditing()) {
24542 return;
24543 }
24544 // for copy / paste, we don't want to execute when the event
24545 // was from a child grid (happens in master detail)
24546 if (!_this.mouseEventService.isEventFromThisGrid(event)) {
24547 return;
24548 }
24549 if (event.ctrlKey || event.metaKey) {
24550 switch (event.which) {
24551 case constants_1.Constants.KEY_A: return _this.onCtrlAndA(event);
24552 case constants_1.Constants.KEY_C: return _this.onCtrlAndC(event);
24553 case constants_1.Constants.KEY_V: return _this.onCtrlAndV(event);
24554 case constants_1.Constants.KEY_D: return _this.onCtrlAndD(event);
24555 }
24556 }
24557 });
24558 });
24559 };
24560 GridPanel.prototype.onCtrlAndA = function (event) {
24561 if (this.rangeController && this.paginationProxy.isRowsToRender()) {
24562 var rowEnd = void 0;
24563 var floatingStart = void 0;
24564 var floatingEnd = void 0;
24565 if (this.pinnedRowModel.isEmpty(constants_1.Constants.PINNED_TOP)) {
24566 floatingStart = null;
24567 }
24568 else {
24569 floatingStart = constants_1.Constants.PINNED_TOP;
24570 }
24571 if (this.pinnedRowModel.isEmpty(constants_1.Constants.PINNED_BOTTOM)) {
24572 floatingEnd = null;
24573 rowEnd = this.paginationProxy.getTotalRowCount() - 1;
24574 }
24575 else {
24576 floatingEnd = constants_1.Constants.PINNED_BOTTOM;
24577 rowEnd = this.pinnedRowModel.getPinnedBottomRowData().length - 1;
24578 }
24579 var allDisplayedColumns = this.columnController.getAllDisplayedColumns();
24580 if (utils_1.Utils.missingOrEmpty(allDisplayedColumns)) {
24581 return;
24582 }
24583 this.rangeController.setRange({
24584 rowStart: 0,
24585 floatingStart: floatingStart,
24586 rowEnd: rowEnd,
24587 floatingEnd: floatingEnd,
24588 columnStart: allDisplayedColumns[0],
24589 columnEnd: allDisplayedColumns[allDisplayedColumns.length - 1]
24590 });
24591 }
24592 event.preventDefault();
24593 return false;
24594 };
24595 GridPanel.prototype.onCtrlAndC = function (event) {
24596 if (!this.clipboardService) {
24597 return;
24598 }
24599 var focusedCell = this.focusedCellController.getFocusedCell();
24600 this.clipboardService.copyToClipboard();
24601 event.preventDefault();
24602 // the copy operation results in loosing focus on the cell,
24603 // because of the trickery the copy logic uses with a temporary
24604 // widget. so we set it back again.
24605 if (focusedCell) {
24606 this.focusedCellController.setFocusedCell(focusedCell.rowIndex, focusedCell.column, focusedCell.floating, true);
24607 }
24608 return false;
24609 };
24610 GridPanel.prototype.onCtrlAndV = function (event) {
24611 if (!this.enterprise) {
24612 return;
24613 }
24614 if (this.gridOptionsWrapper.isSuppressClipboardPaste()) {
24615 return;
24616 }
24617 this.clipboardService.pasteFromClipboard();
24618 return false;
24619 };
24620 GridPanel.prototype.onCtrlAndD = function (event) {
24621 if (!this.enterprise) {
24622 return;
24623 }
24624 this.clipboardService.copyRangeDown();
24625 event.preventDefault();
24626 return false;
24627 };
24628 // Valid values for position are bottom, middle and top
24629 // position should be {'top','middle','bottom', or undefined/null}.
24630 // if undefined/null, then the grid will to the minimal amount of scrolling,
24631 // eg if grid needs to scroll up, it scrolls until row is on top,
24632 // if grid needs to scroll down, it scrolls until row is on bottom,
24633 // if row is already in view, grid does not scroll
24634 GridPanel.prototype.ensureIndexVisible = function (index, position) {
24635 // if for print or auto height, everything is always visible
24636 if (this.gridOptionsWrapper.isGridAutoHeight()) {
24637 return;
24638 }
24639 var rowCount = this.paginationProxy.getTotalRowCount();
24640 if (typeof index !== 'number' || index < 0 || index >= rowCount) {
24641 console.warn('invalid row index for ensureIndexVisible: ' + index);
24642 return;
24643 }
24644 this.paginationProxy.goToPageWithIndex(index);
24645 var rowNode = this.paginationProxy.getRow(index);
24646 var paginationOffset = this.paginationProxy.getPixelOffset();
24647 var rowTopPixel = rowNode.rowTop - paginationOffset;
24648 var rowBottomPixel = rowTopPixel + rowNode.rowHeight;
24649 var scrollPosition = this.getVScrollPosition();
24650 var heightOffset = this.heightScaler.getOffset();
24651 var vScrollTop = scrollPosition.top + heightOffset;
24652 var vScrollBottom = scrollPosition.bottom + heightOffset;
24653 if (this.isHorizontalScrollShowing()) {
24654 vScrollBottom -= this.scrollWidth;
24655 }
24656 var viewportHeight = vScrollBottom - vScrollTop;
24657 var newScrollPosition = null;
24658 // work out the pixels for top, middle and bottom up front,
24659 // make the if/else below easier to read
24660 var pxTop = this.heightScaler.getScrollPositionForPixel(rowTopPixel);
24661 var pxBottom = this.heightScaler.getScrollPositionForPixel(rowBottomPixel - viewportHeight);
24662 var pxMiddle = (pxTop + pxBottom) / 2;
24663 // make sure if middle, the row is not outside the top of the grid
24664 if (pxMiddle > rowTopPixel) {
24665 pxMiddle = rowTopPixel;
24666 }
24667 var rowBelowViewport = vScrollTop > rowTopPixel;
24668 var rowAboveViewport = vScrollBottom < rowBottomPixel;
24669 if (position === 'top') {
24670 newScrollPosition = pxTop;
24671 }
24672 else if (position === 'bottom') {
24673 newScrollPosition = pxBottom;
24674 }
24675 else if (position === 'middle') {
24676 newScrollPosition = pxMiddle;
24677 }
24678 else if (rowBelowViewport) {
24679 // if row is before, scroll up with row at top
24680 newScrollPosition = pxTop;
24681 }
24682 else if (rowAboveViewport) {
24683 // if row is below, scroll down with row at bottom
24684 newScrollPosition = pxBottom;
24685 }
24686 if (newScrollPosition !== null) {
24687 this.eBodyViewport.scrollTop = newScrollPosition;
24688 this.rowRenderer.redrawAfterScroll();
24689 }
24690 };
24691 // + moveColumnController
24692 GridPanel.prototype.getCenterWidth = function () {
24693 return this.eBodyViewport.clientWidth;
24694 };
24695 GridPanel.prototype.isHorizontalScrollShowing = function () {
24696 return utils_1.Utils.isHorizontalScrollShowing(this.eBodyViewport);
24697 };
24698 GridPanel.prototype.isVerticalScrollShowing = function () {
24699 return utils_1.Utils.isVerticalScrollShowing(this.eBodyViewport);
24700 };
24701 // gets called every time the viewport size changes. we use this to check visibility of scrollbars
24702 // in the grid panel, and also to check size and position of viewport for row and column virtualisation.
24703 GridPanel.prototype.checkViewportAndScrolls = function () {
24704 // results in updating anything that depends on scroll showing
24705 this.updateScrollVisibleService();
24706 // fires event if height changes, used by PaginationService, HeightScalerService, RowRenderer
24707 this.checkBodyHeight();
24708 // check for virtual columns for ColumnController
24709 this.onHorizontalViewportChanged();
24710 this.setPinnedLeftWidth();
24711 this.setPinnedRightWidth();
24712 this.setBottomPaddingOnPinned();
24713 this.hideVerticalScrollOnCenter();
24714 this.hideFullWidthViewportScrollbars();
24715 };
24716 GridPanel.prototype.updateScrollVisibleService = function () {
24717 var params = {
24718 bodyHorizontalScrollShowing: false,
24719 leftVerticalScrollShowing: false,
24720 rightVerticalScrollShowing: false
24721 };
24722 if (this.enableRtl && this.columnController.isPinningLeft()) {
24723 params.leftVerticalScrollShowing = utils_1.Utils.isVerticalScrollShowing(this.eLeftViewport);
24724 }
24725 if (!this.enableRtl && this.columnController.isPinningRight()) {
24726 params.rightVerticalScrollShowing = utils_1.Utils.isVerticalScrollShowing(this.eRightViewport);
24727 }
24728 params.bodyHorizontalScrollShowing = this.isHorizontalScrollShowing();
24729 this.scrollVisibleService.setScrollsVisible(params);
24730 };
24731 // the pinned container needs extra space at the bottom, some blank space, otherwise when
24732 // vertically scrolled all the way down, the last row will be hidden behind the scrolls.
24733 // this extra padding allows the last row to be lifted above the bottom scrollbar.
24734 GridPanel.prototype.setBottomPaddingOnPinned = function () {
24735 // no need for padding if the scrollbars are not taking up any space
24736 if (this.scrollWidth <= 0) {
24737 return;
24738 }
24739 if (this.isHorizontalScrollShowing()) {
24740 this.eRightContainer.style.marginBottom = this.scrollWidth + 'px';
24741 this.eLeftContainer.style.marginBottom = this.scrollWidth + 'px';
24742 }
24743 else {
24744 this.eRightContainer.style.marginBottom = '';
24745 this.eLeftContainer.style.marginBottom = '';
24746 }
24747 };
24748 GridPanel.prototype.hideFullWidthViewportScrollbars = function () {
24749 // if browser does not have scrollbars that take up space (eg iOS) then we don't need
24750 // to adjust the sizes of the container for scrollbars
24751 // if (this.scrollWidth <= 0) { return; }
24752 var scrollWidthPx = this.scrollClipWidth > 0 ? this.scrollWidth + 'px' : '';
24753 // if horizontal scroll is showing, we add padding to bottom so
24754 // fullWidth container is not spreading over the scroll
24755 this.eFullWidthViewportWrapper.style.paddingBottom = this.isHorizontalScrollShowing() ? scrollWidthPx : '';
24756 // if vertical scroll is showing on full width viewport, then we clip it away, otherwise
24757 // it competes with the main vertical scroll. this is done by getting the viewport to be
24758 // bigger than the wrapper, the wrapper then ends up clipping the viewport.
24759 var takeOutVScroll = this.isVerticalScrollShowing();
24760 if (this.enableRtl) {
24761 this.eFullWidthViewportWrapper.style.marginLeft = takeOutVScroll ? scrollWidthPx : '';
24762 this.eFullWidthViewport.style.marginLeft = takeOutVScroll ? ('-' + scrollWidthPx) : '';
24763 }
24764 else {
24765 this.eFullWidthViewportWrapper.style.width = takeOutVScroll ? "calc(100% - " + scrollWidthPx + ")" : '';
24766 this.eFullWidthViewport.style.width = takeOutVScroll ? "calc(100% + " + scrollWidthPx + ")" : '';
24767 }
24768 };
24769 GridPanel.prototype.ensureColumnVisible = function (key) {
24770 var column = this.columnController.getGridColumn(key);
24771 if (!column) {
24772 return;
24773 }
24774 if (column.isPinned()) {
24775 console.warn('calling ensureIndexVisible on a ' + column.getPinned() + ' pinned column doesn\'t make sense for column ' + column.getColId());
24776 return;
24777 }
24778 if (!this.columnController.isColumnDisplayed(column)) {
24779 console.warn('column is not currently visible');
24780 return;
24781 }
24782 var colLeftPixel = column.getLeft();
24783 var colRightPixel = colLeftPixel + column.getActualWidth();
24784 var viewportWidth = this.eBodyViewport.clientWidth;
24785 var scrollPosition = this.getBodyViewportScrollLeft();
24786 var bodyWidth = this.columnController.getBodyContainerWidth();
24787 var viewportLeftPixel;
24788 var viewportRightPixel;
24789 // the logic of working out left and right viewport px is both here and in the ColumnController,
24790 // need to refactor it out to one place
24791 if (this.enableRtl) {
24792 viewportLeftPixel = bodyWidth - scrollPosition - viewportWidth;
24793 viewportRightPixel = bodyWidth - scrollPosition;
24794 }
24795 else {
24796 viewportLeftPixel = scrollPosition;
24797 viewportRightPixel = viewportWidth + scrollPosition;
24798 }
24799 var viewportScrolledPastCol = viewportLeftPixel > colLeftPixel;
24800 var viewportScrolledBeforeCol = viewportRightPixel < colRightPixel;
24801 var colToSmallForViewport = viewportWidth < column.getActualWidth();
24802 var alignColToLeft = viewportScrolledPastCol || colToSmallForViewport;
24803 var alignColToRight = viewportScrolledBeforeCol;
24804 if (alignColToLeft) {
24805 // if viewport's left side is after col's left side, scroll left to pull col into viewport at left
24806 if (this.enableRtl) {
24807 var newScrollPosition = bodyWidth - viewportWidth - colLeftPixel;
24808 this.setBodyViewportScrollLeft(newScrollPosition);
24809 }
24810 else {
24811 this.setBodyViewportScrollLeft(colLeftPixel);
24812 }
24813 }
24814 else if (alignColToRight) {
24815 // if viewport's right side is before col's right side, scroll right to pull col into viewport at right
24816 if (this.enableRtl) {
24817 var newScrollPosition = bodyWidth - colRightPixel;
24818 this.setBodyViewportScrollLeft(newScrollPosition);
24819 }
24820 else {
24821 var newScrollPosition = colRightPixel - viewportWidth;
24822 this.setBodyViewportScrollLeft(newScrollPosition);
24823 }
24824 }
24825 else {
24826 // otherwise, col is already in view, so do nothing
24827 }
24828 // this will happen anyway, as the move will cause a 'scroll' event on the body, however
24829 // it is possible that the ensureColumnVisible method is called from within ag-Grid and
24830 // the caller will need to have the columns rendered to continue, which will be before
24831 // the event has been worked on (which is the case for cell navigation).
24832 this.onHorizontalViewportChanged();
24833 };
24834 GridPanel.prototype.showLoadingOverlay = function () {
24835 if (!this.gridOptionsWrapper.isSuppressLoadingOverlay()) {
24836 this.overlayWrapper.showLoadingOverlay(this.eOverlay);
24837 }
24838 };
24839 GridPanel.prototype.showNoRowsOverlay = function () {
24840 if (!this.gridOptionsWrapper.isSuppressNoRowsOverlay()) {
24841 this.overlayWrapper.showNoRowsOverlay(this.eOverlay);
24842 }
24843 };
24844 GridPanel.prototype.hideOverlay = function () {
24845 this.overlayWrapper.hideOverlay(this.eOverlay);
24846 };
24847 GridPanel.prototype.getWidthForSizeColsToFit = function () {
24848 var availableWidth = this.eBody.clientWidth;
24849 // if pinning right, then the scroll bar can show, however for some reason
24850 // it overlays the grid and doesn't take space. so we are only interested
24851 // in the body scroll showing.
24852 var removeVerticalScrollWidth = this.isVerticalScrollShowing();
24853 if (removeVerticalScrollWidth) {
24854 availableWidth -= this.scrollWidth;
24855 }
24856 return availableWidth;
24857 };
24858 // method will call itself if no available width. this covers if the grid
24859 // isn't visible, but is just about to be visible.
24860 GridPanel.prototype.sizeColumnsToFit = function (nextTimeout) {
24861 var _this = this;
24862 var availableWidth = this.getWidthForSizeColsToFit();
24863 if (availableWidth > 0) {
24864 this.columnController.sizeColumnsToFit(availableWidth, "sizeColumnsToFit");
24865 }
24866 else {
24867 if (nextTimeout === undefined) {
24868 setTimeout(function () {
24869 _this.sizeColumnsToFit(100);
24870 }, 0);
24871 }
24872 else if (nextTimeout === 100) {
24873 setTimeout(function () {
24874 _this.sizeColumnsToFit(500);
24875 }, 100);
24876 }
24877 else if (nextTimeout === 500) {
24878 setTimeout(function () {
24879 _this.sizeColumnsToFit(-1);
24880 }, 500);
24881 }
24882 else {
24883 console.log('ag-Grid: tried to call sizeColumnsToFit() but the grid is coming back with ' +
24884 'zero width, maybe the grid is not visible yet on the screen?');
24885 }
24886 }
24887 };
24888 GridPanel.prototype.getBodyContainer = function () {
24889 return this.eBodyContainer;
24890 };
24891 GridPanel.prototype.getDropTargetBodyContainers = function () {
24892 return [this.eBodyViewport, this.eTopViewport, this.eBottomViewport];
24893 };
24894 GridPanel.prototype.getDropTargetLeftContainers = function () {
24895 return [this.eLeftViewport, this.eLeftBottom, this.eLeftTop];
24896 };
24897 GridPanel.prototype.getDropTargetRightContainers = function () {
24898 return [this.eRightViewport, this.eRightBottom, this.eRightTop];
24899 };
24900 GridPanel.prototype.buildRowContainerComponents = function () {
24901 var _this = this;
24902 this.eAllCellContainers = [
24903 this.eLeftContainer, this.eRightContainer, this.eBodyContainer,
24904 this.eTop, this.eBottom, this.eFullWidthContainer
24905 ];
24906 this.rowContainerComponents = {
24907 body: new rowContainerComponent_1.RowContainerComponent({ eContainer: this.eBodyContainer, eViewport: this.eBodyViewport }),
24908 fullWidth: new rowContainerComponent_1.RowContainerComponent({ eContainer: this.eFullWidthContainer, hideWhenNoChildren: true, eViewport: this.eFullWidthViewport }),
24909 pinnedLeft: new rowContainerComponent_1.RowContainerComponent({ eContainer: this.eLeftContainer, eViewport: this.eLeftViewport }),
24910 pinnedRight: new rowContainerComponent_1.RowContainerComponent({ eContainer: this.eRightContainer, eViewport: this.eRightViewport }),
24911 floatingTop: new rowContainerComponent_1.RowContainerComponent({ eContainer: this.eTopContainer }),
24912 floatingTopPinnedLeft: new rowContainerComponent_1.RowContainerComponent({ eContainer: this.eLeftTop }),
24913 floatingTopPinnedRight: new rowContainerComponent_1.RowContainerComponent({ eContainer: this.eRightTop }),
24914 floatingTopFullWidth: new rowContainerComponent_1.RowContainerComponent({ eContainer: this.eTopFullWidthContainer, hideWhenNoChildren: true }),
24915 floatingBottom: new rowContainerComponent_1.RowContainerComponent({ eContainer: this.eBottomContainer }),
24916 floatingBottomPinnedLeft: new rowContainerComponent_1.RowContainerComponent({ eContainer: this.eLeftBottom }),
24917 floatingBottomPinnedRight: new rowContainerComponent_1.RowContainerComponent({ eContainer: this.eRightBottom }),
24918 floatingBottomFullWith: new rowContainerComponent_1.RowContainerComponent({ eContainer: this.eBottomFullWidthContainer, hideWhenNoChildren: true }),
24919 };
24920 utils_1.Utils.iterateObject(this.rowContainerComponents, function (key, container) {
24921 if (container) {
24922 _this.context.wireBean(container);
24923 }
24924 });
24925 };
24926 GridPanel.prototype.setupRowAnimationCssClass = function () {
24927 var _this = this;
24928 var listener = function () {
24929 // we don't want to use row animation if scaling, as rows jump strangely as you scroll,
24930 // when scaling and doing row animation.
24931 var animateRows = _this.gridOptionsWrapper.isAnimateRows() && !_this.heightScaler.isScaling();
24932 utils_1.Utils.addOrRemoveCssClass(_this.eBody, 'ag-row-animation', animateRows);
24933 utils_1.Utils.addOrRemoveCssClass(_this.eBody, 'ag-row-no-animation', !animateRows);
24934 };
24935 listener();
24936 this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_HEIGHT_SCALE_CHANGED, listener);
24937 };
24938 // when editing a pinned row, if the cell is half outside the scrollable area, the browser can
24939 // scroll the column into view. we do not want this, the pinned sections should never scroll.
24940 // so we listen to scrolls on these containers and reset the scroll if we find one.
24941 GridPanel.prototype.suppressScrollOnFloatingRow = function () {
24942 var _this = this;
24943 var resetTopScroll = function () { return _this.eTopViewport.scrollLeft = 0; };
24944 var resetBottomScroll = function () { return _this.eTopViewport.scrollLeft = 0; };
24945 this.addDestroyableEventListener(this.eTopViewport, 'scroll', resetTopScroll);
24946 this.addDestroyableEventListener(this.eBottomViewport, 'scroll', resetBottomScroll);
24947 };
24948 GridPanel.prototype.getRowContainers = function () {
24949 return this.rowContainerComponents;
24950 };
24951 GridPanel.prototype.onDisplayedColumnsChanged = function () {
24952 this.setPinnedContainersVisible();
24953 this.setBodyAndHeaderHeights();
24954 this.onHorizontalViewportChanged();
24955 };
24956 GridPanel.prototype.onDisplayedColumnsWidthChanged = function () {
24957 this.setWidthsOfContainers();
24958 this.onHorizontalViewportChanged();
24959 if (this.enableRtl) {
24960 // because RTL is all backwards, a change in the width of the row
24961 // can cause a change in the scroll position, without a scroll event,
24962 // because the scroll position in RTL is a function that depends on
24963 // the width. to be convinced of this, take out this line, enable RTL,
24964 // scroll all the way to the left and then resize a column
24965 this.horizontallyScrollHeaderCenterAndFloatingCenter();
24966 }
24967 };
24968 GridPanel.prototype.setWidthsOfContainers = function () {
24969 this.setCenterWidth();
24970 this.setPinnedLeftWidth();
24971 this.setPinnedRightWidth();
24972 };
24973 GridPanel.prototype.setCenterWidth = function () {
24974 var widthPx = this.columnController.getBodyContainerWidth() + 'px';
24975 this.eBodyContainer.style.width = widthPx;
24976 this.eBottomContainer.style.width = widthPx;
24977 this.eTopContainer.style.width = widthPx;
24978 };
24979 GridPanel.prototype.setPinnedLeftWidth = function () {
24980 var widthOfCols = this.columnController.getPinnedLeftContainerWidth();
24981 var widthOfColsAndScroll = widthOfCols + this.scrollWidth;
24982 var widthOfColsAndClippedScroll = widthOfCols + this.scrollClipWidth;
24983 var viewportWidth;
24984 var wrapperWidth;
24985 if (utils_1.Utils.isVerticalScrollShowing(this.eLeftViewport)) {
24986 if (this.enableRtl) {
24987 // show the scroll
24988 viewportWidth = widthOfColsAndScroll;
24989 wrapperWidth = widthOfColsAndScroll;
24990 }
24991 else {
24992 // hide the scroll
24993 viewportWidth = widthOfColsAndClippedScroll;
24994 wrapperWidth = widthOfCols;
24995 }
24996 }
24997 else {
24998 // no scroll
24999 viewportWidth = widthOfCols;
25000 wrapperWidth = widthOfCols;
25001 }
25002 this.setElementWidth(this.eLeftViewportWrapper, wrapperWidth);
25003 this.setElementWidth(this.eLeftViewport, viewportWidth);
25004 this.setElementWidth(this.eLeftContainer, widthOfCols);
25005 this.setElementWidth(this.eLeftBottom, wrapperWidth);
25006 this.setElementWidth(this.eLeftTop, wrapperWidth);
25007 };
25008 GridPanel.prototype.setPinnedRightWidth = function () {
25009 var widthOfCols = this.columnController.getPinnedRightContainerWidth();
25010 var widthOfColsAndScroll = widthOfCols + this.scrollWidth;
25011 var widthOfColsAndClippedScroll = widthOfCols + this.scrollClipWidth;
25012 var viewportWidth;
25013 var wrapperWidth;
25014 if (utils_1.Utils.isVerticalScrollShowing(this.eRightViewport)) {
25015 if (!this.enableRtl) {
25016 // show the scroll
25017 viewportWidth = widthOfColsAndScroll;
25018 wrapperWidth = widthOfColsAndScroll;
25019 }
25020 else {
25021 // hide the scroll
25022 viewportWidth = widthOfColsAndClippedScroll;
25023 wrapperWidth = widthOfCols;
25024 }
25025 }
25026 else {
25027 // no scroll
25028 viewportWidth = widthOfCols;
25029 wrapperWidth = widthOfCols;
25030 }
25031 this.setElementWidth(this.eRightViewportWrapper, wrapperWidth);
25032 this.setElementWidth(this.eRightViewport, viewportWidth);
25033 this.setElementWidth(this.eRightContainer, widthOfCols);
25034 this.setElementWidth(this.eRightBottom, wrapperWidth);
25035 this.setElementWidth(this.eRightTop, wrapperWidth);
25036 };
25037 GridPanel.prototype.setElementWidth = function (element, width) {
25038 // .width didn't do the trick in firefox, so needed .minWidth also
25039 element.style.width = width + 'px';
25040 element.style.minWidth = width + 'px';
25041 };
25042 GridPanel.prototype.setPinnedContainersVisible = function () {
25043 var changeDetected = false;
25044 var showLeftPinned = this.columnController.isPinningLeft();
25045 if (showLeftPinned !== this.pinningLeft) {
25046 this.pinningLeft = showLeftPinned;
25047 this.headerRootComp.setLeftVisible(showLeftPinned);
25048 utils_1.Utils.setVisible(this.eLeftViewportWrapper, showLeftPinned);
25049 changeDetected = true;
25050 if (showLeftPinned) {
25051 // because the viewport was not visible, it was not keeping previous scrollTop values
25052 this.eLeftViewport.scrollTop = this.eBodyViewport.scrollTop;
25053 }
25054 }
25055 var showRightPinned = this.columnController.isPinningRight();
25056 if (showRightPinned !== this.pinningRight) {
25057 this.pinningRight = showRightPinned;
25058 this.headerRootComp.setRightVisible(showRightPinned);
25059 utils_1.Utils.setVisible(this.eRightViewportWrapper, showRightPinned);
25060 if (showRightPinned) {
25061 // because the viewport was not visible, it was not keeping previous scrollTop values
25062 this.eRightViewport.scrollTop = this.eBodyViewport.scrollTop;
25063 }
25064 changeDetected = true;
25065 }
25066 if (changeDetected) {
25067 this.hideVerticalScrollOnCenter();
25068 this.setPinnedLeftWidth();
25069 this.setPinnedRightWidth();
25070 }
25071 };
25072 GridPanel.prototype.hideVerticalScrollOnCenter = function () {
25073 var neverShowScroll = this.enableRtl ?
25074 this.columnController.isPinningLeft()
25075 : this.columnController.isPinningRight();
25076 var scrollActive = utils_1.Utils.isVerticalScrollShowing(this.eBodyViewport);
25077 var hideScroll = neverShowScroll && scrollActive;
25078 var margin = hideScroll ? '-' + this.scrollClipWidth + 'px' : '';
25079 if (this.enableRtl) {
25080 this.eBodyViewport.style.marginLeft = margin;
25081 }
25082 else {
25083 this.eBodyViewport.style.marginRight = margin;
25084 }
25085 };
25086 GridPanel.prototype.checkBodyHeight = function () {
25087 var bodyHeight = this.eBody.clientHeight;
25088 if (this.bodyHeight !== bodyHeight) {
25089 this.bodyHeight = bodyHeight;
25090 var event_3 = {
25091 type: events_1.Events.EVENT_BODY_HEIGHT_CHANGED,
25092 api: this.gridApi,
25093 columnApi: this.columnApi
25094 };
25095 this.eventService.dispatchEvent(event_3);
25096 }
25097 };
25098 GridPanel.prototype.setBodyAndHeaderHeights = function () {
25099 var headerRowCount = this.columnController.getHeaderRowCount();
25100 var totalHeaderHeight;
25101 var numberOfFloating = 0;
25102 var groupHeight;
25103 var headerHeight;
25104 if (!this.columnController.isPivotMode()) {
25105 if (this.gridOptionsWrapper.isFloatingFilter()) {
25106 headerRowCount++;
25107 }
25108 numberOfFloating = (this.gridOptionsWrapper.isFloatingFilter()) ? 1 : 0;
25109 groupHeight = this.gridOptionsWrapper.getGroupHeaderHeight();
25110 headerHeight = this.gridOptionsWrapper.getHeaderHeight();
25111 }
25112 else {
25113 numberOfFloating = 0;
25114 groupHeight = this.gridOptionsWrapper.getPivotGroupHeaderHeight();
25115 headerHeight = this.gridOptionsWrapper.getPivotHeaderHeight();
25116 }
25117 var numberOfNonGroups = 1 + numberOfFloating;
25118 var numberOfGroups = headerRowCount - numberOfNonGroups;
25119 totalHeaderHeight = numberOfFloating * this.gridOptionsWrapper.getFloatingFiltersHeight();
25120 totalHeaderHeight += numberOfGroups * groupHeight;
25121 totalHeaderHeight += headerHeight;
25122 this.headerRootComp.setHeight(totalHeaderHeight);
25123 var floatingTopHeight = this.pinnedRowModel.getPinnedTopTotalHeight();
25124 var floatingBottomHeight = this.pinnedRowModel.getPinnedBottomTotalHeight();
25125 this.eTop.style.minHeight = floatingTopHeight + 'px';
25126 this.eTop.style.height = floatingTopHeight + 'px';
25127 this.eBottom.style.minHeight = floatingBottomHeight + 'px';
25128 this.eBottom.style.height = floatingBottomHeight + 'px';
25129 this.checkBodyHeight();
25130 };
25131 GridPanel.prototype.getBodyHeight = function () {
25132 return this.bodyHeight;
25133 };
25134 GridPanel.prototype.setHorizontalScrollPosition = function (hScrollPosition) {
25135 this.eBodyViewport.scrollLeft = hScrollPosition;
25136 // we need to manually do the event handling (rather than wait for the event)
25137 // for the alignedGridsService, as if we don't, the aligned grid service gets
25138 // notified async, and then it's 'consuming' flag doesn't get used right, and
25139 // we can end up with an infinite loop
25140 if (this.nextScrollLeft !== hScrollPosition) {
25141 this.nextScrollLeft = hScrollPosition;
25142 this.doHorizontalScroll();
25143 }
25144 };
25145 GridPanel.prototype.setVerticalScrollPosition = function (vScrollPosition) {
25146 this.eBodyViewport.scrollTop = vScrollPosition;
25147 };
25148 // tries to scroll by pixels, but returns what the result actually was
25149 GridPanel.prototype.scrollHorizontally = function (pixels) {
25150 var oldScrollPosition = this.eBodyViewport.scrollLeft;
25151 this.setHorizontalScrollPosition(oldScrollPosition + pixels);
25152 var newScrollPosition = this.eBodyViewport.scrollLeft;
25153 return newScrollPosition - oldScrollPosition;
25154 };
25155 // tries to scroll by pixels, but returns what the result actually was
25156 GridPanel.prototype.scrollVertically = function (pixels) {
25157 var oldScrollPosition = this.eBodyViewport.scrollTop;
25158 this.setVerticalScrollPosition(oldScrollPosition + pixels);
25159 var newScrollPosition = this.eBodyViewport.scrollTop;
25160 return newScrollPosition - oldScrollPosition;
25161 };
25162 GridPanel.prototype.addScrollListener = function () {
25163 var _this = this;
25164 this.addDestroyableEventListener(this.eBodyViewport, 'scroll', function () {
25165 _this.onBodyHorizontalScroll();
25166 _this.onAnyBodyScroll(_this.eBodyViewport);
25167 });
25168 this.addDestroyableEventListener(this.eRightViewport, 'scroll', this.onAnyBodyScroll.bind(this, this.eRightViewport));
25169 this.addDestroyableEventListener(this.eLeftViewport, 'scroll', this.onAnyBodyScroll.bind(this, this.eLeftViewport));
25170 this.addDestroyableEventListener(this.eFullWidthViewport, 'scroll', this.onAnyBodyScroll.bind(this, this.eFullWidthViewport));
25171 };
25172 GridPanel.prototype.onAnyBodyScroll = function (source) {
25173 var now = new Date().getTime();
25174 var diff = now - this.lastVScrollTime;
25175 var elementIsNotControllingTheScroll = source !== this.lastVScrollElement && diff < 500;
25176 if (elementIsNotControllingTheScroll) {
25177 return;
25178 }
25179 this.lastVScrollElement = source;
25180 this.lastVScrollTime = now;
25181 var scrollTop = source.scrollTop;
25182 if (this.useAnimationFrame) {
25183 if (this.nextScrollTop !== scrollTop) {
25184 this.nextScrollTop = scrollTop;
25185 this.animationFrameService.schedule();
25186 }
25187 }
25188 else {
25189 if (scrollTop !== this.scrollTop) {
25190 this.scrollTop = scrollTop;
25191 this.synchroniseVerticalScrollPositions(scrollTop);
25192 this.redrawRowsAfterScroll();
25193 }
25194 }
25195 };
25196 GridPanel.prototype.onBodyHorizontalScroll = function () {
25197 var scrollLeft = this.eBodyViewport.scrollLeft;
25198 if (this.nextScrollLeft !== scrollLeft) {
25199 this.nextScrollLeft = scrollLeft;
25200 if (this.useAnimationFrame) {
25201 this.animationFrameService.schedule();
25202 }
25203 else {
25204 this.doHorizontalScroll();
25205 }
25206 }
25207 };
25208 GridPanel.prototype.doHorizontalScroll = function () {
25209 this.scrollLeft = this.nextScrollLeft;
25210 var event = {
25211 type: events_1.Events.EVENT_BODY_SCROLL,
25212 api: this.gridApi,
25213 columnApi: this.columnApi,
25214 direction: 'horizontal',
25215 left: this.scrollLeft,
25216 top: this.scrollTop
25217 };
25218 this.eventService.dispatchEvent(event);
25219 this.horizontallyScrollHeaderCenterAndFloatingCenter();
25220 this.onHorizontalViewportChanged();
25221 };
25222 GridPanel.prototype.executeFrame = function () {
25223 if (this.scrollLeft !== this.nextScrollLeft) {
25224 this.doHorizontalScroll();
25225 return true;
25226 }
25227 else if (this.scrollTop !== this.nextScrollTop) {
25228 this.scrollTop = this.nextScrollTop;
25229 this.synchroniseVerticalScrollPositions(this.scrollTop);
25230 this.verticalRedrawNeeded = true;
25231 return true;
25232 }
25233 else if (this.verticalRedrawNeeded) {
25234 this.redrawRowsAfterScroll();
25235 this.verticalRedrawNeeded = false;
25236 return true;
25237 }
25238 else {
25239 return false;
25240 }
25241 };
25242 GridPanel.prototype.redrawRowsAfterScroll = function () {
25243 var event = {
25244 type: events_1.Events.EVENT_BODY_SCROLL,
25245 direction: 'vertical',
25246 api: this.gridApi,
25247 columnApi: this.columnApi,
25248 left: this.scrollLeft,
25249 top: this.scrollTop
25250 };
25251 this.eventService.dispatchEvent(event);
25252 };
25253 // this gets called whenever a change in the viewport, so we can inform column controller it has to work
25254 // out the virtual columns again. gets called from following locations:
25255 // + ensureColVisible, scroll, init, layoutChanged, displayedColumnsChanged, API (doLayout)
25256 GridPanel.prototype.onHorizontalViewportChanged = function () {
25257 var scrollWidth = this.eBodyViewport.clientWidth;
25258 var scrollPosition = this.getBodyViewportScrollLeft();
25259 this.columnController.setVirtualViewportPosition(scrollWidth, scrollPosition);
25260 };
25261 GridPanel.prototype.getBodyViewportScrollLeft = function () {
25262 // we defer to a util, as how you calculated scrollLeft when doing RTL depends on the browser
25263 return utils_1.Utils.getScrollLeft(this.eBodyViewport, this.enableRtl);
25264 };
25265 GridPanel.prototype.setBodyViewportScrollLeft = function (value) {
25266 // we defer to a util, as how you calculated scrollLeft when doing RTL depends on the browser
25267 utils_1.Utils.setScrollLeft(this.eBodyViewport, value, this.enableRtl);
25268 };
25269 GridPanel.prototype.horizontallyScrollHeaderCenterAndFloatingCenter = function () {
25270 var scrollLeft = this.getBodyViewportScrollLeft();
25271 var offset = this.enableRtl ? scrollLeft : -scrollLeft;
25272 this.headerRootComp.setHorizontalScroll(offset);
25273 this.eBottomContainer.style.left = offset + 'px';
25274 this.eTopContainer.style.left = offset + 'px';
25275 };
25276 GridPanel.prototype.synchroniseVerticalScrollPositions = function (position) {
25277 if (this.lastVScrollElement !== this.eBodyViewport) {
25278 this.eBodyViewport.scrollTop = position;
25279 }
25280 if (this.lastVScrollElement !== this.eLeftViewport && this.pinningLeft) {
25281 this.eLeftViewport.scrollTop = position;
25282 }
25283 if (this.lastVScrollElement !== this.eRightViewport && this.pinningRight) {
25284 this.eRightViewport.scrollTop = position;
25285 }
25286 if (this.lastVScrollElement !== this.eFullWidthViewport) {
25287 this.eFullWidthViewport.scrollTop = position;
25288 }
25289 // the row containers need to remember the scroll position, as if they are made
25290 // hidden / shown, the scroll position is lost
25291 this.rowContainerComponents.body.setVerticalScrollPosition(position);
25292 this.rowContainerComponents.pinnedLeft.setVerticalScrollPosition(position);
25293 this.rowContainerComponents.pinnedRight.setVerticalScrollPosition(position);
25294 this.rowContainerComponents.fullWidth.setVerticalScrollPosition(position);
25295 this.redrawRowsAfterScroll();
25296 };
25297 GridPanel.prototype.addScrollEventListener = function (listener) {
25298 this.eBodyViewport.addEventListener('scroll', listener);
25299 };
25300 GridPanel.prototype.removeScrollEventListener = function (listener) {
25301 this.eBodyViewport.removeEventListener('scroll', listener);
25302 };
25303 __decorate([
25304 context_1.Autowired('alignedGridsService'),
25305 __metadata("design:type", alignedGridsService_1.AlignedGridsService)
25306 ], GridPanel.prototype, "alignedGridsService", void 0);
25307 __decorate([
25308 context_1.Autowired('gridOptionsWrapper'),
25309 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
25310 ], GridPanel.prototype, "gridOptionsWrapper", void 0);
25311 __decorate([
25312 context_1.Autowired('columnController'),
25313 __metadata("design:type", columnController_1.ColumnController)
25314 ], GridPanel.prototype, "columnController", void 0);
25315 __decorate([
25316 context_1.Autowired('rowRenderer'),
25317 __metadata("design:type", rowRenderer_1.RowRenderer)
25318 ], GridPanel.prototype, "rowRenderer", void 0);
25319 __decorate([
25320 context_1.Autowired('pinnedRowModel'),
25321 __metadata("design:type", pinnedRowModel_1.PinnedRowModel)
25322 ], GridPanel.prototype, "pinnedRowModel", void 0);
25323 __decorate([
25324 context_1.Autowired('eventService'),
25325 __metadata("design:type", eventService_1.EventService)
25326 ], GridPanel.prototype, "eventService", void 0);
25327 __decorate([
25328 context_1.Autowired('context'),
25329 __metadata("design:type", context_1.Context)
25330 ], GridPanel.prototype, "context", void 0);
25331 __decorate([
25332 context_1.Autowired('animationFrameService'),
25333 __metadata("design:type", animationFrameService_1.AnimationFrameService)
25334 ], GridPanel.prototype, "animationFrameService", void 0);
25335 __decorate([
25336 context_1.Autowired('navigationService'),
25337 __metadata("design:type", navigationService_1.NavigationService)
25338 ], GridPanel.prototype, "navigationService", void 0);
25339 __decorate([
25340 context_1.Autowired('autoHeightCalculator'),
25341 __metadata("design:type", autoHeightCalculator_1.AutoHeightCalculator)
25342 ], GridPanel.prototype, "autoHeightCalculator", void 0);
25343 __decorate([
25344 context_1.Autowired('columnAnimationService'),
25345 __metadata("design:type", columnAnimationService_1.ColumnAnimationService)
25346 ], GridPanel.prototype, "columnAnimationService", void 0);
25347 __decorate([
25348 context_1.Autowired('autoWidthCalculator'),
25349 __metadata("design:type", autoWidthCalculator_1.AutoWidthCalculator)
25350 ], GridPanel.prototype, "autoWidthCalculator", void 0);
25351 __decorate([
25352 context_1.Autowired('paginationAutoPageSizeService'),
25353 __metadata("design:type", paginationProxy_1.PaginationAutoPageSizeService)
25354 ], GridPanel.prototype, "paginationAutoPageSizeService", void 0);
25355 __decorate([
25356 context_1.Autowired('beans'),
25357 __metadata("design:type", beans_1.Beans)
25358 ], GridPanel.prototype, "beans", void 0);
25359 __decorate([
25360 context_1.Autowired('paginationProxy'),
25361 __metadata("design:type", paginationProxy_1.PaginationProxy)
25362 ], GridPanel.prototype, "paginationProxy", void 0);
25363 __decorate([
25364 context_1.Autowired('columnApi'),
25365 __metadata("design:type", columnApi_1.ColumnApi)
25366 ], GridPanel.prototype, "columnApi", void 0);
25367 __decorate([
25368 context_1.Autowired('gridApi'),
25369 __metadata("design:type", gridApi_1.GridApi)
25370 ], GridPanel.prototype, "gridApi", void 0);
25371 __decorate([
25372 context_1.Autowired('dragService'),
25373 __metadata("design:type", dragService_1.DragService)
25374 ], GridPanel.prototype, "dragService", void 0);
25375 __decorate([
25376 context_1.Autowired('selectionController'),
25377 __metadata("design:type", selectionController_1.SelectionController)
25378 ], GridPanel.prototype, "selectionController", void 0);
25379 __decorate([
25380 context_1.Autowired('csvCreator'),
25381 __metadata("design:type", csvCreator_1.CsvCreator)
25382 ], GridPanel.prototype, "csvCreator", void 0);
25383 __decorate([
25384 context_1.Autowired('mouseEventService'),
25385 __metadata("design:type", mouseEventService_1.MouseEventService)
25386 ], GridPanel.prototype, "mouseEventService", void 0);
25387 __decorate([
25388 context_1.Autowired('focusedCellController'),
25389 __metadata("design:type", focusedCellController_1.FocusedCellController)
25390 ], GridPanel.prototype, "focusedCellController", void 0);
25391 __decorate([
25392 context_1.Autowired('$scope'),
25393 __metadata("design:type", Object)
25394 ], GridPanel.prototype, "$scope", void 0);
25395 __decorate([
25396 context_1.Autowired('scrollVisibleService'),
25397 __metadata("design:type", scrollVisibleService_1.ScrollVisibleService)
25398 ], GridPanel.prototype, "scrollVisibleService", void 0);
25399 __decorate([
25400 context_1.Autowired('frameworkFactory'),
25401 __metadata("design:type", Object)
25402 ], GridPanel.prototype, "frameworkFactory", void 0);
25403 __decorate([
25404 context_1.Autowired('valueService'),
25405 __metadata("design:type", valueService_1.ValueService)
25406 ], GridPanel.prototype, "valueService", void 0);
25407 __decorate([
25408 context_1.Autowired('componentRecipes'),
25409 __metadata("design:type", componentRecipes_1.ComponentRecipes)
25410 ], GridPanel.prototype, "componentRecipes", void 0);
25411 __decorate([
25412 context_1.Autowired('dragAndDropService'),
25413 __metadata("design:type", dragAndDropService_1.DragAndDropService)
25414 ], GridPanel.prototype, "dragAndDropService", void 0);
25415 __decorate([
25416 context_1.Autowired('heightScaler'),
25417 __metadata("design:type", heightScaler_1.HeightScaler)
25418 ], GridPanel.prototype, "heightScaler", void 0);
25419 __decorate([
25420 context_1.Autowired('enterprise'),
25421 __metadata("design:type", Boolean)
25422 ], GridPanel.prototype, "enterprise", void 0);
25423 __decorate([
25424 context_1.Optional('rangeController'),
25425 __metadata("design:type", Object)
25426 ], GridPanel.prototype, "rangeController", void 0);
25427 __decorate([
25428 context_1.Optional('contextMenuFactory'),
25429 __metadata("design:type", Object)
25430 ], GridPanel.prototype, "contextMenuFactory", void 0);
25431 __decorate([
25432 context_1.Optional('clipboardService'),
25433 __metadata("design:type", Object)
25434 ], GridPanel.prototype, "clipboardService", void 0);
25435 __decorate([
25436 componentAnnotations_1.RefSelector('eBody'),
25437 __metadata("design:type", HTMLElement)
25438 ], GridPanel.prototype, "eBody", void 0);
25439 __decorate([
25440 componentAnnotations_1.RefSelector('eBodyViewport'),
25441 __metadata("design:type", HTMLElement)
25442 ], GridPanel.prototype, "eBodyViewport", void 0);
25443 __decorate([
25444 componentAnnotations_1.RefSelector('eBodyContainer'),
25445 __metadata("design:type", HTMLElement)
25446 ], GridPanel.prototype, "eBodyContainer", void 0);
25447 __decorate([
25448 componentAnnotations_1.RefSelector('eLeftContainer'),
25449 __metadata("design:type", HTMLElement)
25450 ], GridPanel.prototype, "eLeftContainer", void 0);
25451 __decorate([
25452 componentAnnotations_1.RefSelector('eRightContainer'),
25453 __metadata("design:type", HTMLElement)
25454 ], GridPanel.prototype, "eRightContainer", void 0);
25455 __decorate([
25456 componentAnnotations_1.RefSelector('eFullWidthViewportWrapper'),
25457 __metadata("design:type", HTMLElement)
25458 ], GridPanel.prototype, "eFullWidthViewportWrapper", void 0);
25459 __decorate([
25460 componentAnnotations_1.RefSelector('eFullWidthViewport'),
25461 __metadata("design:type", HTMLElement)
25462 ], GridPanel.prototype, "eFullWidthViewport", void 0);
25463 __decorate([
25464 componentAnnotations_1.RefSelector('eFullWidthContainer'),
25465 __metadata("design:type", HTMLElement)
25466 ], GridPanel.prototype, "eFullWidthContainer", void 0);
25467 __decorate([
25468 componentAnnotations_1.RefSelector('eLeftViewport'),
25469 __metadata("design:type", HTMLElement)
25470 ], GridPanel.prototype, "eLeftViewport", void 0);
25471 __decorate([
25472 componentAnnotations_1.RefSelector('eLeftViewportWrapper'),
25473 __metadata("design:type", HTMLElement)
25474 ], GridPanel.prototype, "eLeftViewportWrapper", void 0);
25475 __decorate([
25476 componentAnnotations_1.RefSelector('eRightViewport'),
25477 __metadata("design:type", HTMLElement)
25478 ], GridPanel.prototype, "eRightViewport", void 0);
25479 __decorate([
25480 componentAnnotations_1.RefSelector('eRightViewportWrapper'),
25481 __metadata("design:type", HTMLElement)
25482 ], GridPanel.prototype, "eRightViewportWrapper", void 0);
25483 __decorate([
25484 componentAnnotations_1.RefSelector('eTop'),
25485 __metadata("design:type", HTMLElement)
25486 ], GridPanel.prototype, "eTop", void 0);
25487 __decorate([
25488 componentAnnotations_1.RefSelector('eLeftTop'),
25489 __metadata("design:type", HTMLElement)
25490 ], GridPanel.prototype, "eLeftTop", void 0);
25491 __decorate([
25492 componentAnnotations_1.RefSelector('eRightTop'),
25493 __metadata("design:type", HTMLElement)
25494 ], GridPanel.prototype, "eRightTop", void 0);
25495 __decorate([
25496 componentAnnotations_1.RefSelector('eTopContainer'),
25497 __metadata("design:type", HTMLElement)
25498 ], GridPanel.prototype, "eTopContainer", void 0);
25499 __decorate([
25500 componentAnnotations_1.RefSelector('eTopViewport'),
25501 __metadata("design:type", HTMLElement)
25502 ], GridPanel.prototype, "eTopViewport", void 0);
25503 __decorate([
25504 componentAnnotations_1.RefSelector('eTopFullWidthContainer'),
25505 __metadata("design:type", HTMLElement)
25506 ], GridPanel.prototype, "eTopFullWidthContainer", void 0);
25507 __decorate([
25508 componentAnnotations_1.RefSelector('eBottom'),
25509 __metadata("design:type", HTMLElement)
25510 ], GridPanel.prototype, "eBottom", void 0);
25511 __decorate([
25512 componentAnnotations_1.RefSelector('eLeftBottom'),
25513 __metadata("design:type", HTMLElement)
25514 ], GridPanel.prototype, "eLeftBottom", void 0);
25515 __decorate([
25516 componentAnnotations_1.RefSelector('eRightBottom'),
25517 __metadata("design:type", HTMLElement)
25518 ], GridPanel.prototype, "eRightBottom", void 0);
25519 __decorate([
25520 componentAnnotations_1.RefSelector('eBottomContainer'),
25521 __metadata("design:type", HTMLElement)
25522 ], GridPanel.prototype, "eBottomContainer", void 0);
25523 __decorate([
25524 componentAnnotations_1.RefSelector('eBottomViewport'),
25525 __metadata("design:type", HTMLElement)
25526 ], GridPanel.prototype, "eBottomViewport", void 0);
25527 __decorate([
25528 componentAnnotations_1.RefSelector('eBottomFullWidthContainer'),
25529 __metadata("design:type", HTMLElement)
25530 ], GridPanel.prototype, "eBottomFullWidthContainer", void 0);
25531 __decorate([
25532 componentAnnotations_1.RefSelector('headerRoot'),
25533 __metadata("design:type", headerRootComp_1.HeaderRootComp)
25534 ], GridPanel.prototype, "headerRootComp", void 0);
25535 __decorate([
25536 context_1.PreDestroy,
25537 __metadata("design:type", Function),
25538 __metadata("design:paramtypes", []),
25539 __metadata("design:returntype", void 0)
25540 ], GridPanel.prototype, "destroy", null);
25541 __decorate([
25542 context_1.PostConstruct,
25543 __metadata("design:type", Function),
25544 __metadata("design:paramtypes", []),
25545 __metadata("design:returntype", void 0)
25546 ], GridPanel.prototype, "init", null);
25547 return GridPanel;
25548}(component_1.Component));
25549exports.GridPanel = GridPanel;
25550
25551
25552/***/ }),
25553/* 81 */
25554/***/ (function(module, exports, __webpack_require__) {
25555
25556"use strict";
25557/**
25558 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
25559 * @version v18.1.2
25560 * @link http://www.ag-grid.com/
25561 * @license MIT
25562 */
25563
25564var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
25565 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
25566 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
25567 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
25568 return c > 3 && r && Object.defineProperty(target, key, r), r;
25569};
25570var __metadata = (this && this.__metadata) || function (k, v) {
25571 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
25572};
25573Object.defineProperty(exports, "__esModule", { value: true });
25574var context_1 = __webpack_require__(0);
25575var beans_1 = __webpack_require__(30);
25576var cellComp_1 = __webpack_require__(36);
25577var columnController_1 = __webpack_require__(4);
25578var utils_1 = __webpack_require__(1);
25579var AutoHeightCalculator = (function () {
25580 function AutoHeightCalculator() {
25581 }
25582 AutoHeightCalculator.prototype.registerGridComp = function (gridPanel) {
25583 this.gridPanel = gridPanel;
25584 };
25585 AutoHeightCalculator.prototype.getPreferredHeightForRow = function (rowNode) {
25586 var _this = this;
25587 if (!this.eDummyContainer) {
25588 this.eDummyContainer = document.createElement('div');
25589 // so any styles on row also get applied in dummy, otherwise
25590 // the content in dummy may differ to the real
25591 utils_1._.addCssClass(this.eDummyContainer, 'ag-row ag-row-no-focus');
25592 }
25593 // we put the dummy into the body container, so it will inherit all the
25594 // css styles that the real cells are inheriting
25595 var eBodyContainer = this.gridPanel.getBodyContainer();
25596 eBodyContainer.appendChild(this.eDummyContainer);
25597 var cellComps = [];
25598 var cols = this.columnController.getAllAutoRowHeightCols();
25599 console.log();
25600 cols.forEach(function (col) {
25601 var cellComp = new cellComp_1.CellComp(_this.$scope, _this.beans, col, rowNode, null, true);
25602 cellComp.setParentRow(_this.eDummyContainer);
25603 cellComps.push(cellComp);
25604 });
25605 var template = cellComps.map(function (cellComp) { return cellComp.getCreateTemplate(); }).join(' ');
25606 this.eDummyContainer.innerHTML = template;
25607 // this gets any cellComps that are using components to put the components in
25608 cellComps.forEach(function (cellComp) { return cellComp.afterAttached(); });
25609 // we should be able to just take the height of the row at this point, however
25610 // the row isn't expanding to cover the cell heights, i don't know why, i couldn't
25611 // figure it out so instead looking at the individual cells instead
25612 var maxCellHeight = 0;
25613 for (var i = 0; i < this.eDummyContainer.children.length; i++) {
25614 var child = this.eDummyContainer.children[i];
25615 if (child.offsetHeight > maxCellHeight) {
25616 maxCellHeight = child.offsetHeight;
25617 }
25618 }
25619 // we are finished with the dummy container, so get rid of it
25620 eBodyContainer.removeChild(this.eDummyContainer);
25621 cellComps.forEach(function (cellComp) {
25622 // dunno why we need to detach first, doing it here to be consistent with code in RowComp
25623 cellComp.detach();
25624 cellComp.destroy();
25625 });
25626 // in case anything left over from last time
25627 utils_1._.removeAllChildren(this.eDummyContainer);
25628 return maxCellHeight;
25629 };
25630 __decorate([
25631 context_1.Autowired('beans'),
25632 __metadata("design:type", beans_1.Beans)
25633 ], AutoHeightCalculator.prototype, "beans", void 0);
25634 __decorate([
25635 context_1.Autowired("$scope"),
25636 __metadata("design:type", Object)
25637 ], AutoHeightCalculator.prototype, "$scope", void 0);
25638 __decorate([
25639 context_1.Autowired("columnController"),
25640 __metadata("design:type", columnController_1.ColumnController)
25641 ], AutoHeightCalculator.prototype, "columnController", void 0);
25642 AutoHeightCalculator = __decorate([
25643 context_1.Bean('autoHeightCalculator')
25644 ], AutoHeightCalculator);
25645 return AutoHeightCalculator;
25646}());
25647exports.AutoHeightCalculator = AutoHeightCalculator;
25648
25649
25650/***/ }),
25651/* 82 */
25652/***/ (function(module, exports, __webpack_require__) {
25653
25654"use strict";
25655/**
25656 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
25657 * @version v18.1.2
25658 * @link http://www.ag-grid.com/
25659 * @license MIT
25660 */
25661
25662var __extends = (this && this.__extends) || (function () {
25663 var extendStatics = Object.setPrototypeOf ||
25664 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
25665 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
25666 return function (d, b) {
25667 extendStatics(d, b);
25668 function __() { this.constructor = d; }
25669 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
25670 };
25671})();
25672var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
25673 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
25674 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
25675 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
25676 return c > 3 && r && Object.defineProperty(target, key, r), r;
25677};
25678var __metadata = (this && this.__metadata) || function (k, v) {
25679 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
25680};
25681Object.defineProperty(exports, "__esModule", { value: true });
25682var gridOptionsWrapper_1 = __webpack_require__(2);
25683var columnController_1 = __webpack_require__(4);
25684var column_1 = __webpack_require__(10);
25685var context_1 = __webpack_require__(0);
25686var headerContainer_1 = __webpack_require__(100);
25687var eventService_1 = __webpack_require__(3);
25688var events_1 = __webpack_require__(5);
25689var scrollVisibleService_1 = __webpack_require__(38);
25690var component_1 = __webpack_require__(8);
25691var componentAnnotations_1 = __webpack_require__(11);
25692var utils_1 = __webpack_require__(1);
25693var gridApi_1 = __webpack_require__(6);
25694var autoWidthCalculator_1 = __webpack_require__(41);
25695var HeaderRootComp = (function (_super) {
25696 __extends(HeaderRootComp, _super);
25697 function HeaderRootComp() {
25698 return _super.call(this, HeaderRootComp.TEMPLATE) || this;
25699 }
25700 HeaderRootComp.prototype.registerGridComp = function (gridPanel) {
25701 this.gridPanel = gridPanel;
25702 this.centerContainer.registerGridComp(gridPanel);
25703 this.pinnedLeftContainer.registerGridComp(gridPanel);
25704 this.pinnedRightContainer.registerGridComp(gridPanel);
25705 };
25706 HeaderRootComp.prototype.postConstruct = function () {
25707 var _this = this;
25708 this.gridApi.registerHeaderRootComp(this);
25709 this.autoWidthCalculator.registerHeaderRootComp(this);
25710 this.centerContainer = new headerContainer_1.HeaderContainer(this.eHeaderContainer, this.eHeaderViewport, null);
25711 this.childContainers = [this.centerContainer];
25712 this.pinnedLeftContainer = new headerContainer_1.HeaderContainer(this.ePinnedLeftHeader, null, column_1.Column.PINNED_LEFT);
25713 this.pinnedRightContainer = new headerContainer_1.HeaderContainer(this.ePinnedRightHeader, null, column_1.Column.PINNED_RIGHT);
25714 this.childContainers.push(this.pinnedLeftContainer);
25715 this.childContainers.push(this.pinnedRightContainer);
25716 this.childContainers.forEach(function (container) { return _this.context.wireBean(container); });
25717 // shotgun way to get labels to change, eg from sum(amount) to avg(amount)
25718 this.eventService.addEventListener(events_1.Events.EVENT_COLUMN_VALUE_CHANGED, this.refreshHeader.bind(this));
25719 // for setting ag-pivot-on / ag-pivot-off CSS classes
25720 this.eventService.addEventListener(events_1.Events.EVENT_COLUMN_PIVOT_MODE_CHANGED, this.onPivotModeChanged.bind(this));
25721 this.addPreventHeaderScroll();
25722 if (this.columnController.isReady()) {
25723 this.refreshHeader();
25724 }
25725 };
25726 HeaderRootComp.prototype.setHorizontalScroll = function (offset) {
25727 this.eHeaderContainer.style.left = offset + 'px';
25728 };
25729 HeaderRootComp.prototype.forEachHeaderElement = function (callback) {
25730 this.childContainers.forEach(function (childContainer) { return childContainer.forEachHeaderElement(callback); });
25731 };
25732 HeaderRootComp.prototype.destroy = function () {
25733 this.childContainers.forEach(function (container) { return container.destroy(); });
25734 };
25735 HeaderRootComp.prototype.refreshHeader = function () {
25736 this.childContainers.forEach(function (container) { return container.refresh(); });
25737 };
25738 HeaderRootComp.prototype.onPivotModeChanged = function () {
25739 var pivotMode = this.columnController.isPivotMode();
25740 utils_1.Utils.addOrRemoveCssClass(this.getGui(), 'ag-pivot-on', pivotMode);
25741 utils_1.Utils.addOrRemoveCssClass(this.getGui(), 'ag-pivot-off', !pivotMode);
25742 };
25743 HeaderRootComp.prototype.setHeight = function (height) {
25744 this.getGui().style.height = height + 'px';
25745 this.getGui().style.minHeight = height + 'px';
25746 };
25747 // if the user is in floating filter and hits tab a few times, the header can
25748 // end up scrolling to show items off the screen, leaving the grid and header
25749 // and the grid columns no longer in sync.
25750 HeaderRootComp.prototype.addPreventHeaderScroll = function () {
25751 var _this = this;
25752 this.addDestroyableEventListener(this.eHeaderViewport, 'scroll', function () {
25753 // if the header scrolls, the header will be out of sync. so we reset the
25754 // header scroll, and then scroll the body, which will in turn set the offset
25755 // on the header, giving the impression that the header scrolled as expected.
25756 var scrollLeft = _this.eHeaderViewport.scrollLeft;
25757 if (scrollLeft !== 0) {
25758 _this.gridPanel.scrollHorizontally(scrollLeft);
25759 _this.eHeaderViewport.scrollLeft = 0;
25760 }
25761 });
25762 };
25763 HeaderRootComp.prototype.setLeftVisible = function (visible) {
25764 utils_1.Utils.setVisible(this.ePinnedLeftHeader, visible);
25765 };
25766 HeaderRootComp.prototype.setRightVisible = function (visible) {
25767 utils_1.Utils.setVisible(this.ePinnedRightHeader, visible);
25768 };
25769 HeaderRootComp.TEMPLATE = "<div class=\"ag-header\" role=\"row\">\n <div class=\"ag-pinned-left-header\" ref=\"ePinnedLeftHeader\" role=\"presentation\"></div>\n <div class=\"ag-header-viewport\" ref=\"eHeaderViewport\" role=\"presentation\">\n <div class=\"ag-header-container\" ref=\"eHeaderContainer\" role=\"presentation\"></div>\n </div>\n <div class=\"ag-pinned-right-header\" ref=\"ePinnedRightHeader\" role=\"presentation\"></div>\n </div>";
25770 __decorate([
25771 componentAnnotations_1.RefSelector('ePinnedLeftHeader'),
25772 __metadata("design:type", HTMLElement)
25773 ], HeaderRootComp.prototype, "ePinnedLeftHeader", void 0);
25774 __decorate([
25775 componentAnnotations_1.RefSelector('ePinnedRightHeader'),
25776 __metadata("design:type", HTMLElement)
25777 ], HeaderRootComp.prototype, "ePinnedRightHeader", void 0);
25778 __decorate([
25779 componentAnnotations_1.RefSelector('eHeaderContainer'),
25780 __metadata("design:type", HTMLElement)
25781 ], HeaderRootComp.prototype, "eHeaderContainer", void 0);
25782 __decorate([
25783 componentAnnotations_1.RefSelector('eHeaderViewport'),
25784 __metadata("design:type", HTMLElement)
25785 ], HeaderRootComp.prototype, "eHeaderViewport", void 0);
25786 __decorate([
25787 context_1.Autowired('gridOptionsWrapper'),
25788 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
25789 ], HeaderRootComp.prototype, "gridOptionsWrapper", void 0);
25790 __decorate([
25791 context_1.Autowired('columnController'),
25792 __metadata("design:type", columnController_1.ColumnController)
25793 ], HeaderRootComp.prototype, "columnController", void 0);
25794 __decorate([
25795 context_1.Autowired('context'),
25796 __metadata("design:type", context_1.Context)
25797 ], HeaderRootComp.prototype, "context", void 0);
25798 __decorate([
25799 context_1.Autowired('eventService'),
25800 __metadata("design:type", eventService_1.EventService)
25801 ], HeaderRootComp.prototype, "eventService", void 0);
25802 __decorate([
25803 context_1.Autowired('scrollVisibleService'),
25804 __metadata("design:type", scrollVisibleService_1.ScrollVisibleService)
25805 ], HeaderRootComp.prototype, "scrollVisibleService", void 0);
25806 __decorate([
25807 context_1.Autowired('gridApi'),
25808 __metadata("design:type", gridApi_1.GridApi)
25809 ], HeaderRootComp.prototype, "gridApi", void 0);
25810 __decorate([
25811 context_1.Autowired('autoWidthCalculator'),
25812 __metadata("design:type", autoWidthCalculator_1.AutoWidthCalculator)
25813 ], HeaderRootComp.prototype, "autoWidthCalculator", void 0);
25814 __decorate([
25815 context_1.PostConstruct,
25816 __metadata("design:type", Function),
25817 __metadata("design:paramtypes", []),
25818 __metadata("design:returntype", void 0)
25819 ], HeaderRootComp.prototype, "postConstruct", null);
25820 __decorate([
25821 context_1.PreDestroy,
25822 __metadata("design:type", Function),
25823 __metadata("design:paramtypes", []),
25824 __metadata("design:returntype", void 0)
25825 ], HeaderRootComp.prototype, "destroy", null);
25826 return HeaderRootComp;
25827}(component_1.Component));
25828exports.HeaderRootComp = HeaderRootComp;
25829
25830
25831/***/ }),
25832/* 83 */
25833/***/ (function(module, exports, __webpack_require__) {
25834
25835"use strict";
25836/**
25837 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
25838 * @version v18.1.2
25839 * @link http://www.ag-grid.com/
25840 * @license MIT
25841 */
25842
25843Object.defineProperty(exports, "__esModule", { value: true });
25844var utils_1 = __webpack_require__(1);
25845var CssClassApplier = (function () {
25846 function CssClassApplier() {
25847 }
25848 CssClassApplier.addHeaderClassesFromColDef = function (abstractColDef, eHeaderCell, gridOptionsWrapper, column, columnGroup) {
25849 if (utils_1.Utils.missing(abstractColDef)) {
25850 return;
25851 }
25852 this.addColumnClassesFromCollDef(abstractColDef.headerClass, abstractColDef, eHeaderCell, gridOptionsWrapper, column, columnGroup);
25853 };
25854 CssClassApplier.addToolPanelClassesFromColDef = function (abstractColDef, eHeaderCell, gridOptionsWrapper, column, columnGroup) {
25855 if (utils_1.Utils.missing(abstractColDef)) {
25856 return;
25857 }
25858 this.addColumnClassesFromCollDef(abstractColDef.toolPanelClass, abstractColDef, eHeaderCell, gridOptionsWrapper, column, columnGroup);
25859 };
25860 CssClassApplier.addColumnClassesFromCollDef = function (classesOrFunc, abstractColDef, eHeaderCell, gridOptionsWrapper, column, columnGroup) {
25861 if (utils_1.Utils.missing(classesOrFunc)) {
25862 return;
25863 }
25864 var classToUse;
25865 if (typeof classesOrFunc === 'function') {
25866 var params = {
25867 // bad naming, as colDef here can be a group or a column,
25868 // however most people won't appreciate the difference,
25869 // so keeping it as colDef to avoid confusion.
25870 colDef: abstractColDef,
25871 column: column,
25872 columnGroup: columnGroup,
25873 context: gridOptionsWrapper.getContext(),
25874 api: gridOptionsWrapper.getApi()
25875 };
25876 var headerClassFunc = classesOrFunc;
25877 classToUse = headerClassFunc(params);
25878 }
25879 else {
25880 classToUse = classesOrFunc;
25881 }
25882 if (typeof classToUse === 'string') {
25883 utils_1.Utils.addCssClass(eHeaderCell, classToUse);
25884 }
25885 else if (Array.isArray(classToUse)) {
25886 classToUse.forEach(function (cssClassItem) {
25887 utils_1.Utils.addCssClass(eHeaderCell, cssClassItem);
25888 });
25889 }
25890 };
25891 return CssClassApplier;
25892}());
25893exports.CssClassApplier = CssClassApplier;
25894
25895
25896/***/ }),
25897/* 84 */
25898/***/ (function(module, exports, __webpack_require__) {
25899
25900"use strict";
25901/**
25902 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
25903 * @version v18.1.2
25904 * @link http://www.ag-grid.com/
25905 * @license MIT
25906 */
25907
25908var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
25909 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
25910 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
25911 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
25912 return c > 3 && r && Object.defineProperty(target, key, r), r;
25913};
25914var __metadata = (this && this.__metadata) || function (k, v) {
25915 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
25916};
25917Object.defineProperty(exports, "__esModule", { value: true });
25918var context_1 = __webpack_require__(0);
25919var constants_1 = __webpack_require__(9);
25920var columnController_1 = __webpack_require__(4);
25921var utils_1 = __webpack_require__(1);
25922var gridRow_1 = __webpack_require__(66);
25923var gridCell_1 = __webpack_require__(25);
25924var gridOptionsWrapper_1 = __webpack_require__(2);
25925var pinnedRowModel_1 = __webpack_require__(32);
25926var CellNavigationService = (function () {
25927 function CellNavigationService() {
25928 }
25929 // returns null if no cell to focus on, ie at the end of the grid
25930 CellNavigationService.prototype.getNextCellToFocus = function (key, lastCellToFocus) {
25931 // starting with the provided cell, we keep moving until we find a cell we can
25932 // focus on.
25933 var pointer = lastCellToFocus;
25934 var finished = false;
25935 // finished will be true when either:
25936 // a) cell found that we can focus on
25937 // b) run out of cells (ie the method returns null)
25938 while (!finished) {
25939 switch (key) {
25940 case constants_1.Constants.KEY_UP:
25941 pointer = this.getCellAbove(pointer);
25942 break;
25943 case constants_1.Constants.KEY_DOWN:
25944 pointer = this.getCellBelow(pointer);
25945 break;
25946 case constants_1.Constants.KEY_RIGHT:
25947 if (this.gridOptionsWrapper.isEnableRtl()) {
25948 pointer = this.getCellToLeft(pointer);
25949 }
25950 else {
25951 pointer = this.getCellToRight(pointer);
25952 }
25953 break;
25954 case constants_1.Constants.KEY_LEFT:
25955 if (this.gridOptionsWrapper.isEnableRtl()) {
25956 pointer = this.getCellToRight(pointer);
25957 }
25958 else {
25959 pointer = this.getCellToLeft(pointer);
25960 }
25961 break;
25962 default:
25963 console.log('ag-Grid: unknown key for navigation ' + key);
25964 pointer = null;
25965 break;
25966 }
25967 if (pointer) {
25968 finished = this.isCellGoodToFocusOn(pointer);
25969 }
25970 else {
25971 finished = true;
25972 }
25973 }
25974 return pointer;
25975 };
25976 CellNavigationService.prototype.isCellGoodToFocusOn = function (gridCell) {
25977 var column = gridCell.column;
25978 var rowNode;
25979 switch (gridCell.floating) {
25980 case constants_1.Constants.PINNED_TOP:
25981 rowNode = this.pinnedRowModel.getPinnedTopRow(gridCell.rowIndex);
25982 break;
25983 case constants_1.Constants.PINNED_BOTTOM:
25984 rowNode = this.pinnedRowModel.getPinnedBottomRow(gridCell.rowIndex);
25985 break;
25986 default:
25987 rowNode = this.rowModel.getRow(gridCell.rowIndex);
25988 break;
25989 }
25990 var suppressNavigable = column.isSuppressNavigable(rowNode);
25991 return !suppressNavigable;
25992 };
25993 CellNavigationService.prototype.getCellToLeft = function (lastCell) {
25994 var colToLeft = this.columnController.getDisplayedColBefore(lastCell.column);
25995 if (!colToLeft) {
25996 return null;
25997 }
25998 else {
25999 var gridCellDef = { rowIndex: lastCell.rowIndex, column: colToLeft, floating: lastCell.floating };
26000 return new gridCell_1.GridCell(gridCellDef);
26001 }
26002 };
26003 CellNavigationService.prototype.getCellToRight = function (lastCell) {
26004 var colToRight = this.columnController.getDisplayedColAfter(lastCell.column);
26005 // if already on right, do nothing
26006 if (!colToRight) {
26007 return null;
26008 }
26009 else {
26010 var gridCellDef = { rowIndex: lastCell.rowIndex, column: colToRight, floating: lastCell.floating };
26011 return new gridCell_1.GridCell(gridCellDef);
26012 }
26013 };
26014 CellNavigationService.prototype.getRowBelow = function (lastRow) {
26015 // if already on top row, do nothing
26016 if (this.isLastRowInContainer(lastRow)) {
26017 if (lastRow.isFloatingBottom()) {
26018 return null;
26019 }
26020 else if (lastRow.isNotFloating()) {
26021 if (this.pinnedRowModel.isRowsToRender(constants_1.Constants.PINNED_BOTTOM)) {
26022 return new gridRow_1.GridRow(0, constants_1.Constants.PINNED_BOTTOM);
26023 }
26024 else {
26025 return null;
26026 }
26027 }
26028 else {
26029 if (this.rowModel.isRowsToRender()) {
26030 return new gridRow_1.GridRow(0, null);
26031 }
26032 else if (this.pinnedRowModel.isRowsToRender(constants_1.Constants.PINNED_BOTTOM)) {
26033 return new gridRow_1.GridRow(0, constants_1.Constants.PINNED_BOTTOM);
26034 }
26035 else {
26036 return null;
26037 }
26038 }
26039 }
26040 else {
26041 return new gridRow_1.GridRow(lastRow.rowIndex + 1, lastRow.floating);
26042 }
26043 };
26044 CellNavigationService.prototype.getCellBelow = function (lastCell) {
26045 var rowBelow = this.getRowBelow(lastCell.getGridRow());
26046 if (rowBelow) {
26047 var gridCellDef = { rowIndex: rowBelow.rowIndex, column: lastCell.column, floating: rowBelow.floating };
26048 return new gridCell_1.GridCell(gridCellDef);
26049 }
26050 else {
26051 return null;
26052 }
26053 };
26054 CellNavigationService.prototype.isLastRowInContainer = function (gridRow) {
26055 if (gridRow.isFloatingTop()) {
26056 var lastTopIndex = this.pinnedRowModel.getPinnedTopRowData().length - 1;
26057 return lastTopIndex <= gridRow.rowIndex;
26058 }
26059 else if (gridRow.isFloatingBottom()) {
26060 var lastBottomIndex = this.pinnedRowModel.getPinnedBottomRowData().length - 1;
26061 return lastBottomIndex <= gridRow.rowIndex;
26062 }
26063 else {
26064 var lastBodyIndex = this.rowModel.getPageLastRow();
26065 return lastBodyIndex <= gridRow.rowIndex;
26066 }
26067 };
26068 CellNavigationService.prototype.getRowAbove = function (lastRow) {
26069 // if already on top row, do nothing
26070 if (lastRow.rowIndex === 0) {
26071 if (lastRow.isFloatingTop()) {
26072 return null;
26073 }
26074 else if (lastRow.isNotFloating()) {
26075 if (this.pinnedRowModel.isRowsToRender(constants_1.Constants.PINNED_TOP)) {
26076 return this.getLastFloatingTopRow();
26077 }
26078 else {
26079 return null;
26080 }
26081 }
26082 else {
26083 // last floating bottom
26084 if (this.rowModel.isRowsToRender()) {
26085 return this.getLastBodyCell();
26086 }
26087 else if (this.pinnedRowModel.isRowsToRender(constants_1.Constants.PINNED_TOP)) {
26088 return this.getLastFloatingTopRow();
26089 }
26090 else {
26091 return null;
26092 }
26093 }
26094 }
26095 else {
26096 return new gridRow_1.GridRow(lastRow.rowIndex - 1, lastRow.floating);
26097 }
26098 };
26099 CellNavigationService.prototype.getCellAbove = function (lastCell) {
26100 var rowAbove = this.getRowAbove(lastCell.getGridRow());
26101 if (rowAbove) {
26102 var gridCellDef = { rowIndex: rowAbove.rowIndex, column: lastCell.column, floating: rowAbove.floating };
26103 return new gridCell_1.GridCell(gridCellDef);
26104 }
26105 else {
26106 return null;
26107 }
26108 };
26109 CellNavigationService.prototype.getLastBodyCell = function () {
26110 var lastBodyRow = this.rowModel.getPageLastRow();
26111 return new gridRow_1.GridRow(lastBodyRow, null);
26112 };
26113 CellNavigationService.prototype.getLastFloatingTopRow = function () {
26114 var lastFloatingRow = this.pinnedRowModel.getPinnedTopRowData().length - 1;
26115 return new gridRow_1.GridRow(lastFloatingRow, constants_1.Constants.PINNED_TOP);
26116 };
26117 CellNavigationService.prototype.getNextTabbedCell = function (gridCell, backwards) {
26118 if (backwards) {
26119 return this.getNextTabbedCellBackwards(gridCell);
26120 }
26121 else {
26122 return this.getNextTabbedCellForwards(gridCell);
26123 }
26124 };
26125 CellNavigationService.prototype.getNextTabbedCellForwards = function (gridCell) {
26126 var displayedColumns = this.columnController.getAllDisplayedColumns();
26127 var newRowIndex = gridCell.rowIndex;
26128 var newFloating = gridCell.floating;
26129 // move along to the next cell
26130 var newColumn = this.columnController.getDisplayedColAfter(gridCell.column);
26131 // check if end of the row, and if so, go forward a row
26132 if (!newColumn) {
26133 newColumn = displayedColumns[0];
26134 var rowBelow = this.getRowBelow(gridCell.getGridRow());
26135 if (utils_1.Utils.missing(rowBelow)) {
26136 return;
26137 }
26138 newRowIndex = rowBelow.rowIndex;
26139 newFloating = rowBelow.floating;
26140 }
26141 var gridCellDef = { rowIndex: newRowIndex, column: newColumn, floating: newFloating };
26142 return new gridCell_1.GridCell(gridCellDef);
26143 };
26144 CellNavigationService.prototype.getNextTabbedCellBackwards = function (gridCell) {
26145 var displayedColumns = this.columnController.getAllDisplayedColumns();
26146 var newRowIndex = gridCell.rowIndex;
26147 var newFloating = gridCell.floating;
26148 // move along to the next cell
26149 var newColumn = this.columnController.getDisplayedColBefore(gridCell.column);
26150 // check if end of the row, and if so, go forward a row
26151 if (!newColumn) {
26152 newColumn = displayedColumns[displayedColumns.length - 1];
26153 var rowAbove = this.getRowAbove(gridCell.getGridRow());
26154 if (utils_1.Utils.missing(rowAbove)) {
26155 return;
26156 }
26157 newRowIndex = rowAbove.rowIndex;
26158 newFloating = rowAbove.floating;
26159 }
26160 var gridCellDef = { rowIndex: newRowIndex, column: newColumn, floating: newFloating };
26161 return new gridCell_1.GridCell(gridCellDef);
26162 };
26163 __decorate([
26164 context_1.Autowired('columnController'),
26165 __metadata("design:type", columnController_1.ColumnController)
26166 ], CellNavigationService.prototype, "columnController", void 0);
26167 __decorate([
26168 context_1.Autowired('rowModel'),
26169 __metadata("design:type", Object)
26170 ], CellNavigationService.prototype, "rowModel", void 0);
26171 __decorate([
26172 context_1.Autowired('pinnedRowModel'),
26173 __metadata("design:type", pinnedRowModel_1.PinnedRowModel)
26174 ], CellNavigationService.prototype, "pinnedRowModel", void 0);
26175 __decorate([
26176 context_1.Autowired('gridOptionsWrapper'),
26177 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
26178 ], CellNavigationService.prototype, "gridOptionsWrapper", void 0);
26179 CellNavigationService = __decorate([
26180 context_1.Bean('cellNavigationService')
26181 ], CellNavigationService);
26182 return CellNavigationService;
26183}());
26184exports.CellNavigationService = CellNavigationService;
26185
26186
26187/***/ }),
26188/* 85 */
26189/***/ (function(module, exports, __webpack_require__) {
26190
26191"use strict";
26192/**
26193 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
26194 * @version v18.1.2
26195 * @link http://www.ag-grid.com/
26196 * @license MIT
26197 */
26198
26199Object.defineProperty(exports, "__esModule", { value: true });
26200// class returns unique instance id's for columns.
26201// eg, the following calls (in this order) will result in:
26202//
26203// getInstanceIdForKey('country') => 0
26204// getInstanceIdForKey('country') => 1
26205// getInstanceIdForKey('country') => 2
26206// getInstanceIdForKey('country') => 3
26207// getInstanceIdForKey('age') => 0
26208// getInstanceIdForKey('age') => 1
26209// getInstanceIdForKey('country') => 4
26210var GroupInstanceIdCreator = (function () {
26211 function GroupInstanceIdCreator() {
26212 // this map contains keys to numbers, so we remember what the last call was
26213 this.existingIds = {};
26214 }
26215 GroupInstanceIdCreator.prototype.getInstanceIdForKey = function (key) {
26216 var lastResult = this.existingIds[key];
26217 var result;
26218 if (typeof lastResult !== 'number') {
26219 // first time this key
26220 result = 0;
26221 }
26222 else {
26223 result = lastResult + 1;
26224 }
26225 this.existingIds[key] = result;
26226 return result;
26227 };
26228 return GroupInstanceIdCreator;
26229}());
26230exports.GroupInstanceIdCreator = GroupInstanceIdCreator;
26231
26232
26233/***/ }),
26234/* 86 */
26235/***/ (function(module, exports, __webpack_require__) {
26236
26237"use strict";
26238/**
26239 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
26240 * @version v18.1.2
26241 * @link http://www.ag-grid.com/
26242 * @license MIT
26243 */
26244
26245var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
26246 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
26247 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
26248 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
26249 return c > 3 && r && Object.defineProperty(target, key, r), r;
26250};
26251Object.defineProperty(exports, "__esModule", { value: true });
26252var context_1 = __webpack_require__(0);
26253var Downloader = (function () {
26254 function Downloader() {
26255 }
26256 Downloader.prototype.download = function (fileName, content, mimeType) {
26257 // for Excel, we need \ufeff at the start
26258 // http://stackoverflow.com/questions/17879198/adding-utf-8-bom-to-string-blob
26259 // Internet Explorer
26260 if (window.navigator.msSaveOrOpenBlob) {
26261 var blobObject = new Blob(["\ufeff", content], {
26262 type: mimeType
26263 });
26264 window.navigator.msSaveOrOpenBlob(blobObject, fileName);
26265 }
26266 else {
26267 // Chrome
26268 var element = document.createElement("a");
26269 var blob = new Blob(["\ufeff", content], { type: "octet/stream" });
26270 var url = window.URL.createObjectURL(blob);
26271 element.setAttribute("href", url);
26272 element.setAttribute("download", fileName);
26273 element.style.display = "none";
26274 document.body.appendChild(element);
26275 element.click();
26276 window.URL.revokeObjectURL(url);
26277 document.body.removeChild(element);
26278 }
26279 };
26280 Downloader = __decorate([
26281 context_1.Bean("downloader")
26282 ], Downloader);
26283 return Downloader;
26284}());
26285exports.Downloader = Downloader;
26286
26287
26288/***/ }),
26289/* 87 */
26290/***/ (function(module, exports, __webpack_require__) {
26291
26292"use strict";
26293/**
26294 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
26295 * @version v18.1.2
26296 * @link http://www.ag-grid.com/
26297 * @license MIT
26298 */
26299
26300Object.defineProperty(exports, "__esModule", { value: true });
26301var gridOptionsWrapper_1 = __webpack_require__(2);
26302var selectionController_1 = __webpack_require__(19);
26303var columnApi_1 = __webpack_require__(7);
26304var columnController_1 = __webpack_require__(4);
26305var rowRenderer_1 = __webpack_require__(22);
26306var headerRootComp_1 = __webpack_require__(82);
26307var filterManager_1 = __webpack_require__(20);
26308var valueService_1 = __webpack_require__(17);
26309var eventService_1 = __webpack_require__(3);
26310var gridPanel_1 = __webpack_require__(80);
26311var gridApi_1 = __webpack_require__(6);
26312var balancedColumnTreeBuilder_1 = __webpack_require__(40);
26313var displayedGroupCreator_1 = __webpack_require__(50);
26314var expressionService_1 = __webpack_require__(21);
26315var templateService_1 = __webpack_require__(51);
26316var popupService_1 = __webpack_require__(37);
26317var logger_1 = __webpack_require__(12);
26318var columnUtils_1 = __webpack_require__(33);
26319var autoWidthCalculator_1 = __webpack_require__(41);
26320var horizontalResizeService_1 = __webpack_require__(61);
26321var context_1 = __webpack_require__(0);
26322var csvCreator_1 = __webpack_require__(49);
26323var gridCore_1 = __webpack_require__(44);
26324var standardMenu_1 = __webpack_require__(110);
26325var dragAndDropService_1 = __webpack_require__(16);
26326var dragService_1 = __webpack_require__(42);
26327var sortController_1 = __webpack_require__(26);
26328var focusedCellController_1 = __webpack_require__(24);
26329var mouseEventService_1 = __webpack_require__(46);
26330var cellNavigationService_1 = __webpack_require__(84);
26331var utils_1 = __webpack_require__(1);
26332var filterStage_1 = __webpack_require__(111);
26333var sortStage_1 = __webpack_require__(113);
26334var flattenStage_1 = __webpack_require__(115);
26335var cellEditorFactory_1 = __webpack_require__(56);
26336var events_1 = __webpack_require__(5);
26337var infiniteRowModel_1 = __webpack_require__(116);
26338var clientSideRowModel_1 = __webpack_require__(118);
26339var cellRendererFactory_1 = __webpack_require__(57);
26340var cellRendererService_1 = __webpack_require__(58);
26341var valueFormatterService_1 = __webpack_require__(45);
26342var agCheckbox_1 = __webpack_require__(62);
26343var baseFrameworkFactory_1 = __webpack_require__(120);
26344var scrollVisibleService_1 = __webpack_require__(38);
26345var downloader_1 = __webpack_require__(86);
26346var xmlFactory_1 = __webpack_require__(121);
26347var gridSerializer_1 = __webpack_require__(65);
26348var stylingService_1 = __webpack_require__(75);
26349var columnHoverService_1 = __webpack_require__(47);
26350var columnAnimationService_1 = __webpack_require__(55);
26351var sortService_1 = __webpack_require__(114);
26352var filterService_1 = __webpack_require__(112);
26353var autoGroupColService_1 = __webpack_require__(106);
26354var paginationProxy_1 = __webpack_require__(31);
26355var immutableService_1 = __webpack_require__(107);
26356var constants_1 = __webpack_require__(9);
26357var valueCache_1 = __webpack_require__(35);
26358var changeDetectionService_1 = __webpack_require__(141);
26359var alignedGridsService_1 = __webpack_require__(60);
26360var pinnedRowModel_1 = __webpack_require__(32);
26361var componentResolver_1 = __webpack_require__(29);
26362var componentRecipes_1 = __webpack_require__(23);
26363var componentProvider_1 = __webpack_require__(68);
26364var agComponentUtils_1 = __webpack_require__(78);
26365var componentMetadataProvider_1 = __webpack_require__(79);
26366var beans_1 = __webpack_require__(30);
26367var environment_1 = __webpack_require__(43);
26368var animationFrameService_1 = __webpack_require__(39);
26369var navigationService_1 = __webpack_require__(99);
26370var heightScaler_1 = __webpack_require__(59);
26371var selectableService_1 = __webpack_require__(88);
26372var autoHeightCalculator_1 = __webpack_require__(81);
26373var paginationComp_1 = __webpack_require__(142);
26374var Grid = (function () {
26375 function Grid(eGridDiv, gridOptions, params) {
26376 if (!eGridDiv) {
26377 console.error('ag-Grid: no div element provided to the grid');
26378 }
26379 if (!gridOptions) {
26380 console.error('ag-Grid: no gridOptions provided to the grid');
26381 }
26382 var rowModelClass = this.getRowModelClass(gridOptions);
26383 var enterprise = utils_1.Utils.exists(Grid.enterpriseBeans);
26384 var frameworkFactory = params ? params.frameworkFactory : null;
26385 if (utils_1.Utils.missing(frameworkFactory)) {
26386 frameworkFactory = new baseFrameworkFactory_1.BaseFrameworkFactory();
26387 }
26388 var overrideBeans = [];
26389 if (Grid.enterpriseBeans) {
26390 overrideBeans = overrideBeans.concat(Grid.enterpriseBeans);
26391 }
26392 if (Grid.frameworkBeans) {
26393 overrideBeans = overrideBeans.concat(Grid.frameworkBeans);
26394 }
26395 var seed = {
26396 enterprise: enterprise,
26397 gridOptions: gridOptions,
26398 eGridDiv: eGridDiv,
26399 $scope: params ? params.$scope : null,
26400 $compile: params ? params.$compile : null,
26401 quickFilterOnScope: params ? params.quickFilterOnScope : null,
26402 globalEventListener: params ? params.globalEventListener : null,
26403 frameworkFactory: frameworkFactory
26404 };
26405 if (params && params.seedBeanInstances) {
26406 utils_1.Utils.assign(seed, params.seedBeanInstances);
26407 }
26408 var components = [
26409 { componentName: 'AgCheckbox', theClass: agCheckbox_1.AgCheckbox },
26410 { componentName: 'AgGridComp', theClass: gridPanel_1.GridPanel },
26411 { componentName: 'AgHeaderRoot', theClass: headerRootComp_1.HeaderRootComp },
26412 { componentName: 'AgPagination', theClass: paginationComp_1.PaginationComp },
26413 ];
26414 if (Grid.enterpriseComponents) {
26415 components = components.concat(Grid.enterpriseComponents);
26416 }
26417 var contextParams = {
26418 overrideBeans: overrideBeans,
26419 seed: seed,
26420 //Careful with the order of the beans here, there are dependencies between them that need to be kept
26421 beans: [rowModelClass, beans_1.Beans, paginationProxy_1.PaginationAutoPageSizeService, gridApi_1.GridApi, componentProvider_1.ComponentProvider, agComponentUtils_1.AgComponentUtils, componentMetadataProvider_1.ComponentMetadataProvider,
26422 componentProvider_1.ComponentProvider, componentResolver_1.ComponentResolver, componentRecipes_1.ComponentRecipes, heightScaler_1.HeightScaler, autoHeightCalculator_1.AutoHeightCalculator,
26423 cellRendererFactory_1.CellRendererFactory, horizontalResizeService_1.HorizontalResizeService, pinnedRowModel_1.PinnedRowModel, dragService_1.DragService,
26424 displayedGroupCreator_1.DisplayedGroupCreator, eventService_1.EventService, gridOptionsWrapper_1.GridOptionsWrapper, selectionController_1.SelectionController,
26425 filterManager_1.FilterManager, columnController_1.ColumnController, paginationProxy_1.PaginationProxy, rowRenderer_1.RowRenderer, expressionService_1.ExpressionService,
26426 balancedColumnTreeBuilder_1.BalancedColumnTreeBuilder, csvCreator_1.CsvCreator, downloader_1.Downloader, xmlFactory_1.XmlFactory, gridSerializer_1.GridSerializer, templateService_1.TemplateService,
26427 navigationService_1.NavigationService, popupService_1.PopupService, valueCache_1.ValueCache, valueService_1.ValueService, alignedGridsService_1.AlignedGridsService,
26428 logger_1.LoggerFactory, columnUtils_1.ColumnUtils, autoWidthCalculator_1.AutoWidthCalculator, popupService_1.PopupService, gridCore_1.GridCore, standardMenu_1.StandardMenuFactory,
26429 dragAndDropService_1.DragAndDropService, columnApi_1.ColumnApi, focusedCellController_1.FocusedCellController, mouseEventService_1.MouseEventService,
26430 cellNavigationService_1.CellNavigationService, filterStage_1.FilterStage, sortStage_1.SortStage, flattenStage_1.FlattenStage, filterService_1.FilterService,
26431 cellEditorFactory_1.CellEditorFactory, cellRendererService_1.CellRendererService, valueFormatterService_1.ValueFormatterService, stylingService_1.StylingService, scrollVisibleService_1.ScrollVisibleService,
26432 columnHoverService_1.ColumnHoverService, columnAnimationService_1.ColumnAnimationService, sortService_1.SortService, selectableService_1.SelectableService, autoGroupColService_1.AutoGroupColService,
26433 immutableService_1.ImmutableService, changeDetectionService_1.ChangeDetectionService, environment_1.Environment, animationFrameService_1.AnimationFrameService, sortController_1.SortController],
26434 components: components,
26435 debug: !!gridOptions.debug
26436 };
26437 var isLoggingFunc = function () { return contextParams.debug; };
26438 this.context = new context_1.Context(contextParams, new logger_1.Logger('Context', isLoggingFunc));
26439 this.setColumnsAndData();
26440 this.dispatchGridReadyEvent(gridOptions);
26441 if (gridOptions.debug) {
26442 console.log('ag-Grid -> initialised successfully, enterprise = ' + enterprise);
26443 }
26444 }
26445 Grid.setEnterpriseBeans = function (enterpriseBeans, rowModelClasses) {
26446 this.enterpriseBeans = enterpriseBeans;
26447 // the enterprise can inject additional row models. this is how it injects the viewportRowModel
26448 utils_1.Utils.iterateObject(rowModelClasses, function (key, value) { return Grid.RowModelClasses[key] = value; });
26449 };
26450 Grid.setEnterpriseComponents = function (components) {
26451 this.enterpriseComponents = components;
26452 };
26453 Grid.setFrameworkBeans = function (frameworkBeans) {
26454 this.frameworkBeans = frameworkBeans;
26455 };
26456 Grid.prototype.setColumnsAndData = function () {
26457 var gridOptionsWrapper = this.context.getBean('gridOptionsWrapper');
26458 var columnController = this.context.getBean('columnController');
26459 var rowModel = this.context.getBean('rowModel');
26460 var columnDefs = gridOptionsWrapper.getColumnDefs();
26461 var rowData = gridOptionsWrapper.getRowData();
26462 var nothingToSet = utils_1.Utils.missing(columnDefs) && utils_1.Utils.missing(rowData);
26463 if (nothingToSet) {
26464 return;
26465 }
26466 if (utils_1.Utils.exists(columnDefs)) {
26467 columnController.setColumnDefs(columnDefs, "gridInitializing");
26468 }
26469 if (utils_1.Utils.exists(rowData) && rowModel.getType() === constants_1.Constants.ROW_MODEL_TYPE_CLIENT_SIDE) {
26470 var clientSideRowModel = rowModel;
26471 clientSideRowModel.setRowData(rowData);
26472 }
26473 };
26474 Grid.prototype.dispatchGridReadyEvent = function (gridOptions) {
26475 var eventService = this.context.getBean('eventService');
26476 var readyEvent = {
26477 type: events_1.Events.EVENT_GRID_READY,
26478 api: gridOptions.api,
26479 columnApi: gridOptions.columnApi
26480 };
26481 eventService.dispatchEvent(readyEvent);
26482 };
26483 Grid.prototype.getRowModelClass = function (gridOptions) {
26484 var rowModelType = gridOptions.rowModelType;
26485 //TODO: temporary measure before 'enterprise' is completely removed (similar handling in gridOptionsWrapper is also required)
26486 rowModelType = rowModelType === 'enterprise' ? constants_1.Constants.ROW_MODEL_TYPE_SERVER_SIDE : rowModelType;
26487 if (utils_1.Utils.exists(rowModelType)) {
26488 var rowModelClass = Grid.RowModelClasses[rowModelType];
26489 if (utils_1.Utils.exists(rowModelClass)) {
26490 return rowModelClass;
26491 }
26492 else {
26493 if (rowModelType === 'normal') {
26494 console.warn("ag-Grid: normal rowModel deprecated. Should now be called client side row model instead.");
26495 return clientSideRowModel_1.ClientSideRowModel;
26496 }
26497 console.error('ag-Grid: could not find matching row model for rowModelType ' + rowModelType);
26498 if (rowModelType === constants_1.Constants.ROW_MODEL_TYPE_VIEWPORT) {
26499 console.error('ag-Grid: rowModelType viewport is only available in ag-Grid Enterprise');
26500 }
26501 if (rowModelType === constants_1.Constants.ROW_MODEL_TYPE_SERVER_SIDE) {
26502 console.error('ag-Grid: rowModelType server side is only available in ag-Grid Enterprise');
26503 }
26504 }
26505 }
26506 return clientSideRowModel_1.ClientSideRowModel;
26507 };
26508 ;
26509 Grid.prototype.destroy = function () {
26510 this.context.destroy();
26511 };
26512 // the default is ClientSideRowModel, which is also used for pagination.
26513 // the enterprise adds viewport to this list.
26514 Grid.RowModelClasses = {
26515 infinite: infiniteRowModel_1.InfiniteRowModel,
26516 clientSide: clientSideRowModel_1.ClientSideRowModel
26517 };
26518 return Grid;
26519}());
26520exports.Grid = Grid;
26521
26522
26523/***/ }),
26524/* 88 */
26525/***/ (function(module, exports, __webpack_require__) {
26526
26527"use strict";
26528/**
26529 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
26530 * @version v18.1.2
26531 * @link http://www.ag-grid.com/
26532 * @license MIT
26533 */
26534
26535var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
26536 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
26537 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
26538 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
26539 return c > 3 && r && Object.defineProperty(target, key, r), r;
26540};
26541var __metadata = (this && this.__metadata) || function (k, v) {
26542 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
26543};
26544Object.defineProperty(exports, "__esModule", { value: true });
26545var context_1 = __webpack_require__(0);
26546var utils_1 = __webpack_require__(1);
26547var gridOptionsWrapper_1 = __webpack_require__(2);
26548var SelectableService = (function () {
26549 function SelectableService() {
26550 }
26551 SelectableService.prototype.init = function () {
26552 this.groupSelectsChildren = this.gridOptionsWrapper.isGroupSelectsChildren();
26553 this.isRowSelectableFunc = this.gridOptionsWrapper.getIsRowSelectableFunc();
26554 };
26555 SelectableService.prototype.updateSelectableAfterGrouping = function (rowNode) {
26556 if (this.isRowSelectableFunc) {
26557 var nextChildrenFunc = function (rowNode) { return rowNode.childrenAfterGroup; };
26558 this.recurseDown(rowNode.childrenAfterGroup, nextChildrenFunc);
26559 }
26560 };
26561 SelectableService.prototype.updateSelectableAfterFiltering = function (rowNode) {
26562 if (this.isRowSelectableFunc) {
26563 var nextChildrenFunc = function (rowNode) { return rowNode.childrenAfterFilter; };
26564 this.recurseDown(rowNode.childrenAfterGroup, nextChildrenFunc);
26565 }
26566 };
26567 SelectableService.prototype.recurseDown = function (children, nextChildrenFunc) {
26568 var _this = this;
26569 children.forEach(function (child) {
26570 if (!child.group) {
26571 return;
26572 } // only interested in groups
26573 if (child.hasChildren()) {
26574 _this.recurseDown(nextChildrenFunc(child), nextChildrenFunc);
26575 }
26576 var rowSelectable;
26577 if (_this.groupSelectsChildren) {
26578 // have this group selectable if at least one direct child is selectable
26579 var firstSelectable = utils_1._.find(nextChildrenFunc(child), 'selectable', true);
26580 rowSelectable = utils_1._.exists(firstSelectable);
26581 }
26582 else {
26583 // directly retrieve selectable value from user callback
26584 rowSelectable = _this.isRowSelectableFunc(child);
26585 }
26586 child.setRowSelectable(rowSelectable);
26587 });
26588 };
26589 __decorate([
26590 context_1.Autowired('gridOptionsWrapper'),
26591 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
26592 ], SelectableService.prototype, "gridOptionsWrapper", void 0);
26593 __decorate([
26594 context_1.PostConstruct,
26595 __metadata("design:type", Function),
26596 __metadata("design:paramtypes", []),
26597 __metadata("design:returntype", void 0)
26598 ], SelectableService.prototype, "init", null);
26599 SelectableService = __decorate([
26600 context_1.Bean('selectableService')
26601 ], SelectableService);
26602 return SelectableService;
26603}());
26604exports.SelectableService = SelectableService;
26605
26606
26607/***/ }),
26608/* 89 */
26609/***/ (function(module, exports, __webpack_require__) {
26610
26611"use strict";
26612/**
26613 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
26614 * @version v18.1.2
26615 * @link http://www.ag-grid.com/
26616 * @license MIT
26617 */
26618
26619var __extends = (this && this.__extends) || (function () {
26620 var extendStatics = Object.setPrototypeOf ||
26621 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
26622 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
26623 return function (d, b) {
26624 extendStatics(d, b);
26625 function __() { this.constructor = d; }
26626 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
26627 };
26628})();
26629Object.defineProperty(exports, "__esModule", { value: true });
26630var utils_1 = __webpack_require__(1);
26631var beanStub_1 = __webpack_require__(13);
26632var rowNodeBlock_1 = __webpack_require__(63);
26633var RowNodeCache = (function (_super) {
26634 __extends(RowNodeCache, _super);
26635 function RowNodeCache(cacheParams) {
26636 var _this = _super.call(this) || this;
26637 _this.maxRowFound = false;
26638 _this.blocks = {};
26639 _this.blockCount = 0;
26640 _this.virtualRowCount = cacheParams.initialRowCount;
26641 _this.cacheParams = cacheParams;
26642 return _this;
26643 }
26644 RowNodeCache.prototype.destroy = function () {
26645 var _this = this;
26646 _super.prototype.destroy.call(this);
26647 this.forEachBlockInOrder(function (block) { return _this.destroyBlock(block); });
26648 };
26649 RowNodeCache.prototype.init = function () {
26650 var _this = this;
26651 this.active = true;
26652 this.addDestroyFunc(function () { return _this.active = false; });
26653 };
26654 RowNodeCache.prototype.isActive = function () {
26655 return this.active;
26656 };
26657 RowNodeCache.prototype.getVirtualRowCount = function () {
26658 return this.virtualRowCount;
26659 };
26660 RowNodeCache.prototype.hack_setVirtualRowCount = function (virtualRowCount) {
26661 this.virtualRowCount = virtualRowCount;
26662 };
26663 RowNodeCache.prototype.isMaxRowFound = function () {
26664 return this.maxRowFound;
26665 };
26666 // listener on EVENT_LOAD_COMPLETE
26667 RowNodeCache.prototype.onPageLoaded = function (event) {
26668 this.cacheParams.rowNodeBlockLoader.loadComplete();
26669 this.checkBlockToLoad();
26670 // if we are not active, then we ignore all events, otherwise we could end up getting the
26671 // grid to refresh even though we are no longer the active cache
26672 if (!this.isActive()) {
26673 return;
26674 }
26675 this.logger.log("onPageLoaded: page = " + event.page.getBlockNumber() + ", lastRow = " + event.lastRow);
26676 if (event.success) {
26677 this.checkVirtualRowCount(event.page, event.lastRow);
26678 }
26679 };
26680 RowNodeCache.prototype.purgeBlocksIfNeeded = function (blockToExclude) {
26681 var _this = this;
26682 // no purge if user didn't give maxBlocksInCache
26683 if (utils_1.Utils.missing(this.cacheParams.maxBlocksInCache)) {
26684 return;
26685 }
26686 // no purge if block count is less than max allowed
26687 if (this.blockCount <= this.cacheParams.maxBlocksInCache) {
26688 return;
26689 }
26690 // put all candidate blocks into a list for sorting
26691 var blocksForPurging = [];
26692 this.forEachBlockInOrder(function (block) {
26693 // we exclude checking for the page just created, as this has yet to be accessed and hence
26694 // the lastAccessed stamp will not be updated for the first time yet
26695 if (block === blockToExclude) {
26696 return;
26697 }
26698 blocksForPurging.push(block);
26699 });
26700 // note: need to verify that this sorts items in the right order
26701 blocksForPurging.sort(function (a, b) { return b.getLastAccessed() - a.getLastAccessed(); });
26702 // we remove (maxBlocksInCache - 1) as we already excluded the 'just created' page.
26703 // in other words, after the splice operation below, we have taken out the blocks
26704 // we want to keep, which means we are left with blocks that we can potentially purge
26705 var blocksToKeep = this.cacheParams.maxBlocksInCache - 1;
26706 blocksForPurging.splice(0, blocksToKeep);
26707 // try and purge each block
26708 blocksForPurging.forEach(function (block) {
26709 // we never purge blocks if they are open, as purging them would mess up with
26710 // our indexes, it would be very messy to restore the purged block to it's
26711 // previous state if it had open children (and what if open children of open
26712 // children, jeeeesus, just thinking about it freaks me out) so best is have a
26713 // rule, if block is open, we never purge.
26714 if (block.isAnyNodeOpen(_this.virtualRowCount)) {
26715 return;
26716 }
26717 // at this point, block is not needed, and no open nodes, so burn baby burn
26718 _this.removeBlockFromCache(block);
26719 });
26720 };
26721 RowNodeCache.prototype.postCreateBlock = function (newBlock) {
26722 newBlock.addEventListener(rowNodeBlock_1.RowNodeBlock.EVENT_LOAD_COMPLETE, this.onPageLoaded.bind(this));
26723 this.setBlock(newBlock.getBlockNumber(), newBlock);
26724 this.purgeBlocksIfNeeded(newBlock);
26725 this.checkBlockToLoad();
26726 };
26727 RowNodeCache.prototype.removeBlockFromCache = function (blockToRemove) {
26728 if (!blockToRemove) {
26729 return;
26730 }
26731 this.destroyBlock(blockToRemove);
26732 // we do not want to remove the 'loaded' event listener, as the
26733 // concurrent loads count needs to be updated when the load is complete
26734 // if the purged page is in loading state
26735 };
26736 // gets called after: 1) block loaded 2) block created 3) cache refresh
26737 RowNodeCache.prototype.checkBlockToLoad = function () {
26738 this.cacheParams.rowNodeBlockLoader.checkBlockToLoad();
26739 };
26740 RowNodeCache.prototype.checkVirtualRowCount = function (block, lastRow) {
26741 // if client provided a last row, we always use it, as it could change between server calls
26742 // if user deleted data and then called refresh on the grid.
26743 if (typeof lastRow === 'number' && lastRow >= 0) {
26744 this.virtualRowCount = lastRow;
26745 this.maxRowFound = true;
26746 this.onCacheUpdated();
26747 }
26748 else if (!this.maxRowFound) {
26749 // otherwise, see if we need to add some virtual rows
26750 var lastRowIndex = (block.getBlockNumber() + 1) * this.cacheParams.blockSize;
26751 var lastRowIndexPlusOverflow = lastRowIndex + this.cacheParams.overflowSize;
26752 if (this.virtualRowCount < lastRowIndexPlusOverflow) {
26753 this.virtualRowCount = lastRowIndexPlusOverflow;
26754 this.onCacheUpdated();
26755 }
26756 else if (this.cacheParams.dynamicRowHeight) {
26757 // the only other time is if dynamic row height, as loading rows
26758 // will change the height of the block, given the height of the rows
26759 // is only known after the row is loaded.
26760 this.onCacheUpdated();
26761 }
26762 }
26763 };
26764 RowNodeCache.prototype.setVirtualRowCount = function (rowCount, maxRowFound) {
26765 this.virtualRowCount = rowCount;
26766 // if undefined is passed, we do not set this value, if one of {true,false}
26767 // is passed, we do set the value.
26768 if (utils_1.Utils.exists(maxRowFound)) {
26769 this.maxRowFound = maxRowFound;
26770 }
26771 // if we are still searching, then the row count must not end at the end
26772 // of a particular page, otherwise the searching will not pop into the
26773 // next page
26774 if (!this.maxRowFound) {
26775 if (this.virtualRowCount % this.cacheParams.blockSize === 0) {
26776 this.virtualRowCount++;
26777 }
26778 }
26779 this.onCacheUpdated();
26780 };
26781 RowNodeCache.prototype.forEachNodeDeep = function (callback, sequence) {
26782 var _this = this;
26783 this.forEachBlockInOrder(function (block) {
26784 block.forEachNodeDeep(callback, sequence, _this.virtualRowCount);
26785 });
26786 };
26787 RowNodeCache.prototype.forEachBlockInOrder = function (callback) {
26788 var ids = this.getBlockIdsSorted();
26789 this.forEachBlockId(ids, callback);
26790 };
26791 RowNodeCache.prototype.forEachBlockInReverseOrder = function (callback) {
26792 var ids = this.getBlockIdsSorted().reverse();
26793 this.forEachBlockId(ids, callback);
26794 };
26795 RowNodeCache.prototype.forEachBlockId = function (ids, callback) {
26796 var _this = this;
26797 ids.forEach(function (id) {
26798 var block = _this.blocks[id];
26799 callback(block, id);
26800 });
26801 };
26802 RowNodeCache.prototype.getBlockIdsSorted = function () {
26803 // get all page id's as NUMBERS (not strings, as we need to sort as numbers) and in descending order
26804 var numberComparator = function (a, b) { return a - b; }; // default comparator for array is string comparison
26805 var blockIds = Object.keys(this.blocks).map(function (idStr) { return parseInt(idStr); }).sort(numberComparator);
26806 return blockIds;
26807 };
26808 RowNodeCache.prototype.getBlock = function (blockId) {
26809 return this.blocks[blockId];
26810 };
26811 RowNodeCache.prototype.setBlock = function (id, block) {
26812 this.blocks[id] = block;
26813 this.blockCount++;
26814 this.cacheParams.rowNodeBlockLoader.addBlock(block);
26815 };
26816 RowNodeCache.prototype.destroyBlock = function (block) {
26817 delete this.blocks[block.getBlockNumber()];
26818 block.destroy();
26819 this.blockCount--;
26820 this.cacheParams.rowNodeBlockLoader.removeBlock(block);
26821 };
26822 // gets called 1) row count changed 2) cache purged 3) items inserted
26823 RowNodeCache.prototype.onCacheUpdated = function () {
26824 if (this.isActive()) {
26825 // this results in both row models (infinite and server side) firing ModelUpdated,
26826 // however server side row model also updates the row indexes first
26827 var event_1 = {
26828 type: RowNodeCache.EVENT_CACHE_UPDATED
26829 };
26830 this.dispatchEvent(event_1);
26831 }
26832 };
26833 RowNodeCache.prototype.purgeCache = function () {
26834 var _this = this;
26835 this.forEachBlockInOrder(function (block) { return _this.removeBlockFromCache(block); });
26836 this.onCacheUpdated();
26837 };
26838 RowNodeCache.prototype.getRowNodesInRange = function (firstInRange, lastInRange) {
26839 var _this = this;
26840 var result = [];
26841 var lastBlockId = -1;
26842 var inActiveRange = false;
26843 var numberSequence = new utils_1.NumberSequence();
26844 // if only one node passed, we start the selection at the top
26845 if (utils_1.Utils.missing(firstInRange)) {
26846 inActiveRange = true;
26847 }
26848 var foundGapInSelection = false;
26849 this.forEachBlockInOrder(function (block, id) {
26850 if (foundGapInSelection)
26851 return;
26852 if (inActiveRange && (lastBlockId + 1 !== id)) {
26853 foundGapInSelection = true;
26854 return;
26855 }
26856 lastBlockId = id;
26857 block.forEachNodeShallow(function (rowNode) {
26858 var hitFirstOrLast = rowNode === firstInRange || rowNode === lastInRange;
26859 if (inActiveRange || hitFirstOrLast) {
26860 result.push(rowNode);
26861 }
26862 if (hitFirstOrLast) {
26863 inActiveRange = !inActiveRange;
26864 }
26865 }, numberSequence, _this.virtualRowCount);
26866 });
26867 // inActiveRange will be still true if we never hit the second rowNode
26868 var invalidRange = foundGapInSelection || inActiveRange;
26869 return invalidRange ? [] : result;
26870 };
26871 RowNodeCache.EVENT_CACHE_UPDATED = 'cacheUpdated';
26872 return RowNodeCache;
26873}(beanStub_1.BeanStub));
26874exports.RowNodeCache = RowNodeCache;
26875
26876
26877/***/ }),
26878/* 90 */
26879/***/ (function(module, exports, __webpack_require__) {
26880
26881"use strict";
26882/**
26883 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
26884 * @version v18.1.2
26885 * @link http://www.ag-grid.com/
26886 * @license MIT
26887 */
26888
26889Object.defineProperty(exports, "__esModule", { value: true });
26890var ChangedPath = (function () {
26891 function ChangedPath(keepingColumns) {
26892 this.active = true;
26893 this.nodeIdsToBoolean = {};
26894 this.nodeIdsToColumns = {};
26895 this.keepingColumns = keepingColumns;
26896 }
26897 ChangedPath.prototype.setInactive = function () {
26898 this.active = false;
26899 };
26900 ChangedPath.prototype.isActive = function () {
26901 return this.active;
26902 };
26903 ChangedPath.prototype.addParentNode = function (rowNode, columns) {
26904 var _this = this;
26905 this.validateActive();
26906 var pointer = rowNode;
26907 while (pointer) {
26908 // add this item to the path, all the way to parent
26909 this.nodeIdsToBoolean[pointer.id] = true;
26910 // if columns, add the columns in all the way to parent, merging
26911 // in any other columns that might be there already
26912 if (this.keepingColumns && columns) {
26913 if (!this.nodeIdsToColumns[pointer.id]) {
26914 this.nodeIdsToColumns[pointer.id] = {};
26915 }
26916 columns.forEach(function (col) { return _this.nodeIdsToColumns[pointer.id][col.getId()] = true; });
26917 }
26918 pointer = pointer.parent;
26919 }
26920 };
26921 ChangedPath.prototype.isInPath = function (rowNode) {
26922 this.validateActive();
26923 return this.nodeIdsToBoolean[rowNode.id];
26924 };
26925 ChangedPath.prototype.getValueColumnsForNode = function (rowNode, valueColumns) {
26926 this.validateActive();
26927 if (!this.keepingColumns) {
26928 return valueColumns;
26929 }
26930 var colsForThisNode = this.nodeIdsToColumns[rowNode.id];
26931 var result = valueColumns.filter(function (col) { return colsForThisNode[col.getId()]; });
26932 return result;
26933 };
26934 ChangedPath.prototype.getNotValueColumnsForNode = function (rowNode, valueColumns) {
26935 this.validateActive();
26936 if (!this.keepingColumns) {
26937 return null;
26938 }
26939 var colsForThisNode = this.nodeIdsToColumns[rowNode.id];
26940 var result = valueColumns.filter(function (col) { return !colsForThisNode[col.getId()]; });
26941 return result;
26942 };
26943 // this is to check for a bug in our code. each part that uses ChangePath should check
26944 // if it is valid first, and not use it if it is not valid
26945 ChangedPath.prototype.validateActive = function () {
26946 if (!this.active) {
26947 throw "ag-Grid: tried to work on an invalid changed path";
26948 }
26949 };
26950 return ChangedPath;
26951}());
26952exports.ChangedPath = ChangedPath;
26953
26954
26955/***/ }),
26956/* 91 */
26957/***/ (function(module, exports, __webpack_require__) {
26958
26959"use strict";
26960/**
26961 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
26962 * @version v18.1.2
26963 * @link http://www.ag-grid.com/
26964 * @license MIT
26965 */
26966
26967Object.defineProperty(exports, "__esModule", { value: true });
26968var PropertyKeys = (function () {
26969 function PropertyKeys() {
26970 }
26971 PropertyKeys.STRING_PROPERTIES = [
26972 'sortingOrder', 'rowClass', 'rowSelection', 'overlayLoadingTemplate',
26973 'overlayNoRowsTemplate', 'quickFilterText', 'rowModelType',
26974 'editType', 'domLayout', 'clipboardDeliminator', 'rowGroupPanelShow',
26975 'multiSortKey', 'pivotColumnGroupTotals', 'pivotRowTotals', 'pivotPanelShow'
26976 ];
26977 PropertyKeys.OBJECT_PROPERTIES = [
26978 'components', 'frameworkComponents', 'rowStyle', 'context', 'autoGroupColumnDef', 'groupColumnDef', 'localeText',
26979 'icons', 'datasource', 'serverSideDatasource', 'viewportDatasource', 'groupRowRendererParams', 'aggFuncs',
26980 'fullWidthCellRendererParams', 'defaultColGroupDef', 'defaultColDef', 'defaultExportParams', 'columnTypes',
26981 'rowClassRules', 'detailGridOptions', 'detailCellRendererParams', 'loadingOverlayComponentParams',
26982 'noRowsOverlayComponentParams', 'popupParent', 'colResizeDefault'
26983 //,'cellRenderers','cellEditors'
26984 ];
26985 PropertyKeys.ARRAY_PROPERTIES = [
26986 'slaveGrids', 'alignedGrids', 'rowData',
26987 'columnDefs', 'excelStyles', 'pinnedTopRowData', 'pinnedBottomRowData'
26988 // deprecated
26989 ];
26990 PropertyKeys.NUMBER_PROPERTIES = [
26991 'rowHeight', 'detailRowHeight', 'rowBuffer', 'colWidth', 'headerHeight', 'groupHeaderHeight',
26992 'floatingFiltersHeight', 'pivotHeaderHeight', 'pivotGroupHeaderHeight', 'groupDefaultExpanded',
26993 'minColWidth', 'maxColWidth', 'viewportRowModelPageSize', 'viewportRowModelBufferSize',
26994 'autoSizePadding', 'maxBlocksInCache', 'maxConcurrentDatasourceRequests',
26995 'cacheOverflowSize', 'paginationPageSize', 'cacheBlockSize', 'infiniteInitialRowCount',
26996 'scrollbarWidth', 'paginationStartPage', 'infiniteBlockSize', 'batchUpdateWaitMillis'
26997 ];
26998 PropertyKeys.BOOLEAN_PROPERTIES = [
26999 'toolPanelSuppressRowGroups', 'toolPanelSuppressValues', 'toolPanelSuppressPivots', 'toolPanelSuppressPivotMode',
27000 'toolPanelSuppressSideButtons', 'toolPanelSuppressColumnFilter', 'toolPanelSuppressColumnSelectAll',
27001 'toolPanelSuppressColumnExpandAll', 'suppressMakeColumnVisibleAfterUnGroup',
27002 'suppressRowClickSelection', 'suppressCellSelection', 'suppressHorizontalScroll', 'debug',
27003 'enableColResize', 'enableCellExpressions', 'enableSorting', 'enableServerSideSorting',
27004 'enableFilter', 'enableServerSideFilter', 'angularCompileRows', 'angularCompileFilters',
27005 'angularCompileHeaders', 'groupSuppressAutoColumn', 'groupSelectsChildren',
27006 'groupIncludeFooter', 'groupIncludeTotalFooter', 'groupUseEntireRow', 'groupSuppressRow', 'groupSuppressBlankHeader',
27007 'forPrint', 'suppressMenuHide', 'rowDeselection', 'unSortIcon', 'suppressMultiSort',
27008 'singleClickEdit', 'suppressLoadingOverlay', 'suppressNoRowsOverlay', 'suppressAutoSize',
27009 'suppressParentsInRowNodes', 'showToolPanel', 'suppressColumnMoveAnimation', 'suppressMovableColumns',
27010 'suppressFieldDotNotation', 'enableRangeSelection',
27011 'suppressTouch', 'suppressAsyncEvents', 'allowContextMenuWithControlKey',
27012 'suppressContextMenu', 'suppressMenuFilterPanel', 'suppressMenuMainPanel', 'suppressMenuColumnPanel',
27013 'enableStatusBar', 'alwaysShowStatusBar', 'rememberGroupStateWhenNewData', 'enableCellChangeFlash', 'suppressDragLeaveHidesColumns',
27014 'suppressMiddleClickScrolls', 'suppressPreventDefaultOnMouseWheel', 'suppressUseColIdForGroups',
27015 'suppressCopyRowsToClipboard', 'pivotMode', 'suppressAggFuncInHeader', 'suppressColumnVirtualisation', 'suppressAggAtRootLevel',
27016 'suppressFocusAfterRefresh', 'functionsPassive', 'functionsReadOnly',
27017 'animateRows', 'groupSelectsFiltered', 'groupRemoveSingleChildren', 'groupRemoveLowestSingleChildren',
27018 'enableRtl', 'suppressClickEdit', 'rowDragManaged', 'suppressRowDrag',
27019 'enableGroupEdit', 'embedFullWidthRows', 'suppressTabbing', 'suppressPaginationPanel', 'floatingFilter',
27020 'groupHideOpenParents', 'groupMultiAutoColumn', 'pagination', 'stopEditingWhenGridLosesFocus',
27021 'paginationAutoPageSize', 'suppressScrollOnNewData', 'purgeClosedRowNodes', 'cacheQuickFilter',
27022 'deltaRowDataMode', 'ensureDomOrder', 'accentedSort', 'pivotTotals', 'suppressChangeDetection',
27023 'valueCache', 'valueCacheNeverExpires', 'aggregateOnlyChangedColumns', 'suppressAnimationFrame',
27024 'suppressExcelExport', 'suppressCsvExport', 'treeData', 'masterDetail', 'suppressMultiRangeSelection',
27025 'enterMovesDownAfterEdit', 'enterMovesDown', 'suppressPropertyNamesCheck', 'rowMultiSelectWithClick',
27026 'contractColumnSelection', 'suppressEnterpriseResetOnNewColumns', 'enableOldSetFilterModel',
27027 'suppressRowHoverHighlight', 'gridAutoHeight', 'suppressRowTransform', 'suppressClipboardPaste',
27028 'serverSideSortingAlwaysResets'
27029 ];
27030 PropertyKeys.FUNCTION_PROPERTIES = ['localeTextFunc', 'groupRowInnerRenderer', 'groupRowInnerRendererFramework',
27031 'dateComponent', 'dateComponentFramework', 'groupRowRenderer', 'groupRowRendererFramework', 'isExternalFilterPresent',
27032 'getRowHeight', 'doesExternalFilterPass', 'getRowClass', 'getRowStyle', 'getRowClassRules',
27033 'traverseNode', 'getContextMenuItems', 'getMainMenuItems', 'processRowPostCreate', 'processCellForClipboard',
27034 'getNodeChildDetails', 'groupRowAggNodes', 'getRowNodeId', 'isFullWidthCell', 'fullWidthCellRenderer',
27035 'fullWidthCellRendererFramework', 'doesDataFlower', 'processSecondaryColDef', 'processSecondaryColGroupDef',
27036 'getBusinessKeyForNode', 'sendToClipboard', 'navigateToNextCell', 'tabToNextCell', 'getDetailRowData',
27037 'processCellFromClipboard', 'getDocument', 'postProcessPopup', 'getChildCount', 'getDataPath', 'loadingOverlayComponent',
27038 'loadingOverlayComponentFramework', 'noRowsOverlayComponent', 'noRowsOverlayComponentFramework', 'detailCellRenderer',
27039 'detailCellRendererFramework', 'onGridReady', 'defaultGroupSortComparator', 'isRowMaster', 'isRowSelectable', 'postSort',
27040 'processHeaderForClipboard', 'paginationNumberFormatter', 'processDataFromClipboard'];
27041 PropertyKeys.ALL_PROPERTIES = PropertyKeys.ARRAY_PROPERTIES
27042 .concat(PropertyKeys.OBJECT_PROPERTIES)
27043 .concat(PropertyKeys.STRING_PROPERTIES)
27044 .concat(PropertyKeys.NUMBER_PROPERTIES)
27045 .concat(PropertyKeys.FUNCTION_PROPERTIES)
27046 .concat(PropertyKeys.BOOLEAN_PROPERTIES);
27047 // used when doing property checks - this causes noise when using frameworks which can add their own fw specific
27048 // properties to coldefs, gridOptions etc
27049 PropertyKeys.FRAMEWORK_PROPERTIES = ['__ob__', '__metadata__', 'mappedColumnProperties', 'hasChildColumns',
27050 'toColDef', 'createColDefFromGridColumn'];
27051 return PropertyKeys;
27052}());
27053exports.PropertyKeys = PropertyKeys;
27054
27055
27056/***/ }),
27057/* 92 */
27058/***/ (function(module, exports, __webpack_require__) {
27059
27060"use strict";
27061/**
27062 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
27063 * @version v18.1.2
27064 * @link http://www.ag-grid.com/
27065 * @license MIT
27066 */
27067
27068var __extends = (this && this.__extends) || (function () {
27069 var extendStatics = Object.setPrototypeOf ||
27070 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
27071 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
27072 return function (d, b) {
27073 extendStatics(d, b);
27074 function __() { this.constructor = d; }
27075 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
27076 };
27077})();
27078var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
27079 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
27080 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
27081 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
27082 return c > 3 && r && Object.defineProperty(target, key, r), r;
27083};
27084var __metadata = (this && this.__metadata) || function (k, v) {
27085 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
27086};
27087Object.defineProperty(exports, "__esModule", { value: true });
27088var context_1 = __webpack_require__(0);
27089var dateFilter_1 = __webpack_require__(70);
27090var componentAnnotations_1 = __webpack_require__(11);
27091var utils_1 = __webpack_require__(1);
27092var componentRecipes_1 = __webpack_require__(23);
27093var component_1 = __webpack_require__(8);
27094var constants_1 = __webpack_require__(9);
27095var InputTextFloatingFilterComp = (function (_super) {
27096 __extends(InputTextFloatingFilterComp, _super);
27097 function InputTextFloatingFilterComp() {
27098 var _this = _super.call(this, "<div><input ref=\"eColumnFloatingFilter\" class=\"ag-floating-filter-input\"></div>") || this;
27099 _this.lastKnownModel = null;
27100 return _this;
27101 }
27102 InputTextFloatingFilterComp.prototype.init = function (params) {
27103 this.onFloatingFilterChanged = params.onFloatingFilterChanged;
27104 this.currentParentModel = params.currentParentModel;
27105 var debounceMs = params.debounceMs != null ? params.debounceMs : 500;
27106 var toDebounce = utils_1._.debounce(this.syncUpWithParentFilter.bind(this), debounceMs);
27107 this.addDestroyableEventListener(this.eColumnFloatingFilter, 'input', toDebounce);
27108 this.addDestroyableEventListener(this.eColumnFloatingFilter, 'keypress', toDebounce);
27109 this.addDestroyableEventListener(this.eColumnFloatingFilter, 'keydown', toDebounce);
27110 var columnDef = params.column.getDefinition();
27111 if (columnDef.filterParams && columnDef.filterParams.filterOptions && columnDef.filterParams.filterOptions.length === 1 && columnDef.filterParams.filterOptions[0] === 'inRange') {
27112 this.eColumnFloatingFilter.disabled = true;
27113 }
27114 };
27115 InputTextFloatingFilterComp.prototype.onParentModelChanged = function (parentModel, combinedFilter) {
27116 if (combinedFilter != null) {
27117 this.eColumnFloatingFilter.value = this.parseAsText(combinedFilter.condition1) + " " + combinedFilter.operator + " " + this.parseAsText(combinedFilter.condition2);
27118 this.eColumnFloatingFilter.disabled = true;
27119 this.lastKnownModel = null;
27120 this.eColumnFloatingFilter.title = this.eColumnFloatingFilter.value;
27121 this.eColumnFloatingFilter.style.cursor = 'default';
27122 return;
27123 }
27124 else {
27125 this.eColumnFloatingFilter.disabled = false;
27126 }
27127 if (this.equalModels(this.lastKnownModel, parentModel)) {
27128 // ensure column floating filter text is blanked out when both ranges are empty
27129 if (!this.lastKnownModel && !parentModel) {
27130 this.eColumnFloatingFilter.value = '';
27131 }
27132 return;
27133 }
27134 this.lastKnownModel = parentModel;
27135 var incomingTextValue = this.asFloatingFilterText(parentModel);
27136 if (incomingTextValue === this.eColumnFloatingFilter.value) {
27137 return;
27138 }
27139 this.eColumnFloatingFilter.value = incomingTextValue;
27140 this.eColumnFloatingFilter.title = '';
27141 };
27142 InputTextFloatingFilterComp.prototype.syncUpWithParentFilter = function (e) {
27143 var model = this.asParentModel();
27144 if (this.equalModels(this.lastKnownModel, model)) {
27145 return;
27146 }
27147 var modelUpdated = null;
27148 if (utils_1._.isKeyPressed(e, constants_1.Constants.KEY_ENTER)) {
27149 modelUpdated = this.onFloatingFilterChanged({
27150 model: model,
27151 apply: true
27152 });
27153 }
27154 else {
27155 modelUpdated = this.onFloatingFilterChanged({
27156 model: model,
27157 apply: false
27158 });
27159 }
27160 if (modelUpdated) {
27161 this.lastKnownModel = model;
27162 }
27163 };
27164 InputTextFloatingFilterComp.prototype.equalModels = function (left, right) {
27165 if (utils_1._.referenceCompare(left, right)) {
27166 return true;
27167 }
27168 if (!left || !right) {
27169 return false;
27170 }
27171 if (Array.isArray(left) || Array.isArray(right)) {
27172 return false;
27173 }
27174 return (utils_1._.referenceCompare(left.type, right.type) &&
27175 utils_1._.referenceCompare(left.filter, right.filter) &&
27176 utils_1._.referenceCompare(left.filterTo, right.filterTo) &&
27177 utils_1._.referenceCompare(left.filterType, right.filterType));
27178 };
27179 __decorate([
27180 componentAnnotations_1.RefSelector('eColumnFloatingFilter'),
27181 __metadata("design:type", HTMLInputElement)
27182 ], InputTextFloatingFilterComp.prototype, "eColumnFloatingFilter", void 0);
27183 return InputTextFloatingFilterComp;
27184}(component_1.Component));
27185exports.InputTextFloatingFilterComp = InputTextFloatingFilterComp;
27186var TextFloatingFilterComp = (function (_super) {
27187 __extends(TextFloatingFilterComp, _super);
27188 function TextFloatingFilterComp() {
27189 return _super !== null && _super.apply(this, arguments) || this;
27190 }
27191 TextFloatingFilterComp.prototype.asFloatingFilterText = function (parentModel) {
27192 if (!parentModel) {
27193 return '';
27194 }
27195 return parentModel.filter;
27196 };
27197 TextFloatingFilterComp.prototype.asParentModel = function () {
27198 var currentParentModel = this.currentParentModel();
27199 return {
27200 type: currentParentModel.type,
27201 filter: this.eColumnFloatingFilter.value,
27202 filterType: 'text'
27203 };
27204 };
27205 TextFloatingFilterComp.prototype.parseAsText = function (model) {
27206 return this.asFloatingFilterText(model);
27207 };
27208 return TextFloatingFilterComp;
27209}(InputTextFloatingFilterComp));
27210exports.TextFloatingFilterComp = TextFloatingFilterComp;
27211var DateFloatingFilterComp = (function (_super) {
27212 __extends(DateFloatingFilterComp, _super);
27213 function DateFloatingFilterComp() {
27214 var _this = _super !== null && _super.apply(this, arguments) || this;
27215 _this.lastKnownModel = null;
27216 return _this;
27217 }
27218 DateFloatingFilterComp.prototype.init = function (params) {
27219 this.onFloatingFilterChanged = params.onFloatingFilterChanged;
27220 this.currentParentModel = params.currentParentModel;
27221 var debounceMs = params.debounceMs != null ? params.debounceMs : 500;
27222 var toDebounce = utils_1._.debounce(this.onDateChanged.bind(this), debounceMs);
27223 var dateComponentParams = {
27224 onDateChanged: toDebounce,
27225 filterParams: params.column.getColDef().filterParams
27226 };
27227 this.dateComponentPromise = this.componentRecipes.newDateComponent(dateComponentParams);
27228 var body = utils_1._.loadTemplate("<div></div>");
27229 this.dateComponentPromise.then(function (dateComponent) {
27230 body.appendChild(dateComponent.getGui());
27231 var columnDef = params.column.getDefinition();
27232 var isInRange = (columnDef.filterParams &&
27233 columnDef.filterParams.filterOptions &&
27234 columnDef.filterParams.filterOptions.length === 1 &&
27235 columnDef.filterParams.filterOptions[0] === 'inRange');
27236 if (dateComponent.eDateInput) {
27237 dateComponent.eDateInput.disabled = isInRange;
27238 }
27239 });
27240 this.setTemplateFromElement(body);
27241 };
27242 DateFloatingFilterComp.prototype.onDateChanged = function () {
27243 var parentModel = this.currentParentModel();
27244 var model = this.asParentModel();
27245 if (this.equalModels(parentModel, model)) {
27246 return;
27247 }
27248 this.onFloatingFilterChanged({
27249 model: model,
27250 apply: true
27251 });
27252 this.lastKnownModel = model;
27253 };
27254 DateFloatingFilterComp.prototype.equalModels = function (left, right) {
27255 if (utils_1._.referenceCompare(left, right)) {
27256 return true;
27257 }
27258 if (!left || !right) {
27259 return false;
27260 }
27261 if (Array.isArray(left) || Array.isArray(right)) {
27262 return false;
27263 }
27264 return (utils_1._.referenceCompare(left.type, right.type) &&
27265 utils_1._.referenceCompare(left.dateFrom, right.dateFrom) &&
27266 utils_1._.referenceCompare(left.dateTo, right.dateTo) &&
27267 utils_1._.referenceCompare(left.filterType, right.filterType));
27268 };
27269 DateFloatingFilterComp.prototype.asParentModel = function () {
27270 var currentParentModel = this.currentParentModel();
27271 var filterValueDate = this.dateComponentPromise.resolveNow(null, function (dateComponent) { return dateComponent.getDate(); });
27272 var filterValueText = utils_1._.serializeDateToYyyyMmDd(dateFilter_1.DateFilter.removeTimezone(filterValueDate), "-");
27273 return {
27274 type: currentParentModel.type,
27275 dateFrom: filterValueText,
27276 dateTo: currentParentModel ? currentParentModel.dateTo : null,
27277 filterType: 'date'
27278 };
27279 };
27280 DateFloatingFilterComp.prototype.onParentModelChanged = function (parentModel) {
27281 var _this = this;
27282 this.lastKnownModel = parentModel;
27283 this.dateComponentPromise.then(function (dateComponent) {
27284 if (!parentModel || !parentModel.dateFrom) {
27285 dateComponent.setDate(null);
27286 return;
27287 }
27288 _this.enrichDateInput(parentModel.type, parentModel.dateFrom, parentModel.dateTo, dateComponent);
27289 dateComponent.setDate(utils_1._.parseYyyyMmDdToDate(parentModel.dateFrom, '-'));
27290 });
27291 };
27292 DateFloatingFilterComp.prototype.enrichDateInput = function (type, dateFrom, dateTo, dateComponent) {
27293 if (dateComponent.eDateInput) {
27294 if (type === 'inRange') {
27295 dateComponent.eDateInput.title = dateFrom + " to " + dateTo;
27296 dateComponent.eDateInput.disabled = true;
27297 }
27298 else {
27299 dateComponent.eDateInput.title = '';
27300 dateComponent.eDateInput.disabled = true;
27301 }
27302 }
27303 };
27304 __decorate([
27305 context_1.Autowired('componentRecipes'),
27306 __metadata("design:type", componentRecipes_1.ComponentRecipes)
27307 ], DateFloatingFilterComp.prototype, "componentRecipes", void 0);
27308 return DateFloatingFilterComp;
27309}(component_1.Component));
27310exports.DateFloatingFilterComp = DateFloatingFilterComp;
27311var NumberFloatingFilterComp = (function (_super) {
27312 __extends(NumberFloatingFilterComp, _super);
27313 function NumberFloatingFilterComp() {
27314 return _super !== null && _super.apply(this, arguments) || this;
27315 }
27316 NumberFloatingFilterComp.prototype.asFloatingFilterText = function (toParse) {
27317 var currentParentModel = this.currentParentModel();
27318 if (toParse == null && currentParentModel == null) {
27319 return '';
27320 }
27321 if (toParse == null && currentParentModel != null && currentParentModel.type !== 'inRange') {
27322 this.eColumnFloatingFilter.disabled = false;
27323 return '';
27324 }
27325 if (currentParentModel != null && currentParentModel.type === 'inRange') {
27326 this.eColumnFloatingFilter.disabled = true;
27327 return this.parseAsText(currentParentModel);
27328 }
27329 this.eColumnFloatingFilter.disabled = false;
27330 return this.parseAsText(toParse);
27331 };
27332 NumberFloatingFilterComp.prototype.parseAsText = function (model) {
27333 if (model.type && model.type === 'inRange') {
27334 var number_1 = this.asNumber(model.filter);
27335 var numberTo = this.asNumber(model.filterTo);
27336 return (number_1 ? number_1 + '' : '') +
27337 '-' +
27338 (numberTo ? numberTo + '' : '');
27339 }
27340 var number = this.asNumber(model.filter);
27341 return number != null ? number + '' : '';
27342 };
27343 NumberFloatingFilterComp.prototype.asParentModel = function () {
27344 var currentParentModel = this.currentParentModel();
27345 var filterValueNumber = this.asNumber(this.eColumnFloatingFilter.value);
27346 var filterValueText = this.eColumnFloatingFilter.value;
27347 var modelFilterValue = null;
27348 if (filterValueNumber == null && filterValueText === '') {
27349 modelFilterValue = null;
27350 }
27351 else if (filterValueNumber == null) {
27352 modelFilterValue = currentParentModel.filter;
27353 }
27354 else {
27355 modelFilterValue = filterValueNumber;
27356 }
27357 return {
27358 type: currentParentModel.type,
27359 filter: modelFilterValue,
27360 filterTo: !currentParentModel ? null : currentParentModel.filterTo,
27361 filterType: 'number'
27362 };
27363 };
27364 NumberFloatingFilterComp.prototype.asNumber = function (value) {
27365 if (value == null) {
27366 return null;
27367 }
27368 if (value === '') {
27369 return null;
27370 }
27371 var asNumber = Number(value);
27372 var invalidNumber = !utils_1._.isNumeric(asNumber);
27373 return invalidNumber ? null : asNumber;
27374 };
27375 return NumberFloatingFilterComp;
27376}(InputTextFloatingFilterComp));
27377exports.NumberFloatingFilterComp = NumberFloatingFilterComp;
27378var SetFloatingFilterComp = (function (_super) {
27379 __extends(SetFloatingFilterComp, _super);
27380 function SetFloatingFilterComp() {
27381 return _super !== null && _super.apply(this, arguments) || this;
27382 }
27383 SetFloatingFilterComp.prototype.init = function (params) {
27384 _super.prototype.init.call(this, params);
27385 this.eColumnFloatingFilter.disabled = true;
27386 };
27387 SetFloatingFilterComp.prototype.asFloatingFilterText = function (parentModel) {
27388 this.eColumnFloatingFilter.disabled = true;
27389 if (!parentModel)
27390 return '';
27391 // also supporting old filter model for backwards compatibility
27392 var values = (parentModel instanceof Array) ? parentModel : parentModel.values;
27393 if (values.length === 0) {
27394 return '';
27395 }
27396 var arrayToDisplay = values.length > 10 ? values.slice(0, 10).concat('...') : values;
27397 return "(" + values.length + ") " + arrayToDisplay.join(",");
27398 };
27399 SetFloatingFilterComp.prototype.parseAsText = function (model) {
27400 return this.asFloatingFilterText(model);
27401 };
27402 SetFloatingFilterComp.prototype.asParentModel = function () {
27403 if (this.eColumnFloatingFilter.value == null || this.eColumnFloatingFilter.value === '') {
27404 return {
27405 values: [],
27406 filterType: 'set'
27407 };
27408 }
27409 return {
27410 values: this.eColumnFloatingFilter.value.split(","),
27411 filterType: 'set'
27412 };
27413 };
27414 SetFloatingFilterComp.prototype.equalModels = function (left, right) {
27415 return false;
27416 };
27417 return SetFloatingFilterComp;
27418}(InputTextFloatingFilterComp));
27419exports.SetFloatingFilterComp = SetFloatingFilterComp;
27420var ReadModelAsStringFloatingFilterComp = (function (_super) {
27421 __extends(ReadModelAsStringFloatingFilterComp, _super);
27422 function ReadModelAsStringFloatingFilterComp() {
27423 return _super !== null && _super.apply(this, arguments) || this;
27424 }
27425 ReadModelAsStringFloatingFilterComp.prototype.init = function (params) {
27426 _super.prototype.init.call(this, params);
27427 this.eColumnFloatingFilter.disabled = true;
27428 };
27429 ReadModelAsStringFloatingFilterComp.prototype.onParentModelChanged = function (parentModel) {
27430 this.eColumnFloatingFilter.value = this.asFloatingFilterText(this.currentParentModel());
27431 };
27432 ReadModelAsStringFloatingFilterComp.prototype.asFloatingFilterText = function (parentModel) {
27433 return parentModel;
27434 };
27435 ReadModelAsStringFloatingFilterComp.prototype.parseAsText = function (model) {
27436 return model;
27437 };
27438 ReadModelAsStringFloatingFilterComp.prototype.asParentModel = function () {
27439 return null;
27440 };
27441 return ReadModelAsStringFloatingFilterComp;
27442}(InputTextFloatingFilterComp));
27443exports.ReadModelAsStringFloatingFilterComp = ReadModelAsStringFloatingFilterComp;
27444
27445
27446/***/ }),
27447/* 93 */
27448/***/ (function(module, exports, __webpack_require__) {
27449
27450"use strict";
27451/**
27452 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
27453 * @version v18.1.2
27454 * @link http://www.ag-grid.com/
27455 * @license MIT
27456 */
27457
27458var __extends = (this && this.__extends) || (function () {
27459 var extendStatics = Object.setPrototypeOf ||
27460 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
27461 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
27462 return function (d, b) {
27463 extendStatics(d, b);
27464 function __() { this.constructor = d; }
27465 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
27466 };
27467})();
27468Object.defineProperty(exports, "__esModule", { value: true });
27469var textCellEditor_1 = __webpack_require__(69);
27470var PopupTextCellEditor = (function (_super) {
27471 __extends(PopupTextCellEditor, _super);
27472 function PopupTextCellEditor() {
27473 return _super !== null && _super.apply(this, arguments) || this;
27474 }
27475 PopupTextCellEditor.prototype.isPopup = function () {
27476 return true;
27477 };
27478 return PopupTextCellEditor;
27479}(textCellEditor_1.TextCellEditor));
27480exports.PopupTextCellEditor = PopupTextCellEditor;
27481
27482
27483/***/ }),
27484/* 94 */
27485/***/ (function(module, exports, __webpack_require__) {
27486
27487"use strict";
27488/**
27489 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
27490 * @version v18.1.2
27491 * @link http://www.ag-grid.com/
27492 * @license MIT
27493 */
27494
27495var __extends = (this && this.__extends) || (function () {
27496 var extendStatics = Object.setPrototypeOf ||
27497 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
27498 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
27499 return function (d, b) {
27500 extendStatics(d, b);
27501 function __() { this.constructor = d; }
27502 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
27503 };
27504})();
27505Object.defineProperty(exports, "__esModule", { value: true });
27506var selectCellEditor_1 = __webpack_require__(77);
27507var PopupSelectCellEditor = (function (_super) {
27508 __extends(PopupSelectCellEditor, _super);
27509 function PopupSelectCellEditor() {
27510 return _super !== null && _super.apply(this, arguments) || this;
27511 }
27512 PopupSelectCellEditor.prototype.isPopup = function () {
27513 return true;
27514 };
27515 return PopupSelectCellEditor;
27516}(selectCellEditor_1.SelectCellEditor));
27517exports.PopupSelectCellEditor = PopupSelectCellEditor;
27518
27519
27520/***/ }),
27521/* 95 */
27522/***/ (function(module, exports, __webpack_require__) {
27523
27524"use strict";
27525/**
27526 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
27527 * @version v18.1.2
27528 * @link http://www.ag-grid.com/
27529 * @license MIT
27530 */
27531
27532var __extends = (this && this.__extends) || (function () {
27533 var extendStatics = Object.setPrototypeOf ||
27534 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
27535 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
27536 return function (d, b) {
27537 extendStatics(d, b);
27538 function __() { this.constructor = d; }
27539 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
27540 };
27541})();
27542Object.defineProperty(exports, "__esModule", { value: true });
27543var component_1 = __webpack_require__(8);
27544var constants_1 = __webpack_require__(9);
27545var utils_1 = __webpack_require__(1);
27546var LargeTextCellEditor = (function (_super) {
27547 __extends(LargeTextCellEditor, _super);
27548 function LargeTextCellEditor() {
27549 return _super.call(this, LargeTextCellEditor.TEMPLATE) || this;
27550 }
27551 LargeTextCellEditor.prototype.init = function (params) {
27552 this.params = params;
27553 this.focusAfterAttached = params.cellStartedEdit;
27554 this.textarea = document.createElement("textarea");
27555 this.textarea.maxLength = params.maxLength ? params.maxLength : "200";
27556 this.textarea.cols = params.cols ? params.cols : "60";
27557 this.textarea.rows = params.rows ? params.rows : "10";
27558 if (utils_1.Utils.exists(params.value)) {
27559 this.textarea.value = params.value.toString();
27560 }
27561 this.getGui().querySelector('.ag-large-textarea').appendChild(this.textarea);
27562 this.addGuiEventListener('keydown', this.onKeyDown.bind(this));
27563 };
27564 LargeTextCellEditor.prototype.onKeyDown = function (event) {
27565 var key = event.which || event.keyCode;
27566 if (key == constants_1.Constants.KEY_LEFT ||
27567 key == constants_1.Constants.KEY_UP ||
27568 key == constants_1.Constants.KEY_RIGHT ||
27569 key == constants_1.Constants.KEY_DOWN ||
27570 (event.shiftKey && key == constants_1.Constants.KEY_ENTER)) {
27571 event.stopPropagation();
27572 }
27573 };
27574 LargeTextCellEditor.prototype.afterGuiAttached = function () {
27575 if (this.focusAfterAttached) {
27576 this.textarea.focus();
27577 }
27578 };
27579 LargeTextCellEditor.prototype.getValue = function () {
27580 return this.textarea.value;
27581 };
27582 LargeTextCellEditor.prototype.isPopup = function () {
27583 return true;
27584 };
27585 LargeTextCellEditor.TEMPLATE =
27586 // tab index is needed so we can focus, which is needed for keyboard events
27587 '<div class="ag-large-text" tabindex="0">' +
27588 '<div class="ag-large-textarea"></div>' +
27589 '</div>';
27590 return LargeTextCellEditor;
27591}(component_1.Component));
27592exports.LargeTextCellEditor = LargeTextCellEditor;
27593
27594
27595/***/ }),
27596/* 96 */
27597/***/ (function(module, exports, __webpack_require__) {
27598
27599"use strict";
27600/**
27601 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
27602 * @version v18.1.2
27603 * @link http://www.ag-grid.com/
27604 * @license MIT
27605 */
27606
27607var __extends = (this && this.__extends) || (function () {
27608 var extendStatics = Object.setPrototypeOf ||
27609 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
27610 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
27611 return function (d, b) {
27612 extendStatics(d, b);
27613 function __() { this.constructor = d; }
27614 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
27615 };
27616})();
27617var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
27618 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
27619 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
27620 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
27621 return c > 3 && r && Object.defineProperty(target, key, r), r;
27622};
27623var __metadata = (this && this.__metadata) || function (k, v) {
27624 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
27625};
27626Object.defineProperty(exports, "__esModule", { value: true });
27627var utils_1 = __webpack_require__(1);
27628var baseFilter_1 = __webpack_require__(53);
27629var componentAnnotations_1 = __webpack_require__(11);
27630var TextFilter = (function (_super) {
27631 __extends(TextFilter, _super);
27632 function TextFilter() {
27633 return _super !== null && _super.apply(this, arguments) || this;
27634 }
27635 TextFilter.prototype.getDefaultType = function () {
27636 return baseFilter_1.BaseFilter.CONTAINS;
27637 };
27638 TextFilter.prototype.customInit = function () {
27639 this.comparator = this.filterParams.textCustomComparator ? this.filterParams.textCustomComparator : TextFilter.DEFAULT_COMPARATOR;
27640 this.formatter =
27641 this.filterParams.textFormatter ? this.filterParams.textFormatter :
27642 this.filterParams.caseSensitive == true ? TextFilter.DEFAULT_FORMATTER :
27643 TextFilter.DEFAULT_LOWERCASE_FORMATTER;
27644 _super.prototype.customInit.call(this);
27645 };
27646 TextFilter.prototype.modelFromFloatingFilter = function (from) {
27647 return {
27648 type: this.filter,
27649 filter: from,
27650 filterType: 'text'
27651 };
27652 };
27653 TextFilter.prototype.getApplicableFilterTypes = function () {
27654 return [baseFilter_1.BaseFilter.EQUALS, baseFilter_1.BaseFilter.NOT_EQUAL, baseFilter_1.BaseFilter.STARTS_WITH, baseFilter_1.BaseFilter.ENDS_WITH,
27655 baseFilter_1.BaseFilter.CONTAINS, baseFilter_1.BaseFilter.NOT_CONTAINS];
27656 };
27657 TextFilter.prototype.bodyTemplate = function (type) {
27658 var translate = this.translate.bind(this);
27659 var fieldId = type == baseFilter_1.FilterConditionType.MAIN ? "filterText" : "filterConditionText";
27660 return "<div class=\"ag-filter-body\">\n <input class=\"ag-filter-filter\" id=" + fieldId + " type=\"text\" placeholder=\"" + translate('filterOoo', 'Filter...') + "\"/>\n </div>";
27661 };
27662 TextFilter.prototype.initialiseFilterBodyUi = function (type) {
27663 _super.prototype.initialiseFilterBodyUi.call(this, type);
27664 this.addFilterChangedListener(type);
27665 this.setFilter(this.filterConditionText, baseFilter_1.FilterConditionType.CONDITION);
27666 this.setFilterType(this.filterCondition, baseFilter_1.FilterConditionType.CONDITION);
27667 };
27668 TextFilter.prototype.addFilterChangedListener = function (type) {
27669 var _this = this;
27670 var eElement = type === baseFilter_1.FilterConditionType.MAIN ? this.eFilterTextField : this.eFilterConditionTextField;
27671 var debounceMs = this.getDebounceMs(this.filterParams);
27672 var toDebounce = utils_1.Utils.debounce(function () { return _this.onFilterTextFieldChanged(type); }, debounceMs);
27673 this.addDestroyableEventListener(eElement, 'input', toDebounce);
27674 };
27675 TextFilter.prototype.refreshFilterBodyUi = function (type) {
27676 if (this.eFilterConditionTextField) {
27677 this.addFilterChangedListener(baseFilter_1.FilterConditionType.CONDITION);
27678 }
27679 };
27680 TextFilter.prototype.afterGuiAttached = function () {
27681 this.eFilterTextField.focus();
27682 };
27683 TextFilter.prototype.filterValues = function (type) {
27684 return type === baseFilter_1.FilterConditionType.MAIN ? this.filterText : this.filterConditionText;
27685 };
27686 TextFilter.prototype.individualFilterPasses = function (params, type) {
27687 var filterText = type == baseFilter_1.FilterConditionType.MAIN ? this.filterText : this.filterConditionText;
27688 var filter = type == baseFilter_1.FilterConditionType.MAIN ? this.filter : this.filterCondition;
27689 if (!filterText) {
27690 return type === baseFilter_1.FilterConditionType.MAIN ? true : this.conditionValue === 'AND';
27691 }
27692 else {
27693 return this.checkIndividualFilter(params, filter, filterText);
27694 }
27695 };
27696 TextFilter.prototype.checkIndividualFilter = function (params, filterType, filterText) {
27697 var value = this.filterParams.valueGetter(params.node);
27698 if (value == null || value === undefined) {
27699 return filterType === baseFilter_1.BaseFilter.NOT_EQUAL || filterType === baseFilter_1.BaseFilter.NOT_CONTAINS;
27700 }
27701 var valueFormatted = this.formatter(value);
27702 return this.comparator(filterType, valueFormatted, filterText);
27703 };
27704 TextFilter.prototype.onFilterTextFieldChanged = function (type) {
27705 var value = type === baseFilter_1.FilterConditionType.MAIN ? this.eFilterTextField.value : this.eFilterConditionTextField.value;
27706 var current = type === baseFilter_1.FilterConditionType.MAIN ? this.filterText : this.filterConditionText;
27707 var filterText = utils_1.Utils.makeNull(value);
27708 if (filterText && filterText.trim() === '') {
27709 filterText = null;
27710 }
27711 if (current !== filterText) {
27712 var newLowerCase = filterText && this.filterParams.caseSensitive != true ? filterText.toLowerCase() :
27713 filterText;
27714 var previousLowerCase = current && this.filterParams.caseSensitive != true ? current.toLowerCase() :
27715 current;
27716 if (type === baseFilter_1.FilterConditionType.MAIN) {
27717 this.filterText = this.formatter(filterText);
27718 }
27719 else {
27720 this.filterConditionText = this.formatter(filterText);
27721 }
27722 if (previousLowerCase !== newLowerCase) {
27723 this.onFilterChanged();
27724 }
27725 }
27726 };
27727 TextFilter.prototype.setFilter = function (filter, type) {
27728 filter = utils_1.Utils.makeNull(filter);
27729 if (type === baseFilter_1.FilterConditionType.MAIN) {
27730 if (filter) {
27731 this.filterText = this.formatter(filter);
27732 if (!this.eFilterTextField)
27733 return;
27734 this.eFilterTextField.value = filter;
27735 }
27736 else {
27737 this.filterText = null;
27738 if (!this.eFilterTextField)
27739 return;
27740 this.eFilterTextField.value = null;
27741 }
27742 }
27743 else {
27744 if (filter) {
27745 this.filterConditionText = this.formatter(filter);
27746 if (!this.eFilterConditionTextField)
27747 return;
27748 this.eFilterConditionTextField.value = filter;
27749 }
27750 else {
27751 this.filterConditionText = null;
27752 if (!this.eFilterConditionTextField)
27753 return;
27754 this.eFilterConditionTextField.value = null;
27755 }
27756 }
27757 };
27758 TextFilter.prototype.getFilter = function () {
27759 return this.filterText;
27760 };
27761 TextFilter.prototype.resetState = function () {
27762 this.setFilter(null, baseFilter_1.FilterConditionType.MAIN);
27763 this.setFilterType(this.defaultFilter, baseFilter_1.FilterConditionType.MAIN);
27764 this.setFilter(null, baseFilter_1.FilterConditionType.CONDITION);
27765 this.setFilterType(this.defaultFilter, baseFilter_1.FilterConditionType.CONDITION);
27766 };
27767 TextFilter.prototype.serialize = function (type) {
27768 var filter = type === baseFilter_1.FilterConditionType.MAIN ? this.filter : this.filterCondition;
27769 var filterText = type === baseFilter_1.FilterConditionType.MAIN ? this.filterText : this.filterConditionText;
27770 return {
27771 type: filter ? filter : this.defaultFilter,
27772 filter: filterText,
27773 filterType: 'text'
27774 };
27775 };
27776 TextFilter.prototype.parse = function (model, type) {
27777 this.setFilterType(model.type, type);
27778 this.setFilter(model.filter, type);
27779 };
27780 TextFilter.prototype.setType = function (filterType, type) {
27781 this.setFilterType(filterType, type);
27782 };
27783 TextFilter.DEFAULT_FORMATTER = function (from) {
27784 return from;
27785 };
27786 TextFilter.DEFAULT_LOWERCASE_FORMATTER = function (from) {
27787 if (from == null) {
27788 return null;
27789 }
27790 return from.toString().toLowerCase();
27791 };
27792 TextFilter.DEFAULT_COMPARATOR = function (filter, value, filterText) {
27793 switch (filter) {
27794 case TextFilter.CONTAINS:
27795 return value.indexOf(filterText) >= 0;
27796 case TextFilter.NOT_CONTAINS:
27797 return value.indexOf(filterText) === -1;
27798 case TextFilter.EQUALS:
27799 return value === filterText;
27800 case TextFilter.NOT_EQUAL:
27801 return value != filterText;
27802 case TextFilter.STARTS_WITH:
27803 return value.indexOf(filterText) === 0;
27804 case TextFilter.ENDS_WITH:
27805 var index = value.lastIndexOf(filterText);
27806 return index >= 0 && index === (value.length - filterText.length);
27807 default:
27808 // should never happen
27809 console.warn('invalid filter type ' + filter);
27810 return false;
27811 }
27812 };
27813 __decorate([
27814 componentAnnotations_1.QuerySelector('#filterText'),
27815 __metadata("design:type", HTMLInputElement)
27816 ], TextFilter.prototype, "eFilterTextField", void 0);
27817 __decorate([
27818 componentAnnotations_1.QuerySelector('#filterConditionText'),
27819 __metadata("design:type", HTMLInputElement)
27820 ], TextFilter.prototype, "eFilterConditionTextField", void 0);
27821 return TextFilter;
27822}(baseFilter_1.ComparableBaseFilter));
27823exports.TextFilter = TextFilter;
27824
27825
27826/***/ }),
27827/* 97 */
27828/***/ (function(module, exports, __webpack_require__) {
27829
27830"use strict";
27831/**
27832 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
27833 * @version v18.1.2
27834 * @link http://www.ag-grid.com/
27835 * @license MIT
27836 */
27837
27838var __extends = (this && this.__extends) || (function () {
27839 var extendStatics = Object.setPrototypeOf ||
27840 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
27841 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
27842 return function (d, b) {
27843 extendStatics(d, b);
27844 function __() { this.constructor = d; }
27845 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
27846 };
27847})();
27848var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
27849 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
27850 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
27851 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
27852 return c > 3 && r && Object.defineProperty(target, key, r), r;
27853};
27854var __metadata = (this && this.__metadata) || function (k, v) {
27855 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
27856};
27857Object.defineProperty(exports, "__esModule", { value: true });
27858var utils_1 = __webpack_require__(1);
27859var componentAnnotations_1 = __webpack_require__(11);
27860var baseFilter_1 = __webpack_require__(53);
27861var NumberFilter = (function (_super) {
27862 __extends(NumberFilter, _super);
27863 function NumberFilter() {
27864 return _super !== null && _super.apply(this, arguments) || this;
27865 }
27866 NumberFilter.prototype.modelFromFloatingFilter = function (from) {
27867 return {
27868 type: this.filter,
27869 filter: Number(from),
27870 filterTo: this.filterNumberTo,
27871 filterType: 'number'
27872 };
27873 };
27874 NumberFilter.prototype.getApplicableFilterTypes = function () {
27875 return [baseFilter_1.BaseFilter.EQUALS, baseFilter_1.BaseFilter.NOT_EQUAL, baseFilter_1.BaseFilter.LESS_THAN, baseFilter_1.BaseFilter.LESS_THAN_OR_EQUAL,
27876 baseFilter_1.BaseFilter.GREATER_THAN, baseFilter_1.BaseFilter.GREATER_THAN_OR_EQUAL, baseFilter_1.BaseFilter.IN_RANGE];
27877 };
27878 NumberFilter.prototype.bodyTemplate = function (type) {
27879 var translate = this.translate.bind(this);
27880 var fieldId = type == baseFilter_1.FilterConditionType.MAIN ? "filterText" : "filterConditionText";
27881 var filterNumberToPanelId = type == baseFilter_1.FilterConditionType.MAIN ? "filterNumberToPanel" : "filterNumberToPanelCondition";
27882 var fieldToId = type == baseFilter_1.FilterConditionType.MAIN ? "filterToText" : "filterToConditionText";
27883 return "<div class=\"ag-filter-body\">\n <div>\n <input class=\"ag-filter-filter\" id=\"" + fieldId + "\" type=\"text\" placeholder=\"" + translate('filterOoo') + "\"/>\n </div>\n <div class=\"ag-filter-number-to\" id=\"" + filterNumberToPanelId + "\">\n <input class=\"ag-filter-filter\" id=\"" + fieldToId + "\" type=\"text\" placeholder=\"" + translate('filterOoo') + "\"/>\n </div>\n </div>";
27884 };
27885 NumberFilter.prototype.initialiseFilterBodyUi = function (type) {
27886 _super.prototype.initialiseFilterBodyUi.call(this, type);
27887 if (type === baseFilter_1.FilterConditionType.MAIN) {
27888 this.eFilterTextField = this.queryForHtmlInputElement("#filterText");
27889 this.addFilterChangedEventListeners(type, this.eFilterTextField, this.eFilterToTextField);
27890 }
27891 else {
27892 this.eFilterTextConditionField = this.queryForHtmlInputElement("#filterConditionText");
27893 this.addFilterChangedEventListeners(type, this.eFilterTextConditionField, this.eFilterToConditionText);
27894 this.setFilter(this.filterNumberCondition, baseFilter_1.FilterConditionType.CONDITION);
27895 this.setFilterTo(this.filterNumberConditionTo, baseFilter_1.FilterConditionType.CONDITION);
27896 this.setFilterType(this.filterCondition, baseFilter_1.FilterConditionType.CONDITION);
27897 }
27898 };
27899 NumberFilter.prototype.addFilterChangedEventListeners = function (type, filterElement, filterToElement) {
27900 var _this = this;
27901 var debounceMs = this.getDebounceMs(this.filterParams);
27902 var toDebounce = utils_1.Utils.debounce(function () { return _this.onTextFieldsChanged(type, filterElement, filterToElement); }, debounceMs);
27903 this.addDestroyableEventListener(filterElement, "input", toDebounce);
27904 this.addDestroyableEventListener(filterToElement, "input", toDebounce);
27905 };
27906 NumberFilter.prototype.afterGuiAttached = function () {
27907 this.eFilterTextField.focus();
27908 };
27909 NumberFilter.prototype.comparator = function () {
27910 return function (left, right) {
27911 if (left === right) {
27912 return 0;
27913 }
27914 if (left < right) {
27915 return 1;
27916 }
27917 if (left > right) {
27918 return -1;
27919 }
27920 };
27921 };
27922 NumberFilter.prototype.onTextFieldsChanged = function (type, filterElement, filterToElement) {
27923 var newFilter = this.stringToFloat(filterElement.value);
27924 var newFilterTo = this.stringToFloat(filterToElement.value);
27925 if (type === baseFilter_1.FilterConditionType.MAIN) {
27926 if (this.filterNumber !== newFilter || this.filterNumberTo !== newFilterTo) {
27927 this.filterNumber = newFilter;
27928 this.filterNumberTo = newFilterTo;
27929 this.onFilterChanged();
27930 }
27931 }
27932 else {
27933 if (this.filterNumberCondition !== newFilter || this.filterNumberConditionTo !== newFilterTo) {
27934 this.filterNumberCondition = newFilter;
27935 this.filterNumberConditionTo = newFilterTo;
27936 this.onFilterChanged();
27937 }
27938 }
27939 };
27940 NumberFilter.prototype.filterValues = function (type) {
27941 if (type === baseFilter_1.FilterConditionType.MAIN) {
27942 return this.filter !== baseFilter_1.BaseFilter.IN_RANGE ?
27943 this.asNumber(this.filterNumber) :
27944 [this.asNumber(this.filterNumber), this.asNumber(this.filterNumberTo)];
27945 }
27946 return this.filterCondition !== baseFilter_1.BaseFilter.IN_RANGE ?
27947 this.asNumber(this.filterNumberCondition) :
27948 [this.asNumber(this.filterNumberCondition), this.asNumber(this.filterNumberConditionTo)];
27949 };
27950 NumberFilter.prototype.asNumber = function (value) {
27951 return utils_1.Utils.isNumeric(value) ? value : null;
27952 };
27953 NumberFilter.prototype.stringToFloat = function (value) {
27954 var filterText = utils_1.Utils.makeNull(value);
27955 if (filterText && filterText.trim() === '') {
27956 filterText = null;
27957 }
27958 var newFilter;
27959 if (filterText !== null && filterText !== undefined) {
27960 newFilter = parseFloat(filterText);
27961 }
27962 else {
27963 newFilter = null;
27964 }
27965 return newFilter;
27966 };
27967 NumberFilter.prototype.setFilter = function (filter, type) {
27968 filter = utils_1.Utils.makeNull(filter);
27969 if (filter !== null && !(typeof filter === 'number')) {
27970 filter = parseFloat(filter);
27971 }
27972 if (type === baseFilter_1.FilterConditionType.MAIN) {
27973 this.filterNumber = filter;
27974 if (!this.eFilterTextField)
27975 return;
27976 this.eFilterTextField.value = filter;
27977 }
27978 else {
27979 this.filterNumberCondition = filter;
27980 if (!this.eFilterTextConditionField)
27981 return;
27982 this.eFilterTextConditionField.value = filter;
27983 }
27984 };
27985 NumberFilter.prototype.setFilterTo = function (filter, type) {
27986 filter = utils_1.Utils.makeNull(filter);
27987 if (filter !== null && !(typeof filter === 'number')) {
27988 filter = parseFloat(filter);
27989 }
27990 if (type === baseFilter_1.FilterConditionType.MAIN) {
27991 this.filterNumberTo = filter;
27992 if (!this.eFilterToTextField)
27993 return;
27994 this.eFilterToTextField.value = filter;
27995 }
27996 else {
27997 this.filterNumberConditionTo = filter;
27998 if (!this.eFilterToConditionText)
27999 return;
28000 this.eFilterToConditionText.value = filter;
28001 }
28002 };
28003 NumberFilter.prototype.getFilter = function (type) {
28004 return type === baseFilter_1.FilterConditionType.MAIN ? this.filterNumber : this.filterNumberCondition;
28005 };
28006 NumberFilter.prototype.serialize = function (type) {
28007 var filter = type === baseFilter_1.FilterConditionType.MAIN ? this.filter : this.filterCondition;
28008 var filterNumber = type === baseFilter_1.FilterConditionType.MAIN ? this.filterNumber : this.filterNumberCondition;
28009 var filterNumberTo = type === baseFilter_1.FilterConditionType.MAIN ? this.filterNumberTo : this.filterNumberConditionTo;
28010 return {
28011 type: filter ? filter : this.defaultFilter,
28012 filter: filterNumber,
28013 filterTo: filterNumberTo,
28014 filterType: 'number'
28015 };
28016 };
28017 NumberFilter.prototype.parse = function (model, type) {
28018 this.setFilterType(model.type, type);
28019 this.setFilter(model.filter, type);
28020 this.setFilterTo(model.filterTo, type);
28021 };
28022 NumberFilter.prototype.refreshFilterBodyUi = function (type) {
28023 var filterType = type === baseFilter_1.FilterConditionType.MAIN ? this.filter : this.filterCondition;
28024 var panel = type === baseFilter_1.FilterConditionType.MAIN ? this.eNumberToPanel : this.eNumberToConditionPanel;
28025 if (!panel)
28026 return;
28027 var visible = filterType === NumberFilter.IN_RANGE;
28028 utils_1.Utils.setVisible(panel, visible);
28029 };
28030 NumberFilter.prototype.resetState = function () {
28031 this.setFilterType(this.defaultFilter, baseFilter_1.FilterConditionType.MAIN);
28032 this.setFilter(null, baseFilter_1.FilterConditionType.MAIN);
28033 this.setFilterTo(null, baseFilter_1.FilterConditionType.MAIN);
28034 this.setFilterType(this.defaultFilter, baseFilter_1.FilterConditionType.CONDITION);
28035 this.setFilter(null, baseFilter_1.FilterConditionType.CONDITION);
28036 this.setFilterTo(null, baseFilter_1.FilterConditionType.CONDITION);
28037 };
28038 NumberFilter.prototype.setType = function (filterType, type) {
28039 this.setFilterType(filterType, type);
28040 };
28041 NumberFilter.LESS_THAN = 'lessThan'; //3;
28042 __decorate([
28043 componentAnnotations_1.QuerySelector('#filterNumberToPanel'),
28044 __metadata("design:type", HTMLElement)
28045 ], NumberFilter.prototype, "eNumberToPanel", void 0);
28046 __decorate([
28047 componentAnnotations_1.QuerySelector('#filterNumberToPanelCondition'),
28048 __metadata("design:type", HTMLElement)
28049 ], NumberFilter.prototype, "eNumberToConditionPanel", void 0);
28050 __decorate([
28051 componentAnnotations_1.QuerySelector('#filterToText'),
28052 __metadata("design:type", HTMLInputElement)
28053 ], NumberFilter.prototype, "eFilterToTextField", void 0);
28054 __decorate([
28055 componentAnnotations_1.QuerySelector('#filterToConditionText'),
28056 __metadata("design:type", HTMLInputElement)
28057 ], NumberFilter.prototype, "eFilterToConditionText", void 0);
28058 return NumberFilter;
28059}(baseFilter_1.ScalarBaseFilter));
28060exports.NumberFilter = NumberFilter;
28061
28062
28063/***/ }),
28064/* 98 */
28065/***/ (function(module, exports, __webpack_require__) {
28066
28067"use strict";
28068/**
28069 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
28070 * @version v18.1.2
28071 * @link http://www.ag-grid.com/
28072 * @license MIT
28073 */
28074
28075Object.defineProperty(exports, "__esModule", { value: true });
28076var requestAnimationFrame$1 = (function () {
28077 if (typeof requestAnimationFrame === "function") {
28078 return requestAnimationFrame.bind(window);
28079 }
28080 return function (callback) {
28081 return setTimeout(function () {
28082 return callback(Date.now());
28083 }, 1000 / 60);
28084 };
28085})();
28086var trailingTimeout = 2;
28087var throttle = function (callback, delay) {
28088 var leadingCall = false;
28089 var trailingCall = false;
28090 var lastCallTime = 0;
28091 function resolvePending() {
28092 if (leadingCall) {
28093 leadingCall = false;
28094 callback();
28095 }
28096 if (trailingCall) {
28097 proxy();
28098 }
28099 }
28100 function timeoutCallback() {
28101 requestAnimationFrame$1(resolvePending);
28102 }
28103 function proxy() {
28104 var timeStamp = Date.now();
28105 if (leadingCall) {
28106 if (timeStamp - lastCallTime < trailingTimeout) {
28107 return;
28108 }
28109 trailingCall = true;
28110 }
28111 else {
28112 leadingCall = true;
28113 trailingCall = false;
28114 setTimeout(timeoutCallback, delay);
28115 }
28116 lastCallTime = timeStamp;
28117 }
28118 return proxy;
28119};
28120var REFRESH_DELAY = 20;
28121var getWindowOf = function (target) {
28122 var ownerGlobal = target && target.ownerDocument && target.ownerDocument.defaultView;
28123 return ownerGlobal || window;
28124};
28125var emptyRect = createRectInit(0, 0, 0, 0);
28126function toFloat(value) {
28127 return parseFloat(value) || 0;
28128}
28129function getBordersSize(styles, start, end) {
28130 var positions = [start, end];
28131 return positions.reduce(function (size, position) {
28132 var value = styles.getPropertyValue("border-" + position + "-width");
28133 return size + toFloat(value);
28134 }, 0);
28135}
28136function getPaddings(styles) {
28137 var positions = ["top", "right", "bottom", "left"];
28138 var paddings = {
28139 top: null,
28140 left: null,
28141 right: null,
28142 bottom: null
28143 };
28144 for (var i = 0, list = positions; i < list.length; i += 1) {
28145 var position = list[i];
28146 var value = styles.getPropertyValue("padding-" + position);
28147 paddings[position] = toFloat(value);
28148 }
28149 return paddings;
28150}
28151function getHTMLElementContentRect(target) {
28152 var clientWidth = target.clientWidth;
28153 var clientHeight = target.clientHeight;
28154 if (!clientWidth && !clientHeight) {
28155 return emptyRect;
28156 }
28157 var styles = getWindowOf(target).getComputedStyle(target);
28158 var paddings = getPaddings(styles);
28159 var horizPad = paddings.left + paddings.right;
28160 var vertPad = paddings.top + paddings.bottom;
28161 var width = toFloat(styles.width);
28162 var height = toFloat(styles.height);
28163 if (styles.boxSizing === "border-box") {
28164 if (Math.round(width + horizPad) !== clientWidth) {
28165 width -= getBordersSize(styles, "left", "right") + horizPad;
28166 }
28167 if (Math.round(height + vertPad) !== clientHeight) {
28168 height -= getBordersSize(styles, "top", "bottom") + vertPad;
28169 }
28170 }
28171 var vertScrollbar = Math.round(width + horizPad) - clientWidth;
28172 var horizScrollbar = Math.round(height + vertPad) - clientHeight;
28173 if (Math.abs(vertScrollbar) !== 1) {
28174 width -= vertScrollbar;
28175 }
28176 if (Math.abs(horizScrollbar) !== 1) {
28177 height -= horizScrollbar;
28178 }
28179 return createRectInit(paddings.left, paddings.top, width, height);
28180}
28181function getContentRect(target) {
28182 return getHTMLElementContentRect(target);
28183}
28184function createReadOnlyRect(ref) {
28185 var x = ref.x;
28186 var y = ref.y;
28187 var width = ref.width;
28188 var height = ref.height;
28189 var Constr = window.DOMRectReadOnly ? window.DOMRectReadOnly : Object;
28190 var rect = Object.create(Constr.prototype);
28191 defineConfigurable(rect, {
28192 x: x,
28193 y: y,
28194 width: width,
28195 height: height,
28196 top: y,
28197 right: x + width,
28198 bottom: height + y,
28199 left: x
28200 });
28201 return rect;
28202}
28203function createRectInit(x, y, width, height) {
28204 return { x: x, y: y, width: width, height: height };
28205}
28206var ResizeObserverController = (function () {
28207 function ResizeObserverController() {
28208 this.connected_ = false;
28209 this.mutationEventsAdded_ = false;
28210 this.mutationsObserver_ = null;
28211 this.observers_ = [];
28212 this.callback_ = null;
28213 this.refresh = throttle(this.refresh.bind(this), REFRESH_DELAY);
28214 }
28215 ResizeObserverController.prototype.addObserver = function (observer) {
28216 if (this.observers_.indexOf(observer) == -1) {
28217 this.observers_.push(observer);
28218 }
28219 // Add listeners if they haven't been added yet.
28220 if (!this.connected_) {
28221 this.connect_();
28222 }
28223 };
28224 ResizeObserverController.prototype.removeObserver = function (observer) {
28225 var observers = this.observers_;
28226 var index = observers.indexOf(observer);
28227 if (index > -1) {
28228 observers.splice(index, 1);
28229 }
28230 if (!observers.length && this.connected_) {
28231 this.disconnect_();
28232 }
28233 };
28234 ResizeObserverController.prototype.refresh = function () {
28235 var changesDetected = this.updateObservers_();
28236 if (changesDetected) {
28237 this.refresh();
28238 }
28239 };
28240 ResizeObserverController.prototype.updateObservers_ = function () {
28241 var activeObservers = this.observers_.filter(function (observer) {
28242 return observer.hasActive();
28243 });
28244 activeObservers.forEach(function (observer) {
28245 return observer.broadcastActive();
28246 });
28247 return activeObservers.length > 0;
28248 };
28249 ResizeObserverController.prototype.connect_ = function () {
28250 if (this.connected_) {
28251 return;
28252 }
28253 window.addEventListener("resize", this.refresh);
28254 document.addEventListener("DOMSubtreeModified", this.refresh);
28255 this.mutationEventsAdded_ = true;
28256 this.connected_ = true;
28257 };
28258 ResizeObserverController.prototype.disconnect_ = function () {
28259 if (!this.connected_) {
28260 return;
28261 }
28262 window.removeEventListener("resize", this.refresh);
28263 if (this.mutationsObserver_) {
28264 this.mutationsObserver_.disconnect();
28265 }
28266 if (this.mutationEventsAdded_) {
28267 document.removeEventListener("DOMSubtreeModified", this.refresh);
28268 }
28269 this.mutationsObserver_ = null;
28270 this.mutationEventsAdded_ = false;
28271 this.connected_ = false;
28272 };
28273 ResizeObserverController.getInstance = function () {
28274 if (!this.instance_) {
28275 this.instance_ = new ResizeObserverController();
28276 }
28277 return this.instance_;
28278 };
28279 ResizeObserverController.instance_ = null;
28280 return ResizeObserverController;
28281}());
28282var defineConfigurable = function (target, props) {
28283 for (var i = 0, list = Object.keys(props); i < list.length; i += 1) {
28284 var key = list[i];
28285 Object.defineProperty(target, key, {
28286 value: props[key],
28287 enumerable: false,
28288 writable: false,
28289 configurable: true
28290 });
28291 }
28292 return target;
28293};
28294var ResizeObservation = (function () {
28295 function ResizeObservation(target) {
28296 this.target = target;
28297 this.broadcastWidth = 0;
28298 this.broadcastHeight = 0;
28299 this.contentRect_ = null;
28300 this.contentRect_ = createRectInit(0, 0, 0, 0);
28301 }
28302 ResizeObservation.prototype.isActive = function () {
28303 var rect = getContentRect(this.target);
28304 this.contentRect_ = rect;
28305 return rect.width !== this.broadcastWidth || rect.height !== this.broadcastHeight;
28306 };
28307 ResizeObservation.prototype.broadcastRect = function () {
28308 var rect = this.contentRect_;
28309 this.broadcastWidth = rect.width;
28310 this.broadcastHeight = rect.height;
28311 return rect;
28312 };
28313 return ResizeObservation;
28314}());
28315var ResizeObserverSPI = (function () {
28316 function ResizeObserverSPI(callback, controller, callbackCtx) {
28317 this.observation = null;
28318 this.callback_ = null;
28319 this.controller_ = null;
28320 this.callbackCtx_ = null;
28321 this.observation = null;
28322 if (typeof callback !== "function") {
28323 throw new TypeError("The callback provided as parameter 1 is not a function.");
28324 }
28325 this.callback_ = callback;
28326 this.controller_ = controller;
28327 this.callbackCtx_ = callbackCtx;
28328 }
28329 ResizeObserverSPI.prototype.observe = function (target) {
28330 this.observation = new ResizeObservation(target);
28331 this.controller_.addObserver(this);
28332 // Force the update of observations.
28333 this.controller_.refresh();
28334 };
28335 ResizeObserverSPI.prototype.disconnect = function () {
28336 this.observation = null;
28337 this.controller_.removeObserver(this);
28338 };
28339 ResizeObserverSPI.prototype.broadcastActive = function () {
28340 if (!this.hasActive()) {
28341 return;
28342 }
28343 var ctx = this.callbackCtx_;
28344 this.callback_.call(ctx, {
28345 target: this.observation.target,
28346 contentRect: createReadOnlyRect(this.observation.broadcastRect())
28347 }, ctx);
28348 };
28349 ResizeObserverSPI.prototype.hasActive = function () {
28350 return this.observation.isActive();
28351 };
28352 return ResizeObserverSPI;
28353}());
28354var ResizeObserverFallback = (function () {
28355 function ResizeObserverFallback(callback) {
28356 var controller = ResizeObserverController.getInstance();
28357 var observer = new ResizeObserverSPI(callback, controller, this);
28358 this.observer_ = observer;
28359 }
28360 ResizeObserverFallback.prototype.observe = function (element) {
28361 this.observer_.observe(element);
28362 };
28363 ResizeObserverFallback.prototype.disconnect = function () {
28364 this.observer_.disconnect();
28365 };
28366 return ResizeObserverFallback;
28367}());
28368function observeResize(element, callback) {
28369 if (window.ResizeObserver) {
28370 var ro_1 = new window.ResizeObserver(function (entries, observer) {
28371 for (var _i = 0, entries_1 = entries; _i < entries_1.length; _i++) {
28372 var entry = entries_1[_i];
28373 callback(entry);
28374 }
28375 });
28376 ro_1.observe(element);
28377 return function unobserve() {
28378 ro_1.disconnect();
28379 };
28380 }
28381 else {
28382 var ro_2 = new ResizeObserverFallback(function (entry) {
28383 callback(entry);
28384 });
28385 ro_2.observe(element);
28386 return function unobserve() {
28387 ro_2.disconnect();
28388 };
28389 }
28390}
28391exports.observeResize = observeResize;
28392
28393
28394/***/ }),
28395/* 99 */
28396/***/ (function(module, exports, __webpack_require__) {
28397
28398"use strict";
28399/**
28400 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
28401 * @version v18.1.2
28402 * @link http://www.ag-grid.com/
28403 * @license MIT
28404 */
28405
28406var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
28407 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
28408 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
28409 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
28410 return c > 3 && r && Object.defineProperty(target, key, r), r;
28411};
28412var __metadata = (this && this.__metadata) || function (k, v) {
28413 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
28414};
28415Object.defineProperty(exports, "__esModule", { value: true });
28416var context_1 = __webpack_require__(0);
28417var gridCell_1 = __webpack_require__(25);
28418var constants_1 = __webpack_require__(9);
28419var mouseEventService_1 = __webpack_require__(46);
28420var paginationProxy_1 = __webpack_require__(31);
28421var focusedCellController_1 = __webpack_require__(24);
28422var utils_1 = __webpack_require__(1);
28423var animationFrameService_1 = __webpack_require__(39);
28424var columnController_1 = __webpack_require__(4);
28425var gridOptionsWrapper_1 = __webpack_require__(2);
28426var NavigationService = (function () {
28427 function NavigationService() {
28428 this.timeLastPageEventProcessed = 0;
28429 }
28430 NavigationService.prototype.init = function () {
28431 this.scrollWidth = this.gridOptionsWrapper.getScrollbarWidth();
28432 };
28433 NavigationService.prototype.registerGridComp = function (gridPanel) {
28434 this.gridPanel = gridPanel;
28435 };
28436 NavigationService.prototype.handlePageScrollingKey = function (event) {
28437 var key = event.which || event.keyCode;
28438 var alt = event.altKey;
28439 var ctrl = event.ctrlKey;
28440 var currentCell = this.mouseEventService.getGridCellForEvent(event).getGridCellDef();
28441 if (!currentCell) {
28442 return false;
28443 }
28444 var processed = false;
28445 switch (key) {
28446 case constants_1.Constants.KEY_PAGE_HOME:
28447 case constants_1.Constants.KEY_PAGE_END:
28448 // handle home and end when ctrl & alt are NOT pressed
28449 if (!ctrl && !alt) {
28450 this.onHomeOrEndKey(key);
28451 processed = true;
28452 }
28453 break;
28454 case constants_1.Constants.KEY_LEFT:
28455 case constants_1.Constants.KEY_RIGHT:
28456 // handle left and right when ctrl is pressed only
28457 if (ctrl && !alt) {
28458 this.onCtrlLeftOrRight(key, currentCell);
28459 processed = true;
28460 }
28461 break;
28462 case constants_1.Constants.KEY_UP:
28463 case constants_1.Constants.KEY_DOWN:
28464 // handle up and down when ctrl is pressed only
28465 if (ctrl && !alt) {
28466 this.onCtrlUpOrDown(key, currentCell);
28467 processed = true;
28468 }
28469 break;
28470 case constants_1.Constants.KEY_PAGE_DOWN:
28471 // handle page up and page down when ctrl & alt are NOT pressed
28472 if (!ctrl && !alt) {
28473 this.onPageDown(currentCell);
28474 processed = true;
28475 }
28476 break;
28477 case constants_1.Constants.KEY_PAGE_UP:
28478 // handle page up and page down when ctrl & alt are NOT pressed
28479 if (!ctrl && !alt) {
28480 this.onPageUp(currentCell);
28481 processed = true;
28482 }
28483 break;
28484 }
28485 if (processed) {
28486 event.preventDefault();
28487 }
28488 return processed;
28489 };
28490 // the page up/down keys caused a problem, in that if the user
28491 // held the page up/down key down, lots of events got generated,
28492 // which clogged up the event queue (as they take time to process)
28493 // which in turn froze the grid. Logic below makes sure we wait 100ms
28494 // between processing the page up/down events, so when user has finger
28495 // held down on key, we ignore page up/down events until 100ms has passed,
28496 // which effectively empties the queue of page up/down events.
28497 NavigationService.prototype.isTimeSinceLastPageEventToRecent = function () {
28498 var now = new Date().getTime();
28499 var diff = now - this.timeLastPageEventProcessed;
28500 return (diff < 100);
28501 };
28502 NavigationService.prototype.setTimeLastPageEventProcessed = function () {
28503 this.timeLastPageEventProcessed = new Date().getTime();
28504 };
28505 NavigationService.prototype.onPageDown = function (gridCell) {
28506 if (this.isTimeSinceLastPageEventToRecent()) {
28507 return;
28508 }
28509 var scrollPosition = this.gridPanel.getVScrollPosition();
28510 var pixelsInOnePage = scrollPosition.bottom - scrollPosition.top;
28511 if (this.gridPanel.isHorizontalScrollShowing()) {
28512 pixelsInOnePage -= this.scrollWidth;
28513 }
28514 var pagingPixelOffset = this.paginationProxy.getPixelOffset();
28515 var currentPageBottomPixel = scrollPosition.top + pixelsInOnePage;
28516 var currentPageBottomRow = this.paginationProxy.getRowIndexAtPixel(currentPageBottomPixel + pagingPixelOffset);
28517 var scrollIndex = currentPageBottomRow;
28518 var currentCellPixel = this.paginationProxy.getRow(gridCell.rowIndex).rowTop;
28519 var nextCellPixel = currentCellPixel + pixelsInOnePage - pagingPixelOffset;
28520 var focusIndex = this.paginationProxy.getRowIndexAtPixel(nextCellPixel + pagingPixelOffset);
28521 var pageLastRow = this.paginationProxy.getPageLastRow();
28522 if (focusIndex > pageLastRow) {
28523 focusIndex = pageLastRow;
28524 }
28525 if (scrollIndex > pageLastRow) {
28526 scrollIndex = pageLastRow;
28527 }
28528 this.navigateTo(scrollIndex, 'top', null, focusIndex, gridCell.column);
28529 this.setTimeLastPageEventProcessed();
28530 };
28531 NavigationService.prototype.onPageUp = function (gridCell) {
28532 if (this.isTimeSinceLastPageEventToRecent()) {
28533 return;
28534 }
28535 var scrollPosition = this.gridPanel.getVScrollPosition();
28536 var pixelsInOnePage = scrollPosition.bottom - scrollPosition.top;
28537 if (this.gridPanel.isHorizontalScrollShowing()) {
28538 pixelsInOnePage -= this.scrollWidth;
28539 }
28540 var pagingPixelOffset = this.paginationProxy.getPixelOffset();
28541 var currentPageTopPixel = scrollPosition.top;
28542 var currentPageTopRow = this.paginationProxy.getRowIndexAtPixel(currentPageTopPixel + pagingPixelOffset);
28543 var scrollIndex = currentPageTopRow;
28544 var currentRowNode = this.paginationProxy.getRow(gridCell.rowIndex);
28545 var nextCellPixel = currentRowNode.rowTop + currentRowNode.rowHeight - pixelsInOnePage - pagingPixelOffset;
28546 var focusIndex = this.paginationProxy.getRowIndexAtPixel(nextCellPixel + pagingPixelOffset);
28547 var firstRow = this.paginationProxy.getPageFirstRow();
28548 if (focusIndex < firstRow) {
28549 focusIndex = firstRow;
28550 }
28551 if (scrollIndex < firstRow) {
28552 scrollIndex = firstRow;
28553 }
28554 this.navigateTo(scrollIndex, 'bottom', null, focusIndex, gridCell.column);
28555 this.setTimeLastPageEventProcessed();
28556 };
28557 // common logic to navigate. takes parameters:
28558 // scrollIndex - what row to vertically scroll to
28559 // scrollType - what position to put scroll index ie top/bottom
28560 // scrollColumn - what column to horizontally scroll to
28561 // focusIndex / focusColumn - for page up / down, we want to scroll to one row/column, but focus another
28562 NavigationService.prototype.navigateTo = function (scrollIndex, scrollType, scrollColumn, focusIndex, focusColumn) {
28563 if (utils_1._.exists(scrollColumn)) {
28564 this.gridPanel.ensureColumnVisible(scrollColumn);
28565 }
28566 if (utils_1._.exists(scrollIndex)) {
28567 this.gridPanel.ensureIndexVisible(scrollIndex, scrollType);
28568 }
28569 // make sure the cell is rendered, needed if we are to focus
28570 this.animationFrameService.flushAllFrames();
28571 // if we don't do this, the range will be left on the last cell, which will leave the last focused cell
28572 // highlighted.
28573 this.focusedCellController.setFocusedCell(focusIndex, focusColumn, null, true);
28574 if (this.rangeController) {
28575 var gridCell = new gridCell_1.GridCell({ rowIndex: focusIndex, floating: null, column: focusColumn });
28576 this.rangeController.setRangeToCell(gridCell);
28577 }
28578 };
28579 // ctrl + up/down will bring focus to same column, first/last row. no horizontal scrolling.
28580 NavigationService.prototype.onCtrlUpOrDown = function (key, gridCell) {
28581 var upKey = key === constants_1.Constants.KEY_UP;
28582 var rowIndexToScrollTo = upKey ? 0 : this.paginationProxy.getPageLastRow();
28583 this.navigateTo(rowIndexToScrollTo, null, gridCell.column, rowIndexToScrollTo, gridCell.column);
28584 };
28585 // ctrl + left/right will bring focus to same row, first/last cell. no vertical scrolling.
28586 NavigationService.prototype.onCtrlLeftOrRight = function (key, gridCell) {
28587 var leftKey = key === constants_1.Constants.KEY_LEFT;
28588 var allColumns = this.columnController.getAllDisplayedColumns();
28589 var columnToSelect = leftKey ? allColumns[0] : allColumns[allColumns.length - 1];
28590 this.navigateTo(gridCell.rowIndex, null, columnToSelect, gridCell.rowIndex, columnToSelect);
28591 };
28592 // home brings focus to top left cell, end brings focus to bottom right, grid scrolled to bring
28593 // same cell into view (which means either scroll all the way up, or all the way down).
28594 NavigationService.prototype.onHomeOrEndKey = function (key) {
28595 var homeKey = key === constants_1.Constants.KEY_PAGE_HOME;
28596 var allColumns = this.columnController.getAllDisplayedColumns();
28597 var columnToSelect = homeKey ? allColumns[0] : allColumns[allColumns.length - 1];
28598 var rowIndexToScrollTo = homeKey ? 0 : this.paginationProxy.getPageLastRow();
28599 this.navigateTo(rowIndexToScrollTo, null, columnToSelect, rowIndexToScrollTo, columnToSelect);
28600 };
28601 __decorate([
28602 context_1.Autowired('mouseEventService'),
28603 __metadata("design:type", mouseEventService_1.MouseEventService)
28604 ], NavigationService.prototype, "mouseEventService", void 0);
28605 __decorate([
28606 context_1.Autowired('paginationProxy'),
28607 __metadata("design:type", paginationProxy_1.PaginationProxy)
28608 ], NavigationService.prototype, "paginationProxy", void 0);
28609 __decorate([
28610 context_1.Autowired('focusedCellController'),
28611 __metadata("design:type", focusedCellController_1.FocusedCellController)
28612 ], NavigationService.prototype, "focusedCellController", void 0);
28613 __decorate([
28614 context_1.Autowired('animationFrameService'),
28615 __metadata("design:type", animationFrameService_1.AnimationFrameService)
28616 ], NavigationService.prototype, "animationFrameService", void 0);
28617 __decorate([
28618 context_1.Optional('rangeController'),
28619 __metadata("design:type", Object)
28620 ], NavigationService.prototype, "rangeController", void 0);
28621 __decorate([
28622 context_1.Autowired('columnController'),
28623 __metadata("design:type", columnController_1.ColumnController)
28624 ], NavigationService.prototype, "columnController", void 0);
28625 __decorate([
28626 context_1.Autowired('gridOptionsWrapper'),
28627 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
28628 ], NavigationService.prototype, "gridOptionsWrapper", void 0);
28629 __decorate([
28630 context_1.PostConstruct,
28631 __metadata("design:type", Function),
28632 __metadata("design:paramtypes", []),
28633 __metadata("design:returntype", void 0)
28634 ], NavigationService.prototype, "init", null);
28635 NavigationService = __decorate([
28636 context_1.Bean('navigationService')
28637 ], NavigationService);
28638 return NavigationService;
28639}());
28640exports.NavigationService = NavigationService;
28641
28642
28643/***/ }),
28644/* 100 */
28645/***/ (function(module, exports, __webpack_require__) {
28646
28647"use strict";
28648/**
28649 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
28650 * @version v18.1.2
28651 * @link http://www.ag-grid.com/
28652 * @license MIT
28653 */
28654
28655var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
28656 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
28657 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
28658 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
28659 return c > 3 && r && Object.defineProperty(target, key, r), r;
28660};
28661var __metadata = (this && this.__metadata) || function (k, v) {
28662 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
28663};
28664Object.defineProperty(exports, "__esModule", { value: true });
28665var utils_1 = __webpack_require__(1);
28666var gridOptionsWrapper_1 = __webpack_require__(2);
28667var context_1 = __webpack_require__(0);
28668var dragAndDropService_1 = __webpack_require__(16);
28669var columnController_1 = __webpack_require__(4);
28670var eventService_1 = __webpack_require__(3);
28671var events_1 = __webpack_require__(5);
28672var headerRowComp_1 = __webpack_require__(101);
28673var bodyDropTarget_1 = __webpack_require__(103);
28674var column_1 = __webpack_require__(10);
28675var scrollVisibleService_1 = __webpack_require__(38);
28676var HeaderContainer = (function () {
28677 function HeaderContainer(eContainer, eViewport, pinned) {
28678 this.headerRowComps = [];
28679 this.eContainer = eContainer;
28680 this.pinned = pinned;
28681 this.eViewport = eViewport;
28682 }
28683 HeaderContainer.prototype.registerGridComp = function (gridPanel) {
28684 this.setupDragAndDrop(gridPanel);
28685 };
28686 HeaderContainer.prototype.forEachHeaderElement = function (callback) {
28687 this.headerRowComps.forEach(function (headerRowComp) { return headerRowComp.forEachHeaderElement(callback); });
28688 };
28689 HeaderContainer.prototype.init = function () {
28690 this.scrollWidth = this.gridOptionsWrapper.getScrollbarWidth();
28691 // if value changes, then if not pivoting, we at least need to change the label eg from sum() to avg(),
28692 // if pivoting, then the columns have changed
28693 this.eventService.addEventListener(events_1.Events.EVENT_COLUMN_VALUE_CHANGED, this.onColumnValueChanged.bind(this));
28694 this.eventService.addEventListener(events_1.Events.EVENT_COLUMN_ROW_GROUP_CHANGED, this.onColumnRowGroupChanged.bind(this));
28695 this.eventService.addEventListener(events_1.Events.EVENT_GRID_COLUMNS_CHANGED, this.onGridColumnsChanged.bind(this));
28696 this.eventService.addEventListener(events_1.Events.EVENT_SCROLL_VISIBILITY_CHANGED, this.onScrollVisibilityChanged.bind(this));
28697 this.eventService.addEventListener(events_1.Events.EVENT_COLUMN_RESIZED, this.onColumnResized.bind(this));
28698 this.eventService.addEventListener(events_1.Events.EVENT_DISPLAYED_COLUMNS_CHANGED, this.onDisplayedColumnsChanged.bind(this));
28699 };
28700 // if row group changes, that means we may need to add aggFunc's to the column headers,
28701 // if the grid goes from no aggregation (ie no grouping) to grouping
28702 HeaderContainer.prototype.onColumnRowGroupChanged = function () {
28703 this.onGridColumnsChanged();
28704 };
28705 // if the agg func of a column changes, then we may need to update the agg func in columns header
28706 HeaderContainer.prototype.onColumnValueChanged = function () {
28707 this.onGridColumnsChanged();
28708 };
28709 HeaderContainer.prototype.onColumnResized = function () {
28710 this.setWidthOfPinnedContainer();
28711 };
28712 HeaderContainer.prototype.onDisplayedColumnsChanged = function () {
28713 this.setWidthOfPinnedContainer();
28714 };
28715 HeaderContainer.prototype.onScrollVisibilityChanged = function () {
28716 this.setWidthOfPinnedContainer();
28717 };
28718 HeaderContainer.prototype.setWidthOfPinnedContainer = function () {
28719 var pinningLeft = this.pinned === column_1.Column.PINNED_LEFT;
28720 var pinningRight = this.pinned === column_1.Column.PINNED_RIGHT;
28721 if (pinningLeft || pinningRight) {
28722 // size to fit all columns
28723 var width = pinningLeft ?
28724 this.columnController.getPinnedLeftContainerWidth()
28725 : this.columnController.getPinnedRightContainerWidth();
28726 // if there is a scroll showing (and taking up space, so Windows, and not iOS)
28727 // in the body, then we add extra space to keep header aligned with the body,
28728 // as body width fits the cols and the scrollbar
28729 var addPaddingForScrollbar = pinningLeft ?
28730 this.scrollVisibleService.isLeftVerticalScrollShowing()
28731 : this.scrollVisibleService.isRightVerticalScrollShowing();
28732 if (addPaddingForScrollbar) {
28733 width += this.scrollWidth;
28734 }
28735 this.eContainer.style.width = width + 'px';
28736 }
28737 };
28738 HeaderContainer.prototype.destroy = function () {
28739 this.removeHeaderRowComps();
28740 };
28741 // grid cols have changed - this also means the number of rows in the header can have
28742 // changed. so we remove all the old rows and insert new ones for a complete refresh
28743 HeaderContainer.prototype.onGridColumnsChanged = function () {
28744 this.removeHeaderRowComps();
28745 this.createHeaderRowComps();
28746 };
28747 // we expose this for gridOptions.api.refreshHeader() to call
28748 HeaderContainer.prototype.refresh = function () {
28749 this.onGridColumnsChanged();
28750 };
28751 HeaderContainer.prototype.setupDragAndDrop = function (gridComp) {
28752 var dropContainer = this.eViewport ? this.eViewport : this.eContainer;
28753 var bodyDropTarget = new bodyDropTarget_1.BodyDropTarget(this.pinned, dropContainer);
28754 this.context.wireBean(bodyDropTarget);
28755 bodyDropTarget.registerGridComp(gridComp);
28756 };
28757 HeaderContainer.prototype.removeHeaderRowComps = function () {
28758 this.headerRowComps.forEach(function (headerRowComp) {
28759 headerRowComp.destroy();
28760 });
28761 this.headerRowComps.length = 0;
28762 utils_1.Utils.removeAllChildren(this.eContainer);
28763 };
28764 HeaderContainer.prototype.createHeaderRowComps = function () {
28765 // if we are displaying header groups, then we have many rows here.
28766 // go through each row of the header, one by one.
28767 var rowCount = this.columnController.getHeaderRowCount();
28768 for (var dept = 0; dept < rowCount; dept++) {
28769 var groupRow = dept !== (rowCount - 1);
28770 var type = groupRow ? headerRowComp_1.HeaderRowType.COLUMN_GROUP : headerRowComp_1.HeaderRowType.COLUMN;
28771 var headerRowComp = new headerRowComp_1.HeaderRowComp(dept, type, this.pinned, this.dropTarget);
28772 this.context.wireBean(headerRowComp);
28773 this.headerRowComps.push(headerRowComp);
28774 this.eContainer.appendChild(headerRowComp.getGui());
28775 }
28776 var includeFloatingFilterRow = this.gridOptionsWrapper.isFloatingFilter() && !this.columnController.isPivotMode();
28777 if (includeFloatingFilterRow) {
28778 var headerRowComp = new headerRowComp_1.HeaderRowComp(rowCount, headerRowComp_1.HeaderRowType.FLOATING_FILTER, this.pinned, this.dropTarget);
28779 this.context.wireBean(headerRowComp);
28780 this.headerRowComps.push(headerRowComp);
28781 this.eContainer.appendChild(headerRowComp.getGui());
28782 }
28783 };
28784 __decorate([
28785 context_1.Autowired('gridOptionsWrapper'),
28786 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
28787 ], HeaderContainer.prototype, "gridOptionsWrapper", void 0);
28788 __decorate([
28789 context_1.Autowired('context'),
28790 __metadata("design:type", context_1.Context)
28791 ], HeaderContainer.prototype, "context", void 0);
28792 __decorate([
28793 context_1.Autowired('$scope'),
28794 __metadata("design:type", Object)
28795 ], HeaderContainer.prototype, "$scope", void 0);
28796 __decorate([
28797 context_1.Autowired('dragAndDropService'),
28798 __metadata("design:type", dragAndDropService_1.DragAndDropService)
28799 ], HeaderContainer.prototype, "dragAndDropService", void 0);
28800 __decorate([
28801 context_1.Autowired('columnController'),
28802 __metadata("design:type", columnController_1.ColumnController)
28803 ], HeaderContainer.prototype, "columnController", void 0);
28804 __decorate([
28805 context_1.Autowired('eventService'),
28806 __metadata("design:type", eventService_1.EventService)
28807 ], HeaderContainer.prototype, "eventService", void 0);
28808 __decorate([
28809 context_1.Autowired('scrollVisibleService'),
28810 __metadata("design:type", scrollVisibleService_1.ScrollVisibleService)
28811 ], HeaderContainer.prototype, "scrollVisibleService", void 0);
28812 __decorate([
28813 context_1.PostConstruct,
28814 __metadata("design:type", Function),
28815 __metadata("design:paramtypes", []),
28816 __metadata("design:returntype", void 0)
28817 ], HeaderContainer.prototype, "init", null);
28818 return HeaderContainer;
28819}());
28820exports.HeaderContainer = HeaderContainer;
28821
28822
28823/***/ }),
28824/* 101 */
28825/***/ (function(module, exports, __webpack_require__) {
28826
28827"use strict";
28828/**
28829 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
28830 * @version v18.1.2
28831 * @link http://www.ag-grid.com/
28832 * @license MIT
28833 */
28834
28835var __extends = (this && this.__extends) || (function () {
28836 var extendStatics = Object.setPrototypeOf ||
28837 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
28838 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
28839 return function (d, b) {
28840 extendStatics(d, b);
28841 function __() { this.constructor = d; }
28842 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
28843 };
28844})();
28845var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
28846 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
28847 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
28848 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
28849 return c > 3 && r && Object.defineProperty(target, key, r), r;
28850};
28851var __metadata = (this && this.__metadata) || function (k, v) {
28852 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
28853};
28854Object.defineProperty(exports, "__esModule", { value: true });
28855var component_1 = __webpack_require__(8);
28856var context_1 = __webpack_require__(0);
28857var gridOptionsWrapper_1 = __webpack_require__(2);
28858var columnController_1 = __webpack_require__(4);
28859var column_1 = __webpack_require__(10);
28860var eventService_1 = __webpack_require__(3);
28861var events_1 = __webpack_require__(5);
28862var utils_1 = __webpack_require__(1);
28863var headerWrapperComp_1 = __webpack_require__(102);
28864var headerGroupWrapperComp_1 = __webpack_require__(136);
28865var filterManager_1 = __webpack_require__(20);
28866var componentRecipes_1 = __webpack_require__(23);
28867var gridApi_1 = __webpack_require__(6);
28868var HeaderRowType;
28869(function (HeaderRowType) {
28870 HeaderRowType[HeaderRowType["COLUMN_GROUP"] = 0] = "COLUMN_GROUP";
28871 HeaderRowType[HeaderRowType["COLUMN"] = 1] = "COLUMN";
28872 HeaderRowType[HeaderRowType["FLOATING_FILTER"] = 2] = "FLOATING_FILTER";
28873})(HeaderRowType = exports.HeaderRowType || (exports.HeaderRowType = {}));
28874var HeaderRowComp = (function (_super) {
28875 __extends(HeaderRowComp, _super);
28876 function HeaderRowComp(dept, type, pinned, dropTarget) {
28877 var _this = _super.call(this, "<div class=\"ag-header-row\" role=\"presentation\"/>") || this;
28878 _this.headerComps = {};
28879 _this.dept = dept;
28880 _this.type = type;
28881 _this.pinned = pinned;
28882 _this.dropTarget = dropTarget;
28883 return _this;
28884 }
28885 HeaderRowComp.prototype.forEachHeaderElement = function (callback) {
28886 var _this = this;
28887 Object.keys(this.headerComps).forEach(function (key) {
28888 callback(_this.headerComps[key]);
28889 });
28890 };
28891 HeaderRowComp.prototype.destroy = function () {
28892 var idsOfAllChildren = Object.keys(this.headerComps);
28893 this.removeAndDestroyChildComponents(idsOfAllChildren);
28894 _super.prototype.destroy.call(this);
28895 };
28896 HeaderRowComp.prototype.removeAndDestroyChildComponents = function (idsToDestroy) {
28897 var _this = this;
28898 idsToDestroy.forEach(function (id) {
28899 var childHeaderComp = _this.headerComps[id];
28900 _this.getGui().removeChild(childHeaderComp.getGui());
28901 if (childHeaderComp.destroy) {
28902 childHeaderComp.destroy();
28903 }
28904 delete _this.headerComps[id];
28905 });
28906 };
28907 HeaderRowComp.prototype.onRowHeightChanged = function () {
28908 var headerRowCount = this.columnController.getHeaderRowCount();
28909 var sizes = [];
28910 var numberOfFloating = 0;
28911 var groupHeight;
28912 var headerHeight;
28913 if (!this.columnController.isPivotMode()) {
28914 if (this.gridOptionsWrapper.isFloatingFilter()) {
28915 headerRowCount++;
28916 }
28917 numberOfFloating = (this.gridOptionsWrapper.isFloatingFilter()) ? 1 : 0;
28918 groupHeight = this.gridOptionsWrapper.getGroupHeaderHeight();
28919 headerHeight = this.gridOptionsWrapper.getHeaderHeight();
28920 }
28921 else {
28922 numberOfFloating = 0;
28923 groupHeight = this.gridOptionsWrapper.getPivotGroupHeaderHeight();
28924 headerHeight = this.gridOptionsWrapper.getPivotHeaderHeight();
28925 }
28926 var numberOfNonGroups = 1 + numberOfFloating;
28927 var numberOfGroups = headerRowCount - numberOfNonGroups;
28928 for (var i = 0; i < numberOfGroups; i++) {
28929 sizes.push(groupHeight);
28930 }
28931 sizes.push(headerHeight);
28932 for (var i = 0; i < numberOfFloating; i++) {
28933 sizes.push(this.gridOptionsWrapper.getFloatingFiltersHeight());
28934 }
28935 var rowHeight = 0;
28936 for (var i = 0; i < this.dept; i++) {
28937 rowHeight += sizes[i];
28938 }
28939 this.getGui().style.top = rowHeight + 'px';
28940 this.getGui().style.height = sizes[this.dept] + 'px';
28941 };
28942 //noinspection JSUnusedLocalSymbols
28943 HeaderRowComp.prototype.init = function () {
28944 this.onRowHeightChanged();
28945 this.onVirtualColumnsChanged();
28946 this.setWidth();
28947 this.addDestroyableEventListener(this.gridOptionsWrapper, gridOptionsWrapper_1.GridOptionsWrapper.PROP_HEADER_HEIGHT, this.onRowHeightChanged.bind(this));
28948 this.addDestroyableEventListener(this.gridOptionsWrapper, gridOptionsWrapper_1.GridOptionsWrapper.PROP_PIVOT_HEADER_HEIGHT, this.onRowHeightChanged.bind(this));
28949 this.addDestroyableEventListener(this.gridOptionsWrapper, gridOptionsWrapper_1.GridOptionsWrapper.PROP_GROUP_HEADER_HEIGHT, this.onRowHeightChanged.bind(this));
28950 this.addDestroyableEventListener(this.gridOptionsWrapper, gridOptionsWrapper_1.GridOptionsWrapper.PROP_PIVOT_GROUP_HEADER_HEIGHT, this.onRowHeightChanged.bind(this));
28951 this.addDestroyableEventListener(this.gridOptionsWrapper, gridOptionsWrapper_1.GridOptionsWrapper.PROP_FLOATING_FILTERS_HEIGHT, this.onRowHeightChanged.bind(this));
28952 this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_VIRTUAL_COLUMNS_CHANGED, this.onVirtualColumnsChanged.bind(this));
28953 this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_DISPLAYED_COLUMNS_CHANGED, this.onDisplayedColumnsChanged.bind(this));
28954 this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_COLUMN_RESIZED, this.onColumnResized.bind(this));
28955 this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_GRID_COLUMNS_CHANGED, this.onGridColumnsChanged.bind(this));
28956 };
28957 HeaderRowComp.prototype.onColumnResized = function () {
28958 this.setWidth();
28959 };
28960 HeaderRowComp.prototype.setWidth = function () {
28961 var mainRowWidth = this.columnController.getContainerWidth(this.pinned) + 'px';
28962 this.getGui().style.width = mainRowWidth;
28963 };
28964 HeaderRowComp.prototype.onGridColumnsChanged = function () {
28965 this.removeAndDestroyAllChildComponents();
28966 };
28967 HeaderRowComp.prototype.removeAndDestroyAllChildComponents = function () {
28968 var idsOfAllChildren = Object.keys(this.headerComps);
28969 this.removeAndDestroyChildComponents(idsOfAllChildren);
28970 };
28971 HeaderRowComp.prototype.onDisplayedColumnsChanged = function () {
28972 this.onVirtualColumnsChanged();
28973 this.setWidth();
28974 };
28975 HeaderRowComp.prototype.onVirtualColumnsChanged = function () {
28976 var _this = this;
28977 var currentChildIds = Object.keys(this.headerComps);
28978 var itemsAtDepth = this.columnController.getVirtualHeaderGroupRow(this.pinned, this.type == HeaderRowType.FLOATING_FILTER ?
28979 this.dept - 1 :
28980 this.dept);
28981 var ensureDomOrder = this.gridOptionsWrapper.isEnsureDomOrder();
28982 var eBefore;
28983 itemsAtDepth.forEach(function (child) {
28984 // skip groups that have no displayed children. this can happen when the group is broken,
28985 // and this section happens to have nothing to display for the open / closed state.
28986 // (a broken group is one that is split, ie columns in the group have a non-group column
28987 // in between them)
28988 if (child.isEmptyGroup()) {
28989 return;
28990 }
28991 var idOfChild = child.getUniqueId();
28992 var eParentContainer = _this.getGui();
28993 // if we already have this cell rendered, do nothing
28994 var colAlreadyInDom = currentChildIds.indexOf(idOfChild) >= 0;
28995 var headerComp;
28996 var eHeaderCompGui;
28997 if (colAlreadyInDom) {
28998 utils_1.Utils.removeFromArray(currentChildIds, idOfChild);
28999 headerComp = _this.headerComps[idOfChild];
29000 eHeaderCompGui = headerComp.getGui();
29001 if (ensureDomOrder) {
29002 utils_1.Utils.ensureDomOrder(eParentContainer, eHeaderCompGui, eBefore);
29003 }
29004 eBefore = eHeaderCompGui;
29005 }
29006 else {
29007 headerComp = _this.createHeaderComp(child);
29008 _this.headerComps[idOfChild] = headerComp;
29009 eHeaderCompGui = headerComp.getGui();
29010 if (ensureDomOrder) {
29011 utils_1.Utils.insertWithDomOrder(eParentContainer, eHeaderCompGui, eBefore);
29012 }
29013 else {
29014 eParentContainer.appendChild(eHeaderCompGui);
29015 }
29016 eBefore = eHeaderCompGui;
29017 }
29018 });
29019 // at this point, anything left in currentChildIds is an element that is no longer in the viewport
29020 this.removeAndDestroyChildComponents(currentChildIds);
29021 };
29022 HeaderRowComp.prototype.createHeaderComp = function (columnGroupChild) {
29023 var result;
29024 switch (this.type) {
29025 case HeaderRowType.COLUMN:
29026 result = new headerWrapperComp_1.HeaderWrapperComp(columnGroupChild, this.dropTarget, this.pinned);
29027 break;
29028 case HeaderRowType.COLUMN_GROUP:
29029 result = new headerGroupWrapperComp_1.HeaderGroupWrapperComp(columnGroupChild, this.dropTarget, this.pinned);
29030 break;
29031 case HeaderRowType.FLOATING_FILTER:
29032 var column = columnGroupChild;
29033 result = this.createFloatingFilterWrapper(column);
29034 break;
29035 }
29036 this.context.wireBean(result);
29037 return result;
29038 };
29039 HeaderRowComp.prototype.createFloatingFilterWrapper = function (column) {
29040 var _this = this;
29041 var floatingFilterParams = this.createFloatingFilterParams(column);
29042 var floatingFilterWrapper = this.componentRecipes.newFloatingFilterWrapperComponent(column, floatingFilterParams);
29043 this.addDestroyableEventListener(column, column_1.Column.EVENT_FILTER_CHANGED, function () {
29044 var filterComponentPromise = _this.filterManager.getFilterComponent(column);
29045 floatingFilterWrapper.onParentModelChanged(filterComponentPromise.resolveNow(null, function (filter) { return filter.getModel(); }));
29046 });
29047 var cachedFilter = this.filterManager.cachedFilter(column);
29048 if (cachedFilter) {
29049 var filterComponentPromise = this.filterManager.getFilterComponent(column);
29050 floatingFilterWrapper.onParentModelChanged(filterComponentPromise.resolveNow(null, function (filter) { return filter.getModel(); }));
29051 }
29052 return floatingFilterWrapper;
29053 };
29054 HeaderRowComp.prototype.createFloatingFilterParams = function (column) {
29055 var _this = this;
29056 // We always get the freshest reference to the baseFilter because the filters get sometimes created
29057 // and destroyed between calls
29058 //
29059 // let filterComponent:BaseFilter<any, any, any> = <any>this.filterManager.getFilterComponent(column);
29060 //
29061 var baseParams = {
29062 api: this.gridApi,
29063 column: column,
29064 currentParentModel: function () {
29065 var filterComponentPromise = _this.filterManager.getFilterComponent(column);
29066 var wholeParentFilter = filterComponentPromise.resolveNow(null, function (filter) {
29067 return (filter.getNullableModel) ?
29068 filter.getNullableModel() :
29069 filter.getModel();
29070 });
29071 return wholeParentFilter.operator != null ? wholeParentFilter.condition1 : wholeParentFilter;
29072 },
29073 onFloatingFilterChanged: function (change) {
29074 var captureModelChangedResolveFunc;
29075 var modelChanged = new utils_1.Promise(function (resolve) {
29076 captureModelChangedResolveFunc = resolve;
29077 });
29078 var filterComponentPromise = _this.filterManager.getFilterComponent(column);
29079 filterComponentPromise.then(function (filterComponent) {
29080 if (filterComponent.onFloatingFilterChanged) {
29081 //If going through this branch of code the user MUST
29082 //be passing an object of type change that contains
29083 //a model propery inside and some other stuff
29084 var result = filterComponent.onFloatingFilterChanged(change);
29085 captureModelChangedResolveFunc(result);
29086 }
29087 else {
29088 //If going through this branch of code the user MUST
29089 //be passing the plain model and delegating to ag-Grid
29090 //the responsibility to set the parent model and refresh
29091 //the filters
29092 filterComponent.setModel(change);
29093 _this.filterManager.onFilterChanged();
29094 captureModelChangedResolveFunc(true);
29095 }
29096 });
29097 return modelChanged.resolveNow(true, function (modelChanged) { return modelChanged; });
29098 },
29099 //This one might be overriden from the colDef
29100 suppressFilterButton: false
29101 };
29102 return baseParams;
29103 };
29104 __decorate([
29105 context_1.Autowired('gridOptionsWrapper'),
29106 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
29107 ], HeaderRowComp.prototype, "gridOptionsWrapper", void 0);
29108 __decorate([
29109 context_1.Autowired('gridApi'),
29110 __metadata("design:type", gridApi_1.GridApi)
29111 ], HeaderRowComp.prototype, "gridApi", void 0);
29112 __decorate([
29113 context_1.Autowired('columnController'),
29114 __metadata("design:type", columnController_1.ColumnController)
29115 ], HeaderRowComp.prototype, "columnController", void 0);
29116 __decorate([
29117 context_1.Autowired('context'),
29118 __metadata("design:type", context_1.Context)
29119 ], HeaderRowComp.prototype, "context", void 0);
29120 __decorate([
29121 context_1.Autowired('eventService'),
29122 __metadata("design:type", eventService_1.EventService)
29123 ], HeaderRowComp.prototype, "eventService", void 0);
29124 __decorate([
29125 context_1.Autowired('filterManager'),
29126 __metadata("design:type", filterManager_1.FilterManager)
29127 ], HeaderRowComp.prototype, "filterManager", void 0);
29128 __decorate([
29129 context_1.Autowired('componentRecipes'),
29130 __metadata("design:type", componentRecipes_1.ComponentRecipes)
29131 ], HeaderRowComp.prototype, "componentRecipes", void 0);
29132 __decorate([
29133 context_1.PostConstruct,
29134 __metadata("design:type", Function),
29135 __metadata("design:paramtypes", []),
29136 __metadata("design:returntype", void 0)
29137 ], HeaderRowComp.prototype, "init", null);
29138 return HeaderRowComp;
29139}(component_1.Component));
29140exports.HeaderRowComp = HeaderRowComp;
29141
29142
29143/***/ }),
29144/* 102 */
29145/***/ (function(module, exports, __webpack_require__) {
29146
29147"use strict";
29148/**
29149 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
29150 * @version v18.1.2
29151 * @link http://www.ag-grid.com/
29152 * @license MIT
29153 */
29154
29155var __extends = (this && this.__extends) || (function () {
29156 var extendStatics = Object.setPrototypeOf ||
29157 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
29158 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
29159 return function (d, b) {
29160 extendStatics(d, b);
29161 function __() { this.constructor = d; }
29162 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
29163 };
29164})();
29165var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
29166 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
29167 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
29168 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
29169 return c > 3 && r && Object.defineProperty(target, key, r), r;
29170};
29171var __metadata = (this && this.__metadata) || function (k, v) {
29172 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
29173};
29174Object.defineProperty(exports, "__esModule", { value: true });
29175var component_1 = __webpack_require__(8);
29176var context_1 = __webpack_require__(0);
29177var column_1 = __webpack_require__(10);
29178var utils_1 = __webpack_require__(1);
29179var dragAndDropService_1 = __webpack_require__(16);
29180var columnApi_1 = __webpack_require__(7);
29181var columnController_1 = __webpack_require__(4);
29182var horizontalResizeService_1 = __webpack_require__(61);
29183var gridOptionsWrapper_1 = __webpack_require__(2);
29184var cssClassApplier_1 = __webpack_require__(83);
29185var setLeftFeature_1 = __webpack_require__(54);
29186var gridApi_1 = __webpack_require__(6);
29187var sortController_1 = __webpack_require__(26);
29188var eventService_1 = __webpack_require__(3);
29189var componentRecipes_1 = __webpack_require__(23);
29190var agCheckbox_1 = __webpack_require__(62);
29191var componentAnnotations_1 = __webpack_require__(11);
29192var selectAllFeature_1 = __webpack_require__(135);
29193var events_1 = __webpack_require__(5);
29194var columnHoverService_1 = __webpack_require__(47);
29195var beans_1 = __webpack_require__(30);
29196var hoverFeature_1 = __webpack_require__(76);
29197var touchListener_1 = __webpack_require__(48);
29198var HeaderWrapperComp = (function (_super) {
29199 __extends(HeaderWrapperComp, _super);
29200 function HeaderWrapperComp(column, dragSourceDropTarget, pinned) {
29201 var _this = _super.call(this, HeaderWrapperComp.TEMPLATE) || this;
29202 _this.column = column;
29203 _this.dragSourceDropTarget = dragSourceDropTarget;
29204 _this.pinned = pinned;
29205 return _this;
29206 }
29207 HeaderWrapperComp.prototype.getColumn = function () {
29208 return this.column;
29209 };
29210 HeaderWrapperComp.prototype.init = function () {
29211 this.instantiate(this.context);
29212 var displayName = this.columnController.getDisplayNameForColumn(this.column, 'header', true);
29213 var enableSorting = this.gridOptionsWrapper.isEnableSorting() && !this.column.getColDef().suppressSorting;
29214 var enableMenu = this.menuFactory.isMenuEnabled(this.column) && !this.column.getColDef().suppressMenu;
29215 this.appendHeaderComp(displayName, enableSorting, enableMenu);
29216 this.setupWidth();
29217 this.setupMovingCss();
29218 this.setupTooltip();
29219 this.setupResize();
29220 this.setupMenuClass();
29221 this.setupSortableClass(enableSorting);
29222 this.addColumnHoverListener();
29223 this.addFeature(this.context, new hoverFeature_1.HoverFeature([this.column], this.getGui()));
29224 this.addDestroyableEventListener(this.column, column_1.Column.EVENT_FILTER_ACTIVE_CHANGED, this.onFilterChanged.bind(this));
29225 this.onFilterChanged();
29226 this.addFeature(this.context, new selectAllFeature_1.SelectAllFeature(this.cbSelectAll, this.column));
29227 var setLeftFeature = new setLeftFeature_1.SetLeftFeature(this.column, this.getGui(), this.beans);
29228 setLeftFeature.init();
29229 this.addDestroyFunc(setLeftFeature.destroy.bind(setLeftFeature));
29230 this.addAttributes();
29231 cssClassApplier_1.CssClassApplier.addHeaderClassesFromColDef(this.column.getColDef(), this.getGui(), this.gridOptionsWrapper, this.column, null);
29232 };
29233 HeaderWrapperComp.prototype.addColumnHoverListener = function () {
29234 this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_COLUMN_HOVER_CHANGED, this.onColumnHover.bind(this));
29235 this.onColumnHover();
29236 };
29237 HeaderWrapperComp.prototype.onColumnHover = function () {
29238 var isHovered = this.columnHoverService.isHovered(this.column);
29239 utils_1.Utils.addOrRemoveCssClass(this.getGui(), 'ag-column-hover', isHovered);
29240 };
29241 HeaderWrapperComp.prototype.setupSortableClass = function (enableSorting) {
29242 if (enableSorting) {
29243 var element = this.getGui();
29244 utils_1.Utils.addCssClass(element, 'ag-header-cell-sortable');
29245 }
29246 };
29247 HeaderWrapperComp.prototype.onFilterChanged = function () {
29248 var filterPresent = this.column.isFilterActive();
29249 utils_1.Utils.addOrRemoveCssClass(this.getGui(), 'ag-header-cell-filtered', filterPresent);
29250 };
29251 HeaderWrapperComp.prototype.appendHeaderComp = function (displayName, enableSorting, enableMenu) {
29252 var _this = this;
29253 var params = {
29254 column: this.column,
29255 displayName: displayName,
29256 enableSorting: enableSorting,
29257 enableMenu: enableMenu,
29258 showColumnMenu: function (source) {
29259 _this.gridApi.showColumnMenuAfterButtonClick(_this.column, source);
29260 },
29261 progressSort: function (multiSort) {
29262 _this.sortController.progressSort(_this.column, !!multiSort, "uiColumnSorted");
29263 },
29264 setSort: function (sort, multiSort) {
29265 _this.sortController.setSortForColumn(_this.column, sort, !!multiSort, "uiColumnSorted");
29266 },
29267 api: this.gridApi,
29268 columnApi: this.columnApi,
29269 context: this.gridOptionsWrapper.getContext()
29270 };
29271 var callback = this.afterHeaderCompCreated.bind(this, displayName);
29272 this.componentRecipes.newHeaderComponent(params).then(callback);
29273 };
29274 HeaderWrapperComp.prototype.afterHeaderCompCreated = function (displayName, headerComp) {
29275 this.appendChild(headerComp);
29276 this.setupMove(headerComp.getGui(), displayName);
29277 if (headerComp.destroy) {
29278 this.addDestroyFunc(headerComp.destroy.bind(headerComp));
29279 }
29280 };
29281 HeaderWrapperComp.prototype.onColumnMovingChanged = function () {
29282 // this function adds or removes the moving css, based on if the col is moving.
29283 // this is what makes the header go dark when it is been moved (gives impression to
29284 // user that the column was picked up).
29285 if (this.column.isMoving()) {
29286 utils_1.Utils.addCssClass(this.getGui(), 'ag-header-cell-moving');
29287 }
29288 else {
29289 utils_1.Utils.removeCssClass(this.getGui(), 'ag-header-cell-moving');
29290 }
29291 };
29292 HeaderWrapperComp.prototype.setupMove = function (eHeaderCellLabel, displayName) {
29293 var _this = this;
29294 var suppressMove = this.gridOptionsWrapper.isSuppressMovableColumns()
29295 || this.column.getColDef().suppressMovable
29296 || this.column.isLockPosition();
29297 if (suppressMove) {
29298 return;
29299 }
29300 if (eHeaderCellLabel) {
29301 var dragSource_1 = {
29302 type: dragAndDropService_1.DragSourceType.HeaderCell,
29303 eElement: eHeaderCellLabel,
29304 dragItemCallback: function () { return _this.createDragItem(); },
29305 dragItemName: displayName,
29306 dragSourceDropTarget: this.dragSourceDropTarget,
29307 dragStarted: function () { return _this.column.setMoving(true, "uiColumnMoved"); },
29308 dragStopped: function () { return _this.column.setMoving(false, "uiColumnMoved"); }
29309 };
29310 this.dragAndDropService.addDragSource(dragSource_1, true);
29311 this.addDestroyFunc(function () { return _this.dragAndDropService.removeDragSource(dragSource_1); });
29312 }
29313 };
29314 HeaderWrapperComp.prototype.createDragItem = function () {
29315 var visibleState = {};
29316 visibleState[this.column.getId()] = this.column.isVisible();
29317 return {
29318 columns: [this.column],
29319 visibleState: visibleState
29320 };
29321 };
29322 HeaderWrapperComp.prototype.setupResize = function () {
29323 var _this = this;
29324 var colDef = this.column.getColDef();
29325 // if no eResize in template, do nothing
29326 if (!this.eResize) {
29327 return;
29328 }
29329 if (!this.column.isResizable()) {
29330 utils_1.Utils.removeFromParent(this.eResize);
29331 return;
29332 }
29333 var finishedWithResizeFunc = this.horizontalResizeService.addResizeBar({
29334 eResizeBar: this.eResize,
29335 onResizeStart: this.onResizeStart.bind(this),
29336 onResizing: this.onResizing.bind(this, false),
29337 onResizeEnd: this.onResizing.bind(this, true)
29338 });
29339 this.addDestroyFunc(finishedWithResizeFunc);
29340 var weWantAutoSize = !this.gridOptionsWrapper.isSuppressAutoSize() && !colDef.suppressAutoSize;
29341 if (weWantAutoSize) {
29342 this.addDestroyableEventListener(this.eResize, 'dblclick', function () {
29343 _this.columnController.autoSizeColumn(_this.column, "uiColumnResized");
29344 });
29345 var touchListener = new touchListener_1.TouchListener(this.eResize);
29346 this.addDestroyableEventListener(touchListener, touchListener_1.TouchListener.EVENT_DOUBLE_TAP, function () {
29347 _this.columnController.autoSizeColumn(_this.column, "uiColumnResized");
29348 });
29349 this.addDestroyFunc(touchListener.destroy.bind(touchListener));
29350 }
29351 };
29352 HeaderWrapperComp.prototype.onResizing = function (finished, resizeAmount) {
29353 var resizeAmountNormalised = this.normaliseResizeAmount(resizeAmount);
29354 var newWidth = this.resizeStartWidth + resizeAmountNormalised;
29355 this.columnController.setColumnWidth(this.column, newWidth, this.resizeWithShiftKey, finished, "uiColumnDragged");
29356 };
29357 HeaderWrapperComp.prototype.onResizeStart = function (shiftKey) {
29358 this.resizeStartWidth = this.column.getActualWidth();
29359 this.resizeWithShiftKey = shiftKey;
29360 };
29361 HeaderWrapperComp.prototype.setupTooltip = function () {
29362 var colDef = this.column.getColDef();
29363 // add tooltip if exists
29364 if (colDef.headerTooltip) {
29365 this.getGui().title = colDef.headerTooltip;
29366 }
29367 };
29368 HeaderWrapperComp.prototype.setupMovingCss = function () {
29369 this.addDestroyableEventListener(this.column, column_1.Column.EVENT_MOVING_CHANGED, this.onColumnMovingChanged.bind(this));
29370 this.onColumnMovingChanged();
29371 };
29372 HeaderWrapperComp.prototype.addAttributes = function () {
29373 this.getGui().setAttribute("col-id", this.column.getColId());
29374 };
29375 HeaderWrapperComp.prototype.setupWidth = function () {
29376 this.addDestroyableEventListener(this.column, column_1.Column.EVENT_WIDTH_CHANGED, this.onColumnWidthChanged.bind(this));
29377 this.onColumnWidthChanged();
29378 };
29379 HeaderWrapperComp.prototype.setupMenuClass = function () {
29380 this.addDestroyableEventListener(this.column, column_1.Column.EVENT_MENU_VISIBLE_CHANGED, this.onMenuVisible.bind(this));
29381 this.onColumnWidthChanged();
29382 };
29383 HeaderWrapperComp.prototype.onMenuVisible = function () {
29384 this.addOrRemoveCssClass('ag-column-menu-visible', this.column.isMenuVisible());
29385 };
29386 HeaderWrapperComp.prototype.onColumnWidthChanged = function () {
29387 this.getGui().style.width = this.column.getActualWidth() + 'px';
29388 };
29389 // optionally inverts the drag, depending on pinned and RTL
29390 // note - this method is duplicated in RenderedHeaderGroupCell - should refactor out?
29391 HeaderWrapperComp.prototype.normaliseResizeAmount = function (dragChange) {
29392 var result = dragChange;
29393 if (this.gridOptionsWrapper.isEnableRtl()) {
29394 // for RTL, dragging left makes the col bigger, except when pinning left
29395 if (this.pinned !== column_1.Column.PINNED_LEFT) {
29396 result *= -1;
29397 }
29398 }
29399 else {
29400 // for LTR (ie normal), dragging left makes the col smaller, except when pinning right
29401 if (this.pinned === column_1.Column.PINNED_RIGHT) {
29402 result *= -1;
29403 }
29404 }
29405 return result;
29406 };
29407 HeaderWrapperComp.TEMPLATE = '<div class="ag-header-cell" role="presentation" >' +
29408 '<div ref="eResize" class="ag-header-cell-resize" role="presentation"></div>' +
29409 '<ag-checkbox ref="cbSelectAll" class="ag-header-select-all" role="presentation"></ag-checkbox>' +
29410 // <inner component goes here>
29411 '</div>';
29412 __decorate([
29413 context_1.Autowired('gridOptionsWrapper'),
29414 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
29415 ], HeaderWrapperComp.prototype, "gridOptionsWrapper", void 0);
29416 __decorate([
29417 context_1.Autowired('dragAndDropService'),
29418 __metadata("design:type", dragAndDropService_1.DragAndDropService)
29419 ], HeaderWrapperComp.prototype, "dragAndDropService", void 0);
29420 __decorate([
29421 context_1.Autowired('columnController'),
29422 __metadata("design:type", columnController_1.ColumnController)
29423 ], HeaderWrapperComp.prototype, "columnController", void 0);
29424 __decorate([
29425 context_1.Autowired('horizontalResizeService'),
29426 __metadata("design:type", horizontalResizeService_1.HorizontalResizeService)
29427 ], HeaderWrapperComp.prototype, "horizontalResizeService", void 0);
29428 __decorate([
29429 context_1.Autowired('context'),
29430 __metadata("design:type", context_1.Context)
29431 ], HeaderWrapperComp.prototype, "context", void 0);
29432 __decorate([
29433 context_1.Autowired('menuFactory'),
29434 __metadata("design:type", Object)
29435 ], HeaderWrapperComp.prototype, "menuFactory", void 0);
29436 __decorate([
29437 context_1.Autowired('gridApi'),
29438 __metadata("design:type", gridApi_1.GridApi)
29439 ], HeaderWrapperComp.prototype, "gridApi", void 0);
29440 __decorate([
29441 context_1.Autowired('columnApi'),
29442 __metadata("design:type", columnApi_1.ColumnApi)
29443 ], HeaderWrapperComp.prototype, "columnApi", void 0);
29444 __decorate([
29445 context_1.Autowired('sortController'),
29446 __metadata("design:type", sortController_1.SortController)
29447 ], HeaderWrapperComp.prototype, "sortController", void 0);
29448 __decorate([
29449 context_1.Autowired('eventService'),
29450 __metadata("design:type", eventService_1.EventService)
29451 ], HeaderWrapperComp.prototype, "eventService", void 0);
29452 __decorate([
29453 context_1.Autowired('componentRecipes'),
29454 __metadata("design:type", componentRecipes_1.ComponentRecipes)
29455 ], HeaderWrapperComp.prototype, "componentRecipes", void 0);
29456 __decorate([
29457 context_1.Autowired('columnHoverService'),
29458 __metadata("design:type", columnHoverService_1.ColumnHoverService)
29459 ], HeaderWrapperComp.prototype, "columnHoverService", void 0);
29460 __decorate([
29461 context_1.Autowired('beans'),
29462 __metadata("design:type", beans_1.Beans)
29463 ], HeaderWrapperComp.prototype, "beans", void 0);
29464 __decorate([
29465 componentAnnotations_1.RefSelector('eResize'),
29466 __metadata("design:type", HTMLElement)
29467 ], HeaderWrapperComp.prototype, "eResize", void 0);
29468 __decorate([
29469 componentAnnotations_1.RefSelector('cbSelectAll'),
29470 __metadata("design:type", agCheckbox_1.AgCheckbox)
29471 ], HeaderWrapperComp.prototype, "cbSelectAll", void 0);
29472 __decorate([
29473 context_1.PostConstruct,
29474 __metadata("design:type", Function),
29475 __metadata("design:paramtypes", []),
29476 __metadata("design:returntype", void 0)
29477 ], HeaderWrapperComp.prototype, "init", null);
29478 return HeaderWrapperComp;
29479}(component_1.Component));
29480exports.HeaderWrapperComp = HeaderWrapperComp;
29481
29482
29483/***/ }),
29484/* 103 */
29485/***/ (function(module, exports, __webpack_require__) {
29486
29487"use strict";
29488/**
29489 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
29490 * @version v18.1.2
29491 * @link http://www.ag-grid.com/
29492 * @license MIT
29493 */
29494
29495var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
29496 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
29497 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
29498 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
29499 return c > 3 && r && Object.defineProperty(target, key, r), r;
29500};
29501var __metadata = (this && this.__metadata) || function (k, v) {
29502 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
29503};
29504Object.defineProperty(exports, "__esModule", { value: true });
29505var dragAndDropService_1 = __webpack_require__(16);
29506var context_1 = __webpack_require__(0);
29507var moveColumnController_1 = __webpack_require__(104);
29508var column_1 = __webpack_require__(10);
29509var bodyDropPivotTarget_1 = __webpack_require__(105);
29510var columnController_1 = __webpack_require__(4);
29511var DropType;
29512(function (DropType) {
29513 DropType[DropType["ColumnMove"] = 0] = "ColumnMove";
29514 DropType[DropType["Pivot"] = 1] = "Pivot";
29515})(DropType || (DropType = {}));
29516var BodyDropTarget = (function () {
29517 function BodyDropTarget(pinned, eContainer) {
29518 this.dropListeners = {};
29519 this.pinned = pinned;
29520 this.eContainer = eContainer;
29521 }
29522 BodyDropTarget.prototype.registerGridComp = function (gridPanel) {
29523 this.gridPanel = gridPanel;
29524 this.moveColumnController.registerGridComp(gridPanel);
29525 switch (this.pinned) {
29526 case column_1.Column.PINNED_LEFT:
29527 this.eSecondaryContainers = this.gridPanel.getDropTargetLeftContainers();
29528 break;
29529 case column_1.Column.PINNED_RIGHT:
29530 this.eSecondaryContainers = this.gridPanel.getDropTargetRightContainers();
29531 break;
29532 default:
29533 this.eSecondaryContainers = this.gridPanel.getDropTargetBodyContainers();
29534 break;
29535 }
29536 };
29537 BodyDropTarget.prototype.isInterestedIn = function (type) {
29538 // not interested in row drags
29539 return type === dragAndDropService_1.DragSourceType.HeaderCell || type === dragAndDropService_1.DragSourceType.ToolPanel;
29540 };
29541 BodyDropTarget.prototype.getSecondaryContainers = function () {
29542 return this.eSecondaryContainers;
29543 };
29544 BodyDropTarget.prototype.getContainer = function () {
29545 return this.eContainer;
29546 };
29547 BodyDropTarget.prototype.init = function () {
29548 this.moveColumnController = new moveColumnController_1.MoveColumnController(this.pinned, this.eContainer);
29549 this.context.wireBean(this.moveColumnController);
29550 var bodyDropPivotTarget = new bodyDropPivotTarget_1.BodyDropPivotTarget(this.pinned);
29551 this.context.wireBean(bodyDropPivotTarget);
29552 this.dropListeners[DropType.ColumnMove] = this.moveColumnController;
29553 this.dropListeners[DropType.Pivot] = bodyDropPivotTarget;
29554 this.dragAndDropService.addDropTarget(this);
29555 };
29556 BodyDropTarget.prototype.getIconName = function () {
29557 return this.currentDropListener.getIconName();
29558 };
29559 // we want to use the bodyPivotTarget if the user is dragging columns in from the toolPanel
29560 // and we are in pivot mode, as it has to logic to set pivot/value/group on the columns when
29561 // dropped into the grid's body.
29562 BodyDropTarget.prototype.getDropType = function (draggingEvent) {
29563 if (this.columnController.isPivotMode()) {
29564 // in pivot mode, then if moving a column (ie didn't come from toolpanel) then it's
29565 // a standard column move, however if it came from teh toolpanel, then we are introducing
29566 // dimensions or values to the grid
29567 if (draggingEvent.dragSource.type === dragAndDropService_1.DragSourceType.ToolPanel) {
29568 return DropType.Pivot;
29569 }
29570 else {
29571 return DropType.ColumnMove;
29572 }
29573 }
29574 else {
29575 // it's a column, and not pivot mode, so always moving
29576 return DropType.ColumnMove;
29577 }
29578 };
29579 BodyDropTarget.prototype.onDragEnter = function (draggingEvent) {
29580 // we pick the drop listener depending on whether we are in pivot mode are not. if we are
29581 // in pivot mode, then dropping cols changes the row group, pivot, value stats. otherwise
29582 // we change visibility state and position.
29583 // if (this.columnController.isPivotMode()) {
29584 var dropType = this.getDropType(draggingEvent);
29585 this.currentDropListener = this.dropListeners[dropType];
29586 this.currentDropListener.onDragEnter(draggingEvent);
29587 };
29588 BodyDropTarget.prototype.onDragLeave = function (params) {
29589 this.currentDropListener.onDragLeave(params);
29590 };
29591 BodyDropTarget.prototype.onDragging = function (params) {
29592 this.currentDropListener.onDragging(params);
29593 };
29594 BodyDropTarget.prototype.onDragStop = function (params) {
29595 this.currentDropListener.onDragStop(params);
29596 };
29597 __decorate([
29598 context_1.Autowired('context'),
29599 __metadata("design:type", context_1.Context)
29600 ], BodyDropTarget.prototype, "context", void 0);
29601 __decorate([
29602 context_1.Autowired('dragAndDropService'),
29603 __metadata("design:type", dragAndDropService_1.DragAndDropService)
29604 ], BodyDropTarget.prototype, "dragAndDropService", void 0);
29605 __decorate([
29606 context_1.Autowired('columnController'),
29607 __metadata("design:type", columnController_1.ColumnController)
29608 ], BodyDropTarget.prototype, "columnController", void 0);
29609 __decorate([
29610 context_1.PostConstruct,
29611 __metadata("design:type", Function),
29612 __metadata("design:paramtypes", []),
29613 __metadata("design:returntype", void 0)
29614 ], BodyDropTarget.prototype, "init", null);
29615 return BodyDropTarget;
29616}());
29617exports.BodyDropTarget = BodyDropTarget;
29618
29619
29620/***/ }),
29621/* 104 */
29622/***/ (function(module, exports, __webpack_require__) {
29623
29624"use strict";
29625/**
29626 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
29627 * @version v18.1.2
29628 * @link http://www.ag-grid.com/
29629 * @license MIT
29630 */
29631
29632var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
29633 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
29634 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
29635 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
29636 return c > 3 && r && Object.defineProperty(target, key, r), r;
29637};
29638var __metadata = (this && this.__metadata) || function (k, v) {
29639 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
29640};
29641Object.defineProperty(exports, "__esModule", { value: true });
29642var context_1 = __webpack_require__(0);
29643var logger_1 = __webpack_require__(12);
29644var columnController_1 = __webpack_require__(4);
29645var column_1 = __webpack_require__(10);
29646var utils_1 = __webpack_require__(1);
29647var dragAndDropService_1 = __webpack_require__(16);
29648var gridOptionsWrapper_1 = __webpack_require__(2);
29649var MoveColumnController = (function () {
29650 function MoveColumnController(pinned, eContainer) {
29651 this.needToMoveLeft = false;
29652 this.needToMoveRight = false;
29653 this.pinned = pinned;
29654 this.eContainer = eContainer;
29655 this.centerContainer = !utils_1.Utils.exists(pinned);
29656 }
29657 MoveColumnController.prototype.registerGridComp = function (gridPanel) {
29658 this.gridPanel = gridPanel;
29659 };
29660 MoveColumnController.prototype.init = function () {
29661 this.logger = this.loggerFactory.create('MoveColumnController');
29662 };
29663 MoveColumnController.prototype.getIconName = function () {
29664 return this.pinned ? dragAndDropService_1.DragAndDropService.ICON_PINNED : dragAndDropService_1.DragAndDropService.ICON_MOVE;
29665 };
29666 MoveColumnController.prototype.onDragEnter = function (draggingEvent) {
29667 // we do dummy drag, so make sure column appears in the right location when first placed
29668 var columns = draggingEvent.dragItem.columns;
29669 var dragCameFromToolPanel = draggingEvent.dragSource.type === dragAndDropService_1.DragSourceType.ToolPanel;
29670 if (dragCameFromToolPanel) {
29671 // the if statement doesn't work if drag leaves grid, then enters again
29672 this.setColumnsVisible(columns, true, "uiColumnDragged");
29673 }
29674 else {
29675 // restore previous state of visible columns upon re-entering. this means if the user drags
29676 // a group out, and then drags the group back in, only columns that were originally visible
29677 // will be visible again. otherwise a group with three columns (but only two visible) could
29678 // be dragged out, then when it's dragged in again, all three are visible. this stops that.
29679 var visibleState_1 = draggingEvent.dragItem.visibleState;
29680 var visibleColumns = columns.filter(function (column) { return visibleState_1[column.getId()]; });
29681 this.setColumnsVisible(visibleColumns, true, "uiColumnDragged");
29682 }
29683 this.setColumnsPinned(columns, this.pinned, "uiColumnDragged");
29684 this.onDragging(draggingEvent, true);
29685 };
29686 MoveColumnController.prototype.onDragLeave = function (draggingEvent) {
29687 var hideColumnOnExit = !this.gridOptionsWrapper.isSuppressDragLeaveHidesColumns() && !draggingEvent.fromNudge;
29688 if (hideColumnOnExit) {
29689 var dragItem = draggingEvent.dragSource.dragItemCallback();
29690 var columns = dragItem.columns;
29691 this.setColumnsVisible(columns, false, "uiColumnDragged");
29692 }
29693 this.ensureIntervalCleared();
29694 };
29695 MoveColumnController.prototype.setColumnsVisible = function (columns, visible, source) {
29696 if (source === void 0) { source = "api"; }
29697 if (columns) {
29698 var allowedCols = columns.filter(function (c) { return !c.isLockVisible(); });
29699 this.columnController.setColumnsVisible(allowedCols, visible, source);
29700 }
29701 };
29702 MoveColumnController.prototype.setColumnsPinned = function (columns, pinned, source) {
29703 if (source === void 0) { source = "api"; }
29704 if (columns) {
29705 var allowedCols = columns.filter(function (c) { return !c.isLockPinned(); });
29706 this.columnController.setColumnsPinned(allowedCols, pinned, source);
29707 }
29708 };
29709 MoveColumnController.prototype.onDragStop = function () {
29710 this.ensureIntervalCleared();
29711 };
29712 MoveColumnController.prototype.normaliseX = function (x) {
29713 // flip the coordinate if doing RTL
29714 var flipHorizontallyForRtl = this.gridOptionsWrapper.isEnableRtl();
29715 if (flipHorizontallyForRtl) {
29716 var clientWidth = this.eContainer.clientWidth;
29717 x = clientWidth - x;
29718 }
29719 // adjust for scroll only if centre container (the pinned containers dont scroll)
29720 var adjustForScroll = this.centerContainer;
29721 if (adjustForScroll) {
29722 x += this.gridPanel.getBodyViewportScrollLeft();
29723 }
29724 return x;
29725 };
29726 MoveColumnController.prototype.checkCenterForScrolling = function (xAdjustedForScroll) {
29727 if (this.centerContainer) {
29728 // scroll if the mouse has gone outside the grid (or just outside the scrollable part if pinning)
29729 // putting in 50 buffer, so even if user gets to edge of grid, a scroll will happen
29730 var firstVisiblePixel = this.gridPanel.getBodyViewportScrollLeft();
29731 var lastVisiblePixel = firstVisiblePixel + this.gridPanel.getCenterWidth();
29732 if (this.gridOptionsWrapper.isEnableRtl()) {
29733 this.needToMoveRight = xAdjustedForScroll < (firstVisiblePixel + 50);
29734 this.needToMoveLeft = xAdjustedForScroll > (lastVisiblePixel - 50);
29735 }
29736 else {
29737 this.needToMoveLeft = xAdjustedForScroll < (firstVisiblePixel + 50);
29738 this.needToMoveRight = xAdjustedForScroll > (lastVisiblePixel - 50);
29739 }
29740 if (this.needToMoveLeft || this.needToMoveRight) {
29741 this.ensureIntervalStarted();
29742 }
29743 else {
29744 this.ensureIntervalCleared();
29745 }
29746 }
29747 };
29748 MoveColumnController.prototype.onDragging = function (draggingEvent, fromEnter) {
29749 var _this = this;
29750 if (fromEnter === void 0) { fromEnter = false; }
29751 this.lastDraggingEvent = draggingEvent;
29752 // if moving up or down (ie not left or right) then do nothing
29753 if (utils_1.Utils.missing(draggingEvent.hDirection)) {
29754 return;
29755 }
29756 var xNormalised = this.normaliseX(draggingEvent.x);
29757 // if the user is dragging into the panel, ie coming from the side panel into the main grid,
29758 // we don't want to scroll the grid this time, it would appear like the table is jumping
29759 // each time a column is dragged in.
29760 if (!fromEnter) {
29761 this.checkCenterForScrolling(xNormalised);
29762 }
29763 var hDirectionNormalised = this.normaliseDirection(draggingEvent.hDirection);
29764 var dragSourceType = draggingEvent.dragSource.type;
29765 var columnsToMove = draggingEvent.dragSource.dragItemCallback().columns;
29766 columnsToMove = columnsToMove.filter(function (col) {
29767 if (col.isLockPinned()) {
29768 // if locked return true only if both col and container are same pin type.
29769 // double equals (==) here on purpose so that null==undefined is true (for not pinned options)
29770 return col.getPinned() == _this.pinned;
29771 }
29772 else {
29773 // if not pin locked, then always allowed to be in this container
29774 return true;
29775 }
29776 });
29777 this.attemptMoveColumns(dragSourceType, columnsToMove, hDirectionNormalised, xNormalised, fromEnter);
29778 };
29779 MoveColumnController.prototype.normaliseDirection = function (hDirection) {
29780 if (this.gridOptionsWrapper.isEnableRtl()) {
29781 switch (hDirection) {
29782 case dragAndDropService_1.HDirection.Left: return dragAndDropService_1.HDirection.Right;
29783 case dragAndDropService_1.HDirection.Right: return dragAndDropService_1.HDirection.Left;
29784 default: console.error("ag-Grid: Unknown direction " + hDirection);
29785 }
29786 }
29787 else {
29788 return hDirection;
29789 }
29790 };
29791 // returns the index of the first column in the list ONLY if the cols are all beside
29792 // each other. if the cols are not beside each other, then returns null
29793 MoveColumnController.prototype.calculateOldIndex = function (movingCols) {
29794 var gridCols = this.columnController.getAllGridColumns();
29795 var indexes = [];
29796 movingCols.forEach(function (col) { return indexes.push(gridCols.indexOf(col)); });
29797 utils_1.Utils.sortNumberArray(indexes);
29798 var firstIndex = indexes[0];
29799 var lastIndex = indexes[indexes.length - 1];
29800 var spread = lastIndex - firstIndex;
29801 var gapsExist = spread !== indexes.length - 1;
29802 return gapsExist ? null : firstIndex;
29803 };
29804 MoveColumnController.prototype.attemptMoveColumns = function (dragSourceType, allMovingColumns, hDirection, xAdjusted, fromEnter) {
29805 var draggingLeft = hDirection === dragAndDropService_1.HDirection.Left;
29806 var draggingRight = hDirection === dragAndDropService_1.HDirection.Right;
29807 var validMoves = this.calculateValidMoves(allMovingColumns, draggingRight, xAdjusted);
29808 // if cols are not adjacent, then this returns null. when moving, we constrain the direction of the move
29809 // (ie left or right) to the mouse direction. however
29810 var oldIndex = this.calculateOldIndex(allMovingColumns);
29811 // fromEnter = false;
29812 for (var i = 0; i < validMoves.length; i++) {
29813 var newIndex = validMoves[i];
29814 // the two check below stop an error when the user grabs a group my a middle column, then
29815 // it is possible the mouse pointer is to the right of a column while been dragged left.
29816 // so we need to make sure that the mouse pointer is actually left of the left most column
29817 // if moving left, and right of the right most column if moving right
29818 // we check 'fromEnter' below so we move the column to the new spot if the mouse is coming from
29819 // outside the grid, eg if the column is moving from side panel, mouse is moving left, then we should
29820 // place the column to the RHS even if the mouse is moving left and the column is already on
29821 // the LHS. otherwise we stick to the rule described above.
29822 var constrainDirection = oldIndex !== null && !fromEnter;
29823 // don't consider 'fromEnter' when dragging header cells, otherwise group can jump to opposite direction of drag
29824 if (dragSourceType == dragAndDropService_1.DragSourceType.HeaderCell) {
29825 constrainDirection = oldIndex !== null;
29826 }
29827 if (constrainDirection) {
29828 // only allow left drag if this column is moving left
29829 if (draggingLeft && newIndex >= oldIndex) {
29830 continue;
29831 }
29832 // only allow right drag if this column is moving right
29833 if (draggingRight && newIndex <= oldIndex) {
29834 continue;
29835 }
29836 }
29837 if (!this.columnController.doesMovePassRules(allMovingColumns, newIndex)) {
29838 continue;
29839 }
29840 this.columnController.moveColumns(allMovingColumns, newIndex, "uiColumnDragged");
29841 // important to return here, so once we do the first valid move, we don't try do any more
29842 return;
29843 }
29844 };
29845 MoveColumnController.prototype.calculateValidMoves = function (movingCols, draggingRight, x) {
29846 // this is the list of cols on the screen, so it's these we use when comparing the x mouse position
29847 var allDisplayedCols = this.columnController.getDisplayedColumns(this.pinned);
29848 // but this list is the list of all cols, when we move a col it's the index within this list that gets used,
29849 // so the result we return has to be and index location for this list
29850 var allGridCols = this.columnController.getAllGridColumns();
29851 var colIsMovingFunc = function (col) { return movingCols.indexOf(col) >= 0; };
29852 var colIsNotMovingFunc = function (col) { return movingCols.indexOf(col) < 0; };
29853 var movingDisplayedCols = allDisplayedCols.filter(colIsMovingFunc);
29854 var otherDisplayedCols = allDisplayedCols.filter(colIsNotMovingFunc);
29855 var otherGridCols = allGridCols.filter(colIsNotMovingFunc);
29856 // work out how many DISPLAYED columns fit before the 'x' position. this gives us the displayIndex.
29857 // for example, if cols are a,b,c,d and we find a,b fit before 'x', then we want to place the moving
29858 // col between b and c (so that it is under the mouse position).
29859 var displayIndex = 0;
29860 var availableWidth = x;
29861 // if we are dragging right, then the columns will be to the left of the mouse, so we also want to
29862 // include the width of the moving columns
29863 if (draggingRight) {
29864 var widthOfMovingDisplayedCols_1 = 0;
29865 movingDisplayedCols.forEach(function (col) { return widthOfMovingDisplayedCols_1 += col.getActualWidth(); });
29866 availableWidth -= widthOfMovingDisplayedCols_1;
29867 }
29868 // now count how many of the displayed columns will fit to the left
29869 for (var i = 0; i < otherDisplayedCols.length; i++) {
29870 var col = otherDisplayedCols[i];
29871 availableWidth -= col.getActualWidth();
29872 if (availableWidth < 0) {
29873 break;
29874 }
29875 displayIndex++;
29876 }
29877 // trial and error, if going right, we adjust by one, i didn't manage to quantify why, but it works
29878 if (draggingRight) {
29879 displayIndex++;
29880 }
29881 // the display index is with respect to all the showing columns, however when we move, it's with
29882 // respect to all grid columns, so we need to translate from display index to grid index
29883 var gridColIndex;
29884 if (displayIndex > 0) {
29885 var leftColumn = otherDisplayedCols[displayIndex - 1];
29886 gridColIndex = otherGridCols.indexOf(leftColumn) + 1;
29887 }
29888 else {
29889 gridColIndex = 0;
29890 }
29891 var validMoves = [gridColIndex];
29892 // add in all adjacent empty columns as other valid moves. this allows us to try putting the new
29893 // column in any place of a hidden column, to try different combinations so that we don't break
29894 // married children. in other words, maybe the new index breaks a group, but only because some
29895 // columns are hidden, maybe we can reshuffle the hidden columns to find a place that works.
29896 var nextCol = allGridCols[gridColIndex];
29897 while (utils_1.Utils.exists(nextCol) && this.isColumnHidden(allDisplayedCols, nextCol)) {
29898 gridColIndex++;
29899 validMoves.push(gridColIndex);
29900 nextCol = allGridCols[gridColIndex];
29901 }
29902 return validMoves;
29903 };
29904 // isHidden takes into account visible=false and group=closed, ie it is not displayed
29905 MoveColumnController.prototype.isColumnHidden = function (displayedColumns, col) {
29906 return displayedColumns.indexOf(col) < 0;
29907 };
29908 MoveColumnController.prototype.ensureIntervalStarted = function () {
29909 if (!this.movingIntervalId) {
29910 this.intervalCount = 0;
29911 this.failedMoveAttempts = 0;
29912 this.movingIntervalId = setInterval(this.moveInterval.bind(this), 100);
29913 if (this.needToMoveLeft) {
29914 this.dragAndDropService.setGhostIcon(dragAndDropService_1.DragAndDropService.ICON_LEFT, true);
29915 }
29916 else {
29917 this.dragAndDropService.setGhostIcon(dragAndDropService_1.DragAndDropService.ICON_RIGHT, true);
29918 }
29919 }
29920 };
29921 MoveColumnController.prototype.ensureIntervalCleared = function () {
29922 if (this.moveInterval) {
29923 clearInterval(this.movingIntervalId);
29924 this.movingIntervalId = null;
29925 this.dragAndDropService.setGhostIcon(dragAndDropService_1.DragAndDropService.ICON_MOVE);
29926 }
29927 };
29928 MoveColumnController.prototype.moveInterval = function () {
29929 // the amounts we move get bigger at each interval, so the speed accelerates, starting a bit slow
29930 // and getting faster. this is to give smoother user experience. we max at 100px to limit the speed.
29931 var pixelsToMove;
29932 this.intervalCount++;
29933 pixelsToMove = 10 + (this.intervalCount * 5);
29934 if (pixelsToMove > 100) {
29935 pixelsToMove = 100;
29936 }
29937 var pixelsMoved;
29938 if (this.needToMoveLeft) {
29939 pixelsMoved = this.gridPanel.scrollHorizontally(-pixelsToMove);
29940 }
29941 else if (this.needToMoveRight) {
29942 pixelsMoved = this.gridPanel.scrollHorizontally(pixelsToMove);
29943 }
29944 if (pixelsMoved !== 0) {
29945 this.onDragging(this.lastDraggingEvent);
29946 this.failedMoveAttempts = 0;
29947 }
29948 else {
29949 // we count the failed move attempts. if we fail to move 7 times, then we pin the column.
29950 // this is how we achieve pining by dragging the column to the edge of the grid.
29951 this.failedMoveAttempts++;
29952 var columns = this.lastDraggingEvent.dragItem.columns;
29953 var columnsThatCanPin = columns.filter(function (c) { return !c.isLockPinned(); });
29954 if (columnsThatCanPin.length > 0) {
29955 this.dragAndDropService.setGhostIcon(dragAndDropService_1.DragAndDropService.ICON_PINNED);
29956 if (this.failedMoveAttempts > 7) {
29957 var pinType = this.needToMoveLeft ? column_1.Column.PINNED_LEFT : column_1.Column.PINNED_RIGHT;
29958 this.setColumnsPinned(columnsThatCanPin, pinType, "uiColumnDragged");
29959 this.dragAndDropService.nudge();
29960 }
29961 }
29962 }
29963 };
29964 __decorate([
29965 context_1.Autowired('loggerFactory'),
29966 __metadata("design:type", logger_1.LoggerFactory)
29967 ], MoveColumnController.prototype, "loggerFactory", void 0);
29968 __decorate([
29969 context_1.Autowired('columnController'),
29970 __metadata("design:type", columnController_1.ColumnController)
29971 ], MoveColumnController.prototype, "columnController", void 0);
29972 __decorate([
29973 context_1.Autowired('dragAndDropService'),
29974 __metadata("design:type", dragAndDropService_1.DragAndDropService)
29975 ], MoveColumnController.prototype, "dragAndDropService", void 0);
29976 __decorate([
29977 context_1.Autowired('gridOptionsWrapper'),
29978 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
29979 ], MoveColumnController.prototype, "gridOptionsWrapper", void 0);
29980 __decorate([
29981 context_1.PostConstruct,
29982 __metadata("design:type", Function),
29983 __metadata("design:paramtypes", []),
29984 __metadata("design:returntype", void 0)
29985 ], MoveColumnController.prototype, "init", null);
29986 return MoveColumnController;
29987}());
29988exports.MoveColumnController = MoveColumnController;
29989
29990
29991/***/ }),
29992/* 105 */
29993/***/ (function(module, exports, __webpack_require__) {
29994
29995"use strict";
29996/**
29997 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
29998 * @version v18.1.2
29999 * @link http://www.ag-grid.com/
30000 * @license MIT
30001 */
30002
30003var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
30004 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
30005 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
30006 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
30007 return c > 3 && r && Object.defineProperty(target, key, r), r;
30008};
30009var __metadata = (this && this.__metadata) || function (k, v) {
30010 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
30011};
30012Object.defineProperty(exports, "__esModule", { value: true });
30013var dragAndDropService_1 = __webpack_require__(16);
30014var columnController_1 = __webpack_require__(4);
30015var context_1 = __webpack_require__(0);
30016var gridOptionsWrapper_1 = __webpack_require__(2);
30017var BodyDropPivotTarget = (function () {
30018 function BodyDropPivotTarget(pinned) {
30019 this.columnsToAggregate = [];
30020 this.columnsToGroup = [];
30021 this.columnsToPivot = [];
30022 this.pinned = pinned;
30023 }
30024 /** Callback for when drag enters */
30025 BodyDropPivotTarget.prototype.onDragEnter = function (draggingEvent) {
30026 var _this = this;
30027 this.clearColumnsList();
30028 // in pivot mode, we don't accept any drops if functions are read only
30029 if (this.gridOptionsWrapper.isFunctionsReadOnly()) {
30030 return;
30031 }
30032 var dragColumns = draggingEvent.dragItem.columns;
30033 dragColumns.forEach(function (column) {
30034 // we don't allow adding secondary columns
30035 if (!column.isPrimary()) {
30036 return;
30037 }
30038 if (column.isAnyFunctionActive()) {
30039 return;
30040 }
30041 if (column.isAllowValue()) {
30042 _this.columnsToAggregate.push(column);
30043 }
30044 else if (column.isAllowRowGroup()) {
30045 _this.columnsToGroup.push(column);
30046 }
30047 else if (column.isAllowRowGroup()) {
30048 _this.columnsToPivot.push(column);
30049 }
30050 });
30051 };
30052 BodyDropPivotTarget.prototype.getIconName = function () {
30053 var totalColumns = this.columnsToAggregate.length + this.columnsToGroup.length + this.columnsToPivot.length;
30054 if (totalColumns > 0) {
30055 return this.pinned ? dragAndDropService_1.DragAndDropService.ICON_PINNED : dragAndDropService_1.DragAndDropService.ICON_MOVE;
30056 }
30057 else {
30058 return null;
30059 }
30060 };
30061 /** Callback for when drag leaves */
30062 BodyDropPivotTarget.prototype.onDragLeave = function (draggingEvent) {
30063 // if we are taking columns out of the center, then we remove them from the report
30064 this.clearColumnsList();
30065 };
30066 BodyDropPivotTarget.prototype.clearColumnsList = function () {
30067 this.columnsToAggregate.length = 0;
30068 this.columnsToGroup.length = 0;
30069 this.columnsToPivot.length = 0;
30070 };
30071 /** Callback for when dragging */
30072 BodyDropPivotTarget.prototype.onDragging = function (draggingEvent) {
30073 };
30074 /** Callback for when drag stops */
30075 BodyDropPivotTarget.prototype.onDragStop = function (draggingEvent) {
30076 if (this.columnsToAggregate.length > 0) {
30077 this.columnController.addValueColumns(this.columnsToAggregate, "toolPanelDragAndDrop");
30078 }
30079 if (this.columnsToGroup.length > 0) {
30080 this.columnController.addRowGroupColumns(this.columnsToGroup, "toolPanelDragAndDrop");
30081 }
30082 if (this.columnsToPivot.length > 0) {
30083 this.columnController.addPivotColumns(this.columnsToPivot, "toolPanelDragAndDrop");
30084 }
30085 };
30086 __decorate([
30087 context_1.Autowired('columnController'),
30088 __metadata("design:type", columnController_1.ColumnController)
30089 ], BodyDropPivotTarget.prototype, "columnController", void 0);
30090 __decorate([
30091 context_1.Autowired('gridOptionsWrapper'),
30092 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
30093 ], BodyDropPivotTarget.prototype, "gridOptionsWrapper", void 0);
30094 return BodyDropPivotTarget;
30095}());
30096exports.BodyDropPivotTarget = BodyDropPivotTarget;
30097
30098
30099/***/ }),
30100/* 106 */
30101/***/ (function(module, exports, __webpack_require__) {
30102
30103"use strict";
30104/**
30105 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
30106 * @version v18.1.2
30107 * @link http://www.ag-grid.com/
30108 * @license MIT
30109 */
30110
30111var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
30112 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
30113 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
30114 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
30115 return c > 3 && r && Object.defineProperty(target, key, r), r;
30116};
30117var __metadata = (this && this.__metadata) || function (k, v) {
30118 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
30119};
30120Object.defineProperty(exports, "__esModule", { value: true });
30121var context_1 = __webpack_require__(0);
30122var column_1 = __webpack_require__(10);
30123var gridOptionsWrapper_1 = __webpack_require__(2);
30124var utils_1 = __webpack_require__(1);
30125var columnController_1 = __webpack_require__(4);
30126var balancedColumnTreeBuilder_1 = __webpack_require__(40);
30127var AutoGroupColService = (function () {
30128 function AutoGroupColService() {
30129 }
30130 AutoGroupColService_1 = AutoGroupColService;
30131 AutoGroupColService.prototype.createAutoGroupColumns = function (rowGroupColumns) {
30132 var _this = this;
30133 var groupAutoColumns = [];
30134 var doingTreeData = this.gridOptionsWrapper.isTreeData();
30135 var doingMultiAutoColumn = this.gridOptionsWrapper.isGroupMultiAutoColumn();
30136 if (doingTreeData && doingMultiAutoColumn) {
30137 console.log('ag-Grid: you cannot mix groupMultiAutoColumn with treeData, only one column can be used to display groups when doing tree data');
30138 doingMultiAutoColumn = false;
30139 }
30140 // if doing groupMultiAutoColumn, then we call the method multiple times, once
30141 // for each column we are grouping by
30142 if (doingMultiAutoColumn) {
30143 rowGroupColumns.forEach(function (rowGroupCol, index) {
30144 groupAutoColumns.push(_this.createOneAutoGroupColumn(rowGroupCol, index));
30145 });
30146 }
30147 else {
30148 groupAutoColumns.push(this.createOneAutoGroupColumn(null));
30149 }
30150 return groupAutoColumns;
30151 };
30152 // rowGroupCol and index are missing if groupMultiAutoColumn=false
30153 AutoGroupColService.prototype.createOneAutoGroupColumn = function (rowGroupCol, index) {
30154 // if one provided by user, use it, otherwise create one
30155 var defaultAutoColDef = this.generateDefaultColDef(rowGroupCol);
30156 // if doing multi, set the field
30157 var colId;
30158 if (rowGroupCol) {
30159 colId = AutoGroupColService_1.GROUP_AUTO_COLUMN_ID + "-" + rowGroupCol.getId();
30160 }
30161 else {
30162 colId = AutoGroupColService_1.GROUP_AUTO_COLUMN_BUNDLE_ID;
30163 }
30164 var userAutoColDef = this.gridOptionsWrapper.getAutoGroupColumnDef();
30165 utils_1._.mergeDeep(defaultAutoColDef, userAutoColDef);
30166 defaultAutoColDef = this.balancedColumnTreeBuilder.mergeColDefs(defaultAutoColDef);
30167 defaultAutoColDef.colId = colId;
30168 // For tree data the filter is always allowed
30169 if (!this.gridOptionsWrapper.isTreeData()) {
30170 // we would only allow filter if the user has provided field or value getter. otherwise the filter
30171 // would not be able to work.
30172 var noFieldOrValueGetter = utils_1._.missing(defaultAutoColDef.field) && utils_1._.missing(defaultAutoColDef.valueGetter) && utils_1._.missing(defaultAutoColDef.filterValueGetter);
30173 if (noFieldOrValueGetter) {
30174 defaultAutoColDef.suppressFilter = true;
30175 }
30176 }
30177 // if showing many cols, we don't want to show more than one with a checkbox for selection
30178 if (index > 0) {
30179 defaultAutoColDef.headerCheckboxSelection = false;
30180 }
30181 var newCol = new column_1.Column(defaultAutoColDef, colId, true);
30182 this.context.wireBean(newCol);
30183 return newCol;
30184 };
30185 AutoGroupColService.prototype.generateDefaultColDef = function (rowGroupCol) {
30186 var localeTextFunc = this.gridOptionsWrapper.getLocaleTextFunc();
30187 var defaultAutoColDef = {
30188 headerName: localeTextFunc('group', 'Group'),
30189 cellRenderer: 'agGroupCellRenderer'
30190 };
30191 // we never allow moving the group column
30192 // defaultAutoColDef.suppressMovable = true;
30193 if (rowGroupCol) {
30194 var rowGroupColDef = rowGroupCol.getColDef();
30195 utils_1._.assign(defaultAutoColDef, {
30196 // cellRendererParams.groupKey: colDefToCopy.field;
30197 headerName: this.columnController.getDisplayNameForColumn(rowGroupCol, 'header'),
30198 headerValueGetter: rowGroupColDef.headerValueGetter
30199 });
30200 if (rowGroupColDef.cellRenderer) {
30201 utils_1._.assign(defaultAutoColDef, {
30202 cellRendererParams: {
30203 innerRenderer: rowGroupColDef.cellRenderer,
30204 innerRendererParams: rowGroupColDef.cellRendererParams
30205 }
30206 });
30207 }
30208 defaultAutoColDef.showRowGroup = rowGroupCol.getColId();
30209 }
30210 else {
30211 defaultAutoColDef.showRowGroup = true;
30212 }
30213 return defaultAutoColDef;
30214 };
30215 AutoGroupColService.GROUP_AUTO_COLUMN_ID = 'ag-Grid-AutoColumn';
30216 AutoGroupColService.GROUP_AUTO_COLUMN_BUNDLE_ID = AutoGroupColService_1.GROUP_AUTO_COLUMN_ID;
30217 __decorate([
30218 context_1.Autowired('gridOptionsWrapper'),
30219 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
30220 ], AutoGroupColService.prototype, "gridOptionsWrapper", void 0);
30221 __decorate([
30222 context_1.Autowired('context'),
30223 __metadata("design:type", context_1.Context)
30224 ], AutoGroupColService.prototype, "context", void 0);
30225 __decorate([
30226 context_1.Autowired('columnController'),
30227 __metadata("design:type", columnController_1.ColumnController)
30228 ], AutoGroupColService.prototype, "columnController", void 0);
30229 __decorate([
30230 context_1.Autowired('balancedColumnTreeBuilder'),
30231 __metadata("design:type", balancedColumnTreeBuilder_1.BalancedColumnTreeBuilder)
30232 ], AutoGroupColService.prototype, "balancedColumnTreeBuilder", void 0);
30233 AutoGroupColService = AutoGroupColService_1 = __decorate([
30234 context_1.Bean('autoGroupColService')
30235 ], AutoGroupColService);
30236 return AutoGroupColService;
30237 var AutoGroupColService_1;
30238}());
30239exports.AutoGroupColService = AutoGroupColService;
30240
30241
30242/***/ }),
30243/* 107 */
30244/***/ (function(module, exports, __webpack_require__) {
30245
30246"use strict";
30247/**
30248 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
30249 * @version v18.1.2
30250 * @link http://www.ag-grid.com/
30251 * @license MIT
30252 */
30253
30254var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
30255 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
30256 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
30257 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
30258 return c > 3 && r && Object.defineProperty(target, key, r), r;
30259};
30260var __metadata = (this && this.__metadata) || function (k, v) {
30261 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
30262};
30263Object.defineProperty(exports, "__esModule", { value: true });
30264var context_1 = __webpack_require__(0);
30265var constants_1 = __webpack_require__(9);
30266var utils_1 = __webpack_require__(1);
30267var gridOptionsWrapper_1 = __webpack_require__(2);
30268var ImmutableService = (function () {
30269 function ImmutableService() {
30270 }
30271 ImmutableService.prototype.postConstruct = function () {
30272 if (this.rowModel.getType() === constants_1.Constants.ROW_MODEL_TYPE_CLIENT_SIDE) {
30273 this.clientSideRowModel = this.rowModel;
30274 }
30275 };
30276 // converts the setRowData() command to a transaction
30277 ImmutableService.prototype.createTransactionForRowData = function (data) {
30278 if (utils_1._.missing(this.clientSideRowModel)) {
30279 console.error('ag-Grid: ImmutableService only works with ClientSideRowModel');
30280 return;
30281 }
30282 var getRowNodeIdFunc = this.gridOptionsWrapper.getRowNodeIdFunc();
30283 if (utils_1._.missing(getRowNodeIdFunc)) {
30284 console.error('ag-Grid: ImmutableService requires getRowNodeId() callback to be implemented, your row data need IDs!');
30285 return;
30286 }
30287 // convert the data into a transaction object by working out adds, removes and updates
30288 var transaction = {
30289 remove: [],
30290 update: [],
30291 add: []
30292 };
30293 var existingNodesMap = this.clientSideRowModel.getCopyOfNodesMap();
30294 var orderMap = {};
30295 if (utils_1._.exists(data)) {
30296 // split all the new data in the following:
30297 // if new, push to 'add'
30298 // if update, push to 'update'
30299 // if not changed, do not include in the transaction
30300 data.forEach(function (dataItem, index) {
30301 var id = getRowNodeIdFunc(dataItem);
30302 var existingNode = existingNodesMap[id];
30303 orderMap[id] = index;
30304 if (existingNode) {
30305 var dataHasChanged = existingNode.data !== dataItem;
30306 if (dataHasChanged) {
30307 transaction.update.push(dataItem);
30308 }
30309 // otherwise, if data not changed, we just don't include it anywhere, as it's not a delta
30310 // remove from list, so we know the item is not to be removed
30311 existingNodesMap[id] = undefined;
30312 }
30313 else {
30314 transaction.add.push(dataItem);
30315 }
30316 });
30317 }
30318 // at this point, all rows that are left, should be removed
30319 utils_1._.iterateObject(existingNodesMap, function (id, rowNode) {
30320 if (rowNode) {
30321 transaction.remove.push(rowNode.data);
30322 }
30323 });
30324 return [transaction, orderMap];
30325 };
30326 __decorate([
30327 context_1.Autowired('rowModel'),
30328 __metadata("design:type", Object)
30329 ], ImmutableService.prototype, "rowModel", void 0);
30330 __decorate([
30331 context_1.Autowired('gridOptionsWrapper'),
30332 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
30333 ], ImmutableService.prototype, "gridOptionsWrapper", void 0);
30334 __decorate([
30335 context_1.PostConstruct,
30336 __metadata("design:type", Function),
30337 __metadata("design:paramtypes", []),
30338 __metadata("design:returntype", void 0)
30339 ], ImmutableService.prototype, "postConstruct", null);
30340 ImmutableService = __decorate([
30341 context_1.Bean('immutableService')
30342 ], ImmutableService);
30343 return ImmutableService;
30344}());
30345exports.ImmutableService = ImmutableService;
30346
30347
30348/***/ }),
30349/* 108 */
30350/***/ (function(module, exports, __webpack_require__) {
30351
30352"use strict";
30353/**
30354 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
30355 * @version v18.1.2
30356 * @link http://www.ag-grid.com/
30357 * @license MIT
30358 */
30359
30360Object.defineProperty(exports, "__esModule", { value: true });
30361var ColDefUtil = (function () {
30362 function ColDefUtil() {
30363 }
30364 ColDefUtil.STRING_PROPERTIES = [
30365 'headerName',
30366 'columnGroupShow',
30367 'headerClass',
30368 'toolPanelClass',
30369 'headerValueGetter',
30370 'pivotKeys',
30371 'groupId',
30372 'colId',
30373 'sort',
30374 'field',
30375 'type',
30376 'tooltipField',
30377 'headerTooltip',
30378 'cellClass',
30379 'showRowGroup',
30380 'template',
30381 'templateUrl',
30382 'filter',
30383 'aggFunc',
30384 'cellRenderer',
30385 'cellEditor',
30386 'pinned'
30387 ];
30388 ColDefUtil.OBJECT_PROPERTIES = [
30389 'headerGroupComponent',
30390 'headerGroupComponentFramework',
30391 'headerGroupComponentParams',
30392 'cellStyle',
30393 'cellRendererParams',
30394 'cellEditorFramework',
30395 'cellEditorParams',
30396 'pinnedRowCellRendererFramework',
30397 'pinnedRowCellRendererParams',
30398 'filterFramework',
30399 'filterParams',
30400 'pivotValueColumn',
30401 'headerComponent',
30402 'headerComponentFramework',
30403 'headerComponentParams',
30404 'floatingFilterComponent',
30405 'floatingFilterComponentParams',
30406 'floatingFilterComponentFramework',
30407 'refData'
30408 ];
30409 ColDefUtil.ARRAY_PROPERTIES = [
30410 'children',
30411 'sortingOrder',
30412 'allowedAggFuncs',
30413 'menuTabs',
30414 'pivotTotalColumnIds',
30415 'cellClassRules',
30416 'icons'
30417 ];
30418 ColDefUtil.NUMBER_PROPERTIES = [
30419 'sortedAt',
30420 'width',
30421 'minWidth',
30422 'maxWidth',
30423 'rowGroupIndex',
30424 'pivotIndex'
30425 ];
30426 ColDefUtil.BOOLEAN_PROPERTIES = [
30427 'suppressCellFlash',
30428 'suppressToolPanel',
30429 'openByDefault',
30430 'marryChildren',
30431 'hide',
30432 'rowGroup',
30433 'pivot',
30434 'checkboxSelection',
30435 'headerCheckboxSelection',
30436 'headerCheckboxSelectionFilteredOnly',
30437 'suppressMenu',
30438 'suppressSorting',
30439 'suppressMovable',
30440 'suppressFilter',
30441 'lockPosition',
30442 'lockVisible',
30443 'lockPinned',
30444 'unSortIcon',
30445 'suppressSizeToFit',
30446 'suppressResize',
30447 'suppressAutoSize',
30448 'enableRowGroup',
30449 'enablePivot',
30450 'enableValue',
30451 'editable',
30452 'suppressPaste',
30453 'suppressNavigable',
30454 'enableCellChangeFlash',
30455 'rowDrag',
30456 'autoHeight'
30457 ];
30458 ColDefUtil.FUNCTION_PROPERTIES = [
30459 'valueGetter',
30460 'valueSetter',
30461 'filterValueGetter',
30462 'keyCreator',
30463 'cellRenderer',
30464 'cellRendererFramework',
30465 'pinnedRowCellRenderer',
30466 'valueFormatter',
30467 'pinnedRowValueFormatter',
30468 'valueParser',
30469 'comparator',
30470 'equals',
30471 'pivotComparator',
30472 'suppressKeyboardEvent',
30473 'colSpan',
30474 'rowSpan',
30475 'getQuickFilterText',
30476 'newValueHandler',
30477 'onCellValueChanged',
30478 'onCellClicked',
30479 'onCellDoubleClicked',
30480 'onCellContextMenu',
30481 'tooltip',
30482 'cellRendererSelector',
30483 'cellEditorSelector'
30484 ];
30485 ColDefUtil.ALL_PROPERTIES = ColDefUtil.ARRAY_PROPERTIES
30486 .concat(ColDefUtil.OBJECT_PROPERTIES)
30487 .concat(ColDefUtil.STRING_PROPERTIES)
30488 .concat(ColDefUtil.NUMBER_PROPERTIES)
30489 .concat(ColDefUtil.FUNCTION_PROPERTIES)
30490 .concat(ColDefUtil.BOOLEAN_PROPERTIES);
30491 // used when doing property checks - this causes noise when using frameworks which can add their own fw specific
30492 // properties to coldefs, gridOptions etc
30493 ColDefUtil.FRAMEWORK_PROPERTIES = ['__ob__', '__metadata__', 'mappedColumnProperties', 'hasChildColumns',
30494 'toColDef', 'createColDefFromGridColumn'];
30495 return ColDefUtil;
30496}());
30497exports.ColDefUtil = ColDefUtil;
30498
30499
30500/***/ }),
30501/* 109 */
30502/***/ (function(module, exports, __webpack_require__) {
30503
30504"use strict";
30505/**
30506 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
30507 * @version v18.1.2
30508 * @link http://www.ag-grid.com/
30509 * @license MIT
30510 */
30511
30512Object.defineProperty(exports, "__esModule", { value: true });
30513// class returns a unique id to use for the column. it checks the existing columns, and if the requested
30514// id is already taken, it will start appending numbers until it gets a unique id.
30515// eg, if the col field is 'name', it will try ids: {name, name_1, name_2...}
30516// if no field or id provided in the col, it will try the ids of natural numbers
30517var utils_1 = __webpack_require__(1);
30518var ColumnKeyCreator = (function () {
30519 function ColumnKeyCreator() {
30520 this.existingKeys = [];
30521 }
30522 ColumnKeyCreator.prototype.getUniqueKey = function (colId, colField) {
30523 // in case user passed in number for colId, convert to string
30524 colId = utils_1.Utils.toStringOrNull(colId);
30525 var count = 0;
30526 while (true) {
30527 var idToTry = void 0;
30528 if (colId) {
30529 idToTry = colId;
30530 if (count !== 0) {
30531 idToTry += '_' + count;
30532 }
30533 }
30534 else if (colField) {
30535 idToTry = colField;
30536 if (count !== 0) {
30537 idToTry += '_' + count;
30538 }
30539 }
30540 else {
30541 idToTry = '' + count;
30542 }
30543 if (this.existingKeys.indexOf(idToTry) < 0) {
30544 this.existingKeys.push(idToTry);
30545 return idToTry;
30546 }
30547 count++;
30548 }
30549 };
30550 return ColumnKeyCreator;
30551}());
30552exports.ColumnKeyCreator = ColumnKeyCreator;
30553
30554
30555/***/ }),
30556/* 110 */
30557/***/ (function(module, exports, __webpack_require__) {
30558
30559"use strict";
30560/**
30561 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
30562 * @version v18.1.2
30563 * @link http://www.ag-grid.com/
30564 * @license MIT
30565 */
30566
30567var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
30568 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
30569 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
30570 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
30571 return c > 3 && r && Object.defineProperty(target, key, r), r;
30572};
30573var __metadata = (this && this.__metadata) || function (k, v) {
30574 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
30575};
30576Object.defineProperty(exports, "__esModule", { value: true });
30577var context_1 = __webpack_require__(0);
30578var filterManager_1 = __webpack_require__(20);
30579var utils_1 = __webpack_require__(1);
30580var popupService_1 = __webpack_require__(37);
30581var gridOptionsWrapper_1 = __webpack_require__(2);
30582var eventService_1 = __webpack_require__(3);
30583var StandardMenuFactory = (function () {
30584 function StandardMenuFactory() {
30585 }
30586 StandardMenuFactory.prototype.hideActiveMenu = function () {
30587 if (this.hidePopup) {
30588 this.hidePopup();
30589 }
30590 };
30591 StandardMenuFactory.prototype.showMenuAfterMouseEvent = function (column, mouseEvent) {
30592 var _this = this;
30593 this.showPopup(column, function (eMenu) {
30594 _this.popupService.positionPopupUnderMouseEvent({
30595 column: column,
30596 type: 'columnMenu',
30597 mouseEvent: mouseEvent,
30598 ePopup: eMenu
30599 });
30600 });
30601 };
30602 StandardMenuFactory.prototype.showMenuAfterButtonClick = function (column, eventSource) {
30603 var _this = this;
30604 this.showPopup(column, function (eMenu) {
30605 _this.popupService.positionPopupUnderComponent({ type: 'columnMenu', eventSource: eventSource,
30606 ePopup: eMenu, keepWithinBounds: true, column: column });
30607 });
30608 };
30609 StandardMenuFactory.prototype.showPopup = function (column, positionCallback) {
30610 var _this = this;
30611 var filterWrapper = this.filterManager.getOrCreateFilterWrapper(column);
30612 var eMenu = document.createElement('div');
30613 utils_1.Utils.addCssClass(eMenu, 'ag-menu');
30614 filterWrapper.guiPromise.promise.then(function (gui) {
30615 eMenu.appendChild(gui);
30616 });
30617 var hidePopup;
30618 var bodyScrollListener = function (event) {
30619 // if h scroll, popup is no longer over the column
30620 if (event.direction === 'horizontal') {
30621 hidePopup();
30622 }
30623 };
30624 this.eventService.addEventListener('bodyScroll', bodyScrollListener);
30625 var closedCallback = function () {
30626 _this.eventService.removeEventListener('bodyScroll', bodyScrollListener);
30627 column.setMenuVisible(false, "contextMenu");
30628 };
30629 // need to show filter before positioning, as only after filter
30630 // is visible can we find out what the width of it is
30631 hidePopup = this.popupService.addAsModalPopup(eMenu, true, closedCallback);
30632 positionCallback(eMenu);
30633 filterWrapper.filterPromise.then(function (filter) {
30634 if (filter.afterGuiAttached) {
30635 var params = {
30636 hidePopup: hidePopup
30637 };
30638 filter.afterGuiAttached(params);
30639 }
30640 });
30641 this.hidePopup = hidePopup;
30642 column.setMenuVisible(true, "contextMenu");
30643 };
30644 StandardMenuFactory.prototype.isMenuEnabled = function (column) {
30645 // for standard, we show menu if filter is enabled, and he menu is not suppressed
30646 return this.gridOptionsWrapper.isEnableFilter() && column.isFilterAllowed();
30647 };
30648 __decorate([
30649 context_1.Autowired('eventService'),
30650 __metadata("design:type", eventService_1.EventService)
30651 ], StandardMenuFactory.prototype, "eventService", void 0);
30652 __decorate([
30653 context_1.Autowired('filterManager'),
30654 __metadata("design:type", filterManager_1.FilterManager)
30655 ], StandardMenuFactory.prototype, "filterManager", void 0);
30656 __decorate([
30657 context_1.Autowired('popupService'),
30658 __metadata("design:type", popupService_1.PopupService)
30659 ], StandardMenuFactory.prototype, "popupService", void 0);
30660 __decorate([
30661 context_1.Autowired('gridOptionsWrapper'),
30662 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
30663 ], StandardMenuFactory.prototype, "gridOptionsWrapper", void 0);
30664 StandardMenuFactory = __decorate([
30665 context_1.Bean('menuFactory')
30666 ], StandardMenuFactory);
30667 return StandardMenuFactory;
30668}());
30669exports.StandardMenuFactory = StandardMenuFactory;
30670
30671
30672/***/ }),
30673/* 111 */
30674/***/ (function(module, exports, __webpack_require__) {
30675
30676"use strict";
30677/**
30678 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
30679 * @version v18.1.2
30680 * @link http://www.ag-grid.com/
30681 * @license MIT
30682 */
30683
30684var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
30685 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
30686 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
30687 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
30688 return c > 3 && r && Object.defineProperty(target, key, r), r;
30689};
30690var __metadata = (this && this.__metadata) || function (k, v) {
30691 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
30692};
30693Object.defineProperty(exports, "__esModule", { value: true });
30694var context_1 = __webpack_require__(0);
30695var gridOptionsWrapper_1 = __webpack_require__(2);
30696var filterService_1 = __webpack_require__(112);
30697var selectableService_1 = __webpack_require__(88);
30698var FilterStage = (function () {
30699 function FilterStage() {
30700 }
30701 FilterStage.prototype.execute = function (params) {
30702 var rowNode = params.rowNode;
30703 if (this.gridOptionsWrapper.isEnableServerSideFilter()) {
30704 this.filterService.filter(rowNode, false);
30705 }
30706 else {
30707 this.filterService.filterAccordingToColumnState(rowNode);
30708 }
30709 this.selectableService.updateSelectableAfterFiltering(rowNode);
30710 };
30711 __decorate([
30712 context_1.Autowired('gridOptionsWrapper'),
30713 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
30714 ], FilterStage.prototype, "gridOptionsWrapper", void 0);
30715 __decorate([
30716 context_1.Autowired('selectableService'),
30717 __metadata("design:type", selectableService_1.SelectableService)
30718 ], FilterStage.prototype, "selectableService", void 0);
30719 __decorate([
30720 context_1.Autowired('filterService'),
30721 __metadata("design:type", filterService_1.FilterService)
30722 ], FilterStage.prototype, "filterService", void 0);
30723 FilterStage = __decorate([
30724 context_1.Bean('filterStage')
30725 ], FilterStage);
30726 return FilterStage;
30727}());
30728exports.FilterStage = FilterStage;
30729
30730
30731/***/ }),
30732/* 112 */
30733/***/ (function(module, exports, __webpack_require__) {
30734
30735"use strict";
30736/**
30737 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
30738 * @version v18.1.2
30739 * @link http://www.ag-grid.com/
30740 * @license MIT
30741 */
30742
30743var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
30744 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
30745 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
30746 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
30747 return c > 3 && r && Object.defineProperty(target, key, r), r;
30748};
30749var __metadata = (this && this.__metadata) || function (k, v) {
30750 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
30751};
30752Object.defineProperty(exports, "__esModule", { value: true });
30753var context_1 = __webpack_require__(0);
30754var filterManager_1 = __webpack_require__(20);
30755var gridOptionsWrapper_1 = __webpack_require__(2);
30756var FilterService = (function () {
30757 function FilterService() {
30758 }
30759 FilterService.prototype.postConstruct = function () {
30760 this.doingTreeData = this.gridOptionsWrapper.isTreeData();
30761 };
30762 FilterService.prototype.filterAccordingToColumnState = function (rowNode) {
30763 var filterActive = this.filterManager.isAnyFilterPresent();
30764 this.filter(rowNode, filterActive);
30765 };
30766 FilterService.prototype.filter = function (rowNode, filterActive) {
30767 var _this = this;
30768 // recursively get all children that are groups to also filter
30769 if (rowNode.hasChildren()) {
30770 rowNode.childrenAfterGroup.forEach(function (node) { return _this.filter(node, filterActive); });
30771 // result of filter for this node
30772 if (filterActive) {
30773 rowNode.childrenAfterFilter = rowNode.childrenAfterGroup.filter(function (childNode) {
30774 // a group is included in the result if it has any children of it's own.
30775 // by this stage, the child groups are already filtered
30776 var passBecauseChildren = childNode.childrenAfterFilter && childNode.childrenAfterFilter.length > 0;
30777 // both leaf level nodes and tree data nodes have data. these get added if
30778 // the data passes the filter
30779 var passBecauseDataPasses = childNode.data && _this.filterManager.doesRowPassFilter(childNode);
30780 // note - tree data nodes pass either if a) they pass themselves or b) any children of that node pass
30781 return passBecauseChildren || passBecauseDataPasses;
30782 });
30783 }
30784 else {
30785 // if not filtering, the result is the original list
30786 rowNode.childrenAfterFilter = rowNode.childrenAfterGroup;
30787 }
30788 this.setAllChildrenCount(rowNode);
30789 }
30790 else {
30791 rowNode.childrenAfterFilter = rowNode.childrenAfterGroup;
30792 rowNode.setAllChildrenCount(null);
30793 }
30794 };
30795 FilterService.prototype.setAllChildrenCountTreeData = function (rowNode) {
30796 // for tree data, we include all children, groups and leafs
30797 var allChildrenCount = 0;
30798 rowNode.childrenAfterFilter.forEach(function (child) {
30799 // include child itself
30800 allChildrenCount++;
30801 // include children of children
30802 allChildrenCount += child.allChildrenCount;
30803 });
30804 rowNode.setAllChildrenCount(allChildrenCount);
30805 };
30806 FilterService.prototype.setAllChildrenCountGridGrouping = function (rowNode) {
30807 // for grid data, we only count the leafs
30808 var allChildrenCount = 0;
30809 rowNode.childrenAfterFilter.forEach(function (child) {
30810 if (child.group) {
30811 allChildrenCount += child.allChildrenCount;
30812 }
30813 else {
30814 allChildrenCount++;
30815 }
30816 });
30817 rowNode.setAllChildrenCount(allChildrenCount);
30818 };
30819 FilterService.prototype.setAllChildrenCount = function (rowNode) {
30820 if (this.doingTreeData) {
30821 this.setAllChildrenCountTreeData(rowNode);
30822 }
30823 else {
30824 this.setAllChildrenCountGridGrouping(rowNode);
30825 }
30826 };
30827 __decorate([
30828 context_1.Autowired('filterManager'),
30829 __metadata("design:type", filterManager_1.FilterManager)
30830 ], FilterService.prototype, "filterManager", void 0);
30831 __decorate([
30832 context_1.Autowired('gridOptionsWrapper'),
30833 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
30834 ], FilterService.prototype, "gridOptionsWrapper", void 0);
30835 __decorate([
30836 context_1.PostConstruct,
30837 __metadata("design:type", Function),
30838 __metadata("design:paramtypes", []),
30839 __metadata("design:returntype", void 0)
30840 ], FilterService.prototype, "postConstruct", null);
30841 FilterService = __decorate([
30842 context_1.Bean("filterService")
30843 ], FilterService);
30844 return FilterService;
30845}());
30846exports.FilterService = FilterService;
30847
30848
30849/***/ }),
30850/* 113 */
30851/***/ (function(module, exports, __webpack_require__) {
30852
30853"use strict";
30854/**
30855 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
30856 * @version v18.1.2
30857 * @link http://www.ag-grid.com/
30858 * @license MIT
30859 */
30860
30861var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
30862 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
30863 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
30864 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
30865 return c > 3 && r && Object.defineProperty(target, key, r), r;
30866};
30867var __metadata = (this && this.__metadata) || function (k, v) {
30868 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
30869};
30870Object.defineProperty(exports, "__esModule", { value: true });
30871var context_1 = __webpack_require__(0);
30872var gridOptionsWrapper_1 = __webpack_require__(2);
30873var sortService_1 = __webpack_require__(114);
30874var SortStage = (function () {
30875 function SortStage() {
30876 }
30877 SortStage.prototype.execute = function (params) {
30878 // if the sorting is already done by the server, then we should not do it here
30879 if (this.gridOptionsWrapper.isEnableServerSideSorting()) {
30880 this.sortService.sort(params.rowNode, null);
30881 }
30882 else {
30883 this.sortService.sortAccordingToColumnsState(params.rowNode);
30884 }
30885 };
30886 __decorate([
30887 context_1.Autowired('gridOptionsWrapper'),
30888 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
30889 ], SortStage.prototype, "gridOptionsWrapper", void 0);
30890 __decorate([
30891 context_1.Autowired('sortService'),
30892 __metadata("design:type", sortService_1.SortService)
30893 ], SortStage.prototype, "sortService", void 0);
30894 SortStage = __decorate([
30895 context_1.Bean('sortStage')
30896 ], SortStage);
30897 return SortStage;
30898}());
30899exports.SortStage = SortStage;
30900
30901
30902/***/ }),
30903/* 114 */
30904/***/ (function(module, exports, __webpack_require__) {
30905
30906"use strict";
30907/**
30908 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
30909 * @version v18.1.2
30910 * @link http://www.ag-grid.com/
30911 * @license MIT
30912 */
30913
30914var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
30915 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
30916 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
30917 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
30918 return c > 3 && r && Object.defineProperty(target, key, r), r;
30919};
30920var __metadata = (this && this.__metadata) || function (k, v) {
30921 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
30922};
30923Object.defineProperty(exports, "__esModule", { value: true });
30924var context_1 = __webpack_require__(0);
30925var sortController_1 = __webpack_require__(26);
30926var utils_1 = __webpack_require__(1);
30927var valueService_1 = __webpack_require__(17);
30928var gridOptionsWrapper_1 = __webpack_require__(2);
30929var columnController_1 = __webpack_require__(4);
30930var SortService = (function () {
30931 function SortService() {
30932 }
30933 SortService.prototype.init = function () {
30934 this.postSortFunc = this.gridOptionsWrapper.getPostSortFunc();
30935 };
30936 SortService.prototype.sortAccordingToColumnsState = function (rowNode) {
30937 var sortOptions = this.sortController.getSortForRowController();
30938 this.sort(rowNode, sortOptions);
30939 };
30940 SortService.prototype.sort = function (rowNode, sortOptions) {
30941 var _this = this;
30942 rowNode.childrenAfterSort = rowNode.childrenAfterFilter.slice(0);
30943 // we clear out the 'pull down open parents' first, as the values mix up the sorting
30944 this.pullDownDataForHideOpenParents(rowNode, true);
30945 var sortActive = utils_1._.exists(sortOptions) && sortOptions.length > 0;
30946 if (sortActive) {
30947 // RE https://ag-grid.atlassian.net/browse/AG-444
30948 //Javascript sort is non deterministic when all the array items are equals
30949 //ie Comparator always returns 0, so if you want to ensure the array keeps its
30950 //order, then you need to add an additional sorting condition manually, in this
30951 //case we are going to inspect the original array position
30952 var sortedRowNodes = rowNode.childrenAfterSort.map(function (it, pos) {
30953 return { currentPos: pos, rowNode: it };
30954 });
30955 sortedRowNodes.sort(this.compareRowNodes.bind(this, sortOptions));
30956 rowNode.childrenAfterSort = sortedRowNodes.map(function (sorted) { return sorted.rowNode; });
30957 }
30958 this.updateChildIndexes(rowNode);
30959 this.pullDownDataForHideOpenParents(rowNode, false);
30960 // sort any groups recursively
30961 rowNode.childrenAfterFilter.forEach(function (child) {
30962 if (child.hasChildren()) {
30963 _this.sort(child, sortOptions);
30964 }
30965 });
30966 if (this.postSortFunc) {
30967 this.postSortFunc(rowNode.childrenAfterSort);
30968 }
30969 };
30970 SortService.prototype.compareRowNodes = function (sortOptions, sortedNodeA, sortedNodeB) {
30971 var nodeA = sortedNodeA.rowNode;
30972 var nodeB = sortedNodeB.rowNode;
30973 // Iterate columns, return the first that doesn't match
30974 for (var i = 0, len = sortOptions.length; i < len; i++) {
30975 var sortOption = sortOptions[i];
30976 // let compared = compare(nodeA, nodeB, sortOption.column, sortOption.inverter === -1);
30977 var isInverted = sortOption.inverter === -1;
30978 var valueA = this.getValue(nodeA, sortOption.column);
30979 var valueB = this.getValue(nodeB, sortOption.column);
30980 var comparatorResult = void 0;
30981 if (sortOption.column.getColDef().comparator) {
30982 //if comparator provided, use it
30983 comparatorResult = sortOption.column.getColDef().comparator(valueA, valueB, nodeA, nodeB, isInverted);
30984 }
30985 else {
30986 //otherwise do our own comparison
30987 comparatorResult = utils_1._.defaultComparator(valueA, valueB, this.gridOptionsWrapper.isAccentedSort());
30988 }
30989 if (comparatorResult !== 0) {
30990 return comparatorResult * sortOption.inverter;
30991 }
30992 }
30993 // All matched, we make is so that the original sort order is kept:
30994 return sortedNodeA.currentPos - sortedNodeB.currentPos;
30995 };
30996 SortService.prototype.getValue = function (nodeA, column) {
30997 return this.valueService.getValue(column, nodeA);
30998 };
30999 SortService.prototype.updateChildIndexes = function (rowNode) {
31000 if (utils_1._.missing(rowNode.childrenAfterSort)) {
31001 return;
31002 }
31003 rowNode.childrenAfterSort.forEach(function (child, index) {
31004 var firstChild = index === 0;
31005 var lastChild = index === rowNode.childrenAfterSort.length - 1;
31006 child.setFirstChild(firstChild);
31007 child.setLastChild(lastChild);
31008 child.setChildIndex(index);
31009 });
31010 };
31011 SortService.prototype.pullDownDataForHideOpenParents = function (rowNode, clearOperation) {
31012 var _this = this;
31013 if (utils_1._.missing(rowNode.childrenAfterSort)) {
31014 return;
31015 }
31016 if (!this.gridOptionsWrapper.isGroupHideOpenParents()) {
31017 return;
31018 }
31019 rowNode.childrenAfterSort.forEach(function (childRowNode) {
31020 var groupDisplayCols = _this.columnController.getGroupDisplayColumns();
31021 groupDisplayCols.forEach(function (groupDisplayCol) {
31022 var showRowGroup = groupDisplayCol.getColDef().showRowGroup;
31023 if (typeof showRowGroup !== 'string') {
31024 console.error('ag-Grid: groupHideOpenParents only works when specifying specific columns for colDef.showRowGroup');
31025 return;
31026 }
31027 var displayingGroupKey = showRowGroup;
31028 var rowGroupColumn = _this.columnController.getPrimaryColumn(displayingGroupKey);
31029 var thisRowNodeMatches = rowGroupColumn === childRowNode.rowGroupColumn;
31030 if (thisRowNodeMatches) {
31031 return;
31032 }
31033 if (clearOperation) {
31034 // if doing a clear operation, we clear down the value for every possible group column
31035 childRowNode.setGroupValue(groupDisplayCol.getId(), null);
31036 }
31037 else {
31038 // if doing a set operation, we set only where the pull down is to occur
31039 var parentToStealFrom = childRowNode.getFirstChildOfFirstChild(rowGroupColumn);
31040 if (parentToStealFrom) {
31041 childRowNode.setGroupValue(groupDisplayCol.getId(), parentToStealFrom.key);
31042 }
31043 }
31044 });
31045 });
31046 };
31047 __decorate([
31048 context_1.Autowired('sortController'),
31049 __metadata("design:type", sortController_1.SortController)
31050 ], SortService.prototype, "sortController", void 0);
31051 __decorate([
31052 context_1.Autowired('columnController'),
31053 __metadata("design:type", columnController_1.ColumnController)
31054 ], SortService.prototype, "columnController", void 0);
31055 __decorate([
31056 context_1.Autowired('valueService'),
31057 __metadata("design:type", valueService_1.ValueService)
31058 ], SortService.prototype, "valueService", void 0);
31059 __decorate([
31060 context_1.Autowired('gridOptionsWrapper'),
31061 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
31062 ], SortService.prototype, "gridOptionsWrapper", void 0);
31063 __decorate([
31064 context_1.PostConstruct,
31065 __metadata("design:type", Function),
31066 __metadata("design:paramtypes", []),
31067 __metadata("design:returntype", void 0)
31068 ], SortService.prototype, "init", null);
31069 SortService = __decorate([
31070 context_1.Bean('sortService')
31071 ], SortService);
31072 return SortService;
31073}());
31074exports.SortService = SortService;
31075
31076
31077/***/ }),
31078/* 115 */
31079/***/ (function(module, exports, __webpack_require__) {
31080
31081"use strict";
31082/**
31083 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
31084 * @version v18.1.2
31085 * @link http://www.ag-grid.com/
31086 * @license MIT
31087 */
31088
31089var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
31090 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
31091 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
31092 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
31093 return c > 3 && r && Object.defineProperty(target, key, r), r;
31094};
31095var __metadata = (this && this.__metadata) || function (k, v) {
31096 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
31097};
31098Object.defineProperty(exports, "__esModule", { value: true });
31099var context_1 = __webpack_require__(0);
31100var rowNode_1 = __webpack_require__(18);
31101var utils_1 = __webpack_require__(1);
31102var gridOptionsWrapper_1 = __webpack_require__(2);
31103var selectionController_1 = __webpack_require__(19);
31104var eventService_1 = __webpack_require__(3);
31105var columnController_1 = __webpack_require__(4);
31106var FlattenStage = (function () {
31107 function FlattenStage() {
31108 }
31109 FlattenStage.prototype.execute = function (params) {
31110 var rootNode = params.rowNode;
31111 // even if not doing grouping, we do the mapping, as the client might
31112 // of passed in data that already has a grouping in it somewhere
31113 var result = [];
31114 // putting value into a wrapper so it's passed by reference
31115 var nextRowTop = { value: 0 };
31116 var skipLeafNodes = this.columnController.isPivotMode();
31117 // if we are reducing, and not grouping, then we want to show the root node, as that
31118 // is where the pivot values are
31119 var showRootNode = skipLeafNodes && rootNode.leafGroup;
31120 var topList = showRootNode ? [rootNode] : rootNode.childrenAfterSort;
31121 // set all row tops to null, then set row tops on all visible rows. if we don't
31122 // do this, then the algorithm below only sets row tops, old row tops from old rows
31123 // will still lie around
31124 this.resetRowTops(rootNode);
31125 this.recursivelyAddToRowsToDisplay(topList, result, nextRowTop, skipLeafNodes, 0);
31126 // don't show total footer when showRootNode is true (i.e. in pivot mode and no groups)
31127 var includeGroupTotalFooter = !showRootNode && this.gridOptionsWrapper.isGroupIncludeTotalFooter();
31128 if (includeGroupTotalFooter) {
31129 this.ensureFooterNodeExists(rootNode);
31130 this.addRowNodeToRowsToDisplay(rootNode.sibling, result, nextRowTop, 0);
31131 }
31132 return result;
31133 };
31134 FlattenStage.prototype.resetRowTops = function (rowNode) {
31135 rowNode.clearRowTop();
31136 if (rowNode.hasChildren()) {
31137 if (rowNode.childrenAfterGroup) {
31138 for (var i = 0; i < rowNode.childrenAfterGroup.length; i++) {
31139 this.resetRowTops(rowNode.childrenAfterGroup[i]);
31140 }
31141 }
31142 if (rowNode.sibling) {
31143 rowNode.sibling.clearRowTop();
31144 }
31145 }
31146 };
31147 FlattenStage.prototype.recursivelyAddToRowsToDisplay = function (rowsToFlatten, result, nextRowTop, skipLeafNodes, uiLevel) {
31148 if (utils_1.Utils.missingOrEmpty(rowsToFlatten)) {
31149 return;
31150 }
31151 var groupSuppressRow = this.gridOptionsWrapper.isGroupSuppressRow();
31152 var hideOpenParents = this.gridOptionsWrapper.isGroupHideOpenParents();
31153 // these two are mutually exclusive, so if first set, we don't set the second
31154 var groupRemoveSingleChildren = this.gridOptionsWrapper.isGroupRemoveSingleChildren();
31155 var groupRemoveLowestSingleChildren = !groupRemoveSingleChildren && this.gridOptionsWrapper.isGroupRemoveLowestSingleChildren();
31156 for (var i = 0; i < rowsToFlatten.length; i++) {
31157 var rowNode = rowsToFlatten[i];
31158 // check all these cases, for working out if this row should be included in the final mapped list
31159 var isParent = rowNode.hasChildren();
31160 var isGroupSuppressedNode = groupSuppressRow && isParent;
31161 var isSkippedLeafNode = skipLeafNodes && !isParent;
31162 var isRemovedSingleChildrenGroup = groupRemoveSingleChildren && isParent && rowNode.childrenAfterGroup.length === 1;
31163 var isRemovedLowestSingleChildrenGroup = groupRemoveLowestSingleChildren && isParent && rowNode.leafGroup && rowNode.childrenAfterGroup.length === 1;
31164 // hide open parents means when group is open, we don't show it. we also need to make sure the
31165 // group is expandable in the first place (as leaf groups are not expandable if pivot mode is on).
31166 // the UI will never allow expanding leaf groups, however the user might via the API (or menu option 'expand all')
31167 var neverAllowToExpand = skipLeafNodes && rowNode.leafGroup;
31168 var isHiddenOpenParent = hideOpenParents && rowNode.expanded && (!neverAllowToExpand);
31169 var thisRowShouldBeRendered = !isSkippedLeafNode && !isGroupSuppressedNode && !isHiddenOpenParent && !isRemovedSingleChildrenGroup && !isRemovedLowestSingleChildrenGroup;
31170 if (thisRowShouldBeRendered) {
31171 this.addRowNodeToRowsToDisplay(rowNode, result, nextRowTop, uiLevel);
31172 }
31173 // if we are pivoting, we never map below the leaf group
31174 if (skipLeafNodes && rowNode.leafGroup) {
31175 continue;
31176 }
31177 if (isParent) {
31178 var excludedParent = isRemovedSingleChildrenGroup || isRemovedLowestSingleChildrenGroup;
31179 // we traverse the group if it is expended, however we always traverse if the parent node
31180 // was removed (as the group will never be opened if it is not displayed, we show the children instead)
31181 if (rowNode.expanded || excludedParent) {
31182 // if the parent was excluded, then ui level is that of the parent
31183 var uiLevelForChildren = excludedParent ? uiLevel : uiLevel + 1;
31184 this.recursivelyAddToRowsToDisplay(rowNode.childrenAfterSort, result, nextRowTop, skipLeafNodes, uiLevelForChildren);
31185 // put a footer in if user is looking for it
31186 if (this.gridOptionsWrapper.isGroupIncludeFooter()) {
31187 this.ensureFooterNodeExists(rowNode);
31188 this.addRowNodeToRowsToDisplay(rowNode.sibling, result, nextRowTop, uiLevel);
31189 }
31190 }
31191 else {
31192 }
31193 }
31194 else if (rowNode.master && rowNode.expanded) {
31195 var detailNode = this.createDetailNode(rowNode);
31196 this.addRowNodeToRowsToDisplay(detailNode, result, nextRowTop, uiLevel);
31197 }
31198 }
31199 };
31200 // duplicated method, it's also in floatingRowModel
31201 FlattenStage.prototype.addRowNodeToRowsToDisplay = function (rowNode, result, nextRowTop, uiLevel) {
31202 result.push(rowNode);
31203 if (utils_1.Utils.missing(rowNode.rowHeight)) {
31204 var rowHeight = this.gridOptionsWrapper.getRowHeightForNode(rowNode);
31205 rowNode.setRowHeight(rowHeight);
31206 }
31207 rowNode.setUiLevel(uiLevel);
31208 rowNode.setRowTop(nextRowTop.value);
31209 rowNode.setRowIndex(result.length - 1);
31210 nextRowTop.value += rowNode.rowHeight;
31211 };
31212 FlattenStage.prototype.ensureFooterNodeExists = function (groupNode) {
31213 // only create footer node once, otherwise we have daemons and
31214 // the animate screws up with the daemons hanging around
31215 if (utils_1.Utils.exists(groupNode.sibling)) {
31216 return;
31217 }
31218 var footerNode = new rowNode_1.RowNode();
31219 this.context.wireBean(footerNode);
31220 Object.keys(groupNode).forEach(function (key) {
31221 footerNode[key] = groupNode[key];
31222 });
31223 footerNode.footer = true;
31224 footerNode.rowTop = null;
31225 footerNode.oldRowTop = null;
31226 if (utils_1.Utils.exists(footerNode.id)) {
31227 footerNode.id = 'rowGroupFooter_' + footerNode.id;
31228 }
31229 // get both header and footer to reference each other as siblings. this is never undone,
31230 // only overwritten. so if a group is expanded, then contracted, it will have a ghost
31231 // sibling - but that's fine, as we can ignore this if the header is contracted.
31232 footerNode.sibling = groupNode;
31233 groupNode.sibling = footerNode;
31234 };
31235 FlattenStage.prototype.createDetailNode = function (masterNode) {
31236 if (utils_1.Utils.exists(masterNode.detailNode)) {
31237 return masterNode.detailNode;
31238 }
31239 else {
31240 var detailNode = new rowNode_1.RowNode();
31241 this.context.wireBean(detailNode);
31242 detailNode.detail = true;
31243 // flower was renamed to 'detail', but keeping for backwards compatibility
31244 detailNode.flower = detailNode.detail;
31245 detailNode.parent = masterNode;
31246 if (utils_1.Utils.exists(masterNode.id)) {
31247 detailNode.id = 'detail_' + masterNode.id;
31248 }
31249 detailNode.data = masterNode.data;
31250 detailNode.level = masterNode.level + 1;
31251 masterNode.detailNode = detailNode;
31252 masterNode.childFlower = masterNode.detailNode; // for backwards compatibility
31253 return detailNode;
31254 }
31255 };
31256 __decorate([
31257 context_1.Autowired('gridOptionsWrapper'),
31258 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
31259 ], FlattenStage.prototype, "gridOptionsWrapper", void 0);
31260 __decorate([
31261 context_1.Autowired('selectionController'),
31262 __metadata("design:type", selectionController_1.SelectionController)
31263 ], FlattenStage.prototype, "selectionController", void 0);
31264 __decorate([
31265 context_1.Autowired('eventService'),
31266 __metadata("design:type", eventService_1.EventService)
31267 ], FlattenStage.prototype, "eventService", void 0);
31268 __decorate([
31269 context_1.Autowired('context'),
31270 __metadata("design:type", context_1.Context)
31271 ], FlattenStage.prototype, "context", void 0);
31272 __decorate([
31273 context_1.Autowired('columnController'),
31274 __metadata("design:type", columnController_1.ColumnController)
31275 ], FlattenStage.prototype, "columnController", void 0);
31276 FlattenStage = __decorate([
31277 context_1.Bean('flattenStage')
31278 ], FlattenStage);
31279 return FlattenStage;
31280}());
31281exports.FlattenStage = FlattenStage;
31282
31283
31284/***/ }),
31285/* 116 */
31286/***/ (function(module, exports, __webpack_require__) {
31287
31288"use strict";
31289/**
31290 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
31291 * @version v18.1.2
31292 * @link http://www.ag-grid.com/
31293 * @license MIT
31294 */
31295
31296var __extends = (this && this.__extends) || (function () {
31297 var extendStatics = Object.setPrototypeOf ||
31298 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
31299 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
31300 return function (d, b) {
31301 extendStatics(d, b);
31302 function __() { this.constructor = d; }
31303 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
31304 };
31305})();
31306var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
31307 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
31308 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
31309 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
31310 return c > 3 && r && Object.defineProperty(target, key, r), r;
31311};
31312var __metadata = (this && this.__metadata) || function (k, v) {
31313 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
31314};
31315Object.defineProperty(exports, "__esModule", { value: true });
31316var utils_1 = __webpack_require__(1);
31317var gridOptionsWrapper_1 = __webpack_require__(2);
31318var context_1 = __webpack_require__(0);
31319var eventService_1 = __webpack_require__(3);
31320var selectionController_1 = __webpack_require__(19);
31321var events_1 = __webpack_require__(5);
31322var sortController_1 = __webpack_require__(26);
31323var filterManager_1 = __webpack_require__(20);
31324var constants_1 = __webpack_require__(9);
31325var infiniteCache_1 = __webpack_require__(139);
31326var beanStub_1 = __webpack_require__(13);
31327var rowNodeCache_1 = __webpack_require__(89);
31328var rowNodeBlockLoader_1 = __webpack_require__(117);
31329var gridApi_1 = __webpack_require__(6);
31330var columnApi_1 = __webpack_require__(7);
31331var InfiniteRowModel = (function (_super) {
31332 __extends(InfiniteRowModel, _super);
31333 function InfiniteRowModel() {
31334 return _super !== null && _super.apply(this, arguments) || this;
31335 }
31336 InfiniteRowModel.prototype.getRowBounds = function (index) {
31337 return {
31338 rowHeight: this.rowHeight,
31339 rowTop: this.rowHeight * index
31340 };
31341 };
31342 InfiniteRowModel.prototype.init = function () {
31343 var _this = this;
31344 if (!this.gridOptionsWrapper.isRowModelInfinite()) {
31345 return;
31346 }
31347 this.rowHeight = this.gridOptionsWrapper.getRowHeightAsNumber();
31348 this.addEventListeners();
31349 this.setDatasource(this.gridOptionsWrapper.getDatasource());
31350 this.addDestroyFunc(function () { return _this.destroyCache(); });
31351 };
31352 InfiniteRowModel.prototype.destroyDatasource = function () {
31353 if (this.datasource && this.datasource.destroy) {
31354 this.datasource.destroy();
31355 }
31356 this.datasource = null;
31357 };
31358 InfiniteRowModel.prototype.isLastRowFound = function () {
31359 return this.infiniteCache ? this.infiniteCache.isMaxRowFound() : false;
31360 };
31361 InfiniteRowModel.prototype.addEventListeners = function () {
31362 this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_FILTER_CHANGED, this.onFilterChanged.bind(this));
31363 this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_SORT_CHANGED, this.onSortChanged.bind(this));
31364 this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_COLUMN_EVERYTHING_CHANGED, this.onColumnEverything.bind(this));
31365 };
31366 InfiniteRowModel.prototype.onFilterChanged = function () {
31367 if (this.gridOptionsWrapper.isEnableServerSideFilter()) {
31368 this.reset();
31369 }
31370 };
31371 InfiniteRowModel.prototype.onSortChanged = function () {
31372 if (this.gridOptionsWrapper.isEnableServerSideSorting()) {
31373 this.reset();
31374 }
31375 };
31376 InfiniteRowModel.prototype.onColumnEverything = function () {
31377 // if the columns get reset, then this means the sort order could be impacted
31378 if (this.gridOptionsWrapper.isEnableServerSideSorting()) {
31379 this.reset();
31380 }
31381 };
31382 InfiniteRowModel.prototype.destroy = function () {
31383 _super.prototype.destroy.call(this);
31384 };
31385 InfiniteRowModel.prototype.getType = function () {
31386 return constants_1.Constants.ROW_MODEL_TYPE_INFINITE;
31387 };
31388 InfiniteRowModel.prototype.setDatasource = function (datasource) {
31389 this.destroyDatasource();
31390 this.datasource = datasource;
31391 // only reset if we have a valid datasource to working with
31392 if (datasource) {
31393 this.checkForDeprecated();
31394 this.reset();
31395 }
31396 };
31397 InfiniteRowModel.prototype.checkForDeprecated = function () {
31398 var ds = this.datasource;
31399 // the number of concurrent loads we are allowed to the server
31400 if (utils_1.Utils.exists(ds.maxConcurrentRequests)) {
31401 console.error('ag-Grid: since version 5.1.x, maxConcurrentRequests is replaced with grid property maxConcurrentDatasourceRequests');
31402 }
31403 if (utils_1.Utils.exists(ds.maxPagesInCache)) {
31404 console.error('ag-Grid: since version 5.1.x, maxPagesInCache is replaced with grid property maxPagesInPaginationCache');
31405 }
31406 if (utils_1.Utils.exists(ds.overflowSize)) {
31407 console.error('ag-Grid: since version 5.1.x, overflowSize is replaced with grid property paginationOverflowSize');
31408 }
31409 if (utils_1.Utils.exists(ds.blockSize)) {
31410 console.error('ag-Grid: since version 5.1.x, pageSize/blockSize is replaced with grid property infinitePageSize');
31411 }
31412 };
31413 InfiniteRowModel.prototype.isEmpty = function () {
31414 return utils_1.Utils.missing(this.infiniteCache);
31415 };
31416 InfiniteRowModel.prototype.isRowsToRender = function () {
31417 return utils_1.Utils.exists(this.infiniteCache);
31418 };
31419 InfiniteRowModel.prototype.getNodesInRangeForSelection = function (firstInRange, lastInRange) {
31420 return this.infiniteCache.getRowNodesInRange(firstInRange, lastInRange);
31421 };
31422 InfiniteRowModel.prototype.reset = function () {
31423 // important to return here, as the user could be setting filter or sort before
31424 // data-source is set
31425 if (utils_1.Utils.missing(this.datasource)) {
31426 return;
31427 }
31428 // if user is providing id's, then this means we can keep the selection between datsource hits,
31429 // as the rows will keep their unique id's even if, for example, server side sorting or filtering
31430 // is done.
31431 var userGeneratingIds = utils_1.Utils.exists(this.gridOptionsWrapper.getRowNodeIdFunc());
31432 if (!userGeneratingIds) {
31433 this.selectionController.reset();
31434 }
31435 this.resetCache();
31436 var event = this.createModelUpdatedEvent();
31437 this.eventService.dispatchEvent(event);
31438 };
31439 InfiniteRowModel.prototype.createModelUpdatedEvent = function () {
31440 return {
31441 type: events_1.Events.EVENT_MODEL_UPDATED,
31442 api: this.gridApi,
31443 columnApi: this.columnApi,
31444 // not sure if these should all be false - noticed if after implementing,
31445 // maybe they should be true?
31446 newPage: false,
31447 newData: false,
31448 keepRenderedRows: false,
31449 animate: false
31450 };
31451 };
31452 InfiniteRowModel.prototype.resetCache = function () {
31453 // if not first time creating a cache, need to destroy the old one
31454 this.destroyCache();
31455 var maxConcurrentRequests = this.gridOptionsWrapper.getMaxConcurrentDatasourceRequests();
31456 // there is a bi-directional dependency between the loader and the cache,
31457 // so we create loader here, and then pass dependencies in setDependencies() method later
31458 this.rowNodeBlockLoader = new rowNodeBlockLoader_1.RowNodeBlockLoader(maxConcurrentRequests);
31459 this.context.wireBean(this.rowNodeBlockLoader);
31460 var cacheSettings = {
31461 // the user provided datasource
31462 datasource: this.datasource,
31463 // sort and filter model
31464 filterModel: this.filterManager.getFilterModel(),
31465 sortModel: this.sortController.getSortModel(),
31466 rowNodeBlockLoader: this.rowNodeBlockLoader,
31467 // properties - this way we take a snapshot of them, so if user changes any, they will be
31468 // used next time we create a new cache, which is generally after a filter or sort change,
31469 // or a new datasource is set
31470 maxConcurrentRequests: maxConcurrentRequests,
31471 overflowSize: this.gridOptionsWrapper.getCacheOverflowSize(),
31472 initialRowCount: this.gridOptionsWrapper.getInfiniteInitialRowCount(),
31473 maxBlocksInCache: this.gridOptionsWrapper.getMaxBlocksInCache(),
31474 blockSize: this.gridOptionsWrapper.getCacheBlockSize(),
31475 rowHeight: this.gridOptionsWrapper.getRowHeightAsNumber(),
31476 // the cache could create this, however it is also used by the pages, so handy to create it
31477 // here as the settings are also passed to the pages
31478 lastAccessedSequence: new utils_1.NumberSequence()
31479 };
31480 // set defaults
31481 if (!(cacheSettings.maxConcurrentRequests >= 1)) {
31482 cacheSettings.maxConcurrentRequests = 2;
31483 }
31484 // page size needs to be 1 or greater. having it at 1 would be silly, as you would be hitting the
31485 // server for one page at a time. so the default if not specified is 100.
31486 if (!(cacheSettings.blockSize >= 1)) {
31487 cacheSettings.blockSize = 100;
31488 }
31489 // if user doesn't give initial rows to display, we assume zero
31490 if (!(cacheSettings.initialRowCount >= 1)) {
31491 cacheSettings.initialRowCount = 0;
31492 }
31493 // if user doesn't provide overflow, we use default overflow of 1, so user can scroll past
31494 // the current page and request first row of next page
31495 if (!(cacheSettings.overflowSize >= 1)) {
31496 cacheSettings.overflowSize = 1;
31497 }
31498 this.infiniteCache = new infiniteCache_1.InfiniteCache(cacheSettings);
31499 this.context.wireBean(this.infiniteCache);
31500 this.infiniteCache.addEventListener(rowNodeCache_1.RowNodeCache.EVENT_CACHE_UPDATED, this.onCacheUpdated.bind(this));
31501 };
31502 InfiniteRowModel.prototype.destroyCache = function () {
31503 if (this.infiniteCache) {
31504 this.infiniteCache.destroy();
31505 this.infiniteCache = null;
31506 }
31507 if (this.rowNodeBlockLoader) {
31508 this.rowNodeBlockLoader.destroy();
31509 this.rowNodeBlockLoader = null;
31510 }
31511 };
31512 InfiniteRowModel.prototype.onCacheUpdated = function () {
31513 var event = this.createModelUpdatedEvent();
31514 this.eventService.dispatchEvent(event);
31515 };
31516 InfiniteRowModel.prototype.getRow = function (rowIndex) {
31517 return this.infiniteCache ? this.infiniteCache.getRow(rowIndex) : null;
31518 };
31519 InfiniteRowModel.prototype.getRowNode = function (id) {
31520 var result = null;
31521 this.forEachNode(function (rowNode) {
31522 if (rowNode.id === id) {
31523 result = rowNode;
31524 }
31525 });
31526 return result;
31527 };
31528 InfiniteRowModel.prototype.forEachNode = function (callback) {
31529 if (this.infiniteCache) {
31530 this.infiniteCache.forEachNodeDeep(callback, new utils_1.NumberSequence());
31531 }
31532 };
31533 InfiniteRowModel.prototype.getCurrentPageHeight = function () {
31534 return this.getRowCount() * this.rowHeight;
31535 };
31536 InfiniteRowModel.prototype.getRowIndexAtPixel = function (pixel) {
31537 if (this.rowHeight !== 0) {
31538 var rowIndexForPixel = Math.floor(pixel / this.rowHeight);
31539 if (rowIndexForPixel > this.getPageLastRow()) {
31540 return this.getPageLastRow();
31541 }
31542 else {
31543 return rowIndexForPixel;
31544 }
31545 }
31546 else {
31547 return 0;
31548 }
31549 };
31550 InfiniteRowModel.prototype.getPageFirstRow = function () {
31551 return 0;
31552 };
31553 InfiniteRowModel.prototype.getPageLastRow = function () {
31554 return this.infiniteCache ? this.infiniteCache.getVirtualRowCount() - 1 : 0;
31555 };
31556 InfiniteRowModel.prototype.getRowCount = function () {
31557 return this.infiniteCache ? this.infiniteCache.getVirtualRowCount() : 0;
31558 };
31559 InfiniteRowModel.prototype.updateRowData = function (transaction) {
31560 if (utils_1.Utils.exists(transaction.remove) || utils_1.Utils.exists(transaction.update)) {
31561 console.warn('ag-Grid: updateRowData for InfiniteRowModel does not support remove or update, only add');
31562 return;
31563 }
31564 if (utils_1.Utils.missing(transaction.addIndex)) {
31565 console.warn('ag-Grid: updateRowData for InfiniteRowModel requires add and addIndex to be set');
31566 return;
31567 }
31568 if (this.infiniteCache) {
31569 this.infiniteCache.insertItemsAtIndex(transaction.addIndex, transaction.add);
31570 }
31571 };
31572 InfiniteRowModel.prototype.isRowPresent = function (rowNode) {
31573 return false;
31574 };
31575 InfiniteRowModel.prototype.refreshCache = function () {
31576 if (this.infiniteCache) {
31577 this.infiniteCache.refreshCache();
31578 }
31579 };
31580 InfiniteRowModel.prototype.purgeCache = function () {
31581 if (this.infiniteCache) {
31582 this.infiniteCache.purgeCache();
31583 }
31584 };
31585 InfiniteRowModel.prototype.getVirtualRowCount = function () {
31586 if (this.infiniteCache) {
31587 return this.infiniteCache.getVirtualRowCount();
31588 }
31589 else {
31590 return null;
31591 }
31592 };
31593 InfiniteRowModel.prototype.isMaxRowFound = function () {
31594 if (this.infiniteCache) {
31595 return this.infiniteCache.isMaxRowFound();
31596 }
31597 };
31598 InfiniteRowModel.prototype.setVirtualRowCount = function (rowCount, maxRowFound) {
31599 if (this.infiniteCache) {
31600 this.infiniteCache.setVirtualRowCount(rowCount, maxRowFound);
31601 }
31602 };
31603 InfiniteRowModel.prototype.getBlockState = function () {
31604 if (this.rowNodeBlockLoader) {
31605 return this.rowNodeBlockLoader.getBlockState();
31606 }
31607 else {
31608 return null;
31609 }
31610 };
31611 __decorate([
31612 context_1.Autowired('gridOptionsWrapper'),
31613 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
31614 ], InfiniteRowModel.prototype, "gridOptionsWrapper", void 0);
31615 __decorate([
31616 context_1.Autowired('filterManager'),
31617 __metadata("design:type", filterManager_1.FilterManager)
31618 ], InfiniteRowModel.prototype, "filterManager", void 0);
31619 __decorate([
31620 context_1.Autowired('sortController'),
31621 __metadata("design:type", sortController_1.SortController)
31622 ], InfiniteRowModel.prototype, "sortController", void 0);
31623 __decorate([
31624 context_1.Autowired('selectionController'),
31625 __metadata("design:type", selectionController_1.SelectionController)
31626 ], InfiniteRowModel.prototype, "selectionController", void 0);
31627 __decorate([
31628 context_1.Autowired('eventService'),
31629 __metadata("design:type", eventService_1.EventService)
31630 ], InfiniteRowModel.prototype, "eventService", void 0);
31631 __decorate([
31632 context_1.Autowired('context'),
31633 __metadata("design:type", context_1.Context)
31634 ], InfiniteRowModel.prototype, "context", void 0);
31635 __decorate([
31636 context_1.Autowired('gridApi'),
31637 __metadata("design:type", gridApi_1.GridApi)
31638 ], InfiniteRowModel.prototype, "gridApi", void 0);
31639 __decorate([
31640 context_1.Autowired('columnApi'),
31641 __metadata("design:type", columnApi_1.ColumnApi)
31642 ], InfiniteRowModel.prototype, "columnApi", void 0);
31643 __decorate([
31644 context_1.PostConstruct,
31645 __metadata("design:type", Function),
31646 __metadata("design:paramtypes", []),
31647 __metadata("design:returntype", void 0)
31648 ], InfiniteRowModel.prototype, "init", null);
31649 __decorate([
31650 context_1.PreDestroy,
31651 __metadata("design:type", Function),
31652 __metadata("design:paramtypes", []),
31653 __metadata("design:returntype", void 0)
31654 ], InfiniteRowModel.prototype, "destroyDatasource", null);
31655 __decorate([
31656 context_1.PreDestroy,
31657 __metadata("design:type", Function),
31658 __metadata("design:paramtypes", []),
31659 __metadata("design:returntype", void 0)
31660 ], InfiniteRowModel.prototype, "destroy", null);
31661 InfiniteRowModel = __decorate([
31662 context_1.Bean('rowModel')
31663 ], InfiniteRowModel);
31664 return InfiniteRowModel;
31665}(beanStub_1.BeanStub));
31666exports.InfiniteRowModel = InfiniteRowModel;
31667
31668
31669/***/ }),
31670/* 117 */
31671/***/ (function(module, exports, __webpack_require__) {
31672
31673"use strict";
31674/**
31675 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
31676 * @version v18.1.2
31677 * @link http://www.ag-grid.com/
31678 * @license MIT
31679 */
31680
31681var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
31682 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
31683 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
31684 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
31685 return c > 3 && r && Object.defineProperty(target, key, r), r;
31686};
31687var __metadata = (this && this.__metadata) || function (k, v) {
31688 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
31689};
31690var __param = (this && this.__param) || function (paramIndex, decorator) {
31691 return function (target, key) { decorator(target, key, paramIndex); }
31692};
31693Object.defineProperty(exports, "__esModule", { value: true });
31694var rowNodeBlock_1 = __webpack_require__(63);
31695var logger_1 = __webpack_require__(12);
31696var context_1 = __webpack_require__(0);
31697var utils_1 = __webpack_require__(1);
31698var RowNodeBlockLoader = (function () {
31699 function RowNodeBlockLoader(maxConcurrentRequests) {
31700 this.activeBlockLoadsCount = 0;
31701 this.blocks = [];
31702 this.active = true;
31703 this.maxConcurrentRequests = maxConcurrentRequests;
31704 }
31705 RowNodeBlockLoader.prototype.setBeans = function (loggerFactory) {
31706 this.logger = loggerFactory.create('RowNodeBlockLoader');
31707 };
31708 RowNodeBlockLoader.prototype.addBlock = function (block) {
31709 this.blocks.push(block);
31710 };
31711 RowNodeBlockLoader.prototype.removeBlock = function (block) {
31712 utils_1._.removeFromArray(this.blocks, block);
31713 };
31714 RowNodeBlockLoader.prototype.destroy = function () {
31715 this.active = false;
31716 };
31717 RowNodeBlockLoader.prototype.loadComplete = function () {
31718 this.activeBlockLoadsCount--;
31719 };
31720 RowNodeBlockLoader.prototype.checkBlockToLoad = function () {
31721 if (!this.active) {
31722 return;
31723 }
31724 this.printCacheStatus();
31725 if (this.activeBlockLoadsCount >= this.maxConcurrentRequests) {
31726 this.logger.log("checkBlockToLoad: max loads exceeded");
31727 return;
31728 }
31729 var blockToLoad = null;
31730 this.blocks.forEach(function (block) {
31731 if (block.getState() === rowNodeBlock_1.RowNodeBlock.STATE_DIRTY) {
31732 blockToLoad = block;
31733 }
31734 });
31735 if (blockToLoad) {
31736 blockToLoad.load();
31737 this.activeBlockLoadsCount++;
31738 this.logger.log("checkBlockToLoad: loading page " + blockToLoad.getBlockNumber());
31739 this.printCacheStatus();
31740 }
31741 else {
31742 this.logger.log("checkBlockToLoad: no pages to load");
31743 }
31744 };
31745 RowNodeBlockLoader.prototype.getBlockState = function () {
31746 var result = {};
31747 this.blocks.forEach(function (block) {
31748 var nodeIdPrefix = block.getNodeIdPrefix();
31749 var stateItem = {
31750 blockNumber: block.getBlockNumber(),
31751 startRow: block.getStartRow(),
31752 endRow: block.getEndRow(),
31753 pageStatus: block.getState()
31754 };
31755 if (utils_1._.exists(nodeIdPrefix)) {
31756 result[nodeIdPrefix + block.getBlockNumber()] = stateItem;
31757 }
31758 else {
31759 result[block.getBlockNumber()] = stateItem;
31760 }
31761 });
31762 return result;
31763 };
31764 RowNodeBlockLoader.prototype.printCacheStatus = function () {
31765 if (this.logger.isLogging()) {
31766 this.logger.log("printCacheStatus: activePageLoadsCount = " + this.activeBlockLoadsCount + ","
31767 + (" blocks = " + JSON.stringify(this.getBlockState())));
31768 }
31769 };
31770 __decorate([
31771 __param(0, context_1.Qualifier('loggerFactory')),
31772 __metadata("design:type", Function),
31773 __metadata("design:paramtypes", [logger_1.LoggerFactory]),
31774 __metadata("design:returntype", void 0)
31775 ], RowNodeBlockLoader.prototype, "setBeans", null);
31776 return RowNodeBlockLoader;
31777}());
31778exports.RowNodeBlockLoader = RowNodeBlockLoader;
31779
31780
31781/***/ }),
31782/* 118 */
31783/***/ (function(module, exports, __webpack_require__) {
31784
31785"use strict";
31786/**
31787 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
31788 * @version v18.1.2
31789 * @link http://www.ag-grid.com/
31790 * @license MIT
31791 */
31792
31793var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
31794 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
31795 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
31796 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
31797 return c > 3 && r && Object.defineProperty(target, key, r), r;
31798};
31799var __metadata = (this && this.__metadata) || function (k, v) {
31800 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
31801};
31802Object.defineProperty(exports, "__esModule", { value: true });
31803var utils_1 = __webpack_require__(1);
31804var constants_1 = __webpack_require__(9);
31805var gridOptionsWrapper_1 = __webpack_require__(2);
31806var columnApi_1 = __webpack_require__(7);
31807var columnController_1 = __webpack_require__(4);
31808var filterManager_1 = __webpack_require__(20);
31809var rowNode_1 = __webpack_require__(18);
31810var eventService_1 = __webpack_require__(3);
31811var events_1 = __webpack_require__(5);
31812var context_1 = __webpack_require__(0);
31813var selectionController_1 = __webpack_require__(19);
31814var clientSideNodeManager_1 = __webpack_require__(119);
31815var changedPath_1 = __webpack_require__(90);
31816var valueService_1 = __webpack_require__(17);
31817var valueCache_1 = __webpack_require__(35);
31818var gridApi_1 = __webpack_require__(6);
31819var RecursionType;
31820(function (RecursionType) {
31821 RecursionType[RecursionType["Normal"] = 0] = "Normal";
31822 RecursionType[RecursionType["AfterFilter"] = 1] = "AfterFilter";
31823 RecursionType[RecursionType["AfterFilterAndSort"] = 2] = "AfterFilterAndSort";
31824 RecursionType[RecursionType["PivotNodes"] = 3] = "PivotNodes";
31825})(RecursionType || (RecursionType = {}));
31826;
31827var ClientSideRowModel = (function () {
31828 function ClientSideRowModel() {
31829 }
31830 ClientSideRowModel.prototype.init = function () {
31831 var refreshEverythingFunc = this.refreshModel.bind(this, { step: constants_1.Constants.STEP_EVERYTHING });
31832 this.eventService.addModalPriorityEventListener(events_1.Events.EVENT_COLUMN_EVERYTHING_CHANGED, refreshEverythingFunc);
31833 this.eventService.addModalPriorityEventListener(events_1.Events.EVENT_COLUMN_ROW_GROUP_CHANGED, refreshEverythingFunc);
31834 this.eventService.addModalPriorityEventListener(events_1.Events.EVENT_COLUMN_VALUE_CHANGED, this.onValueChanged.bind(this));
31835 this.eventService.addModalPriorityEventListener(events_1.Events.EVENT_COLUMN_PIVOT_CHANGED, this.refreshModel.bind(this, { step: constants_1.Constants.STEP_PIVOT }));
31836 this.eventService.addModalPriorityEventListener(events_1.Events.EVENT_ROW_GROUP_OPENED, this.onRowGroupOpened.bind(this));
31837 this.eventService.addModalPriorityEventListener(events_1.Events.EVENT_FILTER_CHANGED, this.onFilterChanged.bind(this));
31838 this.eventService.addModalPriorityEventListener(events_1.Events.EVENT_SORT_CHANGED, this.onSortChanged.bind(this));
31839 this.eventService.addModalPriorityEventListener(events_1.Events.EVENT_COLUMN_PIVOT_MODE_CHANGED, refreshEverythingFunc);
31840 var refreshMapFunc = this.refreshModel.bind(this, { step: constants_1.Constants.STEP_MAP, keepRenderedRows: true, animate: true });
31841 this.gridOptionsWrapper.addEventListener(gridOptionsWrapper_1.GridOptionsWrapper.PROP_GROUP_REMOVE_SINGLE_CHILDREN, refreshMapFunc);
31842 this.gridOptionsWrapper.addEventListener(gridOptionsWrapper_1.GridOptionsWrapper.PROP_GROUP_REMOVE_LOWEST_SINGLE_CHILDREN, refreshMapFunc);
31843 this.rootNode = new rowNode_1.RowNode();
31844 this.nodeManager = new clientSideNodeManager_1.ClientSideNodeManager(this.rootNode, this.gridOptionsWrapper, this.context, this.eventService, this.columnController, this.gridApi, this.columnApi, this.selectionController);
31845 this.context.wireBean(this.rootNode);
31846 };
31847 // returns false if row was moved, otherwise true
31848 ClientSideRowModel.prototype.ensureRowAtPixel = function (rowNode, pixel) {
31849 var indexAtPixelNow = this.getRowIndexAtPixel(pixel);
31850 var rowNodeAtPixelNow = this.getRow(indexAtPixelNow);
31851 if (rowNodeAtPixelNow === rowNode) {
31852 return false;
31853 }
31854 utils_1.Utils.removeFromArray(this.rootNode.allLeafChildren, rowNode);
31855 utils_1.Utils.insertIntoArray(this.rootNode.allLeafChildren, rowNode, indexAtPixelNow);
31856 this.refreshModel({ step: constants_1.Constants.STEP_EVERYTHING, keepRenderedRows: true, animate: true, keepEditingRows: true });
31857 return true;
31858 };
31859 ClientSideRowModel.prototype.isLastRowFound = function () {
31860 return true;
31861 };
31862 ClientSideRowModel.prototype.getRowCount = function () {
31863 if (this.rowsToDisplay) {
31864 return this.rowsToDisplay.length;
31865 }
31866 else {
31867 return 0;
31868 }
31869 };
31870 ClientSideRowModel.prototype.getRowBounds = function (index) {
31871 if (utils_1.Utils.missing(this.rowsToDisplay)) {
31872 return null;
31873 }
31874 var rowNode = this.rowsToDisplay[index];
31875 if (rowNode) {
31876 return {
31877 rowTop: rowNode.rowTop,
31878 rowHeight: rowNode.rowHeight
31879 };
31880 }
31881 else {
31882 return null;
31883 }
31884 };
31885 ClientSideRowModel.prototype.onRowGroupOpened = function () {
31886 var animate = this.gridOptionsWrapper.isAnimateRows();
31887 this.refreshModel({ step: constants_1.Constants.STEP_MAP, keepRenderedRows: true, animate: animate });
31888 };
31889 ClientSideRowModel.prototype.onFilterChanged = function () {
31890 var animate = this.gridOptionsWrapper.isAnimateRows();
31891 this.refreshModel({ step: constants_1.Constants.STEP_FILTER, keepRenderedRows: true, animate: animate });
31892 };
31893 ClientSideRowModel.prototype.onSortChanged = function () {
31894 // we only act on the sort event here if the user is doing in grid sorting.
31895 // we ignore it if the sorting is happening on the server side.
31896 if (this.gridOptionsWrapper.isEnableServerSideSorting()) {
31897 return;
31898 }
31899 var animate = this.gridOptionsWrapper.isAnimateRows();
31900 this.refreshModel({ step: constants_1.Constants.STEP_SORT, keepRenderedRows: true, animate: animate, keepEditingRows: true });
31901 };
31902 ClientSideRowModel.prototype.getType = function () {
31903 return constants_1.Constants.ROW_MODEL_TYPE_CLIENT_SIDE;
31904 };
31905 ClientSideRowModel.prototype.onValueChanged = function () {
31906 if (this.columnController.isPivotActive()) {
31907 this.refreshModel({ step: constants_1.Constants.STEP_PIVOT });
31908 }
31909 else {
31910 this.refreshModel({ step: constants_1.Constants.STEP_AGGREGATE });
31911 }
31912 };
31913 ClientSideRowModel.prototype.createChangePath = function (rowNodeTransactions) {
31914 // for updates, if the row is updated at all, then we re-calc all the values
31915 // in that row. we could compare each value to each old value, however if we
31916 // did this, we would be calling the valueService twice, once on the old value
31917 // and once on the new value. so it's less valueGetter calls if we just assume
31918 // each column is different. that way the changedPath is used so that only
31919 // the impacted parent rows are recalculated, parents who's children have
31920 // not changed are not impacted.
31921 var valueColumns = this.columnController.getValueColumns();
31922 var noValueColumns = utils_1.Utils.missingOrEmpty(valueColumns);
31923 var noTransactions = utils_1.Utils.missingOrEmpty(rowNodeTransactions);
31924 var changedPath = new changedPath_1.ChangedPath(false);
31925 if (noValueColumns || noTransactions) {
31926 changedPath.setInactive();
31927 }
31928 return changedPath;
31929 };
31930 ClientSideRowModel.prototype.refreshModel = function (params) {
31931 // this goes through the pipeline of stages. what's in my head is similar
31932 // to the diagram on this page:
31933 // http://commons.apache.org/sandbox/commons-pipeline/pipeline_basics.html
31934 // however we want to keep the results of each stage, hence we manually call
31935 // each step rather than have them chain each other.
31936 var _this = this;
31937 // fallthrough in below switch is on purpose,
31938 // eg if STEP_FILTER, then all steps below this
31939 // step get done
31940 // let start: number;
31941 // console.log('======= start =======');
31942 var changedPath = this.createChangePath(params.rowNodeTransactions);
31943 switch (params.step) {
31944 case constants_1.Constants.STEP_EVERYTHING:
31945 // start = new Date().getTime();
31946 this.doRowGrouping(params.groupState, params.rowNodeTransactions, params.rowNodeOrder, changedPath);
31947 // console.log('rowGrouping = ' + (new Date().getTime() - start));
31948 case constants_1.Constants.STEP_FILTER:
31949 // start = new Date().getTime();
31950 this.doFilter();
31951 // console.log('filter = ' + (new Date().getTime() - start));
31952 case constants_1.Constants.STEP_PIVOT:
31953 this.doPivot(changedPath);
31954 case constants_1.Constants.STEP_AGGREGATE:// depends on agg fields
31955 // start = new Date().getTime();
31956 this.doAggregate(changedPath);
31957 // console.log('aggregation = ' + (new Date().getTime() - start));
31958 case constants_1.Constants.STEP_SORT:
31959 // start = new Date().getTime();
31960 this.doSort();
31961 // console.log('sort = ' + (new Date().getTime() - start));
31962 case constants_1.Constants.STEP_MAP:
31963 // start = new Date().getTime();
31964 this.doRowsToDisplay();
31965 }
31966 var event = {
31967 type: events_1.Events.EVENT_MODEL_UPDATED,
31968 api: this.gridApi,
31969 columnApi: this.columnApi,
31970 animate: params.animate,
31971 keepRenderedRows: params.keepRenderedRows,
31972 newData: params.newData,
31973 newPage: false
31974 };
31975 this.eventService.dispatchEvent(event);
31976 if (this.$scope) {
31977 setTimeout(function () {
31978 _this.$scope.$apply();
31979 }, 0);
31980 }
31981 };
31982 ClientSideRowModel.prototype.isEmpty = function () {
31983 var rowsMissing;
31984 var doingLegacyTreeData = utils_1.Utils.exists(this.gridOptionsWrapper.getNodeChildDetailsFunc());
31985 if (doingLegacyTreeData) {
31986 rowsMissing = utils_1.Utils.missing(this.rootNode.childrenAfterGroup) || this.rootNode.childrenAfterGroup.length === 0;
31987 }
31988 else {
31989 rowsMissing = utils_1.Utils.missing(this.rootNode.allLeafChildren) || this.rootNode.allLeafChildren.length === 0;
31990 }
31991 var empty = utils_1.Utils.missing(this.rootNode) || rowsMissing || !this.columnController.isReady();
31992 return empty;
31993 };
31994 ClientSideRowModel.prototype.isRowsToRender = function () {
31995 return utils_1.Utils.exists(this.rowsToDisplay) && this.rowsToDisplay.length > 0;
31996 };
31997 ClientSideRowModel.prototype.getNodesInRangeForSelection = function (firstInRange, lastInRange) {
31998 // if lastSelectedNode is missing, we start at the first row
31999 var firstRowHit = !lastInRange;
32000 var lastRowHit = false;
32001 var lastRow;
32002 var result = [];
32003 var groupsSelectChildren = this.gridOptionsWrapper.isGroupSelectsChildren();
32004 this.forEachNodeAfterFilterAndSort(function (rowNode) {
32005 var lookingForLastRow = firstRowHit && !lastRowHit;
32006 // check if we need to flip the select switch
32007 if (!firstRowHit) {
32008 if (rowNode === lastInRange || rowNode === firstInRange) {
32009 firstRowHit = true;
32010 }
32011 }
32012 var skipThisGroupNode = rowNode.group && groupsSelectChildren;
32013 if (!skipThisGroupNode) {
32014 var inRange = firstRowHit && !lastRowHit;
32015 var childOfLastRow = rowNode.isParentOfNode(lastRow);
32016 if (inRange || childOfLastRow) {
32017 result.push(rowNode);
32018 }
32019 }
32020 if (lookingForLastRow) {
32021 if (rowNode === lastInRange || rowNode === firstInRange) {
32022 lastRowHit = true;
32023 if (rowNode === lastInRange) {
32024 lastRow = lastInRange;
32025 }
32026 else {
32027 lastRow = firstInRange;
32028 }
32029 }
32030 }
32031 });
32032 return result;
32033 };
32034 ClientSideRowModel.prototype.setDatasource = function (datasource) {
32035 console.error('ag-Grid: should never call setDatasource on clientSideRowController');
32036 };
32037 ClientSideRowModel.prototype.getTopLevelNodes = function () {
32038 return this.rootNode ? this.rootNode.childrenAfterGroup : null;
32039 };
32040 ClientSideRowModel.prototype.getRootNode = function () {
32041 return this.rootNode;
32042 };
32043 ClientSideRowModel.prototype.getRow = function (index) {
32044 return this.rowsToDisplay[index];
32045 };
32046 ClientSideRowModel.prototype.isRowPresent = function (rowNode) {
32047 return this.rowsToDisplay.indexOf(rowNode) >= 0;
32048 };
32049 ClientSideRowModel.prototype.getVirtualRowCount = function () {
32050 console.warn('ag-Grid: rowModel.getVirtualRowCount() is not longer a function, use rowModel.getRowCount() instead');
32051 return this.getPageLastRow();
32052 };
32053 ClientSideRowModel.prototype.getPageFirstRow = function () {
32054 return 0;
32055 };
32056 ClientSideRowModel.prototype.getPageLastRow = function () {
32057 if (this.rowsToDisplay) {
32058 return this.rowsToDisplay.length - 1;
32059 }
32060 else {
32061 return 0;
32062 }
32063 };
32064 ClientSideRowModel.prototype.getRowIndexAtPixel = function (pixelToMatch) {
32065 if (this.isEmpty()) {
32066 return -1;
32067 }
32068 // do binary search of tree
32069 // http://oli.me.uk/2013/06/08/searching-javascript-arrays-with-a-binary-search/
32070 var bottomPointer = 0;
32071 var topPointer = this.rowsToDisplay.length - 1;
32072 // quick check, if the pixel is out of bounds, then return last row
32073 if (pixelToMatch <= 0) {
32074 // if pixel is less than or equal zero, it's always the first row
32075 return 0;
32076 }
32077 var lastNode = this.rowsToDisplay[this.rowsToDisplay.length - 1];
32078 if (lastNode.rowTop <= pixelToMatch) {
32079 return this.rowsToDisplay.length - 1;
32080 }
32081 while (true) {
32082 var midPointer = Math.floor((bottomPointer + topPointer) / 2);
32083 var currentRowNode = this.rowsToDisplay[midPointer];
32084 if (this.isRowInPixel(currentRowNode, pixelToMatch)) {
32085 return midPointer;
32086 }
32087 else if (currentRowNode.rowTop < pixelToMatch) {
32088 bottomPointer = midPointer + 1;
32089 }
32090 else if (currentRowNode.rowTop > pixelToMatch) {
32091 topPointer = midPointer - 1;
32092 }
32093 }
32094 };
32095 ClientSideRowModel.prototype.isRowInPixel = function (rowNode, pixelToMatch) {
32096 var topPixel = rowNode.rowTop;
32097 var bottomPixel = rowNode.rowTop + rowNode.rowHeight;
32098 var pixelInRow = topPixel <= pixelToMatch && bottomPixel > pixelToMatch;
32099 return pixelInRow;
32100 };
32101 ClientSideRowModel.prototype.getCurrentPageHeight = function () {
32102 if (this.rowsToDisplay && this.rowsToDisplay.length > 0) {
32103 var lastRow = this.rowsToDisplay[this.rowsToDisplay.length - 1];
32104 var lastPixel = lastRow.rowTop + lastRow.rowHeight;
32105 return lastPixel;
32106 }
32107 else {
32108 return 0;
32109 }
32110 };
32111 ClientSideRowModel.prototype.forEachLeafNode = function (callback) {
32112 if (this.rootNode.allLeafChildren) {
32113 this.rootNode.allLeafChildren.forEach(function (rowNode, index) { return callback(rowNode, index); });
32114 }
32115 };
32116 ClientSideRowModel.prototype.forEachNode = function (callback) {
32117 this.recursivelyWalkNodesAndCallback(this.rootNode.childrenAfterGroup, callback, RecursionType.Normal, 0);
32118 };
32119 ClientSideRowModel.prototype.forEachNodeAfterFilter = function (callback) {
32120 this.recursivelyWalkNodesAndCallback(this.rootNode.childrenAfterFilter, callback, RecursionType.AfterFilter, 0);
32121 };
32122 ClientSideRowModel.prototype.forEachNodeAfterFilterAndSort = function (callback) {
32123 this.recursivelyWalkNodesAndCallback(this.rootNode.childrenAfterSort, callback, RecursionType.AfterFilterAndSort, 0);
32124 };
32125 ClientSideRowModel.prototype.forEachPivotNode = function (callback) {
32126 this.recursivelyWalkNodesAndCallback([this.rootNode], callback, RecursionType.PivotNodes, 0);
32127 };
32128 // iterates through each item in memory, and calls the callback function
32129 // nodes - the rowNodes to traverse
32130 // callback - the user provided callback
32131 // recursion type - need this to know what child nodes to recurse, eg if looking at all nodes, or filtered notes etc
32132 // index - works similar to the index in forEach in javascripts array function
32133 ClientSideRowModel.prototype.recursivelyWalkNodesAndCallback = function (nodes, callback, recursionType, index) {
32134 if (nodes) {
32135 for (var i = 0; i < nodes.length; i++) {
32136 var node = nodes[i];
32137 callback(node, index++);
32138 // go to the next level if it is a group
32139 if (node.hasChildren()) {
32140 // depending on the recursion type, we pick a difference set of children
32141 var nodeChildren = void 0;
32142 switch (recursionType) {
32143 case RecursionType.Normal:
32144 nodeChildren = node.childrenAfterGroup;
32145 break;
32146 case RecursionType.AfterFilter:
32147 nodeChildren = node.childrenAfterFilter;
32148 break;
32149 case RecursionType.AfterFilterAndSort:
32150 nodeChildren = node.childrenAfterSort;
32151 break;
32152 case RecursionType.PivotNodes:
32153 // for pivot, we don't go below leafGroup levels
32154 nodeChildren = !node.leafGroup ? node.childrenAfterSort : null;
32155 break;
32156 }
32157 if (nodeChildren) {
32158 index = this.recursivelyWalkNodesAndCallback(nodeChildren, callback, recursionType, index);
32159 }
32160 }
32161 }
32162 }
32163 return index;
32164 };
32165 // it's possible to recompute the aggregate without doing the other parts
32166 // + gridApi.recomputeAggregates()
32167 ClientSideRowModel.prototype.doAggregate = function (changedPath) {
32168 if (this.aggregationStage) {
32169 this.aggregationStage.execute({ rowNode: this.rootNode, changedPath: changedPath });
32170 }
32171 };
32172 // + gridApi.expandAll()
32173 // + gridApi.collapseAll()
32174 ClientSideRowModel.prototype.expandOrCollapseAll = function (expand) {
32175 var usingTreeData = this.gridOptionsWrapper.isTreeData();
32176 if (this.rootNode) {
32177 recursiveExpandOrCollapse(this.rootNode.childrenAfterGroup);
32178 }
32179 function recursiveExpandOrCollapse(rowNodes) {
32180 if (!rowNodes) {
32181 return;
32182 }
32183 rowNodes.forEach(function (rowNode) {
32184 var shouldExpandOrCollapse = usingTreeData ? utils_1.Utils.exists(rowNode.childrenAfterGroup) : rowNode.group;
32185 if (shouldExpandOrCollapse) {
32186 rowNode.expanded = expand;
32187 recursiveExpandOrCollapse(rowNode.childrenAfterGroup);
32188 }
32189 });
32190 }
32191 this.refreshModel({ step: constants_1.Constants.STEP_MAP });
32192 };
32193 ClientSideRowModel.prototype.doSort = function () {
32194 this.sortStage.execute({ rowNode: this.rootNode });
32195 };
32196 ClientSideRowModel.prototype.doRowGrouping = function (groupState, rowNodeTransactions, rowNodeOrder, changedPath) {
32197 var _this = this;
32198 // grouping is enterprise only, so if service missing, skip the step
32199 var doingLegacyTreeData = utils_1.Utils.exists(this.gridOptionsWrapper.getNodeChildDetailsFunc());
32200 if (doingLegacyTreeData) {
32201 return;
32202 }
32203 if (this.groupStage) {
32204 if (utils_1.Utils.exists(rowNodeTransactions)) {
32205 rowNodeTransactions.forEach(function (tran) {
32206 _this.groupStage.execute({ rowNode: _this.rootNode,
32207 rowNodeTransaction: tran,
32208 rowNodeOrder: rowNodeOrder,
32209 changedPath: changedPath });
32210 });
32211 }
32212 else {
32213 // groups are about to get disposed, so need to deselect any that are selected
32214 this.selectionController.removeGroupsFromSelection();
32215 this.groupStage.execute({ rowNode: this.rootNode, changedPath: changedPath });
32216 // set open/closed state on groups
32217 this.restoreGroupState(groupState);
32218 }
32219 if (this.gridOptionsWrapper.isGroupSelectsChildren()) {
32220 this.selectionController.updateGroupsFromChildrenSelections();
32221 }
32222 }
32223 else {
32224 this.rootNode.childrenAfterGroup = this.rootNode.allLeafChildren;
32225 }
32226 };
32227 ClientSideRowModel.prototype.restoreGroupState = function (groupState) {
32228 if (!groupState) {
32229 return;
32230 }
32231 utils_1.Utils.traverseNodesWithKey(this.rootNode.childrenAfterGroup, function (node, key) {
32232 // if the group was open last time, then open it this time. however
32233 // if was not open last time, then don't touch the group, so the 'groupDefaultExpanded'
32234 // setting will take effect.
32235 if (typeof groupState[key] === 'boolean') {
32236 node.expanded = groupState[key];
32237 }
32238 });
32239 };
32240 ClientSideRowModel.prototype.doFilter = function () {
32241 this.filterStage.execute({ rowNode: this.rootNode });
32242 };
32243 ClientSideRowModel.prototype.doPivot = function (changedPath) {
32244 if (this.pivotStage) {
32245 this.pivotStage.execute({ rowNode: this.rootNode, changedPath: changedPath });
32246 }
32247 };
32248 ClientSideRowModel.prototype.getGroupState = function () {
32249 if (!this.rootNode.childrenAfterGroup || !this.gridOptionsWrapper.isRememberGroupStateWhenNewData()) {
32250 return null;
32251 }
32252 var result = {};
32253 utils_1.Utils.traverseNodesWithKey(this.rootNode.childrenAfterGroup, function (node, key) { return result[key] = node.expanded; });
32254 return result;
32255 };
32256 ClientSideRowModel.prototype.getCopyOfNodesMap = function () {
32257 return this.nodeManager.getCopyOfNodesMap();
32258 };
32259 ClientSideRowModel.prototype.getRowNode = function (id) {
32260 return this.nodeManager.getRowNode(id);
32261 };
32262 // rows: the rows to put into the model
32263 ClientSideRowModel.prototype.setRowData = function (rowData) {
32264 // no need to invalidate cache, as the cache is stored on the rowNode,
32265 // so new rowNodes means the cache is wiped anyway.
32266 // remember group state, so we can expand groups that should be expanded
32267 var groupState = this.getGroupState();
32268 this.nodeManager.setRowData(rowData);
32269 // this event kicks off:
32270 // - clears selection
32271 // - updates filters
32272 // - shows 'no rows' overlay if needed
32273 var rowDataChangedEvent = {
32274 type: events_1.Events.EVENT_ROW_DATA_CHANGED,
32275 api: this.gridApi,
32276 columnApi: this.columnApi
32277 };
32278 this.eventService.dispatchEvent(rowDataChangedEvent);
32279 this.refreshModel({
32280 step: constants_1.Constants.STEP_EVERYTHING,
32281 groupState: groupState,
32282 newData: true
32283 });
32284 };
32285 ClientSideRowModel.prototype.batchUpdateRowData = function (rowDataTransaction, callback) {
32286 var _this = this;
32287 if (!this.rowDataTransactionBatch) {
32288 this.rowDataTransactionBatch = [];
32289 var waitMillis = this.gridOptionsWrapper.getBatchUpdateWaitMillis();
32290 setTimeout(function () {
32291 _this.executeBatchUpdateRowData();
32292 _this.rowDataTransactionBatch = null;
32293 }, waitMillis);
32294 }
32295 this.rowDataTransactionBatch.push({ rowDataTransaction: rowDataTransaction, callback: callback });
32296 };
32297 ClientSideRowModel.prototype.executeBatchUpdateRowData = function () {
32298 var _this = this;
32299 this.valueCache.onDataChanged();
32300 var callbackFuncsBound = [];
32301 var rowNodeTrans = [];
32302 this.rowDataTransactionBatch.forEach(function (tranItem) {
32303 var rowNodeTran = _this.nodeManager.updateRowData(tranItem.rowDataTransaction, null);
32304 rowNodeTrans.push(rowNodeTran);
32305 if (tranItem.callback) {
32306 callbackFuncsBound.push(tranItem.callback.bind(rowNodeTran));
32307 }
32308 });
32309 this.commonUpdateRowData(rowNodeTrans);
32310 // do callbacks in next VM turn so it's async
32311 if (callbackFuncsBound.length > 0) {
32312 setTimeout(function () {
32313 callbackFuncsBound.forEach(function (func) { return func(); });
32314 }, 0);
32315 }
32316 };
32317 ClientSideRowModel.prototype.updateRowData = function (rowDataTran, rowNodeOrder) {
32318 this.valueCache.onDataChanged();
32319 var rowNodeTran = this.nodeManager.updateRowData(rowDataTran, rowNodeOrder);
32320 this.commonUpdateRowData([rowNodeTran], rowNodeOrder);
32321 return rowNodeTran;
32322 };
32323 // common to updateRowData and batchUpdateRowData
32324 ClientSideRowModel.prototype.commonUpdateRowData = function (rowNodeTrans, rowNodeOrder) {
32325 this.refreshModel({
32326 step: constants_1.Constants.STEP_EVERYTHING,
32327 rowNodeTransactions: rowNodeTrans,
32328 rowNodeOrder: rowNodeOrder,
32329 keepRenderedRows: true,
32330 animate: true,
32331 keepEditingRows: true
32332 });
32333 var event = {
32334 type: events_1.Events.EVENT_ROW_DATA_UPDATED,
32335 api: this.gridApi,
32336 columnApi: this.columnApi
32337 };
32338 this.eventService.dispatchEvent(event);
32339 };
32340 ClientSideRowModel.prototype.doRowsToDisplay = function () {
32341 this.rowsToDisplay = this.flattenStage.execute({ rowNode: this.rootNode });
32342 };
32343 ClientSideRowModel.prototype.onRowHeightChanged = function () {
32344 this.refreshModel({ step: constants_1.Constants.STEP_MAP, keepRenderedRows: true, keepEditingRows: true });
32345 };
32346 ClientSideRowModel.prototype.resetRowHeights = function () {
32347 this.forEachNode(function (rowNode) { return rowNode.setRowHeight(null); });
32348 this.onRowHeightChanged();
32349 };
32350 __decorate([
32351 context_1.Autowired('gridOptionsWrapper'),
32352 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
32353 ], ClientSideRowModel.prototype, "gridOptionsWrapper", void 0);
32354 __decorate([
32355 context_1.Autowired('columnController'),
32356 __metadata("design:type", columnController_1.ColumnController)
32357 ], ClientSideRowModel.prototype, "columnController", void 0);
32358 __decorate([
32359 context_1.Autowired('filterManager'),
32360 __metadata("design:type", filterManager_1.FilterManager)
32361 ], ClientSideRowModel.prototype, "filterManager", void 0);
32362 __decorate([
32363 context_1.Autowired('$scope'),
32364 __metadata("design:type", Object)
32365 ], ClientSideRowModel.prototype, "$scope", void 0);
32366 __decorate([
32367 context_1.Autowired('selectionController'),
32368 __metadata("design:type", selectionController_1.SelectionController)
32369 ], ClientSideRowModel.prototype, "selectionController", void 0);
32370 __decorate([
32371 context_1.Autowired('eventService'),
32372 __metadata("design:type", eventService_1.EventService)
32373 ], ClientSideRowModel.prototype, "eventService", void 0);
32374 __decorate([
32375 context_1.Autowired('context'),
32376 __metadata("design:type", context_1.Context)
32377 ], ClientSideRowModel.prototype, "context", void 0);
32378 __decorate([
32379 context_1.Autowired('valueService'),
32380 __metadata("design:type", valueService_1.ValueService)
32381 ], ClientSideRowModel.prototype, "valueService", void 0);
32382 __decorate([
32383 context_1.Autowired('valueCache'),
32384 __metadata("design:type", valueCache_1.ValueCache)
32385 ], ClientSideRowModel.prototype, "valueCache", void 0);
32386 __decorate([
32387 context_1.Autowired('columnApi'),
32388 __metadata("design:type", columnApi_1.ColumnApi)
32389 ], ClientSideRowModel.prototype, "columnApi", void 0);
32390 __decorate([
32391 context_1.Autowired('gridApi'),
32392 __metadata("design:type", gridApi_1.GridApi)
32393 ], ClientSideRowModel.prototype, "gridApi", void 0);
32394 __decorate([
32395 context_1.Autowired('filterStage'),
32396 __metadata("design:type", Object)
32397 ], ClientSideRowModel.prototype, "filterStage", void 0);
32398 __decorate([
32399 context_1.Autowired('sortStage'),
32400 __metadata("design:type", Object)
32401 ], ClientSideRowModel.prototype, "sortStage", void 0);
32402 __decorate([
32403 context_1.Autowired('flattenStage'),
32404 __metadata("design:type", Object)
32405 ], ClientSideRowModel.prototype, "flattenStage", void 0);
32406 __decorate([
32407 context_1.Optional('groupStage'),
32408 __metadata("design:type", Object)
32409 ], ClientSideRowModel.prototype, "groupStage", void 0);
32410 __decorate([
32411 context_1.Optional('aggregationStage'),
32412 __metadata("design:type", Object)
32413 ], ClientSideRowModel.prototype, "aggregationStage", void 0);
32414 __decorate([
32415 context_1.Optional('pivotStage'),
32416 __metadata("design:type", Object)
32417 ], ClientSideRowModel.prototype, "pivotStage", void 0);
32418 __decorate([
32419 context_1.PostConstruct,
32420 __metadata("design:type", Function),
32421 __metadata("design:paramtypes", []),
32422 __metadata("design:returntype", void 0)
32423 ], ClientSideRowModel.prototype, "init", null);
32424 ClientSideRowModel = __decorate([
32425 context_1.Bean('rowModel')
32426 ], ClientSideRowModel);
32427 return ClientSideRowModel;
32428}());
32429exports.ClientSideRowModel = ClientSideRowModel;
32430
32431
32432/***/ }),
32433/* 119 */
32434/***/ (function(module, exports, __webpack_require__) {
32435
32436"use strict";
32437/**
32438 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
32439 * @version v18.1.2
32440 * @link http://www.ag-grid.com/
32441 * @license MIT
32442 */
32443
32444Object.defineProperty(exports, "__esModule", { value: true });
32445var rowNode_1 = __webpack_require__(18);
32446var utils_1 = __webpack_require__(1);
32447var events_1 = __webpack_require__(5);
32448var ClientSideNodeManager = (function () {
32449 function ClientSideNodeManager(rootNode, gridOptionsWrapper, context, eventService, columnController, gridApi, columnApi, selectionController) {
32450 this.nextId = 0;
32451 // when user is provide the id's, we also keep a map of ids to row nodes for convenience
32452 this.allNodesMap = {};
32453 this.rootNode = rootNode;
32454 this.gridOptionsWrapper = gridOptionsWrapper;
32455 this.context = context;
32456 this.eventService = eventService;
32457 this.columnController = columnController;
32458 this.gridApi = gridApi;
32459 this.columnApi = columnApi;
32460 this.selectionController = selectionController;
32461 this.rootNode.group = true;
32462 this.rootNode.level = -1;
32463 this.rootNode.id = ClientSideNodeManager.ROOT_NODE_ID;
32464 this.rootNode.allLeafChildren = [];
32465 this.rootNode.childrenAfterGroup = [];
32466 this.rootNode.childrenAfterSort = [];
32467 this.rootNode.childrenAfterFilter = [];
32468 // if we make this class a bean, then can annotate postConstruct
32469 this.postConstruct();
32470 }
32471 // @PostConstruct - this is not a bean, so postConstruct called by constructor
32472 ClientSideNodeManager.prototype.postConstruct = function () {
32473 // func below doesn't have 'this' pointer, so need to pull out these bits
32474 this.getNodeChildDetails = this.gridOptionsWrapper.getNodeChildDetailsFunc();
32475 this.suppressParentsInRowNodes = this.gridOptionsWrapper.isSuppressParentsInRowNodes();
32476 this.doesDataFlower = this.gridOptionsWrapper.getDoesDataFlowerFunc();
32477 this.isRowMasterFunc = this.gridOptionsWrapper.getIsRowMasterFunc();
32478 this.doingLegacyTreeData = utils_1.Utils.exists(this.getNodeChildDetails);
32479 this.doingMasterDetail = this.gridOptionsWrapper.isMasterDetail();
32480 };
32481 ClientSideNodeManager.prototype.getCopyOfNodesMap = function () {
32482 var result = utils_1.Utils.cloneObject(this.allNodesMap);
32483 return result;
32484 };
32485 ClientSideNodeManager.prototype.getRowNode = function (id) {
32486 return this.allNodesMap[id];
32487 };
32488 ClientSideNodeManager.prototype.setRowData = function (rowData) {
32489 this.rootNode.childrenAfterFilter = null;
32490 this.rootNode.childrenAfterGroup = null;
32491 this.rootNode.childrenAfterSort = null;
32492 this.rootNode.childrenMapped = null;
32493 this.nextId = 0;
32494 this.allNodesMap = {};
32495 if (!rowData) {
32496 this.rootNode.allLeafChildren = [];
32497 this.rootNode.childrenAfterGroup = [];
32498 return;
32499 }
32500 // kick off recursion
32501 var result = this.recursiveFunction(rowData, null, ClientSideNodeManager.TOP_LEVEL);
32502 if (this.doingLegacyTreeData) {
32503 this.rootNode.childrenAfterGroup = result;
32504 this.setLeafChildren(this.rootNode);
32505 }
32506 else {
32507 this.rootNode.allLeafChildren = result;
32508 }
32509 };
32510 ClientSideNodeManager.prototype.updateRowData = function (rowDataTran, rowNodeOrder) {
32511 var _this = this;
32512 if (this.isLegacyTreeData()) {
32513 return null;
32514 }
32515 var add = rowDataTran.add, addIndex = rowDataTran.addIndex, remove = rowDataTran.remove, update = rowDataTran.update;
32516 var rowNodeTransaction = {
32517 remove: [],
32518 update: [],
32519 add: []
32520 };
32521 if (utils_1.Utils.exists(add)) {
32522 var useIndex = typeof addIndex === 'number' && addIndex >= 0;
32523 if (useIndex) {
32524 // items get inserted in reverse order for index insertion
32525 add.reverse().forEach(function (item) {
32526 var newRowNode = _this.addRowNode(item, addIndex);
32527 rowNodeTransaction.add.push(newRowNode);
32528 });
32529 }
32530 else {
32531 add.forEach(function (item) {
32532 var newRowNode = _this.addRowNode(item);
32533 rowNodeTransaction.add.push(newRowNode);
32534 });
32535 }
32536 }
32537 if (utils_1.Utils.exists(remove)) {
32538 var anyNodesSelected_1 = false;
32539 remove.forEach(function (item) {
32540 var rowNode = _this.lookupRowNode(item);
32541 if (!rowNode) {
32542 return;
32543 }
32544 if (rowNode.isSelected()) {
32545 anyNodesSelected_1 = true;
32546 }
32547 _this.updatedRowNode(rowNode, item, false);
32548 rowNodeTransaction.remove.push(rowNode);
32549 });
32550 if (anyNodesSelected_1) {
32551 this.selectionController.updateGroupsFromChildrenSelections();
32552 var event_1 = {
32553 type: events_1.Events.EVENT_SELECTION_CHANGED,
32554 api: this.gridApi,
32555 columnApi: this.columnApi
32556 };
32557 this.eventService.dispatchEvent(event_1);
32558 }
32559 }
32560 if (utils_1.Utils.exists(update)) {
32561 update.forEach(function (item) {
32562 var rowNode = _this.lookupRowNode(item);
32563 if (!rowNode) {
32564 return;
32565 }
32566 _this.updatedRowNode(rowNode, item, true);
32567 rowNodeTransaction.update.push(rowNode);
32568 });
32569 }
32570 if (rowNodeOrder) {
32571 utils_1.Utils.sortRowNodesByOrder(this.rootNode.allLeafChildren, rowNodeOrder);
32572 }
32573 return rowNodeTransaction;
32574 };
32575 ClientSideNodeManager.prototype.addRowNode = function (data, index) {
32576 var newNode = this.createNode(data, null, ClientSideNodeManager.TOP_LEVEL);
32577 if (utils_1.Utils.exists(index)) {
32578 utils_1.Utils.insertIntoArray(this.rootNode.allLeafChildren, newNode, index);
32579 }
32580 else {
32581 this.rootNode.allLeafChildren.push(newNode);
32582 }
32583 return newNode;
32584 };
32585 ClientSideNodeManager.prototype.lookupRowNode = function (data) {
32586 var rowNodeIdFunc = this.gridOptionsWrapper.getRowNodeIdFunc();
32587 var rowNode;
32588 if (utils_1.Utils.exists(rowNodeIdFunc)) {
32589 // find rowNode using id
32590 var id = rowNodeIdFunc(data);
32591 rowNode = this.allNodesMap[id];
32592 if (!rowNode) {
32593 console.error("ag-Grid: could not find row id=" + id + ", data item was not found for this id");
32594 return null;
32595 }
32596 }
32597 else {
32598 // find rowNode using object references
32599 rowNode = utils_1.Utils.find(this.rootNode.allLeafChildren, function (rowNode) { return rowNode.data === data; });
32600 if (!rowNode) {
32601 console.error("ag-Grid: could not find data item as object was not found", data);
32602 return null;
32603 }
32604 }
32605 return rowNode;
32606 };
32607 ClientSideNodeManager.prototype.updatedRowNode = function (rowNode, data, update) {
32608 if (update) {
32609 // do update
32610 rowNode.updateData(data);
32611 }
32612 else {
32613 // do delete - setting 'tailingNodeInSequence = true' to ensure EVENT_SELECTION_CHANGED is not raised for
32614 // each row node updated, instead it is raised once by the calling code if any selected nodes exist.
32615 rowNode.setSelected(false, false, true);
32616 // so row renderer knows to fade row out (and not reposition it)
32617 rowNode.clearRowTop();
32618 utils_1.Utils.removeFromArray(this.rootNode.allLeafChildren, rowNode);
32619 this.allNodesMap[rowNode.id] = undefined;
32620 }
32621 };
32622 ClientSideNodeManager.prototype.recursiveFunction = function (rowData, parent, level) {
32623 var _this = this;
32624 // make sure the rowData is an array and not a string of json - this was a commonly reported problem on the forum
32625 if (typeof rowData === 'string') {
32626 console.warn('ag-Grid: rowData must be an array, however you passed in a string. If you are loading JSON, make sure you convert the JSON string to JavaScript objects first');
32627 return;
32628 }
32629 var rowNodes = [];
32630 rowData.forEach(function (dataItem) {
32631 var node = _this.createNode(dataItem, parent, level);
32632 rowNodes.push(node);
32633 });
32634 return rowNodes;
32635 };
32636 ClientSideNodeManager.prototype.createNode = function (dataItem, parent, level) {
32637 var node = new rowNode_1.RowNode();
32638 this.context.wireBean(node);
32639 var doingTreeData = this.gridOptionsWrapper.isTreeData();
32640 var doingLegacyTreeData = !doingTreeData && utils_1.Utils.exists(this.getNodeChildDetails);
32641 var nodeChildDetails = doingLegacyTreeData ? this.getNodeChildDetails(dataItem) : null;
32642 if (nodeChildDetails && nodeChildDetails.group) {
32643 node.group = true;
32644 node.childrenAfterGroup = this.recursiveFunction(nodeChildDetails.children, node, level + 1);
32645 node.expanded = nodeChildDetails.expanded === true;
32646 node.field = nodeChildDetails.field;
32647 node.key = nodeChildDetails.key;
32648 node.canFlower = node.master; // deprecated, is now 'master'
32649 // pull out all the leaf children and add to our node
32650 this.setLeafChildren(node);
32651 }
32652 else {
32653 node.group = false;
32654 if (doingTreeData) {
32655 node.master = false;
32656 node.expanded = false;
32657 }
32658 else {
32659 // this is the default, for when doing grid data
32660 if (this.doesDataFlower) {
32661 node.master = this.doesDataFlower(dataItem);
32662 }
32663 else if (this.doingMasterDetail) {
32664 // if we are doing master detail, then the
32665 // default is that everything can flower.
32666 if (this.isRowMasterFunc) {
32667 node.master = this.isRowMasterFunc(dataItem);
32668 }
32669 else {
32670 node.master = true;
32671 }
32672 }
32673 else {
32674 node.master = false;
32675 }
32676 var rowGroupColumns = this.columnController.getRowGroupColumns();
32677 var numRowGroupColumns = rowGroupColumns ? rowGroupColumns.length : 0;
32678 // need to take row group into account when determining level
32679 var masterRowLevel = level + numRowGroupColumns;
32680 node.expanded = node.master ? this.isExpanded(masterRowLevel) : false;
32681 }
32682 }
32683 // support for backwards compatibility, canFlow is now called 'master'
32684 node.canFlower = node.master;
32685 if (parent && !this.suppressParentsInRowNodes) {
32686 node.parent = parent;
32687 }
32688 node.level = level;
32689 node.setDataAndId(dataItem, this.nextId.toString());
32690 this.allNodesMap[node.id] = node;
32691 this.nextId++;
32692 return node;
32693 };
32694 ClientSideNodeManager.prototype.isExpanded = function (level) {
32695 var expandByDefault = this.gridOptionsWrapper.getGroupDefaultExpanded();
32696 if (expandByDefault === -1) {
32697 return true;
32698 }
32699 else {
32700 return level < expandByDefault;
32701 }
32702 };
32703 // this is only used for doing legacy tree data
32704 ClientSideNodeManager.prototype.setLeafChildren = function (node) {
32705 node.allLeafChildren = [];
32706 if (node.childrenAfterGroup) {
32707 node.childrenAfterGroup.forEach(function (childAfterGroup) {
32708 if (childAfterGroup.group) {
32709 if (childAfterGroup.allLeafChildren) {
32710 childAfterGroup.allLeafChildren.forEach(function (leafChild) { return node.allLeafChildren.push(leafChild); });
32711 }
32712 }
32713 else {
32714 node.allLeafChildren.push(childAfterGroup);
32715 }
32716 });
32717 }
32718 };
32719 ClientSideNodeManager.prototype.insertItemsAtIndex = function (index, rowData) {
32720 if (this.isLegacyTreeData()) {
32721 return null;
32722 }
32723 var nodeList = this.rootNode.allLeafChildren;
32724 if (index > nodeList.length) {
32725 console.warn("ag-Grid: invalid index " + index + ", max index is " + nodeList.length);
32726 return;
32727 }
32728 var newNodes = [];
32729 // go through the items backwards, otherwise they get added in reverse order
32730 for (var i = rowData.length - 1; i >= 0; i--) {
32731 var data = rowData[i];
32732 var newNode = this.createNode(data, null, ClientSideNodeManager.TOP_LEVEL);
32733 utils_1.Utils.insertIntoArray(nodeList, newNode, index);
32734 newNodes.push(newNode);
32735 }
32736 return newNodes.length > 0 ? newNodes : null;
32737 };
32738 ClientSideNodeManager.prototype.addItems = function (items) {
32739 var nodeList = this.rootNode.allLeafChildren;
32740 return this.insertItemsAtIndex(nodeList.length, items);
32741 };
32742 ClientSideNodeManager.prototype.isLegacyTreeData = function () {
32743 var rowsAlreadyGrouped = utils_1.Utils.exists(this.gridOptionsWrapper.getNodeChildDetailsFunc());
32744 if (rowsAlreadyGrouped) {
32745 console.warn('ag-Grid: adding and removing rows is not supported when using nodeChildDetailsFunc, ie it is not ' +
32746 'supported for legacy tree data. Please see the docs on the new preferred way of providing tree data that works with delta updates.');
32747 return true;
32748 }
32749 else {
32750 return false;
32751 }
32752 };
32753 ClientSideNodeManager.TOP_LEVEL = 0;
32754 ClientSideNodeManager.ROOT_NODE_ID = 'ROOT_NODE_ID';
32755 return ClientSideNodeManager;
32756}());
32757exports.ClientSideNodeManager = ClientSideNodeManager;
32758
32759
32760/***/ }),
32761/* 120 */
32762/***/ (function(module, exports, __webpack_require__) {
32763
32764"use strict";
32765/**
32766 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
32767 * @version v18.1.2
32768 * @link http://www.ag-grid.com/
32769 * @license MIT
32770 */
32771
32772Object.defineProperty(exports, "__esModule", { value: true });
32773/** The base frameworks, eg React & Angular 2, override this bean with implementations specific to their requirement. */
32774var BaseFrameworkFactory = (function () {
32775 function BaseFrameworkFactory() {
32776 }
32777 BaseFrameworkFactory.prototype.dateComponent = function (gridOptions) {
32778 return gridOptions.dateComponent;
32779 };
32780 BaseFrameworkFactory.prototype.colDefFloatingCellRenderer = function (colDef) {
32781 return colDef.pinnedRowCellRenderer;
32782 };
32783 BaseFrameworkFactory.prototype.colDefCellRenderer = function (colDef) {
32784 return colDef.cellRenderer;
32785 };
32786 BaseFrameworkFactory.prototype.colDefCellEditor = function (colDef) {
32787 return colDef.cellEditor;
32788 };
32789 BaseFrameworkFactory.prototype.colDefFilter = function (colDef) {
32790 return colDef.filter;
32791 };
32792 BaseFrameworkFactory.prototype.gridOptionsFullWidthCellRenderer = function (gridOptions) {
32793 return gridOptions.fullWidthCellRenderer;
32794 };
32795 BaseFrameworkFactory.prototype.gridOptionsGroupRowRenderer = function (gridOptions) {
32796 return gridOptions.groupRowRenderer;
32797 };
32798 BaseFrameworkFactory.prototype.gridOptionsGroupRowInnerRenderer = function (gridOptions) {
32799 return gridOptions.groupRowInnerRenderer;
32800 };
32801 BaseFrameworkFactory.prototype.setTimeout = function (action, timeout) {
32802 setTimeout(action, timeout);
32803 };
32804 return BaseFrameworkFactory;
32805}());
32806exports.BaseFrameworkFactory = BaseFrameworkFactory;
32807
32808
32809/***/ }),
32810/* 121 */
32811/***/ (function(module, exports, __webpack_require__) {
32812
32813"use strict";
32814/**
32815 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
32816 * @version v18.1.2
32817 * @link http://www.ag-grid.com/
32818 * @license MIT
32819 */
32820
32821var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
32822 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
32823 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
32824 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
32825 return c > 3 && r && Object.defineProperty(target, key, r), r;
32826};
32827Object.defineProperty(exports, "__esModule", { value: true });
32828var context_1 = __webpack_require__(0);
32829var LINE_SEPARATOR = '\r\n';
32830var XmlFactory = (function () {
32831 function XmlFactory() {
32832 }
32833 XmlFactory.prototype.createXml = function (xmlElement, booleanTransformer) {
32834 var _this = this;
32835 var props = "";
32836 if (xmlElement.properties) {
32837 if (xmlElement.properties.prefixedAttributes) {
32838 xmlElement.properties.prefixedAttributes.forEach(function (prefixedSet) {
32839 Object.keys(prefixedSet.map).forEach(function (key) {
32840 props += _this.returnAttributeIfPopulated(prefixedSet.prefix + key, prefixedSet.map[key], booleanTransformer);
32841 });
32842 });
32843 }
32844 if (xmlElement.properties.rawMap) {
32845 Object.keys(xmlElement.properties.rawMap).forEach(function (key) {
32846 props += _this.returnAttributeIfPopulated(key, xmlElement.properties.rawMap[key], booleanTransformer);
32847 });
32848 }
32849 }
32850 var result = "<" + xmlElement.name + props;
32851 if (!xmlElement.children && xmlElement.textNode == null) {
32852 return result + "/>" + LINE_SEPARATOR;
32853 }
32854 if (xmlElement.textNode != null) {
32855 return result + ">" + xmlElement.textNode + "</" + xmlElement.name + ">" + LINE_SEPARATOR;
32856 }
32857 result += ">" + LINE_SEPARATOR;
32858 xmlElement.children.forEach(function (it) {
32859 result += _this.createXml(it, booleanTransformer);
32860 });
32861 return result + "</" + xmlElement.name + ">" + LINE_SEPARATOR;
32862 };
32863 XmlFactory.prototype.returnAttributeIfPopulated = function (key, value, booleanTransformer) {
32864 if (!value) {
32865 return "";
32866 }
32867 var xmlValue = value;
32868 if ((typeof (value) === 'boolean')) {
32869 if (booleanTransformer) {
32870 xmlValue = booleanTransformer(value);
32871 }
32872 }
32873 xmlValue = '"' + xmlValue + '"';
32874 return " " + key + "=" + xmlValue;
32875 };
32876 XmlFactory = __decorate([
32877 context_1.Bean('xmlFactory')
32878 ], XmlFactory);
32879 return XmlFactory;
32880}());
32881exports.XmlFactory = XmlFactory;
32882
32883
32884/***/ }),
32885/* 122 */
32886/***/ (function(module, exports, __webpack_require__) {
32887
32888// same as main.js, except also includes the styles, so webpack includes the css in the bundle
32889var agGrid = __webpack_require__(123);
32890Object.keys(agGrid).forEach(function(key) {
32891 exports[key] = agGrid[key];
32892});
32893
32894__webpack_require__(149);
32895
32896__webpack_require__(151);
32897__webpack_require__(153);
32898__webpack_require__(155);
32899__webpack_require__(157);
32900__webpack_require__(159);
32901
32902__webpack_require__(161);
32903__webpack_require__(163);
32904__webpack_require__(165);
32905__webpack_require__(167);
32906__webpack_require__(169);
32907__webpack_require__(171);
32908__webpack_require__(173);
32909
32910
32911/***/ }),
32912/* 123 */
32913/***/ (function(module, exports, __webpack_require__) {
32914
32915"use strict";
32916/* WEBPACK VAR INJECTION */(function(global) {/**
32917 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
32918 * @version v18.1.2
32919 * @link http://www.ag-grid.com/
32920 * @license MIT
32921 */
32922
32923// to satisfy server side compilation
32924Object.defineProperty(exports, "__esModule", { value: true });
32925var globalObj = typeof global === 'undefined' ? {} : global;
32926globalObj.HTMLElement = typeof HTMLElement === 'undefined' ? {} : HTMLElement;
32927globalObj.HTMLButtonElement = typeof HTMLButtonElement === 'undefined' ? {} : HTMLButtonElement;
32928globalObj.HTMLSelectElement = typeof HTMLSelectElement === 'undefined' ? {} : HTMLSelectElement;
32929globalObj.HTMLInputElement = typeof HTMLInputElement === 'undefined' ? {} : HTMLInputElement;
32930globalObj.Node = typeof Node === 'undefined' ? {} : Node;
32931globalObj.MouseEvent = typeof MouseEvent === 'undefined' ? {} : MouseEvent;
32932// columnController
32933var balancedColumnTreeBuilder_1 = __webpack_require__(40);
32934exports.BalancedColumnTreeBuilder = balancedColumnTreeBuilder_1.BalancedColumnTreeBuilder;
32935var columnController_1 = __webpack_require__(4);
32936exports.ColumnController = columnController_1.ColumnController;
32937var columnKeyCreator_1 = __webpack_require__(109);
32938exports.ColumnKeyCreator = columnKeyCreator_1.ColumnKeyCreator;
32939var columnUtils_1 = __webpack_require__(33);
32940exports.ColumnUtils = columnUtils_1.ColumnUtils;
32941var displayedGroupCreator_1 = __webpack_require__(50);
32942exports.DisplayedGroupCreator = displayedGroupCreator_1.DisplayedGroupCreator;
32943var groupInstanceIdCreator_1 = __webpack_require__(85);
32944exports.GroupInstanceIdCreator = groupInstanceIdCreator_1.GroupInstanceIdCreator;
32945// components
32946var componentUtil_1 = __webpack_require__(64);
32947exports.ComponentUtil = componentUtil_1.ComponentUtil;
32948var colDefUtil_1 = __webpack_require__(108);
32949exports.ColDefUtil = colDefUtil_1.ColDefUtil;
32950var componentProvider_1 = __webpack_require__(68);
32951exports.ComponentProvider = componentProvider_1.ComponentProvider;
32952var agGridNg1_1 = __webpack_require__(138);
32953exports.initialiseAgGridWithAngular1 = agGridNg1_1.initialiseAgGridWithAngular1;
32954var agGridWebComponent_1 = __webpack_require__(143);
32955exports.initialiseAgGridWithWebComponents = agGridWebComponent_1.initialiseAgGridWithWebComponents;
32956// context
32957var beanStub_1 = __webpack_require__(13);
32958exports.BeanStub = beanStub_1.BeanStub;
32959var context_1 = __webpack_require__(0);
32960exports.Context = context_1.Context;
32961exports.Autowired = context_1.Autowired;
32962exports.PostConstruct = context_1.PostConstruct;
32963exports.PreConstruct = context_1.PreConstruct;
32964exports.Optional = context_1.Optional;
32965exports.Bean = context_1.Bean;
32966exports.Qualifier = context_1.Qualifier;
32967exports.PreDestroy = context_1.PreDestroy;
32968var componentAnnotations_1 = __webpack_require__(11);
32969exports.QuerySelector = componentAnnotations_1.QuerySelector;
32970exports.Listener = componentAnnotations_1.Listener;
32971exports.RefSelector = componentAnnotations_1.RefSelector;
32972// dragAndDrop
32973var dragAndDropService_1 = __webpack_require__(16);
32974exports.DragAndDropService = dragAndDropService_1.DragAndDropService;
32975exports.DragSourceType = dragAndDropService_1.DragSourceType;
32976exports.HDirection = dragAndDropService_1.HDirection;
32977exports.VDirection = dragAndDropService_1.VDirection;
32978var dragService_1 = __webpack_require__(42);
32979exports.DragService = dragService_1.DragService;
32980// entities
32981var column_1 = __webpack_require__(10);
32982exports.Column = column_1.Column;
32983var columnGroup_1 = __webpack_require__(28);
32984exports.ColumnGroup = columnGroup_1.ColumnGroup;
32985var gridCell_1 = __webpack_require__(25);
32986exports.GridCell = gridCell_1.GridCell;
32987var gridRow_1 = __webpack_require__(66);
32988exports.GridRow = gridRow_1.GridRow;
32989var originalColumnGroup_1 = __webpack_require__(34);
32990exports.OriginalColumnGroup = originalColumnGroup_1.OriginalColumnGroup;
32991var rowNode_1 = __webpack_require__(18);
32992exports.RowNode = rowNode_1.RowNode;
32993// filter
32994var baseFilter_1 = __webpack_require__(53);
32995exports.BaseFilter = baseFilter_1.BaseFilter;
32996var dateFilter_1 = __webpack_require__(70);
32997exports.DateFilter = dateFilter_1.DateFilter;
32998var filterManager_1 = __webpack_require__(20);
32999exports.FilterManager = filterManager_1.FilterManager;
33000var numberFilter_1 = __webpack_require__(97);
33001exports.NumberFilter = numberFilter_1.NumberFilter;
33002var textFilter_1 = __webpack_require__(96);
33003exports.TextFilter = textFilter_1.TextFilter;
33004// gridPanel
33005var gridPanel_1 = __webpack_require__(80);
33006exports.GridPanel = gridPanel_1.GridPanel;
33007var scrollVisibleService_1 = __webpack_require__(38);
33008exports.ScrollVisibleService = scrollVisibleService_1.ScrollVisibleService;
33009var mouseEventService_1 = __webpack_require__(46);
33010exports.MouseEventService = mouseEventService_1.MouseEventService;
33011// headerRendering
33012var bodyDropPivotTarget_1 = __webpack_require__(105);
33013exports.BodyDropPivotTarget = bodyDropPivotTarget_1.BodyDropPivotTarget;
33014var bodyDropTarget_1 = __webpack_require__(103);
33015exports.BodyDropTarget = bodyDropTarget_1.BodyDropTarget;
33016var cssClassApplier_1 = __webpack_require__(83);
33017exports.CssClassApplier = cssClassApplier_1.CssClassApplier;
33018var headerContainer_1 = __webpack_require__(100);
33019exports.HeaderContainer = headerContainer_1.HeaderContainer;
33020var headerRootComp_1 = __webpack_require__(82);
33021exports.HeaderRootComp = headerRootComp_1.HeaderRootComp;
33022var headerRowComp_1 = __webpack_require__(101);
33023exports.HeaderRowComp = headerRowComp_1.HeaderRowComp;
33024var horizontalResizeService_1 = __webpack_require__(61);
33025exports.HorizontalResizeService = horizontalResizeService_1.HorizontalResizeService;
33026var moveColumnController_1 = __webpack_require__(104);
33027exports.MoveColumnController = moveColumnController_1.MoveColumnController;
33028var standardMenu_1 = __webpack_require__(110);
33029exports.StandardMenuFactory = standardMenu_1.StandardMenuFactory;
33030// layout
33031var tabbedLayout_1 = __webpack_require__(144);
33032exports.TabbedLayout = tabbedLayout_1.TabbedLayout;
33033var verticalStack_1 = __webpack_require__(145);
33034exports.VerticalStack = verticalStack_1.VerticalStack;
33035// misc
33036var simpleHttpRequest_1 = __webpack_require__(146);
33037exports.simpleHttpRequest = simpleHttpRequest_1.simpleHttpRequest;
33038var largeTextCellEditor_1 = __webpack_require__(95);
33039exports.LargeTextCellEditor = largeTextCellEditor_1.LargeTextCellEditor;
33040var popupEditorWrapper_1 = __webpack_require__(71);
33041exports.PopupEditorWrapper = popupEditorWrapper_1.PopupEditorWrapper;
33042var popupSelectCellEditor_1 = __webpack_require__(94);
33043exports.PopupSelectCellEditor = popupSelectCellEditor_1.PopupSelectCellEditor;
33044var popupTextCellEditor_1 = __webpack_require__(93);
33045exports.PopupTextCellEditor = popupTextCellEditor_1.PopupTextCellEditor;
33046var selectCellEditor_1 = __webpack_require__(77);
33047exports.SelectCellEditor = selectCellEditor_1.SelectCellEditor;
33048var textCellEditor_1 = __webpack_require__(69);
33049exports.TextCellEditor = textCellEditor_1.TextCellEditor;
33050var animateShowChangeCellRenderer_1 = __webpack_require__(73);
33051exports.AnimateShowChangeCellRenderer = animateShowChangeCellRenderer_1.AnimateShowChangeCellRenderer;
33052var animateSlideCellRenderer_1 = __webpack_require__(72);
33053exports.AnimateSlideCellRenderer = animateSlideCellRenderer_1.AnimateSlideCellRenderer;
33054var groupCellRenderer_1 = __webpack_require__(74);
33055exports.GroupCellRenderer = groupCellRenderer_1.GroupCellRenderer;
33056// features
33057var setLeftFeature_1 = __webpack_require__(54);
33058exports.SetLeftFeature = setLeftFeature_1.SetLeftFeature;
33059// rendering
33060var autoWidthCalculator_1 = __webpack_require__(41);
33061exports.AutoWidthCalculator = autoWidthCalculator_1.AutoWidthCalculator;
33062var cellEditorFactory_1 = __webpack_require__(56);
33063exports.CellEditorFactory = cellEditorFactory_1.CellEditorFactory;
33064var cellRendererFactory_1 = __webpack_require__(57);
33065exports.CellRendererFactory = cellRendererFactory_1.CellRendererFactory;
33066var cellRendererService_1 = __webpack_require__(58);
33067exports.CellRendererService = cellRendererService_1.CellRendererService;
33068var checkboxSelectionComponent_1 = __webpack_require__(67);
33069exports.CheckboxSelectionComponent = checkboxSelectionComponent_1.CheckboxSelectionComponent;
33070var cellComp_1 = __webpack_require__(36);
33071exports.CellComp = cellComp_1.CellComp;
33072var rowComp_1 = __webpack_require__(52);
33073exports.RowComp = rowComp_1.RowComp;
33074var rowRenderer_1 = __webpack_require__(22);
33075exports.RowRenderer = rowRenderer_1.RowRenderer;
33076var valueFormatterService_1 = __webpack_require__(45);
33077exports.ValueFormatterService = valueFormatterService_1.ValueFormatterService;
33078// rowControllers/inMemory
33079var filterStage_1 = __webpack_require__(111);
33080exports.FilterStage = filterStage_1.FilterStage;
33081var flattenStage_1 = __webpack_require__(115);
33082exports.FlattenStage = flattenStage_1.FlattenStage;
33083var sortStage_1 = __webpack_require__(113);
33084exports.SortStage = sortStage_1.SortStage;
33085// row models
33086var pinnedRowModel_1 = __webpack_require__(32);
33087exports.PinnedRowModel = pinnedRowModel_1.PinnedRowModel;
33088var clientSideRowModel_1 = __webpack_require__(118);
33089exports.ClientSideRowModel = clientSideRowModel_1.ClientSideRowModel;
33090var changedPath_1 = __webpack_require__(90);
33091exports.ChangedPath = changedPath_1.ChangedPath;
33092var clientSideNodeManager_1 = __webpack_require__(119);
33093exports.ClientSideNodeManager = clientSideNodeManager_1.ClientSideNodeManager;
33094var infiniteRowModel_1 = __webpack_require__(116);
33095exports.InfiniteRowModel = infiniteRowModel_1.InfiniteRowModel;
33096var rowNodeBlock_1 = __webpack_require__(63);
33097exports.RowNodeBlock = rowNodeBlock_1.RowNodeBlock;
33098var rowNodeBlockLoader_1 = __webpack_require__(117);
33099exports.RowNodeBlockLoader = rowNodeBlockLoader_1.RowNodeBlockLoader;
33100var rowNodeCache_1 = __webpack_require__(89);
33101exports.RowNodeCache = rowNodeCache_1.RowNodeCache;
33102//styling
33103var stylingService_1 = __webpack_require__(75);
33104exports.StylingService = stylingService_1.StylingService;
33105// widgets
33106var agCheckbox_1 = __webpack_require__(62);
33107exports.AgCheckbox = agCheckbox_1.AgCheckbox;
33108var component_1 = __webpack_require__(8);
33109exports.Component = component_1.Component;
33110var popupService_1 = __webpack_require__(37);
33111exports.PopupService = popupService_1.PopupService;
33112var touchListener_1 = __webpack_require__(48);
33113exports.TouchListener = touchListener_1.TouchListener;
33114// root
33115var baseFrameworkFactory_1 = __webpack_require__(120);
33116exports.BaseFrameworkFactory = baseFrameworkFactory_1.BaseFrameworkFactory;
33117var cellNavigationService_1 = __webpack_require__(84);
33118exports.CellNavigationService = cellNavigationService_1.CellNavigationService;
33119var alignedGridsService_1 = __webpack_require__(60);
33120exports.AlignedGridsService = alignedGridsService_1.AlignedGridsService;
33121var constants_1 = __webpack_require__(9);
33122exports.Constants = constants_1.Constants;
33123var csvCreator_1 = __webpack_require__(49);
33124exports.CsvCreator = csvCreator_1.CsvCreator;
33125exports.BaseCreator = csvCreator_1.BaseCreator;
33126var downloader_1 = __webpack_require__(86);
33127exports.Downloader = downloader_1.Downloader;
33128var grid_1 = __webpack_require__(87);
33129exports.Grid = grid_1.Grid;
33130var gridApi_1 = __webpack_require__(6);
33131exports.GridApi = gridApi_1.GridApi;
33132var eventKeys_1 = __webpack_require__(27);
33133exports.Events = eventKeys_1.Events;
33134var focusedCellController_1 = __webpack_require__(24);
33135exports.FocusedCellController = focusedCellController_1.FocusedCellController;
33136var functions_1 = __webpack_require__(147);
33137exports.defaultGroupComparator = functions_1.defaultGroupComparator;
33138var gridOptionsWrapper_1 = __webpack_require__(2);
33139exports.GridOptionsWrapper = gridOptionsWrapper_1.GridOptionsWrapper;
33140var eventService_1 = __webpack_require__(3);
33141exports.EventService = eventService_1.EventService;
33142var selectableService_1 = __webpack_require__(88);
33143exports.SelectableService = selectableService_1.SelectableService;
33144var gridCore_1 = __webpack_require__(44);
33145exports.GridCore = gridCore_1.GridCore;
33146var logger_1 = __webpack_require__(12);
33147exports.Logger = logger_1.Logger;
33148var selectionController_1 = __webpack_require__(19);
33149exports.SelectionController = selectionController_1.SelectionController;
33150var sortController_1 = __webpack_require__(26);
33151exports.SortController = sortController_1.SortController;
33152var templateService_1 = __webpack_require__(51);
33153exports.TemplateService = templateService_1.TemplateService;
33154var utils_1 = __webpack_require__(1);
33155exports.Utils = utils_1.Utils;
33156exports.NumberSequence = utils_1.NumberSequence;
33157exports._ = utils_1._;
33158exports.Promise = utils_1.Promise;
33159var valueService_1 = __webpack_require__(17);
33160exports.ValueService = valueService_1.ValueService;
33161var expressionService_1 = __webpack_require__(21);
33162exports.ExpressionService = expressionService_1.ExpressionService;
33163var xmlFactory_1 = __webpack_require__(121);
33164exports.XmlFactory = xmlFactory_1.XmlFactory;
33165var gridSerializer_1 = __webpack_require__(65);
33166exports.GridSerializer = gridSerializer_1.GridSerializer;
33167exports.BaseGridSerializingSession = gridSerializer_1.BaseGridSerializingSession;
33168exports.RowType = gridSerializer_1.RowType;
33169var logger_2 = __webpack_require__(12);
33170exports.LoggerFactory = logger_2.LoggerFactory;
33171var columnApi_1 = __webpack_require__(7);
33172exports.ColumnApi = columnApi_1.ColumnApi;
33173var frameworkComponentWrapper_1 = __webpack_require__(148);
33174exports.BaseComponentWrapper = frameworkComponentWrapper_1.BaseComponentWrapper;
33175var environment_1 = __webpack_require__(43);
33176exports.Environment = environment_1.Environment;
33177
33178/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(124)))
33179
33180/***/ }),
33181/* 124 */
33182/***/ (function(module, exports) {
33183
33184var g;
33185
33186// This works in non-strict mode
33187g = (function() {
33188 return this;
33189})();
33190
33191try {
33192 // This works if eval is allowed (see CSP)
33193 g = g || Function("return this")() || (1,eval)("this");
33194} catch(e) {
33195 // This works if the window reference is available
33196 if(typeof window === "object")
33197 g = window;
33198}
33199
33200// g can still be undefined, but nothing to do about it...
33201// We return undefined, instead of nothing here, so it's
33202// easier to handle this case. if(!global) { ...}
33203
33204module.exports = g;
33205
33206
33207/***/ }),
33208/* 125 */
33209/***/ (function(module, exports, __webpack_require__) {
33210
33211"use strict";
33212/**
33213 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
33214 * @version v18.1.2
33215 * @link http://www.ag-grid.com/
33216 * @license MIT
33217 */
33218
33219var __extends = (this && this.__extends) || (function () {
33220 var extendStatics = Object.setPrototypeOf ||
33221 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
33222 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
33223 return function (d, b) {
33224 extendStatics(d, b);
33225 function __() { this.constructor = d; }
33226 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
33227 };
33228})();
33229var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
33230 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
33231 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
33232 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
33233 return c > 3 && r && Object.defineProperty(target, key, r), r;
33234};
33235var __metadata = (this && this.__metadata) || function (k, v) {
33236 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
33237};
33238Object.defineProperty(exports, "__esModule", { value: true });
33239var component_1 = __webpack_require__(8);
33240var context_1 = __webpack_require__(0);
33241var rowNode_1 = __webpack_require__(18);
33242var dragAndDropService_1 = __webpack_require__(16);
33243var eventKeys_1 = __webpack_require__(27);
33244var utils_1 = __webpack_require__(1);
33245var beanStub_1 = __webpack_require__(13);
33246var RowDragComp = (function (_super) {
33247 __extends(RowDragComp, _super);
33248 function RowDragComp(rowNode, column, cellValue, beans) {
33249 var _this = _super.call(this, "<span class=\"ag-row-drag\"></span>") || this;
33250 _this.rowNode = rowNode;
33251 _this.column = column;
33252 _this.cellValue = cellValue;
33253 _this.beans = beans;
33254 return _this;
33255 }
33256 RowDragComp.prototype.postConstruct = function () {
33257 this.addDragSource();
33258 this.checkCompatibility();
33259 if (this.beans.gridOptionsWrapper.isRowDragManaged()) {
33260 this.addFeature(this.beans.context, new ManagedVisibilityStrategy(this, this.beans, this.rowNode, this.column));
33261 }
33262 else {
33263 this.addFeature(this.beans.context, new NonManagedVisibilityStrategy(this, this.beans, this.rowNode, this.column));
33264 }
33265 };
33266 // returns true if all compatibility items work out
33267 RowDragComp.prototype.checkCompatibility = function () {
33268 var managed = this.beans.gridOptionsWrapper.isRowDragManaged();
33269 var treeData = this.beans.gridOptionsWrapper.isTreeData();
33270 if (treeData && managed) {
33271 utils_1._.doOnce(function () {
33272 return console.warn('ag-Grid: If using row drag with tree data, you cannot have rowDragManaged=true');
33273 }, 'RowDragComp.managedAndTreeData');
33274 }
33275 };
33276 RowDragComp.prototype.addDragSource = function () {
33277 var _this = this;
33278 var dragItem = {
33279 rowNode: this.rowNode
33280 };
33281 var dragSource = {
33282 type: dragAndDropService_1.DragSourceType.RowDrag,
33283 eElement: this.getGui(),
33284 dragItemName: this.cellValue,
33285 dragItemCallback: function () { return dragItem; },
33286 dragStartPixels: 0
33287 };
33288 this.beans.dragAndDropService.addDragSource(dragSource, true);
33289 this.addDestroyFunc(function () { return _this.beans.dragAndDropService.removeDragSource(dragSource); });
33290 };
33291 __decorate([
33292 context_1.PostConstruct,
33293 __metadata("design:type", Function),
33294 __metadata("design:paramtypes", []),
33295 __metadata("design:returntype", void 0)
33296 ], RowDragComp.prototype, "postConstruct", null);
33297 return RowDragComp;
33298}(component_1.Component));
33299exports.RowDragComp = RowDragComp;
33300// when non managed, the visibility depends on suppressRowDrag property only
33301var NonManagedVisibilityStrategy = (function (_super) {
33302 __extends(NonManagedVisibilityStrategy, _super);
33303 function NonManagedVisibilityStrategy(parent, beans, rowNode, column) {
33304 var _this = _super.call(this) || this;
33305 _this.parent = parent;
33306 _this.beans = beans;
33307 _this.column = column;
33308 _this.rowNode = rowNode;
33309 return _this;
33310 }
33311 NonManagedVisibilityStrategy.prototype.postConstruct = function () {
33312 this.addDestroyableEventListener(this.beans.gridOptionsWrapper, 'suppressRowDrag', this.onSuppressRowDrag.bind(this));
33313 // in case data changes, then we need to update visibility of drag item
33314 this.addDestroyableEventListener(this.rowNode, rowNode_1.RowNode.EVENT_DATA_CHANGED, this.workOutVisibility.bind(this));
33315 this.addDestroyableEventListener(this.rowNode, rowNode_1.RowNode.EVENT_CELL_CHANGED, this.workOutVisibility.bind(this));
33316 this.workOutVisibility();
33317 };
33318 NonManagedVisibilityStrategy.prototype.onSuppressRowDrag = function () {
33319 this.workOutVisibility();
33320 };
33321 NonManagedVisibilityStrategy.prototype.workOutVisibility = function () {
33322 // only show the drag if both sort and filter are not present
33323 var suppressRowDrag = this.beans.gridOptionsWrapper.isSuppressRowDrag();
33324 if (suppressRowDrag) {
33325 this.parent.setVisible(false);
33326 }
33327 else {
33328 var visible = this.column.isRowDrag(this.rowNode);
33329 this.parent.setVisible(visible);
33330 }
33331 };
33332 __decorate([
33333 context_1.PostConstruct,
33334 __metadata("design:type", Function),
33335 __metadata("design:paramtypes", []),
33336 __metadata("design:returntype", void 0)
33337 ], NonManagedVisibilityStrategy.prototype, "postConstruct", null);
33338 return NonManagedVisibilityStrategy;
33339}(beanStub_1.BeanStub));
33340// when managed, the visibility depends on sort, filter and row group, as well as suppressRowDrag property
33341var ManagedVisibilityStrategy = (function (_super) {
33342 __extends(ManagedVisibilityStrategy, _super);
33343 function ManagedVisibilityStrategy(parent, beans, rowNode, column) {
33344 var _this = _super.call(this) || this;
33345 _this.parent = parent;
33346 _this.beans = beans;
33347 _this.column = column;
33348 _this.rowNode = rowNode;
33349 return _this;
33350 }
33351 ManagedVisibilityStrategy.prototype.postConstruct = function () {
33352 // we do not show the component if sort, filter or grouping is active
33353 this.addDestroyableEventListener(this.beans.eventService, eventKeys_1.Events.EVENT_SORT_CHANGED, this.onSortChanged.bind(this));
33354 this.addDestroyableEventListener(this.beans.eventService, eventKeys_1.Events.EVENT_FILTER_CHANGED, this.onFilterChanged.bind(this));
33355 this.addDestroyableEventListener(this.beans.eventService, eventKeys_1.Events.EVENT_COLUMN_ROW_GROUP_CHANGED, this.onRowGroupChanged.bind(this));
33356 // in case data changes, then we need to update visibility of drag item
33357 this.addDestroyableEventListener(this.rowNode, rowNode_1.RowNode.EVENT_DATA_CHANGED, this.workOutVisibility.bind(this));
33358 this.addDestroyableEventListener(this.rowNode, rowNode_1.RowNode.EVENT_CELL_CHANGED, this.workOutVisibility.bind(this));
33359 this.addDestroyableEventListener(this.beans.gridOptionsWrapper, 'suppressRowDrag', this.onSuppressRowDrag.bind(this));
33360 this.updateSortActive();
33361 this.updateFilterActive();
33362 this.updateRowGroupActive();
33363 this.workOutVisibility();
33364 };
33365 ManagedVisibilityStrategy.prototype.updateRowGroupActive = function () {
33366 var rowGroups = this.beans.columnController.getRowGroupColumns();
33367 this.rowGroupActive = !utils_1._.missingOrEmpty(rowGroups);
33368 };
33369 ManagedVisibilityStrategy.prototype.onRowGroupChanged = function () {
33370 this.updateRowGroupActive();
33371 this.workOutVisibility();
33372 };
33373 ManagedVisibilityStrategy.prototype.updateSortActive = function () {
33374 var sortModel = this.beans.sortController.getSortModel();
33375 this.sortActive = !utils_1._.missingOrEmpty(sortModel);
33376 };
33377 ManagedVisibilityStrategy.prototype.onSortChanged = function () {
33378 this.updateSortActive();
33379 this.workOutVisibility();
33380 };
33381 ManagedVisibilityStrategy.prototype.updateFilterActive = function () {
33382 this.filterActive = this.beans.filterManager.isAnyFilterPresent();
33383 };
33384 ManagedVisibilityStrategy.prototype.onFilterChanged = function () {
33385 this.updateFilterActive();
33386 this.workOutVisibility();
33387 };
33388 ManagedVisibilityStrategy.prototype.onSuppressRowDrag = function () {
33389 this.workOutVisibility();
33390 };
33391 ManagedVisibilityStrategy.prototype.workOutVisibility = function () {
33392 // only show the drag if both sort and filter are not present
33393 var sortOrFilterOrGroupActive = this.sortActive || this.filterActive || this.rowGroupActive;
33394 var suppressRowDrag = this.beans.gridOptionsWrapper.isSuppressRowDrag();
33395 var alwaysHide = sortOrFilterOrGroupActive || suppressRowDrag;
33396 if (alwaysHide) {
33397 this.parent.setVisible(false);
33398 }
33399 else {
33400 var visible = this.column.isRowDrag(this.rowNode);
33401 this.parent.setVisible(visible);
33402 }
33403 };
33404 __decorate([
33405 context_1.PostConstruct,
33406 __metadata("design:type", Function),
33407 __metadata("design:paramtypes", []),
33408 __metadata("design:returntype", void 0)
33409 ], ManagedVisibilityStrategy.prototype, "postConstruct", null);
33410 return ManagedVisibilityStrategy;
33411}(beanStub_1.BeanStub));
33412
33413
33414/***/ }),
33415/* 126 */
33416/***/ (function(module, exports, __webpack_require__) {
33417
33418"use strict";
33419/**
33420 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
33421 * @version v18.1.2
33422 * @link http://www.ag-grid.com/
33423 * @license MIT
33424 */
33425
33426var __extends = (this && this.__extends) || (function () {
33427 var extendStatics = Object.setPrototypeOf ||
33428 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
33429 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
33430 return function (d, b) {
33431 extendStatics(d, b);
33432 function __() { this.constructor = d; }
33433 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
33434 };
33435})();
33436var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
33437 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
33438 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
33439 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
33440 return c > 3 && r && Object.defineProperty(target, key, r), r;
33441};
33442var __metadata = (this && this.__metadata) || function (k, v) {
33443 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
33444};
33445Object.defineProperty(exports, "__esModule", { value: true });
33446var context_1 = __webpack_require__(0);
33447var column_1 = __webpack_require__(10);
33448var utils_1 = __webpack_require__(1);
33449var setLeftFeature_1 = __webpack_require__(54);
33450var component_1 = __webpack_require__(8);
33451var componentAnnotations_1 = __webpack_require__(11);
33452var gridOptionsWrapper_1 = __webpack_require__(2);
33453var beans_1 = __webpack_require__(30);
33454var hoverFeature_1 = __webpack_require__(76);
33455var events_1 = __webpack_require__(5);
33456var eventService_1 = __webpack_require__(3);
33457var columnHoverService_1 = __webpack_require__(47);
33458var BaseFilterWrapperComp = (function (_super) {
33459 __extends(BaseFilterWrapperComp, _super);
33460 function BaseFilterWrapperComp() {
33461 return _super !== null && _super.apply(this, arguments) || this;
33462 }
33463 BaseFilterWrapperComp.prototype.init = function (params) {
33464 this.column = params.column;
33465 var base = utils_1._.loadTemplate("<div class=\"ag-header-cell\" aria-hidden=\"true\"><div class=\"ag-floating-filter-body\" aria-hidden=\"true\"></div></div>");
33466 this.enrichBody(base);
33467 this.setTemplateFromElement(base);
33468 this.setupWidth();
33469 this.addColumnHoverListener();
33470 this.addFeature(this.context, new hoverFeature_1.HoverFeature([this.column], this.getGui()));
33471 var setLeftFeature = new setLeftFeature_1.SetLeftFeature(this.column, this.getGui(), this.beans);
33472 setLeftFeature.init();
33473 this.addDestroyFunc(setLeftFeature.destroy.bind(setLeftFeature));
33474 };
33475 BaseFilterWrapperComp.prototype.addColumnHoverListener = function () {
33476 this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_COLUMN_HOVER_CHANGED, this.onColumnHover.bind(this));
33477 this.onColumnHover();
33478 };
33479 BaseFilterWrapperComp.prototype.onColumnHover = function () {
33480 var isHovered = this.columnHoverService.isHovered(this.column);
33481 utils_1._.addOrRemoveCssClass(this.getGui(), 'ag-column-hover', isHovered);
33482 };
33483 BaseFilterWrapperComp.prototype.setupWidth = function () {
33484 this.addDestroyableEventListener(this.column, column_1.Column.EVENT_WIDTH_CHANGED, this.onColumnWidthChanged.bind(this));
33485 this.onColumnWidthChanged();
33486 };
33487 BaseFilterWrapperComp.prototype.onColumnWidthChanged = function () {
33488 this.getGui().style.width = this.column.getActualWidth() + 'px';
33489 };
33490 __decorate([
33491 context_1.Autowired('context'),
33492 __metadata("design:type", context_1.Context)
33493 ], BaseFilterWrapperComp.prototype, "context", void 0);
33494 __decorate([
33495 context_1.Autowired('columnHoverService'),
33496 __metadata("design:type", columnHoverService_1.ColumnHoverService)
33497 ], BaseFilterWrapperComp.prototype, "columnHoverService", void 0);
33498 __decorate([
33499 context_1.Autowired('eventService'),
33500 __metadata("design:type", eventService_1.EventService)
33501 ], BaseFilterWrapperComp.prototype, "eventService", void 0);
33502 __decorate([
33503 context_1.Autowired('beans'),
33504 __metadata("design:type", beans_1.Beans)
33505 ], BaseFilterWrapperComp.prototype, "beans", void 0);
33506 return BaseFilterWrapperComp;
33507}(component_1.Component));
33508exports.BaseFilterWrapperComp = BaseFilterWrapperComp;
33509var FloatingFilterWrapperComp = (function (_super) {
33510 __extends(FloatingFilterWrapperComp, _super);
33511 function FloatingFilterWrapperComp() {
33512 return _super !== null && _super.apply(this, arguments) || this;
33513 }
33514 FloatingFilterWrapperComp.prototype.init = function (params) {
33515 this.floatingFilterCompPromise = params.floatingFilterComp;
33516 this.suppressFilterButton = params.suppressFilterButton;
33517 _super.prototype.init.call(this, params);
33518 this.addEventListeners();
33519 };
33520 FloatingFilterWrapperComp.prototype.addEventListeners = function () {
33521 if (!this.suppressFilterButton && this.eButtonShowMainFilter) {
33522 this.addDestroyableEventListener(this.eButtonShowMainFilter, 'click', this.showParentFilter.bind(this));
33523 }
33524 };
33525 FloatingFilterWrapperComp.prototype.enrichBody = function (body) {
33526 var _this = this;
33527 this.floatingFilterCompPromise.then(function (floatingFilterComp) {
33528 var floatingFilterBody = body.querySelector('.ag-floating-filter-body');
33529 var floatingFilterCompUi = floatingFilterComp.getGui();
33530 if (_this.suppressFilterButton) {
33531 floatingFilterBody.appendChild(floatingFilterCompUi);
33532 utils_1._.removeCssClass(floatingFilterBody, 'ag-floating-filter-body');
33533 utils_1._.addCssClass(floatingFilterBody, 'ag-floating-filter-full-body');
33534 }
33535 else {
33536 floatingFilterBody.appendChild(floatingFilterCompUi);
33537 body.appendChild(utils_1._.loadTemplate("<div class=\"ag-floating-filter-button\" aria-hidden=\"true\">\n <button type=\"button\" ref=\"eButtonShowMainFilter\"></button>\n </div>"));
33538 var eIcon = utils_1._.createIconNoSpan('filter', _this.gridOptionsWrapper, _this.column);
33539 body.querySelector('button').appendChild(eIcon);
33540 }
33541 if (floatingFilterComp.afterGuiAttached) {
33542 floatingFilterComp.afterGuiAttached();
33543 }
33544 _this.wireQuerySelectors();
33545 _this.addEventListeners();
33546 });
33547 };
33548 FloatingFilterWrapperComp.prototype.onParentModelChanged = function (parentModel) {
33549 var combinedFilter = undefined;
33550 var mainModel = null;
33551 if (parentModel && parentModel.operator) {
33552 combinedFilter = parentModel;
33553 mainModel = combinedFilter.condition1;
33554 }
33555 else {
33556 mainModel = parentModel;
33557 }
33558 this.floatingFilterCompPromise.then(function (floatingFilterComp) {
33559 floatingFilterComp.onParentModelChanged(mainModel, combinedFilter);
33560 });
33561 };
33562 FloatingFilterWrapperComp.prototype.showParentFilter = function () {
33563 this.menuFactory.showMenuAfterButtonClick(this.column, this.eButtonShowMainFilter, 'filterMenuTab', ['filterMenuTab']);
33564 };
33565 __decorate([
33566 componentAnnotations_1.RefSelector('eButtonShowMainFilter'),
33567 __metadata("design:type", HTMLInputElement)
33568 ], FloatingFilterWrapperComp.prototype, "eButtonShowMainFilter", void 0);
33569 __decorate([
33570 context_1.Autowired('menuFactory'),
33571 __metadata("design:type", Object)
33572 ], FloatingFilterWrapperComp.prototype, "menuFactory", void 0);
33573 __decorate([
33574 context_1.Autowired('gridOptionsWrapper'),
33575 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
33576 ], FloatingFilterWrapperComp.prototype, "gridOptionsWrapper", void 0);
33577 return FloatingFilterWrapperComp;
33578}(BaseFilterWrapperComp));
33579exports.FloatingFilterWrapperComp = FloatingFilterWrapperComp;
33580var EmptyFloatingFilterWrapperComp = (function (_super) {
33581 __extends(EmptyFloatingFilterWrapperComp, _super);
33582 function EmptyFloatingFilterWrapperComp() {
33583 return _super !== null && _super.apply(this, arguments) || this;
33584 }
33585 EmptyFloatingFilterWrapperComp.prototype.enrichBody = function (body) {
33586 };
33587 EmptyFloatingFilterWrapperComp.prototype.onParentModelChanged = function (parentModel) {
33588 };
33589 return EmptyFloatingFilterWrapperComp;
33590}(BaseFilterWrapperComp));
33591exports.EmptyFloatingFilterWrapperComp = EmptyFloatingFilterWrapperComp;
33592
33593
33594/***/ }),
33595/* 127 */
33596/***/ (function(module, exports, __webpack_require__) {
33597
33598"use strict";
33599/**
33600 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
33601 * @version v18.1.2
33602 * @link http://www.ag-grid.com/
33603 * @license MIT
33604 */
33605
33606Object.defineProperty(exports, "__esModule", { value: true });
33607var LinkedList = (function () {
33608 function LinkedList() {
33609 this.first = null;
33610 this.last = null;
33611 }
33612 LinkedList.prototype.add = function (item) {
33613 var entry = {
33614 item: item,
33615 next: null
33616 };
33617 if (this.last) {
33618 this.last.next = entry;
33619 }
33620 else {
33621 this.first = entry;
33622 }
33623 this.last = entry;
33624 };
33625 LinkedList.prototype.remove = function () {
33626 var result = this.first;
33627 if (result) {
33628 this.first = result.next;
33629 if (!this.first) {
33630 this.last = null;
33631 }
33632 }
33633 return result.item;
33634 };
33635 LinkedList.prototype.isEmpty = function () {
33636 return !this.first;
33637 };
33638 return LinkedList;
33639}());
33640exports.LinkedList = LinkedList;
33641var LinkedListItem = (function () {
33642 function LinkedListItem() {
33643 }
33644 return LinkedListItem;
33645}());
33646
33647
33648/***/ }),
33649/* 128 */
33650/***/ (function(module, exports, __webpack_require__) {
33651
33652"use strict";
33653/**
33654 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
33655 * @version v18.1.2
33656 * @link http://www.ag-grid.com/
33657 * @license MIT
33658 */
33659
33660var __extends = (this && this.__extends) || (function () {
33661 var extendStatics = Object.setPrototypeOf ||
33662 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
33663 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
33664 return function (d, b) {
33665 extendStatics(d, b);
33666 function __() { this.constructor = d; }
33667 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
33668 };
33669})();
33670var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
33671 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
33672 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
33673 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
33674 return c > 3 && r && Object.defineProperty(target, key, r), r;
33675};
33676var __metadata = (this && this.__metadata) || function (k, v) {
33677 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
33678};
33679Object.defineProperty(exports, "__esModule", { value: true });
33680var utils_1 = __webpack_require__(1);
33681var gridOptionsWrapper_1 = __webpack_require__(2);
33682var context_1 = __webpack_require__(0);
33683var component_1 = __webpack_require__(8);
33684var componentRecipes_1 = __webpack_require__(23);
33685var OverlayWrapperComponent = (function (_super) {
33686 __extends(OverlayWrapperComponent, _super);
33687 function OverlayWrapperComponent() {
33688 return _super.call(this) || this;
33689 }
33690 OverlayWrapperComponent.prototype.init = function () { };
33691 OverlayWrapperComponent.prototype.showLoadingOverlay = function (eOverlayWrapper) {
33692 var _this = this;
33693 this.setTemplate(OverlayWrapperComponent.LOADING_WRAPPER_OVERLAY_TEMPLATE);
33694 this.componentRecipes.newLoadingOverlayComponent().then(function (renderer) {
33695 var loadingOverlayWrapper = _this.getRefElement("loadingOverlayWrapper");
33696 utils_1.Utils.removeAllChildren(loadingOverlayWrapper);
33697 loadingOverlayWrapper.appendChild(renderer.getGui());
33698 });
33699 this.showOverlay(eOverlayWrapper, this.getGui());
33700 };
33701 OverlayWrapperComponent.prototype.showNoRowsOverlay = function (eOverlayWrapper) {
33702 var _this = this;
33703 this.setTemplate(OverlayWrapperComponent.NO_ROWS_WRAPPER_OVERLAY_TEMPLATE);
33704 // we don't use gridOptionsWrapper.addLayoutElement here because this component
33705 // is passive, we don't want to add a new element each time it is created.
33706 var eNoRowsOverlayWrapper = this.getRefElement('noRowsOverlayWrapper');
33707 var autoHeight = this.gridOptionsWrapper.isGridAutoHeight();
33708 utils_1.Utils.addOrRemoveCssClass(eNoRowsOverlayWrapper, 'ag-layout-auto-height', autoHeight);
33709 utils_1.Utils.addOrRemoveCssClass(eNoRowsOverlayWrapper, 'ag-layout-normal', !autoHeight);
33710 this.componentRecipes.newNoRowsOverlayComponent().then(function (renderer) {
33711 var noRowsOverlayWrapper = _this.getRefElement("noRowsOverlayWrapper");
33712 utils_1.Utils.removeAllChildren(noRowsOverlayWrapper);
33713 noRowsOverlayWrapper.appendChild(renderer.getGui());
33714 });
33715 this.showOverlay(eOverlayWrapper, this.getGui());
33716 };
33717 OverlayWrapperComponent.prototype.hideOverlay = function (eOverlayWrapper) {
33718 utils_1.Utils.removeAllChildren(eOverlayWrapper);
33719 utils_1.Utils.setVisible(eOverlayWrapper, false);
33720 };
33721 OverlayWrapperComponent.prototype.showOverlay = function (eOverlayWrapper, overlay) {
33722 if (overlay) {
33723 utils_1.Utils.removeAllChildren(eOverlayWrapper);
33724 utils_1.Utils.setVisible(eOverlayWrapper, true);
33725 eOverlayWrapper.appendChild(overlay);
33726 }
33727 else {
33728 console.warn('ag-Grid: unknown overlay');
33729 this.hideOverlay(eOverlayWrapper);
33730 }
33731 };
33732 // wrapping in outer div, and wrapper, is needed to center the loading icon
33733 // The idea for centering came from here: http://www.vanseodesign.com/css/vertical-centering/
33734 OverlayWrapperComponent.LOADING_WRAPPER_OVERLAY_TEMPLATE = '<div class="ag-overlay-panel" role="presentation">' +
33735 '<div class="ag-overlay-wrapper ag-overlay-loading-wrapper" ref="loadingOverlayWrapper">[OVERLAY_TEMPLATE]</div>' +
33736 '</div>';
33737 OverlayWrapperComponent.NO_ROWS_WRAPPER_OVERLAY_TEMPLATE = '<div class="ag-overlay-panel" role="presentation">' +
33738 '<div class="ag-overlay-wrapper ag-overlay-no-rows-wrapper" ref="noRowsOverlayWrapper">[OVERLAY_TEMPLATE]</div>' +
33739 '</div>';
33740 __decorate([
33741 context_1.Autowired('gridOptionsWrapper'),
33742 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
33743 ], OverlayWrapperComponent.prototype, "gridOptionsWrapper", void 0);
33744 __decorate([
33745 context_1.Autowired('componentRecipes'),
33746 __metadata("design:type", componentRecipes_1.ComponentRecipes)
33747 ], OverlayWrapperComponent.prototype, "componentRecipes", void 0);
33748 return OverlayWrapperComponent;
33749}(component_1.Component));
33750exports.OverlayWrapperComponent = OverlayWrapperComponent;
33751
33752
33753/***/ }),
33754/* 129 */
33755/***/ (function(module, exports, __webpack_require__) {
33756
33757"use strict";
33758/**
33759 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
33760 * @version v18.1.2
33761 * @link http://www.ag-grid.com/
33762 * @license MIT
33763 */
33764
33765var __extends = (this && this.__extends) || (function () {
33766 var extendStatics = Object.setPrototypeOf ||
33767 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
33768 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
33769 return function (d, b) {
33770 extendStatics(d, b);
33771 function __() { this.constructor = d; }
33772 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
33773 };
33774})();
33775var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
33776 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
33777 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
33778 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
33779 return c > 3 && r && Object.defineProperty(target, key, r), r;
33780};
33781var __metadata = (this && this.__metadata) || function (k, v) {
33782 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
33783};
33784Object.defineProperty(exports, "__esModule", { value: true });
33785var component_1 = __webpack_require__(8);
33786var column_1 = __webpack_require__(10);
33787var utils_1 = __webpack_require__(1);
33788var context_1 = __webpack_require__(0);
33789var gridOptionsWrapper_1 = __webpack_require__(2);
33790var sortController_1 = __webpack_require__(26);
33791var touchListener_1 = __webpack_require__(48);
33792var eventService_1 = __webpack_require__(3);
33793var componentAnnotations_1 = __webpack_require__(11);
33794var events_1 = __webpack_require__(5);
33795var HeaderComp = (function (_super) {
33796 __extends(HeaderComp, _super);
33797 function HeaderComp() {
33798 var _this = _super !== null && _super.apply(this, arguments) || this;
33799 _this.lastMovingChanged = 0;
33800 return _this;
33801 }
33802 HeaderComp.prototype.init = function (params) {
33803 var template = utils_1.Utils.firstExistingValue(params.template, HeaderComp.TEMPLATE);
33804 this.setTemplate(template);
33805 this.params = params;
33806 this.setupTap();
33807 this.setupIcons(params.column);
33808 this.setupMenu();
33809 this.setupSort();
33810 this.setupFilterIcon();
33811 this.setupText(params.displayName);
33812 };
33813 HeaderComp.prototype.setupText = function (displayName) {
33814 if (this.eText) {
33815 this.eText.innerHTML = displayName;
33816 }
33817 };
33818 HeaderComp.prototype.setupIcons = function (column) {
33819 this.addInIcon('sortAscending', this.eSortAsc, column);
33820 this.addInIcon('sortDescending', this.eSortDesc, column);
33821 this.addInIcon('sortUnSort', this.eSortNone, column);
33822 this.addInIcon('menu', this.eMenu, column);
33823 this.addInIcon('filter', this.eFilter, column);
33824 };
33825 HeaderComp.prototype.addInIcon = function (iconName, eParent, column) {
33826 if (eParent == null)
33827 return;
33828 var eIcon = utils_1.Utils.createIconNoSpan(iconName, this.gridOptionsWrapper, column);
33829 eParent.appendChild(eIcon);
33830 };
33831 HeaderComp.prototype.setupTap = function () {
33832 var _this = this;
33833 if (this.gridOptionsWrapper.isSuppressTouch()) {
33834 return;
33835 }
33836 var touchListener = new touchListener_1.TouchListener(this.getGui());
33837 if (this.params.enableMenu) {
33838 var longTapListener = function (event) {
33839 _this.gridOptionsWrapper.getApi().showColumnMenuAfterMouseClick(_this.params.column, event.touchStart);
33840 };
33841 this.addDestroyableEventListener(touchListener, touchListener_1.TouchListener.EVENT_LONG_TAP, longTapListener);
33842 }
33843 if (this.params.enableSorting) {
33844 var tapListener = function () {
33845 _this.sortController.progressSort(_this.params.column, false, "uiColumnSorted");
33846 };
33847 this.addDestroyableEventListener(touchListener, touchListener_1.TouchListener.EVENT_TAP, tapListener);
33848 }
33849 this.addDestroyFunc(function () { return touchListener.destroy(); });
33850 };
33851 HeaderComp.prototype.setupMenu = function () {
33852 var _this = this;
33853 // if no menu provided in template, do nothing
33854 if (!this.eMenu) {
33855 return;
33856 }
33857 // we don't show the menu if on an ipad, as the user cannot have a mouse on the ipad, so
33858 // makes no sense. instead the user must long-tap if on an ipad.
33859 var dontShowMenu = !this.params.enableMenu || utils_1.Utils.isUserAgentIPad();
33860 if (dontShowMenu) {
33861 utils_1.Utils.removeFromParent(this.eMenu);
33862 return;
33863 }
33864 this.eMenu.addEventListener('click', function () { return _this.showMenu(_this.eMenu); });
33865 if (!this.gridOptionsWrapper.isSuppressMenuHide()) {
33866 this.eMenu.style.opacity = '0';
33867 this.addGuiEventListener('mouseover', function () {
33868 _this.eMenu.style.opacity = '1';
33869 });
33870 this.addGuiEventListener('mouseout', function () {
33871 _this.eMenu.style.opacity = '0';
33872 });
33873 }
33874 var style = this.eMenu.style;
33875 style['transition'] = 'opacity 0.2s, border 0.2s';
33876 style['-webkit-transition'] = 'opacity 0.2s, border 0.2s';
33877 };
33878 HeaderComp.prototype.showMenu = function (eventSource) {
33879 this.menuFactory.showMenuAfterButtonClick(this.params.column, eventSource);
33880 };
33881 HeaderComp.prototype.removeSortIcons = function () {
33882 utils_1.Utils.removeFromParent(this.eSortAsc);
33883 utils_1.Utils.removeFromParent(this.eSortDesc);
33884 utils_1.Utils.removeFromParent(this.eSortNone);
33885 utils_1.Utils.removeFromParent(this.eSortOrder);
33886 };
33887 HeaderComp.prototype.setupSort = function () {
33888 var _this = this;
33889 var enableSorting = this.params.enableSorting;
33890 if (!enableSorting) {
33891 this.removeSortIcons();
33892 return;
33893 }
33894 var sortUsingCtrl = this.gridOptionsWrapper.isMultiSortKeyCtrl();
33895 // keep track of last time the moving changed flag was set
33896 this.addDestroyableEventListener(this.params.column, column_1.Column.EVENT_MOVING_CHANGED, function () {
33897 _this.lastMovingChanged = new Date().getTime();
33898 });
33899 // add the event on the header, so when clicked, we do sorting
33900 if (this.eLabel) {
33901 this.addDestroyableEventListener(this.eLabel, 'click', function (event) {
33902 // sometimes when moving a column via dragging, this was also firing a clicked event.
33903 // here is issue raised by user: https://ag-grid.zendesk.com/agent/tickets/1076
33904 // this check stops sort if a) column is moving or b) column moved less than 200ms ago (so caters for race condition)
33905 var moving = _this.params.column.isMoving();
33906 var nowTime = new Date().getTime();
33907 // typically there is <2ms if moving flag was set recently, as it would be done in same VM turn
33908 var movedRecently = (nowTime - _this.lastMovingChanged) < 50;
33909 var columnMoving = moving || movedRecently;
33910 if (!columnMoving) {
33911 var multiSort = sortUsingCtrl ? (event.ctrlKey || event.metaKey) : event.shiftKey;
33912 _this.params.progressSort(multiSort);
33913 }
33914 else {
33915 console.log("kipping sort cos of moving " + _this.lastMovingChanged);
33916 }
33917 });
33918 }
33919 this.addDestroyableEventListener(this.params.column, column_1.Column.EVENT_SORT_CHANGED, this.onSortChanged.bind(this));
33920 this.onSortChanged();
33921 this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_SORT_CHANGED, this.setMultiSortOrder.bind(this));
33922 this.setMultiSortOrder();
33923 };
33924 HeaderComp.prototype.onSortChanged = function () {
33925 utils_1.Utils.addOrRemoveCssClass(this.getGui(), 'ag-header-cell-sorted-asc', this.params.column.isSortAscending());
33926 utils_1.Utils.addOrRemoveCssClass(this.getGui(), 'ag-header-cell-sorted-desc', this.params.column.isSortDescending());
33927 utils_1.Utils.addOrRemoveCssClass(this.getGui(), 'ag-header-cell-sorted-none', this.params.column.isSortNone());
33928 if (this.eSortAsc) {
33929 utils_1.Utils.addOrRemoveCssClass(this.eSortAsc, 'ag-hidden', !this.params.column.isSortAscending());
33930 }
33931 if (this.eSortDesc) {
33932 utils_1.Utils.addOrRemoveCssClass(this.eSortDesc, 'ag-hidden', !this.params.column.isSortDescending());
33933 }
33934 if (this.eSortNone) {
33935 var alwaysHideNoSort = !this.params.column.getColDef().unSortIcon && !this.gridOptionsWrapper.isUnSortIcon();
33936 utils_1.Utils.addOrRemoveCssClass(this.eSortNone, 'ag-hidden', alwaysHideNoSort || !this.params.column.isSortNone());
33937 }
33938 };
33939 // we listen here for global sort events, NOT column sort events, as we want to do this
33940 // when sorting has been set on all column (if we listened just for our col (where we
33941 // set the asc / desc icons) then it's possible other cols are yet to get their sorting state.
33942 HeaderComp.prototype.setMultiSortOrder = function () {
33943 if (!this.eSortOrder) {
33944 return;
33945 }
33946 var col = this.params.column;
33947 var allColumnsWithSorting = this.sortController.getColumnsWithSortingOrdered();
33948 var indexThisCol = allColumnsWithSorting.indexOf(col);
33949 var moreThanOneColSorting = allColumnsWithSorting.length > 1;
33950 var showIndex = col.isSorting() && moreThanOneColSorting;
33951 utils_1.Utils.setVisible(this.eSortOrder, showIndex);
33952 if (indexThisCol >= 0) {
33953 this.eSortOrder.innerHTML = (indexThisCol + 1).toString();
33954 }
33955 else {
33956 this.eSortOrder.innerHTML = '';
33957 }
33958 };
33959 HeaderComp.prototype.setupFilterIcon = function () {
33960 if (!this.eFilter) {
33961 return;
33962 }
33963 this.addDestroyableEventListener(this.params.column, column_1.Column.EVENT_FILTER_CHANGED, this.onFilterChanged.bind(this));
33964 this.onFilterChanged();
33965 };
33966 HeaderComp.prototype.onFilterChanged = function () {
33967 var filterPresent = this.params.column.isFilterActive();
33968 utils_1.Utils.addOrRemoveCssClass(this.eFilter, 'ag-hidden', !filterPresent);
33969 };
33970 HeaderComp.TEMPLATE = '<div class="ag-cell-label-container" role="presentation">' +
33971 ' <span ref="eMenu" class="ag-header-icon ag-header-cell-menu-button" aria-hidden="true"></span>' +
33972 ' <div ref="eLabel" class="ag-header-cell-label" role="presentation">' +
33973 ' <span ref="eText" class="ag-header-cell-text" role="columnheader"></span>' +
33974 ' <span ref="eFilter" class="ag-header-icon ag-filter-icon" aria-hidden="true"></span>' +
33975 ' <span ref="eSortOrder" class="ag-header-icon ag-sort-order" aria-hidden="true"></span>' +
33976 ' <span ref="eSortAsc" class="ag-header-icon ag-sort-ascending-icon" aria-hidden="true"></span>' +
33977 ' <span ref="eSortDesc" class="ag-header-icon ag-sort-descending-icon" aria-hidden="true"></span>' +
33978 ' <span ref="eSortNone" class="ag-header-icon ag-sort-none-icon" aria-hidden="true"></span>' +
33979 ' </div>' +
33980 '</div>';
33981 __decorate([
33982 context_1.Autowired('gridOptionsWrapper'),
33983 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
33984 ], HeaderComp.prototype, "gridOptionsWrapper", void 0);
33985 __decorate([
33986 context_1.Autowired('sortController'),
33987 __metadata("design:type", sortController_1.SortController)
33988 ], HeaderComp.prototype, "sortController", void 0);
33989 __decorate([
33990 context_1.Autowired('menuFactory'),
33991 __metadata("design:type", Object)
33992 ], HeaderComp.prototype, "menuFactory", void 0);
33993 __decorate([
33994 context_1.Autowired('eventService'),
33995 __metadata("design:type", eventService_1.EventService)
33996 ], HeaderComp.prototype, "eventService", void 0);
33997 __decorate([
33998 componentAnnotations_1.RefSelector('eFilter'),
33999 __metadata("design:type", HTMLElement)
34000 ], HeaderComp.prototype, "eFilter", void 0);
34001 __decorate([
34002 componentAnnotations_1.RefSelector('eSortAsc'),
34003 __metadata("design:type", HTMLElement)
34004 ], HeaderComp.prototype, "eSortAsc", void 0);
34005 __decorate([
34006 componentAnnotations_1.RefSelector('eSortDesc'),
34007 __metadata("design:type", HTMLElement)
34008 ], HeaderComp.prototype, "eSortDesc", void 0);
34009 __decorate([
34010 componentAnnotations_1.RefSelector('eSortNone'),
34011 __metadata("design:type", HTMLElement)
34012 ], HeaderComp.prototype, "eSortNone", void 0);
34013 __decorate([
34014 componentAnnotations_1.RefSelector('eSortOrder'),
34015 __metadata("design:type", HTMLElement)
34016 ], HeaderComp.prototype, "eSortOrder", void 0);
34017 __decorate([
34018 componentAnnotations_1.RefSelector('eMenu'),
34019 __metadata("design:type", HTMLElement)
34020 ], HeaderComp.prototype, "eMenu", void 0);
34021 __decorate([
34022 componentAnnotations_1.RefSelector('eLabel'),
34023 __metadata("design:type", HTMLElement)
34024 ], HeaderComp.prototype, "eLabel", void 0);
34025 __decorate([
34026 componentAnnotations_1.RefSelector('eText'),
34027 __metadata("design:type", HTMLElement)
34028 ], HeaderComp.prototype, "eText", void 0);
34029 return HeaderComp;
34030}(component_1.Component));
34031exports.HeaderComp = HeaderComp;
34032
34033
34034/***/ }),
34035/* 130 */
34036/***/ (function(module, exports, __webpack_require__) {
34037
34038"use strict";
34039/**
34040 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
34041 * @version v18.1.2
34042 * @link http://www.ag-grid.com/
34043 * @license MIT
34044 */
34045
34046var __extends = (this && this.__extends) || (function () {
34047 var extendStatics = Object.setPrototypeOf ||
34048 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
34049 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
34050 return function (d, b) {
34051 extendStatics(d, b);
34052 function __() { this.constructor = d; }
34053 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
34054 };
34055})();
34056var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
34057 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
34058 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
34059 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
34060 return c > 3 && r && Object.defineProperty(target, key, r), r;
34061};
34062var __metadata = (this && this.__metadata) || function (k, v) {
34063 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
34064};
34065Object.defineProperty(exports, "__esModule", { value: true });
34066var component_1 = __webpack_require__(8);
34067var utils_1 = __webpack_require__(1);
34068var columnController_1 = __webpack_require__(4);
34069var gridOptionsWrapper_1 = __webpack_require__(2);
34070var context_1 = __webpack_require__(0);
34071var touchListener_1 = __webpack_require__(48);
34072var componentAnnotations_1 = __webpack_require__(11);
34073var originalColumnGroup_1 = __webpack_require__(34);
34074var HeaderGroupComp = (function (_super) {
34075 __extends(HeaderGroupComp, _super);
34076 function HeaderGroupComp() {
34077 return _super.call(this, HeaderGroupComp.TEMPLATE) || this;
34078 }
34079 HeaderGroupComp.prototype.init = function (params) {
34080 this.params = params;
34081 this.setupLabel();
34082 this.addGroupExpandIcon();
34083 this.setupExpandIcons();
34084 };
34085 HeaderGroupComp.prototype.setupExpandIcons = function () {
34086 var _this = this;
34087 this.addInIcon("columnGroupOpened", "agOpened");
34088 this.addInIcon("columnGroupClosed", "agClosed");
34089 var expandAction = function (event) {
34090 if (utils_1.Utils.isStopPropagationForAgGrid(event)) {
34091 return;
34092 }
34093 var newExpandedValue = !_this.params.columnGroup.isExpanded();
34094 _this.columnController.setColumnGroupOpened(_this.params.columnGroup.getOriginalColumnGroup(), newExpandedValue, "uiColumnExpanded");
34095 };
34096 this.addTouchAndClickListeners(this.eCloseIcon, expandAction);
34097 this.addTouchAndClickListeners(this.eOpenIcon, expandAction);
34098 var stopPropagationAction = function (event) {
34099 utils_1.Utils.stopPropagationForAgGrid(event);
34100 };
34101 // adding stopPropagation to the double click for the icons prevents double click action happening
34102 // when the icons are clicked. if the icons are double clicked, then the groups should open and
34103 // then close again straight away. if we also listened to double click, then the group would open,
34104 // close, then open, which is not what we want. double click should only action if the user double
34105 // clicks outside of the icons.
34106 this.addDestroyableEventListener(this.eCloseIcon, "dblclick", stopPropagationAction);
34107 this.addDestroyableEventListener(this.eOpenIcon, "dblclick", stopPropagationAction);
34108 this.addDestroyableEventListener(this.getGui(), "dblclick", expandAction);
34109 this.updateIconVisibility();
34110 var originalColumnGroup = this.params.columnGroup.getOriginalColumnGroup();
34111 this.addDestroyableEventListener(originalColumnGroup, originalColumnGroup_1.OriginalColumnGroup.EVENT_EXPANDED_CHANGED, this.updateIconVisibility.bind(this));
34112 this.addDestroyableEventListener(originalColumnGroup, originalColumnGroup_1.OriginalColumnGroup.EVENT_EXPANDABLE_CHANGED, this.updateIconVisibility.bind(this));
34113 };
34114 HeaderGroupComp.prototype.addTouchAndClickListeners = function (eElement, action) {
34115 var touchListener = new touchListener_1.TouchListener(this.eCloseIcon);
34116 this.addDestroyableEventListener(touchListener, touchListener_1.TouchListener.EVENT_TAP, action);
34117 this.addDestroyFunc(function () { return touchListener.destroy(); });
34118 this.addDestroyableEventListener(eElement, "click", action);
34119 };
34120 HeaderGroupComp.prototype.updateIconVisibility = function () {
34121 var columnGroup = this.params.columnGroup;
34122 if (columnGroup.isExpandable()) {
34123 var expanded = this.params.columnGroup.isExpanded();
34124 utils_1.Utils.setVisible(this.eOpenIcon, !expanded);
34125 utils_1.Utils.setVisible(this.eCloseIcon, expanded);
34126 }
34127 else {
34128 utils_1.Utils.setVisible(this.eOpenIcon, false);
34129 utils_1.Utils.setVisible(this.eCloseIcon, false);
34130 }
34131 };
34132 HeaderGroupComp.prototype.addInIcon = function (iconName, refName) {
34133 var eIcon = utils_1.Utils.createIconNoSpan(iconName, this.gridOptionsWrapper, null);
34134 this.getRefElement(refName).appendChild(eIcon);
34135 };
34136 HeaderGroupComp.prototype.addGroupExpandIcon = function () {
34137 if (!this.params.columnGroup.isExpandable()) {
34138 utils_1.Utils.setVisible(this.eOpenIcon, false);
34139 utils_1.Utils.setVisible(this.eCloseIcon, false);
34140 return;
34141 }
34142 };
34143 HeaderGroupComp.prototype.setupLabel = function () {
34144 // no renderer, default text render
34145 if (this.params.displayName && this.params.displayName !== "") {
34146 var eInnerText = this.getRefElement("agLabel");
34147 eInnerText.innerHTML = this.params.displayName;
34148 }
34149 };
34150 HeaderGroupComp.TEMPLATE = "<div class=\"ag-header-group-cell-label\" ref=\"agContainer\">" +
34151 "<span ref=\"agLabel\" class=\"ag-header-group-text\"></span>" +
34152 "<span ref=\"agOpened\" class=\"ag-header-icon ag-header-expand-icon ag-header-expand-icon-expanded\"></span>" +
34153 "<span ref=\"agClosed\" class=\"ag-header-icon ag-header-expand-icon ag-header-expand-icon-collapsed\"></span>" +
34154 "</div>";
34155 __decorate([
34156 context_1.Autowired("columnController"),
34157 __metadata("design:type", columnController_1.ColumnController)
34158 ], HeaderGroupComp.prototype, "columnController", void 0);
34159 __decorate([
34160 context_1.Autowired("gridOptionsWrapper"),
34161 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
34162 ], HeaderGroupComp.prototype, "gridOptionsWrapper", void 0);
34163 __decorate([
34164 componentAnnotations_1.RefSelector("agOpened"),
34165 __metadata("design:type", HTMLElement)
34166 ], HeaderGroupComp.prototype, "eOpenIcon", void 0);
34167 __decorate([
34168 componentAnnotations_1.RefSelector("agClosed"),
34169 __metadata("design:type", HTMLElement)
34170 ], HeaderGroupComp.prototype, "eCloseIcon", void 0);
34171 return HeaderGroupComp;
34172}(component_1.Component));
34173exports.HeaderGroupComp = HeaderGroupComp;
34174
34175
34176/***/ }),
34177/* 131 */
34178/***/ (function(module, exports, __webpack_require__) {
34179
34180"use strict";
34181/**
34182 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
34183 * @version v18.1.2
34184 * @link http://www.ag-grid.com/
34185 * @license MIT
34186 */
34187
34188var __extends = (this && this.__extends) || (function () {
34189 var extendStatics = Object.setPrototypeOf ||
34190 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
34191 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
34192 return function (d, b) {
34193 extendStatics(d, b);
34194 function __() { this.constructor = d; }
34195 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
34196 };
34197})();
34198var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
34199 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
34200 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
34201 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
34202 return c > 3 && r && Object.defineProperty(target, key, r), r;
34203};
34204var __metadata = (this && this.__metadata) || function (k, v) {
34205 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
34206};
34207Object.defineProperty(exports, "__esModule", { value: true });
34208var gridOptionsWrapper_1 = __webpack_require__(2);
34209var context_1 = __webpack_require__(0);
34210var component_1 = __webpack_require__(8);
34211var LoadingOverlayComponent = (function (_super) {
34212 __extends(LoadingOverlayComponent, _super);
34213 function LoadingOverlayComponent() {
34214 return _super.call(this) || this;
34215 }
34216 LoadingOverlayComponent.prototype.init = function (params) {
34217 var template = this.gridOptionsWrapper.getOverlayLoadingTemplate() ?
34218 this.gridOptionsWrapper.getOverlayLoadingTemplate() : LoadingOverlayComponent.DEFAULT_LOADING_OVERLAY_TEMPLATE;
34219 var localeTextFunc = this.gridOptionsWrapper.getLocaleTextFunc();
34220 var localisedTemplate = template.replace('[LOADING...]', localeTextFunc('loadingOoo', 'Loading...'));
34221 this.setTemplate(localisedTemplate);
34222 };
34223 LoadingOverlayComponent.DEFAULT_LOADING_OVERLAY_TEMPLATE = '<span class="ag-overlay-loading-center">[LOADING...]</span>';
34224 __decorate([
34225 context_1.Autowired('gridOptionsWrapper'),
34226 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
34227 ], LoadingOverlayComponent.prototype, "gridOptionsWrapper", void 0);
34228 return LoadingOverlayComponent;
34229}(component_1.Component));
34230exports.LoadingOverlayComponent = LoadingOverlayComponent;
34231
34232
34233/***/ }),
34234/* 132 */
34235/***/ (function(module, exports, __webpack_require__) {
34236
34237"use strict";
34238/**
34239 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
34240 * @version v18.1.2
34241 * @link http://www.ag-grid.com/
34242 * @license MIT
34243 */
34244
34245var __extends = (this && this.__extends) || (function () {
34246 var extendStatics = Object.setPrototypeOf ||
34247 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
34248 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
34249 return function (d, b) {
34250 extendStatics(d, b);
34251 function __() { this.constructor = d; }
34252 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
34253 };
34254})();
34255var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
34256 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
34257 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
34258 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
34259 return c > 3 && r && Object.defineProperty(target, key, r), r;
34260};
34261var __metadata = (this && this.__metadata) || function (k, v) {
34262 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
34263};
34264Object.defineProperty(exports, "__esModule", { value: true });
34265var gridOptionsWrapper_1 = __webpack_require__(2);
34266var context_1 = __webpack_require__(0);
34267var component_1 = __webpack_require__(8);
34268var NoRowsOverlayComponent = (function (_super) {
34269 __extends(NoRowsOverlayComponent, _super);
34270 function NoRowsOverlayComponent() {
34271 return _super.call(this) || this;
34272 }
34273 NoRowsOverlayComponent.prototype.init = function (params) {
34274 var template = this.gridOptionsWrapper.getOverlayNoRowsTemplate() ?
34275 this.gridOptionsWrapper.getOverlayNoRowsTemplate() : NoRowsOverlayComponent.DEFAULT_NO_ROWS_TEMPLATE;
34276 var localeTextFunc = this.gridOptionsWrapper.getLocaleTextFunc();
34277 var localisedTemplate = template.replace('[NO_ROWS_TO_SHOW]', localeTextFunc('noRowsToShow', 'No Rows To Show'));
34278 this.setTemplate(localisedTemplate);
34279 };
34280 NoRowsOverlayComponent.DEFAULT_NO_ROWS_TEMPLATE = '<span class="ag-overlay-no-rows-center">[NO_ROWS_TO_SHOW]</span>';
34281 __decorate([
34282 context_1.Autowired('gridOptionsWrapper'),
34283 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
34284 ], NoRowsOverlayComponent.prototype, "gridOptionsWrapper", void 0);
34285 return NoRowsOverlayComponent;
34286}(component_1.Component));
34287exports.NoRowsOverlayComponent = NoRowsOverlayComponent;
34288
34289
34290/***/ }),
34291/* 133 */
34292/***/ (function(module, exports, __webpack_require__) {
34293
34294"use strict";
34295/**
34296 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
34297 * @version v18.1.2
34298 * @link http://www.ag-grid.com/
34299 * @license MIT
34300 */
34301
34302var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
34303 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
34304 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
34305 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
34306 return c > 3 && r && Object.defineProperty(target, key, r), r;
34307};
34308var __metadata = (this && this.__metadata) || function (k, v) {
34309 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
34310};
34311Object.defineProperty(exports, "__esModule", { value: true });
34312var utils_1 = __webpack_require__(1);
34313var context_1 = __webpack_require__(0);
34314var gridOptionsWrapper_1 = __webpack_require__(2);
34315/**
34316 * There are many instances of this component covering each of the areas a row can be entered
34317 * eg body, pinned left, fullWidth. The component differs from others in that it's given the
34318 * elements, there is no template. All of the elements are part of the GridPanel.
34319 */
34320var RowContainerComponent = (function () {
34321 function RowContainerComponent(params) {
34322 this.childCount = 0;
34323 this.rowTemplatesToAdd = [];
34324 this.afterGuiAttachedCallbacks = [];
34325 this.eContainer = params.eContainer;
34326 this.eViewport = params.eViewport;
34327 this.hideWhenNoChildren = params.hideWhenNoChildren;
34328 }
34329 RowContainerComponent.prototype.setVerticalScrollPosition = function (verticalScrollPosition) {
34330 this.scrollTop = verticalScrollPosition;
34331 };
34332 RowContainerComponent.prototype.postConstruct = function () {
34333 this.domOrder = this.gridOptionsWrapper.isEnsureDomOrder();
34334 this.checkVisibility();
34335 };
34336 RowContainerComponent.prototype.getRowElement = function (compId) {
34337 return this.eContainer.querySelector("[comp-id=\"" + compId + "\"]");
34338 };
34339 RowContainerComponent.prototype.setHeight = function (height) {
34340 this.eContainer.style.height = height + "px";
34341 };
34342 RowContainerComponent.prototype.flushRowTemplates = function () {
34343 // if doing dom order, then rowTemplates will be empty,
34344 // or if no rows added since last time also empty.
34345 if (this.rowTemplatesToAdd.length !== 0) {
34346 var htmlToAdd = this.rowTemplatesToAdd.join('');
34347 utils_1.Utils.appendHtml(this.eContainer, htmlToAdd);
34348 this.rowTemplatesToAdd.length = 0;
34349 }
34350 // this only empty if no rows since last time, as when
34351 // doing dom order, we still have callbacks to process
34352 this.afterGuiAttachedCallbacks.forEach(function (func) { return func(); });
34353 this.afterGuiAttachedCallbacks.length = 0;
34354 this.lastPlacedElement = null;
34355 };
34356 RowContainerComponent.prototype.appendRowTemplate = function (rowTemplate, callback) {
34357 if (this.domOrder) {
34358 this.lastPlacedElement = utils_1.Utils.insertTemplateWithDomOrder(this.eContainer, rowTemplate, this.lastPlacedElement);
34359 }
34360 else {
34361 this.rowTemplatesToAdd.push(rowTemplate);
34362 }
34363 this.afterGuiAttachedCallbacks.push(callback);
34364 // it is important we put items in in order, so that when we open a row group,
34365 // the new rows are inserted after the opened group, but before the rows below.
34366 // that way, the rows below are over the new rows (as dom renders last in dom over
34367 // items previous in dom), otherwise the child rows would cover the row below and
34368 // that meant the user doesn't see the rows below slide away.
34369 this.childCount++;
34370 this.checkVisibility();
34371 };
34372 RowContainerComponent.prototype.ensureDomOrder = function (eRow) {
34373 if (this.domOrder) {
34374 utils_1.Utils.ensureDomOrder(this.eContainer, eRow, this.lastPlacedElement);
34375 this.lastPlacedElement = eRow;
34376 }
34377 };
34378 RowContainerComponent.prototype.removeRowElement = function (eRow) {
34379 this.eContainer.removeChild(eRow);
34380 this.childCount--;
34381 this.checkVisibility();
34382 };
34383 RowContainerComponent.prototype.checkVisibility = function () {
34384 if (!this.hideWhenNoChildren) {
34385 return;
34386 }
34387 var eGui = this.eViewport ? this.eViewport : this.eContainer;
34388 var visible = this.childCount > 0;
34389 if (this.visible !== visible) {
34390 this.visible = visible;
34391 utils_1.Utils.setVisible(eGui, visible);
34392 // if we are showing the viewport, then the scroll is always zero,
34393 // so we need to align with the other sections (ie if this is full
34394 // width container, and first time showing a full width row, we need to
34395 // scroll it so full width rows are show in right place alongside the
34396 // body rows). without this, there was an issue with 'loading rows' for
34397 // server side row model, as loading rows are full width, and they were
34398 // not getting displayed in the right location when rows were expanded.
34399 if (visible && this.eViewport) {
34400 this.eViewport.scrollTop = this.scrollTop;
34401 }
34402 }
34403 };
34404 __decorate([
34405 context_1.Autowired('gridOptionsWrapper'),
34406 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
34407 ], RowContainerComponent.prototype, "gridOptionsWrapper", void 0);
34408 __decorate([
34409 context_1.PostConstruct,
34410 __metadata("design:type", Function),
34411 __metadata("design:paramtypes", []),
34412 __metadata("design:returntype", void 0)
34413 ], RowContainerComponent.prototype, "postConstruct", null);
34414 return RowContainerComponent;
34415}());
34416exports.RowContainerComponent = RowContainerComponent;
34417
34418
34419/***/ }),
34420/* 134 */
34421/***/ (function(module, exports, __webpack_require__) {
34422
34423"use strict";
34424/**
34425 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
34426 * @version v18.1.2
34427 * @link http://www.ag-grid.com/
34428 * @license MIT
34429 */
34430
34431var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
34432 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
34433 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
34434 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
34435 return c > 3 && r && Object.defineProperty(target, key, r), r;
34436};
34437var __metadata = (this && this.__metadata) || function (k, v) {
34438 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
34439};
34440Object.defineProperty(exports, "__esModule", { value: true });
34441var dragAndDropService_1 = __webpack_require__(16);
34442var context_1 = __webpack_require__(0);
34443var focusedCellController_1 = __webpack_require__(24);
34444var gridOptionsWrapper_1 = __webpack_require__(2);
34445var eventService_1 = __webpack_require__(3);
34446var eventKeys_1 = __webpack_require__(27);
34447var RowDragFeature = (function () {
34448 function RowDragFeature(eContainer, gridPanel) {
34449 this.eContainer = eContainer;
34450 this.gridPanel = gridPanel;
34451 }
34452 RowDragFeature.prototype.postConstruct = function () {
34453 if (this.gridOptionsWrapper.isRowModelDefault()) {
34454 this.clientSideRowModel = this.rowModel;
34455 }
34456 };
34457 RowDragFeature.prototype.getContainer = function () {
34458 return this.eContainer;
34459 };
34460 RowDragFeature.prototype.isInterestedIn = function (type) {
34461 return type === dragAndDropService_1.DragSourceType.RowDrag;
34462 };
34463 RowDragFeature.prototype.getIconName = function () {
34464 return dragAndDropService_1.DragAndDropService.ICON_MOVE;
34465 };
34466 RowDragFeature.prototype.onDragEnter = function (draggingEvent) {
34467 // when entering, we fire the enter event, then in onEnterOrDragging,
34468 // we also fire the move event. so we get both events when entering.
34469 this.dispatchEvent(eventKeys_1.Events.EVENT_ROW_DRAG_ENTER, draggingEvent);
34470 this.dragAndDropService.setGhostIcon(dragAndDropService_1.DragAndDropService.ICON_MOVE);
34471 draggingEvent.dragItem.rowNode.setDragging(true);
34472 this.onEnterOrDragging(draggingEvent);
34473 };
34474 RowDragFeature.prototype.onDragging = function (draggingEvent) {
34475 this.onEnterOrDragging(draggingEvent);
34476 };
34477 RowDragFeature.prototype.onEnterOrDragging = function (draggingEvent) {
34478 // this event is fired for enter and move
34479 this.dispatchEvent(eventKeys_1.Events.EVENT_ROW_DRAG_MOVE, draggingEvent);
34480 this.lastDraggingEvent = draggingEvent;
34481 var pixel = this.normaliseForScroll(draggingEvent.y);
34482 var managedDrag = this.gridOptionsWrapper.isRowDragManaged();
34483 if (managedDrag) {
34484 this.doManagedDrag(draggingEvent, pixel);
34485 }
34486 this.checkCenterForScrolling(pixel);
34487 };
34488 RowDragFeature.prototype.doManagedDrag = function (draggingEvent, pixel) {
34489 var rowNode = draggingEvent.dragItem.rowNode;
34490 var rowWasMoved = this.clientSideRowModel.ensureRowAtPixel(rowNode, pixel);
34491 if (rowWasMoved) {
34492 this.focusedCellController.clearFocusedCell();
34493 if (this.rangeController) {
34494 this.rangeController.clearSelection();
34495 }
34496 }
34497 };
34498 RowDragFeature.prototype.normaliseForScroll = function (pixel) {
34499 var gridPanelHasScrolls = !this.gridOptionsWrapper.isGridAutoHeight();
34500 if (gridPanelHasScrolls) {
34501 var pixelRange = this.gridPanel.getVScrollPosition();
34502 return pixel + pixelRange.top;
34503 }
34504 else {
34505 return pixel;
34506 }
34507 };
34508 RowDragFeature.prototype.checkCenterForScrolling = function (pixel) {
34509 // scroll if the mouse is within 50px of the grid edge
34510 var pixelRange = this.gridPanel.getVScrollPosition();
34511 // console.log(`pixelRange = (${pixelRange.top}, ${pixelRange.bottom})`);
34512 this.needToMoveUp = pixel < (pixelRange.top + 50);
34513 this.needToMoveDown = pixel > (pixelRange.bottom - 50);
34514 // console.log(`needToMoveUp = ${this.needToMoveUp} = pixel < (pixelRange.top + 50) = ${pixel} < (${pixelRange.top} + 50)`);
34515 // console.log(`needToMoveDown = ${this.needToMoveDown} = pixel < (pixelRange.top + 50) = ${pixel} < (${pixelRange.top} + 50)`);
34516 if (this.needToMoveUp || this.needToMoveDown) {
34517 this.ensureIntervalStarted();
34518 }
34519 else {
34520 this.ensureIntervalCleared();
34521 }
34522 };
34523 RowDragFeature.prototype.ensureIntervalStarted = function () {
34524 if (!this.movingIntervalId) {
34525 this.intervalCount = 0;
34526 this.movingIntervalId = setInterval(this.moveInterval.bind(this), 100);
34527 }
34528 };
34529 RowDragFeature.prototype.ensureIntervalCleared = function () {
34530 if (this.moveInterval) {
34531 clearInterval(this.movingIntervalId);
34532 this.movingIntervalId = null;
34533 }
34534 };
34535 RowDragFeature.prototype.moveInterval = function () {
34536 // the amounts we move get bigger at each interval, so the speed accelerates, starting a bit slow
34537 // and getting faster. this is to give smoother user experience. we max at 100px to limit the speed.
34538 var pixelsToMove;
34539 this.intervalCount++;
34540 pixelsToMove = 10 + (this.intervalCount * 5);
34541 if (pixelsToMove > 100) {
34542 pixelsToMove = 100;
34543 }
34544 var pixelsMoved;
34545 if (this.needToMoveDown) {
34546 pixelsMoved = this.gridPanel.scrollVertically(pixelsToMove);
34547 }
34548 else if (this.needToMoveUp) {
34549 pixelsMoved = this.gridPanel.scrollVertically(-pixelsToMove);
34550 }
34551 if (pixelsMoved !== 0) {
34552 this.onDragging(this.lastDraggingEvent);
34553 }
34554 };
34555 // i tried using generics here with this:
34556 // public createEvent<T extends RowDragEvent>(type: string, clazz: {new(): T; }, draggingEvent: DraggingEvent) {
34557 // but it didn't work - i think it's because it only works with classes, and not interfaces, (the events are interfaces)
34558 RowDragFeature.prototype.dispatchEvent = function (type, draggingEvent) {
34559 var yNormalised = this.normaliseForScroll(draggingEvent.y);
34560 var overIndex = -1;
34561 var overNode = null;
34562 var mouseIsPastLastRow = yNormalised > this.rowModel.getCurrentPageHeight();
34563 if (!mouseIsPastLastRow) {
34564 overIndex = this.rowModel.getRowIndexAtPixel(yNormalised);
34565 overNode = this.rowModel.getRow(overIndex);
34566 }
34567 var vDirectionString;
34568 switch (draggingEvent.vDirection) {
34569 case dragAndDropService_1.VDirection.Down:
34570 vDirectionString = 'down';
34571 break;
34572 case dragAndDropService_1.VDirection.Up:
34573 vDirectionString = 'up';
34574 break;
34575 default:
34576 vDirectionString = null;
34577 break;
34578 }
34579 var event = {
34580 type: type,
34581 api: this.gridOptionsWrapper.getApi(),
34582 columnApi: this.gridOptionsWrapper.getColumnApi(),
34583 event: draggingEvent.event,
34584 node: draggingEvent.dragItem.rowNode,
34585 overIndex: overIndex,
34586 overNode: overNode,
34587 y: yNormalised,
34588 vDirection: vDirectionString
34589 };
34590 this.eventService.dispatchEvent(event);
34591 };
34592 RowDragFeature.prototype.onDragLeave = function (draggingEvent) {
34593 this.dispatchEvent(eventKeys_1.Events.EVENT_ROW_DRAG_LEAVE, draggingEvent);
34594 this.stopDragging(draggingEvent);
34595 };
34596 RowDragFeature.prototype.onDragStop = function (draggingEvent) {
34597 this.dispatchEvent(eventKeys_1.Events.EVENT_ROW_DRAG_END, draggingEvent);
34598 this.stopDragging(draggingEvent);
34599 };
34600 RowDragFeature.prototype.stopDragging = function (draggingEvent) {
34601 this.ensureIntervalCleared();
34602 draggingEvent.dragItem.rowNode.setDragging(false);
34603 };
34604 __decorate([
34605 context_1.Autowired('dragAndDropService'),
34606 __metadata("design:type", dragAndDropService_1.DragAndDropService)
34607 ], RowDragFeature.prototype, "dragAndDropService", void 0);
34608 __decorate([
34609 context_1.Autowired('rowModel'),
34610 __metadata("design:type", Object)
34611 ], RowDragFeature.prototype, "rowModel", void 0);
34612 __decorate([
34613 context_1.Autowired('focusedCellController'),
34614 __metadata("design:type", focusedCellController_1.FocusedCellController)
34615 ], RowDragFeature.prototype, "focusedCellController", void 0);
34616 __decorate([
34617 context_1.Autowired('gridOptionsWrapper'),
34618 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
34619 ], RowDragFeature.prototype, "gridOptionsWrapper", void 0);
34620 __decorate([
34621 context_1.Optional('rangeController'),
34622 __metadata("design:type", Object)
34623 ], RowDragFeature.prototype, "rangeController", void 0);
34624 __decorate([
34625 context_1.Autowired('eventService'),
34626 __metadata("design:type", eventService_1.EventService)
34627 ], RowDragFeature.prototype, "eventService", void 0);
34628 __decorate([
34629 context_1.PostConstruct,
34630 __metadata("design:type", Function),
34631 __metadata("design:paramtypes", []),
34632 __metadata("design:returntype", void 0)
34633 ], RowDragFeature.prototype, "postConstruct", null);
34634 return RowDragFeature;
34635}());
34636exports.RowDragFeature = RowDragFeature;
34637
34638
34639/***/ }),
34640/* 135 */
34641/***/ (function(module, exports, __webpack_require__) {
34642
34643"use strict";
34644/**
34645 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
34646 * @version v18.1.2
34647 * @link http://www.ag-grid.com/
34648 * @license MIT
34649 */
34650
34651var __extends = (this && this.__extends) || (function () {
34652 var extendStatics = Object.setPrototypeOf ||
34653 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
34654 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
34655 return function (d, b) {
34656 extendStatics(d, b);
34657 function __() { this.constructor = d; }
34658 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
34659 };
34660})();
34661var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
34662 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
34663 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
34664 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
34665 return c > 3 && r && Object.defineProperty(target, key, r), r;
34666};
34667var __metadata = (this && this.__metadata) || function (k, v) {
34668 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
34669};
34670Object.defineProperty(exports, "__esModule", { value: true });
34671var agCheckbox_1 = __webpack_require__(62);
34672var beanStub_1 = __webpack_require__(13);
34673var context_1 = __webpack_require__(0);
34674var columnApi_1 = __webpack_require__(7);
34675var gridApi_1 = __webpack_require__(6);
34676var events_1 = __webpack_require__(5);
34677var eventService_1 = __webpack_require__(3);
34678var constants_1 = __webpack_require__(9);
34679var selectionController_1 = __webpack_require__(19);
34680var gridOptionsWrapper_1 = __webpack_require__(2);
34681var SelectAllFeature = (function (_super) {
34682 __extends(SelectAllFeature, _super);
34683 function SelectAllFeature(cbSelectAll, column) {
34684 var _this = _super.call(this) || this;
34685 _this.cbSelectAllVisible = false;
34686 _this.processingEventFromCheckbox = false;
34687 _this.cbSelectAll = cbSelectAll;
34688 _this.column = column;
34689 var colDef = column.getColDef();
34690 _this.filteredOnly = colDef ? !!colDef.headerCheckboxSelectionFilteredOnly : false;
34691 return _this;
34692 }
34693 SelectAllFeature.prototype.postConstruct = function () {
34694 this.showOrHideSelectAll();
34695 this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_DISPLAYED_COLUMNS_CHANGED, this.showOrHideSelectAll.bind(this));
34696 this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_SELECTION_CHANGED, this.onSelectionChanged.bind(this));
34697 this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_MODEL_UPDATED, this.onModelChanged.bind(this));
34698 this.addDestroyableEventListener(this.cbSelectAll, agCheckbox_1.AgCheckbox.EVENT_CHANGED, this.onCbSelectAll.bind(this));
34699 };
34700 SelectAllFeature.prototype.showOrHideSelectAll = function () {
34701 this.cbSelectAllVisible = this.isCheckboxSelection();
34702 this.cbSelectAll.setVisible(this.cbSelectAllVisible);
34703 if (this.cbSelectAllVisible) {
34704 // in case user is trying this feature with the wrong model type
34705 this.checkRightRowModelType();
34706 // make sure checkbox is showing the right state
34707 this.updateStateOfCheckbox();
34708 }
34709 };
34710 SelectAllFeature.prototype.onModelChanged = function () {
34711 if (!this.cbSelectAllVisible) {
34712 return;
34713 }
34714 this.updateStateOfCheckbox();
34715 };
34716 SelectAllFeature.prototype.onSelectionChanged = function () {
34717 if (!this.cbSelectAllVisible) {
34718 return;
34719 }
34720 this.updateStateOfCheckbox();
34721 };
34722 SelectAllFeature.prototype.getNextCheckboxState = function (selectionCount) {
34723 if (selectionCount.selected === 0 && selectionCount.notSelected === 0) {
34724 // if no rows, always have it unselected
34725 return false;
34726 }
34727 else if (selectionCount.selected > 0 && selectionCount.notSelected > 0) {
34728 // if mix of selected and unselected, this is the tri-state
34729 return null;
34730 }
34731 else if (selectionCount.selected > 0) {
34732 // only selected
34733 return true;
34734 }
34735 else {
34736 // nothing selected
34737 return false;
34738 }
34739 };
34740 SelectAllFeature.prototype.updateStateOfCheckbox = function () {
34741 if (this.processingEventFromCheckbox) {
34742 return;
34743 }
34744 this.processingEventFromCheckbox = true;
34745 var selectionCount = this.getSelectionCount();
34746 var allSelected = this.getNextCheckboxState(selectionCount);
34747 this.cbSelectAll.setSelected(allSelected);
34748 this.processingEventFromCheckbox = false;
34749 };
34750 SelectAllFeature.prototype.getSelectionCount = function () {
34751 var selectedCount = 0;
34752 var notSelectedCount = 0;
34753 var callback = function (node) {
34754 if (node.isSelected()) {
34755 selectedCount++;
34756 }
34757 else if (!node.selectable) {
34758 // don't count non-selectable nodes!
34759 }
34760 else {
34761 notSelectedCount++;
34762 }
34763 };
34764 if (this.filteredOnly) {
34765 this.gridApi.forEachNodeAfterFilter(callback);
34766 }
34767 else {
34768 this.gridApi.forEachNode(callback);
34769 }
34770 return {
34771 notSelected: notSelectedCount,
34772 selected: selectedCount
34773 };
34774 };
34775 SelectAllFeature.prototype.checkRightRowModelType = function () {
34776 var rowModelType = this.rowModel.getType();
34777 var rowModelMatches = rowModelType === constants_1.Constants.ROW_MODEL_TYPE_CLIENT_SIDE;
34778 if (!rowModelMatches) {
34779 console.log("ag-Grid: selectAllCheckbox is only available if using normal row model, you are using " + rowModelType);
34780 }
34781 };
34782 SelectAllFeature.prototype.onCbSelectAll = function () {
34783 if (this.processingEventFromCheckbox) {
34784 return;
34785 }
34786 if (!this.cbSelectAllVisible) {
34787 return;
34788 }
34789 var value = this.cbSelectAll.isSelected();
34790 if (value) {
34791 this.selectionController.selectAllRowNodes(this.filteredOnly);
34792 }
34793 else {
34794 this.selectionController.deselectAllRowNodes(this.filteredOnly);
34795 }
34796 };
34797 SelectAllFeature.prototype.isCheckboxSelection = function () {
34798 var result = this.column.getColDef().headerCheckboxSelection;
34799 if (typeof result === 'function') {
34800 var func = result;
34801 result = func({
34802 column: this.column,
34803 colDef: this.column.getColDef(),
34804 columnApi: this.columnApi,
34805 api: this.gridApi
34806 });
34807 }
34808 if (result) {
34809 if (this.gridOptionsWrapper.isRowModelServerSide()) {
34810 console.warn('headerCheckboxSelection is not supported for Server Side Row Model');
34811 return false;
34812 }
34813 if (this.gridOptionsWrapper.isRowModelInfinite()) {
34814 console.warn('headerCheckboxSelection is not supported for Infinite Row Model');
34815 return false;
34816 }
34817 if (this.gridOptionsWrapper.isRowModelViewport()) {
34818 console.warn('headerCheckboxSelection is not supported for Viewport Row Model');
34819 return false;
34820 }
34821 // otherwise the row model is compatible, so return true
34822 return true;
34823 }
34824 else {
34825 return false;
34826 }
34827 };
34828 __decorate([
34829 context_1.Autowired('gridApi'),
34830 __metadata("design:type", gridApi_1.GridApi)
34831 ], SelectAllFeature.prototype, "gridApi", void 0);
34832 __decorate([
34833 context_1.Autowired('columnApi'),
34834 __metadata("design:type", columnApi_1.ColumnApi)
34835 ], SelectAllFeature.prototype, "columnApi", void 0);
34836 __decorate([
34837 context_1.Autowired('eventService'),
34838 __metadata("design:type", eventService_1.EventService)
34839 ], SelectAllFeature.prototype, "eventService", void 0);
34840 __decorate([
34841 context_1.Autowired('rowModel'),
34842 __metadata("design:type", Object)
34843 ], SelectAllFeature.prototype, "rowModel", void 0);
34844 __decorate([
34845 context_1.Autowired('selectionController'),
34846 __metadata("design:type", selectionController_1.SelectionController)
34847 ], SelectAllFeature.prototype, "selectionController", void 0);
34848 __decorate([
34849 context_1.Autowired('gridOptionsWrapper'),
34850 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
34851 ], SelectAllFeature.prototype, "gridOptionsWrapper", void 0);
34852 __decorate([
34853 context_1.PostConstruct,
34854 __metadata("design:type", Function),
34855 __metadata("design:paramtypes", []),
34856 __metadata("design:returntype", void 0)
34857 ], SelectAllFeature.prototype, "postConstruct", null);
34858 return SelectAllFeature;
34859}(beanStub_1.BeanStub));
34860exports.SelectAllFeature = SelectAllFeature;
34861
34862
34863/***/ }),
34864/* 136 */
34865/***/ (function(module, exports, __webpack_require__) {
34866
34867"use strict";
34868/**
34869 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
34870 * @version v18.1.2
34871 * @link http://www.ag-grid.com/
34872 * @license MIT
34873 */
34874
34875var __extends = (this && this.__extends) || (function () {
34876 var extendStatics = Object.setPrototypeOf ||
34877 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
34878 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
34879 return function (d, b) {
34880 extendStatics(d, b);
34881 function __() { this.constructor = d; }
34882 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
34883 };
34884})();
34885var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
34886 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
34887 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
34888 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
34889 return c > 3 && r && Object.defineProperty(target, key, r), r;
34890};
34891var __metadata = (this && this.__metadata) || function (k, v) {
34892 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
34893};
34894Object.defineProperty(exports, "__esModule", { value: true });
34895var component_1 = __webpack_require__(8);
34896var column_1 = __webpack_require__(10);
34897var utils_1 = __webpack_require__(1);
34898var columnGroup_1 = __webpack_require__(28);
34899var columnApi_1 = __webpack_require__(7);
34900var columnController_1 = __webpack_require__(4);
34901var gridOptionsWrapper_1 = __webpack_require__(2);
34902var horizontalResizeService_1 = __webpack_require__(61);
34903var context_1 = __webpack_require__(0);
34904var cssClassApplier_1 = __webpack_require__(83);
34905var dragAndDropService_1 = __webpack_require__(16);
34906var setLeftFeature_1 = __webpack_require__(54);
34907var gridApi_1 = __webpack_require__(6);
34908var componentRecipes_1 = __webpack_require__(23);
34909var beans_1 = __webpack_require__(30);
34910var hoverFeature_1 = __webpack_require__(76);
34911var HeaderGroupWrapperComp = (function (_super) {
34912 __extends(HeaderGroupWrapperComp, _super);
34913 function HeaderGroupWrapperComp(columnGroup, dragSourceDropTarget, pinned) {
34914 var _this = _super.call(this, HeaderGroupWrapperComp.TEMPLATE) || this;
34915 // the children can change, we keep destroy functions related to listening to the children here
34916 _this.childColumnsDestroyFuncs = [];
34917 _this.columnGroup = columnGroup;
34918 _this.dragSourceDropTarget = dragSourceDropTarget;
34919 _this.pinned = pinned;
34920 return _this;
34921 }
34922 HeaderGroupWrapperComp.prototype.postConstruct = function () {
34923 cssClassApplier_1.CssClassApplier.addHeaderClassesFromColDef(this.columnGroup.getColGroupDef(), this.getGui(), this.gridOptionsWrapper, null, this.columnGroup);
34924 var displayName = this.columnController.getDisplayNameForColumnGroup(this.columnGroup, 'header');
34925 this.appendHeaderGroupComp(displayName);
34926 this.setupResize();
34927 this.addClasses();
34928 this.setupWidth();
34929 this.addAttributes();
34930 this.setupMovingCss();
34931 this.setupTooltip();
34932 this.addFeature(this.context, new hoverFeature_1.HoverFeature(this.columnGroup.getOriginalColumnGroup().getLeafColumns(), this.getGui()));
34933 var setLeftFeature = new setLeftFeature_1.SetLeftFeature(this.columnGroup, this.getGui(), this.beans);
34934 setLeftFeature.init();
34935 this.addDestroyFunc(setLeftFeature.destroy.bind(setLeftFeature));
34936 };
34937 HeaderGroupWrapperComp.prototype.setupMovingCss = function () {
34938 var _this = this;
34939 var originalColumnGroup = this.columnGroup.getOriginalColumnGroup();
34940 var leafColumns = originalColumnGroup.getLeafColumns();
34941 leafColumns.forEach(function (col) {
34942 _this.addDestroyableEventListener(col, column_1.Column.EVENT_MOVING_CHANGED, _this.onColumnMovingChanged.bind(_this));
34943 });
34944 this.onColumnMovingChanged();
34945 };
34946 HeaderGroupWrapperComp.prototype.setupTooltip = function () {
34947 var colGroupDef = this.columnGroup.getColGroupDef();
34948 // add tooltip if exists
34949 if (colGroupDef && colGroupDef.headerTooltip) {
34950 this.getGui().title = colGroupDef.headerTooltip;
34951 }
34952 };
34953 HeaderGroupWrapperComp.prototype.onColumnMovingChanged = function () {
34954 // this function adds or removes the moving css, based on if the col is moving.
34955 // this is what makes the header go dark when it is been moved (gives impression to
34956 // user that the column was picked up).
34957 if (this.columnGroup.isMoving()) {
34958 utils_1.Utils.addCssClass(this.getGui(), 'ag-header-cell-moving');
34959 }
34960 else {
34961 utils_1.Utils.removeCssClass(this.getGui(), 'ag-header-cell-moving');
34962 }
34963 };
34964 HeaderGroupWrapperComp.prototype.addAttributes = function () {
34965 this.getGui().setAttribute("col-id", this.columnGroup.getUniqueId());
34966 };
34967 HeaderGroupWrapperComp.prototype.appendHeaderGroupComp = function (displayName) {
34968 var _this = this;
34969 var params = {
34970 displayName: displayName,
34971 columnGroup: this.columnGroup,
34972 setExpanded: function (expanded) {
34973 _this.columnController.setColumnGroupOpened(_this.columnGroup.getOriginalColumnGroup(), expanded, "gridInitializing");
34974 },
34975 api: this.gridApi,
34976 columnApi: this.columnApi,
34977 context: this.gridOptionsWrapper.getContext()
34978 };
34979 if (!displayName) {
34980 var leafCols = this.columnGroup.getLeafColumns();
34981 displayName = leafCols ? leafCols[0].getColDef().headerName : '';
34982 }
34983 var callback = this.afterHeaderCompCreated.bind(this, displayName);
34984 this.componentRecipes.newHeaderGroupComponent(params).then(callback);
34985 };
34986 HeaderGroupWrapperComp.prototype.afterHeaderCompCreated = function (displayName, headerGroupComp) {
34987 this.appendChild(headerGroupComp);
34988 this.setupMove(headerGroupComp.getGui(), displayName);
34989 if (headerGroupComp.destroy) {
34990 this.addDestroyFunc(headerGroupComp.destroy.bind(headerGroupComp));
34991 }
34992 };
34993 HeaderGroupWrapperComp.prototype.addClasses = function () {
34994 // having different classes below allows the style to not have a bottom border
34995 // on the group header, if no group is specified
34996 // columnGroup.getColGroupDef
34997 if (this.columnGroup.isPadding()) {
34998 this.addCssClass('ag-header-group-cell-no-group');
34999 }
35000 else {
35001 this.addCssClass('ag-header-group-cell-with-group');
35002 }
35003 };
35004 HeaderGroupWrapperComp.prototype.setupMove = function (eHeaderGroup, displayName) {
35005 var _this = this;
35006 if (!eHeaderGroup) {
35007 return;
35008 }
35009 if (this.isSuppressMoving()) {
35010 return;
35011 }
35012 var allLeafColumns = this.columnGroup.getOriginalColumnGroup().getLeafColumns();
35013 if (eHeaderGroup) {
35014 var dragSource_1 = {
35015 type: dragAndDropService_1.DragSourceType.HeaderCell,
35016 eElement: eHeaderGroup,
35017 dragItemName: displayName,
35018 // we add in the original group leaf columns, so we move both visible and non-visible items
35019 dragItemCallback: this.getDragItemForGroup.bind(this),
35020 dragSourceDropTarget: this.dragSourceDropTarget,
35021 dragStarted: function () { return allLeafColumns.forEach(function (col) { return col.setMoving(true, "uiColumnDragged"); }); },
35022 dragStopped: function () { return allLeafColumns.forEach(function (col) { return col.setMoving(false, "uiColumnDragged"); }); }
35023 };
35024 this.dragAndDropService.addDragSource(dragSource_1, true);
35025 this.addDestroyFunc(function () { return _this.dragAndDropService.removeDragSource(dragSource_1); });
35026 }
35027 };
35028 // when moving the columns, we want to move all the columns (contained within the DragItem) in this group in one go,
35029 // and in the order they are currently in the screen.
35030 HeaderGroupWrapperComp.prototype.getDragItemForGroup = function () {
35031 var allColumnsOriginalOrder = this.columnGroup.getOriginalColumnGroup().getLeafColumns();
35032 // capture visible state, used when reentering grid to dictate which columns should be visible
35033 var visibleState = {};
35034 allColumnsOriginalOrder.forEach(function (column) { return visibleState[column.getId()] = column.isVisible(); });
35035 var allColumnsCurrentOrder = [];
35036 this.columnController.getAllDisplayedColumns().forEach(function (column) {
35037 if (allColumnsOriginalOrder.indexOf(column) >= 0) {
35038 allColumnsCurrentOrder.push(column);
35039 utils_1.Utils.removeFromArray(allColumnsOriginalOrder, column);
35040 }
35041 });
35042 // we are left with non-visible columns, stick these in at the end
35043 allColumnsOriginalOrder.forEach(function (column) { return allColumnsCurrentOrder.push(column); });
35044 // create and return dragItem
35045 return {
35046 columns: allColumnsCurrentOrder,
35047 visibleState: visibleState
35048 };
35049 };
35050 HeaderGroupWrapperComp.prototype.isSuppressMoving = function () {
35051 // if any child is fixed, then don't allow moving
35052 var childSuppressesMoving = false;
35053 this.columnGroup.getLeafColumns().forEach(function (column) {
35054 if (column.getColDef().suppressMovable || column.isLockPosition()) {
35055 childSuppressesMoving = true;
35056 }
35057 });
35058 var result = childSuppressesMoving || this.gridOptionsWrapper.isSuppressMovableColumns();
35059 return result;
35060 };
35061 HeaderGroupWrapperComp.prototype.setupWidth = function () {
35062 // we need to listen to changes in child columns, as they impact our width
35063 this.addListenersToChildrenColumns();
35064 // the children belonging to this group can change, so we need to add and remove listeners as they change
35065 this.addDestroyableEventListener(this.columnGroup, columnGroup_1.ColumnGroup.EVENT_DISPLAYED_CHILDREN_CHANGED, this.onDisplayedChildrenChanged.bind(this));
35066 this.onWidthChanged();
35067 // the child listeners are not tied to this components lifecycle, as children can get added and removed
35068 // to the group - hence they are on a different lifecycle. so we must make sure the existing children
35069 // listeners are removed when we finally get destroyed
35070 this.addDestroyFunc(this.destroyListenersOnChildrenColumns.bind(this));
35071 };
35072 HeaderGroupWrapperComp.prototype.onDisplayedChildrenChanged = function () {
35073 this.addListenersToChildrenColumns();
35074 this.onWidthChanged();
35075 };
35076 HeaderGroupWrapperComp.prototype.addListenersToChildrenColumns = function () {
35077 var _this = this;
35078 // first destroy any old listeners
35079 this.destroyListenersOnChildrenColumns();
35080 // now add new listeners to the new set of children
35081 var widthChangedListener = this.onWidthChanged.bind(this);
35082 this.columnGroup.getLeafColumns().forEach(function (column) {
35083 column.addEventListener(column_1.Column.EVENT_WIDTH_CHANGED, widthChangedListener);
35084 column.addEventListener(column_1.Column.EVENT_VISIBLE_CHANGED, widthChangedListener);
35085 _this.childColumnsDestroyFuncs.push(function () {
35086 column.removeEventListener(column_1.Column.EVENT_WIDTH_CHANGED, widthChangedListener);
35087 column.removeEventListener(column_1.Column.EVENT_VISIBLE_CHANGED, widthChangedListener);
35088 });
35089 });
35090 };
35091 HeaderGroupWrapperComp.prototype.destroyListenersOnChildrenColumns = function () {
35092 this.childColumnsDestroyFuncs.forEach(function (func) { return func(); });
35093 this.childColumnsDestroyFuncs = [];
35094 };
35095 HeaderGroupWrapperComp.prototype.onWidthChanged = function () {
35096 this.getGui().style.width = this.columnGroup.getActualWidth() + 'px';
35097 };
35098 HeaderGroupWrapperComp.prototype.setupResize = function () {
35099 var _this = this;
35100 this.eHeaderCellResize = this.getRefElement('agResize');
35101 if (!this.columnGroup.isResizable()) {
35102 utils_1.Utils.removeFromParent(this.eHeaderCellResize);
35103 return;
35104 }
35105 var finishedWithResizeFunc = this.horizontalResizeService.addResizeBar({
35106 eResizeBar: this.eHeaderCellResize,
35107 onResizeStart: this.onResizeStart.bind(this),
35108 onResizing: this.onResizing.bind(this, false),
35109 onResizeEnd: this.onResizing.bind(this, true)
35110 });
35111 this.addDestroyFunc(finishedWithResizeFunc);
35112 if (!this.gridOptionsWrapper.isSuppressAutoSize()) {
35113 this.eHeaderCellResize.addEventListener('dblclick', function (event) {
35114 // get list of all the column keys we are responsible for
35115 var keys = [];
35116 _this.columnGroup.getDisplayedLeafColumns().forEach(function (column) {
35117 // not all cols in the group may be participating with auto-resize
35118 if (!column.getColDef().suppressAutoSize) {
35119 keys.push(column.getColId());
35120 }
35121 });
35122 if (keys.length > 0) {
35123 _this.columnController.autoSizeColumns(keys, "uiColumnResized");
35124 }
35125 });
35126 }
35127 };
35128 HeaderGroupWrapperComp.prototype.onResizeStart = function (shiftKey) {
35129 var _this = this;
35130 var leafCols = this.columnGroup.getDisplayedLeafColumns();
35131 this.resizeCols = utils_1.Utils.filter(leafCols, function (col) { return col.isResizable(); });
35132 this.resizeStartWidth = 0;
35133 this.resizeCols.forEach(function (col) { return _this.resizeStartWidth += col.getActualWidth(); });
35134 this.resizeRatios = [];
35135 this.resizeCols.forEach(function (col) { return _this.resizeRatios.push(col.getActualWidth() / _this.resizeStartWidth); });
35136 var takeFromGroup = null;
35137 if (shiftKey) {
35138 takeFromGroup = this.columnController.getDisplayedGroupAfter(this.columnGroup);
35139 }
35140 if (takeFromGroup) {
35141 var takeFromLeafCols = takeFromGroup.getDisplayedLeafColumns();
35142 this.resizeTakeFromCols = utils_1.Utils.filter(takeFromLeafCols, function (col) { return col.isResizable(); });
35143 this.resizeTakeFromStartWidth = 0;
35144 this.resizeTakeFromCols.forEach(function (col) { return _this.resizeTakeFromStartWidth += col.getActualWidth(); });
35145 this.resizeTakeFromRatios = [];
35146 this.resizeTakeFromCols.forEach(function (col) { return _this.resizeTakeFromRatios.push(col.getActualWidth() / _this.resizeTakeFromStartWidth); });
35147 }
35148 else {
35149 this.resizeTakeFromCols = null;
35150 this.resizeTakeFromStartWidth = null;
35151 this.resizeTakeFromRatios = null;
35152 }
35153 };
35154 HeaderGroupWrapperComp.prototype.onResizing = function (finished, resizeAmount) {
35155 var resizeSets = [];
35156 var resizeAmountNormalised = this.normaliseDragChange(resizeAmount);
35157 resizeSets.push({
35158 columns: this.resizeCols,
35159 ratios: this.resizeRatios,
35160 width: this.resizeStartWidth + resizeAmountNormalised
35161 });
35162 if (this.resizeTakeFromCols) {
35163 resizeSets.push({
35164 columns: this.resizeTakeFromCols,
35165 ratios: this.resizeTakeFromRatios,
35166 width: this.resizeTakeFromStartWidth - resizeAmountNormalised
35167 });
35168 }
35169 this.columnController.resizeColumnSets(resizeSets, finished, 'uiColumnDragged');
35170 };
35171 // optionally inverts the drag, depending on pinned and RTL
35172 // note - this method is duplicated in RenderedHeaderCell - should refactor out?
35173 HeaderGroupWrapperComp.prototype.normaliseDragChange = function (dragChange) {
35174 var result = dragChange;
35175 if (this.gridOptionsWrapper.isEnableRtl()) {
35176 // for RTL, dragging left makes the col bigger, except when pinning left
35177 if (this.pinned !== column_1.Column.PINNED_LEFT) {
35178 result *= -1;
35179 }
35180 }
35181 else {
35182 // for LTR (ie normal), dragging left makes the col smaller, except when pinning right
35183 if (this.pinned === column_1.Column.PINNED_RIGHT) {
35184 result *= -1;
35185 }
35186 }
35187 return result;
35188 };
35189 HeaderGroupWrapperComp.TEMPLATE = '<div class="ag-header-group-cell">' +
35190 '<div ref="agResize" class="ag-header-cell-resize"></div>' +
35191 '</div>';
35192 __decorate([
35193 context_1.Autowired('gridOptionsWrapper'),
35194 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
35195 ], HeaderGroupWrapperComp.prototype, "gridOptionsWrapper", void 0);
35196 __decorate([
35197 context_1.Autowired('columnController'),
35198 __metadata("design:type", columnController_1.ColumnController)
35199 ], HeaderGroupWrapperComp.prototype, "columnController", void 0);
35200 __decorate([
35201 context_1.Autowired('horizontalResizeService'),
35202 __metadata("design:type", horizontalResizeService_1.HorizontalResizeService)
35203 ], HeaderGroupWrapperComp.prototype, "horizontalResizeService", void 0);
35204 __decorate([
35205 context_1.Autowired('dragAndDropService'),
35206 __metadata("design:type", dragAndDropService_1.DragAndDropService)
35207 ], HeaderGroupWrapperComp.prototype, "dragAndDropService", void 0);
35208 __decorate([
35209 context_1.Autowired('context'),
35210 __metadata("design:type", context_1.Context)
35211 ], HeaderGroupWrapperComp.prototype, "context", void 0);
35212 __decorate([
35213 context_1.Autowired('componentRecipes'),
35214 __metadata("design:type", componentRecipes_1.ComponentRecipes)
35215 ], HeaderGroupWrapperComp.prototype, "componentRecipes", void 0);
35216 __decorate([
35217 context_1.Autowired('gridApi'),
35218 __metadata("design:type", gridApi_1.GridApi)
35219 ], HeaderGroupWrapperComp.prototype, "gridApi", void 0);
35220 __decorate([
35221 context_1.Autowired('columnApi'),
35222 __metadata("design:type", columnApi_1.ColumnApi)
35223 ], HeaderGroupWrapperComp.prototype, "columnApi", void 0);
35224 __decorate([
35225 context_1.Autowired('beans'),
35226 __metadata("design:type", beans_1.Beans)
35227 ], HeaderGroupWrapperComp.prototype, "beans", void 0);
35228 __decorate([
35229 context_1.PostConstruct,
35230 __metadata("design:type", Function),
35231 __metadata("design:paramtypes", []),
35232 __metadata("design:returntype", void 0)
35233 ], HeaderGroupWrapperComp.prototype, "postConstruct", null);
35234 return HeaderGroupWrapperComp;
35235}(component_1.Component));
35236exports.HeaderGroupWrapperComp = HeaderGroupWrapperComp;
35237
35238
35239/***/ }),
35240/* 137 */
35241/***/ (function(module, exports, __webpack_require__) {
35242
35243"use strict";
35244/**
35245 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
35246 * @version v18.1.2
35247 * @link http://www.ag-grid.com/
35248 * @license MIT
35249 */
35250
35251Object.defineProperty(exports, "__esModule", { value: true });
35252exports.DefaultColumnTypes = {
35253 numericColumn: {
35254 headerClass: "ag-numeric-header",
35255 cellClass: "ag-numeric-cell"
35256 }
35257};
35258
35259
35260/***/ }),
35261/* 138 */
35262/***/ (function(module, exports, __webpack_require__) {
35263
35264"use strict";
35265/**
35266 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
35267 * @version v18.1.2
35268 * @link http://www.ag-grid.com/
35269 * @license MIT
35270 */
35271
35272Object.defineProperty(exports, "__esModule", { value: true });
35273var grid_1 = __webpack_require__(87);
35274function initialiseAgGridWithAngular1(angular) {
35275 var angularModule = angular.module("agGrid", []);
35276 angularModule.directive("agGrid", function () {
35277 return {
35278 restrict: "A",
35279 controller: ['$element', '$scope', '$compile', '$attrs', AngularDirectiveController],
35280 scope: true
35281 };
35282 });
35283}
35284exports.initialiseAgGridWithAngular1 = initialiseAgGridWithAngular1;
35285function AngularDirectiveController($element, $scope, $compile, $attrs) {
35286 var gridOptions;
35287 var quickFilterOnScope;
35288 var keyOfGridInScope = $attrs.agGrid;
35289 quickFilterOnScope = keyOfGridInScope + '.quickFilterText';
35290 gridOptions = $scope.$eval(keyOfGridInScope);
35291 if (!gridOptions) {
35292 console.warn("WARNING - grid options for ag-Grid not found. Please ensure the attribute ag-grid points to a valid object on the scope");
35293 return;
35294 }
35295 var eGridDiv = $element[0];
35296 var gridParams = {
35297 $scope: $scope,
35298 $compile: $compile,
35299 quickFilterOnScope: quickFilterOnScope
35300 };
35301 var grid = new grid_1.Grid(eGridDiv, gridOptions, gridParams);
35302 $scope.$on("$destroy", function () {
35303 grid.destroy();
35304 grid = null;
35305 });
35306}
35307
35308
35309/***/ }),
35310/* 139 */
35311/***/ (function(module, exports, __webpack_require__) {
35312
35313"use strict";
35314/**
35315 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
35316 * @version v18.1.2
35317 * @link http://www.ag-grid.com/
35318 * @license MIT
35319 */
35320
35321var __extends = (this && this.__extends) || (function () {
35322 var extendStatics = Object.setPrototypeOf ||
35323 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
35324 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
35325 return function (d, b) {
35326 extendStatics(d, b);
35327 function __() { this.constructor = d; }
35328 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
35329 };
35330})();
35331var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
35332 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
35333 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
35334 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
35335 return c > 3 && r && Object.defineProperty(target, key, r), r;
35336};
35337var __metadata = (this && this.__metadata) || function (k, v) {
35338 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
35339};
35340var __param = (this && this.__param) || function (paramIndex, decorator) {
35341 return function (target, key) { decorator(target, key, paramIndex); }
35342};
35343Object.defineProperty(exports, "__esModule", { value: true });
35344var context_1 = __webpack_require__(0);
35345var eventService_1 = __webpack_require__(3);
35346var events_1 = __webpack_require__(5);
35347var logger_1 = __webpack_require__(12);
35348var infiniteBlock_1 = __webpack_require__(140);
35349var rowNodeCache_1 = __webpack_require__(89);
35350var gridApi_1 = __webpack_require__(6);
35351var columnApi_1 = __webpack_require__(7);
35352var InfiniteCache = (function (_super) {
35353 __extends(InfiniteCache, _super);
35354 function InfiniteCache(params) {
35355 return _super.call(this, params) || this;
35356 }
35357 InfiniteCache.prototype.setBeans = function (loggerFactory) {
35358 this.logger = loggerFactory.create('InfiniteCache');
35359 };
35360 InfiniteCache.prototype.init = function () {
35361 _super.prototype.init.call(this);
35362 // start load of data, as the virtualRowCount will remain at 0 otherwise,
35363 // so we need this to kick things off, otherwise grid would never call getRow()
35364 this.getRow(0);
35365 };
35366 InfiniteCache.prototype.moveItemsDown = function (block, moveFromIndex, moveCount) {
35367 var startRow = block.getStartRow();
35368 var endRow = block.getEndRow();
35369 var indexOfLastRowToMove = moveFromIndex + moveCount;
35370 // all rows need to be moved down below the insertion index
35371 for (var currentRowIndex = endRow - 1; currentRowIndex >= startRow; currentRowIndex--) {
35372 // don't move rows at or before the insertion index
35373 if (currentRowIndex < indexOfLastRowToMove) {
35374 continue;
35375 }
35376 var indexOfNodeWeWant = currentRowIndex - moveCount;
35377 var nodeForThisIndex = this.getRow(indexOfNodeWeWant, true);
35378 if (nodeForThisIndex) {
35379 block.setRowNode(currentRowIndex, nodeForThisIndex);
35380 }
35381 else {
35382 block.setBlankRowNode(currentRowIndex);
35383 block.setDirty();
35384 }
35385 }
35386 };
35387 InfiniteCache.prototype.insertItems = function (block, indexToInsert, items) {
35388 var pageStartRow = block.getStartRow();
35389 var pageEndRow = block.getEndRow();
35390 var newRowNodes = [];
35391 // next stage is insert the rows into this page, if applicable
35392 for (var index = 0; index < items.length; index++) {
35393 var rowIndex = indexToInsert + index;
35394 var currentRowInThisPage = rowIndex >= pageStartRow && rowIndex < pageEndRow;
35395 if (currentRowInThisPage) {
35396 var dataItem = items[index];
35397 var newRowNode = block.setNewData(rowIndex, dataItem);
35398 newRowNodes.push(newRowNode);
35399 }
35400 }
35401 return newRowNodes;
35402 };
35403 InfiniteCache.prototype.insertItemsAtIndex = function (indexToInsert, items) {
35404 // get all page id's as NUMBERS (not strings, as we need to sort as numbers) and in descending order
35405 var _this = this;
35406 var newNodes = [];
35407 this.forEachBlockInReverseOrder(function (block) {
35408 var pageEndRow = block.getEndRow();
35409 // if the insertion is after this page, then this page is not impacted
35410 if (pageEndRow <= indexToInsert) {
35411 return;
35412 }
35413 _this.moveItemsDown(block, indexToInsert, items.length);
35414 var newNodesThisPage = _this.insertItems(block, indexToInsert, items);
35415 newNodesThisPage.forEach(function (rowNode) { return newNodes.push(rowNode); });
35416 });
35417 if (this.isMaxRowFound()) {
35418 this.hack_setVirtualRowCount(this.getVirtualRowCount() + items.length);
35419 }
35420 this.onCacheUpdated();
35421 var event = {
35422 type: events_1.Events.EVENT_ROW_DATA_UPDATED,
35423 api: this.gridApi,
35424 columnApi: this.columnApi
35425 };
35426 this.eventService.dispatchEvent(event);
35427 };
35428 // the rowRenderer will not pass dontCreatePage, meaning when rendering the grid,
35429 // it will want new pages in the cache as it asks for rows. only when we are inserting /
35430 // removing rows via the api is dontCreatePage set, where we move rows between the pages.
35431 InfiniteCache.prototype.getRow = function (rowIndex, dontCreatePage) {
35432 if (dontCreatePage === void 0) { dontCreatePage = false; }
35433 var blockId = Math.floor(rowIndex / this.cacheParams.blockSize);
35434 var block = this.getBlock(blockId);
35435 if (!block) {
35436 if (dontCreatePage) {
35437 return null;
35438 }
35439 else {
35440 block = this.createBlock(blockId);
35441 }
35442 }
35443 return block.getRow(rowIndex);
35444 };
35445 InfiniteCache.prototype.createBlock = function (blockNumber) {
35446 var newBlock = new infiniteBlock_1.InfiniteBlock(blockNumber, this.cacheParams);
35447 this.context.wireBean(newBlock);
35448 this.postCreateBlock(newBlock);
35449 return newBlock;
35450 };
35451 // we have this on infinite row model only, not server side row model,
35452 // because for server side, it would leave the children in inconsistent
35453 // state - eg if a node had children, but after the refresh it had data
35454 // for a different row, then the children would be with the wrong row node.
35455 InfiniteCache.prototype.refreshCache = function () {
35456 this.forEachBlockInOrder(function (block) { return block.setDirty(); });
35457 this.checkBlockToLoad();
35458 };
35459 __decorate([
35460 context_1.Autowired('eventService'),
35461 __metadata("design:type", eventService_1.EventService)
35462 ], InfiniteCache.prototype, "eventService", void 0);
35463 __decorate([
35464 context_1.Autowired('context'),
35465 __metadata("design:type", context_1.Context)
35466 ], InfiniteCache.prototype, "context", void 0);
35467 __decorate([
35468 context_1.Autowired('columnApi'),
35469 __metadata("design:type", columnApi_1.ColumnApi)
35470 ], InfiniteCache.prototype, "columnApi", void 0);
35471 __decorate([
35472 context_1.Autowired('gridApi'),
35473 __metadata("design:type", gridApi_1.GridApi)
35474 ], InfiniteCache.prototype, "gridApi", void 0);
35475 __decorate([
35476 __param(0, context_1.Qualifier('loggerFactory')),
35477 __metadata("design:type", Function),
35478 __metadata("design:paramtypes", [logger_1.LoggerFactory]),
35479 __metadata("design:returntype", void 0)
35480 ], InfiniteCache.prototype, "setBeans", null);
35481 __decorate([
35482 context_1.PostConstruct,
35483 __metadata("design:type", Function),
35484 __metadata("design:paramtypes", []),
35485 __metadata("design:returntype", void 0)
35486 ], InfiniteCache.prototype, "init", null);
35487 return InfiniteCache;
35488}(rowNodeCache_1.RowNodeCache));
35489exports.InfiniteCache = InfiniteCache;
35490
35491
35492/***/ }),
35493/* 140 */
35494/***/ (function(module, exports, __webpack_require__) {
35495
35496"use strict";
35497/**
35498 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
35499 * @version v18.1.2
35500 * @link http://www.ag-grid.com/
35501 * @license MIT
35502 */
35503
35504var __extends = (this && this.__extends) || (function () {
35505 var extendStatics = Object.setPrototypeOf ||
35506 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
35507 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
35508 return function (d, b) {
35509 extendStatics(d, b);
35510 function __() { this.constructor = d; }
35511 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
35512 };
35513})();
35514var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
35515 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
35516 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
35517 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
35518 return c > 3 && r && Object.defineProperty(target, key, r), r;
35519};
35520var __metadata = (this && this.__metadata) || function (k, v) {
35521 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
35522};
35523Object.defineProperty(exports, "__esModule", { value: true });
35524var utils_1 = __webpack_require__(1);
35525var gridOptionsWrapper_1 = __webpack_require__(2);
35526var context_1 = __webpack_require__(0);
35527var rowNodeBlock_1 = __webpack_require__(63);
35528var rowRenderer_1 = __webpack_require__(22);
35529var InfiniteBlock = (function (_super) {
35530 __extends(InfiniteBlock, _super);
35531 function InfiniteBlock(pageNumber, params) {
35532 var _this = _super.call(this, pageNumber, params) || this;
35533 _this.cacheParams = params;
35534 return _this;
35535 }
35536 InfiniteBlock.prototype.createBlankRowNode = function (rowIndex) {
35537 var rowNode = _super.prototype.createBlankRowNode.call(this, rowIndex);
35538 rowNode.uiLevel = 0;
35539 this.setIndexAndTopOnRowNode(rowNode, rowIndex);
35540 return rowNode;
35541 };
35542 InfiniteBlock.prototype.setDataAndId = function (rowNode, data, index) {
35543 if (utils_1.Utils.exists(data)) {
35544 // this means if the user is not providing id's we just use the
35545 // index for the row. this will allow selection to work (that is based
35546 // on index) as long user is not inserting or deleting rows,
35547 // or wanting to keep selection between server side sorting or filtering
35548 rowNode.setDataAndId(data, index.toString());
35549 }
35550 else {
35551 rowNode.setDataAndId(undefined, undefined);
35552 }
35553 };
35554 InfiniteBlock.prototype.setRowNode = function (rowIndex, rowNode) {
35555 _super.prototype.setRowNode.call(this, rowIndex, rowNode);
35556 this.setIndexAndTopOnRowNode(rowNode, rowIndex);
35557 };
35558 InfiniteBlock.prototype.init = function () {
35559 _super.prototype.init.call(this, {
35560 context: this.context,
35561 rowRenderer: this.rowRenderer
35562 });
35563 };
35564 InfiniteBlock.prototype.getNodeIdPrefix = function () {
35565 return null;
35566 };
35567 InfiniteBlock.prototype.getRow = function (displayIndex) {
35568 return this.getRowUsingLocalIndex(displayIndex);
35569 };
35570 InfiniteBlock.prototype.setIndexAndTopOnRowNode = function (rowNode, rowIndex) {
35571 rowNode.setRowIndex(rowIndex);
35572 rowNode.rowTop = this.cacheParams.rowHeight * rowIndex;
35573 };
35574 InfiniteBlock.prototype.loadFromDatasource = function () {
35575 var _this = this;
35576 // PROBLEM . . . . when the user sets sort via colDef.sort, then this code
35577 // is executing before the sort is set up, so server is not getting the sort
35578 // model. need to change with regards order - so the server side request is
35579 // AFTER thus it gets the right sort model.
35580 var params = {
35581 startRow: this.getStartRow(),
35582 endRow: this.getEndRow(),
35583 successCallback: this.pageLoaded.bind(this, this.getVersion()),
35584 failCallback: this.pageLoadFailed.bind(this),
35585 sortModel: this.cacheParams.sortModel,
35586 filterModel: this.cacheParams.filterModel,
35587 context: this.gridOptionsWrapper.getContext()
35588 };
35589 if (utils_1.Utils.missing(this.cacheParams.datasource.getRows)) {
35590 console.warn("ag-Grid: datasource is missing getRows method");
35591 return;
35592 }
35593 // check if old version of datasource used
35594 var getRowsParams = utils_1.Utils.getFunctionParameters(this.cacheParams.datasource.getRows);
35595 if (getRowsParams.length > 1) {
35596 console.warn('ag-grid: It looks like your paging datasource is of the old type, taking more than one parameter.');
35597 console.warn('ag-grid: From ag-grid 1.9.0, now the getRows takes one parameter. See the documentation for details.');
35598 }
35599 // put in timeout, to force result to be async
35600 setTimeout(function () {
35601 _this.cacheParams.datasource.getRows(params);
35602 }, 0);
35603 };
35604 __decorate([
35605 context_1.Autowired('gridOptionsWrapper'),
35606 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
35607 ], InfiniteBlock.prototype, "gridOptionsWrapper", void 0);
35608 __decorate([
35609 context_1.Autowired('context'),
35610 __metadata("design:type", context_1.Context)
35611 ], InfiniteBlock.prototype, "context", void 0);
35612 __decorate([
35613 context_1.Autowired('rowRenderer'),
35614 __metadata("design:type", rowRenderer_1.RowRenderer)
35615 ], InfiniteBlock.prototype, "rowRenderer", void 0);
35616 __decorate([
35617 context_1.PostConstruct,
35618 __metadata("design:type", Function),
35619 __metadata("design:paramtypes", []),
35620 __metadata("design:returntype", void 0)
35621 ], InfiniteBlock.prototype, "init", null);
35622 return InfiniteBlock;
35623}(rowNodeBlock_1.RowNodeBlock));
35624exports.InfiniteBlock = InfiniteBlock;
35625
35626
35627/***/ }),
35628/* 141 */
35629/***/ (function(module, exports, __webpack_require__) {
35630
35631"use strict";
35632/**
35633 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
35634 * @version v18.1.2
35635 * @link http://www.ag-grid.com/
35636 * @license MIT
35637 */
35638
35639var __extends = (this && this.__extends) || (function () {
35640 var extendStatics = Object.setPrototypeOf ||
35641 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
35642 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
35643 return function (d, b) {
35644 extendStatics(d, b);
35645 function __() { this.constructor = d; }
35646 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
35647 };
35648})();
35649var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
35650 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
35651 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
35652 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
35653 return c > 3 && r && Object.defineProperty(target, key, r), r;
35654};
35655var __metadata = (this && this.__metadata) || function (k, v) {
35656 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
35657};
35658Object.defineProperty(exports, "__esModule", { value: true });
35659var context_1 = __webpack_require__(0);
35660var gridOptionsWrapper_1 = __webpack_require__(2);
35661var changedPath_1 = __webpack_require__(90);
35662var rowRenderer_1 = __webpack_require__(22);
35663var eventService_1 = __webpack_require__(3);
35664var constants_1 = __webpack_require__(9);
35665var beanStub_1 = __webpack_require__(13);
35666var events_1 = __webpack_require__(5);
35667var ChangeDetectionService = (function (_super) {
35668 __extends(ChangeDetectionService, _super);
35669 function ChangeDetectionService() {
35670 return _super !== null && _super.apply(this, arguments) || this;
35671 }
35672 ChangeDetectionService.prototype.init = function () {
35673 if (this.rowModel.getType() === constants_1.Constants.ROW_MODEL_TYPE_CLIENT_SIDE) {
35674 this.clientSideRowModel = this.rowModel;
35675 }
35676 this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_CELL_VALUE_CHANGED, this.onCellValueChanged.bind(this));
35677 };
35678 ChangeDetectionService.prototype.onCellValueChanged = function (event) {
35679 this.doChangeDetection(event.node, event.column);
35680 };
35681 ChangeDetectionService.prototype.doChangeDetection = function (rowNode, column) {
35682 if (this.gridOptionsWrapper.isSuppressChangeDetection()) {
35683 return;
35684 }
35685 // step 1 of change detection is to update the aggregated values
35686 if (this.clientSideRowModel && !rowNode.isRowPinned()) {
35687 var onlyChangedColumns = this.gridOptionsWrapper.isAggregateOnlyChangedColumns();
35688 var changedPath = new changedPath_1.ChangedPath(onlyChangedColumns);
35689 changedPath.addParentNode(rowNode.parent, [column]);
35690 this.clientSideRowModel.doAggregate(changedPath);
35691 }
35692 // step 2 of change detection is to refresh the cells
35693 this.rowRenderer.refreshCells();
35694 };
35695 __decorate([
35696 context_1.Autowired('gridOptionsWrapper'),
35697 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
35698 ], ChangeDetectionService.prototype, "gridOptionsWrapper", void 0);
35699 __decorate([
35700 context_1.Autowired('rowModel'),
35701 __metadata("design:type", Object)
35702 ], ChangeDetectionService.prototype, "rowModel", void 0);
35703 __decorate([
35704 context_1.Autowired('rowRenderer'),
35705 __metadata("design:type", rowRenderer_1.RowRenderer)
35706 ], ChangeDetectionService.prototype, "rowRenderer", void 0);
35707 __decorate([
35708 context_1.Autowired('eventService'),
35709 __metadata("design:type", eventService_1.EventService)
35710 ], ChangeDetectionService.prototype, "eventService", void 0);
35711 __decorate([
35712 context_1.PostConstruct,
35713 __metadata("design:type", Function),
35714 __metadata("design:paramtypes", []),
35715 __metadata("design:returntype", void 0)
35716 ], ChangeDetectionService.prototype, "init", null);
35717 ChangeDetectionService = __decorate([
35718 context_1.Bean('changeDetectionService')
35719 ], ChangeDetectionService);
35720 return ChangeDetectionService;
35721}(beanStub_1.BeanStub));
35722exports.ChangeDetectionService = ChangeDetectionService;
35723
35724
35725/***/ }),
35726/* 142 */
35727/***/ (function(module, exports, __webpack_require__) {
35728
35729"use strict";
35730/**
35731 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
35732 * @version v18.1.2
35733 * @link http://www.ag-grid.com/
35734 * @license MIT
35735 */
35736
35737var __extends = (this && this.__extends) || (function () {
35738 var extendStatics = Object.setPrototypeOf ||
35739 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
35740 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
35741 return function (d, b) {
35742 extendStatics(d, b);
35743 function __() { this.constructor = d; }
35744 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
35745 };
35746})();
35747var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
35748 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
35749 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
35750 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
35751 return c > 3 && r && Object.defineProperty(target, key, r), r;
35752};
35753var __metadata = (this && this.__metadata) || function (k, v) {
35754 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
35755};
35756Object.defineProperty(exports, "__esModule", { value: true });
35757var component_1 = __webpack_require__(8);
35758var context_1 = __webpack_require__(0);
35759var gridOptionsWrapper_1 = __webpack_require__(2);
35760var componentAnnotations_1 = __webpack_require__(11);
35761var utils_1 = __webpack_require__(1);
35762var eventService_1 = __webpack_require__(3);
35763var events_1 = __webpack_require__(5);
35764var rowRenderer_1 = __webpack_require__(22);
35765var paginationProxy_1 = __webpack_require__(31);
35766var PaginationComp = (function (_super) {
35767 __extends(PaginationComp, _super);
35768 function PaginationComp() {
35769 return _super.call(this) || this;
35770 }
35771 PaginationComp.prototype.postConstruct = function () {
35772 this.setTemplate(this.getTemplate());
35773 var isPaging = this.gridOptionsWrapper.isPagination();
35774 var paginationPanelEnabled = isPaging && !this.gridOptionsWrapper.isSuppressPaginationPanel();
35775 if (!paginationPanelEnabled) {
35776 this.setVisible(false);
35777 return;
35778 }
35779 this.addDestroyableEventListener(this.eventService, events_1.Events.EVENT_PAGINATION_CHANGED, this.onPaginationChanged.bind(this));
35780 this.addDestroyableEventListener(this.btFirst, 'click', this.onBtFirst.bind(this));
35781 this.addDestroyableEventListener(this.btLast, 'click', this.onBtLast.bind(this));
35782 this.addDestroyableEventListener(this.btNext, 'click', this.onBtNext.bind(this));
35783 this.addDestroyableEventListener(this.btPrevious, 'click', this.onBtPrevious.bind(this));
35784 this.onPaginationChanged();
35785 };
35786 PaginationComp.prototype.onPaginationChanged = function () {
35787 this.enableOrDisableButtons();
35788 this.updateRowLabels();
35789 this.setCurrentPageLabel();
35790 this.setTotalLabels();
35791 };
35792 PaginationComp.prototype.setCurrentPageLabel = function () {
35793 var pagesExist = this.paginationProxy.getTotalPages() > 0;
35794 var currentPage = this.paginationProxy.getCurrentPage();
35795 var toDisplay = pagesExist ? currentPage + 1 : 0;
35796 this.lbCurrent.innerHTML = this.formatNumber(toDisplay);
35797 };
35798 PaginationComp.prototype.formatNumber = function (value) {
35799 var userFunc = this.gridOptionsWrapper.getPaginationNumberFormatterFunc();
35800 if (userFunc) {
35801 return userFunc({ value: value });
35802 }
35803 else {
35804 return utils_1._.formatNumberCommas(value);
35805 }
35806 };
35807 PaginationComp.prototype.getTemplate = function () {
35808 var localeTextFunc = this.gridOptionsWrapper.getLocaleTextFunc();
35809 var strPage = localeTextFunc('page', 'Page');
35810 var strTo = localeTextFunc('to', 'to');
35811 var strOf = localeTextFunc('of', 'of');
35812 var strFirst = localeTextFunc('first', 'First');
35813 var strPrevious = localeTextFunc('previous', 'Previous');
35814 var strNext = localeTextFunc('next', 'Next');
35815 var strLast = localeTextFunc('last', 'Last');
35816 return "<div class=\"ag-paging-panel ag-font-style\">\n <span ref=\"eSummaryPanel\" class=\"ag-paging-row-summary-panel\">\n <span ref=\"lbFirstRowOnPage\"></span> " + strTo + " <span ref=\"lbLastRowOnPage\"></span> " + strOf + " <span ref=\"lbRecordCount\"></span>\n </span>\n <span class=\"ag-paging-page-summary-panel\">\n <button type=\"button\" class=\"ag-paging-button\" ref=\"btFirst\">" + strFirst + "</button>\n <button type=\"button\" class=\"ag-paging-button\" ref=\"btPrevious\">" + strPrevious + "</button>\n " + strPage + " <span ref=\"lbCurrent\"></span> " + strOf + " <span ref=\"lbTotal\"></span>\n <button type=\"button\" class=\"ag-paging-button\" ref=\"btNext\">" + strNext + "</button>\n <button type=\"button\" class=\"ag-paging-button\" ref=\"btLast\">" + strLast + "</button>\n </span>\n </div>";
35817 };
35818 PaginationComp.prototype.onBtNext = function () {
35819 this.paginationProxy.goToNextPage();
35820 };
35821 PaginationComp.prototype.onBtPrevious = function () {
35822 this.paginationProxy.goToPreviousPage();
35823 };
35824 PaginationComp.prototype.onBtFirst = function () {
35825 this.paginationProxy.goToFirstPage();
35826 };
35827 PaginationComp.prototype.onBtLast = function () {
35828 this.paginationProxy.goToLastPage();
35829 };
35830 PaginationComp.prototype.enableOrDisableButtons = function () {
35831 var currentPage = this.paginationProxy.getCurrentPage();
35832 var maxRowFound = this.paginationProxy.isLastPageFound();
35833 var totalPages = this.paginationProxy.getTotalPages();
35834 var disablePreviousAndFirst = currentPage === 0;
35835 this.btPrevious.disabled = disablePreviousAndFirst;
35836 this.btFirst.disabled = disablePreviousAndFirst;
35837 var zeroPagesToDisplay = this.isZeroPagesToDisplay();
35838 var onLastPage = maxRowFound && currentPage === (totalPages - 1);
35839 var disableNext = onLastPage || zeroPagesToDisplay;
35840 this.btNext.disabled = disableNext;
35841 var disableLast = !maxRowFound || zeroPagesToDisplay || currentPage === (totalPages - 1);
35842 this.btLast.disabled = disableLast;
35843 };
35844 PaginationComp.prototype.updateRowLabels = function () {
35845 var currentPage = this.paginationProxy.getCurrentPage();
35846 var pageSize = this.paginationProxy.getPageSize();
35847 var maxRowFound = this.paginationProxy.isLastPageFound();
35848 var rowCount = this.paginationProxy.isLastPageFound() ?
35849 this.paginationProxy.getTotalRowCount() : null;
35850 var startRow;
35851 var endRow;
35852 if (this.isZeroPagesToDisplay()) {
35853 startRow = 0;
35854 endRow = 0;
35855 }
35856 else {
35857 startRow = (pageSize * currentPage) + 1;
35858 endRow = startRow + pageSize - 1;
35859 if (maxRowFound && endRow > rowCount) {
35860 endRow = rowCount;
35861 }
35862 }
35863 this.lbFirstRowOnPage.innerHTML = this.formatNumber(startRow);
35864 this.lbLastRowOnPage.innerHTML = this.formatNumber(endRow);
35865 };
35866 PaginationComp.prototype.isZeroPagesToDisplay = function () {
35867 var maxRowFound = this.paginationProxy.isLastPageFound();
35868 var totalPages = this.paginationProxy.getTotalPages();
35869 return maxRowFound && totalPages === 0;
35870 };
35871 PaginationComp.prototype.setTotalLabels = function () {
35872 var lastPageFound = this.paginationProxy.isLastPageFound();
35873 var totalPages = this.paginationProxy.getTotalPages();
35874 var rowCount = this.paginationProxy.isLastPageFound() ?
35875 this.paginationProxy.getTotalRowCount() : null;
35876 if (lastPageFound) {
35877 this.lbTotal.innerHTML = this.formatNumber(totalPages);
35878 this.lbRecordCount.innerHTML = this.formatNumber(rowCount);
35879 }
35880 else {
35881 var moreText = this.gridOptionsWrapper.getLocaleTextFunc()('more', 'more');
35882 this.lbTotal.innerHTML = moreText;
35883 this.lbRecordCount.innerHTML = moreText;
35884 }
35885 };
35886 __decorate([
35887 context_1.Autowired('gridOptionsWrapper'),
35888 __metadata("design:type", gridOptionsWrapper_1.GridOptionsWrapper)
35889 ], PaginationComp.prototype, "gridOptionsWrapper", void 0);
35890 __decorate([
35891 context_1.Autowired('eventService'),
35892 __metadata("design:type", eventService_1.EventService)
35893 ], PaginationComp.prototype, "eventService", void 0);
35894 __decorate([
35895 context_1.Autowired('paginationProxy'),
35896 __metadata("design:type", paginationProxy_1.PaginationProxy)
35897 ], PaginationComp.prototype, "paginationProxy", void 0);
35898 __decorate([
35899 context_1.Autowired('rowRenderer'),
35900 __metadata("design:type", rowRenderer_1.RowRenderer)
35901 ], PaginationComp.prototype, "rowRenderer", void 0);
35902 __decorate([
35903 componentAnnotations_1.RefSelector('btFirst'),
35904 __metadata("design:type", HTMLButtonElement)
35905 ], PaginationComp.prototype, "btFirst", void 0);
35906 __decorate([
35907 componentAnnotations_1.RefSelector('btPrevious'),
35908 __metadata("design:type", HTMLButtonElement)
35909 ], PaginationComp.prototype, "btPrevious", void 0);
35910 __decorate([
35911 componentAnnotations_1.RefSelector('btNext'),
35912 __metadata("design:type", HTMLButtonElement)
35913 ], PaginationComp.prototype, "btNext", void 0);
35914 __decorate([
35915 componentAnnotations_1.RefSelector('btLast'),
35916 __metadata("design:type", HTMLButtonElement)
35917 ], PaginationComp.prototype, "btLast", void 0);
35918 __decorate([
35919 componentAnnotations_1.RefSelector('lbRecordCount'),
35920 __metadata("design:type", Object)
35921 ], PaginationComp.prototype, "lbRecordCount", void 0);
35922 __decorate([
35923 componentAnnotations_1.RefSelector('lbFirstRowOnPage'),
35924 __metadata("design:type", Object)
35925 ], PaginationComp.prototype, "lbFirstRowOnPage", void 0);
35926 __decorate([
35927 componentAnnotations_1.RefSelector('lbLastRowOnPage'),
35928 __metadata("design:type", Object)
35929 ], PaginationComp.prototype, "lbLastRowOnPage", void 0);
35930 __decorate([
35931 componentAnnotations_1.RefSelector('eSummaryPanel'),
35932 __metadata("design:type", Object)
35933 ], PaginationComp.prototype, "eSummaryPanel", void 0);
35934 __decorate([
35935 componentAnnotations_1.RefSelector('lbCurrent'),
35936 __metadata("design:type", Object)
35937 ], PaginationComp.prototype, "lbCurrent", void 0);
35938 __decorate([
35939 componentAnnotations_1.RefSelector('lbTotal'),
35940 __metadata("design:type", Object)
35941 ], PaginationComp.prototype, "lbTotal", void 0);
35942 __decorate([
35943 context_1.PostConstruct,
35944 __metadata("design:type", Function),
35945 __metadata("design:paramtypes", []),
35946 __metadata("design:returntype", void 0)
35947 ], PaginationComp.prototype, "postConstruct", null);
35948 return PaginationComp;
35949}(component_1.Component));
35950exports.PaginationComp = PaginationComp;
35951
35952
35953/***/ }),
35954/* 143 */
35955/***/ (function(module, exports, __webpack_require__) {
35956
35957"use strict";
35958/**
35959 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
35960 * @version v18.1.2
35961 * @link http://www.ag-grid.com/
35962 * @license MIT
35963 */
35964
35965Object.defineProperty(exports, "__esModule", { value: true });
35966var componentUtil_1 = __webpack_require__(64);
35967var grid_1 = __webpack_require__(87);
35968var registered = false;
35969function initialiseAgGridWithWebComponents() {
35970 console.warn('ag-grid: initialiseAgGridWithWebComponents is deprecated. Please use the ag-grid-webcomponent dependency instead. ');
35971 // only register to WebComponents once
35972 if (registered) {
35973 return;
35974 }
35975 registered = true;
35976 if (typeof document === 'undefined' || !document.registerElement) {
35977 console.error('ag-Grid: unable to find document.registerElement() function, unable to initialise ag-Grid as a Web Component');
35978 }
35979 // i don't think this type of extension is possible in TypeScript, so back to
35980 // plain Javascript to create this object
35981 var AgileGridProto = Object.create(HTMLElement.prototype);
35982 // wrap each property with a get and set method, so we can track when changes are done
35983 componentUtil_1.ComponentUtil.ALL_PROPERTIES.forEach(function (key) {
35984 Object.defineProperty(AgileGridProto, key, {
35985 set: function (v) {
35986 this.__agGridSetProperty(key, v);
35987 },
35988 get: function () {
35989 return this.__agGridGetProperty(key);
35990 },
35991 enumerable: true,
35992 configurable: true
35993 });
35994 });
35995 var agGridProtoNoType = AgileGridProto;
35996 agGridProtoNoType.__agGridSetProperty = function (key, value) {
35997 if (!this.__attributes) {
35998 this.__attributes = {};
35999 }
36000 this.__attributes[key] = value;
36001 // keeping this consistent with the ng2 onChange, so I can reuse the handling code
36002 var changeObject = {};
36003 changeObject[key] = { currentValue: value };
36004 this.onChange(changeObject);
36005 };
36006 agGridProtoNoType.onChange = function (changes) {
36007 if (this._initialised) {
36008 componentUtil_1.ComponentUtil.processOnChange(changes, this._gridOptions, this.api, this.columnApi);
36009 }
36010 };
36011 agGridProtoNoType.__agGridGetProperty = function (key) {
36012 if (!this.__attributes) {
36013 this.__attributes = {};
36014 }
36015 return this.__attributes[key];
36016 };
36017 agGridProtoNoType.setGridOptions = function (options) {
36018 var globalEventListener = this.globalEventListener.bind(this);
36019 this._gridOptions = componentUtil_1.ComponentUtil.copyAttributesToGridOptions(options, this);
36020 var gridParams = {
36021 globalEventListener: globalEventListener
36022 };
36023 this._agGrid = new grid_1.Grid(this, this._gridOptions, gridParams);
36024 this.api = options.api;
36025 this.columnApi = options.columnApi;
36026 this._initialised = true;
36027 };
36028 // copies all the attributes into this object
36029 agGridProtoNoType.createdCallback = function () {
36030 for (var i = 0; i < this.attributes.length; i++) {
36031 var attribute = this.attributes[i];
36032 this.setPropertyFromAttribute(attribute);
36033 }
36034 };
36035 agGridProtoNoType.setPropertyFromAttribute = function (attribute) {
36036 var name = toCamelCase(attribute.nodeName);
36037 var value = attribute.nodeValue;
36038 if (componentUtil_1.ComponentUtil.ALL_PROPERTIES.indexOf(name) >= 0) {
36039 this[name] = value;
36040 }
36041 };
36042 agGridProtoNoType.attachedCallback = function (params) { };
36043 agGridProtoNoType.detachedCallback = function (params) { };
36044 agGridProtoNoType.attributeChangedCallback = function (attributeName) {
36045 var attribute = this.attributes[attributeName];
36046 this.setPropertyFromAttribute(attribute);
36047 };
36048 agGridProtoNoType.globalEventListener = function (eventType, event) {
36049 var eventLowerCase = eventType.toLowerCase();
36050 var browserEvent = new Event(eventLowerCase);
36051 var browserEventNoType = browserEvent;
36052 browserEventNoType.agGridDetails = event;
36053 this.dispatchEvent(browserEvent);
36054 var callbackMethod = 'on' + eventLowerCase;
36055 if (typeof this[callbackMethod] === 'function') {
36056 this[callbackMethod](browserEvent);
36057 }
36058 };
36059 // finally, register
36060 document.registerElement('ag-grid', { prototype: AgileGridProto });
36061}
36062exports.initialiseAgGridWithWebComponents = initialiseAgGridWithWebComponents;
36063function toCamelCase(myString) {
36064 if (typeof myString === 'string') {
36065 var result = myString.replace(/-([a-z])/g, function (g) {
36066 return g[1].toUpperCase();
36067 });
36068 return result;
36069 }
36070 else {
36071 return myString;
36072 }
36073}
36074
36075
36076/***/ }),
36077/* 144 */
36078/***/ (function(module, exports, __webpack_require__) {
36079
36080"use strict";
36081/**
36082 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
36083 * @version v18.1.2
36084 * @link http://www.ag-grid.com/
36085 * @license MIT
36086 */
36087
36088Object.defineProperty(exports, "__esModule", { value: true });
36089var utils_1 = __webpack_require__(1);
36090var TabbedLayout = (function () {
36091 function TabbedLayout(params) {
36092 var _this = this;
36093 this.items = [];
36094 this.params = params;
36095 this.eGui = document.createElement('div');
36096 this.eGui.innerHTML = TabbedLayout.TEMPLATE;
36097 this.eHeader = this.eGui.querySelector('[ref="tabHeader"]');
36098 this.eBody = this.eGui.querySelector('[ref="tabBody"]');
36099 utils_1.Utils.addCssClass(this.eGui, params.cssClass);
36100 if (params.items) {
36101 params.items.forEach(function (item) { return _this.addItem(item); });
36102 }
36103 }
36104 TabbedLayout.prototype.setAfterAttachedParams = function (params) {
36105 this.afterAttachedParams = params;
36106 };
36107 TabbedLayout.prototype.getMinWidth = function () {
36108 var eDummyContainer = document.createElement('span');
36109 // position fixed, so it isn't restricted to the boundaries of the parent
36110 eDummyContainer.style.position = 'fixed';
36111 // we put the dummy into the body container, so it will inherit all the
36112 // css styles that the real cells are inheriting
36113 this.eGui.appendChild(eDummyContainer);
36114 var minWidth = 0;
36115 this.items.forEach(function (itemWrapper) {
36116 utils_1.Utils.removeAllChildren(eDummyContainer);
36117 var eClone = itemWrapper.tabbedItem.bodyPromise.resolveNow(null, function (body) { return body.cloneNode(true); });
36118 if (eClone == null) {
36119 return;
36120 }
36121 eDummyContainer.appendChild(eClone);
36122 if (minWidth < eDummyContainer.offsetWidth) {
36123 minWidth = eDummyContainer.offsetWidth;
36124 }
36125 });
36126 // finally check the parent tabs are no wider, as if they
36127 // are, then these are the min width and not the child tabs
36128 if (minWidth < this.eGui.offsetWidth) {
36129 minWidth = this.eGui.offsetWidth;
36130 }
36131 this.eGui.removeChild(eDummyContainer);
36132 return minWidth;
36133 };
36134 TabbedLayout.prototype.showFirstItem = function () {
36135 if (this.items.length > 0) {
36136 this.showItemWrapper(this.items[0]);
36137 }
36138 };
36139 TabbedLayout.prototype.addItem = function (item) {
36140 var eHeaderButton = document.createElement('span');
36141 eHeaderButton.appendChild(item.title);
36142 utils_1.Utils.addCssClass(eHeaderButton, 'ag-tab');
36143 this.eHeader.appendChild(eHeaderButton);
36144 var wrapper = {
36145 tabbedItem: item,
36146 eHeaderButton: eHeaderButton
36147 };
36148 this.items.push(wrapper);
36149 eHeaderButton.addEventListener('click', this.showItemWrapper.bind(this, wrapper));
36150 };
36151 TabbedLayout.prototype.showItem = function (tabbedItem) {
36152 var itemWrapper = utils_1.Utils.find(this.items, function (itemWrapper) {
36153 return itemWrapper.tabbedItem === tabbedItem;
36154 });
36155 if (itemWrapper) {
36156 this.showItemWrapper(itemWrapper);
36157 }
36158 };
36159 TabbedLayout.prototype.showItemWrapper = function (wrapper) {
36160 var _this = this;
36161 if (this.params.onItemClicked) {
36162 this.params.onItemClicked({ item: wrapper.tabbedItem });
36163 }
36164 if (this.activeItem === wrapper) {
36165 utils_1.Utils.callIfPresent(this.params.onActiveItemClicked);
36166 return;
36167 }
36168 utils_1.Utils.removeAllChildren(this.eBody);
36169 wrapper.tabbedItem.bodyPromise.then(function (body) {
36170 _this.eBody.appendChild(body);
36171 });
36172 if (this.activeItem) {
36173 utils_1.Utils.removeCssClass(this.activeItem.eHeaderButton, 'ag-tab-selected');
36174 }
36175 utils_1.Utils.addCssClass(wrapper.eHeaderButton, 'ag-tab-selected');
36176 this.activeItem = wrapper;
36177 if (wrapper.tabbedItem.afterAttachedCallback) {
36178 wrapper.tabbedItem.afterAttachedCallback(this.afterAttachedParams);
36179 }
36180 };
36181 TabbedLayout.prototype.getGui = function () {
36182 return this.eGui;
36183 };
36184 TabbedLayout.TEMPLATE = '<div>' +
36185 '<div ref="tabHeader" class="ag-tab-header"></div>' +
36186 '<div ref="tabBody" class="ag-tab-body"></div>' +
36187 '</div>';
36188 return TabbedLayout;
36189}());
36190exports.TabbedLayout = TabbedLayout;
36191
36192
36193/***/ }),
36194/* 145 */
36195/***/ (function(module, exports, __webpack_require__) {
36196
36197"use strict";
36198/**
36199 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
36200 * @version v18.1.2
36201 * @link http://www.ag-grid.com/
36202 * @license MIT
36203 */
36204
36205Object.defineProperty(exports, "__esModule", { value: true });
36206var VerticalStack = (function () {
36207 function VerticalStack() {
36208 this.isLayoutPanel = true;
36209 this.childPanels = [];
36210 this.eGui = document.createElement('div');
36211 this.eGui.style.height = '100%';
36212 }
36213 VerticalStack.prototype.addPanel = function (panel, height) {
36214 var component;
36215 if (panel.isLayoutPanel) {
36216 this.childPanels.push(panel);
36217 component = panel.getGui();
36218 }
36219 else {
36220 component = panel;
36221 }
36222 if (height) {
36223 component.style.height = height;
36224 }
36225 this.eGui.appendChild(component);
36226 };
36227 VerticalStack.prototype.getGui = function () {
36228 return this.eGui;
36229 };
36230 VerticalStack.prototype.doLayout = function () {
36231 for (var i = 0; i < this.childPanels.length; i++) {
36232 this.childPanels[i].doLayout();
36233 }
36234 };
36235 return VerticalStack;
36236}());
36237exports.VerticalStack = VerticalStack;
36238
36239
36240/***/ }),
36241/* 146 */
36242/***/ (function(module, exports, __webpack_require__) {
36243
36244"use strict";
36245/**
36246 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
36247 * @version v18.1.2
36248 * @link http://www.ag-grid.com/
36249 * @license MIT
36250 */
36251
36252Object.defineProperty(exports, "__esModule", { value: true });
36253var utils_1 = __webpack_require__(1);
36254function simpleHttpRequest(params) {
36255 return new utils_1.Promise(function (resolve) {
36256 var httpRequest = new XMLHttpRequest();
36257 httpRequest.open('GET', params.url);
36258 httpRequest.send();
36259 httpRequest.onreadystatechange = function () {
36260 if (httpRequest.readyState == 4 && httpRequest.status == 200) {
36261 var httpResponse = JSON.parse(httpRequest.responseText);
36262 resolve(httpResponse);
36263 }
36264 };
36265 });
36266}
36267exports.simpleHttpRequest = simpleHttpRequest;
36268
36269
36270/***/ }),
36271/* 147 */
36272/***/ (function(module, exports, __webpack_require__) {
36273
36274"use strict";
36275/**
36276 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
36277 * @version v18.1.2
36278 * @link http://www.ag-grid.com/
36279 * @license MIT
36280 */
36281
36282Object.defineProperty(exports, "__esModule", { value: true });
36283var utils_1 = __webpack_require__(1);
36284function defaultGroupComparator(valueA, valueB, nodeA, nodeB, accentedCompare) {
36285 if (accentedCompare === void 0) { accentedCompare = false; }
36286 console.warn('ag-Grid: Since ag-grid 11.0.0 defaultGroupComparator is not necessary. You can remove this from your colDef');
36287 var nodeAIsGroup = utils_1.Utils.exists(nodeA) && nodeA.group;
36288 var nodeBIsGroup = utils_1.Utils.exists(nodeB) && nodeB.group;
36289 var bothAreGroups = nodeAIsGroup && nodeBIsGroup;
36290 var bothAreNormal = !nodeAIsGroup && !nodeBIsGroup;
36291 if (bothAreGroups) {
36292 return utils_1.Utils.defaultComparator(nodeA.key, nodeB.key, accentedCompare);
36293 }
36294 else if (bothAreNormal) {
36295 return utils_1.Utils.defaultComparator(valueA, valueB, accentedCompare);
36296 }
36297 else if (nodeAIsGroup) {
36298 return 1;
36299 }
36300 else {
36301 return -1;
36302 }
36303}
36304exports.defaultGroupComparator = defaultGroupComparator;
36305
36306
36307/***/ }),
36308/* 148 */
36309/***/ (function(module, exports, __webpack_require__) {
36310
36311"use strict";
36312/**
36313 * ag-grid - Advanced Data Grid / Data Table supporting Javascript / React / AngularJS / Web Components
36314 * @version v18.1.2
36315 * @link http://www.ag-grid.com/
36316 * @license MIT
36317 */
36318
36319Object.defineProperty(exports, "__esModule", { value: true });
36320var BaseComponentWrapper = (function () {
36321 function BaseComponentWrapper() {
36322 }
36323 BaseComponentWrapper.prototype.wrap = function (OriginalConstructor, mandatoryMethodList, optionalMethodList, componentName) {
36324 var _this = this;
36325 var wrapper = this.createWrapper(OriginalConstructor, componentName);
36326 mandatoryMethodList.forEach((function (methodName) {
36327 _this.createMethod(wrapper, methodName, true);
36328 }));
36329 if (optionalMethodList) {
36330 optionalMethodList.forEach((function (methodName) {
36331 _this.createMethod(wrapper, methodName, false);
36332 }));
36333 }
36334 return wrapper;
36335 };
36336 BaseComponentWrapper.prototype.createMethod = function (wrapper, methodName, mandatory) {
36337 wrapper.addMethod(methodName, this.createMethodProxy(wrapper, methodName, mandatory));
36338 };
36339 BaseComponentWrapper.prototype.createMethodProxy = function (wrapper, methodName, mandatory) {
36340 return function () {
36341 if (wrapper.hasMethod(methodName)) {
36342 return wrapper.callMethod(methodName, arguments);
36343 }
36344 if (mandatory) {
36345 console.warn('ag-Grid: Framework component is missing the method ' + methodName + '()');
36346 }
36347 return null;
36348 };
36349 };
36350 return BaseComponentWrapper;
36351}());
36352exports.BaseComponentWrapper = BaseComponentWrapper;
36353
36354
36355/***/ }),
36356/* 149 */
36357/***/ (function(module, exports, __webpack_require__) {
36358
36359// style-loader: Adds some css to the DOM by adding a <style> tag
36360
36361// load the styles
36362var content = __webpack_require__(150);
36363if(typeof content === 'string') content = [[module.i, content, '']];
36364// add the styles to the DOM
36365var update = __webpack_require__(15)(content, {});
36366if(content.locals) module.exports = content.locals;
36367// Hot Module Replacement
36368if(false) {
36369 // When the styles change, update the <style> tags
36370 if(!content.locals) {
36371 module.hot.accept("!!../../node_modules/css-loader/index.js!./ag-grid.css", function() {
36372 var newContent = require("!!../../node_modules/css-loader/index.js!./ag-grid.css");
36373 if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
36374 update(newContent);
36375 });
36376 }
36377 // When the module is disposed, remove the <style> tags
36378 module.hot.dispose(function() { update(); });
36379}
36380
36381/***/ }),
36382/* 150 */
36383/***/ (function(module, exports, __webpack_require__) {
36384
36385exports = module.exports = __webpack_require__(14)();
36386// imports
36387
36388
36389// module
36390exports.push([module.i, "ag-grid-angular {\n display: block; }\n\nag-grid-ng2 {\n display: block; }\n\nag-grid {\n display: block; }\n\nag-grid-polymer {\n display: block; }\n\nag-grid-aurelia {\n display: block; }\n\n.ag-rtl {\n direction: rtl; }\n\n.ag-ltr {\n direction: ltr; }\n\n.ag-select-agg-func-popup {\n position: absolute; }\n\n.ag-body-no-select {\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none; }\n\n.ag-root-wrapper {\n position: relative; }\n\n.ag-root-wrapper.ag-layout-normal {\n height: 100%;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column; }\n\n.ag-root-wrapper-body {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-direction: row;\n flex-direction: row; }\n\n.ag-layout-normal.ag-root-wrapper-body {\n -webkit-box-flex: 1;\n -ms-flex-positive: 1;\n flex-grow: 1;\n height: 0px;\n min-height: 0px; }\n\n.ag-root {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n overflow: hidden;\n position: relative;\n display: inline-block;\n width: 0px;\n min-width: 0px;\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1; }\n\n.ag-layout-normal.ag-root {\n height: 100%;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column; }\n\n.ag-font-style {\n cursor: default;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none; }\n\n.ag-popup-backdrop {\n height: 100%;\n left: 0;\n position: fixed;\n top: 0;\n width: 100%; }\n\n.ag-header {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n white-space: nowrap;\n width: 100%;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex; }\n\n.ag-pinned-left-header {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n display: inline-block;\n height: 100%;\n overflow: hidden; }\n\n.ag-pinned-right-header {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n display: inline-block;\n height: 100%;\n overflow: hidden; }\n\n.ag-header-viewport {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n height: 100%;\n overflow: hidden;\n width: 0px;\n min-width: 0px;\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1; }\n\n.ag-header-row {\n position: absolute; }\n\n.ag-header-container {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n height: 100%;\n position: relative;\n white-space: nowrap; }\n\n.ag-header-overlay {\n display: block;\n position: absolute; }\n\n.ag-header-cell {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n display: inline-block;\n height: 100%;\n position: absolute;\n vertical-align: bottom; }\n\n.ag-floating-filter {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n display: inline-block;\n position: absolute; }\n\n.ag-floating-filter-body {\n height: 20px;\n margin-right: 25px; }\n\n.ag-floating-filter-full-body {\n height: 20px;\n width: 100%; }\n\n.ag-floating-filter-input {\n width: 100%; }\n\n.ag-floating-filter-input:-moz-read-only {\n background-color: #eee; }\n\n.ag-floating-filter-input:read-only {\n background-color: #eee; }\n\n.ag-floating-filter-menu {\n position: absolute;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none; }\n\n.ag-dnd-ghost {\n background: #e5e5e5;\n border: 1px solid black;\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n cursor: move;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n line-height: 1.4;\n overflow: hidden;\n padding: 3px;\n position: absolute;\n text-overflow: ellipsis;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none; }\n\n.ag-dnd-ghost-icon {\n display: inline-block;\n float: left;\n padding: 2px; }\n\n.ag-dnd-ghost-label {\n display: inline-block; }\n\n.ag-header-group-cell {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n display: inline-block;\n height: 100%;\n overflow: hidden;\n position: absolute;\n text-overflow: ellipsis; }\n\n.ag-header-group-cell-label {\n overflow: hidden;\n text-overflow: ellipsis;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex; }\n\n.ag-header-cell-label {\n overflow: hidden;\n text-overflow: ellipsis; }\n\n.ag-header-cell-resize {\n cursor: col-resize;\n height: 100%;\n width: 4px; }\n\n.ag-ltr .ag-header-cell-resize {\n float: right; }\n\n.ag-ltr .ag-pinned-right-header .ag-header-cell-resize {\n float: left; }\n\n.ag-rtl .ag-header-cell-resize {\n float: left; }\n\n.ag-rtl .ag-pinned-left-header .ag-header-cell-resize {\n float: right; }\n\n.ag-ltr .ag-header-select-all {\n float: left; }\n\n.ag-rtl .ag-header-select-all {\n float: right; }\n\n.ag-header-expand-icon {\n padding-left: 4px; }\n\n.ag-header-cell-menu-button {\n float: right; }\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.ag-overlay-panel {\n display: table;\n height: 100%;\n pointer-events: none;\n width: 100%; }\n\n.ag-overlay-wrapper {\n display: table-cell;\n text-align: center;\n vertical-align: middle; }\n\n.ag-column-panel {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n overflow-y: auto; }\n\n.ag-column-panel-center {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n min-height: 400px;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n -webkit-box-flex: 1;\n -ms-flex-positive: 1;\n flex-grow: 1;\n overflow-x: hidden;\n max-height: 100vh; }\n\n.ag-layout-auto-height.ag-body-container {\n min-height: 50px; }\n\n.ag-layout-auto-height.ag-overlay-no-rows-wrapper {\n padding-top: 30px; }\n\n.ag-body {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n position: relative; }\n\n.ag-layout-normal.ag-body {\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n height: 0px;\n min-height: 0px; }\n\n.ag-rtl .ag-body {\n -webkit-box-orient: horizontal;\n -webkit-box-direction: reverse;\n -ms-flex-direction: row-reverse;\n flex-direction: row-reverse; }\n\n.ag-ltr .ag-body {\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-direction: row;\n flex-direction: row; }\n\n.ag-rtl .ag-floating-top {\n -webkit-box-orient: horizontal;\n -webkit-box-direction: reverse;\n -ms-flex-direction: row-reverse;\n flex-direction: row-reverse; }\n\n.ag-ltr .ag-floating-top {\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-direction: row;\n flex-direction: row; }\n\n.ag-ltr .ag-header {\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-direction: row;\n flex-direction: row; }\n\n.ag-rtl .ag-header {\n -webkit-box-orient: horizontal;\n -webkit-box-direction: reverse;\n -ms-flex-direction: row-reverse;\n flex-direction: row-reverse; }\n\n.ag-floating-top {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n overflow: hidden;\n white-space: nowrap;\n width: 100%;\n position: relative;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex; }\n\n.ag-pinned-left-floating-top {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n display: inline-block;\n overflow: hidden;\n position: relative; }\n\n.ag-pinned-right-floating-top {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n display: inline-block;\n overflow: hidden;\n position: relative; }\n\n.ag-floating-top-viewport {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n overflow: hidden;\n width: 0px;\n min-width: 0px;\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1; }\n\n.ag-layout-normal.ag-floating-top-viewport {\n height: 100%; }\n\n.ag-floating-top-container {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n position: relative;\n white-space: nowrap; }\n\n.ag-floating-bottom {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n overflow: hidden;\n white-space: nowrap;\n width: 100%;\n position: relative;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex; }\n\n.ag-pinned-left-floating-bottom {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n display: inline-block;\n overflow: hidden;\n position: relative; }\n\n.ag-pinned-right-floating-bottom {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n display: inline-block;\n overflow: hidden;\n position: relative; }\n\n.ag-floating-bottom-viewport {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n overflow: hidden;\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n width: 0px;\n min-width: 0px; }\n\n.ag-floating-bottom-container {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n position: relative;\n white-space: nowrap; }\n\n.ag-pinned-left-cols-container {\n display: inline-block;\n position: relative; }\n\n.ag-pinned-right-cols-viewport {\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto; }\n\n.ag-pinned-left-cols-viewport {\n height: 100%;\n overflow-x: hidden;\n overflow-y: auto; }\n\n.ag-pinned-right-cols-container {\n display: inline-block;\n position: relative; }\n\n.ag-pinned-left-cols-viewport-wrapper {\n height: 100%;\n overflow: hidden; }\n\n.ag-body-viewport-wrapper {\n height: 100%;\n width: 0px;\n min-width: 0px;\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n overflow: hidden; }\n\n.ag-body-viewport {\n overflow-x: auto;\n overflow-y: auto; }\n\n.ag-layout-normal.ag-body-viewport {\n height: 100%; }\n\n.ag-full-width-viewport-wrapper {\n height: 100%;\n width: 100%;\n display: inline-block;\n pointer-events: none;\n overflow: hidden;\n position: absolute;\n top: 0px;\n left: 0px;\n -webkit-box-sizing: border-box;\n box-sizing: border-box; }\n\n.ag-full-width-viewport {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n height: 100%;\n pointer-events: none;\n overflow-x: hidden;\n overflow-y: auto; }\n\n.ag-full-width-container {\n overflow: hidden;\n position: relative;\n width: 100%; }\n\n.ag-floating-bottom-full-width-container {\n display: inline;\n height: 100%;\n left: 0;\n overflow: hidden;\n pointer-events: none;\n position: absolute;\n top: 0;\n width: 100%; }\n\n.ag-floating-top-full-width-container {\n display: inline;\n height: 100%;\n left: 0;\n overflow: hidden;\n pointer-events: none;\n position: absolute;\n top: 0;\n width: 100%; }\n\n.ag-full-width-row {\n overflow: hidden;\n pointer-events: all; }\n\n.ag-body-container {\n display: inline-block;\n margin-bottom: -2px;\n position: relative; }\n\n.ag-row-animation .ag-row {\n -webkit-transition: top 0.4s, height 0.4s, background-color 0.1s, opacity 0.2s, -webkit-transform 0.4s;\n transition: top 0.4s, height 0.4s, background-color 0.1s, opacity 0.2s, -webkit-transform 0.4s;\n transition: transform 0.4s, top 0.4s, height 0.4s, background-color 0.1s, opacity 0.2s;\n transition: transform 0.4s, top 0.4s, height 0.4s, background-color 0.1s, opacity 0.2s, -webkit-transform 0.4s; }\n\n.ag-row-no-animation .ag-row {\n -webkit-transition: background-color 0.1s;\n transition: background-color 0.1s; }\n\n.ag-row {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n position: absolute;\n white-space: nowrap;\n width: 100%; }\n\n.ag-column-moving .ag-cell {\n -webkit-transition: left 0.2s;\n transition: left 0.2s; }\n\n.ag-column-moving .ag-header-cell {\n -webkit-transition: left 0.2s;\n transition: left 0.2s; }\n\n.ag-column-moving .ag-header-group-cell {\n -webkit-transition: left 0.2s, width 0.2s;\n transition: left 0.2s, width 0.2s; }\n\n.ag-column-drop {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 100%; }\n\n.ag-column-drop-vertical {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n -webkit-box-flex: 1;\n -ms-flex-positive: 1;\n flex-grow: 1;\n height: 50px;\n overflow: hidden; }\n .ag-column-drop-vertical .ag-column-drop-list {\n -webkit-box-flex: 1;\n -ms-flex-positive: 1;\n flex-grow: 1;\n height: 20px;\n overflow-x: auto; }\n .ag-column-drop-vertical .ag-column-drop-cell {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex; }\n .ag-column-drop-vertical .ag-column-drop-cell .ag-column-drop-cell-text {\n overflow: hidden;\n -webkit-box-flex: 1;\n -ms-flex: 1;\n flex: 1;\n text-overflow: ellipsis;\n white-space: nowrap; }\n .ag-column-drop-vertical .ag-column-drop-empty-message {\n display: block; }\n .ag-column-drop-vertical .ag-column-drop-cell-button {\n line-height: 16px; }\n\n.ag-ltr .ag-column-drop-vertical .ag-column-drop-cell-button {\n float: right; }\n\n.ag-rtl .ag-column-drop-vertical .ag-column-drop-cell-button {\n float: left; }\n\n.ag-column-drop-horizontal {\n white-space: nowrap;\n overflow: hidden; }\n .ag-column-drop-horizontal .ag-column-drop-cell {\n display: inline-block; }\n .ag-column-drop-horizontal .ag-column-drop-empty-message {\n display: inline-block; }\n .ag-column-drop-horizontal .ag-column-drop-list {\n height: 100%; }\n\n.ag-cell {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n display: inline-block;\n overflow: hidden;\n position: absolute;\n text-overflow: ellipsis;\n white-space: nowrap; }\n\n.ag-cell-with-height {\n height: 100%; }\n\n.ag-value-slide-out {\n margin-right: 5px;\n opacity: 1;\n -webkit-transition: opacity 3s, margin-right 3s;\n transition: opacity 3s, margin-right 3s;\n -webkit-transition-timing-function: linear;\n transition-timing-function: linear; }\n\n.ag-value-slide-out-end {\n margin-right: 10px;\n opacity: 0; }\n\n.ag-opacity-zero {\n opacity: 0; }\n\n.ag-cell-edit-input {\n height: 100%;\n width: 100%; }\n\n.ag-group-cell-entire-row {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n display: inline-block;\n height: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n width: 100%; }\n\n.ag-footer-cell-entire-row {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n display: inline-block;\n height: 100%;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n width: 100%; }\n\n.ag-popup-editor {\n position: absolute;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none; }\n\n.ag-menu {\n max-height: 100%;\n overflow-y: auto;\n position: absolute;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none; }\n\n.ag-menu-column-select-wrapper {\n height: 300px;\n overflow: auto;\n width: 200px; }\n\n.ag-menu-list {\n border-collapse: collapse;\n display: table; }\n\n.ag-menu-option {\n display: table-row; }\n\n.ag-menu-option-text {\n display: table-cell; }\n\n.ag-menu-option-shortcut {\n display: table-cell; }\n\n.ag-menu-option-icon {\n display: table-cell; }\n\n.ag-menu-option-popup-pointer {\n display: table-cell; }\n\n.ag-menu-separator {\n display: table-row; }\n\n.ag-menu-separator-cell {\n display: table-cell; }\n\n.ag-virtual-list-viewport {\n height: 100%;\n overflow-x: auto;\n width: 100%; }\n\n.ag-virtual-list-container {\n overflow: hidden;\n position: relative; }\n\n.ag-rich-select {\n cursor: default;\n outline: none; }\n\n.ag-rich-select-row {\n white-space: nowrap; }\n\n.ag-rich-select-list {\n height: 200px;\n width: 200px; }\n\n.ag-set-filter-list {\n height: 200px;\n width: 200px; }\n\n.ag-set-filter-item {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap; }\n\n.ag-virtual-list-item {\n position: absolute;\n width: 100%; }\n .ag-virtual-list-item span:empty:not(.ag-icon) {\n border-left: 1px solid transparent; }\n\n.ag-filter-filter {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n width: 100%; }\n\n.ag-floating-filter-body input {\n height: 19px;\n margin: 0;\n width: 100%; }\n\n.ag-floating-filter-full-body input {\n height: 19px;\n margin: 0;\n width: 100%; }\n\n.ag-filter-select {\n margin: 4px 4px 0 4px;\n width: 110px; }\n\n.ag-list-selection {\n cursor: default;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none; }\n\n.ag-column-panel {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n cursor: default;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n width: 200px; }\n\n.ag-column-container {\n -webkit-box-flex: 1;\n -ms-flex-positive: 1;\n flex-grow: 1;\n height: 50px;\n overflow: auto; }\n\n.ag-column-select-indent {\n display: inline-block; }\n\n.ag-ltr .ag-column-select-column {\n margin-left: 16px; }\n\n.ag-rtl .ag-column-select-column {\n margin-right: 16px; }\n\n.ag-column-select-column,\n.ag-column-select-column-group {\n -webkit-box-align: stretch;\n -ms-flex-align: stretch;\n align-items: stretch;\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-direction: row;\n flex-direction: row;\n -ms-flex-wrap: nowrap;\n flex-wrap: nowrap;\n text-overflow: ellipsis;\n white-space: nowrap; }\n .ag-column-select-column .ag-column-select-label,\n .ag-column-select-column .ag-column-select-column-group-label,\n .ag-column-select-column-group .ag-column-select-label,\n .ag-column-select-column-group .ag-column-select-column-group-label {\n -webkit-box-flex: 1;\n -ms-flex-positive: 1;\n flex-grow: 1;\n -ms-flex-negative: 1;\n flex-shrink: 1;\n overflow: hidden;\n text-overflow: ellipsis; }\n .ag-column-select-column .ag-column-drag,\n .ag-column-select-column-group .ag-column-drag {\n min-width: 16px;\n -webkit-box-flex: 0;\n -ms-flex-positive: 0;\n flex-grow: 0;\n -ms-flex-negative: 0;\n flex-shrink: 0; }\n\n.ag-column-select-panel {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: vertical;\n -webkit-box-direction: normal;\n -ms-flex-direction: column;\n flex-direction: column;\n overflow: hidden; }\n\n.ag-tool-panel .ag-column-select-panel {\n -webkit-box-flex: 4;\n -ms-flex-positive: 4;\n flex-grow: 4; }\n\n.ag-tool-panel-horizontal-resize {\n cursor: col-resize;\n height: 100%;\n position: absolute;\n top: 0;\n width: 5px;\n z-index: 1; }\n\n.ag-rtl .ag-tool-panel-horizontal-resize {\n float: right;\n -webkit-transform: translateX(3px);\n transform: translateX(3px); }\n\n.ag-ltr .ag-tool-panel-horizontal-resize {\n float: left;\n -webkit-transform: translateX(-3px);\n transform: translateX(-3px); }\n\n.ag-menu-column-select-wrapper .ag-column-select-panel {\n height: 100%; }\n\n.ag-hidden {\n display: none !important; }\n\n.ag-visibility-hidden {\n visibility: hidden !important; }\n\n.ag-faded {\n opacity: 0.3; }\n\n.ag-width-half {\n display: inline-block;\n width: 50%; }\n\n.ag-shake-left-to-right {\n -webkit-animation-direction: alternate;\n animation-direction: alternate;\n -webkit-animation-duration: 0.2s;\n animation-duration: 0.2s;\n -webkit-animation-iteration-count: infinite;\n animation-iteration-count: infinite;\n -webkit-animation-name: ag-shake-left-to-right;\n animation-name: ag-shake-left-to-right; }\n\n@-webkit-keyframes ag-shake-left-to-right {\n from {\n padding-left: 6px;\n padding-right: 2px; }\n to {\n padding-left: 2px;\n padding-right: 6px; } }\n\n@keyframes ag-shake-left-to-right {\n from {\n padding-left: 6px;\n padding-right: 2px; }\n to {\n padding-left: 2px;\n padding-right: 6px; } }\n\n/* icons are used outside of the grid root (in the ghost) */\n.ag-icon-aggregation {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOS41IDIuNWgtNmwyIDMuNS0yIDMuNWg2IiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZT0iIzAwMCIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-arrows {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTYgNmwtMS40MSAxLjQxTDE2LjE3IDlINHYyaDEyLjE3bC0xLjU4IDEuNTlMMTYgMTRsNC00eiIvPjxwYXRoIGQ9Ik00IDZsMS40MSAxLjQxTDMuODMgOUgxNnYySDMuODNsMS41OCAxLjU5TDQgMTRsLTQtNHoiLz48cGF0aCBkPSJNNiAxNmwxLjQxLTEuNDFMOSAxNi4xN1Y0aDJ2MTIuMTdsMS41OS0xLjU4TDE0IDE2bC00IDR6Ii8+PHBhdGggZD0iTTE0IDRsLTEuNDEgMS40MUwxMSAzLjgzVjE2SDlWMy44M0w3LjQxIDUuNDEgNiA0bDQtNHoiLz48L3N2Zz4=) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-asc {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDNoMnY5SDV6Ii8+PHBhdGggZD0iTTguOTkzIDUuMlYzLjQ5M2gtNnY2SDQuN1Y1LjJoNC4yOTN6IiBpZD0iYiIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik01LjUgMy41aDF2OGgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSg0NSA1Ljk5MyA2LjQ5MykiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2IiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik04LjQ5MyA0Ljd2LS43MDdoLTV2NUg0LjJWNC43aDQuMjkzeiIvPjwvZz48L2c+PC9zdmc+) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-checkbox-checked-readonly {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjEiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjMDAwIiB4PSIuNSIgeT0iLjUiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgcng9IjEiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik05IDNMNiA4LjVsLTIuNS0yIi8+PC9nPjwvc3ZnPg==) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-checkbox-checked {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjEiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIGZpbGw9IiNGRkYiIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjMDAwIiB4PSIuNSIgeT0iLjUiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgcng9IjEiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik05IDNMNiA4LjVsLTIuNS0yIi8+PC9nPjwvc3ZnPg==) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-checkbox-indeterminate-readonly {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjEiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjMDAwIiB4PSIuNSIgeT0iLjUiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgcng9IjEiLz48cGF0aCBmaWxsPSIjMDAwIiBkPSJNNCA1aDR2Mkg0eiIvPjwvZz48L3N2Zz4=) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-checkbox-indeterminate {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjEiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIGZpbGw9IiNGRkYiIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjMDAwIiB4PSIuNSIgeT0iLjUiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgcng9IjEiLz48cGF0aCBmaWxsPSIjMDAwIiBkPSJNNCA1aDR2Mkg0eiIvPjwvZz48L3N2Zz4=) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-checkbox-unchecked-readonly {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjEiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjMDAwIiB4PSIuNSIgeT0iLjUiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgcng9IjEiLz48L2c+PC9zdmc+) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-checkbox-unchecked {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjEiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIGZpbGw9IiNGRkYiIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjMDAwIiB4PSIuNSIgeT0iLjUiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgcng9IjEiLz48L2c+PC9zdmc+) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-column {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAxaDR2Mkgxem0wIDNoNHY3SDF6IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-columns {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAxaDR2Mkgxem02IDBoNHYySDd6TTEgNWg0djJIMXptNiAwaDR2Mkg3ek0xIDloNHYySDF6bTYgMGg0djJIN3oiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-contracted {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxyZWN0IHN0cm9rZS1vcGFjaXR5PSIuNSIgc3Ryb2tlPSIjMDAwIiB4PSIxLjUiIHk9IjEuNSIgd2lkdGg9IjkiIGhlaWdodD0iOSIgcng9IjEiLz48cGF0aCBmaWxsPSIjMDAwIiBkPSJNOSA1djJIM1Y1eiIvPjwvZz48L3N2Zz4=) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-copy {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiMwMDAiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHBhdGggZD0iTTQuNSA0LjVoNXY1aC01eiIvPjxwYXRoIGQ9Ik03LjUgMi41aC01djVoMnYyaDV2LTVoLTJ2LTJ6Ii8+PC9nPjwvc3ZnPg==) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-cut {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiMwMDAiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHBhdGggZD0iTTMgMy4xMmMuNjY3LjA3OCAzIDEuNzQ1IDcgNS0uMzI2LjIwNC0uNjU5LjIwNC0xIDAtLjM0MS0uMjA2LTEuNjc0LTEuMjA2LTQtMyAwIC42NjYtLjY2Ny42NjYtMiAwLTItMS0xLTIuMTIgMC0yeiIvPjxwYXRoIGQ9Ik0zIDguMjY0Yy42NjctLjA4IDMtMS43NDYgNy01LS4zMjYtLjIwNS0uNjU5LS4yMDUtMSAwLS4zNDEuMjA0LTEuNjc0IDEuMjA0LTQgMyAwLS42NjctLjY2Ny0uNjY3LTIgMC0yIDEtMSAyLjExOSAwIDJ6Ii8+PC9nPjwvc3ZnPg==) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-desc {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDJoMnY5SDV6Ii8+PHBhdGggZD0iTTguOTkzIDYuMVY0LjM5M2gtNnY2SDQuN1Y2LjFoNC4yOTN6IiBpZD0iYiIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik01LjUgMi41aDF2OGgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtMTM1IDUuOTkzIDcuMzkzKSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjYiIvPjxwYXRoIHN0cm9rZT0iIzAwMCIgZD0iTTguNDkzIDUuNnYtLjcwN2gtNXY1SDQuMlY1LjZoNC4yOTN6Ii8+PC9nPjwvZz48L3N2Zz4=) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-expanded {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxyZWN0IHN0cm9rZS1vcGFjaXR5PSIuNSIgc3Ryb2tlPSIjMDAwIiB4PSIxLjUiIHk9IjEuNSIgd2lkdGg9IjkiIGhlaWdodD0iOSIgcng9IjEiLz48cGF0aCBmaWxsPSIjMDAwIiBkPSJNNSAzaDJ2Nkg1eiIvPjxwYXRoIGZpbGw9IiMwMDAiIGQ9Ik05IDV2MkgzVjV6Ii8+PC9nPjwvc3ZnPg==) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-eye-slash {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0zLjAwMSAzLjkwOEwzIDRhMyAzIDAgMSAwIDUuOTk5LS4wOTJBNS4yNDggNS4yNDggMCAwIDAgNiAzYy0xLjEgMC0yLjEuMzAzLTIuOTk5LjkwOHoiIGZpbGw9IiMwMDAiLz48cGF0aCBkPSJNNCA0LjVjLjY2Ny0uMzMzIDEuNjY3LS41IDMtLjUiIHN0cm9rZT0iIzk3OTc5NyIvPjxwYXRoIGQ9Ik0xIDZjMS4zMzMtMiAzLTMgNS0zczMuNjY3IDEgNSAzQzkuNjY3IDggOCA5IDYgOVMyLjMzMyA4IDEgNnoiIHN0cm9rZT0iIzAwMCIvPjxwYXRoIGQ9Ik00LjAwNCAyLjgzNWw0Ljk5MiA2LjMzIiBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiLz48cGF0aCBkPSJNMy4wMDQgMi44MzVsNC45OTIgNi4zMyIgc3Ryb2tlPSIjRkZGIiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIi8+PC9nPjwvc3ZnPg==) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-eye {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0zLjAwMSAzLjkwOEwzIDRhMyAzIDAgMSAwIDUuOTk5LS4wOTJBNS4yNDggNS4yNDggMCAwIDAgNiAzYy0xLjEgMC0yLjEuMzAzLTIuOTk5LjkwOHoiIGZpbGw9IiMwMDAiLz48cGF0aCBkPSJNNCA0LjVjLjY2Ny0uMzMzIDEuNjY3LS41IDMtLjUiIHN0cm9rZT0iIzk3OTc5NyIvPjxwYXRoIGQ9Ik0xIDZjMS4zMzMtMiAzLTMgNS0zczMuNjY3IDEgNSAzQzkuNjY3IDggOCA5IDYgOVMyLjMzMyA4IDEgNnoiIHN0cm9rZT0iIzAwMCIvPjwvZz48L3N2Zz4=) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-filter {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAyaDEwTDcgNnY1TDUgOVY2TDEgMnptNCA0djFoMlY2SDV6IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-group {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIHN0cm9rZT0iIzAwMCIgZD0iTTcuNSAxLjVoM3YyaC0zem0wIDRoM3YyaC0zem0wIDRoM3YyaC0zeiIvPjxwYXRoIGZpbGw9IiMwMDAiIGQ9Ik0yIDNoMXY4SDJ6bTEgM2g0djFIM3ptMi00aDN2MUg1eiIvPjxwYXRoIGZpbGw9IiMwMDAiIGQ9Ik0yIDEwaDV2MUgyeiIvPjxwYXRoIHN0cm9rZT0iIzAwMCIgZD0iTTEuNSAxLjVoM3YyaC0zeiIvPjwvZz48L3N2Zz4=) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-indeterminate {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0zLjA1NiA0LjU4MWEzLjAwMSAzLjAwMSAwIDAgMCA1Ljg4OCAwQzguMDU5IDQuMTk0IDcuMDc4IDQgNiA0Yy0xLjA3OCAwLTIuMDYuMTk0LTIuOTQ0LjU4MXoiIGZpbGw9IiMwMDAiLz48cGF0aCBkPSJNNCA1LjVjLjY2Ny0uMzMzIDEuNjY3LS41IDMtLjUiIHN0cm9rZT0iIzk3OTc5NyIvPjxwYXRoIGQ9Ik0xIDZjMS4zMzMtMS4zMzMgMy0yIDUtMnMzLjY2Ny42NjcgNSAyQzkuNjY3IDcuMzMzIDggOCA2IDhzLTMuNjY3LS42NjctNS0yeiIgc3Ryb2tlPSIjMDAwIi8+PC9nPjwvc3ZnPg==) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-left {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01LjUgMS41aDJ2OWgtMnoiLz48cGF0aCBkPSJNNy45OTMgNC43VjIuOTkzaC02djZIMy43VjQuN2g0LjI5M3oiIGlkPSJiIi8+PC9kZWZzPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoOTAgNi41IDYpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHBhdGggc3Ryb2tlPSIjMDAwIiBkPSJNNiAyaDF2OEg2eiIvPjwvZz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtNDUgNC45OTMgNS45OTMpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNiIi8+PHBhdGggc3Ryb2tlPSIjMDAwIiBkPSJNNy40OTMgNC4ydi0uNzA3aC01djVIMy4yVjQuMmg0LjI5M3oiLz48L2c+PC9nPjwvc3ZnPg==) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-loading {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDFoMnYzSDV6Ii8+PHBhdGggaWQ9ImIiIGQ9Ik01IDhoMnYzSDV6Ii8+PHBhdGggaWQ9ImMiIGQ9Ik0xIDVoM3YySDF6Ii8+PHBhdGggaWQ9ImQiIGQ9Ik04IDVoM3YySDh6Ii8+PHBhdGggaWQ9ImUiIGQ9Ik00IDBoMnYzSDR6Ii8+PHBhdGggaWQ9ImYiIGQ9Ik00IDdoMnYzSDR6Ii8+PHBhdGggaWQ9ImciIGQ9Ik0wIDRoM3YySDB6Ii8+PHBhdGggaWQ9ImgiIGQ9Ik03IDRoM3YySDd6Ii8+PC9kZWZzPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjYSIvPjxwYXRoIHN0cm9rZT0iIzk3OTc5NyIgZD0iTTUuNSAxLjVoMXYyaC0xeiIvPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2IiLz48cGF0aCBzdHJva2U9IiM5Nzk3OTciIGQ9Ik01LjUgOC41aDF2MmgtMXoiLz48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNjIi8+PHBhdGggc3Ryb2tlPSIjOTc5Nzk3IiBkPSJNMS41IDUuNWgydjFoLTJ6Ii8+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjZCIvPjxwYXRoIHN0cm9rZT0iIzk3OTc5NyIgZD0iTTguNSA1LjVoMnYxaC0yeiIvPjxnIG9wYWNpdHk9Ii43MTQiPjxnIHRyYW5zZm9ybT0icm90YXRlKDQ1IDQuMjkzIDYuNzA3KSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjZSIvPjxwYXRoIHN0cm9rZT0iIzk3OTc5NyIgZD0iTTQuNS41aDF2MmgtMXoiLz48L2c+PGcgdHJhbnNmb3JtPSJyb3RhdGUoNDUgNC4yOTMgNi43MDcpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNmIi8+PHBhdGggc3Ryb2tlPSIjOTc5Nzk3IiBkPSJNNC41IDcuNWgxdjJoLTF6Ii8+PC9nPjxnIHRyYW5zZm9ybT0icm90YXRlKDQ1IDQuMjkzIDYuNzA3KSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjZyIvPjxwYXRoIHN0cm9rZT0iIzk3OTc5NyIgZD0iTS41IDQuNWgydjFoLTJ6Ii8+PC9nPjxnIHRyYW5zZm9ybT0icm90YXRlKDQ1IDQuMjkzIDYuNzA3KSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjaCIvPjxwYXRoIHN0cm9rZT0iIzk3OTc5NyIgZD0iTTcuNSA0LjVoMnYxaC0yeiIvPjwvZz48L2c+PC9nPjwvc3ZnPg==) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-menu {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAxaDEwdjJIMXptMCA0aDEwdjJIMXptMCA0aDEwdjJIMXoiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-minus {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiA1aDh2MkgyeiIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-none {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDNoMnY2SDV6Ii8+PHBhdGggZD0iTTguMTQ2IDguMTgyVjYuNDc1aC01djVoMS43MDhWOC4xODJoMy4yOTJ6IiBpZD0iYiIvPjxwYXRoIGQ9Ik04LjUgMi45MTRWMS4yMDdoLTV2NWgxLjcwN1YyLjkxNEg4LjV6IiBpZD0iYyIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik01LjUgMy41aDF2NWgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtMTM1IDUuNjQ2IDguNDc1KSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjYiIvPjxwYXRoIHN0cm9rZT0iIzAwMCIgZD0iTTcuNjQ2IDcuNjgydi0uNzA3aC00djRoLjcwOFY3LjY4MmgzLjI5MnoiLz48L2c+PGcgdHJhbnNmb3JtPSJyb3RhdGUoNDUgNiAzLjcwNykiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2MiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik04IDIuNDE0di0uNzA3SDR2NGguNzA3VjIuNDE0SDh6Ii8+PC9nPjwvZz48L3N2Zz4=) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-not-allowed {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiMwMDAiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGNpcmNsZSBjeD0iNiIgY3k9IjYiIHI9IjQiLz48cGF0aCBkPSJNOC41IDMuNUwzLjQwMSA4LjU5OSIgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSIvPjwvZz48L3N2Zz4=) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-paste {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiMwMDAiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHBhdGggZD0iTTIuNSAyLjVoN3Y3aC03eiIvPjxwYXRoIGQ9Ik02LjUgMS41aC0xdjJoLTF2MWgzdi0xaC0xdi0yeiIvPjwvZz48L3N2Zz4=) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-pin {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGZpbGw9IiMwMDAiIGQ9Ik0zIDJoNnYxSDh2NGwyIDFIN2wtMSAzLTEtM0gybDItMVYzSDN6Ii8+PHBhdGggZmlsbC1vcGFjaXR5PSIuNSIgZmlsbD0iI0ZGRiIgZD0iTTUgM2gxdjRINXoiLz48cGF0aCBmaWxsLW9wYWNpdHk9Ii4yOCIgZmlsbD0iI0ZGRiIgZD0iTTQgM2gxdjNINHoiLz48L2c+PC9zdmc+) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-pivot {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiMwMDAiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHJlY3QgeD0iMS41IiB5PSIxLjUiIHdpZHRoPSI5IiBoZWlnaHQ9IjkiIHJ4PSIxIi8+PHBhdGggZD0iTTEwLjUgMy41aC05bTItMnY5IiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIi8+PHBhdGggZD0iTTcuNSA2LjVsMS0xIDEgMW0tMyAxbC0xIDEgMSAxIi8+PHBhdGggZD0iTTguNSA1LjV2M2gtMyIvPjwvZz48L3N2Zz4=) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-plus {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik01IDJoMnY4SDV6Ii8+PHBhdGggZD0iTTIgNWg4djJIMnoiLz48L2c+PC9zdmc+) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-right {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik00LjUgMS41aDJ2OWgtMnoiLz48cGF0aCBkPSJNOS45OTMgNC43VjIuOTkzaC02djZINS43VjQuN2g0LjI5M3oiIGlkPSJiIi8+PC9kZWZzPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoOTAgNS41IDYpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHBhdGggc3Ryb2tlPSIjMDAwIiBkPSJNNSAyaDF2OEg1eiIvPjwvZz48ZyB0cmFuc2Zvcm09InNjYWxlKC0xIDEpIHJvdGF0ZSgtNDUgMCAyMi44NzQpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNiIi8+PHBhdGggc3Ryb2tlPSIjMDAwIiBkPSJNOS40OTMgNC4ydi0uNzA3aC01djVINS4yVjQuMmg0LjI5M3oiLz48L2c+PC9nPjwvc3ZnPg==) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-small-left {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMyA2bDQtNHY4eiIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-small-right {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNSAybDQgNC00IDR6IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-small-up {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiA3bDQtNCA0IDR6IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-small-down {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiA1aDhMNiA5eiIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-tick {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMS41IDUuNWwzIDMgNi02IiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZT0iIzAwMCIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-cross {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiAxMGw4LThtMCA4TDIgMiIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiLz48L3N2Zz4=) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-tree-open {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiA1aDhMNiA5eiIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-tree-closed {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNSAybDQgNC00IDR6IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.ag-icon-tree-indeterminate {\n display: inline-block;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiA1aDh2MkgyeiIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+) center no-repeat;\n background-size: 12px 12px;\n -webkit-filter: \"initial\";\n filter: \"initial\";\n height: 12px;\n width: 12px; }\n\n.loading-filter {\n background-color: #e6e6e6;\n height: 100%;\n padding: 5px;\n position: absolute;\n top: 34px;\n width: 100%;\n z-index: 1; }\n\n.ag-details-row {\n height: 100%;\n width: 100%; }\n\n.ag-details-grid {\n height: 100%;\n width: 100%; }\n\n.ag-column-select-header {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: horizontal;\n -webkit-box-direction: normal;\n -ms-flex-direction: row;\n flex-direction: row; }\n\n.ag-ltr .ag-toolpanel-indent-1 {\n padding-left: 10px; }\n\n.ag-rtl .ag-toolpanel-indent-1 {\n padding-right: 10px; }\n\n.ag-ltr .ag-row-group-indent-1 {\n padding-left: 10px; }\n\n.ag-rtl .ag-row-group-indent-1 {\n padding-right: 10px; }\n\n.ag-ltr .ag-toolpanel-indent-2 {\n padding-left: 20px; }\n\n.ag-rtl .ag-toolpanel-indent-2 {\n padding-right: 20px; }\n\n.ag-ltr .ag-row-group-indent-2 {\n padding-left: 20px; }\n\n.ag-rtl .ag-row-group-indent-2 {\n padding-right: 20px; }\n\n.ag-ltr .ag-toolpanel-indent-3 {\n padding-left: 30px; }\n\n.ag-rtl .ag-toolpanel-indent-3 {\n padding-right: 30px; }\n\n.ag-ltr .ag-row-group-indent-3 {\n padding-left: 30px; }\n\n.ag-rtl .ag-row-group-indent-3 {\n padding-right: 30px; }\n\n.ag-ltr .ag-toolpanel-indent-4 {\n padding-left: 40px; }\n\n.ag-rtl .ag-toolpanel-indent-4 {\n padding-right: 40px; }\n\n.ag-ltr .ag-row-group-indent-4 {\n padding-left: 40px; }\n\n.ag-rtl .ag-row-group-indent-4 {\n padding-right: 40px; }\n\n.ag-ltr .ag-toolpanel-indent-5 {\n padding-left: 50px; }\n\n.ag-rtl .ag-toolpanel-indent-5 {\n padding-right: 50px; }\n\n.ag-ltr .ag-row-group-indent-5 {\n padding-left: 50px; }\n\n.ag-rtl .ag-row-group-indent-5 {\n padding-right: 50px; }\n\n.ag-ltr .ag-toolpanel-indent-6 {\n padding-left: 60px; }\n\n.ag-rtl .ag-toolpanel-indent-6 {\n padding-right: 60px; }\n\n.ag-ltr .ag-row-group-indent-6 {\n padding-left: 60px; }\n\n.ag-rtl .ag-row-group-indent-6 {\n padding-right: 60px; }\n\n.ag-ltr .ag-toolpanel-indent-7 {\n padding-left: 70px; }\n\n.ag-rtl .ag-toolpanel-indent-7 {\n padding-right: 70px; }\n\n.ag-ltr .ag-row-group-indent-7 {\n padding-left: 70px; }\n\n.ag-rtl .ag-row-group-indent-7 {\n padding-right: 70px; }\n\n.ag-ltr .ag-toolpanel-indent-8 {\n padding-left: 80px; }\n\n.ag-rtl .ag-toolpanel-indent-8 {\n padding-right: 80px; }\n\n.ag-ltr .ag-row-group-indent-8 {\n padding-left: 80px; }\n\n.ag-rtl .ag-row-group-indent-8 {\n padding-right: 80px; }\n\n.ag-ltr .ag-toolpanel-indent-9 {\n padding-left: 90px; }\n\n.ag-rtl .ag-toolpanel-indent-9 {\n padding-right: 90px; }\n\n.ag-ltr .ag-row-group-indent-9 {\n padding-left: 90px; }\n\n.ag-rtl .ag-row-group-indent-9 {\n padding-right: 90px; }\n\n.ag-ltr .ag-toolpanel-indent-10 {\n padding-left: 100px; }\n\n.ag-rtl .ag-toolpanel-indent-10 {\n padding-right: 100px; }\n\n.ag-ltr .ag-row-group-indent-10 {\n padding-left: 100px; }\n\n.ag-rtl .ag-row-group-indent-10 {\n padding-right: 100px; }\n\n.ag-ltr .ag-toolpanel-indent-11 {\n padding-left: 110px; }\n\n.ag-rtl .ag-toolpanel-indent-11 {\n padding-right: 110px; }\n\n.ag-ltr .ag-row-group-indent-11 {\n padding-left: 110px; }\n\n.ag-rtl .ag-row-group-indent-11 {\n padding-right: 110px; }\n\n.ag-ltr .ag-toolpanel-indent-12 {\n padding-left: 120px; }\n\n.ag-rtl .ag-toolpanel-indent-12 {\n padding-right: 120px; }\n\n.ag-ltr .ag-row-group-indent-12 {\n padding-left: 120px; }\n\n.ag-rtl .ag-row-group-indent-12 {\n padding-right: 120px; }\n\n.ag-ltr .ag-toolpanel-indent-13 {\n padding-left: 130px; }\n\n.ag-rtl .ag-toolpanel-indent-13 {\n padding-right: 130px; }\n\n.ag-ltr .ag-row-group-indent-13 {\n padding-left: 130px; }\n\n.ag-rtl .ag-row-group-indent-13 {\n padding-right: 130px; }\n\n.ag-ltr .ag-toolpanel-indent-14 {\n padding-left: 140px; }\n\n.ag-rtl .ag-toolpanel-indent-14 {\n padding-right: 140px; }\n\n.ag-ltr .ag-row-group-indent-14 {\n padding-left: 140px; }\n\n.ag-rtl .ag-row-group-indent-14 {\n padding-right: 140px; }\n\n.ag-ltr .ag-toolpanel-indent-15 {\n padding-left: 150px; }\n\n.ag-rtl .ag-toolpanel-indent-15 {\n padding-right: 150px; }\n\n.ag-ltr .ag-row-group-indent-15 {\n padding-left: 150px; }\n\n.ag-rtl .ag-row-group-indent-15 {\n padding-right: 150px; }\n\n.ag-ltr .ag-toolpanel-indent-16 {\n padding-left: 160px; }\n\n.ag-rtl .ag-toolpanel-indent-16 {\n padding-right: 160px; }\n\n.ag-ltr .ag-row-group-indent-16 {\n padding-left: 160px; }\n\n.ag-rtl .ag-row-group-indent-16 {\n padding-right: 160px; }\n\n.ag-ltr .ag-toolpanel-indent-17 {\n padding-left: 170px; }\n\n.ag-rtl .ag-toolpanel-indent-17 {\n padding-right: 170px; }\n\n.ag-ltr .ag-row-group-indent-17 {\n padding-left: 170px; }\n\n.ag-rtl .ag-row-group-indent-17 {\n padding-right: 170px; }\n\n.ag-ltr .ag-toolpanel-indent-18 {\n padding-left: 180px; }\n\n.ag-rtl .ag-toolpanel-indent-18 {\n padding-right: 180px; }\n\n.ag-ltr .ag-row-group-indent-18 {\n padding-left: 180px; }\n\n.ag-rtl .ag-row-group-indent-18 {\n padding-right: 180px; }\n\n.ag-ltr .ag-toolpanel-indent-19 {\n padding-left: 190px; }\n\n.ag-rtl .ag-toolpanel-indent-19 {\n padding-right: 190px; }\n\n.ag-ltr .ag-row-group-indent-19 {\n padding-left: 190px; }\n\n.ag-rtl .ag-row-group-indent-19 {\n padding-right: 190px; }\n\n.ag-ltr .ag-toolpanel-indent-20 {\n padding-left: 200px; }\n\n.ag-rtl .ag-toolpanel-indent-20 {\n padding-right: 200px; }\n\n.ag-ltr .ag-row-group-indent-20 {\n padding-left: 200px; }\n\n.ag-rtl .ag-row-group-indent-20 {\n padding-right: 200px; }\n\n.ag-ltr .ag-toolpanel-indent-21 {\n padding-left: 210px; }\n\n.ag-rtl .ag-toolpanel-indent-21 {\n padding-right: 210px; }\n\n.ag-ltr .ag-row-group-indent-21 {\n padding-left: 210px; }\n\n.ag-rtl .ag-row-group-indent-21 {\n padding-right: 210px; }\n\n.ag-ltr .ag-toolpanel-indent-22 {\n padding-left: 220px; }\n\n.ag-rtl .ag-toolpanel-indent-22 {\n padding-right: 220px; }\n\n.ag-ltr .ag-row-group-indent-22 {\n padding-left: 220px; }\n\n.ag-rtl .ag-row-group-indent-22 {\n padding-right: 220px; }\n\n.ag-ltr .ag-toolpanel-indent-23 {\n padding-left: 230px; }\n\n.ag-rtl .ag-toolpanel-indent-23 {\n padding-right: 230px; }\n\n.ag-ltr .ag-row-group-indent-23 {\n padding-left: 230px; }\n\n.ag-rtl .ag-row-group-indent-23 {\n padding-right: 230px; }\n\n.ag-ltr .ag-toolpanel-indent-24 {\n padding-left: 240px; }\n\n.ag-rtl .ag-toolpanel-indent-24 {\n padding-right: 240px; }\n\n.ag-ltr .ag-row-group-indent-24 {\n padding-left: 240px; }\n\n.ag-rtl .ag-row-group-indent-24 {\n padding-right: 240px; }\n\n.ag-ltr .ag-toolpanel-indent-25 {\n padding-left: 250px; }\n\n.ag-rtl .ag-toolpanel-indent-25 {\n padding-right: 250px; }\n\n.ag-ltr .ag-row-group-indent-25 {\n padding-left: 250px; }\n\n.ag-rtl .ag-row-group-indent-25 {\n padding-right: 250px; }\n\n.ag-ltr .ag-toolpanel-indent-26 {\n padding-left: 260px; }\n\n.ag-rtl .ag-toolpanel-indent-26 {\n padding-right: 260px; }\n\n.ag-ltr .ag-row-group-indent-26 {\n padding-left: 260px; }\n\n.ag-rtl .ag-row-group-indent-26 {\n padding-right: 260px; }\n\n.ag-ltr .ag-toolpanel-indent-27 {\n padding-left: 270px; }\n\n.ag-rtl .ag-toolpanel-indent-27 {\n padding-right: 270px; }\n\n.ag-ltr .ag-row-group-indent-27 {\n padding-left: 270px; }\n\n.ag-rtl .ag-row-group-indent-27 {\n padding-right: 270px; }\n\n.ag-ltr .ag-toolpanel-indent-28 {\n padding-left: 280px; }\n\n.ag-rtl .ag-toolpanel-indent-28 {\n padding-right: 280px; }\n\n.ag-ltr .ag-row-group-indent-28 {\n padding-left: 280px; }\n\n.ag-rtl .ag-row-group-indent-28 {\n padding-right: 280px; }\n\n.ag-ltr .ag-toolpanel-indent-29 {\n padding-left: 290px; }\n\n.ag-rtl .ag-toolpanel-indent-29 {\n padding-right: 290px; }\n\n.ag-ltr .ag-row-group-indent-29 {\n padding-left: 290px; }\n\n.ag-rtl .ag-row-group-indent-29 {\n padding-right: 290px; }\n\n.ag-ltr .ag-toolpanel-indent-30 {\n padding-left: 300px; }\n\n.ag-rtl .ag-toolpanel-indent-30 {\n padding-right: 300px; }\n\n.ag-ltr .ag-row-group-indent-30 {\n padding-left: 300px; }\n\n.ag-rtl .ag-row-group-indent-30 {\n padding-right: 300px; }\n\n.ag-ltr .ag-toolpanel-indent-31 {\n padding-left: 310px; }\n\n.ag-rtl .ag-toolpanel-indent-31 {\n padding-right: 310px; }\n\n.ag-ltr .ag-row-group-indent-31 {\n padding-left: 310px; }\n\n.ag-rtl .ag-row-group-indent-31 {\n padding-right: 310px; }\n\n.ag-ltr .ag-toolpanel-indent-32 {\n padding-left: 320px; }\n\n.ag-rtl .ag-toolpanel-indent-32 {\n padding-right: 320px; }\n\n.ag-ltr .ag-row-group-indent-32 {\n padding-left: 320px; }\n\n.ag-rtl .ag-row-group-indent-32 {\n padding-right: 320px; }\n\n.ag-ltr .ag-toolpanel-indent-33 {\n padding-left: 330px; }\n\n.ag-rtl .ag-toolpanel-indent-33 {\n padding-right: 330px; }\n\n.ag-ltr .ag-row-group-indent-33 {\n padding-left: 330px; }\n\n.ag-rtl .ag-row-group-indent-33 {\n padding-right: 330px; }\n\n.ag-ltr .ag-toolpanel-indent-34 {\n padding-left: 340px; }\n\n.ag-rtl .ag-toolpanel-indent-34 {\n padding-right: 340px; }\n\n.ag-ltr .ag-row-group-indent-34 {\n padding-left: 340px; }\n\n.ag-rtl .ag-row-group-indent-34 {\n padding-right: 340px; }\n\n.ag-ltr .ag-toolpanel-indent-35 {\n padding-left: 350px; }\n\n.ag-rtl .ag-toolpanel-indent-35 {\n padding-right: 350px; }\n\n.ag-ltr .ag-row-group-indent-35 {\n padding-left: 350px; }\n\n.ag-rtl .ag-row-group-indent-35 {\n padding-right: 350px; }\n\n.ag-ltr .ag-toolpanel-indent-36 {\n padding-left: 360px; }\n\n.ag-rtl .ag-toolpanel-indent-36 {\n padding-right: 360px; }\n\n.ag-ltr .ag-row-group-indent-36 {\n padding-left: 360px; }\n\n.ag-rtl .ag-row-group-indent-36 {\n padding-right: 360px; }\n\n.ag-ltr .ag-toolpanel-indent-37 {\n padding-left: 370px; }\n\n.ag-rtl .ag-toolpanel-indent-37 {\n padding-right: 370px; }\n\n.ag-ltr .ag-row-group-indent-37 {\n padding-left: 370px; }\n\n.ag-rtl .ag-row-group-indent-37 {\n padding-right: 370px; }\n\n.ag-ltr .ag-toolpanel-indent-38 {\n padding-left: 380px; }\n\n.ag-rtl .ag-toolpanel-indent-38 {\n padding-right: 380px; }\n\n.ag-ltr .ag-row-group-indent-38 {\n padding-left: 380px; }\n\n.ag-rtl .ag-row-group-indent-38 {\n padding-right: 380px; }\n\n.ag-ltr .ag-toolpanel-indent-39 {\n padding-left: 390px; }\n\n.ag-rtl .ag-toolpanel-indent-39 {\n padding-right: 390px; }\n\n.ag-ltr .ag-row-group-indent-39 {\n padding-left: 390px; }\n\n.ag-rtl .ag-row-group-indent-39 {\n padding-right: 390px; }\n\n.ag-ltr .ag-toolpanel-indent-40 {\n padding-left: 400px; }\n\n.ag-rtl .ag-toolpanel-indent-40 {\n padding-right: 400px; }\n\n.ag-ltr .ag-row-group-indent-40 {\n padding-left: 400px; }\n\n.ag-rtl .ag-row-group-indent-40 {\n padding-right: 400px; }\n\n.ag-ltr .ag-toolpanel-indent-41 {\n padding-left: 410px; }\n\n.ag-rtl .ag-toolpanel-indent-41 {\n padding-right: 410px; }\n\n.ag-ltr .ag-row-group-indent-41 {\n padding-left: 410px; }\n\n.ag-rtl .ag-row-group-indent-41 {\n padding-right: 410px; }\n\n.ag-ltr .ag-toolpanel-indent-42 {\n padding-left: 420px; }\n\n.ag-rtl .ag-toolpanel-indent-42 {\n padding-right: 420px; }\n\n.ag-ltr .ag-row-group-indent-42 {\n padding-left: 420px; }\n\n.ag-rtl .ag-row-group-indent-42 {\n padding-right: 420px; }\n\n.ag-ltr .ag-toolpanel-indent-43 {\n padding-left: 430px; }\n\n.ag-rtl .ag-toolpanel-indent-43 {\n padding-right: 430px; }\n\n.ag-ltr .ag-row-group-indent-43 {\n padding-left: 430px; }\n\n.ag-rtl .ag-row-group-indent-43 {\n padding-right: 430px; }\n\n.ag-ltr .ag-toolpanel-indent-44 {\n padding-left: 440px; }\n\n.ag-rtl .ag-toolpanel-indent-44 {\n padding-right: 440px; }\n\n.ag-ltr .ag-row-group-indent-44 {\n padding-left: 440px; }\n\n.ag-rtl .ag-row-group-indent-44 {\n padding-right: 440px; }\n\n.ag-ltr .ag-toolpanel-indent-45 {\n padding-left: 450px; }\n\n.ag-rtl .ag-toolpanel-indent-45 {\n padding-right: 450px; }\n\n.ag-ltr .ag-row-group-indent-45 {\n padding-left: 450px; }\n\n.ag-rtl .ag-row-group-indent-45 {\n padding-right: 450px; }\n\n.ag-ltr .ag-toolpanel-indent-46 {\n padding-left: 460px; }\n\n.ag-rtl .ag-toolpanel-indent-46 {\n padding-right: 460px; }\n\n.ag-ltr .ag-row-group-indent-46 {\n padding-left: 460px; }\n\n.ag-rtl .ag-row-group-indent-46 {\n padding-right: 460px; }\n\n.ag-ltr .ag-toolpanel-indent-47 {\n padding-left: 470px; }\n\n.ag-rtl .ag-toolpanel-indent-47 {\n padding-right: 470px; }\n\n.ag-ltr .ag-row-group-indent-47 {\n padding-left: 470px; }\n\n.ag-rtl .ag-row-group-indent-47 {\n padding-right: 470px; }\n\n.ag-ltr .ag-toolpanel-indent-48 {\n padding-left: 480px; }\n\n.ag-rtl .ag-toolpanel-indent-48 {\n padding-right: 480px; }\n\n.ag-ltr .ag-row-group-indent-48 {\n padding-left: 480px; }\n\n.ag-rtl .ag-row-group-indent-48 {\n padding-right: 480px; }\n\n.ag-ltr .ag-toolpanel-indent-49 {\n padding-left: 490px; }\n\n.ag-rtl .ag-toolpanel-indent-49 {\n padding-right: 490px; }\n\n.ag-ltr .ag-row-group-indent-49 {\n padding-left: 490px; }\n\n.ag-rtl .ag-row-group-indent-49 {\n padding-right: 490px; }\n\n.ag-tool-panel {\n display: -webkit-box;\n display: -ms-flexbox;\n display: flex;\n -webkit-box-orient: horizontal;\n -webkit-box-direction: reverse;\n -ms-flex-direction: row-reverse;\n flex-direction: row-reverse;\n -webkit-box-sizing: border-box;\n box-sizing: border-box; }\n .ag-tool-panel .ag-side-buttons {\n width: 20px; }\n .ag-tool-panel .ag-side-buttons button {\n display: block;\n -webkit-transform: rotate(90deg) translateY(-20px);\n transform: rotate(90deg) translateY(-20px);\n -webkit-transform-origin: left top 0;\n transform-origin: left top 0;\n white-space: nowrap;\n outline: none; }\n .ag-tool-panel .panel-container {\n width: 180px; }\n .ag-tool-panel.full-width .panel-container {\n width: 200px; }\n\n.ag-rtl .ag-tool-panel .ag-side-buttons button {\n -webkit-transform: rotate(-90deg) translatex(20px);\n transform: rotate(-90deg) translatex(20px);\n -webkit-transform-origin: right bottom 0;\n transform-origin: right bottom 0; }\n\n.ag-row-inline-editing {\n z-index: 1; }\n", ""]);
36391
36392// exports
36393
36394
36395/***/ }),
36396/* 151 */
36397/***/ (function(module, exports, __webpack_require__) {
36398
36399// style-loader: Adds some css to the DOM by adding a <style> tag
36400
36401// load the styles
36402var content = __webpack_require__(152);
36403if(typeof content === 'string') content = [[module.i, content, '']];
36404// add the styles to the DOM
36405var update = __webpack_require__(15)(content, {});
36406if(content.locals) module.exports = content.locals;
36407// Hot Module Replacement
36408if(false) {
36409 // When the styles change, update the <style> tags
36410 if(!content.locals) {
36411 module.hot.accept("!!../../node_modules/css-loader/index.js!./theme-blue.css", function() {
36412 var newContent = require("!!../../node_modules/css-loader/index.js!./theme-blue.css");
36413 if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
36414 update(newContent);
36415 });
36416 }
36417 // When the module is disposed, remove the <style> tags
36418 module.hot.dispose(function() { update(); });
36419}
36420
36421/***/ }),
36422/* 152 */
36423/***/ (function(module, exports, __webpack_require__) {
36424
36425exports = module.exports = __webpack_require__(14)();
36426// imports
36427
36428
36429// module
36430exports.push([module.i, "/*\n- todo {\n- loading overlay colors {\n- rich select colors {\n */\n.ag-icon:not(.ag-faded) {\n opacity: 0.8; }\n\n.ag-blue {\n line-height: 1.4;\n font-family: Calibri, \"Segoe UI\", Thonburi, Arial, Verdana, sans-serif;\n font-size: 10pt;\n color: #222;\n /* this is for the rowGroupPanel, that appears along the top of the grid */\n /* this is for the column drops that appear in the toolPanel */ }\n .ag-blue .ag-numeric-cell {\n text-align: right; }\n .ag-blue .ag-header-cell-label {\n display: flex; }\n .ag-blue .ag-header-cell-label > span {\n float: left; }\n .ag-blue .ag-header-cell-label .ag-header-icon {\n margin-top: 2px; }\n .ag-blue .ag-header-cell-label .ag-header-cell-text {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis; }\n .ag-blue .ag-numeric-header .ag-header-cell-label {\n flex-direction: row-reverse; }\n .ag-blue .ag-numeric-header .ag-header-cell-menu-button {\n float: left; }\n .ag-blue .ag-numeric-header .ag-header-cell-label {\n width: calc(100% - 12px);\n float: right; }\n .ag-blue .ag-numeric-header .ag-header-cell-label > span {\n float: right; }\n .ag-blue .ag-header-cell-resize {\n position: absolute;\n right: 0; }\n .ag-blue .ag-rtl .ag-header-cell-resize {\n position: absolute;\n left: 0;\n right: auto; }\n .ag-blue img {\n vertical-align: middle;\n border: 0; }\n .ag-blue .ag-root {\n border: 1px solid #9bc2e6; }\n .ag-blue .ag-cell-data-changed {\n background-color: #cec; }\n .ag-blue .ag-cell-data-changed-animation {\n background-color: transparent;\n transition: background-color 1s; }\n .ag-blue .ag-cell-not-inline-editing {\n padding: 2px;\n /* compensate for the transparent borders; */\n padding-left: 1px; }\n .ag-blue .ag-cell-range-selected-1:not(.ag-cell-focus) {\n background-color: rgba(120, 120, 120, 0.4); }\n .ag-blue .ag-cell-range-selected-2:not(.ag-cell-focus) {\n background-color: rgba(80, 80, 80, 0.4); }\n .ag-blue .ag-cell-range-selected-3:not(.ag-cell-focus) {\n background-color: rgba(40, 40, 40, 0.4); }\n .ag-blue .ag-cell-range-selected-4:not(.ag-cell-focus) {\n background-color: rgba(0, 0, 0, 0.4); }\n .ag-blue .ag-cell-focus {\n border: 2px solid #217346; }\n .ag-blue .ag-cell-no-focus {\n border-top: 2px solid transparent;\n border-bottom: 1px dotted #9bc2e6; }\n .ag-blue .ag-ltr .ag-cell-no-focus {\n border-right: 1px dotted #9bc2e6;\n border-left: 2px solid transparent; }\n .ag-blue .ag-rtl .ag-cell-no-focus {\n border-right: 2px solid transparent;\n border-left: 1px dotted #9bc2e6; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-1 {\n padding-left: 10px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-1 {\n padding-right: 10px; }\n .ag-blue .ag-ltr .ag-row-group-indent-1 {\n padding-left: 10px; }\n .ag-blue .ag-rtl .ag-row-group-indent-1 {\n padding-right: 10px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-2 {\n padding-left: 20px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-2 {\n padding-right: 20px; }\n .ag-blue .ag-ltr .ag-row-group-indent-2 {\n padding-left: 20px; }\n .ag-blue .ag-rtl .ag-row-group-indent-2 {\n padding-right: 20px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-3 {\n padding-left: 30px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-3 {\n padding-right: 30px; }\n .ag-blue .ag-ltr .ag-row-group-indent-3 {\n padding-left: 30px; }\n .ag-blue .ag-rtl .ag-row-group-indent-3 {\n padding-right: 30px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-4 {\n padding-left: 40px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-4 {\n padding-right: 40px; }\n .ag-blue .ag-ltr .ag-row-group-indent-4 {\n padding-left: 40px; }\n .ag-blue .ag-rtl .ag-row-group-indent-4 {\n padding-right: 40px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-5 {\n padding-left: 50px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-5 {\n padding-right: 50px; }\n .ag-blue .ag-ltr .ag-row-group-indent-5 {\n padding-left: 50px; }\n .ag-blue .ag-rtl .ag-row-group-indent-5 {\n padding-right: 50px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-6 {\n padding-left: 60px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-6 {\n padding-right: 60px; }\n .ag-blue .ag-ltr .ag-row-group-indent-6 {\n padding-left: 60px; }\n .ag-blue .ag-rtl .ag-row-group-indent-6 {\n padding-right: 60px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-7 {\n padding-left: 70px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-7 {\n padding-right: 70px; }\n .ag-blue .ag-ltr .ag-row-group-indent-7 {\n padding-left: 70px; }\n .ag-blue .ag-rtl .ag-row-group-indent-7 {\n padding-right: 70px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-8 {\n padding-left: 80px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-8 {\n padding-right: 80px; }\n .ag-blue .ag-ltr .ag-row-group-indent-8 {\n padding-left: 80px; }\n .ag-blue .ag-rtl .ag-row-group-indent-8 {\n padding-right: 80px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-9 {\n padding-left: 90px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-9 {\n padding-right: 90px; }\n .ag-blue .ag-ltr .ag-row-group-indent-9 {\n padding-left: 90px; }\n .ag-blue .ag-rtl .ag-row-group-indent-9 {\n padding-right: 90px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-10 {\n padding-left: 100px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-10 {\n padding-right: 100px; }\n .ag-blue .ag-ltr .ag-row-group-indent-10 {\n padding-left: 100px; }\n .ag-blue .ag-rtl .ag-row-group-indent-10 {\n padding-right: 100px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-11 {\n padding-left: 110px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-11 {\n padding-right: 110px; }\n .ag-blue .ag-ltr .ag-row-group-indent-11 {\n padding-left: 110px; }\n .ag-blue .ag-rtl .ag-row-group-indent-11 {\n padding-right: 110px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-12 {\n padding-left: 120px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-12 {\n padding-right: 120px; }\n .ag-blue .ag-ltr .ag-row-group-indent-12 {\n padding-left: 120px; }\n .ag-blue .ag-rtl .ag-row-group-indent-12 {\n padding-right: 120px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-13 {\n padding-left: 130px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-13 {\n padding-right: 130px; }\n .ag-blue .ag-ltr .ag-row-group-indent-13 {\n padding-left: 130px; }\n .ag-blue .ag-rtl .ag-row-group-indent-13 {\n padding-right: 130px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-14 {\n padding-left: 140px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-14 {\n padding-right: 140px; }\n .ag-blue .ag-ltr .ag-row-group-indent-14 {\n padding-left: 140px; }\n .ag-blue .ag-rtl .ag-row-group-indent-14 {\n padding-right: 140px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-15 {\n padding-left: 150px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-15 {\n padding-right: 150px; }\n .ag-blue .ag-ltr .ag-row-group-indent-15 {\n padding-left: 150px; }\n .ag-blue .ag-rtl .ag-row-group-indent-15 {\n padding-right: 150px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-16 {\n padding-left: 160px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-16 {\n padding-right: 160px; }\n .ag-blue .ag-ltr .ag-row-group-indent-16 {\n padding-left: 160px; }\n .ag-blue .ag-rtl .ag-row-group-indent-16 {\n padding-right: 160px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-17 {\n padding-left: 170px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-17 {\n padding-right: 170px; }\n .ag-blue .ag-ltr .ag-row-group-indent-17 {\n padding-left: 170px; }\n .ag-blue .ag-rtl .ag-row-group-indent-17 {\n padding-right: 170px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-18 {\n padding-left: 180px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-18 {\n padding-right: 180px; }\n .ag-blue .ag-ltr .ag-row-group-indent-18 {\n padding-left: 180px; }\n .ag-blue .ag-rtl .ag-row-group-indent-18 {\n padding-right: 180px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-19 {\n padding-left: 190px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-19 {\n padding-right: 190px; }\n .ag-blue .ag-ltr .ag-row-group-indent-19 {\n padding-left: 190px; }\n .ag-blue .ag-rtl .ag-row-group-indent-19 {\n padding-right: 190px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-20 {\n padding-left: 200px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-20 {\n padding-right: 200px; }\n .ag-blue .ag-ltr .ag-row-group-indent-20 {\n padding-left: 200px; }\n .ag-blue .ag-rtl .ag-row-group-indent-20 {\n padding-right: 200px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-21 {\n padding-left: 210px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-21 {\n padding-right: 210px; }\n .ag-blue .ag-ltr .ag-row-group-indent-21 {\n padding-left: 210px; }\n .ag-blue .ag-rtl .ag-row-group-indent-21 {\n padding-right: 210px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-22 {\n padding-left: 220px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-22 {\n padding-right: 220px; }\n .ag-blue .ag-ltr .ag-row-group-indent-22 {\n padding-left: 220px; }\n .ag-blue .ag-rtl .ag-row-group-indent-22 {\n padding-right: 220px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-23 {\n padding-left: 230px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-23 {\n padding-right: 230px; }\n .ag-blue .ag-ltr .ag-row-group-indent-23 {\n padding-left: 230px; }\n .ag-blue .ag-rtl .ag-row-group-indent-23 {\n padding-right: 230px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-24 {\n padding-left: 240px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-24 {\n padding-right: 240px; }\n .ag-blue .ag-ltr .ag-row-group-indent-24 {\n padding-left: 240px; }\n .ag-blue .ag-rtl .ag-row-group-indent-24 {\n padding-right: 240px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-25 {\n padding-left: 250px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-25 {\n padding-right: 250px; }\n .ag-blue .ag-ltr .ag-row-group-indent-25 {\n padding-left: 250px; }\n .ag-blue .ag-rtl .ag-row-group-indent-25 {\n padding-right: 250px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-26 {\n padding-left: 260px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-26 {\n padding-right: 260px; }\n .ag-blue .ag-ltr .ag-row-group-indent-26 {\n padding-left: 260px; }\n .ag-blue .ag-rtl .ag-row-group-indent-26 {\n padding-right: 260px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-27 {\n padding-left: 270px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-27 {\n padding-right: 270px; }\n .ag-blue .ag-ltr .ag-row-group-indent-27 {\n padding-left: 270px; }\n .ag-blue .ag-rtl .ag-row-group-indent-27 {\n padding-right: 270px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-28 {\n padding-left: 280px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-28 {\n padding-right: 280px; }\n .ag-blue .ag-ltr .ag-row-group-indent-28 {\n padding-left: 280px; }\n .ag-blue .ag-rtl .ag-row-group-indent-28 {\n padding-right: 280px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-29 {\n padding-left: 290px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-29 {\n padding-right: 290px; }\n .ag-blue .ag-ltr .ag-row-group-indent-29 {\n padding-left: 290px; }\n .ag-blue .ag-rtl .ag-row-group-indent-29 {\n padding-right: 290px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-30 {\n padding-left: 300px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-30 {\n padding-right: 300px; }\n .ag-blue .ag-ltr .ag-row-group-indent-30 {\n padding-left: 300px; }\n .ag-blue .ag-rtl .ag-row-group-indent-30 {\n padding-right: 300px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-31 {\n padding-left: 310px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-31 {\n padding-right: 310px; }\n .ag-blue .ag-ltr .ag-row-group-indent-31 {\n padding-left: 310px; }\n .ag-blue .ag-rtl .ag-row-group-indent-31 {\n padding-right: 310px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-32 {\n padding-left: 320px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-32 {\n padding-right: 320px; }\n .ag-blue .ag-ltr .ag-row-group-indent-32 {\n padding-left: 320px; }\n .ag-blue .ag-rtl .ag-row-group-indent-32 {\n padding-right: 320px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-33 {\n padding-left: 330px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-33 {\n padding-right: 330px; }\n .ag-blue .ag-ltr .ag-row-group-indent-33 {\n padding-left: 330px; }\n .ag-blue .ag-rtl .ag-row-group-indent-33 {\n padding-right: 330px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-34 {\n padding-left: 340px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-34 {\n padding-right: 340px; }\n .ag-blue .ag-ltr .ag-row-group-indent-34 {\n padding-left: 340px; }\n .ag-blue .ag-rtl .ag-row-group-indent-34 {\n padding-right: 340px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-35 {\n padding-left: 350px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-35 {\n padding-right: 350px; }\n .ag-blue .ag-ltr .ag-row-group-indent-35 {\n padding-left: 350px; }\n .ag-blue .ag-rtl .ag-row-group-indent-35 {\n padding-right: 350px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-36 {\n padding-left: 360px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-36 {\n padding-right: 360px; }\n .ag-blue .ag-ltr .ag-row-group-indent-36 {\n padding-left: 360px; }\n .ag-blue .ag-rtl .ag-row-group-indent-36 {\n padding-right: 360px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-37 {\n padding-left: 370px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-37 {\n padding-right: 370px; }\n .ag-blue .ag-ltr .ag-row-group-indent-37 {\n padding-left: 370px; }\n .ag-blue .ag-rtl .ag-row-group-indent-37 {\n padding-right: 370px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-38 {\n padding-left: 380px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-38 {\n padding-right: 380px; }\n .ag-blue .ag-ltr .ag-row-group-indent-38 {\n padding-left: 380px; }\n .ag-blue .ag-rtl .ag-row-group-indent-38 {\n padding-right: 380px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-39 {\n padding-left: 390px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-39 {\n padding-right: 390px; }\n .ag-blue .ag-ltr .ag-row-group-indent-39 {\n padding-left: 390px; }\n .ag-blue .ag-rtl .ag-row-group-indent-39 {\n padding-right: 390px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-40 {\n padding-left: 400px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-40 {\n padding-right: 400px; }\n .ag-blue .ag-ltr .ag-row-group-indent-40 {\n padding-left: 400px; }\n .ag-blue .ag-rtl .ag-row-group-indent-40 {\n padding-right: 400px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-41 {\n padding-left: 410px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-41 {\n padding-right: 410px; }\n .ag-blue .ag-ltr .ag-row-group-indent-41 {\n padding-left: 410px; }\n .ag-blue .ag-rtl .ag-row-group-indent-41 {\n padding-right: 410px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-42 {\n padding-left: 420px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-42 {\n padding-right: 420px; }\n .ag-blue .ag-ltr .ag-row-group-indent-42 {\n padding-left: 420px; }\n .ag-blue .ag-rtl .ag-row-group-indent-42 {\n padding-right: 420px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-43 {\n padding-left: 430px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-43 {\n padding-right: 430px; }\n .ag-blue .ag-ltr .ag-row-group-indent-43 {\n padding-left: 430px; }\n .ag-blue .ag-rtl .ag-row-group-indent-43 {\n padding-right: 430px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-44 {\n padding-left: 440px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-44 {\n padding-right: 440px; }\n .ag-blue .ag-ltr .ag-row-group-indent-44 {\n padding-left: 440px; }\n .ag-blue .ag-rtl .ag-row-group-indent-44 {\n padding-right: 440px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-45 {\n padding-left: 450px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-45 {\n padding-right: 450px; }\n .ag-blue .ag-ltr .ag-row-group-indent-45 {\n padding-left: 450px; }\n .ag-blue .ag-rtl .ag-row-group-indent-45 {\n padding-right: 450px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-46 {\n padding-left: 460px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-46 {\n padding-right: 460px; }\n .ag-blue .ag-ltr .ag-row-group-indent-46 {\n padding-left: 460px; }\n .ag-blue .ag-rtl .ag-row-group-indent-46 {\n padding-right: 460px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-47 {\n padding-left: 470px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-47 {\n padding-right: 470px; }\n .ag-blue .ag-ltr .ag-row-group-indent-47 {\n padding-left: 470px; }\n .ag-blue .ag-rtl .ag-row-group-indent-47 {\n padding-right: 470px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-48 {\n padding-left: 480px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-48 {\n padding-right: 480px; }\n .ag-blue .ag-ltr .ag-row-group-indent-48 {\n padding-left: 480px; }\n .ag-blue .ag-rtl .ag-row-group-indent-48 {\n padding-right: 480px; }\n .ag-blue .ag-ltr .ag-toolpanel-indent-49 {\n padding-left: 490px; }\n .ag-blue .ag-rtl .ag-toolpanel-indent-49 {\n padding-right: 490px; }\n .ag-blue .ag-ltr .ag-row-group-indent-49 {\n padding-left: 490px; }\n .ag-blue .ag-rtl .ag-row-group-indent-49 {\n padding-right: 490px; }\n .ag-blue .ag-rtl .ag-cell-first-right-pinned {\n border-left: 1px solid #9bc2e6; }\n .ag-blue .ag-ltr .ag-cell-first-right-pinned {\n border-left: 1px solid #9bc2e6; }\n .ag-blue .ag-rtl .ag-cell-last-left-pinned {\n border-right: 1px solid #9bc2e6; }\n .ag-blue .ag-ltr .ag-cell-last-left-pinned {\n border-right: 1px solid #9bc2e6; }\n .ag-blue .ag-cell-highlight {\n border: 1px solid darkgreen; }\n .ag-blue .ag-cell-highlight-animation {\n transition: border 1s; }\n .ag-blue .ag-value-change-delta {\n padding-right: 2px; }\n .ag-blue .ag-value-change-delta-up {\n color: darkgreen; }\n .ag-blue .ag-value-change-delta-down {\n color: darkred; }\n .ag-blue .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 .ag-blue .ag-value-change-value-highlight {\n background-color: #cec;\n transition: background-color 0.1s; }\n .ag-blue .ag-rich-select {\n font-size: 14px;\n border: 1px solid #9bc2e6;\n background-color: white; }\n .ag-blue .ag-rich-select-value {\n padding: 2px; }\n .ag-blue .ag-rich-select-list {\n border-top: 1px solid #d3d3d3; }\n .ag-blue .ag-rich-select-row {\n padding: 2px; }\n .ag-blue .ag-rich-select-row-selected {\n background-color: #c7c7c7; }\n .ag-blue .ag-large-text {\n border: 1px solid #9bc2e6; }\n .ag-blue .ag-header-select-all,\n .ag-blue .ag-header-cell-menu-button {\n margin-top: 3px;\n line-height: 1rem; }\n .ag-blue .ag-header-select-all {\n padding-right: 4px; }\n .ag-blue .ag-filter-header-container > label {\n margin-bottom: 0; }\n .ag-blue .ag-header-cell {\n padding: 2px;\n padding-top: 4px; }\n .ag-blue .ag-header {\n color: #fff;\n background: #5b9bd5;\n border-bottom: 1px solid #9bc2e6;\n font-weight: 600; }\n .ag-blue .ag-header-icon {\n color: #fff;\n stroke: none;\n fill: #fff; }\n .ag-blue .ag-filter-icon {\n display: inline-block; }\n .ag-blue .ag-sort-ascending-icon:empty {\n display: inline-block;\n width: 12px;\n height: 12px;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDNoMnY5SDV6Ii8+PHBhdGggZD0iTTguOTkzIDUuMlYzLjQ5M2gtNnY2SDQuN1Y1LjJoNC4yOTN6IiBpZD0iYiIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik01LjUgMy41aDF2OGgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSg0NSA1Ljk5MyA2LjQ5MykiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2IiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik04LjQ5MyA0Ljd2LS43MDdoLTV2NUg0LjJWNC43aDQuMjkzeiIvPjwvZz48L2c+PC9zdmc+) center no-repeat;\n background-size: 12px 12px;\n filter: \"initial\"; }\n .ag-blue .ag-sort-descending-icon:empty {\n display: inline-block;\n width: 12px;\n height: 12px;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDJoMnY5SDV6Ii8+PHBhdGggZD0iTTguOTkzIDYuMVY0LjM5M2gtNnY2SDQuN1Y2LjFoNC4yOTN6IiBpZD0iYiIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik01LjUgMi41aDF2OGgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtMTM1IDUuOTkzIDcuMzkzKSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjYiIvPjxwYXRoIHN0cm9rZT0iIzAwMCIgZD0iTTguNDkzIDUuNnYtLjcwN2gtNXY1SDQuMlY1LjZoNC4yOTN6Ii8+PC9nPjwvZz48L3N2Zz4=) center no-repeat;\n background-size: 12px 12px;\n filter: \"initial\"; }\n .ag-blue .ag-sort-none-icon:empty {\n display: inline-block;\n width: 12px;\n height: 12px;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDNoMnY2SDV6Ii8+PHBhdGggZD0iTTguMTQ2IDguMTgyVjYuNDc1aC01djVoMS43MDhWOC4xODJoMy4yOTJ6IiBpZD0iYiIvPjxwYXRoIGQ9Ik04LjUgMi45MTRWMS4yMDdoLTV2NWgxLjcwN1YyLjkxNEg4LjV6IiBpZD0iYyIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik01LjUgMy41aDF2NWgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtMTM1IDUuNjQ2IDguNDc1KSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjYiIvPjxwYXRoIHN0cm9rZT0iIzAwMCIgZD0iTTcuNjQ2IDcuNjgydi0uNzA3aC00djRoLjcwOFY3LjY4MmgzLjI5MnoiLz48L2c+PGcgdHJhbnNmb3JtPSJyb3RhdGUoNDUgNiAzLjcwNykiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2MiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik04IDIuNDE0di0uNzA3SDR2NGguNzA3VjIuNDE0SDh6Ii8+PC9nPjwvZz48L3N2Zz4=) center no-repeat;\n background-size: 12px 12px;\n filter: \"initial\"; }\n .ag-blue .ag-layout-for-print .ag-header-container {\n background: #5b9bd5;\n border-bottom: 1px solid #9bc2e6; }\n .ag-blue .ag-ltr .ag-header-cell {\n border-right: 1px solid #9bc2e6; }\n .ag-blue .ag-rtl .ag-header-cell {\n border-left: 1px solid #9bc2e6; }\n .ag-blue .ag-header-cell-moving .ag-header-cell-label {\n opacity: 0.5; }\n .ag-blue .ag-header-cell-moving {\n background-color: #bebebe; }\n .ag-blue .ag-ltr .ag-header-group-cell {\n border-right: 1px solid #9bc2e6; }\n .ag-blue .ag-rtl .ag-header-group-cell {\n border-left: 1px solid #9bc2e6; }\n .ag-blue .ag-header-group-cell-with-group {\n border-bottom: 1px solid #9bc2e6; }\n .ag-blue .ag-header-group-cell-label {\n padding: 2px;\n padding-top: 4px; }\n .ag-blue .ag-rtl .ag-header-group-text {\n margin-left: 2px; }\n .ag-blue .ag-ltr .ag-header-group-text {\n margin-right: 2px; }\n .ag-blue .ag-header-cell-menu-button:empty {\n width: 12px;\n height: 12px;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAxaDEwdjJIMXptMCA0aDEwdjJIMXptMCA0aDEwdjJIMXoiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat;\n background-size: 12px 12px;\n filter: \"initial\"; }\n .ag-blue .ag-ltr .ag-pinned-right-header {\n border-left: 1px solid #9bc2e6; }\n .ag-blue .ag-rtl .ag-pinned-left-header {\n border-right: 1px solid #9bc2e6; }\n .ag-blue .ag-body {\n background-color: #f6f6f6; }\n .ag-blue .ag-row-odd {\n background-color: #ddebf7; }\n .ag-blue .ag-row-even {\n background-color: #fff; }\n .ag-blue .ag-row-selected {\n background-color: #c7c7c7; }\n .ag-blue .ag-row-stub {\n background-color: #f0f0f0; }\n .ag-blue .ag-stub-cell {\n padding: 2px 2px 2px 10px; }\n .ag-blue .ag-floating-top {\n background-color: #f0f0f0; }\n .ag-blue .ag-floating-top .ag-row {\n background-color: #f0f0f0; }\n .ag-blue .ag-floating-bottom {\n background-color: #f0f0f0; }\n .ag-blue .ag-floating-bottom .ag-row {\n background-color: #f0f0f0; }\n .ag-blue .ag-overlay-loading-wrapper {\n background-color: rgba(255, 255, 255, 0.5); }\n .ag-blue .ag-overlay-loading-center {\n background-color: #ffffff;\n border: 1px solid #9bc2e6;\n border-radius: 10px;\n padding: 10px;\n color: black; }\n .ag-blue .ag-overlay-no-rows-center {\n background-color: #ffffff;\n border: 1px solid #9bc2e6;\n border-radius: 10px;\n padding: 10px; }\n .ag-blue .ag-group-cell-entire-row {\n background-color: #f6f6f6;\n padding: 2px; }\n .ag-blue .ag-footer-cell-entire-row {\n background-color: #f6f6f6;\n padding: 2px; }\n .ag-blue .ag-group-cell {\n font-style: italic; }\n .ag-blue .ag-ltr .ag-group-expanded {\n padding-right: 4px; }\n .ag-blue .ag-rtl .ag-group-expanded {\n padding-left: 4px; }\n .ag-blue .ag-ltr .ag-group-contracted {\n padding-right: 4px; }\n .ag-blue .ag-rtl .ag-group-contracted {\n padding-left: 4px; }\n .ag-blue .ag-ltr .ag-group-loading {\n padding-right: 4px; }\n .ag-blue .ag-rtl .ag-group-loading {\n padding-left: 4px; }\n .ag-blue .ag-ltr .ag-group-value {\n padding-right: 2px; }\n .ag-blue .ag-rtl .ag-group-value {\n padding-left: 2px; }\n .ag-blue .ag-ltr .ag-group-checkbox {\n padding-right: 2px; }\n .ag-blue .ag-rtl .ag-group-checkbox {\n padding-left: 2px; }\n .ag-blue .ag-group-child-count {\n /* display: inline-block; */ }\n .ag-blue .ag-footer-cell {\n font-style: italic; }\n .ag-blue .ag-menu {\n border: 1px solid #808080;\n background-color: #f6f6f6;\n cursor: default;\n font-family: Calibri, \"Segoe UI\", Thonburi, Arial, Verdana, sans-serif;\n font-size: 10pt; }\n .ag-blue .ag-menu .ag-tab-header {\n background-color: #5b9bd5; }\n .ag-blue .ag-menu .ag-tab {\n padding: 6px 8px 6px 8px;\n margin: 2px 2px 0px 2px;\n display: inline-block;\n border-right: 1px solid transparent;\n border-left: 1px solid transparent;\n border-top: 1px solid transparent;\n border-top-right-radius: 2px;\n border-top-left-radius: 2px; }\n .ag-blue .ag-menu .ag-tab-selected {\n background-color: #9bc2e6;\n border-right: 1px solid #d3d3d3;\n border-left: 1px solid #d3d3d3;\n border-top: 1px solid #d3d3d3; }\n .ag-blue .ag-menu-separator {\n border-top: 1px solid #d3d3d3; }\n .ag-blue .ag-menu-option-active {\n background-color: #c7c7c7; }\n .ag-blue .ag-menu-option-icon {\n padding: 2px 4px 2px 4px;\n vertical-align: middle; }\n .ag-blue .ag-menu-option-text {\n padding: 2px 4px 2px 4px;\n vertical-align: middle; }\n .ag-blue .ag-menu-option-shortcut {\n padding: 2px 2px 2px 2px;\n vertical-align: middle; }\n .ag-blue .ag-menu-option-popup-pointer {\n padding: 2px 4px 2px 4px;\n vertical-align: middle;\n display: table-cell; }\n .ag-blue .ag-menu-option-disabled {\n opacity: 0.5; }\n .ag-blue .ag-menu-column-select-wrapper {\n margin: 2px; }\n .ag-blue .ag-filter-checkbox {\n margin-right: 4px;\n margin-bottom: 0;\n display: inline-block; }\n .ag-blue .ag-filter-header-container {\n padding: 2px 4px 2px 4px;\n border-bottom: 1px solid #d3d3d3; }\n .ag-blue .ag-filter-apply-panel {\n border-top: 1px solid #d3d3d3;\n padding: 2px 0px 2px 4px; }\n .ag-blue .ag-virtual-list-container {\n padding: 4px 4px 10px 4px; }\n .ag-blue .ag-ltr .ag-selection-checkbox {\n padding-right: 4px; }\n .ag-blue .ag-rtl .ag-selection-checkbox {\n padding-left: 4px; }\n .ag-blue .ag-paging-panel {\n padding: 4px; }\n .ag-blue .ag-paging-button {\n margin-left: 4px;\n margin-right: 4px; }\n .ag-blue .ag-paging-row-summary-panel {\n display: inline-block;\n width: 300px; }\n .ag-blue .ag-column-panel {\n background-color: #f6f6f6;\n border-bottom: 1px solid #9bc2e6;\n border-top: 1px solid #9bc2e6;\n color: #222; }\n .ag-blue .ltr .ag-column-panel {\n border-right: 1px solid #9bc2e6; }\n .ag-blue .rtl .ag-column-panel {\n border-left: 1px solid #9bc2e6; }\n .ag-blue .ag-status-bar {\n color: #222;\n background-color: #f6f6f6;\n font-size: 10pt;\n height: 22px;\n border-bottom: 1px solid #9bc2e6;\n border-left: 1px solid #9bc2e6;\n border-right: 1px solid #9bc2e6;\n padding: 2px; }\n .ag-blue .ag-status-bar-aggregations {\n float: right; }\n .ag-blue .ag-status-bar-item {\n padding-left: 10px; }\n .ag-blue .ag-column-drop-cell {\n background: #ddebf7;\n color: #000;\n border: 1px solid #808080; }\n .ag-blue .ag-column-drop-cell-ghost {\n opacity: 0.5; }\n .ag-blue .ag-column-drop-cell-text {\n padding-left: 2px;\n padding-right: 2px; }\n .ag-blue .ag-column-drop-cell-button {\n border: 1px solid transparent;\n padding-left: 2px;\n padding-right: 2px;\n border-radius: 3px; }\n .ag-blue .ag-column-drop-cell-button:hover {\n border: 1px solid #9bc2e6; }\n .ag-blue .ag-column-drop-empty-message {\n padding-left: 2px;\n padding-right: 2px;\n color: grey; }\n .ag-blue .ag-column-drop-icon {\n margin: 6px 3px 0px 3px; }\n .ag-blue .ag-column-drop {\n background-color: #f6f6f6; }\n .ag-blue .ag-column-drop-horizontal {\n padding: 2px;\n border-top: 1px solid #9bc2e6;\n border-left: 1px solid #9bc2e6;\n border-right: 1px solid #9bc2e6; }\n .ag-blue .ag-column-drop-vertical {\n padding: 4px 4px 10px 4px;\n border-bottom: 1px solid #9bc2e6;\n overflow: auto; }\n .ag-blue .ag-column-drop-vertical .ag-column-drop-cell {\n margin-top: 2px; }\n .ag-blue .ag-column-drop-vertical .ag-column-drop-empty-message {\n padding: 5px; }\n .ag-blue .ag-pivot-mode {\n border-bottom: 1px solid #9bc2e6;\n padding: 2px 4px 3px 4px;\n background-color: #f6f6f6; }\n .ag-blue .ag-column-panel .ag-column-select-panel {\n padding: 4px 4px 10px 4px;\n padding-left: 0;\n border-bottom: 1px solid #9bc2e6;\n overflow: auto; }\n .ag-blue .ag-select-agg-func-popup {\n cursor: default;\n position: absolute;\n font-size: 14px;\n background-color: white;\n border: 1px solid #9bc2e6; }\n .ag-blue .ag-select-agg-func-item {\n padding-left: 2px;\n padding-right: 2px; }\n .ag-blue .ag-select-agg-func-item:hover {\n background-color: #c7c7c7; }\n .ag-blue .ag-floating-filter-body {\n margin-right: 20px;\n width: calc(100% - 20px); }\n .ag-blue .ag-floating-filter-button {\n margin-top: -20px;\n display: inline-block;\n float: right; }\n .ag-blue .ag-floating-filter-button button {\n border: 0;\n background: transparent;\n padding: 3px;\n margin: 0; }\n .ag-blue .ag-rtl .ag-floating-filter-body {\n margin-right: 0;\n margin-left: 20px;\n float: right; }\n .ag-blue .ag-rtl .ag-floating-filter-button {\n float: left; }\n .ag-blue .ag-sort-order {\n margin-left: 0.5em;\n font-size: 0.8em; }\n .ag-blue .ag-sort-order::before {\n content: \"(\"; }\n .ag-blue .ag-sort-order::after {\n content: \")\"; }\n .ag-blue .ag-details-row {\n padding: 20px;\n box-sizing: border-box; }\n\n.ag-blue .ag-floating-filter-body input {\n background-color: white;\n color: #222; }\n .ag-blue .ag-floating-filter-body input[readonly] {\n background: rgba(255, 255, 255, 0.3); }\n\n.ag-blue .ag-header .ag-icon-asc,\n.ag-blue .ag-header .ag-icon-desc,\n.ag-blue .ag-header .ag-icon-expanded,\n.ag-blue .ag-header .ag-icon-contracted,\n.ag-blue .ag-header .ag-icon-menu,\n.ag-blue .ag-header .ag-icon-filter {\n -webkit-filter: invert(100%);\n filter: invert(100%); }\n\n.ag-blue .ag-tab-header .ag-icon {\n -webkit-filter: invert(100%);\n filter: invert(100%); }\n", ""]);
36431
36432// exports
36433
36434
36435/***/ }),
36436/* 153 */
36437/***/ (function(module, exports, __webpack_require__) {
36438
36439// style-loader: Adds some css to the DOM by adding a <style> tag
36440
36441// load the styles
36442var content = __webpack_require__(154);
36443if(typeof content === 'string') content = [[module.i, content, '']];
36444// add the styles to the DOM
36445var update = __webpack_require__(15)(content, {});
36446if(content.locals) module.exports = content.locals;
36447// Hot Module Replacement
36448if(false) {
36449 // When the styles change, update the <style> tags
36450 if(!content.locals) {
36451 module.hot.accept("!!../../node_modules/css-loader/index.js!./theme-dark.css", function() {
36452 var newContent = require("!!../../node_modules/css-loader/index.js!./theme-dark.css");
36453 if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
36454 update(newContent);
36455 });
36456 }
36457 // When the module is disposed, remove the <style> tags
36458 module.hot.dispose(function() { update(); });
36459}
36460
36461/***/ }),
36462/* 154 */
36463/***/ (function(module, exports, __webpack_require__) {
36464
36465exports = module.exports = __webpack_require__(14)();
36466// imports
36467
36468
36469// module
36470exports.push([module.i, "/*\n- todo {\n- loading overlay colors {\n- rich select colors {\n */\n.ag-icon:not(.ag-faded) {\n opacity: 0.8; }\n\n.ag-dark {\n line-height: 1.4;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n color: #ccc;\n /* this is for the rowGroupPanel, that appears along the top of the grid */\n /* this is for the column drops that appear in the toolPanel */ }\n .ag-dark .ag-numeric-cell {\n text-align: right; }\n .ag-dark .ag-header-cell-label {\n display: flex; }\n .ag-dark .ag-header-cell-label > span {\n float: left; }\n .ag-dark .ag-header-cell-label .ag-header-icon {\n margin-top: 2px; }\n .ag-dark .ag-header-cell-label .ag-header-cell-text {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis; }\n .ag-dark .ag-numeric-header .ag-header-cell-label {\n flex-direction: row-reverse; }\n .ag-dark .ag-numeric-header .ag-header-cell-menu-button {\n float: left; }\n .ag-dark .ag-numeric-header .ag-header-cell-label {\n width: calc(100% - 12px);\n float: right; }\n .ag-dark .ag-numeric-header .ag-header-cell-label > span {\n float: right; }\n .ag-dark .ag-header-cell-resize {\n position: absolute;\n right: 0; }\n .ag-dark .ag-rtl .ag-header-cell-resize {\n position: absolute;\n left: 0;\n right: auto; }\n .ag-dark img {\n vertical-align: middle;\n border: 0; }\n .ag-dark .ag-root {\n border: 1px solid grey; }\n .ag-dark .ag-cell-data-changed {\n background-color: chocolate; }\n .ag-dark .ag-cell-data-changed-animation {\n background-color: transparent;\n transition: background-color 1s; }\n .ag-dark .ag-cell-not-inline-editing {\n padding: 2px;\n /* compensate for the transparent borders; */\n padding-left: 1px; }\n .ag-dark .ag-cell-range-selected-1:not(.ag-cell-focus) {\n background-color: rgba(100, 160, 160, 0.4); }\n .ag-dark .ag-cell-range-selected-2:not(.ag-cell-focus) {\n background-color: rgba(100, 190, 190, 0.4); }\n .ag-dark .ag-cell-range-selected-3:not(.ag-cell-focus) {\n background-color: rgba(100, 220, 220, 0.4); }\n .ag-dark .ag-cell-range-selected-4:not(.ag-cell-focus) {\n background-color: rgba(100, 250, 250, 0.4); }\n .ag-dark .ag-cell-focus {\n border: 1px solid darkgrey; }\n .ag-dark .ag-cell-no-focus {\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent; }\n .ag-dark .ag-ltr .ag-cell-no-focus {\n border-right: 1px dotted grey;\n border-left: 1px solid transparent; }\n .ag-dark .ag-rtl .ag-cell-no-focus {\n border-right: 1px solid transparent;\n border-left: 1px dotted grey; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-1 {\n padding-left: 10px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-1 {\n padding-right: 10px; }\n .ag-dark .ag-ltr .ag-row-group-indent-1 {\n padding-left: 10px; }\n .ag-dark .ag-rtl .ag-row-group-indent-1 {\n padding-right: 10px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-2 {\n padding-left: 20px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-2 {\n padding-right: 20px; }\n .ag-dark .ag-ltr .ag-row-group-indent-2 {\n padding-left: 20px; }\n .ag-dark .ag-rtl .ag-row-group-indent-2 {\n padding-right: 20px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-3 {\n padding-left: 30px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-3 {\n padding-right: 30px; }\n .ag-dark .ag-ltr .ag-row-group-indent-3 {\n padding-left: 30px; }\n .ag-dark .ag-rtl .ag-row-group-indent-3 {\n padding-right: 30px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-4 {\n padding-left: 40px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-4 {\n padding-right: 40px; }\n .ag-dark .ag-ltr .ag-row-group-indent-4 {\n padding-left: 40px; }\n .ag-dark .ag-rtl .ag-row-group-indent-4 {\n padding-right: 40px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-5 {\n padding-left: 50px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-5 {\n padding-right: 50px; }\n .ag-dark .ag-ltr .ag-row-group-indent-5 {\n padding-left: 50px; }\n .ag-dark .ag-rtl .ag-row-group-indent-5 {\n padding-right: 50px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-6 {\n padding-left: 60px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-6 {\n padding-right: 60px; }\n .ag-dark .ag-ltr .ag-row-group-indent-6 {\n padding-left: 60px; }\n .ag-dark .ag-rtl .ag-row-group-indent-6 {\n padding-right: 60px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-7 {\n padding-left: 70px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-7 {\n padding-right: 70px; }\n .ag-dark .ag-ltr .ag-row-group-indent-7 {\n padding-left: 70px; }\n .ag-dark .ag-rtl .ag-row-group-indent-7 {\n padding-right: 70px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-8 {\n padding-left: 80px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-8 {\n padding-right: 80px; }\n .ag-dark .ag-ltr .ag-row-group-indent-8 {\n padding-left: 80px; }\n .ag-dark .ag-rtl .ag-row-group-indent-8 {\n padding-right: 80px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-9 {\n padding-left: 90px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-9 {\n padding-right: 90px; }\n .ag-dark .ag-ltr .ag-row-group-indent-9 {\n padding-left: 90px; }\n .ag-dark .ag-rtl .ag-row-group-indent-9 {\n padding-right: 90px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-10 {\n padding-left: 100px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-10 {\n padding-right: 100px; }\n .ag-dark .ag-ltr .ag-row-group-indent-10 {\n padding-left: 100px; }\n .ag-dark .ag-rtl .ag-row-group-indent-10 {\n padding-right: 100px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-11 {\n padding-left: 110px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-11 {\n padding-right: 110px; }\n .ag-dark .ag-ltr .ag-row-group-indent-11 {\n padding-left: 110px; }\n .ag-dark .ag-rtl .ag-row-group-indent-11 {\n padding-right: 110px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-12 {\n padding-left: 120px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-12 {\n padding-right: 120px; }\n .ag-dark .ag-ltr .ag-row-group-indent-12 {\n padding-left: 120px; }\n .ag-dark .ag-rtl .ag-row-group-indent-12 {\n padding-right: 120px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-13 {\n padding-left: 130px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-13 {\n padding-right: 130px; }\n .ag-dark .ag-ltr .ag-row-group-indent-13 {\n padding-left: 130px; }\n .ag-dark .ag-rtl .ag-row-group-indent-13 {\n padding-right: 130px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-14 {\n padding-left: 140px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-14 {\n padding-right: 140px; }\n .ag-dark .ag-ltr .ag-row-group-indent-14 {\n padding-left: 140px; }\n .ag-dark .ag-rtl .ag-row-group-indent-14 {\n padding-right: 140px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-15 {\n padding-left: 150px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-15 {\n padding-right: 150px; }\n .ag-dark .ag-ltr .ag-row-group-indent-15 {\n padding-left: 150px; }\n .ag-dark .ag-rtl .ag-row-group-indent-15 {\n padding-right: 150px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-16 {\n padding-left: 160px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-16 {\n padding-right: 160px; }\n .ag-dark .ag-ltr .ag-row-group-indent-16 {\n padding-left: 160px; }\n .ag-dark .ag-rtl .ag-row-group-indent-16 {\n padding-right: 160px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-17 {\n padding-left: 170px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-17 {\n padding-right: 170px; }\n .ag-dark .ag-ltr .ag-row-group-indent-17 {\n padding-left: 170px; }\n .ag-dark .ag-rtl .ag-row-group-indent-17 {\n padding-right: 170px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-18 {\n padding-left: 180px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-18 {\n padding-right: 180px; }\n .ag-dark .ag-ltr .ag-row-group-indent-18 {\n padding-left: 180px; }\n .ag-dark .ag-rtl .ag-row-group-indent-18 {\n padding-right: 180px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-19 {\n padding-left: 190px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-19 {\n padding-right: 190px; }\n .ag-dark .ag-ltr .ag-row-group-indent-19 {\n padding-left: 190px; }\n .ag-dark .ag-rtl .ag-row-group-indent-19 {\n padding-right: 190px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-20 {\n padding-left: 200px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-20 {\n padding-right: 200px; }\n .ag-dark .ag-ltr .ag-row-group-indent-20 {\n padding-left: 200px; }\n .ag-dark .ag-rtl .ag-row-group-indent-20 {\n padding-right: 200px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-21 {\n padding-left: 210px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-21 {\n padding-right: 210px; }\n .ag-dark .ag-ltr .ag-row-group-indent-21 {\n padding-left: 210px; }\n .ag-dark .ag-rtl .ag-row-group-indent-21 {\n padding-right: 210px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-22 {\n padding-left: 220px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-22 {\n padding-right: 220px; }\n .ag-dark .ag-ltr .ag-row-group-indent-22 {\n padding-left: 220px; }\n .ag-dark .ag-rtl .ag-row-group-indent-22 {\n padding-right: 220px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-23 {\n padding-left: 230px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-23 {\n padding-right: 230px; }\n .ag-dark .ag-ltr .ag-row-group-indent-23 {\n padding-left: 230px; }\n .ag-dark .ag-rtl .ag-row-group-indent-23 {\n padding-right: 230px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-24 {\n padding-left: 240px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-24 {\n padding-right: 240px; }\n .ag-dark .ag-ltr .ag-row-group-indent-24 {\n padding-left: 240px; }\n .ag-dark .ag-rtl .ag-row-group-indent-24 {\n padding-right: 240px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-25 {\n padding-left: 250px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-25 {\n padding-right: 250px; }\n .ag-dark .ag-ltr .ag-row-group-indent-25 {\n padding-left: 250px; }\n .ag-dark .ag-rtl .ag-row-group-indent-25 {\n padding-right: 250px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-26 {\n padding-left: 260px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-26 {\n padding-right: 260px; }\n .ag-dark .ag-ltr .ag-row-group-indent-26 {\n padding-left: 260px; }\n .ag-dark .ag-rtl .ag-row-group-indent-26 {\n padding-right: 260px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-27 {\n padding-left: 270px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-27 {\n padding-right: 270px; }\n .ag-dark .ag-ltr .ag-row-group-indent-27 {\n padding-left: 270px; }\n .ag-dark .ag-rtl .ag-row-group-indent-27 {\n padding-right: 270px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-28 {\n padding-left: 280px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-28 {\n padding-right: 280px; }\n .ag-dark .ag-ltr .ag-row-group-indent-28 {\n padding-left: 280px; }\n .ag-dark .ag-rtl .ag-row-group-indent-28 {\n padding-right: 280px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-29 {\n padding-left: 290px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-29 {\n padding-right: 290px; }\n .ag-dark .ag-ltr .ag-row-group-indent-29 {\n padding-left: 290px; }\n .ag-dark .ag-rtl .ag-row-group-indent-29 {\n padding-right: 290px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-30 {\n padding-left: 300px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-30 {\n padding-right: 300px; }\n .ag-dark .ag-ltr .ag-row-group-indent-30 {\n padding-left: 300px; }\n .ag-dark .ag-rtl .ag-row-group-indent-30 {\n padding-right: 300px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-31 {\n padding-left: 310px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-31 {\n padding-right: 310px; }\n .ag-dark .ag-ltr .ag-row-group-indent-31 {\n padding-left: 310px; }\n .ag-dark .ag-rtl .ag-row-group-indent-31 {\n padding-right: 310px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-32 {\n padding-left: 320px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-32 {\n padding-right: 320px; }\n .ag-dark .ag-ltr .ag-row-group-indent-32 {\n padding-left: 320px; }\n .ag-dark .ag-rtl .ag-row-group-indent-32 {\n padding-right: 320px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-33 {\n padding-left: 330px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-33 {\n padding-right: 330px; }\n .ag-dark .ag-ltr .ag-row-group-indent-33 {\n padding-left: 330px; }\n .ag-dark .ag-rtl .ag-row-group-indent-33 {\n padding-right: 330px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-34 {\n padding-left: 340px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-34 {\n padding-right: 340px; }\n .ag-dark .ag-ltr .ag-row-group-indent-34 {\n padding-left: 340px; }\n .ag-dark .ag-rtl .ag-row-group-indent-34 {\n padding-right: 340px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-35 {\n padding-left: 350px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-35 {\n padding-right: 350px; }\n .ag-dark .ag-ltr .ag-row-group-indent-35 {\n padding-left: 350px; }\n .ag-dark .ag-rtl .ag-row-group-indent-35 {\n padding-right: 350px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-36 {\n padding-left: 360px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-36 {\n padding-right: 360px; }\n .ag-dark .ag-ltr .ag-row-group-indent-36 {\n padding-left: 360px; }\n .ag-dark .ag-rtl .ag-row-group-indent-36 {\n padding-right: 360px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-37 {\n padding-left: 370px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-37 {\n padding-right: 370px; }\n .ag-dark .ag-ltr .ag-row-group-indent-37 {\n padding-left: 370px; }\n .ag-dark .ag-rtl .ag-row-group-indent-37 {\n padding-right: 370px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-38 {\n padding-left: 380px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-38 {\n padding-right: 380px; }\n .ag-dark .ag-ltr .ag-row-group-indent-38 {\n padding-left: 380px; }\n .ag-dark .ag-rtl .ag-row-group-indent-38 {\n padding-right: 380px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-39 {\n padding-left: 390px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-39 {\n padding-right: 390px; }\n .ag-dark .ag-ltr .ag-row-group-indent-39 {\n padding-left: 390px; }\n .ag-dark .ag-rtl .ag-row-group-indent-39 {\n padding-right: 390px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-40 {\n padding-left: 400px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-40 {\n padding-right: 400px; }\n .ag-dark .ag-ltr .ag-row-group-indent-40 {\n padding-left: 400px; }\n .ag-dark .ag-rtl .ag-row-group-indent-40 {\n padding-right: 400px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-41 {\n padding-left: 410px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-41 {\n padding-right: 410px; }\n .ag-dark .ag-ltr .ag-row-group-indent-41 {\n padding-left: 410px; }\n .ag-dark .ag-rtl .ag-row-group-indent-41 {\n padding-right: 410px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-42 {\n padding-left: 420px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-42 {\n padding-right: 420px; }\n .ag-dark .ag-ltr .ag-row-group-indent-42 {\n padding-left: 420px; }\n .ag-dark .ag-rtl .ag-row-group-indent-42 {\n padding-right: 420px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-43 {\n padding-left: 430px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-43 {\n padding-right: 430px; }\n .ag-dark .ag-ltr .ag-row-group-indent-43 {\n padding-left: 430px; }\n .ag-dark .ag-rtl .ag-row-group-indent-43 {\n padding-right: 430px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-44 {\n padding-left: 440px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-44 {\n padding-right: 440px; }\n .ag-dark .ag-ltr .ag-row-group-indent-44 {\n padding-left: 440px; }\n .ag-dark .ag-rtl .ag-row-group-indent-44 {\n padding-right: 440px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-45 {\n padding-left: 450px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-45 {\n padding-right: 450px; }\n .ag-dark .ag-ltr .ag-row-group-indent-45 {\n padding-left: 450px; }\n .ag-dark .ag-rtl .ag-row-group-indent-45 {\n padding-right: 450px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-46 {\n padding-left: 460px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-46 {\n padding-right: 460px; }\n .ag-dark .ag-ltr .ag-row-group-indent-46 {\n padding-left: 460px; }\n .ag-dark .ag-rtl .ag-row-group-indent-46 {\n padding-right: 460px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-47 {\n padding-left: 470px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-47 {\n padding-right: 470px; }\n .ag-dark .ag-ltr .ag-row-group-indent-47 {\n padding-left: 470px; }\n .ag-dark .ag-rtl .ag-row-group-indent-47 {\n padding-right: 470px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-48 {\n padding-left: 480px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-48 {\n padding-right: 480px; }\n .ag-dark .ag-ltr .ag-row-group-indent-48 {\n padding-left: 480px; }\n .ag-dark .ag-rtl .ag-row-group-indent-48 {\n padding-right: 480px; }\n .ag-dark .ag-ltr .ag-toolpanel-indent-49 {\n padding-left: 490px; }\n .ag-dark .ag-rtl .ag-toolpanel-indent-49 {\n padding-right: 490px; }\n .ag-dark .ag-ltr .ag-row-group-indent-49 {\n padding-left: 490px; }\n .ag-dark .ag-rtl .ag-row-group-indent-49 {\n padding-right: 490px; }\n .ag-dark .ag-rtl .ag-cell-first-right-pinned {\n border-left: 1px solid grey; }\n .ag-dark .ag-ltr .ag-cell-first-right-pinned {\n border-left: 1px solid grey; }\n .ag-dark .ag-rtl .ag-cell-last-left-pinned {\n border-right: 1px solid grey; }\n .ag-dark .ag-ltr .ag-cell-last-left-pinned {\n border-right: 1px solid grey; }\n .ag-dark .ag-cell-highlight {\n border: 1px solid lightgreen; }\n .ag-dark .ag-cell-highlight-animation {\n transition: border 1s; }\n .ag-dark .ag-value-change-delta {\n padding-right: 2px; }\n .ag-dark .ag-value-change-delta-up {\n color: greenyellow; }\n .ag-dark .ag-value-change-delta-down {\n color: red; }\n .ag-dark .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 .ag-dark .ag-value-change-value-highlight {\n background-color: chocolate;\n transition: background-color 0.1s; }\n .ag-dark .ag-rich-select {\n font-size: 14px;\n border: 1px solid grey;\n background-color: #302E2E; }\n .ag-dark .ag-rich-select-value {\n padding: 2px; }\n .ag-dark .ag-rich-select-list {\n border-top: 1px solid #555; }\n .ag-dark .ag-rich-select-row {\n padding: 2px; }\n .ag-dark .ag-rich-select-row-selected {\n background-color: #4A708B; }\n .ag-dark .ag-large-text {\n border: 1px solid grey; }\n .ag-dark .ag-header-select-all,\n .ag-dark .ag-header-cell-menu-button {\n margin-top: 3px;\n line-height: 1rem; }\n .ag-dark .ag-header-select-all {\n padding-right: 4px; }\n .ag-dark .ag-filter-header-container > label {\n margin-bottom: 0; }\n .ag-dark .ag-header-cell {\n padding: 2px;\n padding-top: 4px; }\n .ag-dark .ag-header {\n color: #e0e0e0;\n background: #626262;\n border-bottom: 1px solid grey;\n font-weight: normal; }\n .ag-dark .ag-header-icon {\n color: #e0e0e0;\n stroke: none;\n fill: #e0e0e0; }\n .ag-dark .ag-filter-icon {\n display: inline-block; }\n .ag-dark .ag-sort-ascending-icon:empty {\n display: inline-block;\n width: 12px;\n height: 12px;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDNoMnY5SDV6Ii8+PHBhdGggZD0iTTguOTkzIDUuMlYzLjQ5M2gtNnY2SDQuN1Y1LjJoNC4yOTN6IiBpZD0iYiIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik01LjUgMy41aDF2OGgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSg0NSA1Ljk5MyA2LjQ5MykiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2IiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik04LjQ5MyA0Ljd2LS43MDdoLTV2NUg0LjJWNC43aDQuMjkzeiIvPjwvZz48L2c+PC9zdmc+) center no-repeat;\n background-size: 12px 12px;\n filter: invert(100%); }\n .ag-dark .ag-sort-descending-icon:empty {\n display: inline-block;\n width: 12px;\n height: 12px;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDJoMnY5SDV6Ii8+PHBhdGggZD0iTTguOTkzIDYuMVY0LjM5M2gtNnY2SDQuN1Y2LjFoNC4yOTN6IiBpZD0iYiIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik01LjUgMi41aDF2OGgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtMTM1IDUuOTkzIDcuMzkzKSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjYiIvPjxwYXRoIHN0cm9rZT0iIzAwMCIgZD0iTTguNDkzIDUuNnYtLjcwN2gtNXY1SDQuMlY1LjZoNC4yOTN6Ii8+PC9nPjwvZz48L3N2Zz4=) center no-repeat;\n background-size: 12px 12px;\n filter: invert(100%); }\n .ag-dark .ag-sort-none-icon:empty {\n display: inline-block;\n width: 12px;\n height: 12px;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDNoMnY2SDV6Ii8+PHBhdGggZD0iTTguMTQ2IDguMTgyVjYuNDc1aC01djVoMS43MDhWOC4xODJoMy4yOTJ6IiBpZD0iYiIvPjxwYXRoIGQ9Ik04LjUgMi45MTRWMS4yMDdoLTV2NWgxLjcwN1YyLjkxNEg4LjV6IiBpZD0iYyIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik01LjUgMy41aDF2NWgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtMTM1IDUuNjQ2IDguNDc1KSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjYiIvPjxwYXRoIHN0cm9rZT0iIzAwMCIgZD0iTTcuNjQ2IDcuNjgydi0uNzA3aC00djRoLjcwOFY3LjY4MmgzLjI5MnoiLz48L2c+PGcgdHJhbnNmb3JtPSJyb3RhdGUoNDUgNiAzLjcwNykiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2MiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik04IDIuNDE0di0uNzA3SDR2NGguNzA3VjIuNDE0SDh6Ii8+PC9nPjwvZz48L3N2Zz4=) center no-repeat;\n background-size: 12px 12px;\n filter: invert(100%); }\n .ag-dark .ag-layout-for-print .ag-header-container {\n background: #626262;\n border-bottom: 1px solid grey; }\n .ag-dark .ag-ltr .ag-header-cell {\n border-right: 1px solid grey; }\n .ag-dark .ag-rtl .ag-header-cell {\n border-left: 1px solid grey; }\n .ag-dark .ag-header-cell-moving .ag-header-cell-label {\n opacity: 0.5; }\n .ag-dark .ag-header-cell-moving {\n background-color: #bebebe; }\n .ag-dark .ag-ltr .ag-header-group-cell {\n border-right: 1px solid grey; }\n .ag-dark .ag-rtl .ag-header-group-cell {\n border-left: 1px solid grey; }\n .ag-dark .ag-header-group-cell-with-group {\n border-bottom: 1px solid grey; }\n .ag-dark .ag-header-group-cell-label {\n padding: 2px;\n padding-top: 4px; }\n .ag-dark .ag-rtl .ag-header-group-text {\n margin-left: 2px; }\n .ag-dark .ag-ltr .ag-header-group-text {\n margin-right: 2px; }\n .ag-dark .ag-header-cell-menu-button:empty {\n width: 12px;\n height: 12px;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAxaDEwdjJIMXptMCA0aDEwdjJIMXptMCA0aDEwdjJIMXoiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat;\n background-size: 12px 12px;\n filter: invert(100%); }\n .ag-dark .ag-ltr .ag-pinned-right-header {\n border-left: 1px solid grey; }\n .ag-dark .ag-rtl .ag-pinned-left-header {\n border-right: 1px solid grey; }\n .ag-dark .ag-body {\n background-color: #302E2E; }\n .ag-dark .ag-row-odd {\n background-color: #302E2E; }\n .ag-dark .ag-row-even {\n background-color: #403E3E; }\n .ag-dark .ag-row-selected {\n background-color: #4A708B; }\n .ag-dark .ag-row-stub {\n background-color: #333; }\n .ag-dark .ag-stub-cell {\n padding: 2px 2px 2px 10px; }\n .ag-dark .ag-floating-top {\n background-color: #333; }\n .ag-dark .ag-floating-top .ag-row {\n background-color: #333; }\n .ag-dark .ag-floating-bottom {\n background-color: #333; }\n .ag-dark .ag-floating-bottom .ag-row {\n background-color: #333; }\n .ag-dark .ag-overlay-loading-wrapper {\n background-color: rgba(255, 255, 255, 0.5); }\n .ag-dark .ag-overlay-loading-center {\n background-color: #ffffff;\n border: 1px solid grey;\n border-radius: 10px;\n padding: 10px;\n color: black; }\n .ag-dark .ag-overlay-no-rows-center {\n background-color: #ffffff;\n border: 1px solid grey;\n border-radius: 10px;\n padding: 10px; }\n .ag-dark .ag-group-cell-entire-row {\n background-color: #302E2E;\n padding: 2px; }\n .ag-dark .ag-footer-cell-entire-row {\n background-color: #302E2E;\n padding: 2px; }\n .ag-dark .ag-group-cell {\n font-style: italic; }\n .ag-dark .ag-ltr .ag-group-expanded {\n padding-right: 4px; }\n .ag-dark .ag-rtl .ag-group-expanded {\n padding-left: 4px; }\n .ag-dark .ag-ltr .ag-group-contracted {\n padding-right: 4px; }\n .ag-dark .ag-rtl .ag-group-contracted {\n padding-left: 4px; }\n .ag-dark .ag-ltr .ag-group-loading {\n padding-right: 4px; }\n .ag-dark .ag-rtl .ag-group-loading {\n padding-left: 4px; }\n .ag-dark .ag-ltr .ag-group-value {\n padding-right: 2px; }\n .ag-dark .ag-rtl .ag-group-value {\n padding-left: 2px; }\n .ag-dark .ag-ltr .ag-group-checkbox {\n padding-right: 2px; }\n .ag-dark .ag-rtl .ag-group-checkbox {\n padding-left: 2px; }\n .ag-dark .ag-group-child-count {\n /* display: inline-block; */ }\n .ag-dark .ag-footer-cell {\n font-style: italic; }\n .ag-dark .ag-menu {\n border: 1px solid #555;\n background-color: #302E2E;\n cursor: default;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px; }\n .ag-dark .ag-menu .ag-tab-header {\n background-color: #626262; }\n .ag-dark .ag-menu .ag-tab {\n padding: 6px 8px 6px 8px;\n margin: 2px 2px 0px 2px;\n display: inline-block;\n border-right: 1px solid transparent;\n border-left: 1px solid transparent;\n border-top: 1px solid transparent;\n border-top-right-radius: 2px;\n border-top-left-radius: 2px; }\n .ag-dark .ag-menu .ag-tab-selected {\n background-color: #302E2E;\n border-right: 1px solid #555;\n border-left: 1px solid #555;\n border-top: 1px solid #555; }\n .ag-dark .ag-menu-separator {\n border-top: 1px solid #555; }\n .ag-dark .ag-menu-option-active {\n background-color: #4A708B; }\n .ag-dark .ag-menu-option-icon {\n padding: 2px 4px 2px 4px;\n vertical-align: middle; }\n .ag-dark .ag-menu-option-text {\n padding: 2px 4px 2px 4px;\n vertical-align: middle; }\n .ag-dark .ag-menu-option-shortcut {\n padding: 2px 2px 2px 2px;\n vertical-align: middle; }\n .ag-dark .ag-menu-option-popup-pointer {\n padding: 2px 4px 2px 4px;\n vertical-align: middle;\n display: table-cell; }\n .ag-dark .ag-menu-option-disabled {\n opacity: 0.5; }\n .ag-dark .ag-menu-column-select-wrapper {\n margin: 2px; }\n .ag-dark .ag-filter-checkbox {\n margin-right: 4px;\n margin-bottom: 0;\n display: inline-block; }\n .ag-dark .ag-filter-header-container {\n padding: 2px 4px 2px 4px;\n border-bottom: 1px solid #555; }\n .ag-dark .ag-filter-apply-panel {\n border-top: 1px solid #555;\n padding: 2px 0px 2px 4px; }\n .ag-dark .ag-virtual-list-container {\n padding: 4px 4px 10px 4px; }\n .ag-dark .ag-ltr .ag-selection-checkbox {\n padding-right: 4px; }\n .ag-dark .ag-rtl .ag-selection-checkbox {\n padding-left: 4px; }\n .ag-dark .ag-paging-panel {\n padding: 4px; }\n .ag-dark .ag-paging-button {\n margin-left: 4px;\n margin-right: 4px; }\n .ag-dark .ag-paging-row-summary-panel {\n display: inline-block;\n width: 300px; }\n .ag-dark .ag-column-panel {\n background-color: #302E2E;\n border-bottom: 1px solid grey;\n border-top: 1px solid grey;\n color: #ccc; }\n .ag-dark .ltr .ag-column-panel {\n border-right: 1px solid grey; }\n .ag-dark .rtl .ag-column-panel {\n border-left: 1px solid grey; }\n .ag-dark .ag-status-bar {\n color: #ccc;\n background-color: #302E2E;\n font-size: 14px;\n height: 22px;\n border-bottom: 1px solid grey;\n border-left: 1px solid grey;\n border-right: 1px solid grey;\n padding: 2px; }\n .ag-dark .ag-status-bar-aggregations {\n float: right; }\n .ag-dark .ag-status-bar-item {\n padding-left: 10px; }\n .ag-dark .ag-column-drop-cell {\n background: #403E3E;\n color: #e0e0e0;\n border: 1px solid #666; }\n .ag-dark .ag-column-drop-cell-ghost {\n opacity: 0.5; }\n .ag-dark .ag-column-drop-cell-text {\n padding-left: 2px;\n padding-right: 2px; }\n .ag-dark .ag-column-drop-cell-button {\n border: 1px solid transparent;\n padding-left: 2px;\n padding-right: 2px;\n border-radius: 3px; }\n .ag-dark .ag-column-drop-cell-button:hover {\n border: 1px solid grey; }\n .ag-dark .ag-column-drop-empty-message {\n padding-left: 2px;\n padding-right: 2px;\n color: grey; }\n .ag-dark .ag-column-drop-icon {\n margin: 6px 3px 0px 3px; }\n .ag-dark .ag-column-drop {\n background-color: #302E2E; }\n .ag-dark .ag-column-drop-horizontal {\n padding: 2px;\n border-top: 1px solid grey;\n border-left: 1px solid grey;\n border-right: 1px solid grey; }\n .ag-dark .ag-column-drop-vertical {\n padding: 4px 4px 10px 4px;\n border-bottom: 1px solid grey;\n overflow: auto; }\n .ag-dark .ag-column-drop-vertical .ag-column-drop-cell {\n margin-top: 2px; }\n .ag-dark .ag-column-drop-vertical .ag-column-drop-empty-message {\n padding: 5px; }\n .ag-dark .ag-pivot-mode {\n border-bottom: 1px solid grey;\n padding: 2px 4px 3px 4px;\n background-color: #302E2E; }\n .ag-dark .ag-column-panel .ag-column-select-panel {\n padding: 4px 4px 10px 4px;\n padding-left: 0;\n border-bottom: 1px solid grey;\n overflow: auto; }\n .ag-dark .ag-select-agg-func-popup {\n cursor: default;\n position: absolute;\n font-size: 14px;\n background-color: #302E2E;\n border: 1px solid grey; }\n .ag-dark .ag-select-agg-func-item {\n padding-left: 2px;\n padding-right: 2px; }\n .ag-dark .ag-select-agg-func-item:hover {\n background-color: #4A708B; }\n .ag-dark .ag-floating-filter-body {\n margin-right: 20px;\n width: calc(100% - 20px); }\n .ag-dark .ag-floating-filter-button {\n margin-top: -20px;\n display: inline-block;\n float: right; }\n .ag-dark .ag-floating-filter-button button {\n border: 0;\n background: transparent;\n padding: 3px;\n margin: 0; }\n .ag-dark .ag-rtl .ag-floating-filter-body {\n margin-right: 0;\n margin-left: 20px;\n float: right; }\n .ag-dark .ag-rtl .ag-floating-filter-button {\n float: left; }\n .ag-dark .ag-sort-order {\n margin-left: 0.5em;\n font-size: 0.8em; }\n .ag-dark .ag-sort-order::before {\n content: \"(\"; }\n .ag-dark .ag-sort-order::after {\n content: \")\"; }\n .ag-dark .ag-details-row {\n padding: 20px;\n box-sizing: border-box; }\n\n.ag-dark ::-webkit-scrollbar {\n width: 12px;\n height: 12px;\n background: #302E2E; }\n .ag-dark ::-webkit-scrollbar-thumb {\n background-color: #626262; }\n\n.ag-dark ::-webkit-scrollbar-corner {\n background: #302E2E; }\n\n.ag-dark select {\n background-color: #302E2E;\n color: #ccc; }\n\n.ag-dark input {\n background-color: #302E2E;\n color: #ccc; }\n\n.ag-dark .ag-floating-filter-body input {\n background-color: #302E2E;\n color: #ccc; }\n .ag-dark .ag-floating-filter-body input[readonly] {\n background: rgba(48, 46, 46, 0.3); }\n\n.ag-dark .ag-icon, .ag-dark .ag-menu-option-popup-pointer {\n -webkit-filter: invert(100%);\n filter: invert(100%); }\n", ""]);
36471
36472// exports
36473
36474
36475/***/ }),
36476/* 155 */
36477/***/ (function(module, exports, __webpack_require__) {
36478
36479// style-loader: Adds some css to the DOM by adding a <style> tag
36480
36481// load the styles
36482var content = __webpack_require__(156);
36483if(typeof content === 'string') content = [[module.i, content, '']];
36484// add the styles to the DOM
36485var update = __webpack_require__(15)(content, {});
36486if(content.locals) module.exports = content.locals;
36487// Hot Module Replacement
36488if(false) {
36489 // When the styles change, update the <style> tags
36490 if(!content.locals) {
36491 module.hot.accept("!!../../node_modules/css-loader/index.js!./theme-fresh.css", function() {
36492 var newContent = require("!!../../node_modules/css-loader/index.js!./theme-fresh.css");
36493 if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
36494 update(newContent);
36495 });
36496 }
36497 // When the module is disposed, remove the <style> tags
36498 module.hot.dispose(function() { update(); });
36499}
36500
36501/***/ }),
36502/* 156 */
36503/***/ (function(module, exports, __webpack_require__) {
36504
36505exports = module.exports = __webpack_require__(14)();
36506// imports
36507
36508
36509// module
36510exports.push([module.i, "/*\n- todo {\n- loading overlay colors {\n- rich select colors {\n */\n.ag-icon:not(.ag-faded) {\n opacity: 0.8; }\n\n.ag-fresh {\n line-height: 1.4;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n color: #222;\n /* this is for the rowGroupPanel, that appears along the top of the grid */\n /* this is for the column drops that appear in the toolPanel */ }\n .ag-fresh .ag-numeric-cell {\n text-align: right; }\n .ag-fresh .ag-header-cell-label {\n display: flex; }\n .ag-fresh .ag-header-cell-label > span {\n float: left; }\n .ag-fresh .ag-header-cell-label .ag-header-icon {\n margin-top: 2px; }\n .ag-fresh .ag-header-cell-label .ag-header-cell-text {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis; }\n .ag-fresh .ag-numeric-header .ag-header-cell-label {\n flex-direction: row-reverse; }\n .ag-fresh .ag-numeric-header .ag-header-cell-menu-button {\n float: left; }\n .ag-fresh .ag-numeric-header .ag-header-cell-label {\n width: calc(100% - 12px);\n float: right; }\n .ag-fresh .ag-numeric-header .ag-header-cell-label > span {\n float: right; }\n .ag-fresh .ag-header-cell-resize {\n position: absolute;\n right: 0; }\n .ag-fresh .ag-rtl .ag-header-cell-resize {\n position: absolute;\n left: 0;\n right: auto; }\n .ag-fresh img {\n vertical-align: middle;\n border: 0; }\n .ag-fresh .ag-root {\n border: 1px solid darkgrey; }\n .ag-fresh .ag-cell-data-changed {\n background-color: #cec; }\n .ag-fresh .ag-cell-data-changed-animation {\n background-color: transparent;\n transition: background-color 1s; }\n .ag-fresh .ag-cell-not-inline-editing {\n padding: 2px;\n /* compensate for the transparent borders; */\n padding-left: 1px; }\n .ag-fresh .ag-cell-range-selected-1:not(.ag-cell-focus) {\n background-color: rgba(120, 120, 120, 0.4); }\n .ag-fresh .ag-cell-range-selected-2:not(.ag-cell-focus) {\n background-color: rgba(80, 80, 80, 0.4); }\n .ag-fresh .ag-cell-range-selected-3:not(.ag-cell-focus) {\n background-color: rgba(40, 40, 40, 0.4); }\n .ag-fresh .ag-cell-range-selected-4:not(.ag-cell-focus) {\n background-color: rgba(0, 0, 0, 0.4); }\n .ag-fresh .ag-cell-focus {\n border: 1px solid darkgrey; }\n .ag-fresh .ag-cell-no-focus {\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent; }\n .ag-fresh .ag-ltr .ag-cell-no-focus {\n border-right: 1px dotted silver;\n border-left: 1px solid transparent; }\n .ag-fresh .ag-rtl .ag-cell-no-focus {\n border-right: 1px solid transparent;\n border-left: 1px dotted silver; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-1 {\n padding-left: 10px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-1 {\n padding-right: 10px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-1 {\n padding-left: 10px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-1 {\n padding-right: 10px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-2 {\n padding-left: 20px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-2 {\n padding-right: 20px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-2 {\n padding-left: 20px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-2 {\n padding-right: 20px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-3 {\n padding-left: 30px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-3 {\n padding-right: 30px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-3 {\n padding-left: 30px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-3 {\n padding-right: 30px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-4 {\n padding-left: 40px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-4 {\n padding-right: 40px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-4 {\n padding-left: 40px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-4 {\n padding-right: 40px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-5 {\n padding-left: 50px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-5 {\n padding-right: 50px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-5 {\n padding-left: 50px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-5 {\n padding-right: 50px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-6 {\n padding-left: 60px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-6 {\n padding-right: 60px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-6 {\n padding-left: 60px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-6 {\n padding-right: 60px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-7 {\n padding-left: 70px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-7 {\n padding-right: 70px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-7 {\n padding-left: 70px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-7 {\n padding-right: 70px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-8 {\n padding-left: 80px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-8 {\n padding-right: 80px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-8 {\n padding-left: 80px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-8 {\n padding-right: 80px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-9 {\n padding-left: 90px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-9 {\n padding-right: 90px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-9 {\n padding-left: 90px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-9 {\n padding-right: 90px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-10 {\n padding-left: 100px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-10 {\n padding-right: 100px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-10 {\n padding-left: 100px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-10 {\n padding-right: 100px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-11 {\n padding-left: 110px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-11 {\n padding-right: 110px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-11 {\n padding-left: 110px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-11 {\n padding-right: 110px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-12 {\n padding-left: 120px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-12 {\n padding-right: 120px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-12 {\n padding-left: 120px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-12 {\n padding-right: 120px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-13 {\n padding-left: 130px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-13 {\n padding-right: 130px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-13 {\n padding-left: 130px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-13 {\n padding-right: 130px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-14 {\n padding-left: 140px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-14 {\n padding-right: 140px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-14 {\n padding-left: 140px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-14 {\n padding-right: 140px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-15 {\n padding-left: 150px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-15 {\n padding-right: 150px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-15 {\n padding-left: 150px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-15 {\n padding-right: 150px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-16 {\n padding-left: 160px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-16 {\n padding-right: 160px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-16 {\n padding-left: 160px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-16 {\n padding-right: 160px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-17 {\n padding-left: 170px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-17 {\n padding-right: 170px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-17 {\n padding-left: 170px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-17 {\n padding-right: 170px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-18 {\n padding-left: 180px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-18 {\n padding-right: 180px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-18 {\n padding-left: 180px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-18 {\n padding-right: 180px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-19 {\n padding-left: 190px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-19 {\n padding-right: 190px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-19 {\n padding-left: 190px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-19 {\n padding-right: 190px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-20 {\n padding-left: 200px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-20 {\n padding-right: 200px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-20 {\n padding-left: 200px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-20 {\n padding-right: 200px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-21 {\n padding-left: 210px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-21 {\n padding-right: 210px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-21 {\n padding-left: 210px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-21 {\n padding-right: 210px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-22 {\n padding-left: 220px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-22 {\n padding-right: 220px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-22 {\n padding-left: 220px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-22 {\n padding-right: 220px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-23 {\n padding-left: 230px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-23 {\n padding-right: 230px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-23 {\n padding-left: 230px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-23 {\n padding-right: 230px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-24 {\n padding-left: 240px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-24 {\n padding-right: 240px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-24 {\n padding-left: 240px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-24 {\n padding-right: 240px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-25 {\n padding-left: 250px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-25 {\n padding-right: 250px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-25 {\n padding-left: 250px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-25 {\n padding-right: 250px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-26 {\n padding-left: 260px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-26 {\n padding-right: 260px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-26 {\n padding-left: 260px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-26 {\n padding-right: 260px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-27 {\n padding-left: 270px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-27 {\n padding-right: 270px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-27 {\n padding-left: 270px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-27 {\n padding-right: 270px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-28 {\n padding-left: 280px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-28 {\n padding-right: 280px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-28 {\n padding-left: 280px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-28 {\n padding-right: 280px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-29 {\n padding-left: 290px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-29 {\n padding-right: 290px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-29 {\n padding-left: 290px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-29 {\n padding-right: 290px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-30 {\n padding-left: 300px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-30 {\n padding-right: 300px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-30 {\n padding-left: 300px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-30 {\n padding-right: 300px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-31 {\n padding-left: 310px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-31 {\n padding-right: 310px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-31 {\n padding-left: 310px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-31 {\n padding-right: 310px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-32 {\n padding-left: 320px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-32 {\n padding-right: 320px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-32 {\n padding-left: 320px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-32 {\n padding-right: 320px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-33 {\n padding-left: 330px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-33 {\n padding-right: 330px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-33 {\n padding-left: 330px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-33 {\n padding-right: 330px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-34 {\n padding-left: 340px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-34 {\n padding-right: 340px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-34 {\n padding-left: 340px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-34 {\n padding-right: 340px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-35 {\n padding-left: 350px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-35 {\n padding-right: 350px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-35 {\n padding-left: 350px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-35 {\n padding-right: 350px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-36 {\n padding-left: 360px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-36 {\n padding-right: 360px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-36 {\n padding-left: 360px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-36 {\n padding-right: 360px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-37 {\n padding-left: 370px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-37 {\n padding-right: 370px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-37 {\n padding-left: 370px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-37 {\n padding-right: 370px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-38 {\n padding-left: 380px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-38 {\n padding-right: 380px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-38 {\n padding-left: 380px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-38 {\n padding-right: 380px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-39 {\n padding-left: 390px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-39 {\n padding-right: 390px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-39 {\n padding-left: 390px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-39 {\n padding-right: 390px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-40 {\n padding-left: 400px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-40 {\n padding-right: 400px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-40 {\n padding-left: 400px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-40 {\n padding-right: 400px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-41 {\n padding-left: 410px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-41 {\n padding-right: 410px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-41 {\n padding-left: 410px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-41 {\n padding-right: 410px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-42 {\n padding-left: 420px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-42 {\n padding-right: 420px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-42 {\n padding-left: 420px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-42 {\n padding-right: 420px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-43 {\n padding-left: 430px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-43 {\n padding-right: 430px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-43 {\n padding-left: 430px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-43 {\n padding-right: 430px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-44 {\n padding-left: 440px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-44 {\n padding-right: 440px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-44 {\n padding-left: 440px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-44 {\n padding-right: 440px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-45 {\n padding-left: 450px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-45 {\n padding-right: 450px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-45 {\n padding-left: 450px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-45 {\n padding-right: 450px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-46 {\n padding-left: 460px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-46 {\n padding-right: 460px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-46 {\n padding-left: 460px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-46 {\n padding-right: 460px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-47 {\n padding-left: 470px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-47 {\n padding-right: 470px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-47 {\n padding-left: 470px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-47 {\n padding-right: 470px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-48 {\n padding-left: 480px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-48 {\n padding-right: 480px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-48 {\n padding-left: 480px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-48 {\n padding-right: 480px; }\n .ag-fresh .ag-ltr .ag-toolpanel-indent-49 {\n padding-left: 490px; }\n .ag-fresh .ag-rtl .ag-toolpanel-indent-49 {\n padding-right: 490px; }\n .ag-fresh .ag-ltr .ag-row-group-indent-49 {\n padding-left: 490px; }\n .ag-fresh .ag-rtl .ag-row-group-indent-49 {\n padding-right: 490px; }\n .ag-fresh .ag-rtl .ag-cell-first-right-pinned {\n border-left: 1px solid darkgrey; }\n .ag-fresh .ag-ltr .ag-cell-first-right-pinned {\n border-left: 1px solid darkgrey; }\n .ag-fresh .ag-rtl .ag-cell-last-left-pinned {\n border-right: 1px solid darkgrey; }\n .ag-fresh .ag-ltr .ag-cell-last-left-pinned {\n border-right: 1px solid darkgrey; }\n .ag-fresh .ag-cell-highlight {\n border: 1px solid darkgreen; }\n .ag-fresh .ag-cell-highlight-animation {\n transition: border 1s; }\n .ag-fresh .ag-value-change-delta {\n padding-right: 2px; }\n .ag-fresh .ag-value-change-delta-up {\n color: darkgreen; }\n .ag-fresh .ag-value-change-delta-down {\n color: darkred; }\n .ag-fresh .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 .ag-fresh .ag-value-change-value-highlight {\n background-color: #cec;\n transition: background-color 0.1s; }\n .ag-fresh .ag-rich-select {\n font-size: 14px;\n border: 1px solid darkgrey;\n background-color: white; }\n .ag-fresh .ag-rich-select-value {\n padding: 2px; }\n .ag-fresh .ag-rich-select-list {\n border-top: 1px solid #d3d3d3; }\n .ag-fresh .ag-rich-select-row {\n padding: 2px; }\n .ag-fresh .ag-rich-select-row-selected {\n background-color: #BDE2E5; }\n .ag-fresh .ag-large-text {\n border: 1px solid darkgrey; }\n .ag-fresh .ag-header-select-all,\n .ag-fresh .ag-header-cell-menu-button {\n margin-top: 3px;\n line-height: 1rem; }\n .ag-fresh .ag-header-select-all {\n padding-right: 4px; }\n .ag-fresh .ag-filter-header-container > label {\n margin-bottom: 0; }\n .ag-fresh .ag-header-cell {\n padding: 2px;\n padding-top: 4px; }\n .ag-fresh .ag-header {\n color: #333;\n background: linear-gradient(white, lightgrey);\n border-bottom: 1px solid darkgrey;\n font-weight: normal; }\n .ag-fresh .ag-header-icon {\n color: #333;\n stroke: none;\n fill: #333; }\n .ag-fresh .ag-filter-icon {\n display: inline-block; }\n .ag-fresh .ag-sort-ascending-icon:empty {\n display: inline-block;\n width: 12px;\n height: 12px;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDNoMnY5SDV6Ii8+PHBhdGggZD0iTTguOTkzIDUuMlYzLjQ5M2gtNnY2SDQuN1Y1LjJoNC4yOTN6IiBpZD0iYiIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik01LjUgMy41aDF2OGgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSg0NSA1Ljk5MyA2LjQ5MykiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2IiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik04LjQ5MyA0Ljd2LS43MDdoLTV2NUg0LjJWNC43aDQuMjkzeiIvPjwvZz48L2c+PC9zdmc+) center no-repeat;\n background-size: 12px 12px;\n filter: \"initial\"; }\n .ag-fresh .ag-sort-descending-icon:empty {\n display: inline-block;\n width: 12px;\n height: 12px;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDJoMnY5SDV6Ii8+PHBhdGggZD0iTTguOTkzIDYuMVY0LjM5M2gtNnY2SDQuN1Y2LjFoNC4yOTN6IiBpZD0iYiIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik01LjUgMi41aDF2OGgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtMTM1IDUuOTkzIDcuMzkzKSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjYiIvPjxwYXRoIHN0cm9rZT0iIzAwMCIgZD0iTTguNDkzIDUuNnYtLjcwN2gtNXY1SDQuMlY1LjZoNC4yOTN6Ii8+PC9nPjwvZz48L3N2Zz4=) center no-repeat;\n background-size: 12px 12px;\n filter: \"initial\"; }\n .ag-fresh .ag-sort-none-icon:empty {\n display: inline-block;\n width: 12px;\n height: 12px;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDNoMnY2SDV6Ii8+PHBhdGggZD0iTTguMTQ2IDguMTgyVjYuNDc1aC01djVoMS43MDhWOC4xODJoMy4yOTJ6IiBpZD0iYiIvPjxwYXRoIGQ9Ik04LjUgMi45MTRWMS4yMDdoLTV2NWgxLjcwN1YyLjkxNEg4LjV6IiBpZD0iYyIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik01LjUgMy41aDF2NWgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtMTM1IDUuNjQ2IDguNDc1KSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjYiIvPjxwYXRoIHN0cm9rZT0iIzAwMCIgZD0iTTcuNjQ2IDcuNjgydi0uNzA3aC00djRoLjcwOFY3LjY4MmgzLjI5MnoiLz48L2c+PGcgdHJhbnNmb3JtPSJyb3RhdGUoNDUgNiAzLjcwNykiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2MiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik04IDIuNDE0di0uNzA3SDR2NGguNzA3VjIuNDE0SDh6Ii8+PC9nPjwvZz48L3N2Zz4=) center no-repeat;\n background-size: 12px 12px;\n filter: \"initial\"; }\n .ag-fresh .ag-layout-for-print .ag-header-container {\n background: linear-gradient(white, lightgrey);\n border-bottom: 1px solid darkgrey; }\n .ag-fresh .ag-ltr .ag-header-cell {\n border-right: 1px solid darkgrey; }\n .ag-fresh .ag-rtl .ag-header-cell {\n border-left: 1px solid darkgrey; }\n .ag-fresh .ag-header-cell-moving .ag-header-cell-label {\n opacity: 0.5; }\n .ag-fresh .ag-header-cell-moving {\n background-color: #bebebe; }\n .ag-fresh .ag-ltr .ag-header-group-cell {\n border-right: 1px solid darkgrey; }\n .ag-fresh .ag-rtl .ag-header-group-cell {\n border-left: 1px solid darkgrey; }\n .ag-fresh .ag-header-group-cell-with-group {\n border-bottom: 1px solid darkgrey; }\n .ag-fresh .ag-header-group-cell-label {\n padding: 2px;\n padding-top: 4px; }\n .ag-fresh .ag-rtl .ag-header-group-text {\n margin-left: 2px; }\n .ag-fresh .ag-ltr .ag-header-group-text {\n margin-right: 2px; }\n .ag-fresh .ag-header-cell-menu-button:empty {\n width: 12px;\n height: 12px;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAxaDEwdjJIMXptMCA0aDEwdjJIMXptMCA0aDEwdjJIMXoiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat;\n background-size: 12px 12px;\n filter: \"initial\"; }\n .ag-fresh .ag-ltr .ag-pinned-right-header {\n border-left: 1px solid darkgrey; }\n .ag-fresh .ag-rtl .ag-pinned-left-header {\n border-right: 1px solid darkgrey; }\n .ag-fresh .ag-body {\n background-color: #f6f6f6; }\n .ag-fresh .ag-row-odd {\n background-color: #f6f6f6; }\n .ag-fresh .ag-row-even {\n background-color: white; }\n .ag-fresh .ag-row-selected {\n background-color: powderblue; }\n .ag-fresh .ag-row-stub {\n background-color: #f0f0f0; }\n .ag-fresh .ag-stub-cell {\n padding: 2px 2px 2px 10px; }\n .ag-fresh .ag-floating-top {\n background-color: #f0f0f0; }\n .ag-fresh .ag-floating-top .ag-row {\n background-color: #f0f0f0; }\n .ag-fresh .ag-floating-bottom {\n background-color: #f0f0f0; }\n .ag-fresh .ag-floating-bottom .ag-row {\n background-color: #f0f0f0; }\n .ag-fresh .ag-overlay-loading-wrapper {\n background-color: rgba(255, 255, 255, 0.5); }\n .ag-fresh .ag-overlay-loading-center {\n background-color: #ffffff;\n border: 1px solid darkgrey;\n border-radius: 10px;\n padding: 10px;\n color: black; }\n .ag-fresh .ag-overlay-no-rows-center {\n background-color: #ffffff;\n border: 1px solid darkgrey;\n border-radius: 10px;\n padding: 10px; }\n .ag-fresh .ag-group-cell-entire-row {\n background-color: #f6f6f6;\n padding: 2px; }\n .ag-fresh .ag-footer-cell-entire-row {\n background-color: #f6f6f6;\n padding: 2px; }\n .ag-fresh .ag-group-cell {\n font-style: italic; }\n .ag-fresh .ag-ltr .ag-group-expanded {\n padding-right: 4px; }\n .ag-fresh .ag-rtl .ag-group-expanded {\n padding-left: 4px; }\n .ag-fresh .ag-ltr .ag-group-contracted {\n padding-right: 4px; }\n .ag-fresh .ag-rtl .ag-group-contracted {\n padding-left: 4px; }\n .ag-fresh .ag-ltr .ag-group-loading {\n padding-right: 4px; }\n .ag-fresh .ag-rtl .ag-group-loading {\n padding-left: 4px; }\n .ag-fresh .ag-ltr .ag-group-value {\n padding-right: 2px; }\n .ag-fresh .ag-rtl .ag-group-value {\n padding-left: 2px; }\n .ag-fresh .ag-ltr .ag-group-checkbox {\n padding-right: 2px; }\n .ag-fresh .ag-rtl .ag-group-checkbox {\n padding-left: 2px; }\n .ag-fresh .ag-group-child-count {\n /* display: inline-block; */ }\n .ag-fresh .ag-footer-cell {\n font-style: italic; }\n .ag-fresh .ag-menu {\n border: 1px solid #808080;\n background-color: #f6f6f6;\n cursor: default;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px; }\n .ag-fresh .ag-menu .ag-tab-header {\n background-color: #e6e6e6; }\n .ag-fresh .ag-menu .ag-tab {\n padding: 6px 8px 6px 8px;\n margin: 2px 2px 0px 2px;\n display: inline-block;\n border-right: 1px solid transparent;\n border-left: 1px solid transparent;\n border-top: 1px solid transparent;\n border-top-right-radius: 2px;\n border-top-left-radius: 2px; }\n .ag-fresh .ag-menu .ag-tab-selected {\n background-color: #f6f6f6;\n border-right: 1px solid #d3d3d3;\n border-left: 1px solid #d3d3d3;\n border-top: 1px solid #d3d3d3; }\n .ag-fresh .ag-menu-separator {\n border-top: 1px solid #d3d3d3; }\n .ag-fresh .ag-menu-option-active {\n background-color: #BDE2E5; }\n .ag-fresh .ag-menu-option-icon {\n padding: 2px 4px 2px 4px;\n vertical-align: middle; }\n .ag-fresh .ag-menu-option-text {\n padding: 2px 4px 2px 4px;\n vertical-align: middle; }\n .ag-fresh .ag-menu-option-shortcut {\n padding: 2px 2px 2px 2px;\n vertical-align: middle; }\n .ag-fresh .ag-menu-option-popup-pointer {\n padding: 2px 4px 2px 4px;\n vertical-align: middle;\n display: table-cell; }\n .ag-fresh .ag-menu-option-disabled {\n opacity: 0.5; }\n .ag-fresh .ag-menu-column-select-wrapper {\n margin: 2px; }\n .ag-fresh .ag-filter-checkbox {\n margin-right: 4px;\n margin-bottom: 0;\n display: inline-block; }\n .ag-fresh .ag-filter-header-container {\n padding: 2px 4px 2px 4px;\n border-bottom: 1px solid #d3d3d3; }\n .ag-fresh .ag-filter-apply-panel {\n border-top: 1px solid #d3d3d3;\n padding: 2px 0px 2px 4px; }\n .ag-fresh .ag-virtual-list-container {\n padding: 4px 4px 10px 4px; }\n .ag-fresh .ag-ltr .ag-selection-checkbox {\n padding-right: 4px; }\n .ag-fresh .ag-rtl .ag-selection-checkbox {\n padding-left: 4px; }\n .ag-fresh .ag-paging-panel {\n padding: 4px; }\n .ag-fresh .ag-paging-button {\n margin-left: 4px;\n margin-right: 4px; }\n .ag-fresh .ag-paging-row-summary-panel {\n display: inline-block;\n width: 300px; }\n .ag-fresh .ag-column-panel {\n background-color: #f6f6f6;\n border-bottom: 1px solid darkgrey;\n border-top: 1px solid darkgrey;\n color: #222; }\n .ag-fresh .ltr .ag-column-panel {\n border-right: 1px solid darkgrey; }\n .ag-fresh .rtl .ag-column-panel {\n border-left: 1px solid darkgrey; }\n .ag-fresh .ag-status-bar {\n color: #222;\n background-color: #f6f6f6;\n font-size: 14px;\n height: 22px;\n border-bottom: 1px solid darkgrey;\n border-left: 1px solid darkgrey;\n border-right: 1px solid darkgrey;\n padding: 2px; }\n .ag-fresh .ag-status-bar-aggregations {\n float: right; }\n .ag-fresh .ag-status-bar-item {\n padding-left: 10px; }\n .ag-fresh .ag-column-drop-cell {\n background: linear-gradient(white, lightgrey);\n color: #000;\n border: 1px solid #808080; }\n .ag-fresh .ag-column-drop-cell-ghost {\n opacity: 0.5; }\n .ag-fresh .ag-column-drop-cell-text {\n padding-left: 2px;\n padding-right: 2px; }\n .ag-fresh .ag-column-drop-cell-button {\n border: 1px solid transparent;\n padding-left: 2px;\n padding-right: 2px;\n border-radius: 3px; }\n .ag-fresh .ag-column-drop-cell-button:hover {\n border: 1px solid darkgrey; }\n .ag-fresh .ag-column-drop-empty-message {\n padding-left: 2px;\n padding-right: 2px;\n color: grey; }\n .ag-fresh .ag-column-drop-icon {\n margin: 6px 3px 0px 3px; }\n .ag-fresh .ag-column-drop {\n background-color: #f6f6f6; }\n .ag-fresh .ag-column-drop-horizontal {\n padding: 2px;\n border-top: 1px solid darkgrey;\n border-left: 1px solid darkgrey;\n border-right: 1px solid darkgrey; }\n .ag-fresh .ag-column-drop-vertical {\n padding: 4px 4px 10px 4px;\n border-bottom: 1px solid darkgrey;\n overflow: auto; }\n .ag-fresh .ag-column-drop-vertical .ag-column-drop-cell {\n margin-top: 2px; }\n .ag-fresh .ag-column-drop-vertical .ag-column-drop-empty-message {\n padding: 5px; }\n .ag-fresh .ag-pivot-mode {\n border-bottom: 1px solid darkgrey;\n padding: 2px 4px 3px 4px;\n background-color: #f6f6f6; }\n .ag-fresh .ag-column-panel .ag-column-select-panel {\n padding: 4px 4px 10px 4px;\n padding-left: 0;\n border-bottom: 1px solid darkgrey;\n overflow: auto; }\n .ag-fresh .ag-select-agg-func-popup {\n cursor: default;\n position: absolute;\n font-size: 14px;\n background-color: white;\n border: 1px solid darkgrey; }\n .ag-fresh .ag-select-agg-func-item {\n padding-left: 2px;\n padding-right: 2px; }\n .ag-fresh .ag-select-agg-func-item:hover {\n background-color: #BDE2E5; }\n .ag-fresh .ag-floating-filter-body {\n margin-right: 20px;\n width: calc(100% - 20px); }\n .ag-fresh .ag-floating-filter-button {\n margin-top: -20px;\n display: inline-block;\n float: right; }\n .ag-fresh .ag-floating-filter-button button {\n border: 0;\n background: transparent;\n padding: 3px;\n margin: 0; }\n .ag-fresh .ag-rtl .ag-floating-filter-body {\n margin-right: 0;\n margin-left: 20px;\n float: right; }\n .ag-fresh .ag-rtl .ag-floating-filter-button {\n float: left; }\n .ag-fresh .ag-sort-order {\n margin-left: 0.5em;\n font-size: 0.8em; }\n .ag-fresh .ag-sort-order::before {\n content: \"(\"; }\n .ag-fresh .ag-sort-order::after {\n content: \")\"; }\n .ag-fresh .ag-details-row {\n padding: 20px;\n box-sizing: border-box; }\n", ""]);
36511
36512// exports
36513
36514
36515/***/ }),
36516/* 157 */
36517/***/ (function(module, exports, __webpack_require__) {
36518
36519// style-loader: Adds some css to the DOM by adding a <style> tag
36520
36521// load the styles
36522var content = __webpack_require__(158);
36523if(typeof content === 'string') content = [[module.i, content, '']];
36524// add the styles to the DOM
36525var update = __webpack_require__(15)(content, {});
36526if(content.locals) module.exports = content.locals;
36527// Hot Module Replacement
36528if(false) {
36529 // When the styles change, update the <style> tags
36530 if(!content.locals) {
36531 module.hot.accept("!!../../node_modules/css-loader/index.js!./theme-material.css", function() {
36532 var newContent = require("!!../../node_modules/css-loader/index.js!./theme-material.css");
36533 if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
36534 update(newContent);
36535 });
36536 }
36537 // When the module is disposed, remove the <style> tags
36538 module.hot.dispose(function() { update(); });
36539}
36540
36541/***/ }),
36542/* 158 */
36543/***/ (function(module, exports, __webpack_require__) {
36544
36545exports = module.exports = __webpack_require__(14)();
36546// imports
36547
36548
36549// module
36550exports.push([module.i, "/*\n- todo {\n- loading overlay colors {\n- rich select colors {\n */\n.ag-icon:not(.ag-faded) {\n opacity: 0.8; }\n\n.ag-material {\n line-height: 1.4;\n font-family: Roboto;\n font-size: 14px;\n color: #666;\n /* this is for the rowGroupPanel, that appears along the top of the grid */\n /* this is for the column drops that appear in the toolPanel */ }\n .ag-material .ag-numeric-cell {\n text-align: right; }\n .ag-material .ag-header-cell-label {\n display: flex; }\n .ag-material .ag-header-cell-label > span {\n float: left; }\n .ag-material .ag-header-cell-label .ag-header-icon {\n margin-top: 2px; }\n .ag-material .ag-header-cell-label .ag-header-cell-text {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis; }\n .ag-material .ag-numeric-header .ag-header-cell-label {\n flex-direction: row-reverse; }\n .ag-material .ag-numeric-header .ag-header-cell-menu-button {\n float: left; }\n .ag-material .ag-numeric-header .ag-header-cell-label {\n width: calc(100% - 12px);\n float: right; }\n .ag-material .ag-numeric-header .ag-header-cell-label > span {\n float: right; }\n .ag-material .ag-header-cell-resize {\n position: absolute;\n right: 0; }\n .ag-material .ag-rtl .ag-header-cell-resize {\n position: absolute;\n left: 0;\n right: auto; }\n .ag-material img {\n vertical-align: middle;\n border: 0; }\n .ag-material .ag-root {\n border: none; }\n .ag-material .ag-cell-data-changed {\n background-color: #cec; }\n .ag-material .ag-cell-data-changed-animation {\n background-color: transparent;\n transition: background-color 1s; }\n .ag-material .ag-cell-not-inline-editing {\n padding: 2px;\n /* compensate for the transparent borders; */\n padding-left: 1px; }\n .ag-material .ag-cell-range-selected-1:not(.ag-cell-focus) {\n background-color: rgba(120, 120, 120, 0.4); }\n .ag-material .ag-cell-range-selected-2:not(.ag-cell-focus) {\n background-color: rgba(80, 80, 80, 0.4); }\n .ag-material .ag-cell-range-selected-3:not(.ag-cell-focus) {\n background-color: rgba(40, 40, 40, 0.4); }\n .ag-material .ag-cell-range-selected-4:not(.ag-cell-focus) {\n background-color: rgba(0, 0, 0, 0.4); }\n .ag-material .ag-cell-focus {\n border: 1px solid lightgrey; }\n .ag-material .ag-cell-no-focus {\n border-top: 1px solid transparent;\n border-bottom: 1px solid lightgrey; }\n .ag-material .ag-ltr .ag-cell-no-focus {\n border-right: 1px solid transparent;\n border-left: 1px solid transparent; }\n .ag-material .ag-rtl .ag-cell-no-focus {\n border-right: 1px solid transparent;\n border-left: 1px solid transparent; }\n .ag-material .ag-ltr .ag-toolpanel-indent-1 {\n padding-left: 10px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-1 {\n padding-right: 10px; }\n .ag-material .ag-ltr .ag-row-group-indent-1 {\n padding-left: 10px; }\n .ag-material .ag-rtl .ag-row-group-indent-1 {\n padding-right: 10px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-2 {\n padding-left: 20px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-2 {\n padding-right: 20px; }\n .ag-material .ag-ltr .ag-row-group-indent-2 {\n padding-left: 20px; }\n .ag-material .ag-rtl .ag-row-group-indent-2 {\n padding-right: 20px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-3 {\n padding-left: 30px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-3 {\n padding-right: 30px; }\n .ag-material .ag-ltr .ag-row-group-indent-3 {\n padding-left: 30px; }\n .ag-material .ag-rtl .ag-row-group-indent-3 {\n padding-right: 30px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-4 {\n padding-left: 40px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-4 {\n padding-right: 40px; }\n .ag-material .ag-ltr .ag-row-group-indent-4 {\n padding-left: 40px; }\n .ag-material .ag-rtl .ag-row-group-indent-4 {\n padding-right: 40px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-5 {\n padding-left: 50px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-5 {\n padding-right: 50px; }\n .ag-material .ag-ltr .ag-row-group-indent-5 {\n padding-left: 50px; }\n .ag-material .ag-rtl .ag-row-group-indent-5 {\n padding-right: 50px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-6 {\n padding-left: 60px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-6 {\n padding-right: 60px; }\n .ag-material .ag-ltr .ag-row-group-indent-6 {\n padding-left: 60px; }\n .ag-material .ag-rtl .ag-row-group-indent-6 {\n padding-right: 60px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-7 {\n padding-left: 70px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-7 {\n padding-right: 70px; }\n .ag-material .ag-ltr .ag-row-group-indent-7 {\n padding-left: 70px; }\n .ag-material .ag-rtl .ag-row-group-indent-7 {\n padding-right: 70px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-8 {\n padding-left: 80px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-8 {\n padding-right: 80px; }\n .ag-material .ag-ltr .ag-row-group-indent-8 {\n padding-left: 80px; }\n .ag-material .ag-rtl .ag-row-group-indent-8 {\n padding-right: 80px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-9 {\n padding-left: 90px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-9 {\n padding-right: 90px; }\n .ag-material .ag-ltr .ag-row-group-indent-9 {\n padding-left: 90px; }\n .ag-material .ag-rtl .ag-row-group-indent-9 {\n padding-right: 90px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-10 {\n padding-left: 100px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-10 {\n padding-right: 100px; }\n .ag-material .ag-ltr .ag-row-group-indent-10 {\n padding-left: 100px; }\n .ag-material .ag-rtl .ag-row-group-indent-10 {\n padding-right: 100px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-11 {\n padding-left: 110px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-11 {\n padding-right: 110px; }\n .ag-material .ag-ltr .ag-row-group-indent-11 {\n padding-left: 110px; }\n .ag-material .ag-rtl .ag-row-group-indent-11 {\n padding-right: 110px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-12 {\n padding-left: 120px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-12 {\n padding-right: 120px; }\n .ag-material .ag-ltr .ag-row-group-indent-12 {\n padding-left: 120px; }\n .ag-material .ag-rtl .ag-row-group-indent-12 {\n padding-right: 120px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-13 {\n padding-left: 130px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-13 {\n padding-right: 130px; }\n .ag-material .ag-ltr .ag-row-group-indent-13 {\n padding-left: 130px; }\n .ag-material .ag-rtl .ag-row-group-indent-13 {\n padding-right: 130px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-14 {\n padding-left: 140px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-14 {\n padding-right: 140px; }\n .ag-material .ag-ltr .ag-row-group-indent-14 {\n padding-left: 140px; }\n .ag-material .ag-rtl .ag-row-group-indent-14 {\n padding-right: 140px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-15 {\n padding-left: 150px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-15 {\n padding-right: 150px; }\n .ag-material .ag-ltr .ag-row-group-indent-15 {\n padding-left: 150px; }\n .ag-material .ag-rtl .ag-row-group-indent-15 {\n padding-right: 150px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-16 {\n padding-left: 160px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-16 {\n padding-right: 160px; }\n .ag-material .ag-ltr .ag-row-group-indent-16 {\n padding-left: 160px; }\n .ag-material .ag-rtl .ag-row-group-indent-16 {\n padding-right: 160px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-17 {\n padding-left: 170px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-17 {\n padding-right: 170px; }\n .ag-material .ag-ltr .ag-row-group-indent-17 {\n padding-left: 170px; }\n .ag-material .ag-rtl .ag-row-group-indent-17 {\n padding-right: 170px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-18 {\n padding-left: 180px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-18 {\n padding-right: 180px; }\n .ag-material .ag-ltr .ag-row-group-indent-18 {\n padding-left: 180px; }\n .ag-material .ag-rtl .ag-row-group-indent-18 {\n padding-right: 180px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-19 {\n padding-left: 190px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-19 {\n padding-right: 190px; }\n .ag-material .ag-ltr .ag-row-group-indent-19 {\n padding-left: 190px; }\n .ag-material .ag-rtl .ag-row-group-indent-19 {\n padding-right: 190px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-20 {\n padding-left: 200px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-20 {\n padding-right: 200px; }\n .ag-material .ag-ltr .ag-row-group-indent-20 {\n padding-left: 200px; }\n .ag-material .ag-rtl .ag-row-group-indent-20 {\n padding-right: 200px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-21 {\n padding-left: 210px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-21 {\n padding-right: 210px; }\n .ag-material .ag-ltr .ag-row-group-indent-21 {\n padding-left: 210px; }\n .ag-material .ag-rtl .ag-row-group-indent-21 {\n padding-right: 210px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-22 {\n padding-left: 220px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-22 {\n padding-right: 220px; }\n .ag-material .ag-ltr .ag-row-group-indent-22 {\n padding-left: 220px; }\n .ag-material .ag-rtl .ag-row-group-indent-22 {\n padding-right: 220px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-23 {\n padding-left: 230px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-23 {\n padding-right: 230px; }\n .ag-material .ag-ltr .ag-row-group-indent-23 {\n padding-left: 230px; }\n .ag-material .ag-rtl .ag-row-group-indent-23 {\n padding-right: 230px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-24 {\n padding-left: 240px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-24 {\n padding-right: 240px; }\n .ag-material .ag-ltr .ag-row-group-indent-24 {\n padding-left: 240px; }\n .ag-material .ag-rtl .ag-row-group-indent-24 {\n padding-right: 240px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-25 {\n padding-left: 250px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-25 {\n padding-right: 250px; }\n .ag-material .ag-ltr .ag-row-group-indent-25 {\n padding-left: 250px; }\n .ag-material .ag-rtl .ag-row-group-indent-25 {\n padding-right: 250px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-26 {\n padding-left: 260px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-26 {\n padding-right: 260px; }\n .ag-material .ag-ltr .ag-row-group-indent-26 {\n padding-left: 260px; }\n .ag-material .ag-rtl .ag-row-group-indent-26 {\n padding-right: 260px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-27 {\n padding-left: 270px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-27 {\n padding-right: 270px; }\n .ag-material .ag-ltr .ag-row-group-indent-27 {\n padding-left: 270px; }\n .ag-material .ag-rtl .ag-row-group-indent-27 {\n padding-right: 270px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-28 {\n padding-left: 280px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-28 {\n padding-right: 280px; }\n .ag-material .ag-ltr .ag-row-group-indent-28 {\n padding-left: 280px; }\n .ag-material .ag-rtl .ag-row-group-indent-28 {\n padding-right: 280px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-29 {\n padding-left: 290px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-29 {\n padding-right: 290px; }\n .ag-material .ag-ltr .ag-row-group-indent-29 {\n padding-left: 290px; }\n .ag-material .ag-rtl .ag-row-group-indent-29 {\n padding-right: 290px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-30 {\n padding-left: 300px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-30 {\n padding-right: 300px; }\n .ag-material .ag-ltr .ag-row-group-indent-30 {\n padding-left: 300px; }\n .ag-material .ag-rtl .ag-row-group-indent-30 {\n padding-right: 300px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-31 {\n padding-left: 310px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-31 {\n padding-right: 310px; }\n .ag-material .ag-ltr .ag-row-group-indent-31 {\n padding-left: 310px; }\n .ag-material .ag-rtl .ag-row-group-indent-31 {\n padding-right: 310px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-32 {\n padding-left: 320px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-32 {\n padding-right: 320px; }\n .ag-material .ag-ltr .ag-row-group-indent-32 {\n padding-left: 320px; }\n .ag-material .ag-rtl .ag-row-group-indent-32 {\n padding-right: 320px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-33 {\n padding-left: 330px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-33 {\n padding-right: 330px; }\n .ag-material .ag-ltr .ag-row-group-indent-33 {\n padding-left: 330px; }\n .ag-material .ag-rtl .ag-row-group-indent-33 {\n padding-right: 330px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-34 {\n padding-left: 340px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-34 {\n padding-right: 340px; }\n .ag-material .ag-ltr .ag-row-group-indent-34 {\n padding-left: 340px; }\n .ag-material .ag-rtl .ag-row-group-indent-34 {\n padding-right: 340px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-35 {\n padding-left: 350px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-35 {\n padding-right: 350px; }\n .ag-material .ag-ltr .ag-row-group-indent-35 {\n padding-left: 350px; }\n .ag-material .ag-rtl .ag-row-group-indent-35 {\n padding-right: 350px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-36 {\n padding-left: 360px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-36 {\n padding-right: 360px; }\n .ag-material .ag-ltr .ag-row-group-indent-36 {\n padding-left: 360px; }\n .ag-material .ag-rtl .ag-row-group-indent-36 {\n padding-right: 360px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-37 {\n padding-left: 370px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-37 {\n padding-right: 370px; }\n .ag-material .ag-ltr .ag-row-group-indent-37 {\n padding-left: 370px; }\n .ag-material .ag-rtl .ag-row-group-indent-37 {\n padding-right: 370px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-38 {\n padding-left: 380px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-38 {\n padding-right: 380px; }\n .ag-material .ag-ltr .ag-row-group-indent-38 {\n padding-left: 380px; }\n .ag-material .ag-rtl .ag-row-group-indent-38 {\n padding-right: 380px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-39 {\n padding-left: 390px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-39 {\n padding-right: 390px; }\n .ag-material .ag-ltr .ag-row-group-indent-39 {\n padding-left: 390px; }\n .ag-material .ag-rtl .ag-row-group-indent-39 {\n padding-right: 390px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-40 {\n padding-left: 400px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-40 {\n padding-right: 400px; }\n .ag-material .ag-ltr .ag-row-group-indent-40 {\n padding-left: 400px; }\n .ag-material .ag-rtl .ag-row-group-indent-40 {\n padding-right: 400px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-41 {\n padding-left: 410px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-41 {\n padding-right: 410px; }\n .ag-material .ag-ltr .ag-row-group-indent-41 {\n padding-left: 410px; }\n .ag-material .ag-rtl .ag-row-group-indent-41 {\n padding-right: 410px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-42 {\n padding-left: 420px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-42 {\n padding-right: 420px; }\n .ag-material .ag-ltr .ag-row-group-indent-42 {\n padding-left: 420px; }\n .ag-material .ag-rtl .ag-row-group-indent-42 {\n padding-right: 420px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-43 {\n padding-left: 430px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-43 {\n padding-right: 430px; }\n .ag-material .ag-ltr .ag-row-group-indent-43 {\n padding-left: 430px; }\n .ag-material .ag-rtl .ag-row-group-indent-43 {\n padding-right: 430px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-44 {\n padding-left: 440px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-44 {\n padding-right: 440px; }\n .ag-material .ag-ltr .ag-row-group-indent-44 {\n padding-left: 440px; }\n .ag-material .ag-rtl .ag-row-group-indent-44 {\n padding-right: 440px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-45 {\n padding-left: 450px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-45 {\n padding-right: 450px; }\n .ag-material .ag-ltr .ag-row-group-indent-45 {\n padding-left: 450px; }\n .ag-material .ag-rtl .ag-row-group-indent-45 {\n padding-right: 450px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-46 {\n padding-left: 460px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-46 {\n padding-right: 460px; }\n .ag-material .ag-ltr .ag-row-group-indent-46 {\n padding-left: 460px; }\n .ag-material .ag-rtl .ag-row-group-indent-46 {\n padding-right: 460px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-47 {\n padding-left: 470px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-47 {\n padding-right: 470px; }\n .ag-material .ag-ltr .ag-row-group-indent-47 {\n padding-left: 470px; }\n .ag-material .ag-rtl .ag-row-group-indent-47 {\n padding-right: 470px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-48 {\n padding-left: 480px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-48 {\n padding-right: 480px; }\n .ag-material .ag-ltr .ag-row-group-indent-48 {\n padding-left: 480px; }\n .ag-material .ag-rtl .ag-row-group-indent-48 {\n padding-right: 480px; }\n .ag-material .ag-ltr .ag-toolpanel-indent-49 {\n padding-left: 490px; }\n .ag-material .ag-rtl .ag-toolpanel-indent-49 {\n padding-right: 490px; }\n .ag-material .ag-ltr .ag-row-group-indent-49 {\n padding-left: 490px; }\n .ag-material .ag-rtl .ag-row-group-indent-49 {\n padding-right: 490px; }\n .ag-material .ag-rtl .ag-cell-first-right-pinned {\n border-left: none; }\n .ag-material .ag-ltr .ag-cell-first-right-pinned {\n border-left: none; }\n .ag-material .ag-rtl .ag-cell-last-left-pinned {\n border-right: none; }\n .ag-material .ag-ltr .ag-cell-last-left-pinned {\n border-right: none; }\n .ag-material .ag-cell-highlight {\n border: 1px solid darkgreen; }\n .ag-material .ag-cell-highlight-animation {\n transition: border 1s; }\n .ag-material .ag-value-change-delta {\n padding-right: 2px; }\n .ag-material .ag-value-change-delta-up {\n color: darkgreen; }\n .ag-material .ag-value-change-delta-down {\n color: darkred; }\n .ag-material .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 .ag-material .ag-value-change-value-highlight {\n background-color: #cec;\n transition: background-color 0.1s; }\n .ag-material .ag-rich-select {\n font-size: 14px;\n border: none;\n background-color: white; }\n .ag-material .ag-rich-select-value {\n padding: 2px; }\n .ag-material .ag-rich-select-list {\n border-top: 1px solid #d3d3d3; }\n .ag-material .ag-rich-select-row {\n padding: 2px; }\n .ag-material .ag-rich-select-row-selected {\n background-color: #BDE2E5; }\n .ag-material .ag-large-text {\n border: none; }\n .ag-material .ag-header-select-all,\n .ag-material .ag-header-cell-menu-button {\n margin-top: 3px;\n line-height: 1rem; }\n .ag-material .ag-header-select-all {\n padding-right: 4px; }\n .ag-material .ag-filter-header-container > label {\n margin-bottom: 0; }\n .ag-material .ag-header-cell {\n padding: 2px;\n padding-top: 4px; }\n .ag-material .ag-header {\n color: #666;\n background: none;\n border-bottom: none;\n font-weight: bold; }\n .ag-material .ag-header-icon {\n color: #666;\n stroke: none;\n fill: #666; }\n .ag-material .ag-filter-icon {\n display: inline-block; }\n .ag-material .ag-sort-ascending-icon:empty {\n display: inline-block;\n width: 12px;\n height: 12px;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDNoMnY5SDV6Ii8+PHBhdGggZD0iTTguOTkzIDUuMlYzLjQ5M2gtNnY2SDQuN1Y1LjJoNC4yOTN6IiBpZD0iYiIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik01LjUgMy41aDF2OGgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSg0NSA1Ljk5MyA2LjQ5MykiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2IiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik04LjQ5MyA0Ljd2LS43MDdoLTV2NUg0LjJWNC43aDQuMjkzeiIvPjwvZz48L2c+PC9zdmc+) center no-repeat;\n background-size: 12px 12px;\n filter: \"initial\"; }\n .ag-material .ag-sort-descending-icon:empty {\n display: inline-block;\n width: 12px;\n height: 12px;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDJoMnY5SDV6Ii8+PHBhdGggZD0iTTguOTkzIDYuMVY0LjM5M2gtNnY2SDQuN1Y2LjFoNC4yOTN6IiBpZD0iYiIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik01LjUgMi41aDF2OGgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtMTM1IDUuOTkzIDcuMzkzKSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjYiIvPjxwYXRoIHN0cm9rZT0iIzAwMCIgZD0iTTguNDkzIDUuNnYtLjcwN2gtNXY1SDQuMlY1LjZoNC4yOTN6Ii8+PC9nPjwvZz48L3N2Zz4=) center no-repeat;\n background-size: 12px 12px;\n filter: \"initial\"; }\n .ag-material .ag-sort-none-icon:empty {\n display: inline-block;\n width: 12px;\n height: 12px;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDNoMnY2SDV6Ii8+PHBhdGggZD0iTTguMTQ2IDguMTgyVjYuNDc1aC01djVoMS43MDhWOC4xODJoMy4yOTJ6IiBpZD0iYiIvPjxwYXRoIGQ9Ik04LjUgMi45MTRWMS4yMDdoLTV2NWgxLjcwN1YyLjkxNEg4LjV6IiBpZD0iYyIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik01LjUgMy41aDF2NWgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtMTM1IDUuNjQ2IDguNDc1KSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjYiIvPjxwYXRoIHN0cm9rZT0iIzAwMCIgZD0iTTcuNjQ2IDcuNjgydi0uNzA3aC00djRoLjcwOFY3LjY4MmgzLjI5MnoiLz48L2c+PGcgdHJhbnNmb3JtPSJyb3RhdGUoNDUgNiAzLjcwNykiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2MiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik04IDIuNDE0di0uNzA3SDR2NGguNzA3VjIuNDE0SDh6Ii8+PC9nPjwvZz48L3N2Zz4=) center no-repeat;\n background-size: 12px 12px;\n filter: \"initial\"; }\n .ag-material .ag-layout-for-print .ag-header-container {\n background: none;\n border-bottom: none; }\n .ag-material .ag-ltr .ag-header-cell {\n border-right: none; }\n .ag-material .ag-rtl .ag-header-cell {\n border-left: none; }\n .ag-material .ag-header-cell-moving .ag-header-cell-label {\n opacity: 0.5; }\n .ag-material .ag-header-cell-moving {\n background-color: #bebebe; }\n .ag-material .ag-ltr .ag-header-group-cell {\n border-right: none; }\n .ag-material .ag-rtl .ag-header-group-cell {\n border-left: none; }\n .ag-material .ag-header-group-cell-with-group {\n border-bottom: none; }\n .ag-material .ag-header-group-cell-label {\n padding: 2px;\n padding-top: 4px; }\n .ag-material .ag-rtl .ag-header-group-text {\n margin-left: 2px; }\n .ag-material .ag-ltr .ag-header-group-text {\n margin-right: 2px; }\n .ag-material .ag-header-cell-menu-button:empty {\n width: 12px;\n height: 12px;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAxaDEwdjJIMXptMCA0aDEwdjJIMXptMCA0aDEwdjJIMXoiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat;\n background-size: 12px 12px;\n filter: \"initial\"; }\n .ag-material .ag-ltr .ag-pinned-right-header {\n border-left: none; }\n .ag-material .ag-rtl .ag-pinned-left-header {\n border-right: none; }\n .ag-material .ag-body {\n background-color: #fff; }\n .ag-material .ag-row-odd {\n background-color: white; }\n .ag-material .ag-row-even {\n background-color: white; }\n .ag-material .ag-row-selected {\n background-color: #F5F5F5; }\n .ag-material .ag-row-stub {\n background-color: #f0f0f0; }\n .ag-material .ag-stub-cell {\n padding: 2px 2px 2px 10px; }\n .ag-material .ag-floating-top {\n background-color: #f0f0f0; }\n .ag-material .ag-floating-top .ag-row {\n background-color: #f0f0f0; }\n .ag-material .ag-floating-bottom {\n background-color: #f0f0f0; }\n .ag-material .ag-floating-bottom .ag-row {\n background-color: #f0f0f0; }\n .ag-material .ag-overlay-loading-wrapper {\n background-color: rgba(255, 255, 255, 0.5); }\n .ag-material .ag-overlay-loading-center {\n background-color: #ffffff;\n border: none;\n border-radius: 10px;\n padding: 10px;\n color: black; }\n .ag-material .ag-overlay-no-rows-center {\n background-color: #ffffff;\n border: none;\n border-radius: 10px;\n padding: 10px; }\n .ag-material .ag-group-cell-entire-row {\n background-color: #fff;\n padding: 2px; }\n .ag-material .ag-footer-cell-entire-row {\n background-color: #fff;\n padding: 2px; }\n .ag-material .ag-group-cell {\n font-style: italic; }\n .ag-material .ag-ltr .ag-group-expanded {\n padding-right: 4px; }\n .ag-material .ag-rtl .ag-group-expanded {\n padding-left: 4px; }\n .ag-material .ag-ltr .ag-group-contracted {\n padding-right: 4px; }\n .ag-material .ag-rtl .ag-group-contracted {\n padding-left: 4px; }\n .ag-material .ag-ltr .ag-group-loading {\n padding-right: 4px; }\n .ag-material .ag-rtl .ag-group-loading {\n padding-left: 4px; }\n .ag-material .ag-ltr .ag-group-value {\n padding-right: 2px; }\n .ag-material .ag-rtl .ag-group-value {\n padding-left: 2px; }\n .ag-material .ag-ltr .ag-group-checkbox {\n padding-right: 2px; }\n .ag-material .ag-rtl .ag-group-checkbox {\n padding-left: 2px; }\n .ag-material .ag-group-child-count {\n /* display: inline-block; */ }\n .ag-material .ag-footer-cell {\n font-style: italic; }\n .ag-material .ag-menu {\n border: 1px solid #808080;\n background-color: #fff;\n cursor: default;\n font-family: Roboto;\n font-size: 14px; }\n .ag-material .ag-menu .ag-tab-header {\n background-color: #f6f6f6; }\n .ag-material .ag-menu .ag-tab {\n padding: 6px 16px 6px 16px;\n margin: 2px 2px 0px 2px;\n display: inline-block;\n border-right: 1px solid transparent;\n border-left: 1px solid transparent;\n border-top: 1px solid transparent;\n border-top-right-radius: 2px;\n border-top-left-radius: 2px; }\n .ag-material .ag-menu .ag-tab-selected {\n background-color: #fff;\n border-right: 1px solid transparent;\n border-left: 1px solid transparent;\n border-top: 1px solid transparent; }\n .ag-material .ag-menu-separator {\n border-top: 1px solid #d3d3d3; }\n .ag-material .ag-menu-option-active {\n background-color: #BDE2E5; }\n .ag-material .ag-menu-option-icon {\n padding: 10px 6px 10px 6px;\n vertical-align: middle; }\n .ag-material .ag-menu-option-text {\n padding: 10px 6px 10px 6px;\n vertical-align: middle; }\n .ag-material .ag-menu-option-shortcut {\n padding: 10px 6px 10px 6px;\n vertical-align: middle; }\n .ag-material .ag-menu-option-popup-pointer {\n padding: 10px 6px 10px 6px;\n vertical-align: middle;\n display: table-cell; }\n .ag-material .ag-menu-option-disabled {\n opacity: 0.5; }\n .ag-material .ag-menu-column-select-wrapper {\n margin: 2px; }\n .ag-material .ag-filter-checkbox {\n margin-right: 4px;\n margin-bottom: 0;\n display: inline-block; }\n .ag-material .ag-filter-header-container {\n padding: 2px 4px 2px 4px;\n border-bottom: 1px solid #d3d3d3; }\n .ag-material .ag-filter-apply-panel {\n border-top: 1px solid #d3d3d3;\n padding: 2px 0px 2px 4px; }\n .ag-material .ag-virtual-list-container {\n padding: 4px 4px 10px 4px; }\n .ag-material .ag-ltr .ag-selection-checkbox {\n padding-right: 4px; }\n .ag-material .ag-rtl .ag-selection-checkbox {\n padding-left: 4px; }\n .ag-material .ag-paging-panel {\n padding: 4px; }\n .ag-material .ag-paging-button {\n margin-left: 4px;\n margin-right: 4px; }\n .ag-material .ag-paging-row-summary-panel {\n display: inline-block;\n width: 300px; }\n .ag-material .ag-column-panel {\n background-color: #fff;\n border-bottom: none;\n border-top: none;\n color: #666; }\n .ag-material .ltr .ag-column-panel {\n border-right: none; }\n .ag-material .rtl .ag-column-panel {\n border-left: none; }\n .ag-material .ag-status-bar {\n color: #666;\n background-color: #fff;\n font-size: 14px;\n height: 22px;\n border-bottom: none;\n border-left: none;\n border-right: none;\n padding: 2px; }\n .ag-material .ag-status-bar-aggregations {\n float: right; }\n .ag-material .ag-status-bar-item {\n padding-left: 10px; }\n .ag-material .ag-column-drop-cell {\n background: none;\n color: #000;\n border: 1px solid #808080; }\n .ag-material .ag-column-drop-cell-ghost {\n opacity: 0.5; }\n .ag-material .ag-column-drop-cell-text {\n padding-left: 2px;\n padding-right: 2px; }\n .ag-material .ag-column-drop-cell-button {\n border: 1px solid transparent;\n padding-left: 2px;\n padding-right: 2px;\n border-radius: 3px; }\n .ag-material .ag-column-drop-cell-button:hover {\n border: none; }\n .ag-material .ag-column-drop-empty-message {\n padding-left: 2px;\n padding-right: 2px;\n color: grey; }\n .ag-material .ag-column-drop-icon {\n margin: 6px 3px 0px 3px; }\n .ag-material .ag-column-drop {\n background-color: #fff; }\n .ag-material .ag-column-drop-horizontal {\n padding: 2px;\n border-top: none;\n border-left: none;\n border-right: none; }\n .ag-material .ag-column-drop-vertical {\n padding: 4px 4px 10px 4px;\n border-bottom: none;\n overflow: auto; }\n .ag-material .ag-column-drop-vertical .ag-column-drop-cell {\n margin-top: 2px; }\n .ag-material .ag-column-drop-vertical .ag-column-drop-empty-message {\n padding: 5px; }\n .ag-material .ag-pivot-mode {\n border-bottom: none;\n padding: 2px 4px 3px 4px;\n background-color: #fff; }\n .ag-material .ag-column-panel .ag-column-select-panel {\n padding: 4px 4px 10px 4px;\n padding-left: 0;\n border-bottom: none;\n overflow: auto; }\n .ag-material .ag-select-agg-func-popup {\n cursor: default;\n position: absolute;\n font-size: 14px;\n background-color: white;\n border: none; }\n .ag-material .ag-select-agg-func-item {\n padding-left: 2px;\n padding-right: 2px; }\n .ag-material .ag-select-agg-func-item:hover {\n background-color: #BDE2E5; }\n .ag-material .ag-floating-filter-body {\n margin-right: 20px;\n width: calc(100% - 20px); }\n .ag-material .ag-floating-filter-button {\n margin-top: -20px;\n display: inline-block;\n float: right; }\n .ag-material .ag-floating-filter-button button {\n border: 0;\n background: transparent;\n padding: 3px;\n margin: 0; }\n .ag-material .ag-rtl .ag-floating-filter-body {\n margin-right: 0;\n margin-left: 20px;\n float: right; }\n .ag-material .ag-rtl .ag-floating-filter-button {\n float: left; }\n .ag-material .ag-sort-order {\n margin-left: 0.5em;\n font-size: 0.8em; }\n .ag-material .ag-sort-order::before {\n content: \"(\"; }\n .ag-material .ag-sort-order::after {\n content: \")\"; }\n .ag-material .ag-details-row {\n padding: 20px;\n box-sizing: border-box; }\n\n.ag-material .ag-row-hover {\n background-color: #eeeeee !important; }\n\n.ag-material .ag-cell-not-inline-editing {\n padding-top: 15px; }\n\n.ag-material .ag-header-cell-menu-button:hover {\n border: 1px solid grey; }\n\n.ag-material .ag-header-cell-label {\n text-align: left; }\n\n.ag-material .ag-header {\n border-bottom: 1px solid grey; }\n\n.ag-material .ag-selection-checkbox {\n padding-right: 12px;\n padding-left: 12px; }\n", ""]);
36551
36552// exports
36553
36554
36555/***/ }),
36556/* 159 */
36557/***/ (function(module, exports, __webpack_require__) {
36558
36559// style-loader: Adds some css to the DOM by adding a <style> tag
36560
36561// load the styles
36562var content = __webpack_require__(160);
36563if(typeof content === 'string') content = [[module.i, content, '']];
36564// add the styles to the DOM
36565var update = __webpack_require__(15)(content, {});
36566if(content.locals) module.exports = content.locals;
36567// Hot Module Replacement
36568if(false) {
36569 // When the styles change, update the <style> tags
36570 if(!content.locals) {
36571 module.hot.accept("!!../../node_modules/css-loader/index.js!./theme-bootstrap.css", function() {
36572 var newContent = require("!!../../node_modules/css-loader/index.js!./theme-bootstrap.css");
36573 if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
36574 update(newContent);
36575 });
36576 }
36577 // When the module is disposed, remove the <style> tags
36578 module.hot.dispose(function() { update(); });
36579}
36580
36581/***/ }),
36582/* 160 */
36583/***/ (function(module, exports, __webpack_require__) {
36584
36585exports = module.exports = __webpack_require__(14)();
36586// imports
36587
36588
36589// module
36590exports.push([module.i, "/*\n- todo {\n- loading overlay colors {\n- rich select colors {\n */\n.ag-icon:not(.ag-faded) {\n opacity: 0.8; }\n\n.ag-bootstrap {\n line-height: 1.4;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px;\n color: #000;\n /* this is for the rowGroupPanel, that appears along the top of the grid */\n /* this is for the column drops that appear in the toolPanel */ }\n .ag-bootstrap .ag-numeric-cell {\n text-align: right; }\n .ag-bootstrap .ag-header-cell-label {\n display: flex; }\n .ag-bootstrap .ag-header-cell-label > span {\n float: left; }\n .ag-bootstrap .ag-header-cell-label .ag-header-icon {\n margin-top: 2px; }\n .ag-bootstrap .ag-header-cell-label .ag-header-cell-text {\n white-space: nowrap;\n overflow: hidden;\n text-overflow: ellipsis; }\n .ag-bootstrap .ag-numeric-header .ag-header-cell-label {\n flex-direction: row-reverse; }\n .ag-bootstrap .ag-numeric-header .ag-header-cell-menu-button {\n float: left; }\n .ag-bootstrap .ag-numeric-header .ag-header-cell-label {\n width: calc(100% - 12px);\n float: right; }\n .ag-bootstrap .ag-numeric-header .ag-header-cell-label > span {\n float: right; }\n .ag-bootstrap .ag-header-cell-resize {\n position: absolute;\n right: 0; }\n .ag-bootstrap .ag-rtl .ag-header-cell-resize {\n position: absolute;\n left: 0;\n right: auto; }\n .ag-bootstrap img {\n vertical-align: middle;\n border: 0; }\n .ag-bootstrap .ag-root {\n border: none; }\n .ag-bootstrap .ag-cell-data-changed {\n background-color: #cec; }\n .ag-bootstrap .ag-cell-data-changed-animation {\n background-color: transparent;\n transition: background-color 1s; }\n .ag-bootstrap .ag-cell-not-inline-editing {\n padding: 4px;\n /* compensate for the transparent borders; */\n padding-left: 3px; }\n .ag-bootstrap .ag-cell-range-selected-1:not(.ag-cell-focus) {\n background-color: rgba(120, 120, 120, 0.4); }\n .ag-bootstrap .ag-cell-range-selected-2:not(.ag-cell-focus) {\n background-color: rgba(80, 80, 80, 0.4); }\n .ag-bootstrap .ag-cell-range-selected-3:not(.ag-cell-focus) {\n background-color: rgba(40, 40, 40, 0.4); }\n .ag-bootstrap .ag-cell-range-selected-4:not(.ag-cell-focus) {\n background-color: rgba(0, 0, 0, 0.4); }\n .ag-bootstrap .ag-cell-focus {\n border: 2px solid #217346; }\n .ag-bootstrap .ag-cell-no-focus {\n border-top: 1px solid transparent;\n border-bottom: 1px solid transparent; }\n .ag-bootstrap .ag-ltr .ag-cell-no-focus {\n border-right: none;\n border-left: 1px solid transparent; }\n .ag-bootstrap .ag-rtl .ag-cell-no-focus {\n border-right: 1px solid transparent;\n border-left: none; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-1 {\n padding-left: 10px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-1 {\n padding-right: 10px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-1 {\n padding-left: 10px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-1 {\n padding-right: 10px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-2 {\n padding-left: 20px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-2 {\n padding-right: 20px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-2 {\n padding-left: 20px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-2 {\n padding-right: 20px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-3 {\n padding-left: 30px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-3 {\n padding-right: 30px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-3 {\n padding-left: 30px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-3 {\n padding-right: 30px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-4 {\n padding-left: 40px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-4 {\n padding-right: 40px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-4 {\n padding-left: 40px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-4 {\n padding-right: 40px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-5 {\n padding-left: 50px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-5 {\n padding-right: 50px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-5 {\n padding-left: 50px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-5 {\n padding-right: 50px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-6 {\n padding-left: 60px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-6 {\n padding-right: 60px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-6 {\n padding-left: 60px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-6 {\n padding-right: 60px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-7 {\n padding-left: 70px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-7 {\n padding-right: 70px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-7 {\n padding-left: 70px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-7 {\n padding-right: 70px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-8 {\n padding-left: 80px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-8 {\n padding-right: 80px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-8 {\n padding-left: 80px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-8 {\n padding-right: 80px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-9 {\n padding-left: 90px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-9 {\n padding-right: 90px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-9 {\n padding-left: 90px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-9 {\n padding-right: 90px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-10 {\n padding-left: 100px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-10 {\n padding-right: 100px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-10 {\n padding-left: 100px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-10 {\n padding-right: 100px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-11 {\n padding-left: 110px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-11 {\n padding-right: 110px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-11 {\n padding-left: 110px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-11 {\n padding-right: 110px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-12 {\n padding-left: 120px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-12 {\n padding-right: 120px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-12 {\n padding-left: 120px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-12 {\n padding-right: 120px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-13 {\n padding-left: 130px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-13 {\n padding-right: 130px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-13 {\n padding-left: 130px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-13 {\n padding-right: 130px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-14 {\n padding-left: 140px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-14 {\n padding-right: 140px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-14 {\n padding-left: 140px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-14 {\n padding-right: 140px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-15 {\n padding-left: 150px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-15 {\n padding-right: 150px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-15 {\n padding-left: 150px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-15 {\n padding-right: 150px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-16 {\n padding-left: 160px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-16 {\n padding-right: 160px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-16 {\n padding-left: 160px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-16 {\n padding-right: 160px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-17 {\n padding-left: 170px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-17 {\n padding-right: 170px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-17 {\n padding-left: 170px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-17 {\n padding-right: 170px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-18 {\n padding-left: 180px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-18 {\n padding-right: 180px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-18 {\n padding-left: 180px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-18 {\n padding-right: 180px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-19 {\n padding-left: 190px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-19 {\n padding-right: 190px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-19 {\n padding-left: 190px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-19 {\n padding-right: 190px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-20 {\n padding-left: 200px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-20 {\n padding-right: 200px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-20 {\n padding-left: 200px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-20 {\n padding-right: 200px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-21 {\n padding-left: 210px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-21 {\n padding-right: 210px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-21 {\n padding-left: 210px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-21 {\n padding-right: 210px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-22 {\n padding-left: 220px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-22 {\n padding-right: 220px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-22 {\n padding-left: 220px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-22 {\n padding-right: 220px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-23 {\n padding-left: 230px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-23 {\n padding-right: 230px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-23 {\n padding-left: 230px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-23 {\n padding-right: 230px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-24 {\n padding-left: 240px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-24 {\n padding-right: 240px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-24 {\n padding-left: 240px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-24 {\n padding-right: 240px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-25 {\n padding-left: 250px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-25 {\n padding-right: 250px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-25 {\n padding-left: 250px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-25 {\n padding-right: 250px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-26 {\n padding-left: 260px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-26 {\n padding-right: 260px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-26 {\n padding-left: 260px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-26 {\n padding-right: 260px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-27 {\n padding-left: 270px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-27 {\n padding-right: 270px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-27 {\n padding-left: 270px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-27 {\n padding-right: 270px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-28 {\n padding-left: 280px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-28 {\n padding-right: 280px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-28 {\n padding-left: 280px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-28 {\n padding-right: 280px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-29 {\n padding-left: 290px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-29 {\n padding-right: 290px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-29 {\n padding-left: 290px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-29 {\n padding-right: 290px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-30 {\n padding-left: 300px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-30 {\n padding-right: 300px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-30 {\n padding-left: 300px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-30 {\n padding-right: 300px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-31 {\n padding-left: 310px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-31 {\n padding-right: 310px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-31 {\n padding-left: 310px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-31 {\n padding-right: 310px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-32 {\n padding-left: 320px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-32 {\n padding-right: 320px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-32 {\n padding-left: 320px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-32 {\n padding-right: 320px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-33 {\n padding-left: 330px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-33 {\n padding-right: 330px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-33 {\n padding-left: 330px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-33 {\n padding-right: 330px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-34 {\n padding-left: 340px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-34 {\n padding-right: 340px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-34 {\n padding-left: 340px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-34 {\n padding-right: 340px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-35 {\n padding-left: 350px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-35 {\n padding-right: 350px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-35 {\n padding-left: 350px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-35 {\n padding-right: 350px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-36 {\n padding-left: 360px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-36 {\n padding-right: 360px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-36 {\n padding-left: 360px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-36 {\n padding-right: 360px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-37 {\n padding-left: 370px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-37 {\n padding-right: 370px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-37 {\n padding-left: 370px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-37 {\n padding-right: 370px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-38 {\n padding-left: 380px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-38 {\n padding-right: 380px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-38 {\n padding-left: 380px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-38 {\n padding-right: 380px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-39 {\n padding-left: 390px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-39 {\n padding-right: 390px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-39 {\n padding-left: 390px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-39 {\n padding-right: 390px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-40 {\n padding-left: 400px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-40 {\n padding-right: 400px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-40 {\n padding-left: 400px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-40 {\n padding-right: 400px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-41 {\n padding-left: 410px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-41 {\n padding-right: 410px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-41 {\n padding-left: 410px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-41 {\n padding-right: 410px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-42 {\n padding-left: 420px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-42 {\n padding-right: 420px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-42 {\n padding-left: 420px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-42 {\n padding-right: 420px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-43 {\n padding-left: 430px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-43 {\n padding-right: 430px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-43 {\n padding-left: 430px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-43 {\n padding-right: 430px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-44 {\n padding-left: 440px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-44 {\n padding-right: 440px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-44 {\n padding-left: 440px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-44 {\n padding-right: 440px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-45 {\n padding-left: 450px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-45 {\n padding-right: 450px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-45 {\n padding-left: 450px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-45 {\n padding-right: 450px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-46 {\n padding-left: 460px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-46 {\n padding-right: 460px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-46 {\n padding-left: 460px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-46 {\n padding-right: 460px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-47 {\n padding-left: 470px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-47 {\n padding-right: 470px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-47 {\n padding-left: 470px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-47 {\n padding-right: 470px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-48 {\n padding-left: 480px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-48 {\n padding-right: 480px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-48 {\n padding-left: 480px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-48 {\n padding-right: 480px; }\n .ag-bootstrap .ag-ltr .ag-toolpanel-indent-49 {\n padding-left: 490px; }\n .ag-bootstrap .ag-rtl .ag-toolpanel-indent-49 {\n padding-right: 490px; }\n .ag-bootstrap .ag-ltr .ag-row-group-indent-49 {\n padding-left: 490px; }\n .ag-bootstrap .ag-rtl .ag-row-group-indent-49 {\n padding-right: 490px; }\n .ag-bootstrap .ag-rtl .ag-cell-first-right-pinned {\n border-left: none; }\n .ag-bootstrap .ag-ltr .ag-cell-first-right-pinned {\n border-left: none; }\n .ag-bootstrap .ag-rtl .ag-cell-last-left-pinned {\n border-right: none; }\n .ag-bootstrap .ag-ltr .ag-cell-last-left-pinned {\n border-right: none; }\n .ag-bootstrap .ag-cell-highlight {\n border: 1px solid darkgreen; }\n .ag-bootstrap .ag-cell-highlight-animation {\n transition: border 1s; }\n .ag-bootstrap .ag-value-change-delta {\n padding-right: 2px; }\n .ag-bootstrap .ag-value-change-delta-up {\n color: darkgreen; }\n .ag-bootstrap .ag-value-change-delta-down {\n color: darkred; }\n .ag-bootstrap .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 .ag-bootstrap .ag-value-change-value-highlight {\n background-color: #cec;\n transition: background-color 0.1s; }\n .ag-bootstrap .ag-rich-select {\n font-size: 14px;\n border: none;\n background-color: white; }\n .ag-bootstrap .ag-rich-select-value {\n padding: 2px; }\n .ag-bootstrap .ag-rich-select-list {\n border-top: 1px solid #d3d3d3; }\n .ag-bootstrap .ag-rich-select-row {\n padding: 2px; }\n .ag-bootstrap .ag-rich-select-row-selected {\n background-color: #BDE2E5; }\n .ag-bootstrap .ag-large-text {\n border: none; }\n .ag-bootstrap .ag-header-select-all,\n .ag-bootstrap .ag-header-cell-menu-button {\n margin-top: 3px;\n line-height: 1rem; }\n .ag-bootstrap .ag-header-select-all {\n padding-right: 4px; }\n .ag-bootstrap .ag-filter-header-container > label {\n margin-bottom: 0; }\n .ag-bootstrap .ag-header-cell {\n padding: 2px;\n padding-top: 4px; }\n .ag-bootstrap .ag-header {\n color: #000;\n background: none;\n border-bottom: none;\n font-weight: 600; }\n .ag-bootstrap .ag-header-icon {\n color: #000;\n stroke: none;\n fill: #000; }\n .ag-bootstrap .ag-filter-icon {\n display: inline-block; }\n .ag-bootstrap .ag-sort-ascending-icon:empty {\n display: inline-block;\n width: 12px;\n height: 12px;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDNoMnY5SDV6Ii8+PHBhdGggZD0iTTguOTkzIDUuMlYzLjQ5M2gtNnY2SDQuN1Y1LjJoNC4yOTN6IiBpZD0iYiIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik01LjUgMy41aDF2OGgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSg0NSA1Ljk5MyA2LjQ5MykiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2IiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik04LjQ5MyA0Ljd2LS43MDdoLTV2NUg0LjJWNC43aDQuMjkzeiIvPjwvZz48L2c+PC9zdmc+) center no-repeat;\n background-size: 12px 12px;\n filter: \"initial\"; }\n .ag-bootstrap .ag-sort-descending-icon:empty {\n display: inline-block;\n width: 12px;\n height: 12px;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDJoMnY5SDV6Ii8+PHBhdGggZD0iTTguOTkzIDYuMVY0LjM5M2gtNnY2SDQuN1Y2LjFoNC4yOTN6IiBpZD0iYiIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik01LjUgMi41aDF2OGgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtMTM1IDUuOTkzIDcuMzkzKSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjYiIvPjxwYXRoIHN0cm9rZT0iIzAwMCIgZD0iTTguNDkzIDUuNnYtLjcwN2gtNXY1SDQuMlY1LjZoNC4yOTN6Ii8+PC9nPjwvZz48L3N2Zz4=) center no-repeat;\n background-size: 12px 12px;\n filter: \"initial\"; }\n .ag-bootstrap .ag-sort-none-icon:empty {\n display: inline-block;\n width: 12px;\n height: 12px;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDNoMnY2SDV6Ii8+PHBhdGggZD0iTTguMTQ2IDguMTgyVjYuNDc1aC01djVoMS43MDhWOC4xODJoMy4yOTJ6IiBpZD0iYiIvPjxwYXRoIGQ9Ik04LjUgMi45MTRWMS4yMDdoLTV2NWgxLjcwN1YyLjkxNEg4LjV6IiBpZD0iYyIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik01LjUgMy41aDF2NWgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtMTM1IDUuNjQ2IDguNDc1KSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjYiIvPjxwYXRoIHN0cm9rZT0iIzAwMCIgZD0iTTcuNjQ2IDcuNjgydi0uNzA3aC00djRoLjcwOFY3LjY4MmgzLjI5MnoiLz48L2c+PGcgdHJhbnNmb3JtPSJyb3RhdGUoNDUgNiAzLjcwNykiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2MiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik04IDIuNDE0di0uNzA3SDR2NGguNzA3VjIuNDE0SDh6Ii8+PC9nPjwvZz48L3N2Zz4=) center no-repeat;\n background-size: 12px 12px;\n filter: \"initial\"; }\n .ag-bootstrap .ag-layout-for-print .ag-header-container {\n background: none;\n border-bottom: none; }\n .ag-bootstrap .ag-ltr .ag-header-cell {\n border-right: none; }\n .ag-bootstrap .ag-rtl .ag-header-cell {\n border-left: none; }\n .ag-bootstrap .ag-header-cell-moving .ag-header-cell-label {\n opacity: 0.5; }\n .ag-bootstrap .ag-header-cell-moving {\n background-color: #bebebe; }\n .ag-bootstrap .ag-ltr .ag-header-group-cell {\n border-right: none; }\n .ag-bootstrap .ag-rtl .ag-header-group-cell {\n border-left: none; }\n .ag-bootstrap .ag-header-group-cell-with-group {\n border-bottom: none; }\n .ag-bootstrap .ag-header-group-cell-label {\n padding: 2px;\n padding-top: 4px; }\n .ag-bootstrap .ag-rtl .ag-header-group-text {\n margin-left: 2px; }\n .ag-bootstrap .ag-ltr .ag-header-group-text {\n margin-right: 2px; }\n .ag-bootstrap .ag-header-cell-menu-button:empty {\n width: 12px;\n height: 12px;\n background: transparent url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAxaDEwdjJIMXptMCA0aDEwdjJIMXptMCA0aDEwdjJIMXoiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==) center no-repeat;\n background-size: 12px 12px;\n filter: \"initial\"; }\n .ag-bootstrap .ag-ltr .ag-pinned-right-header {\n border-left: none; }\n .ag-bootstrap .ag-rtl .ag-pinned-left-header {\n border-right: none; }\n .ag-bootstrap .ag-body {\n background-color: #f6f6f6; }\n .ag-bootstrap .ag-row-odd {\n background-color: #f6f6f6; }\n .ag-bootstrap .ag-row-even {\n background-color: white; }\n .ag-bootstrap .ag-row-selected {\n background-color: powderblue; }\n .ag-bootstrap .ag-row-stub {\n background-color: #f0f0f0; }\n .ag-bootstrap .ag-stub-cell {\n padding: 2px 2px 2px 10px; }\n .ag-bootstrap .ag-floating-top {\n background-color: #f0f0f0; }\n .ag-bootstrap .ag-floating-top .ag-row {\n background-color: #f0f0f0; }\n .ag-bootstrap .ag-floating-bottom {\n background-color: #f0f0f0; }\n .ag-bootstrap .ag-floating-bottom .ag-row {\n background-color: #f0f0f0; }\n .ag-bootstrap .ag-overlay-loading-wrapper {\n background-color: rgba(255, 255, 255, 0.5); }\n .ag-bootstrap .ag-overlay-loading-center {\n background-color: #ffffff;\n border: none;\n border-radius: 10px;\n padding: 10px;\n color: black; }\n .ag-bootstrap .ag-overlay-no-rows-center {\n background-color: #ffffff;\n border: none;\n border-radius: 10px;\n padding: 10px; }\n .ag-bootstrap .ag-group-cell-entire-row {\n background-color: #f6f6f6;\n padding: 4px; }\n .ag-bootstrap .ag-footer-cell-entire-row {\n background-color: #f6f6f6;\n padding: 4px; }\n .ag-bootstrap .ag-group-cell {\n font-style: italic; }\n .ag-bootstrap .ag-ltr .ag-group-expanded {\n padding-right: 4px; }\n .ag-bootstrap .ag-rtl .ag-group-expanded {\n padding-left: 4px; }\n .ag-bootstrap .ag-ltr .ag-group-contracted {\n padding-right: 4px; }\n .ag-bootstrap .ag-rtl .ag-group-contracted {\n padding-left: 4px; }\n .ag-bootstrap .ag-ltr .ag-group-loading {\n padding-right: 4px; }\n .ag-bootstrap .ag-rtl .ag-group-loading {\n padding-left: 4px; }\n .ag-bootstrap .ag-ltr .ag-group-value {\n padding-right: 2px; }\n .ag-bootstrap .ag-rtl .ag-group-value {\n padding-left: 2px; }\n .ag-bootstrap .ag-ltr .ag-group-checkbox {\n padding-right: 2px; }\n .ag-bootstrap .ag-rtl .ag-group-checkbox {\n padding-left: 2px; }\n .ag-bootstrap .ag-group-child-count {\n /* display: inline-block; */ }\n .ag-bootstrap .ag-footer-cell {\n font-style: italic; }\n .ag-bootstrap .ag-menu {\n border: 1px solid #808080;\n background-color: #f6f6f6;\n cursor: default;\n font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 14px; }\n .ag-bootstrap .ag-menu .ag-tab-header {\n background-color: #e6e6e6; }\n .ag-bootstrap .ag-menu .ag-tab {\n padding: 6px 8px 6px 8px;\n margin: 2px 2px 0px 2px;\n display: inline-block;\n border-right: 1px solid transparent;\n border-left: 1px solid transparent;\n border-top: 1px solid transparent;\n border-top-right-radius: 2px;\n border-top-left-radius: 2px; }\n .ag-bootstrap .ag-menu .ag-tab-selected {\n background-color: #f6f6f6;\n border-right: 1px solid #d3d3d3;\n border-left: 1px solid #d3d3d3;\n border-top: 1px solid #d3d3d3; }\n .ag-bootstrap .ag-menu-separator {\n border-top: 1px solid #d3d3d3; }\n .ag-bootstrap .ag-menu-option-active {\n background-color: #BDE2E5; }\n .ag-bootstrap .ag-menu-option-icon {\n padding: 2px 4px 2px 4px;\n vertical-align: middle; }\n .ag-bootstrap .ag-menu-option-text {\n padding: 2px 4px 2px 4px;\n vertical-align: middle; }\n .ag-bootstrap .ag-menu-option-shortcut {\n padding: 2px 2px 2px 2px;\n vertical-align: middle; }\n .ag-bootstrap .ag-menu-option-popup-pointer {\n padding: 2px 4px 2px 4px;\n vertical-align: middle;\n display: table-cell; }\n .ag-bootstrap .ag-menu-option-disabled {\n opacity: 0.5; }\n .ag-bootstrap .ag-menu-column-select-wrapper {\n margin: 2px; }\n .ag-bootstrap .ag-filter-checkbox {\n margin-right: 4px;\n margin-bottom: 0;\n display: inline-block; }\n .ag-bootstrap .ag-filter-header-container {\n padding: 2px 4px 2px 4px;\n border-bottom: 1px solid #d3d3d3; }\n .ag-bootstrap .ag-filter-apply-panel {\n border-top: 1px solid #d3d3d3;\n padding: 2px 0px 2px 4px; }\n .ag-bootstrap .ag-virtual-list-container {\n padding: 4px 4px 10px 4px; }\n .ag-bootstrap .ag-ltr .ag-selection-checkbox {\n padding-right: 4px; }\n .ag-bootstrap .ag-rtl .ag-selection-checkbox {\n padding-left: 4px; }\n .ag-bootstrap .ag-paging-panel {\n padding: 4px; }\n .ag-bootstrap .ag-paging-button {\n margin-left: 4px;\n margin-right: 4px; }\n .ag-bootstrap .ag-paging-row-summary-panel {\n display: inline-block;\n width: 300px; }\n .ag-bootstrap .ag-column-panel {\n background-color: #f6f6f6;\n border-bottom: none;\n border-top: none;\n color: #000; }\n .ag-bootstrap .ltr .ag-column-panel {\n border-right: none; }\n .ag-bootstrap .rtl .ag-column-panel {\n border-left: none; }\n .ag-bootstrap .ag-status-bar {\n color: #000;\n background-color: #f6f6f6;\n font-size: 14px;\n height: 22px;\n border-bottom: none;\n border-left: none;\n border-right: none;\n padding: 2px; }\n .ag-bootstrap .ag-status-bar-aggregations {\n float: right; }\n .ag-bootstrap .ag-status-bar-item {\n padding-left: 10px; }\n .ag-bootstrap .ag-column-drop-cell {\n background: none;\n color: #000;\n border: 1px solid #808080; }\n .ag-bootstrap .ag-column-drop-cell-ghost {\n opacity: 0.5; }\n .ag-bootstrap .ag-column-drop-cell-text {\n padding-left: 2px;\n padding-right: 2px; }\n .ag-bootstrap .ag-column-drop-cell-button {\n border: 1px solid transparent;\n padding-left: 2px;\n padding-right: 2px;\n border-radius: 3px; }\n .ag-bootstrap .ag-column-drop-cell-button:hover {\n border: none; }\n .ag-bootstrap .ag-column-drop-empty-message {\n padding-left: 2px;\n padding-right: 2px;\n color: grey; }\n .ag-bootstrap .ag-column-drop-icon {\n margin: 6px 3px 0px 3px; }\n .ag-bootstrap .ag-column-drop {\n background-color: #f6f6f6; }\n .ag-bootstrap .ag-column-drop-horizontal {\n padding: 2px;\n border-top: none;\n border-left: none;\n border-right: none; }\n .ag-bootstrap .ag-column-drop-vertical {\n padding: 4px 4px 10px 4px;\n border-bottom: none;\n overflow: auto; }\n .ag-bootstrap .ag-column-drop-vertical .ag-column-drop-cell {\n margin-top: 2px; }\n .ag-bootstrap .ag-column-drop-vertical .ag-column-drop-empty-message {\n padding: 5px; }\n .ag-bootstrap .ag-pivot-mode {\n border-bottom: none;\n padding: 2px 4px 3px 4px;\n background-color: #f6f6f6; }\n .ag-bootstrap .ag-column-panel .ag-column-select-panel {\n padding: 4px 4px 10px 4px;\n padding-left: 0;\n border-bottom: none;\n overflow: auto; }\n .ag-bootstrap .ag-select-agg-func-popup {\n cursor: default;\n position: absolute;\n font-size: 14px;\n background-color: white;\n border: none; }\n .ag-bootstrap .ag-select-agg-func-item {\n padding-left: 2px;\n padding-right: 2px; }\n .ag-bootstrap .ag-select-agg-func-item:hover {\n background-color: #BDE2E5; }\n .ag-bootstrap .ag-floating-filter-body {\n margin-right: 20px;\n width: calc(100% - 20px); }\n .ag-bootstrap .ag-floating-filter-button {\n margin-top: -20px;\n display: inline-block;\n float: right; }\n .ag-bootstrap .ag-floating-filter-button button {\n border: 0;\n background: transparent;\n padding: 3px;\n margin: 0; }\n .ag-bootstrap .ag-rtl .ag-floating-filter-body {\n margin-right: 0;\n margin-left: 20px;\n float: right; }\n .ag-bootstrap .ag-rtl .ag-floating-filter-button {\n float: left; }\n .ag-bootstrap .ag-sort-order {\n margin-left: 0.5em;\n font-size: 0.8em; }\n .ag-bootstrap .ag-sort-order::before {\n content: \"(\"; }\n .ag-bootstrap .ag-sort-order::after {\n content: \")\"; }\n .ag-bootstrap .ag-details-row {\n padding: 20px;\n box-sizing: border-box; }\n", ""]);
36591
36592// exports
36593
36594
36595/***/ }),
36596/* 161 */
36597/***/ (function(module, exports, __webpack_require__) {
36598
36599// style-loader: Adds some css to the DOM by adding a <style> tag
36600
36601// load the styles
36602var content = __webpack_require__(162);
36603if(typeof content === 'string') content = [[module.i, content, '']];
36604// add the styles to the DOM
36605var update = __webpack_require__(15)(content, {});
36606if(content.locals) module.exports = content.locals;
36607// Hot Module Replacement
36608if(false) {
36609 // When the styles change, update the <style> tags
36610 if(!content.locals) {
36611 module.hot.accept("!!../../node_modules/css-loader/index.js!./ag-theme-bootstrap.css", function() {
36612 var newContent = require("!!../../node_modules/css-loader/index.js!./ag-theme-bootstrap.css");
36613 if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
36614 update(newContent);
36615 });
36616 }
36617 // When the module is disposed, remove the <style> tags
36618 module.hot.dispose(function() { update(); });
36619}
36620
36621/***/ }),
36622/* 162 */
36623/***/ (function(module, exports, __webpack_require__) {
36624
36625exports = module.exports = __webpack_require__(14)();
36626// imports
36627
36628
36629// module
36630exports.push([module.i, ".ag-theme-bootstrap {\n background-color: white;\n color: black;\n font: 400 14px \"Helvetica Neue\", sans-serif; }\n .ag-theme-bootstrap .ag-body {\n background-color: #f6f6f6; }\n .ag-theme-bootstrap .ag-cell {\n box-sizing: border-box; }\n .ag-theme-bootstrap .ag-menu, .ag-theme-bootstrap .ag-theme-bootstrap.ag-dnd-ghost, .ag-theme-bootstrap .ag-cell-inline-editing, .ag-theme-bootstrap .ag-popup-editor, .ag-theme-bootstrap .ag-select-agg-func-popup, .ag-theme-bootstrap .ag-overlay-loading-center {\n background-color: #f6f6f6;\n border: 1px solid transparent; }\n .ag-theme-bootstrap .ag-tab-header .ag-tab {\n border: 1px solid transparent;\n border-bottom-width: 0;\n display: inline-block;\n margin: 4px;\n margin-bottom: 0;\n padding: 4px 8px; }\n .ag-theme-bootstrap .ag-tab-header .ag-tab.ag-tab-selected {\n background-color: #f6f6f6;\n border-bottom: 2px solid #f6f6f6 !important;\n border-color: transparent; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-1 {\n padding-left: 16px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-1 {\n padding-right: 16px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-1 {\n padding-left: 24px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-1 {\n padding-right: 24px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-2 {\n padding-left: 32px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-2 {\n padding-right: 32px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-2 {\n padding-left: 48px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-2 {\n padding-right: 48px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-3 {\n padding-left: 48px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-3 {\n padding-right: 48px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-3 {\n padding-left: 72px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-3 {\n padding-right: 72px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-4 {\n padding-left: 64px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-4 {\n padding-right: 64px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-4 {\n padding-left: 96px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-4 {\n padding-right: 96px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-5 {\n padding-left: 80px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-5 {\n padding-right: 80px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-5 {\n padding-left: 120px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-5 {\n padding-right: 120px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-6 {\n padding-left: 96px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-6 {\n padding-right: 96px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-6 {\n padding-left: 144px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-6 {\n padding-right: 144px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-7 {\n padding-left: 112px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-7 {\n padding-right: 112px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-7 {\n padding-left: 168px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-7 {\n padding-right: 168px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-8 {\n padding-left: 128px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-8 {\n padding-right: 128px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-8 {\n padding-left: 192px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-8 {\n padding-right: 192px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-9 {\n padding-left: 144px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-9 {\n padding-right: 144px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-9 {\n padding-left: 216px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-9 {\n padding-right: 216px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-10 {\n padding-left: 160px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-10 {\n padding-right: 160px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-10 {\n padding-left: 240px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-10 {\n padding-right: 240px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-11 {\n padding-left: 176px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-11 {\n padding-right: 176px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-11 {\n padding-left: 264px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-11 {\n padding-right: 264px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-12 {\n padding-left: 192px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-12 {\n padding-right: 192px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-12 {\n padding-left: 288px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-12 {\n padding-right: 288px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-13 {\n padding-left: 208px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-13 {\n padding-right: 208px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-13 {\n padding-left: 312px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-13 {\n padding-right: 312px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-14 {\n padding-left: 224px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-14 {\n padding-right: 224px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-14 {\n padding-left: 336px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-14 {\n padding-right: 336px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-15 {\n padding-left: 240px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-15 {\n padding-right: 240px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-15 {\n padding-left: 360px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-15 {\n padding-right: 360px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-16 {\n padding-left: 256px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-16 {\n padding-right: 256px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-16 {\n padding-left: 384px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-16 {\n padding-right: 384px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-17 {\n padding-left: 272px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-17 {\n padding-right: 272px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-17 {\n padding-left: 408px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-17 {\n padding-right: 408px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-18 {\n padding-left: 288px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-18 {\n padding-right: 288px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-18 {\n padding-left: 432px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-18 {\n padding-right: 432px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-19 {\n padding-left: 304px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-19 {\n padding-right: 304px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-19 {\n padding-left: 456px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-19 {\n padding-right: 456px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-20 {\n padding-left: 320px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-20 {\n padding-right: 320px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-20 {\n padding-left: 480px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-20 {\n padding-right: 480px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-21 {\n padding-left: 336px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-21 {\n padding-right: 336px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-21 {\n padding-left: 504px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-21 {\n padding-right: 504px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-22 {\n padding-left: 352px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-22 {\n padding-right: 352px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-22 {\n padding-left: 528px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-22 {\n padding-right: 528px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-23 {\n padding-left: 368px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-23 {\n padding-right: 368px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-23 {\n padding-left: 552px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-23 {\n padding-right: 552px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-24 {\n padding-left: 384px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-24 {\n padding-right: 384px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-24 {\n padding-left: 576px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-24 {\n padding-right: 576px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-25 {\n padding-left: 400px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-25 {\n padding-right: 400px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-25 {\n padding-left: 600px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-25 {\n padding-right: 600px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-26 {\n padding-left: 416px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-26 {\n padding-right: 416px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-26 {\n padding-left: 624px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-26 {\n padding-right: 624px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-27 {\n padding-left: 432px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-27 {\n padding-right: 432px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-27 {\n padding-left: 648px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-27 {\n padding-right: 648px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-28 {\n padding-left: 448px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-28 {\n padding-right: 448px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-28 {\n padding-left: 672px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-28 {\n padding-right: 672px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-29 {\n padding-left: 464px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-29 {\n padding-right: 464px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-29 {\n padding-left: 696px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-29 {\n padding-right: 696px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-30 {\n padding-left: 480px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-30 {\n padding-right: 480px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-30 {\n padding-left: 720px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-30 {\n padding-right: 720px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-31 {\n padding-left: 496px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-31 {\n padding-right: 496px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-31 {\n padding-left: 744px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-31 {\n padding-right: 744px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-32 {\n padding-left: 512px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-32 {\n padding-right: 512px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-32 {\n padding-left: 768px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-32 {\n padding-right: 768px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-33 {\n padding-left: 528px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-33 {\n padding-right: 528px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-33 {\n padding-left: 792px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-33 {\n padding-right: 792px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-34 {\n padding-left: 544px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-34 {\n padding-right: 544px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-34 {\n padding-left: 816px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-34 {\n padding-right: 816px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-35 {\n padding-left: 560px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-35 {\n padding-right: 560px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-35 {\n padding-left: 840px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-35 {\n padding-right: 840px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-36 {\n padding-left: 576px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-36 {\n padding-right: 576px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-36 {\n padding-left: 864px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-36 {\n padding-right: 864px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-37 {\n padding-left: 592px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-37 {\n padding-right: 592px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-37 {\n padding-left: 888px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-37 {\n padding-right: 888px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-38 {\n padding-left: 608px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-38 {\n padding-right: 608px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-38 {\n padding-left: 912px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-38 {\n padding-right: 912px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-39 {\n padding-left: 624px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-39 {\n padding-right: 624px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-39 {\n padding-left: 936px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-39 {\n padding-right: 936px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-40 {\n padding-left: 640px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-40 {\n padding-right: 640px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-40 {\n padding-left: 960px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-40 {\n padding-right: 960px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-41 {\n padding-left: 656px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-41 {\n padding-right: 656px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-41 {\n padding-left: 984px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-41 {\n padding-right: 984px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-42 {\n padding-left: 672px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-42 {\n padding-right: 672px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-42 {\n padding-left: 1008px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-42 {\n padding-right: 1008px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-43 {\n padding-left: 688px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-43 {\n padding-right: 688px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-43 {\n padding-left: 1032px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-43 {\n padding-right: 1032px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-44 {\n padding-left: 704px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-44 {\n padding-right: 704px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-44 {\n padding-left: 1056px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-44 {\n padding-right: 1056px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-45 {\n padding-left: 720px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-45 {\n padding-right: 720px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-45 {\n padding-left: 1080px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-45 {\n padding-right: 1080px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-46 {\n padding-left: 736px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-46 {\n padding-right: 736px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-46 {\n padding-left: 1104px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-46 {\n padding-right: 1104px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-47 {\n padding-left: 752px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-47 {\n padding-right: 752px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-47 {\n padding-left: 1128px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-47 {\n padding-right: 1128px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-48 {\n padding-left: 768px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-48 {\n padding-right: 768px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-48 {\n padding-left: 1152px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-48 {\n padding-right: 1152px; }\n .ag-theme-bootstrap .ag-ltr .ag-toolpanel-indent-49 {\n padding-left: 784px; }\n .ag-theme-bootstrap .ag-rtl .ag-toolpanel-indent-49 {\n padding-right: 784px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-indent-49 {\n padding-left: 1176px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-indent-49 {\n padding-right: 1176px; }\n .ag-theme-bootstrap .ag-ltr .ag-row-group-leaf-indent {\n margin-left: 24px; }\n .ag-theme-bootstrap .ag-rtl .ag-row-group-leaf-indent {\n margin-right: 24px; }\n .ag-theme-bootstrap .ag-rtl .ag-cell-first-right-pinned {\n border-left: 1px solid transparent; }\n .ag-theme-bootstrap .ag-ltr .ag-cell-first-right-pinned {\n border-left: 1px solid transparent; }\n .ag-theme-bootstrap .ag-rtl .ag-cell-last-left-pinned {\n border-right: 1px solid transparent; }\n .ag-theme-bootstrap .ag-ltr .ag-cell-last-left-pinned {\n border-right: 1px solid transparent; }\n .ag-theme-bootstrap .ag-value-change-delta {\n padding-right: 2px; }\n .ag-theme-bootstrap .ag-value-change-delta-up {\n color: darkgreen; }\n .ag-theme-bootstrap .ag-value-change-delta-down {\n color: darkred; }\n .ag-theme-bootstrap .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 .ag-theme-bootstrap .ag-value-change-value-highlight {\n background-color: #cec;\n transition: background-color 0.1s; }\n .ag-theme-bootstrap .ag-header {\n background-color: transparent;\n color: #333333;\n font: 400 14px \"Helvetica Neue\", sans-serif; }\n .ag-theme-bootstrap .ag-header-row {\n border-bottom: 1px solid transparent;\n box-sizing: border-box; }\n .ag-theme-bootstrap .ag-row {\n border-bottom: 1px solid transparent;\n box-sizing: border-box; }\n .ag-theme-bootstrap .ag-row-odd {\n background-color: #f6f6f6; }\n .ag-theme-bootstrap .ag-row-even {\n background-color: white; }\n .ag-theme-bootstrap .ag-row-hover {\n background-color: inherit; }\n .ag-theme-bootstrap .ag-numeric-cell {\n text-align: right; }\n .ag-theme-bootstrap .ag-header-cell-label {\n display: flex;\n float: left;\n height: 100%;\n width: calc(100% - 12px); }\n .ag-theme-bootstrap .ag-header-cell-label span {\n height: 100%; }\n .ag-theme-bootstrap .ag-header-cell-label > span {\n float: left; }\n .ag-theme-bootstrap .ag-header-cell-label .ag-header-icon {\n background-position-y: 10px;\n background-size: 14px 14px;\n height: 100%;\n margin: 0;\n margin-left: 4px;\n opacity: 1; }\n .ag-theme-bootstrap .ag-header-cell-label .ag-header-cell-text {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap; }\n .ag-theme-bootstrap .ag-numeric-header .ag-header-cell-label {\n flex-direction: row-reverse;\n float: right; }\n .ag-theme-bootstrap .ag-numeric-header .ag-header-cell-label > span {\n float: right; }\n .ag-theme-bootstrap .ag-numeric-header .ag-header-cell-menu-button {\n float: left; }\n .ag-theme-bootstrap .ag-header-group-text {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap; }\n .ag-theme-bootstrap .ag-header-cell,\n .ag-theme-bootstrap .ag-header-group-cell {\n line-height: 25px;\n padding-left: 12px;\n padding-right: 12px; }\n .ag-theme-bootstrap .ag-cell {\n line-height: 23px;\n padding-left: 12px;\n padding-right: 12px;\n border: 1px solid transparent;\n padding-left: 11px;\n padding-right: 11px; }\n .ag-theme-bootstrap .ag-row-drag {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjMzMzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0yIDFoMnYySDJ6bTMgMGgydjJINXptMyAwaDJ2Mkg4eiIvPjxwYXRoIGQ9Ik04IDFoMnYySDh6TTIgNGgydjJIMnptMyAwaDJ2Mkg1em0zIDBoMnYySDh6TTIgN2gydjJIMnptMyAwaDJ2Mkg1em0zIDBoMnYySDh6bS02IDNoMnYySDJ6bTMgMGgydjJINXptMyAwaDJ2Mkg4eiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n background-position-x: left;\n background-position-y: 4px;\n float: left;\n height: 100%;\n width: 24px; }\n .ag-theme-bootstrap .ag-column-drag {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjMzMzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0yIDFoMnYySDJ6bTMgMGgydjJINXptMyAwaDJ2Mkg4eiIvPjxwYXRoIGQ9Ik04IDFoMnYySDh6TTIgNGgydjJIMnptMyAwaDJ2Mkg1em0zIDBoMnYySDh6TTIgN2gydjJIMnptMyAwaDJ2Mkg1em0zIDBoMnYySDh6bS02IDNoMnYySDJ6bTMgMGgydjJINXptMyAwaDJ2Mkg4eiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n background-position-x: left;\n background-position-y: 4px !important;\n height: 100%;\n min-width: 16px; }\n .ag-theme-bootstrap .ag-row-dragging {\n opacity: 0.5;\n z-index: 10000; }\n .ag-theme-bootstrap .ag-ltr .ag-cell-focus {\n border: 1px solid black;\n outline: initial; }\n .ag-theme-bootstrap .ag-rtl .ag-cell-focus {\n border: 1px solid black;\n outline: initial; }\n .ag-theme-bootstrap .ag-header-cell-resize {\n position: absolute;\n right: -4px;\n width: 8px;\n z-index: 4; }\n .ag-theme-bootstrap .ag-header-cell-resize::after {\n border-right: 1px solid transparent;\n box-sizing: content-box;\n content: \"resize\";\n display: block;\n height: 9px;\n margin-top: 8px;\n overflow: hidden;\n text-indent: 4px;\n width: 4px; }\n .ag-theme-bootstrap .ag-icon-aggregation {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOS41IDIuNWgtNmwyIDMuNS0yIDMuNWg2IiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZT0iIzMzMyIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-arrows {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjMzMzIj48cGF0aCBkPSJNMTYgNmwtMS40MSAxLjQxTDE2LjE3IDlINHYyaDEyLjE3bC0xLjU4IDEuNTlMMTYgMTRsNC00eiIvPjxwYXRoIGQ9Ik00IDZsMS40MSAxLjQxTDMuODMgOUgxNnYySDMuODNsMS41OCAxLjU5TDQgMTRsLTQtNHoiLz48cGF0aCBkPSJNNiAxNmwxLjQxLTEuNDFMOSAxNi4xN1Y0aDJ2MTIuMTdsMS41OS0xLjU4TDE0IDE2bC00IDR6Ii8+PHBhdGggZD0iTTE0IDRsLTEuNDEgMS40MUwxMSAzLjgzVjE2SDlWMy44M0w3LjQxIDUuNDEgNiA0bDQtNHoiLz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-asc {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDNoMnY5SDV6Ii8+PHBhdGggZD0iTTguOTkzIDUuMlYzLjQ5M2gtNnY2SDQuN1Y1LjJoNC4yOTN6IiBpZD0iYiIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiMzMzMiIGQ9Ik01LjUgMy41aDF2OGgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSg0NSA1Ljk5MyA2LjQ5MykiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2IiLz48cGF0aCBzdHJva2U9IiMzMzMiIGQ9Ik04LjQ5MyA0Ljd2LS43MDdoLTV2NUg0LjJWNC43aDQuMjkzeiIvPjwvZz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-checkbox-checked-readonly {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjEiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjMzMzIiB4PSIuNSIgeT0iLjUiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgcng9IjEiLz48cGF0aCBzdHJva2U9IiMzMzMiIGQ9Ik05IDNMNiA4LjVsLTIuNS0yIi8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-checkbox-checked {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjEiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjMzMzIiB4PSIuNSIgeT0iLjUiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgcng9IjEiLz48cGF0aCBzdHJva2U9IiMzMzMiIGQ9Ik05IDNMNiA4LjVsLTIuNS0yIi8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-checkbox-indeterminate-readonly {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjEiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjMzMzIiB4PSIuNSIgeT0iLjUiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgcng9IjEiLz48cGF0aCBmaWxsPSIjMzMzIiBkPSJNNCA1aDR2Mkg0eiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-checkbox-indeterminate {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjEiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjMzMzIiB4PSIuNSIgeT0iLjUiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgcng9IjEiLz48cGF0aCBmaWxsPSIjMzMzIiBkPSJNNCA1aDR2Mkg0eiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-checkbox-unchecked-readonly {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjEiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjMzMzIiB4PSIuNSIgeT0iLjUiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgcng9IjEiLz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-checkbox-unchecked {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjEiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjMzMzIiB4PSIuNSIgeT0iLjUiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgcng9IjEiLz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-column {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAxaDR2Mkgxem0wIDNoNHY3SDF6IiBmaWxsPSIjMzMzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-columns {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAxaDR2Mkgxem02IDBoNHYySDd6TTEgNWg0djJIMXptNiAwaDR2Mkg3ek0xIDloNHYySDF6bTYgMGg0djJIN3oiIGZpbGw9IiMzMzMiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-contracted {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxyZWN0IHN0cm9rZS1vcGFjaXR5PSIuNSIgc3Ryb2tlPSIjMzMzIiB4PSIxLjUiIHk9IjEuNSIgd2lkdGg9IjkiIGhlaWdodD0iOSIgcng9IjEiLz48cGF0aCBmaWxsPSIjMzMzIiBkPSJNOSA1djJIM1Y1eiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-copy {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiMzMzMiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHBhdGggZD0iTTQuNSA0LjVoNXY1aC01eiIvPjxwYXRoIGQ9Ik03LjUgMi41aC01djVoMnYyaDV2LTVoLTJ2LTJ6Ii8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-cut {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiMzMzMiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHBhdGggZD0iTTMgMy4xMmMuNjY3LjA3OCAzIDEuNzQ1IDcgNS0uMzI2LjIwNC0uNjU5LjIwNC0xIDAtLjM0MS0uMjA2LTEuNjc0LTEuMjA2LTQtMyAwIC42NjYtLjY2Ny42NjYtMiAwLTItMS0xLTIuMTIgMC0yeiIvPjxwYXRoIGQ9Ik0zIDguMjY0Yy42NjctLjA4IDMtMS43NDYgNy01LS4zMjYtLjIwNS0uNjU5LS4yMDUtMSAwLS4zNDEuMjA0LTEuNjc0IDEuMjA0LTQgMyAwLS42NjctLjY2Ny0uNjY3LTIgMC0yIDEtMSAyLjExOSAwIDJ6Ii8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-desc {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDJoMnY5SDV6Ii8+PHBhdGggZD0iTTguOTkzIDYuMVY0LjM5M2gtNnY2SDQuN1Y2LjFoNC4yOTN6IiBpZD0iYiIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiMzMzMiIGQ9Ik01LjUgMi41aDF2OGgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtMTM1IDUuOTkzIDcuMzkzKSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjYiIvPjxwYXRoIHN0cm9rZT0iIzMzMyIgZD0iTTguNDkzIDUuNnYtLjcwN2gtNXY1SDQuMlY1LjZoNC4yOTN6Ii8+PC9nPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-expanded {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxyZWN0IHN0cm9rZS1vcGFjaXR5PSIuNSIgc3Ryb2tlPSIjMzMzIiB4PSIxLjUiIHk9IjEuNSIgd2lkdGg9IjkiIGhlaWdodD0iOSIgcng9IjEiLz48cGF0aCBmaWxsPSIjMzMzIiBkPSJNNSAzaDJ2Nkg1eiIvPjxwYXRoIGZpbGw9IiMzMzMiIGQ9Ik05IDV2MkgzVjV6Ii8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-eye-slash {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0zLjAwMSAzLjkwOEwzIDRhMyAzIDAgMSAwIDUuOTk5LS4wOTJBNS4yNDggNS4yNDggMCAwIDAgNiAzYy0xLjEgMC0yLjEuMzAzLTIuOTk5LjkwOHoiIGZpbGw9IiMzMzMiLz48cGF0aCBkPSJNNCA0LjVjLjY2Ny0uMzMzIDEuNjY3LS41IDMtLjUiIHN0cm9rZT0iIzk3OTc5NyIvPjxwYXRoIGQ9Ik0xIDZjMS4zMzMtMiAzLTMgNS0zczMuNjY3IDEgNSAzQzkuNjY3IDggOCA5IDYgOVMyLjMzMyA4IDEgNnoiIHN0cm9rZT0iIzMzMyIvPjxwYXRoIGQ9Ik00LjAwNCAyLjgzNWw0Ljk5MiA2LjMzIiBzdHJva2U9IiMzMzMiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiLz48cGF0aCBkPSJNMy4wMDQgMi44MzVsNC45OTIgNi4zMyIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-eye {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0zLjAwMSAzLjkwOEwzIDRhMyAzIDAgMSAwIDUuOTk5LS4wOTJBNS4yNDggNS4yNDggMCAwIDAgNiAzYy0xLjEgMC0yLjEuMzAzLTIuOTk5LjkwOHoiIGZpbGw9IiMzMzMiLz48cGF0aCBkPSJNNCA0LjVjLjY2Ny0uMzMzIDEuNjY3LS41IDMtLjUiIHN0cm9rZT0iIzk3OTc5NyIvPjxwYXRoIGQ9Ik0xIDZjMS4zMzMtMiAzLTMgNS0zczMuNjY3IDEgNSAzQzkuNjY3IDggOCA5IDYgOVMyLjMzMyA4IDEgNnoiIHN0cm9rZT0iIzMzMyIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-filter {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAyaDEwTDcgNnY1TDUgOVY2TDEgMnptNCA0djFoMlY2SDV6IiBmaWxsPSIjMzMzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-group {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIHN0cm9rZT0iIzMzMyIgZD0iTTcuNSAxLjVoM3YyaC0zem0wIDRoM3YyaC0zem0wIDRoM3YyaC0zeiIvPjxwYXRoIGZpbGw9IiMzMzMiIGQ9Ik0yIDNoMXY4SDJ6bTEgM2g0djFIM3ptMi00aDN2MUg1eiIvPjxwYXRoIGZpbGw9IiMzMzMiIGQ9Ik0yIDEwaDV2MUgyeiIvPjxwYXRoIHN0cm9rZT0iIzMzMyIgZD0iTTEuNSAxLjVoM3YyaC0zeiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-indeterminate {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0zLjA1NiA0LjU4MWEzLjAwMSAzLjAwMSAwIDAgMCA1Ljg4OCAwQzguMDU5IDQuMTk0IDcuMDc4IDQgNiA0Yy0xLjA3OCAwLTIuMDYuMTk0LTIuOTQ0LjU4MXoiIGZpbGw9IiMzMzMiLz48cGF0aCBkPSJNNCA1LjVjLjY2Ny0uMzMzIDEuNjY3LS41IDMtLjUiIHN0cm9rZT0iIzk3OTc5NyIvPjxwYXRoIGQ9Ik0xIDZjMS4zMzMtMS4zMzMgMy0yIDUtMnMzLjY2Ny42NjcgNSAyQzkuNjY3IDcuMzMzIDggOCA2IDhzLTMuNjY3LS42NjctNS0yeiIgc3Ryb2tlPSIjMzMzIi8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-left {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01LjUgMS41aDJ2OWgtMnoiLz48cGF0aCBkPSJNNy45OTMgNC43VjIuOTkzaC02djZIMy43VjQuN2g0LjI5M3oiIGlkPSJiIi8+PC9kZWZzPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoOTAgNi41IDYpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHBhdGggc3Ryb2tlPSIjMzMzIiBkPSJNNiAyaDF2OEg2eiIvPjwvZz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtNDUgNC45OTMgNS45OTMpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNiIi8+PHBhdGggc3Ryb2tlPSIjMzMzIiBkPSJNNy40OTMgNC4ydi0uNzA3aC01djVIMy4yVjQuMmg0LjI5M3oiLz48L2c+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-loading {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDFoMnYzSDV6Ii8+PHBhdGggaWQ9ImIiIGQ9Ik01IDhoMnYzSDV6Ii8+PHBhdGggaWQ9ImMiIGQ9Ik0xIDVoM3YySDF6Ii8+PHBhdGggaWQ9ImQiIGQ9Ik04IDVoM3YySDh6Ii8+PHBhdGggaWQ9ImUiIGQ9Ik00IDBoMnYzSDR6Ii8+PHBhdGggaWQ9ImYiIGQ9Ik00IDdoMnYzSDR6Ii8+PHBhdGggaWQ9ImciIGQ9Ik0wIDRoM3YySDB6Ii8+PHBhdGggaWQ9ImgiIGQ9Ik03IDRoM3YySDd6Ii8+PC9kZWZzPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjYSIvPjxwYXRoIHN0cm9rZT0iIzk3OTc5NyIgZD0iTTUuNSAxLjVoMXYyaC0xeiIvPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2IiLz48cGF0aCBzdHJva2U9IiM5Nzk3OTciIGQ9Ik01LjUgOC41aDF2MmgtMXoiLz48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNjIi8+PHBhdGggc3Ryb2tlPSIjOTc5Nzk3IiBkPSJNMS41IDUuNWgydjFoLTJ6Ii8+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjZCIvPjxwYXRoIHN0cm9rZT0iIzk3OTc5NyIgZD0iTTguNSA1LjVoMnYxaC0yeiIvPjxnIG9wYWNpdHk9Ii43MTQiPjxnIHRyYW5zZm9ybT0icm90YXRlKDQ1IDQuMjkzIDYuNzA3KSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjZSIvPjxwYXRoIHN0cm9rZT0iIzk3OTc5NyIgZD0iTTQuNS41aDF2MmgtMXoiLz48L2c+PGcgdHJhbnNmb3JtPSJyb3RhdGUoNDUgNC4yOTMgNi43MDcpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNmIi8+PHBhdGggc3Ryb2tlPSIjOTc5Nzk3IiBkPSJNNC41IDcuNWgxdjJoLTF6Ii8+PC9nPjxnIHRyYW5zZm9ybT0icm90YXRlKDQ1IDQuMjkzIDYuNzA3KSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjZyIvPjxwYXRoIHN0cm9rZT0iIzk3OTc5NyIgZD0iTS41IDQuNWgydjFoLTJ6Ii8+PC9nPjxnIHRyYW5zZm9ybT0icm90YXRlKDQ1IDQuMjkzIDYuNzA3KSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjaCIvPjxwYXRoIHN0cm9rZT0iIzk3OTc5NyIgZD0iTTcuNSA0LjVoMnYxaC0yeiIvPjwvZz48L2c+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-menu {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAxaDEwdjJIMXptMCA0aDEwdjJIMXptMCA0aDEwdjJIMXoiIGZpbGw9IiMzMzMiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-minus {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiA1aDh2MkgyeiIgZmlsbD0iIzMzMyIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-none {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDNoMnY2SDV6Ii8+PHBhdGggZD0iTTguMTQ2IDguMTgyVjYuNDc1aC01djVoMS43MDhWOC4xODJoMy4yOTJ6IiBpZD0iYiIvPjxwYXRoIGQ9Ik04LjUgMi45MTRWMS4yMDdoLTV2NWgxLjcwN1YyLjkxNEg4LjV6IiBpZD0iYyIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiMzMzMiIGQ9Ik01LjUgMy41aDF2NWgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtMTM1IDUuNjQ2IDguNDc1KSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjYiIvPjxwYXRoIHN0cm9rZT0iIzMzMyIgZD0iTTcuNjQ2IDcuNjgydi0uNzA3aC00djRoLjcwOFY3LjY4MmgzLjI5MnoiLz48L2c+PGcgdHJhbnNmb3JtPSJyb3RhdGUoNDUgNiAzLjcwNykiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2MiLz48cGF0aCBzdHJva2U9IiMzMzMiIGQ9Ik04IDIuNDE0di0uNzA3SDR2NGguNzA3VjIuNDE0SDh6Ii8+PC9nPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-not-allowed {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiMzMzMiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGNpcmNsZSBjeD0iNiIgY3k9IjYiIHI9IjQiLz48cGF0aCBkPSJNOC41IDMuNUwzLjQwMSA4LjU5OSIgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-paste {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiMzMzMiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHBhdGggZD0iTTIuNSAyLjVoN3Y3aC03eiIvPjxwYXRoIGQ9Ik02LjUgMS41aC0xdjJoLTF2MWgzdi0xaC0xdi0yeiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-pin {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGZpbGw9IiMzMzMiIGQ9Ik0zIDJoNnYxSDh2NGwyIDFIN2wtMSAzLTEtM0gybDItMVYzSDN6Ii8+PHBhdGggZD0iTTUgM2gxdjRINXpNNCAzaDF2M0g0eiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-pivot {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiMzMzMiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHJlY3QgeD0iMS41IiB5PSIxLjUiIHdpZHRoPSI5IiBoZWlnaHQ9IjkiIHJ4PSIxIi8+PHBhdGggZD0iTTEwLjUgMy41aC05bTItMnY5IiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIi8+PHBhdGggZD0iTTcuNSA2LjVsMS0xIDEgMW0tMyAxbC0xIDEgMSAxIi8+PHBhdGggZD0iTTguNSA1LjV2M2gtMyIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-plus {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjMzMzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik01IDJoMnY4SDV6Ii8+PHBhdGggZD0iTTIgNWg4djJIMnoiLz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-right {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik00LjUgMS41aDJ2OWgtMnoiLz48cGF0aCBkPSJNOS45OTMgNC43VjIuOTkzaC02djZINS43VjQuN2g0LjI5M3oiIGlkPSJiIi8+PC9kZWZzPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoOTAgNS41IDYpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHBhdGggc3Ryb2tlPSIjMzMzIiBkPSJNNSAyaDF2OEg1eiIvPjwvZz48ZyB0cmFuc2Zvcm09InNjYWxlKC0xIDEpIHJvdGF0ZSgtNDUgMCAyMi44NzQpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNiIi8+PHBhdGggc3Ryb2tlPSIjMzMzIiBkPSJNOS40OTMgNC4ydi0uNzA3aC01djVINS4yVjQuMmg0LjI5M3oiLz48L2c+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-small-left {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMyA2bDQtNHY4eiIgZmlsbD0iIzMzMyIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-small-right {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNSAybDQgNC00IDR6IiBmaWxsPSIjMzMzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-small-up {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiA3bDQtNCA0IDR6IiBmaWxsPSIjMzMzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-small-down {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiA1aDhMNiA5eiIgZmlsbD0iIzMzMyIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-tick {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMS41IDUuNWwzIDMgNi02IiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZT0iIzMzMyIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-cross {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiAxMGw4LThtMCA4TDIgMiIgc3Ryb2tlPSIjMzMzIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-tree-open {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiA1aDhMNiA5eiIgZmlsbD0iIzMzMyIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-tree-closed {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNSAybDQgNC00IDR6IiBmaWxsPSIjMzMzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-icon-tree-indeterminate {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiA1aDh2MkgyeiIgZmlsbD0iIzMzMyIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-bootstrap .ag-header-cell-menu-button .ag-icon-menu {\n display: block;\n height: 25px; }\n .ag-theme-bootstrap .ag-icon-checkbox-checked:empty {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjEiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjMDAwIiB4PSIuNSIgeT0iLjUiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgcng9IjEiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik05IDNMNiA4LjVsLTIuNS0yIi8+PC9nPjwvc3ZnPg==); }\n .ag-theme-bootstrap .ag-menu {\n background: #f6f6f6;\n border-radius: 0;\n box-shadow: none;\n padding: 4px;\n padding: 0;\n z-index: 5; }\n .ag-theme-bootstrap .ag-menu .ag-menu-list {\n cursor: default;\n margin-bottom: 4px;\n margin-top: 4px;\n width: 100%; }\n .ag-theme-bootstrap .ag-menu .ag-menu-option {\n line-height: 16px;\n padding-left: 8px;\n padding-right: 8px; }\n .ag-theme-bootstrap .ag-menu .ag-menu-option > span {\n display: table-cell;\n vertical-align: middle; }\n .ag-theme-bootstrap .ag-menu .ag-menu-option-active {\n background: inherit; }\n .ag-theme-bootstrap .ag-menu .ag-menu-option-disabled {\n opacity: 0.5; }\n .ag-theme-bootstrap .ag-menu .ag-menu-option-icon {\n padding-left: 4px;\n padding-right: 4px; }\n .ag-theme-bootstrap .ag-menu .ag-menu-option-icon span {\n height: 12px;\n line-height: 0;\n margin-top: 4px; }\n .ag-theme-bootstrap .ag-menu .ag-menu-option-shortcut {\n padding-left: 8px; }\n .ag-theme-bootstrap .ag-menu .ag-menu-separator {\n margin-left: -4px; }\n .ag-theme-bootstrap .ag-menu .ag-menu-separator > span {\n background-image: url(\"data:image/svg+xml;utf8,<svg width='1' height='8px' viewBox='0 0 1 8px' xmlns='http://www.w3.org/2000/svg'> <line x1='0' y1='4px' x2='1' y2='4px' stroke-width='1' stroke='transparent'/> </svg>\");\n height: 8px; }\n .ag-theme-bootstrap .ag-menu .ag-menu-option-popup-pointer {\n width: 20px; }\n .ag-theme-bootstrap.ag-dnd-ghost {\n background: #f6f6f6;\n border-radius: 0;\n box-shadow: none;\n padding: 4px;\n border: 1px solid transparent;\n color: #333333;\n font: 400 14px \"Helvetica Neue\", sans-serif;\n height: 25px !important;\n line-height: 25px;\n margin: 0;\n padding: 0 8px;\n transform: translateY(8px);\n z-index: 5; }\n .ag-theme-bootstrap.ag-dnd-ghost span,\n .ag-theme-bootstrap.ag-dnd-ghost div {\n float: left;\n height: 100%;\n margin: 0;\n padding: 0; }\n .ag-theme-bootstrap.ag-dnd-ghost .ag-dnd-ghost-icon {\n margin-right: 4px;\n opacity: 1; }\n .ag-theme-bootstrap .ag-tab-header {\n background: #f6f6f6;\n min-width: 220px;\n width: 100%; }\n .ag-theme-bootstrap .ag-tab-header .ag-tab {\n border-bottom: 2px solid transparent;\n height: 16px;\n text-align: center;\n vertical-align: middle; }\n .ag-theme-bootstrap .ag-tab-header .ag-tab.ag-tab-selected .ag-icon-filter {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAyaDEwTDcgNnY1TDUgOVY2TDEgMnptNCA0djFoMlY2SDV6IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=);\n display: inline-block; }\n .ag-theme-bootstrap .ag-tab-header .ag-tab.ag-tab-selected .ag-icon-columns {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAxaDR2Mkgxem02IDBoNHYySDd6TTEgNWg0djJIMXptNiAwaDR2Mkg3ek0xIDloNHYySDF6bTYgMGg0djJIN3oiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==);\n display: inline-block; }\n .ag-theme-bootstrap .ag-tab-header .ag-tab.ag-tab-selected .ag-icon-menu {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAxaDEwdjJIMXptMCA0aDEwdjJIMXptMCA0aDEwdjJIMXoiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==);\n display: inline-block; }\n .ag-theme-bootstrap .ag-tab-body {\n padding: 4px 0; }\n .ag-theme-bootstrap .ag-tab-body .ag-filter-select {\n margin: 4px;\n width: calc(100% - 8px); }\n .ag-theme-bootstrap .ag-tab-body .ag-menu-list {\n margin-bottom: 0;\n margin-top: 0; }\n .ag-theme-bootstrap .ag-tab-body .ag-menu-list > div:first-child > span {\n padding-top: 0; }\n .ag-theme-bootstrap .ag-tab-body .ag-menu-list > div:last-child > span {\n padding-bottom: 0; }\n .ag-theme-bootstrap .ag-tab-body .ag-menu-list > div:last-child > .ag-menu-option-popup-pointer {\n background-position-y: 0; }\n .ag-theme-bootstrap .ag-filter-select {\n margin: 4px;\n width: calc(100% - 8px); }\n .ag-theme-bootstrap .ag-filter input[type=\"radio\"] {\n margin: 0 3px 0 6px;\n width: 12px;\n height: 17px;\n vertical-align: top; }\n .ag-theme-bootstrap .ag-filter input[type=\"text\"],\n .ag-theme-bootstrap .ag-filter input[type=\"date\"] {\n padding-left: 4px; }\n .ag-theme-bootstrap .ag-filter label {\n display: block;\n padding-left: 4px; }\n .ag-theme-bootstrap .ag-filter .ag-set-filter-list {\n height: 130px;\n padding-top: 4px; }\n .ag-theme-bootstrap .ag-filter .ag-filter-header-container {\n box-sizing: border-box;\n height: 20px; }\n .ag-theme-bootstrap .ag-filter .ag-filter-header-container:nth-child(2) {\n border-bottom: 1px solid transparent; }\n .ag-theme-bootstrap .ag-filter .ag-filter-checkbox {\n float: left;\n height: 20px;\n margin-right: 4px;\n padding-top: 2px; }\n .ag-theme-bootstrap .ag-filter .ag-filter-value {\n height: 20px;\n line-height: 14px; }\n .ag-theme-bootstrap .ag-filter .ag-filter-apply-panel {\n display: flex;\n justify-content: flex-end;\n padding: 4px;\n padding-top: 8px; }\n .ag-theme-bootstrap .ag-filter .ag-filter-apply-panel button + button {\n margin-left: 8px; }\n .ag-theme-bootstrap .ag-column-select-panel .ag-column-select-column-group,\n .ag-theme-bootstrap .ag-column-select-panel .ag-column-select-column {\n height: 16px;\n line-height: 16px;\n margin-left: 0; }\n .ag-theme-bootstrap .ag-column-select-panel .ag-column-select-column-group span,\n .ag-theme-bootstrap .ag-column-select-panel .ag-column-select-column span {\n float: left;\n height: 100%; }\n .ag-theme-bootstrap .ag-column-select-panel .ag-column-select-column-group .ag-column-select-indent,\n .ag-theme-bootstrap .ag-column-select-panel .ag-column-select-column .ag-column-select-indent {\n width: 8px; }\n .ag-theme-bootstrap .ag-column-select-panel .ag-column-select-column-group .ag-column-select-checkbox,\n .ag-theme-bootstrap .ag-column-select-panel .ag-column-select-column-group .ag-column-group-icons,\n .ag-theme-bootstrap .ag-column-select-panel .ag-column-select-column .ag-column-select-checkbox,\n .ag-theme-bootstrap .ag-column-select-panel .ag-column-select-column .ag-column-group-icons {\n margin-left: 4px;\n margin-right: 4px; }\n .ag-theme-bootstrap .ag-column-select-panel .ag-column-container {\n padding-top: 4px; }\n .ag-theme-bootstrap .ag-column-select-panel .ag-column-select-column.ag-toolpanel-add-group-indent {\n margin-left: 20px; }\n .ag-theme-bootstrap .ag-column-tool-panel {\n display: flex; }\n .ag-theme-bootstrap .ag-filter-body {\n flex-grow: 1;\n flex-shrink: 1;\n padding-right: 4px; }\n .ag-theme-bootstrap .ag-column-tool-panel-item button {\n font-family: \"Helvetica Neue\", sans-serif;\n font-size: 14px;\n height: 100%; }\n .ag-theme-bootstrap .ag-filter-filter {\n margin-bottom: 4px; }\n .ag-theme-bootstrap .ag-column-select-header {\n border-bottom: 1px solid transparent;\n box-sizing: border-box;\n height: 25px;\n padding-top: 4px; }\n .ag-theme-bootstrap .ag-column-select-header label {\n display: block;\n padding-left: 4px; }\n .ag-theme-bootstrap .ag-column-select-header label .ag-filter-checkbox {\n float: left;\n margin-right: 4px; }\n .ag-theme-bootstrap .ag-column-select-header .ag-column-tool-panel a {\n margin: 0 4px;\n padding-top: 2px; }\n .ag-theme-bootstrap .ag-group-child-count::before {\n content: \" \"; }\n .ag-theme-bootstrap .ag-column-panel {\n border-right: 0; }\n .ag-theme-bootstrap .ag-column-panel .ag-pivot-mode {\n border-bottom: 1px solid transparent;\n box-sizing: border-box;\n height: 25px;\n line-height: 25px; }\n .ag-theme-bootstrap .ag-column-panel .ag-pivot-mode span {\n float: left;\n height: 100%; }\n .ag-theme-bootstrap .ag-column-panel .ag-pivot-mode .ag-pivot-mode-select {\n margin-left: 4px; }\n .ag-theme-bootstrap .ag-column-panel .ag-pivot-mode .ag-pivot-mode-select .ag-checkbox-label {\n margin-left: 4px; }\n .ag-theme-bootstrap .ag-column-panel .ag-column-select-panel {\n border-bottom: 1px solid transparent;\n padding-bottom: 3px;\n padding-top: 0; }\n .ag-theme-bootstrap .ag-column-panel .ag-column-drop {\n border-bottom: 1px solid transparent;\n clear: both;\n overflow: auto;\n padding: 4px 0;\n padding-bottom: 8px; }\n .ag-theme-bootstrap .ag-column-panel .ag-column-drop .ag-icon {\n float: left;\n height: 20px;\n margin: 0 4px; }\n .ag-theme-bootstrap .ag-column-panel .ag-column-drop .ag-column-drop-title {\n clear: right;\n float: left;\n height: 20px;\n line-height: 20px;\n width: calc(100% - 20px); }\n .ag-theme-bootstrap .ag-column-panel .ag-column-drop .ag-column-drop-empty-message {\n clear: both;\n color: rgba(0, 0, 0, 0.5);\n font: 400 14px \"Helvetica Neue\", sans-serif;\n line-height: 8px;\n padding-left: 16px;\n padding-right: 4px; }\n .ag-theme-bootstrap .ag-column-panel .ag-column-drop:last-child {\n border-bottom: 0; }\n .ag-theme-bootstrap .ag-filter-icon:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAyaDEwTDcgNnY1TDUgOVY2TDEgMnptNCA0djFoMlY2SDV6IiBmaWxsPSIjMzMzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-bootstrap .ag-sort-ascending-icon:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDNoMnY5SDV6Ii8+PHBhdGggZD0iTTguOTkzIDUuMlYzLjQ5M2gtNnY2SDQuN1Y1LjJoNC4yOTN6IiBpZD0iYiIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiMzMzMiIGQ9Ik01LjUgMy41aDF2OGgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSg0NSA1Ljk5MyA2LjQ5MykiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2IiLz48cGF0aCBzdHJva2U9IiMzMzMiIGQ9Ik04LjQ5MyA0Ljd2LS43MDdoLTV2NUg0LjJWNC43aDQuMjkzeiIvPjwvZz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-bootstrap .ag-sort-descending-icon:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDJoMnY5SDV6Ii8+PHBhdGggZD0iTTguOTkzIDYuMVY0LjM5M2gtNnY2SDQuN1Y2LjFoNC4yOTN6IiBpZD0iYiIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiMzMzMiIGQ9Ik01LjUgMi41aDF2OGgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtMTM1IDUuOTkzIDcuMzkzKSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjYiIvPjxwYXRoIHN0cm9rZT0iIzMzMyIgZD0iTTguNDkzIDUuNnYtLjcwN2gtNXY1SDQuMlY1LjZoNC4yOTN6Ii8+PC9nPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-bootstrap .ag-sort-none-icon:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDNoMnY2SDV6Ii8+PHBhdGggZD0iTTguMTQ2IDguMTgyVjYuNDc1aC01djVoMS43MDhWOC4xODJoMy4yOTJ6IiBpZD0iYiIvPjxwYXRoIGQ9Ik04LjUgMi45MTRWMS4yMDdoLTV2NWgxLjcwN1YyLjkxNEg4LjV6IiBpZD0iYyIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiMzMzMiIGQ9Ik01LjUgMy41aDF2NWgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtMTM1IDUuNjQ2IDguNDc1KSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjYiIvPjxwYXRoIHN0cm9rZT0iIzMzMyIgZD0iTTcuNjQ2IDcuNjgydi0uNzA3aC00djRoLjcwOFY3LjY4MmgzLjI5MnoiLz48L2c+PGcgdHJhbnNmb3JtPSJyb3RhdGUoNDUgNiAzLjcwNykiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2MiLz48cGF0aCBzdHJva2U9IiMzMzMiIGQ9Ik04IDIuNDE0di0uNzA3SDR2NGguNzA3VjIuNDE0SDh6Ii8+PC9nPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-bootstrap .ag-numeric-header .ag-header-cell-label .ag-header-icon {\n margin-left: 0;\n margin-right: 4px; }\n .ag-theme-bootstrap .ag-paging-panel {\n align-items: center;\n border-top: 1px solid transparent;\n color: #333333;\n display: flex;\n height: 25px;\n justify-content: flex-end;\n padding: 0 12px; }\n .ag-theme-bootstrap .ag-paging-panel > span {\n margin-left: 16px; }\n .ag-theme-bootstrap .ag-row-selected {\n background-color: #bde2e5; }\n .ag-theme-bootstrap .ag-cell-range-selected:not(.ag-cell-focus) {\n background-color: rgba(120, 120, 120, 0.4); }\n .ag-theme-bootstrap .ag-cell-inline-editing {\n background: #f6f6f6;\n border-radius: 0;\n box-shadow: none;\n padding: 4px;\n height: 37px;\n line-height: normal;\n padding: 12px;\n z-index: 2; }\n .ag-theme-bootstrap .ag-cell-inline-editing select {\n height: auto; }\n .ag-theme-bootstrap .ag-popup-editor {\n background: #f6f6f6;\n border-radius: 0;\n box-shadow: none;\n padding: 4px;\n padding: 0;\n z-index: 1; }\n .ag-theme-bootstrap .ag-popup-editor .ag-large-textarea textarea {\n height: auto;\n padding: 12px; }\n .ag-theme-bootstrap .ag-rich-select {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiA1aDhMNiA5eiIgZmlsbD0iIzMzMyIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);\n background-position-x: calc(100% - 4px);\n background-position-y: 8px;\n background-repeat: no-repeat; }\n .ag-theme-bootstrap .ag-rich-select .ag-rich-select-list {\n height: 162.5px; }\n .ag-theme-bootstrap .ag-rich-select .ag-rich-select-value {\n height: 25px;\n line-height: 25px;\n padding-left: 12px; }\n .ag-theme-bootstrap .ag-rich-select .ag-virtual-list-item {\n cursor: default;\n height: 25px;\n line-height: 25px; }\n .ag-theme-bootstrap .ag-rich-select .ag-virtual-list-item:hover {\n background-color: inherit; }\n .ag-theme-bootstrap .ag-rich-select .ag-rich-select-row {\n padding-left: 12px; }\n .ag-theme-bootstrap .ag-rich-select .ag-rich-select-row-selected {\n background-color: #bde2e5; }\n .ag-theme-bootstrap .ag-floating-filter-body {\n float: left;\n height: 100%;\n margin-right: 0;\n width: calc(100% - 20px); }\n .ag-theme-bootstrap .ag-floating-filter-body input {\n box-sizing: border-box; }\n .ag-theme-bootstrap .ag-floating-filter-full-body input {\n box-sizing: border-box; }\n .ag-theme-bootstrap .ag-floating-filter-button {\n float: right;\n line-height: 12px;\n margin-top: 10px; }\n .ag-theme-bootstrap .ag-floating-filter-button button {\n appearance: none;\n background: transparent;\n border: 0;\n height: 12px;\n padding: 0;\n width: 12px; }\n .ag-theme-bootstrap .ag-cell-label-container {\n height: 100%; }\n .ag-theme-bootstrap .ag-header-group-cell-label {\n height: 100%; }\n .ag-theme-bootstrap .ag-header-group-cell-label span {\n float: left;\n height: 100%; }\n .ag-theme-bootstrap .ag-header-select-all {\n height: 100%;\n margin-right: 12px; }\n .ag-theme-bootstrap .ag-header-select-all span {\n height: 100%; }\n .ag-theme-bootstrap .ag-header-select-all:not(.ag-hidden) + .ag-cell-label-container {\n float: left;\n width: calc(100% - 12px - 12px); }\n .ag-theme-bootstrap .ag-selection-checkbox span,\n .ag-theme-bootstrap .ag-group-expanded span,\n .ag-theme-bootstrap .ag-group-contracted span {\n margin-right: 12px; }\n .ag-theme-bootstrap .ag-selection-checkbox span {\n position: relative;\n top: 2px; }\n .ag-theme-bootstrap .ag-group-expanded .ag-icon-contracted:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiA1aDhMNiA5eiIgZmlsbD0iIzMzMyIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-bootstrap .ag-column-drop-horizontal {\n background-color: #f6f6f6;\n height: 25px;\n line-height: 16px;\n padding-left: 12px; }\n .ag-theme-bootstrap .ag-column-drop-horizontal.ag-width-half {\n margin-bottom: -3px; }\n .ag-theme-bootstrap .ag-column-drop-horizontal span {\n float: left;\n height: 100%; }\n .ag-theme-bootstrap .ag-column-drop-horizontal > div:first-child {\n float: left;\n height: 100%; }\n .ag-theme-bootstrap .ag-column-drop-horizontal .ag-icon-group,\n .ag-theme-bootstrap .ag-column-drop-horizontal .ag-icon-pivot {\n margin-right: 12px; }\n .ag-theme-bootstrap .ag-column-drop-horizontal .ag-right-arrow {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik00LjUgMS41aDJ2OWgtMnoiLz48cGF0aCBkPSJNOS45OTMgNC43VjIuOTkzaC02djZINS43VjQuN2g0LjI5M3oiIGlkPSJiIi8+PC9kZWZzPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoOTAgNS41IDYpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHBhdGggc3Ryb2tlPSIjMzMzIiBkPSJNNSAyaDF2OEg1eiIvPjwvZz48ZyB0cmFuc2Zvcm09InNjYWxlKC0xIDEpIHJvdGF0ZSgtNDUgMCAyMi44NzQpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNiIi8+PHBhdGggc3Ryb2tlPSIjMzMzIiBkPSJNOS40OTMgNC4ydi0uNzA3aC01djVINS4yVjQuMmg0LjI5M3oiLz48L2c+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-bootstrap .ag-column-drop-horizontal .ag-left-arrow {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01LjUgMS41aDJ2OWgtMnoiLz48cGF0aCBkPSJNNy45OTMgNC43VjIuOTkzaC02djZIMy43VjQuN2g0LjI5M3oiIGlkPSJiIi8+PC9kZWZzPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoOTAgNi41IDYpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHBhdGggc3Ryb2tlPSIjMzMzIiBkPSJNNiAyaDF2OEg2eiIvPjwvZz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtNDUgNC45OTMgNS45OTMpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNiIi8+PHBhdGggc3Ryb2tlPSIjMzMzIiBkPSJNNy40OTMgNC4ydi0uNzA3aC01djVIMy4yVjQuMmg0LjI5M3oiLz48L2c+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-bootstrap .ag-column-drop-horizontal .ag-left-arrow,\n .ag-theme-bootstrap .ag-column-drop-horizontal .ag-right-arrow {\n overflow: hidden;\n text-indent: 100%;\n height: 100%;\n margin: 0 4px;\n opacity: 1; }\n .ag-theme-bootstrap .ag-column-drop-horizontal .ag-column-drop-empty-message {\n height: 100%;\n line-height: 25px;\n opacity: 0.5; }\n .ag-theme-bootstrap .ag-column-drop-cell {\n background: #ecf0f1;\n border-radius: 16px;\n box-sizing: border-box;\n height: 16px !important;\n margin-top: 4px;\n padding: 0 2px; }\n .ag-theme-bootstrap .ag-column-drop-cell .ag-column-drop-cell-text {\n height: 100%;\n line-height: 16px;\n margin: 0 4px; }\n .ag-theme-bootstrap .ag-column-drop-cell .ag-column-drop-cell-button {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOSA4LjE1NEw4LjE1NCA5IDYgNi44NDYgMy44NDYgOSAzIDguMTU0IDUuMTU0IDYgMyAzLjg0NiAzLjg0NiAzIDYgNS4xNTQgOC4xNTQgMyA5IDMuODQ2IDYuODQ2IDZ6IiBmaWxsPSIjMzMzIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n overflow: hidden;\n text-indent: 100%;\n min-width: 16px;\n height: 100%;\n margin: 0 2px;\n opacity: 1; }\n .ag-theme-bootstrap .ag-column-drop-cell .ag-column-drop-cell-button:hover {\n opacity: 1; }\n .ag-theme-bootstrap .ag-column-drop-cell .ag-column-drag {\n margin-left: 8px;\n margin-top: 2px;\n width: 12px; }\n .ag-theme-bootstrap .ag-select-agg-func-popup {\n background: #f6f6f6;\n border-radius: 0;\n box-shadow: none;\n padding: 4px;\n background: white;\n height: 70px;\n padding: 0; }\n .ag-theme-bootstrap .ag-select-agg-func-popup .ag-virtual-list-item {\n cursor: default;\n line-height: 20px;\n padding-left: 8px; }\n .ag-theme-bootstrap .ag-select-agg-func-popup .ag-virtual-list-item:hover {\n background-color: #bde2e5; }\n .ag-theme-bootstrap .ag-set-filter-list,\n .ag-theme-bootstrap .ag-menu-column-select-wrapper {\n width: auto; }\n .ag-theme-bootstrap .ag-column-drop-vertical > .ag-column-drop-cell {\n float: left;\n margin-bottom: 4px;\n margin-left: 4px;\n margin-top: 0; }\n .ag-theme-bootstrap .ag-cell-data-changed {\n background-color: #cec !important; }\n .ag-theme-bootstrap .ag-cell-data-changed-animation {\n background-color: transparent;\n transition: background-color 1s; }\n .ag-theme-bootstrap .ag-row-stub {\n background-color: #f0f0f0; }\n .ag-theme-bootstrap .ag-stub-cell {\n padding-left: 12px;\n padding-top: 4px; }\n .ag-theme-bootstrap .ag-stub-cell .ag-loading-icon {\n float: left;\n height: 100%; }\n .ag-theme-bootstrap .ag-stub-cell .ag-loading-text {\n float: left;\n height: 100%;\n margin-left: 4px;\n margin-top: 4px; }\n .ag-theme-bootstrap .ag-floating-top {\n background-color: #f0f0f0; }\n .ag-theme-bootstrap .ag-floating-top .ag-row {\n background-color: #f0f0f0; }\n .ag-theme-bootstrap .ag-floating-bottom {\n background-color: #f0f0f0; }\n .ag-theme-bootstrap .ag-rtl .ag-numeric-cell {\n text-align: left; }\n .ag-theme-bootstrap .ag-rtl .ag-header-cell-menu-button {\n float: left; }\n .ag-theme-bootstrap .ag-rtl .ag-header-cell-label {\n float: right;\n width: calc(100% - 12px); }\n .ag-theme-bootstrap .ag-rtl .ag-header-cell-label > span {\n float: right; }\n .ag-theme-bootstrap .ag-rtl .ag-header-cell-label .ag-header-icon {\n margin-top: 2px; }\n .ag-theme-bootstrap .ag-rtl .ag-numeric-header .ag-header-cell-menu-button {\n float: right; }\n .ag-theme-bootstrap .ag-rtl .ag-numeric-header .ag-header-cell-label {\n float: left; }\n .ag-theme-bootstrap .ag-rtl .ag-numeric-header .ag-header-cell-label > span {\n float: left; }\n .ag-theme-bootstrap .ag-rtl .ag-column-panel .ag-pivot-mode span {\n float: right; }\n .ag-theme-bootstrap .ag-rtl .ag-column-panel .ag-pivot-mode .ag-pivot-mode-select {\n margin-right: 4px; }\n .ag-theme-bootstrap .ag-rtl .ag-column-panel .ag-pivot-mode .ag-pivot-mode-select .ag-checkbox-label {\n margin-right: 4px; }\n .ag-theme-bootstrap .ag-rtl .ag-column-panel .ag-column-drop .ag-icon {\n float: right; }\n .ag-theme-bootstrap .ag-rtl .ag-column-panel .ag-column-drop .ag-column-drop-title {\n clear: left;\n float: right; }\n .ag-theme-bootstrap .ag-rtl .ag-column-panel .ag-column-drop .ag-column-drop-empty-message {\n padding-left: 4px;\n padding-right: 16px; }\n .ag-theme-bootstrap .ag-rtl .ag-filter-checkbox {\n float: right;\n margin-left: 4px; }\n .ag-theme-bootstrap .ag-rtl .ag-column-select-panel .ag-column-select-column-group span,\n .ag-theme-bootstrap .ag-rtl .ag-column-select-panel .ag-column-select-column span {\n float: right; }\n .ag-theme-bootstrap .ag-rtl .ag-column-select-panel .ag-column-select-column-group .ag-column-select-checkbox,\n .ag-theme-bootstrap .ag-rtl .ag-column-select-panel .ag-column-select-column-group .ag-column-group-icons,\n .ag-theme-bootstrap .ag-rtl .ag-column-select-panel .ag-column-select-column .ag-column-select-checkbox,\n .ag-theme-bootstrap .ag-rtl .ag-column-select-panel .ag-column-select-column .ag-column-group-icons {\n margin-left: 4px;\n margin-right: 4px; }\n .ag-theme-bootstrap .ag-rtl .ag-column-select-panel .ag-column-select-column.ag-toolpanel-add-group-indent {\n margin-left: 0;\n margin-right: 20px; }\n .ag-theme-bootstrap .ag-rtl .ag-icon-tree-closed {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxyZWN0IHN0cm9rZS1vcGFjaXR5PSIuNSIgc3Ryb2tlPSIjMzMzIiB4PSIxLjUiIHk9IjEuNSIgd2lkdGg9IjkiIGhlaWdodD0iOSIgcng9IjEiLz48cGF0aCBmaWxsPSIjMzMzIiBkPSJNOSA1djJIM1Y1eiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-bootstrap .ag-rtl .ag-header-group-cell-label {\n height: 100%; }\n .ag-theme-bootstrap .ag-rtl .ag-header-group-cell-label span {\n float: right;\n height: 100%; }\n .ag-theme-bootstrap .ag-rtl .ag-header-select-all:not(.ag-hidden) + .ag-cell-label-container {\n float: right; }\n .ag-theme-bootstrap .ag-rtl .ag-header-select-all {\n margin-left: 12px;\n margin-right: 0; }\n .ag-theme-bootstrap .ag-rtl .ag-selection-checkbox span,\n .ag-theme-bootstrap .ag-rtl .ag-group-expanded span,\n .ag-theme-bootstrap .ag-rtl .ag-group-contracted span {\n margin-left: 12px;\n margin-right: 0; }\n .ag-theme-bootstrap .ag-rtl .ag-column-drop-horizontal {\n padding-right: 12px; }\n .ag-theme-bootstrap .ag-rtl .ag-column-drop-horizontal span {\n float: right; }\n .ag-theme-bootstrap .ag-rtl .ag-column-drop-horizontal > div:first-child {\n float: right; }\n .ag-theme-bootstrap .ag-rtl .ag-column-drop-horizontal .ag-icon-group,\n .ag-theme-bootstrap .ag-rtl .ag-column-drop-horizontal .ag-icon-pivot {\n margin-left: 12px;\n margin-right: 0; }\n .ag-theme-bootstrap .ag-rtl .ag-column-drop-horizontal .ag-right-arrow {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik00LjUgMS41aDJ2OWgtMnoiLz48cGF0aCBkPSJNOS45OTMgNC43VjIuOTkzaC02djZINS43VjQuN2g0LjI5M3oiIGlkPSJiIi8+PC9kZWZzPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoOTAgNS41IDYpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHBhdGggc3Ryb2tlPSIjMzMzIiBkPSJNNSAyaDF2OEg1eiIvPjwvZz48ZyB0cmFuc2Zvcm09InNjYWxlKC0xIDEpIHJvdGF0ZSgtNDUgMCAyMi44NzQpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNiIi8+PHBhdGggc3Ryb2tlPSIjMzMzIiBkPSJNOS40OTMgNC4ydi0uNzA3aC01djVINS4yVjQuMmg0LjI5M3oiLz48L2c+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n height: 100%; }\n .ag-theme-bootstrap .ag-rtl .ag-column-drop-horizontal .ag-left-arrow {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01LjUgMS41aDJ2OWgtMnoiLz48cGF0aCBkPSJNNy45OTMgNC43VjIuOTkzaC02djZIMy43VjQuN2g0LjI5M3oiIGlkPSJiIi8+PC9kZWZzPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoOTAgNi41IDYpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHBhdGggc3Ryb2tlPSIjMzMzIiBkPSJNNiAyaDF2OEg2eiIvPjwvZz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtNDUgNC45OTMgNS45OTMpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNiIi8+PHBhdGggc3Ryb2tlPSIjMzMzIiBkPSJNNy40OTMgNC4ydi0uNzA3aC01djVIMy4yVjQuMmg0LjI5M3oiLz48L2c+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n height: 100%; }\n .ag-theme-bootstrap .ag-rtl .ag-floating-filter-body {\n float: right;\n margin-left: 0; }\n .ag-theme-bootstrap .ag-rtl .ag-floating-filter-button {\n float: left; }\n .ag-theme-bootstrap .ag-rtl .ag-header .ag-header-cell-resize {\n left: -4px;\n right: auto; }\n .ag-theme-bootstrap .ag-rtl .ag-header .ag-header-cell-resize::after {\n border-left: 1px solid transparent;\n border-right: 0; }\n .ag-theme-bootstrap .ag-rtl .ag-column-select-header .ag-filter-body {\n margin-left: 4px;\n margin-right: 0; }\n .ag-theme-bootstrap .ag-rtl .ag-column-drag {\n background-position-x: right; }\n .ag-theme-bootstrap .ag-status-bar {\n background: white;\n border: 1px solid transparent;\n border-top: 0;\n color: rgba(0, 0, 0, 0.5);\n display: flex;\n font: 400 14px \"Helvetica Neue\", sans-serif;\n justify-content: flex-end;\n padding: 8px 16px; }\n .ag-theme-bootstrap .ag-status-bar .ag-status-bar-item {\n margin-right: 8px; }\n .ag-theme-bootstrap .ag-status-bar .ag-status-bar-item span:nth-child(1)::after {\n content: \":\"; }\n .ag-theme-bootstrap .ag-status-bar .ag-status-bar-item span:nth-child(2) {\n color: black; }\n .ag-theme-bootstrap .ag-details-row {\n box-sizing: border-box;\n padding: 20px; }\n .ag-theme-bootstrap .ag-overlay-loading-wrapper {\n background-color: rgba(255, 255, 255, 0.5); }\n .ag-theme-bootstrap .ag-overlay-loading-center {\n background: #f6f6f6;\n border-radius: 0;\n box-shadow: none;\n padding: 4px; }\n .ag-theme-bootstrap .ag-tool-panel {\n background-color: #f6f6f6;\n border-right: 1px solid transparent;\n border-top: 1px solid transparent; }\n .ag-theme-bootstrap .ag-tool-panel .ag-side-buttons {\n border-bottom: 1px solid transparent; }\n .ag-theme-bootstrap .ag-tool-panel .ag-side-buttons button {\n background: transparent;\n border: 0;\n border-right: 1px solid transparent;\n color: black;\n height: 20px; }\n .ag-theme-bootstrap .ag-tool-panel .ag-panel-container {\n border-right: 1px solid transparent;\n box-sizing: border-box; }\n .ag-theme-bootstrap .ag-tool-panel.full-width .ag-panel-container {\n border-right: 0; }\n .ag-theme-bootstrap .ag-tool-panel .ag-column-drop {\n min-height: 50px; }\n .ag-theme-bootstrap .ag-rtl .ag-tool-panel .ag-panel-container {\n border-left: 1px solid transparent;\n border-right: 0; }\n .ag-theme-bootstrap .ag-rtl .ag-tool-panel.full-width .ag-panel-container {\n border-left: 0; }\n .ag-theme-bootstrap .ag-rtl .ag-tool-panel .ag-side-buttons button {\n border-left: 1px solid transparent;\n border-right: 0; }\n .ag-theme-bootstrap .ag-column-name-filter {\n box-sizing: border-box;\n width: 100%; }\n .ag-theme-bootstrap .sass-variables::after {\n content: '{ \"autoSizePadding\": \"12px\", \"headerHeight\": \"25px\", \"groupPaddingSize\": \"24px\", \"footerPaddingAddition\": \"16px\", \"virtualItemHeight\": \"20px\", \"aggFuncPopupHeight\": \"70px\", \"checkboxIndentWidth\": \"16px\", \"leafNodePadding\": \"12px\", \"rowHeight\": \"25px\", \"gridSize\": \"4px\", \"iconSize\": \"12px\" }';\n display: none; }\n .ag-theme-bootstrap .ag-tab-header {\n background-color: #e6e6e6; }\n .ag-theme-bootstrap .ag-faded {\n opacity: 0.3; }\n .ag-theme-bootstrap .ag-column-drop-horizontal.ag-column-drop {\n border: 1px solid transparent;\n border-bottom: 0; }\n .ag-theme-bootstrap .ag-column-drop-horizontal.ag-column-drop:last-child {\n border-left: 0; }\n .ag-theme-bootstrap .ag-header {\n background-image: none;\n border-bottom: 1px solid transparent; }\n .ag-theme-bootstrap .ag-header-cell-resize::after {\n height: 25px;\n margin-top: 0; }\n .ag-theme-bootstrap .ag-header-cell {\n border-right: 1px solid transparent;\n box-sizing: border-box; }\n .ag-theme-bootstrap .ag-header-group-cell {\n border-right: 1px solid transparent; }\n .ag-theme-bootstrap .ag-header-group-cell-with-group {\n border-bottom: 1px solid transparent; }\n .ag-theme-bootstrap .ag-header-row {\n border-bottom: 0; }\n .ag-theme-bootstrap .ag-root {\n border: 1px solid transparent; }\n .ag-theme-bootstrap .ag-column-panel {\n border-right: 1px solid transparent; }\n .ag-theme-bootstrap .ag-cell-no-focus {\n border-right: none; }\n .ag-theme-bootstrap .ag-row {\n border-bottom-width: 0; }\n .ag-theme-bootstrap .ag-column-panel .ag-column-drop .ag-column-drop-empty-message {\n line-height: 25px; }\n .ag-theme-bootstrap .ag-floating-filter-button {\n margin-top: 8px; }\n .ag-theme-bootstrap .ag-filter .ag-filter-apply-panel {\n border-top: 1px solid transparent;\n justify-content: flex-start; }\n .ag-theme-bootstrap .ag-cell-focus {\n border: 1px solid darkgrey; }\n .ag-theme-bootstrap .ag-menu .ag-menu-option-active {\n background: #bde2e5; }\n .ag-theme-bootstrap .ag-menu .ag-menu-option {\n line-height: 24px; }\n .ag-theme-bootstrap .ag-column-drop-cell {\n background: #ecf0f1;\n background-image: none;\n border: 1px solid transparent;\n border-radius: 0;\n height: 18px !important; }\n .ag-theme-bootstrap .ag-column-drop-cell .ag-column-drop-cell-button {\n box-sizing: border-box;\n height: calc(100% - 4px);\n margin-bottom: 2px;\n margin-top: 2px; }\n .ag-theme-bootstrap .ag-column-drop-cell .ag-column-drop-cell-button:hover {\n border: 1px solid transparent; }\n .ag-theme-bootstrap .ag-cell-range-selected-1:not(.ag-cell-focus) {\n background-color: rgba(120, 120, 120, 0.4); }\n .ag-theme-bootstrap .ag-cell-range-selected-2:not(.ag-cell-focus) {\n background-color: rgba(80, 80, 80, 0.4); }\n .ag-theme-bootstrap .ag-cell-range-selected-3:not(.ag-cell-focus) {\n background-color: rgba(40, 40, 40, 0.4); }\n .ag-theme-bootstrap .ag-cell-range-selected-4:not(.ag-cell-focus) {\n background-color: rgba(0, 0, 0, 0.4); }\n .ag-theme-bootstrap .ag-cell-highlight {\n background-color: rgba(120, 120, 120, 0.4);\n border-bottom: 2px solid darkgreen; }\n .ag-theme-bootstrap .ag-cell-highlight-animation {\n transition: all 1s; }\n .ag-theme-bootstrap .ag-group-expanded .ag-icon-contracted:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxyZWN0IHN0cm9rZS1vcGFjaXR5PSIuNSIgc3Ryb2tlPSIjMzMzIiB4PSIxLjUiIHk9IjEuNSIgd2lkdGg9IjkiIGhlaWdodD0iOSIgcng9IjEiLz48cGF0aCBmaWxsPSIjMzMzIiBkPSJNOSA1djJIM1Y1eiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-bootstrap .ag-rtl .ag-icon-tree-closed {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMyA2bDQtNHY4eiIgZmlsbD0iIzMzMyIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-bootstrap .ag-cell-inline-editing {\n height: 25px;\n padding: 0; }\n .ag-theme-bootstrap .ag-cell-inline-editing input {\n box-sizing: border-box; }\n .ag-theme-bootstrap .ag-column-panel .ag-column-drop .ag-column-drop-title {\n float: none; }\n .ag-theme-bootstrap .ag-column-select-panel .ag-column-select-column-group,\n .ag-theme-bootstrap .ag-column-select-panel .ag-column-select-column {\n height: 20px;\n line-height: 20px; }\n .ag-theme-bootstrap .ag-filter .ag-filter-header-container {\n height: 24px; }\n .ag-theme-bootstrap .ag-tab {\n box-sizing: initial; }\n .ag-theme-bootstrap .ag-filter .ag-filter-value {\n line-height: 16px; }\n .ag-theme-bootstrap .ag-selection-checkbox span {\n position: relative;\n top: 0; }\n .ag-theme-bootstrap .ag-rich-select-value {\n border-bottom: 1px solid transparent; }\n .ag-theme-bootstrap .ag-header-cell-moving .ag-header-cell-label {\n opacity: 0.5; }\n .ag-theme-bootstrap .ag-header-cell-moving {\n background-color: #bebebe; }\n .ag-theme-bootstrap .ag-ltr .ag-pinned-right-header {\n border-left: 1px solid transparent; }\n .ag-theme-bootstrap .ag-rtl .ag-pinned-left-header {\n border-right: 1px solid transparent; }\n .ag-theme-bootstrap .ag-overlay-loading-wrapper {\n background-color: rgba(255, 255, 255, 0.5); }\n .ag-theme-bootstrap .ag-overlay-loading-center {\n background-color: #fff;\n border: 1px solid transparent;\n border-radius: 10px;\n color: black;\n padding: 10px; }\n .ag-theme-bootstrap .ag-column-name-filter {\n height: 16px; }\n .ag-theme-bootstrap .ag-column-drop-cell .ag-column-drag {\n background-position-y: 0 !important; }\n .ag-theme-bootstrap .ag-menu, .ag-theme-bootstrap .ag-theme-bootstrap.ag-dnd-ghost, .ag-theme-bootstrap .ag-cell-inline-editing, .ag-theme-bootstrap .ag-popup-editor, .ag-theme-bootstrap .ag-select-agg-func-popup, .ag-theme-bootstrap .ag-overlay-loading-center {\n border: 1px solid #ccc; }\n", ""]);
36631
36632// exports
36633
36634
36635/***/ }),
36636/* 163 */
36637/***/ (function(module, exports, __webpack_require__) {
36638
36639// style-loader: Adds some css to the DOM by adding a <style> tag
36640
36641// load the styles
36642var content = __webpack_require__(164);
36643if(typeof content === 'string') content = [[module.i, content, '']];
36644// add the styles to the DOM
36645var update = __webpack_require__(15)(content, {});
36646if(content.locals) module.exports = content.locals;
36647// Hot Module Replacement
36648if(false) {
36649 // When the styles change, update the <style> tags
36650 if(!content.locals) {
36651 module.hot.accept("!!../../node_modules/css-loader/index.js!./ag-theme-blue.css", function() {
36652 var newContent = require("!!../../node_modules/css-loader/index.js!./ag-theme-blue.css");
36653 if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
36654 update(newContent);
36655 });
36656 }
36657 // When the module is disposed, remove the <style> tags
36658 module.hot.dispose(function() { update(); });
36659}
36660
36661/***/ }),
36662/* 164 */
36663/***/ (function(module, exports, __webpack_require__) {
36664
36665exports = module.exports = __webpack_require__(14)();
36666// imports
36667
36668
36669// module
36670exports.push([module.i, ".ag-theme-blue {\n background-color: white;\n color: #222;\n font: 400 14px \"Helvetica Neue\", sans-serif; }\n .ag-theme-blue .ag-body {\n background-color: #f6f6f6; }\n .ag-theme-blue .ag-cell {\n box-sizing: border-box; }\n .ag-theme-blue .ag-menu, .ag-theme-blue .ag-theme-blue.ag-dnd-ghost, .ag-theme-blue .ag-cell-inline-editing, .ag-theme-blue .ag-popup-editor, .ag-theme-blue .ag-select-agg-func-popup, .ag-theme-blue .ag-overlay-loading-center {\n background-color: #f6f6f6;\n border: 1px solid #9bc2e6; }\n .ag-theme-blue .ag-tab-header .ag-tab {\n border: 1px solid transparent;\n border-bottom-width: 0;\n display: inline-block;\n margin: 4px;\n margin-bottom: 0;\n padding: 4px 8px; }\n .ag-theme-blue .ag-tab-header .ag-tab.ag-tab-selected {\n background-color: #f6f6f6;\n border-bottom: 2px solid #f6f6f6 !important;\n border-color: #9bc2e6; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-1 {\n padding-left: 16px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-1 {\n padding-right: 16px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-1 {\n padding-left: 24px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-1 {\n padding-right: 24px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-2 {\n padding-left: 32px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-2 {\n padding-right: 32px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-2 {\n padding-left: 48px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-2 {\n padding-right: 48px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-3 {\n padding-left: 48px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-3 {\n padding-right: 48px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-3 {\n padding-left: 72px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-3 {\n padding-right: 72px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-4 {\n padding-left: 64px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-4 {\n padding-right: 64px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-4 {\n padding-left: 96px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-4 {\n padding-right: 96px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-5 {\n padding-left: 80px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-5 {\n padding-right: 80px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-5 {\n padding-left: 120px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-5 {\n padding-right: 120px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-6 {\n padding-left: 96px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-6 {\n padding-right: 96px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-6 {\n padding-left: 144px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-6 {\n padding-right: 144px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-7 {\n padding-left: 112px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-7 {\n padding-right: 112px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-7 {\n padding-left: 168px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-7 {\n padding-right: 168px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-8 {\n padding-left: 128px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-8 {\n padding-right: 128px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-8 {\n padding-left: 192px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-8 {\n padding-right: 192px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-9 {\n padding-left: 144px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-9 {\n padding-right: 144px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-9 {\n padding-left: 216px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-9 {\n padding-right: 216px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-10 {\n padding-left: 160px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-10 {\n padding-right: 160px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-10 {\n padding-left: 240px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-10 {\n padding-right: 240px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-11 {\n padding-left: 176px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-11 {\n padding-right: 176px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-11 {\n padding-left: 264px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-11 {\n padding-right: 264px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-12 {\n padding-left: 192px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-12 {\n padding-right: 192px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-12 {\n padding-left: 288px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-12 {\n padding-right: 288px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-13 {\n padding-left: 208px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-13 {\n padding-right: 208px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-13 {\n padding-left: 312px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-13 {\n padding-right: 312px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-14 {\n padding-left: 224px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-14 {\n padding-right: 224px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-14 {\n padding-left: 336px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-14 {\n padding-right: 336px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-15 {\n padding-left: 240px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-15 {\n padding-right: 240px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-15 {\n padding-left: 360px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-15 {\n padding-right: 360px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-16 {\n padding-left: 256px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-16 {\n padding-right: 256px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-16 {\n padding-left: 384px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-16 {\n padding-right: 384px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-17 {\n padding-left: 272px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-17 {\n padding-right: 272px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-17 {\n padding-left: 408px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-17 {\n padding-right: 408px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-18 {\n padding-left: 288px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-18 {\n padding-right: 288px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-18 {\n padding-left: 432px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-18 {\n padding-right: 432px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-19 {\n padding-left: 304px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-19 {\n padding-right: 304px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-19 {\n padding-left: 456px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-19 {\n padding-right: 456px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-20 {\n padding-left: 320px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-20 {\n padding-right: 320px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-20 {\n padding-left: 480px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-20 {\n padding-right: 480px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-21 {\n padding-left: 336px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-21 {\n padding-right: 336px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-21 {\n padding-left: 504px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-21 {\n padding-right: 504px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-22 {\n padding-left: 352px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-22 {\n padding-right: 352px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-22 {\n padding-left: 528px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-22 {\n padding-right: 528px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-23 {\n padding-left: 368px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-23 {\n padding-right: 368px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-23 {\n padding-left: 552px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-23 {\n padding-right: 552px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-24 {\n padding-left: 384px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-24 {\n padding-right: 384px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-24 {\n padding-left: 576px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-24 {\n padding-right: 576px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-25 {\n padding-left: 400px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-25 {\n padding-right: 400px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-25 {\n padding-left: 600px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-25 {\n padding-right: 600px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-26 {\n padding-left: 416px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-26 {\n padding-right: 416px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-26 {\n padding-left: 624px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-26 {\n padding-right: 624px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-27 {\n padding-left: 432px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-27 {\n padding-right: 432px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-27 {\n padding-left: 648px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-27 {\n padding-right: 648px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-28 {\n padding-left: 448px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-28 {\n padding-right: 448px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-28 {\n padding-left: 672px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-28 {\n padding-right: 672px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-29 {\n padding-left: 464px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-29 {\n padding-right: 464px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-29 {\n padding-left: 696px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-29 {\n padding-right: 696px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-30 {\n padding-left: 480px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-30 {\n padding-right: 480px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-30 {\n padding-left: 720px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-30 {\n padding-right: 720px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-31 {\n padding-left: 496px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-31 {\n padding-right: 496px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-31 {\n padding-left: 744px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-31 {\n padding-right: 744px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-32 {\n padding-left: 512px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-32 {\n padding-right: 512px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-32 {\n padding-left: 768px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-32 {\n padding-right: 768px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-33 {\n padding-left: 528px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-33 {\n padding-right: 528px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-33 {\n padding-left: 792px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-33 {\n padding-right: 792px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-34 {\n padding-left: 544px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-34 {\n padding-right: 544px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-34 {\n padding-left: 816px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-34 {\n padding-right: 816px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-35 {\n padding-left: 560px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-35 {\n padding-right: 560px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-35 {\n padding-left: 840px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-35 {\n padding-right: 840px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-36 {\n padding-left: 576px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-36 {\n padding-right: 576px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-36 {\n padding-left: 864px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-36 {\n padding-right: 864px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-37 {\n padding-left: 592px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-37 {\n padding-right: 592px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-37 {\n padding-left: 888px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-37 {\n padding-right: 888px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-38 {\n padding-left: 608px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-38 {\n padding-right: 608px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-38 {\n padding-left: 912px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-38 {\n padding-right: 912px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-39 {\n padding-left: 624px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-39 {\n padding-right: 624px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-39 {\n padding-left: 936px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-39 {\n padding-right: 936px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-40 {\n padding-left: 640px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-40 {\n padding-right: 640px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-40 {\n padding-left: 960px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-40 {\n padding-right: 960px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-41 {\n padding-left: 656px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-41 {\n padding-right: 656px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-41 {\n padding-left: 984px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-41 {\n padding-right: 984px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-42 {\n padding-left: 672px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-42 {\n padding-right: 672px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-42 {\n padding-left: 1008px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-42 {\n padding-right: 1008px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-43 {\n padding-left: 688px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-43 {\n padding-right: 688px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-43 {\n padding-left: 1032px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-43 {\n padding-right: 1032px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-44 {\n padding-left: 704px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-44 {\n padding-right: 704px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-44 {\n padding-left: 1056px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-44 {\n padding-right: 1056px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-45 {\n padding-left: 720px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-45 {\n padding-right: 720px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-45 {\n padding-left: 1080px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-45 {\n padding-right: 1080px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-46 {\n padding-left: 736px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-46 {\n padding-right: 736px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-46 {\n padding-left: 1104px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-46 {\n padding-right: 1104px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-47 {\n padding-left: 752px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-47 {\n padding-right: 752px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-47 {\n padding-left: 1128px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-47 {\n padding-right: 1128px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-48 {\n padding-left: 768px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-48 {\n padding-right: 768px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-48 {\n padding-left: 1152px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-48 {\n padding-right: 1152px; }\n .ag-theme-blue .ag-ltr .ag-toolpanel-indent-49 {\n padding-left: 784px; }\n .ag-theme-blue .ag-rtl .ag-toolpanel-indent-49 {\n padding-right: 784px; }\n .ag-theme-blue .ag-ltr .ag-row-group-indent-49 {\n padding-left: 1176px; }\n .ag-theme-blue .ag-rtl .ag-row-group-indent-49 {\n padding-right: 1176px; }\n .ag-theme-blue .ag-ltr .ag-row-group-leaf-indent {\n margin-left: 24px; }\n .ag-theme-blue .ag-rtl .ag-row-group-leaf-indent {\n margin-right: 24px; }\n .ag-theme-blue .ag-rtl .ag-cell-first-right-pinned {\n border-left: 1px solid #9bc2e6; }\n .ag-theme-blue .ag-ltr .ag-cell-first-right-pinned {\n border-left: 1px solid #9bc2e6; }\n .ag-theme-blue .ag-rtl .ag-cell-last-left-pinned {\n border-right: 1px solid #9bc2e6; }\n .ag-theme-blue .ag-ltr .ag-cell-last-left-pinned {\n border-right: 1px solid #9bc2e6; }\n .ag-theme-blue .ag-value-change-delta {\n padding-right: 2px; }\n .ag-theme-blue .ag-value-change-delta-up {\n color: darkgreen; }\n .ag-theme-blue .ag-value-change-delta-down {\n color: darkred; }\n .ag-theme-blue .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 .ag-theme-blue .ag-value-change-value-highlight {\n background-color: #cec;\n transition: background-color 0.1s; }\n .ag-theme-blue .ag-header {\n background-color: #5e9cd3;\n color: white;\n font: 400 14px \"Helvetica Neue\", sans-serif; }\n .ag-theme-blue .ag-header-row {\n border-bottom: 1px solid #9bc2e6;\n box-sizing: border-box; }\n .ag-theme-blue .ag-row {\n border-bottom: 1px solid #9bc2e6;\n box-sizing: border-box; }\n .ag-theme-blue .ag-row-odd {\n background-color: #deebf7; }\n .ag-theme-blue .ag-row-even {\n background-color: white; }\n .ag-theme-blue .ag-row-hover {\n background-color: inherit; }\n .ag-theme-blue .ag-numeric-cell {\n text-align: right; }\n .ag-theme-blue .ag-header-cell-label {\n display: flex;\n float: left;\n height: 100%;\n width: calc(100% - 12px); }\n .ag-theme-blue .ag-header-cell-label span {\n height: 100%; }\n .ag-theme-blue .ag-header-cell-label > span {\n float: left; }\n .ag-theme-blue .ag-header-cell-label .ag-header-icon {\n background-position-y: 10px;\n background-size: 14px 14px;\n height: 100%;\n margin: 0;\n margin-left: 4px;\n opacity: 1; }\n .ag-theme-blue .ag-header-cell-label .ag-header-cell-text {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap; }\n .ag-theme-blue .ag-numeric-header .ag-header-cell-label {\n flex-direction: row-reverse;\n float: right; }\n .ag-theme-blue .ag-numeric-header .ag-header-cell-label > span {\n float: right; }\n .ag-theme-blue .ag-numeric-header .ag-header-cell-menu-button {\n float: left; }\n .ag-theme-blue .ag-header-group-text {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap; }\n .ag-theme-blue .ag-header-cell,\n .ag-theme-blue .ag-header-group-cell {\n line-height: 25px;\n padding-left: 12px;\n padding-right: 12px; }\n .ag-theme-blue .ag-cell {\n line-height: 23px;\n padding-left: 12px;\n padding-right: 12px;\n border: 1px solid transparent;\n padding-left: 11px;\n padding-right: 11px; }\n .ag-theme-blue .ag-row-drag {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0yIDFoMnYySDJ6bTMgMGgydjJINXptMyAwaDJ2Mkg4eiIvPjxwYXRoIGQ9Ik04IDFoMnYySDh6TTIgNGgydjJIMnptMyAwaDJ2Mkg1em0zIDBoMnYySDh6TTIgN2gydjJIMnptMyAwaDJ2Mkg1em0zIDBoMnYySDh6bS02IDNoMnYySDJ6bTMgMGgydjJINXptMyAwaDJ2Mkg4eiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n background-position-x: left;\n background-position-y: 4px;\n float: left;\n height: 100%;\n width: 24px; }\n .ag-theme-blue .ag-column-drag {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0yIDFoMnYySDJ6bTMgMGgydjJINXptMyAwaDJ2Mkg4eiIvPjxwYXRoIGQ9Ik04IDFoMnYySDh6TTIgNGgydjJIMnptMyAwaDJ2Mkg1em0zIDBoMnYySDh6TTIgN2gydjJIMnptMyAwaDJ2Mkg1em0zIDBoMnYySDh6bS02IDNoMnYySDJ6bTMgMGgydjJINXptMyAwaDJ2Mkg4eiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n background-position-x: left;\n background-position-y: 4px !important;\n height: 100%;\n min-width: 16px; }\n .ag-theme-blue .ag-row-dragging {\n opacity: 0.5;\n z-index: 10000; }\n .ag-theme-blue .ag-ltr .ag-cell-focus {\n border: 1px solid black;\n outline: initial; }\n .ag-theme-blue .ag-rtl .ag-cell-focus {\n border: 1px solid black;\n outline: initial; }\n .ag-theme-blue .ag-header-cell-resize {\n position: absolute;\n right: -4px;\n width: 8px;\n z-index: 4; }\n .ag-theme-blue .ag-header-cell-resize::after {\n border-right: 1px solid #9bc2e6;\n box-sizing: content-box;\n content: \"resize\";\n display: block;\n height: 9px;\n margin-top: 8px;\n overflow: hidden;\n text-indent: 4px;\n width: 4px; }\n .ag-theme-blue .ag-icon-aggregation {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOS41IDIuNWgtNmwyIDMuNS0yIDMuNWg2IiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZT0iIzAwMCIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-arrows {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTYgNmwtMS40MSAxLjQxTDE2LjE3IDlINHYyaDEyLjE3bC0xLjU4IDEuNTlMMTYgMTRsNC00eiIvPjxwYXRoIGQ9Ik00IDZsMS40MSAxLjQxTDMuODMgOUgxNnYySDMuODNsMS41OCAxLjU5TDQgMTRsLTQtNHoiLz48cGF0aCBkPSJNNiAxNmwxLjQxLTEuNDFMOSAxNi4xN1Y0aDJ2MTIuMTdsMS41OS0xLjU4TDE0IDE2bC00IDR6Ii8+PHBhdGggZD0iTTE0IDRsLTEuNDEgMS40MUwxMSAzLjgzVjE2SDlWMy44M0w3LjQxIDUuNDEgNiA0bDQtNHoiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-asc {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDNoMnY5SDV6Ii8+PHBhdGggZD0iTTguOTkzIDUuMlYzLjQ5M2gtNnY2SDQuN1Y1LjJoNC4yOTN6IiBpZD0iYiIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik01LjUgMy41aDF2OGgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSg0NSA1Ljk5MyA2LjQ5MykiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2IiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik04LjQ5MyA0Ljd2LS43MDdoLTV2NUg0LjJWNC43aDQuMjkzeiIvPjwvZz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-checkbox-checked-readonly {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjEiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjMDAwIiB4PSIuNSIgeT0iLjUiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgcng9IjEiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik05IDNMNiA4LjVsLTIuNS0yIi8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-checkbox-checked {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjEiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIGZpbGw9IiNGRkYiIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjMDAwIiB4PSIuNSIgeT0iLjUiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgcng9IjEiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik05IDNMNiA4LjVsLTIuNS0yIi8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-checkbox-indeterminate-readonly {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjEiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjMDAwIiB4PSIuNSIgeT0iLjUiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgcng9IjEiLz48cGF0aCBmaWxsPSIjMDAwIiBkPSJNNCA1aDR2Mkg0eiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-checkbox-indeterminate {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjEiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIGZpbGw9IiNGRkYiIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjMDAwIiB4PSIuNSIgeT0iLjUiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgcng9IjEiLz48cGF0aCBmaWxsPSIjMDAwIiBkPSJNNCA1aDR2Mkg0eiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-checkbox-unchecked-readonly {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjEiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjMDAwIiB4PSIuNSIgeT0iLjUiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgcng9IjEiLz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-checkbox-unchecked {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjEiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIGZpbGw9IiNGRkYiIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjMDAwIiB4PSIuNSIgeT0iLjUiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgcng9IjEiLz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-column {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAxaDR2Mkgxem0wIDNoNHY3SDF6IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-columns {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAxaDR2Mkgxem02IDBoNHYySDd6TTEgNWg0djJIMXptNiAwaDR2Mkg3ek0xIDloNHYySDF6bTYgMGg0djJIN3oiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-contracted {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxyZWN0IHN0cm9rZS1vcGFjaXR5PSIuNSIgc3Ryb2tlPSIjMDAwIiB4PSIxLjUiIHk9IjEuNSIgd2lkdGg9IjkiIGhlaWdodD0iOSIgcng9IjEiLz48cGF0aCBmaWxsPSIjMDAwIiBkPSJNOSA1djJIM1Y1eiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-copy {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiMwMDAiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHBhdGggZD0iTTQuNSA0LjVoNXY1aC01eiIvPjxwYXRoIGQ9Ik03LjUgMi41aC01djVoMnYyaDV2LTVoLTJ2LTJ6Ii8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-cut {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiMwMDAiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHBhdGggZD0iTTMgMy4xMmMuNjY3LjA3OCAzIDEuNzQ1IDcgNS0uMzI2LjIwNC0uNjU5LjIwNC0xIDAtLjM0MS0uMjA2LTEuNjc0LTEuMjA2LTQtMyAwIC42NjYtLjY2Ny42NjYtMiAwLTItMS0xLTIuMTIgMC0yeiIvPjxwYXRoIGQ9Ik0zIDguMjY0Yy42NjctLjA4IDMtMS43NDYgNy01LS4zMjYtLjIwNS0uNjU5LS4yMDUtMSAwLS4zNDEuMjA0LTEuNjc0IDEuMjA0LTQgMyAwLS42NjctLjY2Ny0uNjY3LTIgMC0yIDEtMSAyLjExOSAwIDJ6Ii8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-desc {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDJoMnY5SDV6Ii8+PHBhdGggZD0iTTguOTkzIDYuMVY0LjM5M2gtNnY2SDQuN1Y2LjFoNC4yOTN6IiBpZD0iYiIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik01LjUgMi41aDF2OGgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtMTM1IDUuOTkzIDcuMzkzKSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjYiIvPjxwYXRoIHN0cm9rZT0iIzAwMCIgZD0iTTguNDkzIDUuNnYtLjcwN2gtNXY1SDQuMlY1LjZoNC4yOTN6Ii8+PC9nPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-expanded {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxyZWN0IHN0cm9rZS1vcGFjaXR5PSIuNSIgc3Ryb2tlPSIjMDAwIiB4PSIxLjUiIHk9IjEuNSIgd2lkdGg9IjkiIGhlaWdodD0iOSIgcng9IjEiLz48cGF0aCBmaWxsPSIjMDAwIiBkPSJNNSAzaDJ2Nkg1eiIvPjxwYXRoIGZpbGw9IiMwMDAiIGQ9Ik05IDV2MkgzVjV6Ii8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-eye-slash {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0zLjAwMSAzLjkwOEwzIDRhMyAzIDAgMSAwIDUuOTk5LS4wOTJBNS4yNDggNS4yNDggMCAwIDAgNiAzYy0xLjEgMC0yLjEuMzAzLTIuOTk5LjkwOHoiIGZpbGw9IiMwMDAiLz48cGF0aCBkPSJNNCA0LjVjLjY2Ny0uMzMzIDEuNjY3LS41IDMtLjUiIHN0cm9rZT0iIzk3OTc5NyIvPjxwYXRoIGQ9Ik0xIDZjMS4zMzMtMiAzLTMgNS0zczMuNjY3IDEgNSAzQzkuNjY3IDggOCA5IDYgOVMyLjMzMyA4IDEgNnoiIHN0cm9rZT0iIzAwMCIvPjxwYXRoIGQ9Ik00LjAwNCAyLjgzNWw0Ljk5MiA2LjMzIiBzdHJva2U9IiMwMDAiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiLz48cGF0aCBkPSJNMy4wMDQgMi44MzVsNC45OTIgNi4zMyIgc3Ryb2tlPSIjRkZGIiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIi8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-eye {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0zLjAwMSAzLjkwOEwzIDRhMyAzIDAgMSAwIDUuOTk5LS4wOTJBNS4yNDggNS4yNDggMCAwIDAgNiAzYy0xLjEgMC0yLjEuMzAzLTIuOTk5LjkwOHoiIGZpbGw9IiMwMDAiLz48cGF0aCBkPSJNNCA0LjVjLjY2Ny0uMzMzIDEuNjY3LS41IDMtLjUiIHN0cm9rZT0iIzk3OTc5NyIvPjxwYXRoIGQ9Ik0xIDZjMS4zMzMtMiAzLTMgNS0zczMuNjY3IDEgNSAzQzkuNjY3IDggOCA5IDYgOVMyLjMzMyA4IDEgNnoiIHN0cm9rZT0iIzAwMCIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-filter {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAyaDEwTDcgNnY1TDUgOVY2TDEgMnptNCA0djFoMlY2SDV6IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-group {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIHN0cm9rZT0iIzAwMCIgZD0iTTcuNSAxLjVoM3YyaC0zem0wIDRoM3YyaC0zem0wIDRoM3YyaC0zeiIvPjxwYXRoIGZpbGw9IiMwMDAiIGQ9Ik0yIDNoMXY4SDJ6bTEgM2g0djFIM3ptMi00aDN2MUg1eiIvPjxwYXRoIGZpbGw9IiMwMDAiIGQ9Ik0yIDEwaDV2MUgyeiIvPjxwYXRoIHN0cm9rZT0iIzAwMCIgZD0iTTEuNSAxLjVoM3YyaC0zeiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-indeterminate {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0zLjA1NiA0LjU4MWEzLjAwMSAzLjAwMSAwIDAgMCA1Ljg4OCAwQzguMDU5IDQuMTk0IDcuMDc4IDQgNiA0Yy0xLjA3OCAwLTIuMDYuMTk0LTIuOTQ0LjU4MXoiIGZpbGw9IiMwMDAiLz48cGF0aCBkPSJNNCA1LjVjLjY2Ny0uMzMzIDEuNjY3LS41IDMtLjUiIHN0cm9rZT0iIzk3OTc5NyIvPjxwYXRoIGQ9Ik0xIDZjMS4zMzMtMS4zMzMgMy0yIDUtMnMzLjY2Ny42NjcgNSAyQzkuNjY3IDcuMzMzIDggOCA2IDhzLTMuNjY3LS42NjctNS0yeiIgc3Ryb2tlPSIjMDAwIi8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-left {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01LjUgMS41aDJ2OWgtMnoiLz48cGF0aCBkPSJNNy45OTMgNC43VjIuOTkzaC02djZIMy43VjQuN2g0LjI5M3oiIGlkPSJiIi8+PC9kZWZzPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoOTAgNi41IDYpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHBhdGggc3Ryb2tlPSIjMDAwIiBkPSJNNiAyaDF2OEg2eiIvPjwvZz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtNDUgNC45OTMgNS45OTMpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNiIi8+PHBhdGggc3Ryb2tlPSIjMDAwIiBkPSJNNy40OTMgNC4ydi0uNzA3aC01djVIMy4yVjQuMmg0LjI5M3oiLz48L2c+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-loading {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDFoMnYzSDV6Ii8+PHBhdGggaWQ9ImIiIGQ9Ik01IDhoMnYzSDV6Ii8+PHBhdGggaWQ9ImMiIGQ9Ik0xIDVoM3YySDF6Ii8+PHBhdGggaWQ9ImQiIGQ9Ik04IDVoM3YySDh6Ii8+PHBhdGggaWQ9ImUiIGQ9Ik00IDBoMnYzSDR6Ii8+PHBhdGggaWQ9ImYiIGQ9Ik00IDdoMnYzSDR6Ii8+PHBhdGggaWQ9ImciIGQ9Ik0wIDRoM3YySDB6Ii8+PHBhdGggaWQ9ImgiIGQ9Ik03IDRoM3YySDd6Ii8+PC9kZWZzPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjYSIvPjxwYXRoIHN0cm9rZT0iIzk3OTc5NyIgZD0iTTUuNSAxLjVoMXYyaC0xeiIvPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2IiLz48cGF0aCBzdHJva2U9IiM5Nzk3OTciIGQ9Ik01LjUgOC41aDF2MmgtMXoiLz48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNjIi8+PHBhdGggc3Ryb2tlPSIjOTc5Nzk3IiBkPSJNMS41IDUuNWgydjFoLTJ6Ii8+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjZCIvPjxwYXRoIHN0cm9rZT0iIzk3OTc5NyIgZD0iTTguNSA1LjVoMnYxaC0yeiIvPjxnIG9wYWNpdHk9Ii43MTQiPjxnIHRyYW5zZm9ybT0icm90YXRlKDQ1IDQuMjkzIDYuNzA3KSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjZSIvPjxwYXRoIHN0cm9rZT0iIzk3OTc5NyIgZD0iTTQuNS41aDF2MmgtMXoiLz48L2c+PGcgdHJhbnNmb3JtPSJyb3RhdGUoNDUgNC4yOTMgNi43MDcpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNmIi8+PHBhdGggc3Ryb2tlPSIjOTc5Nzk3IiBkPSJNNC41IDcuNWgxdjJoLTF6Ii8+PC9nPjxnIHRyYW5zZm9ybT0icm90YXRlKDQ1IDQuMjkzIDYuNzA3KSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjZyIvPjxwYXRoIHN0cm9rZT0iIzk3OTc5NyIgZD0iTS41IDQuNWgydjFoLTJ6Ii8+PC9nPjxnIHRyYW5zZm9ybT0icm90YXRlKDQ1IDQuMjkzIDYuNzA3KSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjaCIvPjxwYXRoIHN0cm9rZT0iIzk3OTc5NyIgZD0iTTcuNSA0LjVoMnYxaC0yeiIvPjwvZz48L2c+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-menu {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAxaDEwdjJIMXptMCA0aDEwdjJIMXptMCA0aDEwdjJIMXoiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-minus {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiA1aDh2MkgyeiIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-none {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDNoMnY2SDV6Ii8+PHBhdGggZD0iTTguMTQ2IDguMTgyVjYuNDc1aC01djVoMS43MDhWOC4xODJoMy4yOTJ6IiBpZD0iYiIvPjxwYXRoIGQ9Ik04LjUgMi45MTRWMS4yMDdoLTV2NWgxLjcwN1YyLjkxNEg4LjV6IiBpZD0iYyIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik01LjUgMy41aDF2NWgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtMTM1IDUuNjQ2IDguNDc1KSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjYiIvPjxwYXRoIHN0cm9rZT0iIzAwMCIgZD0iTTcuNjQ2IDcuNjgydi0uNzA3aC00djRoLjcwOFY3LjY4MmgzLjI5MnoiLz48L2c+PGcgdHJhbnNmb3JtPSJyb3RhdGUoNDUgNiAzLjcwNykiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2MiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik04IDIuNDE0di0uNzA3SDR2NGguNzA3VjIuNDE0SDh6Ii8+PC9nPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-not-allowed {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiMwMDAiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGNpcmNsZSBjeD0iNiIgY3k9IjYiIHI9IjQiLz48cGF0aCBkPSJNOC41IDMuNUwzLjQwMSA4LjU5OSIgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-paste {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiMwMDAiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHBhdGggZD0iTTIuNSAyLjVoN3Y3aC03eiIvPjxwYXRoIGQ9Ik02LjUgMS41aC0xdjJoLTF2MWgzdi0xaC0xdi0yeiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-pin {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGZpbGw9IiMwMDAiIGQ9Ik0zIDJoNnYxSDh2NGwyIDFIN2wtMSAzLTEtM0gybDItMVYzSDN6Ii8+PHBhdGggZmlsbC1vcGFjaXR5PSIuNSIgZmlsbD0iI0ZGRiIgZD0iTTUgM2gxdjRINXoiLz48cGF0aCBmaWxsLW9wYWNpdHk9Ii4yOCIgZmlsbD0iI0ZGRiIgZD0iTTQgM2gxdjNINHoiLz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-pivot {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiMwMDAiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHJlY3QgeD0iMS41IiB5PSIxLjUiIHdpZHRoPSI5IiBoZWlnaHQ9IjkiIHJ4PSIxIi8+PHBhdGggZD0iTTEwLjUgMy41aC05bTItMnY5IiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIi8+PHBhdGggZD0iTTcuNSA2LjVsMS0xIDEgMW0tMyAxbC0xIDEgMSAxIi8+PHBhdGggZD0iTTguNSA1LjV2M2gtMyIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-plus {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik01IDJoMnY4SDV6Ii8+PHBhdGggZD0iTTIgNWg4djJIMnoiLz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-right {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik00LjUgMS41aDJ2OWgtMnoiLz48cGF0aCBkPSJNOS45OTMgNC43VjIuOTkzaC02djZINS43VjQuN2g0LjI5M3oiIGlkPSJiIi8+PC9kZWZzPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoOTAgNS41IDYpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHBhdGggc3Ryb2tlPSIjMDAwIiBkPSJNNSAyaDF2OEg1eiIvPjwvZz48ZyB0cmFuc2Zvcm09InNjYWxlKC0xIDEpIHJvdGF0ZSgtNDUgMCAyMi44NzQpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNiIi8+PHBhdGggc3Ryb2tlPSIjMDAwIiBkPSJNOS40OTMgNC4ydi0uNzA3aC01djVINS4yVjQuMmg0LjI5M3oiLz48L2c+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-small-left {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMyA2bDQtNHY4eiIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-small-right {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNSAybDQgNC00IDR6IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-small-up {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiA3bDQtNCA0IDR6IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-small-down {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiA1aDhMNiA5eiIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-tick {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMS41IDUuNWwzIDMgNi02IiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZT0iIzAwMCIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-cross {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiAxMGw4LThtMCA4TDIgMiIgc3Ryb2tlPSIjMDAwIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-tree-open {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiA1aDhMNiA5eiIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-tree-closed {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNSAybDQgNC00IDR6IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-icon-tree-indeterminate {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiA1aDh2MkgyeiIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-blue .ag-header-cell-menu-button .ag-icon-menu {\n display: block;\n height: 25px; }\n .ag-theme-blue .ag-icon-checkbox-checked:empty {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjEiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIGZpbGw9IiNGRkYiIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjMDAwIiB4PSIuNSIgeT0iLjUiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgcng9IjEiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik05IDNMNiA4LjVsLTIuNS0yIi8+PC9nPjwvc3ZnPg==); }\n .ag-theme-blue .ag-menu {\n background: #f6f6f6;\n border-radius: 0;\n box-shadow: none;\n padding: 4px;\n padding: 0;\n z-index: 5; }\n .ag-theme-blue .ag-menu .ag-menu-list {\n cursor: default;\n margin-bottom: 4px;\n margin-top: 4px;\n width: 100%; }\n .ag-theme-blue .ag-menu .ag-menu-option {\n line-height: 16px;\n padding-left: 8px;\n padding-right: 8px; }\n .ag-theme-blue .ag-menu .ag-menu-option > span {\n display: table-cell;\n vertical-align: middle; }\n .ag-theme-blue .ag-menu .ag-menu-option-active {\n background: inherit; }\n .ag-theme-blue .ag-menu .ag-menu-option-disabled {\n opacity: 0.5; }\n .ag-theme-blue .ag-menu .ag-menu-option-icon {\n padding-left: 4px;\n padding-right: 4px; }\n .ag-theme-blue .ag-menu .ag-menu-option-icon span {\n height: 12px;\n line-height: 0;\n margin-top: 4px; }\n .ag-theme-blue .ag-menu .ag-menu-option-shortcut {\n padding-left: 8px; }\n .ag-theme-blue .ag-menu .ag-menu-separator {\n margin-left: -4px; }\n .ag-theme-blue .ag-menu .ag-menu-separator > span {\n background-image: url(\"data:image/svg+xml;utf8,<svg width='1' height='8px' viewBox='0 0 1 8px' xmlns='http://www.w3.org/2000/svg'> <line x1='0' y1='4px' x2='1' y2='4px' stroke-width='1' stroke='#9bc2e6'/> </svg>\");\n height: 8px; }\n .ag-theme-blue .ag-menu .ag-menu-option-popup-pointer {\n width: 20px; }\n .ag-theme-blue.ag-dnd-ghost {\n background: #f6f6f6;\n border-radius: 0;\n box-shadow: none;\n padding: 4px;\n border: 1px solid #9bc2e6;\n color: white;\n font: 400 14px \"Helvetica Neue\", sans-serif;\n height: 25px !important;\n line-height: 25px;\n margin: 0;\n padding: 0 8px;\n transform: translateY(8px);\n z-index: 5; }\n .ag-theme-blue.ag-dnd-ghost span,\n .ag-theme-blue.ag-dnd-ghost div {\n float: left;\n height: 100%;\n margin: 0;\n padding: 0; }\n .ag-theme-blue.ag-dnd-ghost .ag-dnd-ghost-icon {\n margin-right: 4px;\n opacity: 1; }\n .ag-theme-blue .ag-tab-header {\n background: #f6f6f6;\n min-width: 220px;\n width: 100%; }\n .ag-theme-blue .ag-tab-header .ag-tab {\n border-bottom: 2px solid transparent;\n height: 16px;\n text-align: center;\n vertical-align: middle; }\n .ag-theme-blue .ag-tab-header .ag-tab.ag-tab-selected .ag-icon-filter {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAyaDEwTDcgNnY1TDUgOVY2TDEgMnptNCA0djFoMlY2SDV6IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=);\n display: inline-block; }\n .ag-theme-blue .ag-tab-header .ag-tab.ag-tab-selected .ag-icon-columns {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAxaDR2Mkgxem02IDBoNHYySDd6TTEgNWg0djJIMXptNiAwaDR2Mkg3ek0xIDloNHYySDF6bTYgMGg0djJIN3oiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==);\n display: inline-block; }\n .ag-theme-blue .ag-tab-header .ag-tab.ag-tab-selected .ag-icon-menu {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAxaDEwdjJIMXptMCA0aDEwdjJIMXptMCA0aDEwdjJIMXoiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==);\n display: inline-block; }\n .ag-theme-blue .ag-tab-body {\n padding: 4px 0; }\n .ag-theme-blue .ag-tab-body .ag-filter-select {\n margin: 4px;\n width: calc(100% - 8px); }\n .ag-theme-blue .ag-tab-body .ag-menu-list {\n margin-bottom: 0;\n margin-top: 0; }\n .ag-theme-blue .ag-tab-body .ag-menu-list > div:first-child > span {\n padding-top: 0; }\n .ag-theme-blue .ag-tab-body .ag-menu-list > div:last-child > span {\n padding-bottom: 0; }\n .ag-theme-blue .ag-tab-body .ag-menu-list > div:last-child > .ag-menu-option-popup-pointer {\n background-position-y: 0; }\n .ag-theme-blue .ag-filter-select {\n margin: 4px;\n width: calc(100% - 8px); }\n .ag-theme-blue .ag-filter input[type=\"radio\"] {\n margin: 0 3px 0 6px;\n width: 12px;\n height: 17px;\n vertical-align: top; }\n .ag-theme-blue .ag-filter input[type=\"text\"],\n .ag-theme-blue .ag-filter input[type=\"date\"] {\n padding-left: 4px; }\n .ag-theme-blue .ag-filter label {\n display: block;\n padding-left: 4px; }\n .ag-theme-blue .ag-filter .ag-set-filter-list {\n height: 130px;\n padding-top: 4px; }\n .ag-theme-blue .ag-filter .ag-filter-header-container {\n box-sizing: border-box;\n height: 20px; }\n .ag-theme-blue .ag-filter .ag-filter-header-container:nth-child(2) {\n border-bottom: 1px solid #9bc2e6; }\n .ag-theme-blue .ag-filter .ag-filter-checkbox {\n float: left;\n height: 20px;\n margin-right: 4px;\n padding-top: 2px; }\n .ag-theme-blue .ag-filter .ag-filter-value {\n height: 20px;\n line-height: 14px; }\n .ag-theme-blue .ag-filter .ag-filter-apply-panel {\n display: flex;\n justify-content: flex-end;\n padding: 4px;\n padding-top: 8px; }\n .ag-theme-blue .ag-filter .ag-filter-apply-panel button + button {\n margin-left: 8px; }\n .ag-theme-blue .ag-column-select-panel .ag-column-select-column-group,\n .ag-theme-blue .ag-column-select-panel .ag-column-select-column {\n height: 16px;\n line-height: 16px;\n margin-left: 0; }\n .ag-theme-blue .ag-column-select-panel .ag-column-select-column-group span,\n .ag-theme-blue .ag-column-select-panel .ag-column-select-column span {\n float: left;\n height: 100%; }\n .ag-theme-blue .ag-column-select-panel .ag-column-select-column-group .ag-column-select-indent,\n .ag-theme-blue .ag-column-select-panel .ag-column-select-column .ag-column-select-indent {\n width: 8px; }\n .ag-theme-blue .ag-column-select-panel .ag-column-select-column-group .ag-column-select-checkbox,\n .ag-theme-blue .ag-column-select-panel .ag-column-select-column-group .ag-column-group-icons,\n .ag-theme-blue .ag-column-select-panel .ag-column-select-column .ag-column-select-checkbox,\n .ag-theme-blue .ag-column-select-panel .ag-column-select-column .ag-column-group-icons {\n margin-left: 4px;\n margin-right: 4px; }\n .ag-theme-blue .ag-column-select-panel .ag-column-container {\n padding-top: 4px; }\n .ag-theme-blue .ag-column-select-panel .ag-column-select-column.ag-toolpanel-add-group-indent {\n margin-left: 20px; }\n .ag-theme-blue .ag-column-tool-panel {\n display: flex; }\n .ag-theme-blue .ag-filter-body {\n flex-grow: 1;\n flex-shrink: 1;\n padding-right: 4px; }\n .ag-theme-blue .ag-column-tool-panel-item button {\n font-family: \"Helvetica Neue\", sans-serif;\n font-size: 14px;\n height: 100%; }\n .ag-theme-blue .ag-filter-filter {\n margin-bottom: 4px; }\n .ag-theme-blue .ag-column-select-header {\n border-bottom: 1px solid #9bc2e6;\n box-sizing: border-box;\n height: 25px;\n padding-top: 4px; }\n .ag-theme-blue .ag-column-select-header label {\n display: block;\n padding-left: 4px; }\n .ag-theme-blue .ag-column-select-header label .ag-filter-checkbox {\n float: left;\n margin-right: 4px; }\n .ag-theme-blue .ag-column-select-header .ag-column-tool-panel a {\n margin: 0 4px;\n padding-top: 2px; }\n .ag-theme-blue .ag-group-child-count::before {\n content: \" \"; }\n .ag-theme-blue .ag-column-panel {\n border-right: 0; }\n .ag-theme-blue .ag-column-panel .ag-pivot-mode {\n border-bottom: 1px solid #9bc2e6;\n box-sizing: border-box;\n height: 25px;\n line-height: 25px; }\n .ag-theme-blue .ag-column-panel .ag-pivot-mode span {\n float: left;\n height: 100%; }\n .ag-theme-blue .ag-column-panel .ag-pivot-mode .ag-pivot-mode-select {\n margin-left: 4px; }\n .ag-theme-blue .ag-column-panel .ag-pivot-mode .ag-pivot-mode-select .ag-checkbox-label {\n margin-left: 4px; }\n .ag-theme-blue .ag-column-panel .ag-column-select-panel {\n border-bottom: 1px solid #9bc2e6;\n padding-bottom: 3px;\n padding-top: 0; }\n .ag-theme-blue .ag-column-panel .ag-column-drop {\n border-bottom: 1px solid #9bc2e6;\n clear: both;\n overflow: auto;\n padding: 4px 0;\n padding-bottom: 8px; }\n .ag-theme-blue .ag-column-panel .ag-column-drop .ag-icon {\n float: left;\n height: 20px;\n margin: 0 4px; }\n .ag-theme-blue .ag-column-panel .ag-column-drop .ag-column-drop-title {\n clear: right;\n float: left;\n height: 20px;\n line-height: 20px;\n width: calc(100% - 20px); }\n .ag-theme-blue .ag-column-panel .ag-column-drop .ag-column-drop-empty-message {\n clear: both;\n color: rgba(34, 34, 34, 0.5);\n font: 400 14px \"Helvetica Neue\", sans-serif;\n line-height: 8px;\n padding-left: 16px;\n padding-right: 4px; }\n .ag-theme-blue .ag-column-panel .ag-column-drop:last-child {\n border-bottom: 0; }\n .ag-theme-blue .ag-filter-icon:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAyaDEwTDcgNnY1TDUgOVY2TDEgMnptNCA0djFoMlY2SDV6IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-blue .ag-sort-ascending-icon:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDNoMnY5SDV6Ii8+PHBhdGggZD0iTTguOTkzIDUuMlYzLjQ5M2gtNnY2SDQuN1Y1LjJoNC4yOTN6IiBpZD0iYiIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik01LjUgMy41aDF2OGgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSg0NSA1Ljk5MyA2LjQ5MykiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2IiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik04LjQ5MyA0Ljd2LS43MDdoLTV2NUg0LjJWNC43aDQuMjkzeiIvPjwvZz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-blue .ag-sort-descending-icon:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDJoMnY5SDV6Ii8+PHBhdGggZD0iTTguOTkzIDYuMVY0LjM5M2gtNnY2SDQuN1Y2LjFoNC4yOTN6IiBpZD0iYiIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik01LjUgMi41aDF2OGgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtMTM1IDUuOTkzIDcuMzkzKSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjYiIvPjxwYXRoIHN0cm9rZT0iIzAwMCIgZD0iTTguNDkzIDUuNnYtLjcwN2gtNXY1SDQuMlY1LjZoNC4yOTN6Ii8+PC9nPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-blue .ag-sort-none-icon:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDNoMnY2SDV6Ii8+PHBhdGggZD0iTTguMTQ2IDguMTgyVjYuNDc1aC01djVoMS43MDhWOC4xODJoMy4yOTJ6IiBpZD0iYiIvPjxwYXRoIGQ9Ik04LjUgMi45MTRWMS4yMDdoLTV2NWgxLjcwN1YyLjkxNEg4LjV6IiBpZD0iYyIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik01LjUgMy41aDF2NWgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtMTM1IDUuNjQ2IDguNDc1KSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjYiIvPjxwYXRoIHN0cm9rZT0iIzAwMCIgZD0iTTcuNjQ2IDcuNjgydi0uNzA3aC00djRoLjcwOFY3LjY4MmgzLjI5MnoiLz48L2c+PGcgdHJhbnNmb3JtPSJyb3RhdGUoNDUgNiAzLjcwNykiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2MiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik04IDIuNDE0di0uNzA3SDR2NGguNzA3VjIuNDE0SDh6Ii8+PC9nPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-blue .ag-numeric-header .ag-header-cell-label .ag-header-icon {\n margin-left: 0;\n margin-right: 4px; }\n .ag-theme-blue .ag-paging-panel {\n align-items: center;\n border-top: 1px solid #9bc2e6;\n color: white;\n display: flex;\n height: 25px;\n justify-content: flex-end;\n padding: 0 12px; }\n .ag-theme-blue .ag-paging-panel > span {\n margin-left: 16px; }\n .ag-theme-blue .ag-row-selected {\n background-color: #c7c7c7; }\n .ag-theme-blue .ag-cell-range-selected:not(.ag-cell-focus) {\n background-color: rgba(100, 160, 160, 0.4); }\n .ag-theme-blue .ag-cell-inline-editing {\n background: #f6f6f6;\n border-radius: 0;\n box-shadow: none;\n padding: 4px;\n height: 37px;\n line-height: normal;\n padding: 12px;\n z-index: 2; }\n .ag-theme-blue .ag-cell-inline-editing select {\n height: auto; }\n .ag-theme-blue .ag-popup-editor {\n background: #f6f6f6;\n border-radius: 0;\n box-shadow: none;\n padding: 4px;\n padding: 0;\n z-index: 1; }\n .ag-theme-blue .ag-popup-editor .ag-large-textarea textarea {\n height: auto;\n padding: 12px; }\n .ag-theme-blue .ag-rich-select {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiA1aDhMNiA5eiIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);\n background-position-x: calc(100% - 4px);\n background-position-y: 8px;\n background-repeat: no-repeat; }\n .ag-theme-blue .ag-rich-select .ag-rich-select-list {\n height: 162.5px; }\n .ag-theme-blue .ag-rich-select .ag-rich-select-value {\n height: 25px;\n line-height: 25px;\n padding-left: 12px; }\n .ag-theme-blue .ag-rich-select .ag-virtual-list-item {\n cursor: default;\n height: 25px;\n line-height: 25px; }\n .ag-theme-blue .ag-rich-select .ag-virtual-list-item:hover {\n background-color: inherit; }\n .ag-theme-blue .ag-rich-select .ag-rich-select-row {\n padding-left: 12px; }\n .ag-theme-blue .ag-rich-select .ag-rich-select-row-selected {\n background-color: #c7c7c7; }\n .ag-theme-blue .ag-floating-filter-body {\n float: left;\n height: 100%;\n margin-right: 0;\n width: calc(100% - 20px); }\n .ag-theme-blue .ag-floating-filter-body input {\n box-sizing: border-box; }\n .ag-theme-blue .ag-floating-filter-full-body input {\n box-sizing: border-box; }\n .ag-theme-blue .ag-floating-filter-button {\n float: right;\n line-height: 12px;\n margin-top: 10px; }\n .ag-theme-blue .ag-floating-filter-button button {\n appearance: none;\n background: transparent;\n border: 0;\n height: 12px;\n padding: 0;\n width: 12px; }\n .ag-theme-blue .ag-cell-label-container {\n height: 100%; }\n .ag-theme-blue .ag-header-group-cell-label {\n height: 100%; }\n .ag-theme-blue .ag-header-group-cell-label span {\n float: left;\n height: 100%; }\n .ag-theme-blue .ag-header-select-all {\n height: 100%;\n margin-right: 12px; }\n .ag-theme-blue .ag-header-select-all span {\n height: 100%; }\n .ag-theme-blue .ag-header-select-all:not(.ag-hidden) + .ag-cell-label-container {\n float: left;\n width: calc(100% - 12px - 12px); }\n .ag-theme-blue .ag-selection-checkbox span,\n .ag-theme-blue .ag-group-expanded span,\n .ag-theme-blue .ag-group-contracted span {\n margin-right: 12px; }\n .ag-theme-blue .ag-selection-checkbox span {\n position: relative;\n top: 2px; }\n .ag-theme-blue .ag-group-expanded .ag-icon-contracted:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiA1aDhMNiA5eiIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-blue .ag-column-drop-horizontal {\n background-color: #f6f6f6;\n height: 25px;\n line-height: 16px;\n padding-left: 12px; }\n .ag-theme-blue .ag-column-drop-horizontal.ag-width-half {\n margin-bottom: -3px; }\n .ag-theme-blue .ag-column-drop-horizontal span {\n float: left;\n height: 100%; }\n .ag-theme-blue .ag-column-drop-horizontal > div:first-child {\n float: left;\n height: 100%; }\n .ag-theme-blue .ag-column-drop-horizontal .ag-icon-group,\n .ag-theme-blue .ag-column-drop-horizontal .ag-icon-pivot {\n margin-right: 12px; }\n .ag-theme-blue .ag-column-drop-horizontal .ag-right-arrow {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik00LjUgMS41aDJ2OWgtMnoiLz48cGF0aCBkPSJNOS45OTMgNC43VjIuOTkzaC02djZINS43VjQuN2g0LjI5M3oiIGlkPSJiIi8+PC9kZWZzPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoOTAgNS41IDYpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHBhdGggc3Ryb2tlPSIjMDAwIiBkPSJNNSAyaDF2OEg1eiIvPjwvZz48ZyB0cmFuc2Zvcm09InNjYWxlKC0xIDEpIHJvdGF0ZSgtNDUgMCAyMi44NzQpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNiIi8+PHBhdGggc3Ryb2tlPSIjMDAwIiBkPSJNOS40OTMgNC4ydi0uNzA3aC01djVINS4yVjQuMmg0LjI5M3oiLz48L2c+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-blue .ag-column-drop-horizontal .ag-left-arrow {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01LjUgMS41aDJ2OWgtMnoiLz48cGF0aCBkPSJNNy45OTMgNC43VjIuOTkzaC02djZIMy43VjQuN2g0LjI5M3oiIGlkPSJiIi8+PC9kZWZzPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoOTAgNi41IDYpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHBhdGggc3Ryb2tlPSIjMDAwIiBkPSJNNiAyaDF2OEg2eiIvPjwvZz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtNDUgNC45OTMgNS45OTMpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNiIi8+PHBhdGggc3Ryb2tlPSIjMDAwIiBkPSJNNy40OTMgNC4ydi0uNzA3aC01djVIMy4yVjQuMmg0LjI5M3oiLz48L2c+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-blue .ag-column-drop-horizontal .ag-left-arrow,\n .ag-theme-blue .ag-column-drop-horizontal .ag-right-arrow {\n overflow: hidden;\n text-indent: 100%;\n height: 100%;\n margin: 0 4px;\n opacity: 1; }\n .ag-theme-blue .ag-column-drop-horizontal .ag-column-drop-empty-message {\n height: 100%;\n line-height: 25px;\n opacity: 0.5; }\n .ag-theme-blue .ag-column-drop-cell {\n background: #ddebf7;\n border-radius: 16px;\n box-sizing: border-box;\n height: 16px !important;\n margin-top: 4px;\n padding: 0 2px; }\n .ag-theme-blue .ag-column-drop-cell .ag-column-drop-cell-text {\n height: 100%;\n line-height: 16px;\n margin: 0 4px; }\n .ag-theme-blue .ag-column-drop-cell .ag-column-drop-cell-button {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOSA4LjE1NEw4LjE1NCA5IDYgNi44NDYgMy44NDYgOSAzIDguMTU0IDUuMTU0IDYgMyAzLjg0NiAzLjg0NiAzIDYgNS4xNTQgOC4xNTQgMyA5IDMuODQ2IDYuODQ2IDZ6Ii8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n overflow: hidden;\n text-indent: 100%;\n min-width: 16px;\n height: 100%;\n margin: 0 2px;\n opacity: 1; }\n .ag-theme-blue .ag-column-drop-cell .ag-column-drop-cell-button:hover {\n opacity: 1; }\n .ag-theme-blue .ag-column-drop-cell .ag-column-drag {\n margin-left: 8px;\n margin-top: 2px;\n width: 12px; }\n .ag-theme-blue .ag-select-agg-func-popup {\n background: #f6f6f6;\n border-radius: 0;\n box-shadow: none;\n padding: 4px;\n background: white;\n height: 70px;\n padding: 0; }\n .ag-theme-blue .ag-select-agg-func-popup .ag-virtual-list-item {\n cursor: default;\n line-height: 20px;\n padding-left: 8px; }\n .ag-theme-blue .ag-select-agg-func-popup .ag-virtual-list-item:hover {\n background-color: #c7c7c7; }\n .ag-theme-blue .ag-set-filter-list,\n .ag-theme-blue .ag-menu-column-select-wrapper {\n width: auto; }\n .ag-theme-blue .ag-column-drop-vertical > .ag-column-drop-cell {\n float: left;\n margin-bottom: 4px;\n margin-left: 4px;\n margin-top: 0; }\n .ag-theme-blue .ag-cell-data-changed {\n background-color: #cec !important; }\n .ag-theme-blue .ag-cell-data-changed-animation {\n background-color: transparent;\n transition: background-color 1s; }\n .ag-theme-blue .ag-row-stub {\n background-color: #f0f0f0; }\n .ag-theme-blue .ag-stub-cell {\n padding-left: 12px;\n padding-top: 4px; }\n .ag-theme-blue .ag-stub-cell .ag-loading-icon {\n float: left;\n height: 100%; }\n .ag-theme-blue .ag-stub-cell .ag-loading-text {\n float: left;\n height: 100%;\n margin-left: 4px;\n margin-top: 4px; }\n .ag-theme-blue .ag-floating-top {\n background-color: #f0f0f0; }\n .ag-theme-blue .ag-floating-top .ag-row {\n background-color: #f0f0f0; }\n .ag-theme-blue .ag-floating-bottom {\n background-color: #f0f0f0; }\n .ag-theme-blue .ag-rtl .ag-numeric-cell {\n text-align: left; }\n .ag-theme-blue .ag-rtl .ag-header-cell-menu-button {\n float: left; }\n .ag-theme-blue .ag-rtl .ag-header-cell-label {\n float: right;\n width: calc(100% - 12px); }\n .ag-theme-blue .ag-rtl .ag-header-cell-label > span {\n float: right; }\n .ag-theme-blue .ag-rtl .ag-header-cell-label .ag-header-icon {\n margin-top: 2px; }\n .ag-theme-blue .ag-rtl .ag-numeric-header .ag-header-cell-menu-button {\n float: right; }\n .ag-theme-blue .ag-rtl .ag-numeric-header .ag-header-cell-label {\n float: left; }\n .ag-theme-blue .ag-rtl .ag-numeric-header .ag-header-cell-label > span {\n float: left; }\n .ag-theme-blue .ag-rtl .ag-column-panel .ag-pivot-mode span {\n float: right; }\n .ag-theme-blue .ag-rtl .ag-column-panel .ag-pivot-mode .ag-pivot-mode-select {\n margin-right: 4px; }\n .ag-theme-blue .ag-rtl .ag-column-panel .ag-pivot-mode .ag-pivot-mode-select .ag-checkbox-label {\n margin-right: 4px; }\n .ag-theme-blue .ag-rtl .ag-column-panel .ag-column-drop .ag-icon {\n float: right; }\n .ag-theme-blue .ag-rtl .ag-column-panel .ag-column-drop .ag-column-drop-title {\n clear: left;\n float: right; }\n .ag-theme-blue .ag-rtl .ag-column-panel .ag-column-drop .ag-column-drop-empty-message {\n padding-left: 4px;\n padding-right: 16px; }\n .ag-theme-blue .ag-rtl .ag-filter-checkbox {\n float: right;\n margin-left: 4px; }\n .ag-theme-blue .ag-rtl .ag-column-select-panel .ag-column-select-column-group span,\n .ag-theme-blue .ag-rtl .ag-column-select-panel .ag-column-select-column span {\n float: right; }\n .ag-theme-blue .ag-rtl .ag-column-select-panel .ag-column-select-column-group .ag-column-select-checkbox,\n .ag-theme-blue .ag-rtl .ag-column-select-panel .ag-column-select-column-group .ag-column-group-icons,\n .ag-theme-blue .ag-rtl .ag-column-select-panel .ag-column-select-column .ag-column-select-checkbox,\n .ag-theme-blue .ag-rtl .ag-column-select-panel .ag-column-select-column .ag-column-group-icons {\n margin-left: 4px;\n margin-right: 4px; }\n .ag-theme-blue .ag-rtl .ag-column-select-panel .ag-column-select-column.ag-toolpanel-add-group-indent {\n margin-left: 0;\n margin-right: 20px; }\n .ag-theme-blue .ag-rtl .ag-icon-tree-closed {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxyZWN0IHN0cm9rZS1vcGFjaXR5PSIuNSIgc3Ryb2tlPSIjMDAwIiB4PSIxLjUiIHk9IjEuNSIgd2lkdGg9IjkiIGhlaWdodD0iOSIgcng9IjEiLz48cGF0aCBmaWxsPSIjMDAwIiBkPSJNOSA1djJIM1Y1eiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-blue .ag-rtl .ag-header-group-cell-label {\n height: 100%; }\n .ag-theme-blue .ag-rtl .ag-header-group-cell-label span {\n float: right;\n height: 100%; }\n .ag-theme-blue .ag-rtl .ag-header-select-all:not(.ag-hidden) + .ag-cell-label-container {\n float: right; }\n .ag-theme-blue .ag-rtl .ag-header-select-all {\n margin-left: 12px;\n margin-right: 0; }\n .ag-theme-blue .ag-rtl .ag-selection-checkbox span,\n .ag-theme-blue .ag-rtl .ag-group-expanded span,\n .ag-theme-blue .ag-rtl .ag-group-contracted span {\n margin-left: 12px;\n margin-right: 0; }\n .ag-theme-blue .ag-rtl .ag-column-drop-horizontal {\n padding-right: 12px; }\n .ag-theme-blue .ag-rtl .ag-column-drop-horizontal span {\n float: right; }\n .ag-theme-blue .ag-rtl .ag-column-drop-horizontal > div:first-child {\n float: right; }\n .ag-theme-blue .ag-rtl .ag-column-drop-horizontal .ag-icon-group,\n .ag-theme-blue .ag-rtl .ag-column-drop-horizontal .ag-icon-pivot {\n margin-left: 12px;\n margin-right: 0; }\n .ag-theme-blue .ag-rtl .ag-column-drop-horizontal .ag-right-arrow {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik00LjUgMS41aDJ2OWgtMnoiLz48cGF0aCBkPSJNOS45OTMgNC43VjIuOTkzaC02djZINS43VjQuN2g0LjI5M3oiIGlkPSJiIi8+PC9kZWZzPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoOTAgNS41IDYpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHBhdGggc3Ryb2tlPSIjMDAwIiBkPSJNNSAyaDF2OEg1eiIvPjwvZz48ZyB0cmFuc2Zvcm09InNjYWxlKC0xIDEpIHJvdGF0ZSgtNDUgMCAyMi44NzQpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNiIi8+PHBhdGggc3Ryb2tlPSIjMDAwIiBkPSJNOS40OTMgNC4ydi0uNzA3aC01djVINS4yVjQuMmg0LjI5M3oiLz48L2c+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n height: 100%; }\n .ag-theme-blue .ag-rtl .ag-column-drop-horizontal .ag-left-arrow {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01LjUgMS41aDJ2OWgtMnoiLz48cGF0aCBkPSJNNy45OTMgNC43VjIuOTkzaC02djZIMy43VjQuN2g0LjI5M3oiIGlkPSJiIi8+PC9kZWZzPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoOTAgNi41IDYpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHBhdGggc3Ryb2tlPSIjMDAwIiBkPSJNNiAyaDF2OEg2eiIvPjwvZz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtNDUgNC45OTMgNS45OTMpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNiIi8+PHBhdGggc3Ryb2tlPSIjMDAwIiBkPSJNNy40OTMgNC4ydi0uNzA3aC01djVIMy4yVjQuMmg0LjI5M3oiLz48L2c+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n height: 100%; }\n .ag-theme-blue .ag-rtl .ag-floating-filter-body {\n float: right;\n margin-left: 0; }\n .ag-theme-blue .ag-rtl .ag-floating-filter-button {\n float: left; }\n .ag-theme-blue .ag-rtl .ag-header .ag-header-cell-resize {\n left: -4px;\n right: auto; }\n .ag-theme-blue .ag-rtl .ag-header .ag-header-cell-resize::after {\n border-left: 1px solid #9bc2e6;\n border-right: 0; }\n .ag-theme-blue .ag-rtl .ag-column-select-header .ag-filter-body {\n margin-left: 4px;\n margin-right: 0; }\n .ag-theme-blue .ag-rtl .ag-column-drag {\n background-position-x: right; }\n .ag-theme-blue .ag-status-bar {\n background: white;\n border: 1px solid #9bc2e6;\n border-top: 0;\n color: rgba(34, 34, 34, 0.5);\n display: flex;\n font: 400 14px \"Helvetica Neue\", sans-serif;\n justify-content: flex-end;\n padding: 8px 16px; }\n .ag-theme-blue .ag-status-bar .ag-status-bar-item {\n margin-right: 8px; }\n .ag-theme-blue .ag-status-bar .ag-status-bar-item span:nth-child(1)::after {\n content: \":\"; }\n .ag-theme-blue .ag-status-bar .ag-status-bar-item span:nth-child(2) {\n color: #222; }\n .ag-theme-blue .ag-details-row {\n box-sizing: border-box;\n padding: 20px; }\n .ag-theme-blue .ag-overlay-loading-wrapper {\n background-color: rgba(255, 255, 255, 0.5); }\n .ag-theme-blue .ag-overlay-loading-center {\n background: #f6f6f6;\n border-radius: 0;\n box-shadow: none;\n padding: 4px; }\n .ag-theme-blue .ag-tool-panel {\n background-color: #f6f6f6;\n border-right: 1px solid #9bc2e6;\n border-top: 1px solid #9bc2e6; }\n .ag-theme-blue .ag-tool-panel .ag-side-buttons {\n border-bottom: 1px solid #9bc2e6; }\n .ag-theme-blue .ag-tool-panel .ag-side-buttons button {\n background: transparent;\n border: 0;\n border-right: 1px solid #9bc2e6;\n color: #222;\n height: 20px; }\n .ag-theme-blue .ag-tool-panel .ag-panel-container {\n border-right: 1px solid #9bc2e6;\n box-sizing: border-box; }\n .ag-theme-blue .ag-tool-panel.full-width .ag-panel-container {\n border-right: 0; }\n .ag-theme-blue .ag-tool-panel .ag-column-drop {\n min-height: 50px; }\n .ag-theme-blue .ag-rtl .ag-tool-panel .ag-panel-container {\n border-left: 1px solid #9bc2e6;\n border-right: 0; }\n .ag-theme-blue .ag-rtl .ag-tool-panel.full-width .ag-panel-container {\n border-left: 0; }\n .ag-theme-blue .ag-rtl .ag-tool-panel .ag-side-buttons button {\n border-left: 1px solid #9bc2e6;\n border-right: 0; }\n .ag-theme-blue .ag-column-name-filter {\n box-sizing: border-box;\n width: 100%; }\n .ag-theme-blue .sass-variables::after {\n content: '{ \"autoSizePadding\": \"12px\", \"headerHeight\": \"25px\", \"groupPaddingSize\": \"24px\", \"footerPaddingAddition\": \"16px\", \"virtualItemHeight\": \"20px\", \"aggFuncPopupHeight\": \"70px\", \"checkboxIndentWidth\": \"16px\", \"leafNodePadding\": \"12px\", \"rowHeight\": \"25px\", \"gridSize\": \"4px\", \"iconSize\": \"12px\" }';\n display: none; }\n .ag-theme-blue .ag-tab-header {\n background-color: #5e9cd3; }\n .ag-theme-blue .ag-faded {\n opacity: 0.3; }\n .ag-theme-blue .ag-column-drop-horizontal.ag-column-drop {\n border: 1px solid #9bc2e6;\n border-bottom: 0; }\n .ag-theme-blue .ag-column-drop-horizontal.ag-column-drop:last-child {\n border-left: 0; }\n .ag-theme-blue .ag-header {\n background-image: none;\n border-bottom: 1px solid #9bc2e6; }\n .ag-theme-blue .ag-header-cell-resize::after {\n height: 25px;\n margin-top: 0; }\n .ag-theme-blue .ag-header-cell {\n border-right: 1px solid #9bc2e6;\n box-sizing: border-box; }\n .ag-theme-blue .ag-header-group-cell {\n border-right: 1px solid #9bc2e6; }\n .ag-theme-blue .ag-header-group-cell-with-group {\n border-bottom: 1px solid #9bc2e6; }\n .ag-theme-blue .ag-header-row {\n border-bottom: 0; }\n .ag-theme-blue .ag-root {\n border: 1px solid #9bc2e6; }\n .ag-theme-blue .ag-column-panel {\n border-right: 1px solid #9bc2e6; }\n .ag-theme-blue .ag-cell-no-focus {\n border-right: 1px dotted #9bc2e6; }\n .ag-theme-blue .ag-row {\n border-bottom-width: 0; }\n .ag-theme-blue .ag-column-panel .ag-column-drop .ag-column-drop-empty-message {\n line-height: 25px; }\n .ag-theme-blue .ag-floating-filter-button {\n margin-top: 8px; }\n .ag-theme-blue .ag-filter .ag-filter-apply-panel {\n border-top: 1px solid #9bc2e6;\n justify-content: flex-start; }\n .ag-theme-blue .ag-cell-focus {\n border: 1px solid darkgreen; }\n .ag-theme-blue .ag-menu .ag-menu-option-active {\n background: #c7c7c7; }\n .ag-theme-blue .ag-menu .ag-menu-option {\n line-height: 24px; }\n .ag-theme-blue .ag-column-drop-cell {\n background: #ddebf7;\n background-image: none;\n border: 1px solid #9bc2e6;\n border-radius: 0;\n height: 18px !important; }\n .ag-theme-blue .ag-column-drop-cell .ag-column-drop-cell-button {\n box-sizing: border-box;\n height: calc(100% - 4px);\n margin-bottom: 2px;\n margin-top: 2px; }\n .ag-theme-blue .ag-column-drop-cell .ag-column-drop-cell-button:hover {\n border: 1px solid #9bc2e6; }\n .ag-theme-blue .ag-cell-range-selected-1:not(.ag-cell-focus) {\n background-color: rgba(120, 120, 120, 0.4); }\n .ag-theme-blue .ag-cell-range-selected-2:not(.ag-cell-focus) {\n background-color: rgba(80, 80, 80, 0.4); }\n .ag-theme-blue .ag-cell-range-selected-3:not(.ag-cell-focus) {\n background-color: rgba(40, 40, 40, 0.4); }\n .ag-theme-blue .ag-cell-range-selected-4:not(.ag-cell-focus) {\n background-color: rgba(0, 0, 0, 0.4); }\n .ag-theme-blue .ag-cell-highlight {\n background-color: rgba(120, 120, 120, 0.4);\n border-bottom: 2px solid lightgreen; }\n .ag-theme-blue .ag-cell-highlight-animation {\n transition: all 1s; }\n .ag-theme-blue .ag-group-expanded .ag-icon-contracted:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxyZWN0IHN0cm9rZS1vcGFjaXR5PSIuNSIgc3Ryb2tlPSIjMDAwIiB4PSIxLjUiIHk9IjEuNSIgd2lkdGg9IjkiIGhlaWdodD0iOSIgcng9IjEiLz48cGF0aCBmaWxsPSIjMDAwIiBkPSJNOSA1djJIM1Y1eiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-blue .ag-rtl .ag-icon-tree-closed {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMyA2bDQtNHY4eiIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-blue .ag-cell-inline-editing {\n height: 25px;\n padding: 0; }\n .ag-theme-blue .ag-cell-inline-editing input {\n box-sizing: border-box; }\n .ag-theme-blue .ag-column-panel .ag-column-drop .ag-column-drop-title {\n float: none; }\n .ag-theme-blue .ag-column-select-panel .ag-column-select-column-group,\n .ag-theme-blue .ag-column-select-panel .ag-column-select-column {\n height: 20px;\n line-height: 20px; }\n .ag-theme-blue .ag-filter .ag-filter-header-container {\n height: 24px; }\n .ag-theme-blue .ag-tab {\n box-sizing: initial; }\n .ag-theme-blue .ag-filter .ag-filter-value {\n line-height: 16px; }\n .ag-theme-blue .ag-selection-checkbox span {\n position: relative;\n top: 0; }\n .ag-theme-blue .ag-rich-select-value {\n border-bottom: 1px solid #9bc2e6; }\n .ag-theme-blue .ag-header-cell-moving .ag-header-cell-label {\n opacity: 0.5; }\n .ag-theme-blue .ag-header-cell-moving {\n background-color: #bebebe; }\n .ag-theme-blue .ag-ltr .ag-pinned-right-header {\n border-left: 1px solid #9bc2e6; }\n .ag-theme-blue .ag-rtl .ag-pinned-left-header {\n border-right: 1px solid #9bc2e6; }\n .ag-theme-blue .ag-overlay-loading-wrapper {\n background-color: rgba(255, 255, 255, 0.5); }\n .ag-theme-blue .ag-overlay-loading-center {\n background-color: #fff;\n border: 1px solid #9bc2e6;\n border-radius: 10px;\n color: black;\n padding: 10px; }\n .ag-theme-blue .ag-column-name-filter {\n height: 16px; }\n .ag-theme-blue .ag-column-drop-cell .ag-column-drag {\n background-position-y: 0 !important; }\n .ag-theme-blue .ag-header .ag-icon-asc {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDNoMnY5SDV6Ii8+PHBhdGggZD0iTTguOTkzIDUuMlYzLjQ5M2gtNnY2SDQuN1Y1LjJoNC4yOTN6IiBpZD0iYiIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiNGRkYiIGQ9Ik01LjUgMy41aDF2OGgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSg0NSA1Ljk5MyA2LjQ5MykiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2IiLz48cGF0aCBzdHJva2U9IiNGRkYiIGQ9Ik04LjQ5MyA0Ljd2LS43MDdoLTV2NUg0LjJWNC43aDQuMjkzeiIvPjwvZz48L2c+PC9zdmc+);\n display: inline-block; }\n .ag-theme-blue .ag-header .ag-icon-desc {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDJoMnY5SDV6Ii8+PHBhdGggZD0iTTguOTkzIDYuMVY0LjM5M2gtNnY2SDQuN1Y2LjFoNC4yOTN6IiBpZD0iYiIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiNGRkYiIGQ9Ik01LjUgMi41aDF2OGgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtMTM1IDUuOTkzIDcuMzkzKSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjYiIvPjxwYXRoIHN0cm9rZT0iI0ZGRiIgZD0iTTguNDkzIDUuNnYtLjcwN2gtNXY1SDQuMlY1LjZoNC4yOTN6Ii8+PC9nPjwvZz48L3N2Zz4=);\n display: inline-block; }\n .ag-theme-blue .ag-header .ag-icon-expanded {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxyZWN0IHN0cm9rZS1vcGFjaXR5PSIuNSIgc3Ryb2tlPSIjRkZGIiB4PSIxLjUiIHk9IjEuNSIgd2lkdGg9IjkiIGhlaWdodD0iOSIgcng9IjEiLz48cGF0aCBmaWxsPSIjRkZGIiBkPSJNNSAzaDJ2Nkg1eiIvPjxwYXRoIGZpbGw9IiNGRkYiIGQ9Ik05IDV2MkgzVjV6Ii8+PC9nPjwvc3ZnPg==);\n display: inline-block; }\n .ag-theme-blue .ag-header .ag-icon-contracted {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxyZWN0IHN0cm9rZS1vcGFjaXR5PSIuNSIgc3Ryb2tlPSIjRkZGIiB4PSIxLjUiIHk9IjEuNSIgd2lkdGg9IjkiIGhlaWdodD0iOSIgcng9IjEiLz48cGF0aCBmaWxsPSIjRkZGIiBkPSJNOSA1djJIM1Y1eiIvPjwvZz48L3N2Zz4=);\n display: inline-block; }\n .ag-theme-blue .ag-header .ag-icon-menu {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAxaDEwdjJIMXptMCA0aDEwdjJIMXptMCA0aDEwdjJIMXoiIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==);\n display: inline-block; }\n .ag-theme-blue .ag-header .ag-icon-filter {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAyaDEwTDcgNnY1TDUgOVY2TDEgMnptNCA0djFoMlY2SDV6IiBmaWxsPSIjRkZGIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=);\n display: inline-block; }\n .ag-theme-blue .ag-tab-header .ag-tab:not(.ag-tab-selected) .ag-icon-menu {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAxaDEwdjJIMXptMCA0aDEwdjJIMXptMCA0aDEwdjJIMXoiIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==); }\n .ag-theme-blue .ag-tab-header .ag-tab:not(.ag-tab-selected) .ag-icon-filter {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAyaDEwTDcgNnY1TDUgOVY2TDEgMnptNCA0djFoMlY2SDV6IiBmaWxsPSIjRkZGIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=); }\n .ag-theme-blue .ag-tab-header .ag-tab:not(.ag-tab-selected) .ag-icon-columns {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAxaDR2Mkgxem02IDBoNHYySDd6TTEgNWg0djJIMXptNiAwaDR2Mkg3ek0xIDloNHYySDF6bTYgMGg0djJIN3oiIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==); }\n .ag-theme-blue input,\n .ag-theme-blue select {\n background-color: #f6f6f6;\n color: #222; }\n .ag-theme-blue .ag-row {\n border-bottom-width: 1px;\n border-bottom-style: dotted; }\n .ag-theme-blue .ag-floating-filter-body input[readonly] {\n background: rgba(255, 255, 255, 0.3); }\n", ""]);
36671
36672// exports
36673
36674
36675/***/ }),
36676/* 165 */
36677/***/ (function(module, exports, __webpack_require__) {
36678
36679// style-loader: Adds some css to the DOM by adding a <style> tag
36680
36681// load the styles
36682var content = __webpack_require__(166);
36683if(typeof content === 'string') content = [[module.i, content, '']];
36684// add the styles to the DOM
36685var update = __webpack_require__(15)(content, {});
36686if(content.locals) module.exports = content.locals;
36687// Hot Module Replacement
36688if(false) {
36689 // When the styles change, update the <style> tags
36690 if(!content.locals) {
36691 module.hot.accept("!!../../node_modules/css-loader/index.js!./ag-theme-dark.css", function() {
36692 var newContent = require("!!../../node_modules/css-loader/index.js!./ag-theme-dark.css");
36693 if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
36694 update(newContent);
36695 });
36696 }
36697 // When the module is disposed, remove the <style> tags
36698 module.hot.dispose(function() { update(); });
36699}
36700
36701/***/ }),
36702/* 166 */
36703/***/ (function(module, exports, __webpack_require__) {
36704
36705exports = module.exports = __webpack_require__(14)();
36706// imports
36707
36708
36709// module
36710exports.push([module.i, ".ag-theme-dark {\n background-color: #302e2e;\n color: #ccc;\n font: 400 14px \"Helvetica Neue\", sans-serif; }\n .ag-theme-dark .ag-body {\n background-color: #302e2e; }\n .ag-theme-dark .ag-cell {\n box-sizing: border-box; }\n .ag-theme-dark .ag-menu, .ag-theme-dark .ag-theme-dark.ag-dnd-ghost, .ag-theme-dark .ag-cell-inline-editing, .ag-theme-dark .ag-popup-editor, .ag-theme-dark .ag-select-agg-func-popup, .ag-theme-dark .ag-overlay-loading-center {\n background-color: #302e2e;\n border: 1px solid darkgrey; }\n .ag-theme-dark .ag-tab-header .ag-tab {\n border: 1px solid transparent;\n border-bottom-width: 0;\n display: inline-block;\n margin: 4px;\n margin-bottom: 0;\n padding: 4px 8px; }\n .ag-theme-dark .ag-tab-header .ag-tab.ag-tab-selected {\n background-color: #302e2e;\n border-bottom: 2px solid #302e2e !important;\n border-color: darkgrey; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-1 {\n padding-left: 16px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-1 {\n padding-right: 16px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-1 {\n padding-left: 24px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-1 {\n padding-right: 24px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-2 {\n padding-left: 32px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-2 {\n padding-right: 32px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-2 {\n padding-left: 48px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-2 {\n padding-right: 48px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-3 {\n padding-left: 48px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-3 {\n padding-right: 48px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-3 {\n padding-left: 72px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-3 {\n padding-right: 72px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-4 {\n padding-left: 64px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-4 {\n padding-right: 64px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-4 {\n padding-left: 96px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-4 {\n padding-right: 96px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-5 {\n padding-left: 80px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-5 {\n padding-right: 80px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-5 {\n padding-left: 120px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-5 {\n padding-right: 120px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-6 {\n padding-left: 96px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-6 {\n padding-right: 96px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-6 {\n padding-left: 144px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-6 {\n padding-right: 144px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-7 {\n padding-left: 112px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-7 {\n padding-right: 112px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-7 {\n padding-left: 168px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-7 {\n padding-right: 168px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-8 {\n padding-left: 128px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-8 {\n padding-right: 128px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-8 {\n padding-left: 192px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-8 {\n padding-right: 192px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-9 {\n padding-left: 144px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-9 {\n padding-right: 144px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-9 {\n padding-left: 216px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-9 {\n padding-right: 216px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-10 {\n padding-left: 160px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-10 {\n padding-right: 160px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-10 {\n padding-left: 240px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-10 {\n padding-right: 240px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-11 {\n padding-left: 176px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-11 {\n padding-right: 176px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-11 {\n padding-left: 264px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-11 {\n padding-right: 264px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-12 {\n padding-left: 192px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-12 {\n padding-right: 192px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-12 {\n padding-left: 288px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-12 {\n padding-right: 288px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-13 {\n padding-left: 208px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-13 {\n padding-right: 208px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-13 {\n padding-left: 312px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-13 {\n padding-right: 312px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-14 {\n padding-left: 224px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-14 {\n padding-right: 224px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-14 {\n padding-left: 336px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-14 {\n padding-right: 336px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-15 {\n padding-left: 240px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-15 {\n padding-right: 240px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-15 {\n padding-left: 360px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-15 {\n padding-right: 360px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-16 {\n padding-left: 256px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-16 {\n padding-right: 256px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-16 {\n padding-left: 384px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-16 {\n padding-right: 384px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-17 {\n padding-left: 272px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-17 {\n padding-right: 272px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-17 {\n padding-left: 408px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-17 {\n padding-right: 408px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-18 {\n padding-left: 288px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-18 {\n padding-right: 288px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-18 {\n padding-left: 432px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-18 {\n padding-right: 432px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-19 {\n padding-left: 304px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-19 {\n padding-right: 304px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-19 {\n padding-left: 456px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-19 {\n padding-right: 456px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-20 {\n padding-left: 320px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-20 {\n padding-right: 320px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-20 {\n padding-left: 480px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-20 {\n padding-right: 480px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-21 {\n padding-left: 336px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-21 {\n padding-right: 336px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-21 {\n padding-left: 504px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-21 {\n padding-right: 504px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-22 {\n padding-left: 352px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-22 {\n padding-right: 352px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-22 {\n padding-left: 528px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-22 {\n padding-right: 528px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-23 {\n padding-left: 368px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-23 {\n padding-right: 368px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-23 {\n padding-left: 552px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-23 {\n padding-right: 552px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-24 {\n padding-left: 384px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-24 {\n padding-right: 384px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-24 {\n padding-left: 576px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-24 {\n padding-right: 576px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-25 {\n padding-left: 400px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-25 {\n padding-right: 400px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-25 {\n padding-left: 600px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-25 {\n padding-right: 600px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-26 {\n padding-left: 416px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-26 {\n padding-right: 416px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-26 {\n padding-left: 624px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-26 {\n padding-right: 624px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-27 {\n padding-left: 432px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-27 {\n padding-right: 432px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-27 {\n padding-left: 648px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-27 {\n padding-right: 648px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-28 {\n padding-left: 448px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-28 {\n padding-right: 448px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-28 {\n padding-left: 672px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-28 {\n padding-right: 672px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-29 {\n padding-left: 464px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-29 {\n padding-right: 464px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-29 {\n padding-left: 696px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-29 {\n padding-right: 696px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-30 {\n padding-left: 480px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-30 {\n padding-right: 480px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-30 {\n padding-left: 720px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-30 {\n padding-right: 720px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-31 {\n padding-left: 496px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-31 {\n padding-right: 496px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-31 {\n padding-left: 744px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-31 {\n padding-right: 744px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-32 {\n padding-left: 512px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-32 {\n padding-right: 512px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-32 {\n padding-left: 768px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-32 {\n padding-right: 768px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-33 {\n padding-left: 528px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-33 {\n padding-right: 528px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-33 {\n padding-left: 792px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-33 {\n padding-right: 792px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-34 {\n padding-left: 544px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-34 {\n padding-right: 544px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-34 {\n padding-left: 816px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-34 {\n padding-right: 816px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-35 {\n padding-left: 560px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-35 {\n padding-right: 560px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-35 {\n padding-left: 840px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-35 {\n padding-right: 840px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-36 {\n padding-left: 576px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-36 {\n padding-right: 576px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-36 {\n padding-left: 864px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-36 {\n padding-right: 864px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-37 {\n padding-left: 592px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-37 {\n padding-right: 592px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-37 {\n padding-left: 888px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-37 {\n padding-right: 888px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-38 {\n padding-left: 608px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-38 {\n padding-right: 608px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-38 {\n padding-left: 912px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-38 {\n padding-right: 912px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-39 {\n padding-left: 624px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-39 {\n padding-right: 624px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-39 {\n padding-left: 936px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-39 {\n padding-right: 936px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-40 {\n padding-left: 640px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-40 {\n padding-right: 640px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-40 {\n padding-left: 960px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-40 {\n padding-right: 960px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-41 {\n padding-left: 656px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-41 {\n padding-right: 656px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-41 {\n padding-left: 984px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-41 {\n padding-right: 984px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-42 {\n padding-left: 672px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-42 {\n padding-right: 672px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-42 {\n padding-left: 1008px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-42 {\n padding-right: 1008px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-43 {\n padding-left: 688px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-43 {\n padding-right: 688px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-43 {\n padding-left: 1032px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-43 {\n padding-right: 1032px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-44 {\n padding-left: 704px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-44 {\n padding-right: 704px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-44 {\n padding-left: 1056px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-44 {\n padding-right: 1056px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-45 {\n padding-left: 720px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-45 {\n padding-right: 720px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-45 {\n padding-left: 1080px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-45 {\n padding-right: 1080px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-46 {\n padding-left: 736px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-46 {\n padding-right: 736px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-46 {\n padding-left: 1104px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-46 {\n padding-right: 1104px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-47 {\n padding-left: 752px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-47 {\n padding-right: 752px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-47 {\n padding-left: 1128px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-47 {\n padding-right: 1128px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-48 {\n padding-left: 768px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-48 {\n padding-right: 768px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-48 {\n padding-left: 1152px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-48 {\n padding-right: 1152px; }\n .ag-theme-dark .ag-ltr .ag-toolpanel-indent-49 {\n padding-left: 784px; }\n .ag-theme-dark .ag-rtl .ag-toolpanel-indent-49 {\n padding-right: 784px; }\n .ag-theme-dark .ag-ltr .ag-row-group-indent-49 {\n padding-left: 1176px; }\n .ag-theme-dark .ag-rtl .ag-row-group-indent-49 {\n padding-right: 1176px; }\n .ag-theme-dark .ag-ltr .ag-row-group-leaf-indent {\n margin-left: 24px; }\n .ag-theme-dark .ag-rtl .ag-row-group-leaf-indent {\n margin-right: 24px; }\n .ag-theme-dark .ag-rtl .ag-cell-first-right-pinned {\n border-left: 1px solid darkgrey; }\n .ag-theme-dark .ag-ltr .ag-cell-first-right-pinned {\n border-left: 1px solid darkgrey; }\n .ag-theme-dark .ag-rtl .ag-cell-last-left-pinned {\n border-right: 1px solid darkgrey; }\n .ag-theme-dark .ag-ltr .ag-cell-last-left-pinned {\n border-right: 1px solid darkgrey; }\n .ag-theme-dark .ag-value-change-delta {\n padding-right: 2px; }\n .ag-theme-dark .ag-value-change-delta-up {\n color: greenyellow; }\n .ag-theme-dark .ag-value-change-delta-down {\n color: red; }\n .ag-theme-dark .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 .ag-theme-dark .ag-value-change-value-highlight {\n background-color: chocolate;\n transition: background-color 0.1s; }\n .ag-theme-dark .ag-header {\n background-color: #626262;\n color: #cccccc;\n font: 400 14px \"Helvetica Neue\", sans-serif; }\n .ag-theme-dark .ag-header-row {\n border-bottom: 1px solid darkgrey;\n box-sizing: border-box; }\n .ag-theme-dark .ag-row {\n border-bottom: 1px solid darkgrey;\n box-sizing: border-box; }\n .ag-theme-dark .ag-row-odd {\n background-color: #403e3e; }\n .ag-theme-dark .ag-row-even {\n background-color: #302e2e; }\n .ag-theme-dark .ag-row-hover {\n background-color: inherit; }\n .ag-theme-dark .ag-numeric-cell {\n text-align: right; }\n .ag-theme-dark .ag-header-cell-label {\n display: flex;\n float: left;\n height: 100%;\n width: calc(100% - 12px); }\n .ag-theme-dark .ag-header-cell-label span {\n height: 100%; }\n .ag-theme-dark .ag-header-cell-label > span {\n float: left; }\n .ag-theme-dark .ag-header-cell-label .ag-header-icon {\n background-position-y: 10px;\n background-size: 14px 14px;\n height: 100%;\n margin: 0;\n margin-left: 4px;\n opacity: 1; }\n .ag-theme-dark .ag-header-cell-label .ag-header-cell-text {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap; }\n .ag-theme-dark .ag-numeric-header .ag-header-cell-label {\n flex-direction: row-reverse;\n float: right; }\n .ag-theme-dark .ag-numeric-header .ag-header-cell-label > span {\n float: right; }\n .ag-theme-dark .ag-numeric-header .ag-header-cell-menu-button {\n float: left; }\n .ag-theme-dark .ag-header-group-text {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap; }\n .ag-theme-dark .ag-header-cell,\n .ag-theme-dark .ag-header-group-cell {\n line-height: 25px;\n padding-left: 12px;\n padding-right: 12px; }\n .ag-theme-dark .ag-cell {\n line-height: 23px;\n padding-left: 12px;\n padding-right: 12px;\n border: 1px solid transparent;\n padding-left: 11px;\n padding-right: 11px; }\n .ag-theme-dark .ag-row-drag {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjRDZENUQ1IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0yIDFoMnYySDJ6bTMgMGgydjJINXptMyAwaDJ2Mkg4eiIvPjxwYXRoIGQ9Ik04IDFoMnYySDh6TTIgNGgydjJIMnptMyAwaDJ2Mkg1em0zIDBoMnYySDh6TTIgN2gydjJIMnptMyAwaDJ2Mkg1em0zIDBoMnYySDh6bS02IDNoMnYySDJ6bTMgMGgydjJINXptMyAwaDJ2Mkg4eiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n background-position-x: left;\n background-position-y: 4px;\n float: left;\n height: 100%;\n width: 24px; }\n .ag-theme-dark .ag-column-drag {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjRDZENUQ1IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0yIDFoMnYySDJ6bTMgMGgydjJINXptMyAwaDJ2Mkg4eiIvPjxwYXRoIGQ9Ik04IDFoMnYySDh6TTIgNGgydjJIMnptMyAwaDJ2Mkg1em0zIDBoMnYySDh6TTIgN2gydjJIMnptMyAwaDJ2Mkg1em0zIDBoMnYySDh6bS02IDNoMnYySDJ6bTMgMGgydjJINXptMyAwaDJ2Mkg4eiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n background-position-x: left;\n background-position-y: 4px !important;\n height: 100%;\n min-width: 16px; }\n .ag-theme-dark .ag-row-dragging {\n opacity: 0.5;\n z-index: 10000; }\n .ag-theme-dark .ag-ltr .ag-cell-focus {\n border: 1px solid #d6d5d5;\n outline: initial; }\n .ag-theme-dark .ag-rtl .ag-cell-focus {\n border: 1px solid #d6d5d5;\n outline: initial; }\n .ag-theme-dark .ag-header-cell-resize {\n position: absolute;\n right: -4px;\n width: 8px;\n z-index: 4; }\n .ag-theme-dark .ag-header-cell-resize::after {\n border-right: 1px solid darkgrey;\n box-sizing: content-box;\n content: \"resize\";\n display: block;\n height: 9px;\n margin-top: 8px;\n overflow: hidden;\n text-indent: 4px;\n width: 4px; }\n .ag-theme-dark .ag-icon-aggregation {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOS41IDIuNWgtNmwyIDMuNS0yIDMuNWg2IiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZT0iI0Q2RDVENSIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-arrows {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjRDZENUQ1Ij48cGF0aCBkPSJNMTYgNmwtMS40MSAxLjQxTDE2LjE3IDlINHYyaDEyLjE3bC0xLjU4IDEuNTlMMTYgMTRsNC00eiIvPjxwYXRoIGQ9Ik00IDZsMS40MSAxLjQxTDMuODMgOUgxNnYySDMuODNsMS41OCAxLjU5TDQgMTRsLTQtNHoiLz48cGF0aCBkPSJNNiAxNmwxLjQxLTEuNDFMOSAxNi4xN1Y0aDJ2MTIuMTdsMS41OS0xLjU4TDE0IDE2bC00IDR6Ii8+PHBhdGggZD0iTTE0IDRsLTEuNDEgMS40MUwxMSAzLjgzVjE2SDlWMy44M0w3LjQxIDUuNDEgNiA0bDQtNHoiLz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-asc {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDNoMnY5SDV6Ii8+PHBhdGggZD0iTTguOTkzIDUuMlYzLjQ5M2gtNnY2SDQuN1Y1LjJoNC4yOTN6IiBpZD0iYiIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiNENkQ1RDUiIGQ9Ik01LjUgMy41aDF2OGgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSg0NSA1Ljk5MyA2LjQ5MykiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2IiLz48cGF0aCBzdHJva2U9IiNENkQ1RDUiIGQ9Ik04LjQ5MyA0Ljd2LS43MDdoLTV2NUg0LjJWNC43aDQuMjkzeiIvPjwvZz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-checkbox-checked-readonly {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjEiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjRDZENUQ1IiB4PSIuNSIgeT0iLjUiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgcng9IjEiLz48cGF0aCBzdHJva2U9IiNENkQ1RDUiIGQ9Ik05IDNMNiA4LjVsLTIuNS0yIi8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-checkbox-checked {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjEiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIGZpbGw9IiMwMDAiIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjRDZENUQ1IiB4PSIuNSIgeT0iLjUiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgcng9IjEiLz48cGF0aCBzdHJva2U9IiNENkQ1RDUiIGQ9Ik05IDNMNiA4LjVsLTIuNS0yIi8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-checkbox-indeterminate-readonly {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjEiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjRDZENUQ1IiB4PSIuNSIgeT0iLjUiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgcng9IjEiLz48cGF0aCBmaWxsPSIjRDZENUQ1IiBkPSJNNCA1aDR2Mkg0eiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-checkbox-indeterminate {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjEiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIGZpbGw9IiMwMDAiIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjRDZENUQ1IiB4PSIuNSIgeT0iLjUiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgcng9IjEiLz48cGF0aCBmaWxsPSIjRDZENUQ1IiBkPSJNNCA1aDR2Mkg0eiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-checkbox-unchecked-readonly {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjEiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjRDZENUQ1IiB4PSIuNSIgeT0iLjUiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgcng9IjEiLz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-checkbox-unchecked {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjEiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIGZpbGw9IiMwMDAiIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjRDZENUQ1IiB4PSIuNSIgeT0iLjUiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgcng9IjEiLz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-column {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAxaDR2Mkgxem0wIDNoNHY3SDF6IiBmaWxsPSIjRDZENUQ1IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-columns {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAxaDR2Mkgxem02IDBoNHYySDd6TTEgNWg0djJIMXptNiAwaDR2Mkg3ek0xIDloNHYySDF6bTYgMGg0djJIN3oiIGZpbGw9IiNENkQ1RDUiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-contracted {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxyZWN0IHN0cm9rZS1vcGFjaXR5PSIuNSIgc3Ryb2tlPSIjRDZENUQ1IiB4PSIxLjUiIHk9IjEuNSIgd2lkdGg9IjkiIGhlaWdodD0iOSIgcng9IjEiLz48cGF0aCBmaWxsPSIjRDZENUQ1IiBkPSJNOSA1djJIM1Y1eiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-copy {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiNENkQ1RDUiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHBhdGggZD0iTTQuNSA0LjVoNXY1aC01eiIvPjxwYXRoIGQ9Ik03LjUgMi41aC01djVoMnYyaDV2LTVoLTJ2LTJ6Ii8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-cut {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiNENkQ1RDUiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHBhdGggZD0iTTMgMy4xMmMuNjY3LjA3OCAzIDEuNzQ1IDcgNS0uMzI2LjIwNC0uNjU5LjIwNC0xIDAtLjM0MS0uMjA2LTEuNjc0LTEuMjA2LTQtMyAwIC42NjYtLjY2Ny42NjYtMiAwLTItMS0xLTIuMTIgMC0yeiIvPjxwYXRoIGQ9Ik0zIDguMjY0Yy42NjctLjA4IDMtMS43NDYgNy01LS4zMjYtLjIwNS0uNjU5LS4yMDUtMSAwLS4zNDEuMjA0LTEuNjc0IDEuMjA0LTQgMyAwLS42NjctLjY2Ny0uNjY3LTIgMC0yIDEtMSAyLjExOSAwIDJ6Ii8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-desc {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDJoMnY5SDV6Ii8+PHBhdGggZD0iTTguOTkzIDYuMVY0LjM5M2gtNnY2SDQuN1Y2LjFoNC4yOTN6IiBpZD0iYiIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiNENkQ1RDUiIGQ9Ik01LjUgMi41aDF2OGgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtMTM1IDUuOTkzIDcuMzkzKSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjYiIvPjxwYXRoIHN0cm9rZT0iI0Q2RDVENSIgZD0iTTguNDkzIDUuNnYtLjcwN2gtNXY1SDQuMlY1LjZoNC4yOTN6Ii8+PC9nPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-expanded {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxyZWN0IHN0cm9rZS1vcGFjaXR5PSIuNSIgc3Ryb2tlPSIjRDZENUQ1IiB4PSIxLjUiIHk9IjEuNSIgd2lkdGg9IjkiIGhlaWdodD0iOSIgcng9IjEiLz48cGF0aCBmaWxsPSIjRDZENUQ1IiBkPSJNNSAzaDJ2Nkg1eiIvPjxwYXRoIGZpbGw9IiNENkQ1RDUiIGQ9Ik05IDV2MkgzVjV6Ii8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-eye-slash {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0zLjAwMSAzLjkwOEwzIDRhMyAzIDAgMSAwIDUuOTk5LS4wOTJBNS4yNDggNS4yNDggMCAwIDAgNiAzYy0xLjEgMC0yLjEuMzAzLTIuOTk5LjkwOHoiIGZpbGw9IiNENkQ1RDUiLz48cGF0aCBkPSJNNCA0LjVjLjY2Ny0uMzMzIDEuNjY3LS41IDMtLjUiIHN0cm9rZT0iIzk3OTc5NyIvPjxwYXRoIGQ9Ik0xIDZjMS4zMzMtMiAzLTMgNS0zczMuNjY3IDEgNSAzQzkuNjY3IDggOCA5IDYgOVMyLjMzMyA4IDEgNnoiIHN0cm9rZT0iI0Q2RDVENSIvPjxwYXRoIGQ9Ik00LjAwNCAyLjgzNWw0Ljk5MiA2LjMzIiBzdHJva2U9IiNENkQ1RDUiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiLz48cGF0aCBkPSJNMy4wMDQgMi44MzVsNC45OTIgNi4zMyIgc3Ryb2tlPSIjMDAwIiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIi8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-eye {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0zLjAwMSAzLjkwOEwzIDRhMyAzIDAgMSAwIDUuOTk5LS4wOTJBNS4yNDggNS4yNDggMCAwIDAgNiAzYy0xLjEgMC0yLjEuMzAzLTIuOTk5LjkwOHoiIGZpbGw9IiNENkQ1RDUiLz48cGF0aCBkPSJNNCA0LjVjLjY2Ny0uMzMzIDEuNjY3LS41IDMtLjUiIHN0cm9rZT0iIzk3OTc5NyIvPjxwYXRoIGQ9Ik0xIDZjMS4zMzMtMiAzLTMgNS0zczMuNjY3IDEgNSAzQzkuNjY3IDggOCA5IDYgOVMyLjMzMyA4IDEgNnoiIHN0cm9rZT0iI0Q2RDVENSIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-filter {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAyaDEwTDcgNnY1TDUgOVY2TDEgMnptNCA0djFoMlY2SDV6IiBmaWxsPSIjRDZENUQ1IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-group {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIHN0cm9rZT0iI0Q2RDVENSIgZD0iTTcuNSAxLjVoM3YyaC0zem0wIDRoM3YyaC0zem0wIDRoM3YyaC0zeiIvPjxwYXRoIGZpbGw9IiNENkQ1RDUiIGQ9Ik0yIDNoMXY4SDJ6bTEgM2g0djFIM3ptMi00aDN2MUg1eiIvPjxwYXRoIGZpbGw9IiNENkQ1RDUiIGQ9Ik0yIDEwaDV2MUgyeiIvPjxwYXRoIHN0cm9rZT0iI0Q2RDVENSIgZD0iTTEuNSAxLjVoM3YyaC0zeiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-indeterminate {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0zLjA1NiA0LjU4MWEzLjAwMSAzLjAwMSAwIDAgMCA1Ljg4OCAwQzguMDU5IDQuMTk0IDcuMDc4IDQgNiA0Yy0xLjA3OCAwLTIuMDYuMTk0LTIuOTQ0LjU4MXoiIGZpbGw9IiNENkQ1RDUiLz48cGF0aCBkPSJNNCA1LjVjLjY2Ny0uMzMzIDEuNjY3LS41IDMtLjUiIHN0cm9rZT0iIzk3OTc5NyIvPjxwYXRoIGQ9Ik0xIDZjMS4zMzMtMS4zMzMgMy0yIDUtMnMzLjY2Ny42NjcgNSAyQzkuNjY3IDcuMzMzIDggOCA2IDhzLTMuNjY3LS42NjctNS0yeiIgc3Ryb2tlPSIjRDZENUQ1Ii8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-left {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01LjUgMS41aDJ2OWgtMnoiLz48cGF0aCBkPSJNNy45OTMgNC43VjIuOTkzaC02djZIMy43VjQuN2g0LjI5M3oiIGlkPSJiIi8+PC9kZWZzPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoOTAgNi41IDYpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHBhdGggc3Ryb2tlPSIjRDZENUQ1IiBkPSJNNiAyaDF2OEg2eiIvPjwvZz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtNDUgNC45OTMgNS45OTMpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNiIi8+PHBhdGggc3Ryb2tlPSIjRDZENUQ1IiBkPSJNNy40OTMgNC4ydi0uNzA3aC01djVIMy4yVjQuMmg0LjI5M3oiLz48L2c+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-loading {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDFoMnYzSDV6Ii8+PHBhdGggaWQ9ImIiIGQ9Ik01IDhoMnYzSDV6Ii8+PHBhdGggaWQ9ImMiIGQ9Ik0xIDVoM3YySDF6Ii8+PHBhdGggaWQ9ImQiIGQ9Ik04IDVoM3YySDh6Ii8+PHBhdGggaWQ9ImUiIGQ9Ik00IDBoMnYzSDR6Ii8+PHBhdGggaWQ9ImYiIGQ9Ik00IDdoMnYzSDR6Ii8+PHBhdGggaWQ9ImciIGQ9Ik0wIDRoM3YySDB6Ii8+PHBhdGggaWQ9ImgiIGQ9Ik03IDRoM3YySDd6Ii8+PC9kZWZzPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjYSIvPjxwYXRoIHN0cm9rZT0iIzk3OTc5NyIgZD0iTTUuNSAxLjVoMXYyaC0xeiIvPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2IiLz48cGF0aCBzdHJva2U9IiM5Nzk3OTciIGQ9Ik01LjUgOC41aDF2MmgtMXoiLz48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNjIi8+PHBhdGggc3Ryb2tlPSIjOTc5Nzk3IiBkPSJNMS41IDUuNWgydjFoLTJ6Ii8+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjZCIvPjxwYXRoIHN0cm9rZT0iIzk3OTc5NyIgZD0iTTguNSA1LjVoMnYxaC0yeiIvPjxnIG9wYWNpdHk9Ii43MTQiPjxnIHRyYW5zZm9ybT0icm90YXRlKDQ1IDQuMjkzIDYuNzA3KSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjZSIvPjxwYXRoIHN0cm9rZT0iIzk3OTc5NyIgZD0iTTQuNS41aDF2MmgtMXoiLz48L2c+PGcgdHJhbnNmb3JtPSJyb3RhdGUoNDUgNC4yOTMgNi43MDcpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNmIi8+PHBhdGggc3Ryb2tlPSIjOTc5Nzk3IiBkPSJNNC41IDcuNWgxdjJoLTF6Ii8+PC9nPjxnIHRyYW5zZm9ybT0icm90YXRlKDQ1IDQuMjkzIDYuNzA3KSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjZyIvPjxwYXRoIHN0cm9rZT0iIzk3OTc5NyIgZD0iTS41IDQuNWgydjFoLTJ6Ii8+PC9nPjxnIHRyYW5zZm9ybT0icm90YXRlKDQ1IDQuMjkzIDYuNzA3KSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjaCIvPjxwYXRoIHN0cm9rZT0iIzk3OTc5NyIgZD0iTTcuNSA0LjVoMnYxaC0yeiIvPjwvZz48L2c+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-menu {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAxaDEwdjJIMXptMCA0aDEwdjJIMXptMCA0aDEwdjJIMXoiIGZpbGw9IiNENkQ1RDUiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-minus {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiA1aDh2MkgyeiIgZmlsbD0iI0Q2RDVENSIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-none {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDNoMnY2SDV6Ii8+PHBhdGggZD0iTTguMTQ2IDguMTgyVjYuNDc1aC01djVoMS43MDhWOC4xODJoMy4yOTJ6IiBpZD0iYiIvPjxwYXRoIGQ9Ik04LjUgMi45MTRWMS4yMDdoLTV2NWgxLjcwN1YyLjkxNEg4LjV6IiBpZD0iYyIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiNENkQ1RDUiIGQ9Ik01LjUgMy41aDF2NWgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtMTM1IDUuNjQ2IDguNDc1KSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjYiIvPjxwYXRoIHN0cm9rZT0iI0Q2RDVENSIgZD0iTTcuNjQ2IDcuNjgydi0uNzA3aC00djRoLjcwOFY3LjY4MmgzLjI5MnoiLz48L2c+PGcgdHJhbnNmb3JtPSJyb3RhdGUoNDUgNiAzLjcwNykiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2MiLz48cGF0aCBzdHJva2U9IiNENkQ1RDUiIGQ9Ik04IDIuNDE0di0uNzA3SDR2NGguNzA3VjIuNDE0SDh6Ii8+PC9nPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-not-allowed {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiNENkQ1RDUiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGNpcmNsZSBjeD0iNiIgY3k9IjYiIHI9IjQiLz48cGF0aCBkPSJNOC41IDMuNUwzLjQwMSA4LjU5OSIgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-paste {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiNENkQ1RDUiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHBhdGggZD0iTTIuNSAyLjVoN3Y3aC03eiIvPjxwYXRoIGQ9Ik02LjUgMS41aC0xdjJoLTF2MWgzdi0xaC0xdi0yeiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-pin {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGZpbGw9IiNENkQ1RDUiIGQ9Ik0zIDJoNnYxSDh2NGwyIDFIN2wtMSAzLTEtM0gybDItMVYzSDN6Ii8+PHBhdGggZmlsbC1vcGFjaXR5PSIuNSIgZmlsbD0iIzAwMCIgZD0iTTUgM2gxdjRINXoiLz48cGF0aCBmaWxsLW9wYWNpdHk9Ii4yOCIgZmlsbD0iIzAwMCIgZD0iTTQgM2gxdjNINHoiLz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-pivot {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiNENkQ1RDUiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHJlY3QgeD0iMS41IiB5PSIxLjUiIHdpZHRoPSI5IiBoZWlnaHQ9IjkiIHJ4PSIxIi8+PHBhdGggZD0iTTEwLjUgMy41aC05bTItMnY5IiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIi8+PHBhdGggZD0iTTcuNSA2LjVsMS0xIDEgMW0tMyAxbC0xIDEgMSAxIi8+PHBhdGggZD0iTTguNSA1LjV2M2gtMyIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-plus {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjRDZENUQ1IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik01IDJoMnY4SDV6Ii8+PHBhdGggZD0iTTIgNWg4djJIMnoiLz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-right {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik00LjUgMS41aDJ2OWgtMnoiLz48cGF0aCBkPSJNOS45OTMgNC43VjIuOTkzaC02djZINS43VjQuN2g0LjI5M3oiIGlkPSJiIi8+PC9kZWZzPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoOTAgNS41IDYpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHBhdGggc3Ryb2tlPSIjRDZENUQ1IiBkPSJNNSAyaDF2OEg1eiIvPjwvZz48ZyB0cmFuc2Zvcm09InNjYWxlKC0xIDEpIHJvdGF0ZSgtNDUgMCAyMi44NzQpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNiIi8+PHBhdGggc3Ryb2tlPSIjRDZENUQ1IiBkPSJNOS40OTMgNC4ydi0uNzA3aC01djVINS4yVjQuMmg0LjI5M3oiLz48L2c+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-small-left {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMyA2bDQtNHY4eiIgZmlsbD0iI0Q2RDVENSIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-small-right {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNSAybDQgNC00IDR6IiBmaWxsPSIjRDZENUQ1IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-small-up {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiA3bDQtNCA0IDR6IiBmaWxsPSIjRDZENUQ1IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-small-down {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiA1aDhMNiA5eiIgZmlsbD0iI0Q2RDVENSIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-tick {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMS41IDUuNWwzIDMgNi02IiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZT0iI0Q2RDVENSIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-cross {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiAxMGw4LThtMCA4TDIgMiIgc3Ryb2tlPSIjRDZENUQ1IiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-tree-open {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiA1aDhMNiA5eiIgZmlsbD0iI0Q2RDVENSIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-tree-closed {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNSAybDQgNC00IDR6IiBmaWxsPSIjRDZENUQ1IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-icon-tree-indeterminate {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiA1aDh2MkgyeiIgZmlsbD0iI0Q2RDVENSIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-dark .ag-header-cell-menu-button .ag-icon-menu {\n display: block;\n height: 25px; }\n .ag-theme-dark .ag-icon-checkbox-checked:empty {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjEiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIGZpbGw9IiMwMDAiIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjRDZENUQ1IiB4PSIuNSIgeT0iLjUiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgcng9IjEiLz48cGF0aCBzdHJva2U9IiNENkQ1RDUiIGQ9Ik05IDNMNiA4LjVsLTIuNS0yIi8+PC9nPjwvc3ZnPg==); }\n .ag-theme-dark .ag-menu {\n background: #302e2e;\n border-radius: 0;\n box-shadow: none;\n padding: 4px;\n padding: 0;\n z-index: 5; }\n .ag-theme-dark .ag-menu .ag-menu-list {\n cursor: default;\n margin-bottom: 4px;\n margin-top: 4px;\n width: 100%; }\n .ag-theme-dark .ag-menu .ag-menu-option {\n line-height: 16px;\n padding-left: 8px;\n padding-right: 8px; }\n .ag-theme-dark .ag-menu .ag-menu-option > span {\n display: table-cell;\n vertical-align: middle; }\n .ag-theme-dark .ag-menu .ag-menu-option-active {\n background: inherit; }\n .ag-theme-dark .ag-menu .ag-menu-option-disabled {\n opacity: 0.5; }\n .ag-theme-dark .ag-menu .ag-menu-option-icon {\n padding-left: 4px;\n padding-right: 4px; }\n .ag-theme-dark .ag-menu .ag-menu-option-icon span {\n height: 12px;\n line-height: 0;\n margin-top: 4px; }\n .ag-theme-dark .ag-menu .ag-menu-option-shortcut {\n padding-left: 8px; }\n .ag-theme-dark .ag-menu .ag-menu-separator {\n margin-left: -4px; }\n .ag-theme-dark .ag-menu .ag-menu-separator > span {\n background-image: url(\"data:image/svg+xml;utf8,<svg width='1' height='8px' viewBox='0 0 1 8px' xmlns='http://www.w3.org/2000/svg'> <line x1='0' y1='4px' x2='1' y2='4px' stroke-width='1' stroke='darkgrey'/> </svg>\");\n height: 8px; }\n .ag-theme-dark .ag-menu .ag-menu-option-popup-pointer {\n width: 20px; }\n .ag-theme-dark.ag-dnd-ghost {\n background: #302e2e;\n border-radius: 0;\n box-shadow: none;\n padding: 4px;\n border: 1px solid darkgrey;\n color: #cccccc;\n font: 400 14px \"Helvetica Neue\", sans-serif;\n height: 25px !important;\n line-height: 25px;\n margin: 0;\n padding: 0 8px;\n transform: translateY(8px);\n z-index: 5; }\n .ag-theme-dark.ag-dnd-ghost span,\n .ag-theme-dark.ag-dnd-ghost div {\n float: left;\n height: 100%;\n margin: 0;\n padding: 0; }\n .ag-theme-dark.ag-dnd-ghost .ag-dnd-ghost-icon {\n margin-right: 4px;\n opacity: 1; }\n .ag-theme-dark .ag-tab-header {\n background: #302e2e;\n min-width: 220px;\n width: 100%; }\n .ag-theme-dark .ag-tab-header .ag-tab {\n border-bottom: 2px solid transparent;\n height: 16px;\n text-align: center;\n vertical-align: middle; }\n .ag-theme-dark .ag-tab-header .ag-tab.ag-tab-selected .ag-icon-filter {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAyaDEwTDcgNnY1TDUgOVY2TDEgMnptNCA0djFoMlY2SDV6IiBmaWxsPSIjRDZENUQ1IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=);\n display: inline-block; }\n .ag-theme-dark .ag-tab-header .ag-tab.ag-tab-selected .ag-icon-columns {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAxaDR2Mkgxem02IDBoNHYySDd6TTEgNWg0djJIMXptNiAwaDR2Mkg3ek0xIDloNHYySDF6bTYgMGg0djJIN3oiIGZpbGw9IiNENkQ1RDUiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==);\n display: inline-block; }\n .ag-theme-dark .ag-tab-header .ag-tab.ag-tab-selected .ag-icon-menu {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAxaDEwdjJIMXptMCA0aDEwdjJIMXptMCA0aDEwdjJIMXoiIGZpbGw9IiNENkQ1RDUiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==);\n display: inline-block; }\n .ag-theme-dark .ag-tab-body {\n padding: 4px 0; }\n .ag-theme-dark .ag-tab-body .ag-filter-select {\n margin: 4px;\n width: calc(100% - 8px); }\n .ag-theme-dark .ag-tab-body .ag-menu-list {\n margin-bottom: 0;\n margin-top: 0; }\n .ag-theme-dark .ag-tab-body .ag-menu-list > div:first-child > span {\n padding-top: 0; }\n .ag-theme-dark .ag-tab-body .ag-menu-list > div:last-child > span {\n padding-bottom: 0; }\n .ag-theme-dark .ag-tab-body .ag-menu-list > div:last-child > .ag-menu-option-popup-pointer {\n background-position-y: 0; }\n .ag-theme-dark .ag-filter-select {\n margin: 4px;\n width: calc(100% - 8px); }\n .ag-theme-dark .ag-filter input[type=\"radio\"] {\n margin: 0 3px 0 6px;\n width: 12px;\n height: 17px;\n vertical-align: top; }\n .ag-theme-dark .ag-filter input[type=\"text\"],\n .ag-theme-dark .ag-filter input[type=\"date\"] {\n padding-left: 4px; }\n .ag-theme-dark .ag-filter label {\n display: block;\n padding-left: 4px; }\n .ag-theme-dark .ag-filter .ag-set-filter-list {\n height: 130px;\n padding-top: 4px; }\n .ag-theme-dark .ag-filter .ag-filter-header-container {\n box-sizing: border-box;\n height: 20px; }\n .ag-theme-dark .ag-filter .ag-filter-header-container:nth-child(2) {\n border-bottom: 1px solid darkgrey; }\n .ag-theme-dark .ag-filter .ag-filter-checkbox {\n float: left;\n height: 20px;\n margin-right: 4px;\n padding-top: 2px; }\n .ag-theme-dark .ag-filter .ag-filter-value {\n height: 20px;\n line-height: 14px; }\n .ag-theme-dark .ag-filter .ag-filter-apply-panel {\n display: flex;\n justify-content: flex-end;\n padding: 4px;\n padding-top: 8px; }\n .ag-theme-dark .ag-filter .ag-filter-apply-panel button + button {\n margin-left: 8px; }\n .ag-theme-dark .ag-column-select-panel .ag-column-select-column-group,\n .ag-theme-dark .ag-column-select-panel .ag-column-select-column {\n height: 16px;\n line-height: 16px;\n margin-left: 0; }\n .ag-theme-dark .ag-column-select-panel .ag-column-select-column-group span,\n .ag-theme-dark .ag-column-select-panel .ag-column-select-column span {\n float: left;\n height: 100%; }\n .ag-theme-dark .ag-column-select-panel .ag-column-select-column-group .ag-column-select-indent,\n .ag-theme-dark .ag-column-select-panel .ag-column-select-column .ag-column-select-indent {\n width: 8px; }\n .ag-theme-dark .ag-column-select-panel .ag-column-select-column-group .ag-column-select-checkbox,\n .ag-theme-dark .ag-column-select-panel .ag-column-select-column-group .ag-column-group-icons,\n .ag-theme-dark .ag-column-select-panel .ag-column-select-column .ag-column-select-checkbox,\n .ag-theme-dark .ag-column-select-panel .ag-column-select-column .ag-column-group-icons {\n margin-left: 4px;\n margin-right: 4px; }\n .ag-theme-dark .ag-column-select-panel .ag-column-container {\n padding-top: 4px; }\n .ag-theme-dark .ag-column-select-panel .ag-column-select-column.ag-toolpanel-add-group-indent {\n margin-left: 20px; }\n .ag-theme-dark .ag-column-tool-panel {\n display: flex; }\n .ag-theme-dark .ag-filter-body {\n flex-grow: 1;\n flex-shrink: 1;\n padding-right: 4px; }\n .ag-theme-dark .ag-column-tool-panel-item button {\n font-family: \"Helvetica Neue\", sans-serif;\n font-size: 14px;\n height: 100%; }\n .ag-theme-dark .ag-filter-filter {\n margin-bottom: 4px; }\n .ag-theme-dark .ag-column-select-header {\n border-bottom: 1px solid darkgrey;\n box-sizing: border-box;\n height: 25px;\n padding-top: 4px; }\n .ag-theme-dark .ag-column-select-header label {\n display: block;\n padding-left: 4px; }\n .ag-theme-dark .ag-column-select-header label .ag-filter-checkbox {\n float: left;\n margin-right: 4px; }\n .ag-theme-dark .ag-column-select-header .ag-column-tool-panel a {\n margin: 0 4px;\n padding-top: 2px; }\n .ag-theme-dark .ag-group-child-count::before {\n content: \" \"; }\n .ag-theme-dark .ag-column-panel {\n border-right: 0; }\n .ag-theme-dark .ag-column-panel .ag-pivot-mode {\n border-bottom: 1px solid darkgrey;\n box-sizing: border-box;\n height: 25px;\n line-height: 25px; }\n .ag-theme-dark .ag-column-panel .ag-pivot-mode span {\n float: left;\n height: 100%; }\n .ag-theme-dark .ag-column-panel .ag-pivot-mode .ag-pivot-mode-select {\n margin-left: 4px; }\n .ag-theme-dark .ag-column-panel .ag-pivot-mode .ag-pivot-mode-select .ag-checkbox-label {\n margin-left: 4px; }\n .ag-theme-dark .ag-column-panel .ag-column-select-panel {\n border-bottom: 1px solid darkgrey;\n padding-bottom: 3px;\n padding-top: 0; }\n .ag-theme-dark .ag-column-panel .ag-column-drop {\n border-bottom: 1px solid darkgrey;\n clear: both;\n overflow: auto;\n padding: 4px 0;\n padding-bottom: 8px; }\n .ag-theme-dark .ag-column-panel .ag-column-drop .ag-icon {\n float: left;\n height: 20px;\n margin: 0 4px; }\n .ag-theme-dark .ag-column-panel .ag-column-drop .ag-column-drop-title {\n clear: right;\n float: left;\n height: 20px;\n line-height: 20px;\n width: calc(100% - 20px); }\n .ag-theme-dark .ag-column-panel .ag-column-drop .ag-column-drop-empty-message {\n clear: both;\n color: rgba(228, 228, 228, 0.5);\n font: 400 14px \"Helvetica Neue\", sans-serif;\n line-height: 8px;\n padding-left: 16px;\n padding-right: 4px; }\n .ag-theme-dark .ag-column-panel .ag-column-drop:last-child {\n border-bottom: 0; }\n .ag-theme-dark .ag-filter-icon:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAyaDEwTDcgNnY1TDUgOVY2TDEgMnptNCA0djFoMlY2SDV6IiBmaWxsPSIjRDZENUQ1IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-dark .ag-sort-ascending-icon:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDNoMnY5SDV6Ii8+PHBhdGggZD0iTTguOTkzIDUuMlYzLjQ5M2gtNnY2SDQuN1Y1LjJoNC4yOTN6IiBpZD0iYiIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiNENkQ1RDUiIGQ9Ik01LjUgMy41aDF2OGgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSg0NSA1Ljk5MyA2LjQ5MykiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2IiLz48cGF0aCBzdHJva2U9IiNENkQ1RDUiIGQ9Ik04LjQ5MyA0Ljd2LS43MDdoLTV2NUg0LjJWNC43aDQuMjkzeiIvPjwvZz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-dark .ag-sort-descending-icon:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDJoMnY5SDV6Ii8+PHBhdGggZD0iTTguOTkzIDYuMVY0LjM5M2gtNnY2SDQuN1Y2LjFoNC4yOTN6IiBpZD0iYiIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiNENkQ1RDUiIGQ9Ik01LjUgMi41aDF2OGgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtMTM1IDUuOTkzIDcuMzkzKSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjYiIvPjxwYXRoIHN0cm9rZT0iI0Q2RDVENSIgZD0iTTguNDkzIDUuNnYtLjcwN2gtNXY1SDQuMlY1LjZoNC4yOTN6Ii8+PC9nPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-dark .ag-sort-none-icon:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDNoMnY2SDV6Ii8+PHBhdGggZD0iTTguMTQ2IDguMTgyVjYuNDc1aC01djVoMS43MDhWOC4xODJoMy4yOTJ6IiBpZD0iYiIvPjxwYXRoIGQ9Ik04LjUgMi45MTRWMS4yMDdoLTV2NWgxLjcwN1YyLjkxNEg4LjV6IiBpZD0iYyIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiNENkQ1RDUiIGQ9Ik01LjUgMy41aDF2NWgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtMTM1IDUuNjQ2IDguNDc1KSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjYiIvPjxwYXRoIHN0cm9rZT0iI0Q2RDVENSIgZD0iTTcuNjQ2IDcuNjgydi0uNzA3aC00djRoLjcwOFY3LjY4MmgzLjI5MnoiLz48L2c+PGcgdHJhbnNmb3JtPSJyb3RhdGUoNDUgNiAzLjcwNykiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2MiLz48cGF0aCBzdHJva2U9IiNENkQ1RDUiIGQ9Ik04IDIuNDE0di0uNzA3SDR2NGguNzA3VjIuNDE0SDh6Ii8+PC9nPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-dark .ag-numeric-header .ag-header-cell-label .ag-header-icon {\n margin-left: 0;\n margin-right: 4px; }\n .ag-theme-dark .ag-paging-panel {\n align-items: center;\n border-top: 1px solid darkgrey;\n color: #cccccc;\n display: flex;\n height: 25px;\n justify-content: flex-end;\n padding: 0 12px; }\n .ag-theme-dark .ag-paging-panel > span {\n margin-left: 16px; }\n .ag-theme-dark .ag-row-selected {\n background-color: #4a708b; }\n .ag-theme-dark .ag-cell-range-selected:not(.ag-cell-focus) {\n background-color: rgba(100, 160, 160, 0.4); }\n .ag-theme-dark .ag-cell-inline-editing {\n background: #302e2e;\n border-radius: 0;\n box-shadow: none;\n padding: 4px;\n height: 37px;\n line-height: normal;\n padding: 12px;\n z-index: 2; }\n .ag-theme-dark .ag-cell-inline-editing select {\n height: auto; }\n .ag-theme-dark .ag-popup-editor {\n background: #302e2e;\n border-radius: 0;\n box-shadow: none;\n padding: 4px;\n padding: 0;\n z-index: 1; }\n .ag-theme-dark .ag-popup-editor .ag-large-textarea textarea {\n height: auto;\n padding: 12px; }\n .ag-theme-dark .ag-rich-select {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiA1aDhMNiA5eiIgZmlsbD0iI0Q2RDVENSIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);\n background-position-x: calc(100% - 4px);\n background-position-y: 8px;\n background-repeat: no-repeat; }\n .ag-theme-dark .ag-rich-select .ag-rich-select-list {\n height: 162.5px; }\n .ag-theme-dark .ag-rich-select .ag-rich-select-value {\n height: 25px;\n line-height: 25px;\n padding-left: 12px; }\n .ag-theme-dark .ag-rich-select .ag-virtual-list-item {\n cursor: default;\n height: 25px;\n line-height: 25px; }\n .ag-theme-dark .ag-rich-select .ag-virtual-list-item:hover {\n background-color: inherit; }\n .ag-theme-dark .ag-rich-select .ag-rich-select-row {\n padding-left: 12px; }\n .ag-theme-dark .ag-rich-select .ag-rich-select-row-selected {\n background-color: #4a708b; }\n .ag-theme-dark .ag-floating-filter-body {\n float: left;\n height: 100%;\n margin-right: 0;\n width: calc(100% - 20px); }\n .ag-theme-dark .ag-floating-filter-body input {\n box-sizing: border-box; }\n .ag-theme-dark .ag-floating-filter-full-body input {\n box-sizing: border-box; }\n .ag-theme-dark .ag-floating-filter-button {\n float: right;\n line-height: 12px;\n margin-top: 10px; }\n .ag-theme-dark .ag-floating-filter-button button {\n appearance: none;\n background: transparent;\n border: 0;\n height: 12px;\n padding: 0;\n width: 12px; }\n .ag-theme-dark .ag-cell-label-container {\n height: 100%; }\n .ag-theme-dark .ag-header-group-cell-label {\n height: 100%; }\n .ag-theme-dark .ag-header-group-cell-label span {\n float: left;\n height: 100%; }\n .ag-theme-dark .ag-header-select-all {\n height: 100%;\n margin-right: 12px; }\n .ag-theme-dark .ag-header-select-all span {\n height: 100%; }\n .ag-theme-dark .ag-header-select-all:not(.ag-hidden) + .ag-cell-label-container {\n float: left;\n width: calc(100% - 12px - 12px); }\n .ag-theme-dark .ag-selection-checkbox span,\n .ag-theme-dark .ag-group-expanded span,\n .ag-theme-dark .ag-group-contracted span {\n margin-right: 12px; }\n .ag-theme-dark .ag-selection-checkbox span {\n position: relative;\n top: 2px; }\n .ag-theme-dark .ag-group-expanded .ag-icon-contracted:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiA1aDhMNiA5eiIgZmlsbD0iI0Q2RDVENSIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-dark .ag-column-drop-horizontal {\n background-color: #302e2e;\n height: 25px;\n line-height: 16px;\n padding-left: 12px; }\n .ag-theme-dark .ag-column-drop-horizontal.ag-width-half {\n margin-bottom: -3px; }\n .ag-theme-dark .ag-column-drop-horizontal span {\n float: left;\n height: 100%; }\n .ag-theme-dark .ag-column-drop-horizontal > div:first-child {\n float: left;\n height: 100%; }\n .ag-theme-dark .ag-column-drop-horizontal .ag-icon-group,\n .ag-theme-dark .ag-column-drop-horizontal .ag-icon-pivot {\n margin-right: 12px; }\n .ag-theme-dark .ag-column-drop-horizontal .ag-right-arrow {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik00LjUgMS41aDJ2OWgtMnoiLz48cGF0aCBkPSJNOS45OTMgNC43VjIuOTkzaC02djZINS43VjQuN2g0LjI5M3oiIGlkPSJiIi8+PC9kZWZzPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoOTAgNS41IDYpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHBhdGggc3Ryb2tlPSIjRDZENUQ1IiBkPSJNNSAyaDF2OEg1eiIvPjwvZz48ZyB0cmFuc2Zvcm09InNjYWxlKC0xIDEpIHJvdGF0ZSgtNDUgMCAyMi44NzQpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNiIi8+PHBhdGggc3Ryb2tlPSIjRDZENUQ1IiBkPSJNOS40OTMgNC4ydi0uNzA3aC01djVINS4yVjQuMmg0LjI5M3oiLz48L2c+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-dark .ag-column-drop-horizontal .ag-left-arrow {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01LjUgMS41aDJ2OWgtMnoiLz48cGF0aCBkPSJNNy45OTMgNC43VjIuOTkzaC02djZIMy43VjQuN2g0LjI5M3oiIGlkPSJiIi8+PC9kZWZzPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoOTAgNi41IDYpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHBhdGggc3Ryb2tlPSIjRDZENUQ1IiBkPSJNNiAyaDF2OEg2eiIvPjwvZz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtNDUgNC45OTMgNS45OTMpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNiIi8+PHBhdGggc3Ryb2tlPSIjRDZENUQ1IiBkPSJNNy40OTMgNC4ydi0uNzA3aC01djVIMy4yVjQuMmg0LjI5M3oiLz48L2c+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-dark .ag-column-drop-horizontal .ag-left-arrow,\n .ag-theme-dark .ag-column-drop-horizontal .ag-right-arrow {\n overflow: hidden;\n text-indent: 100%;\n height: 100%;\n margin: 0 4px;\n opacity: 1; }\n .ag-theme-dark .ag-column-drop-horizontal .ag-column-drop-empty-message {\n height: 100%;\n line-height: 25px;\n opacity: 0.5; }\n .ag-theme-dark .ag-column-drop-cell {\n background: #403e3e;\n border-radius: 16px;\n box-sizing: border-box;\n height: 16px !important;\n margin-top: 4px;\n padding: 0 2px; }\n .ag-theme-dark .ag-column-drop-cell .ag-column-drop-cell-text {\n height: 100%;\n line-height: 16px;\n margin: 0 4px; }\n .ag-theme-dark .ag-column-drop-cell .ag-column-drop-cell-button {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOSA4LjE1NEw4LjE1NCA5IDYgNi44NDYgMy44NDYgOSAzIDguMTU0IDUuMTU0IDYgMyAzLjg0NiAzLjg0NiAzIDYgNS4xNTQgOC4xNTQgMyA5IDMuODQ2IDYuODQ2IDZ6IiBmaWxsPSIjRDZENUQ1Ii8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n overflow: hidden;\n text-indent: 100%;\n min-width: 16px;\n height: 100%;\n margin: 0 2px;\n opacity: 1; }\n .ag-theme-dark .ag-column-drop-cell .ag-column-drop-cell-button:hover {\n opacity: 1; }\n .ag-theme-dark .ag-column-drop-cell .ag-column-drag {\n margin-left: 8px;\n margin-top: 2px;\n width: 12px; }\n .ag-theme-dark .ag-select-agg-func-popup {\n background: #302e2e;\n border-radius: 0;\n box-shadow: none;\n padding: 4px;\n background: #302e2e;\n height: 70px;\n padding: 0; }\n .ag-theme-dark .ag-select-agg-func-popup .ag-virtual-list-item {\n cursor: default;\n line-height: 20px;\n padding-left: 8px; }\n .ag-theme-dark .ag-select-agg-func-popup .ag-virtual-list-item:hover {\n background-color: #4a708b; }\n .ag-theme-dark .ag-set-filter-list,\n .ag-theme-dark .ag-menu-column-select-wrapper {\n width: auto; }\n .ag-theme-dark .ag-column-drop-vertical > .ag-column-drop-cell {\n float: left;\n margin-bottom: 4px;\n margin-left: 4px;\n margin-top: 0; }\n .ag-theme-dark .ag-cell-data-changed {\n background-color: chocolate !important; }\n .ag-theme-dark .ag-cell-data-changed-animation {\n background-color: transparent;\n transition: background-color 1s; }\n .ag-theme-dark .ag-row-stub {\n background-color: #333; }\n .ag-theme-dark .ag-stub-cell {\n padding-left: 12px;\n padding-top: 4px; }\n .ag-theme-dark .ag-stub-cell .ag-loading-icon {\n float: left;\n height: 100%; }\n .ag-theme-dark .ag-stub-cell .ag-loading-text {\n float: left;\n height: 100%;\n margin-left: 4px;\n margin-top: 4px; }\n .ag-theme-dark .ag-floating-top {\n background-color: #333; }\n .ag-theme-dark .ag-floating-top .ag-row {\n background-color: #333; }\n .ag-theme-dark .ag-floating-bottom {\n background-color: #333; }\n .ag-theme-dark .ag-rtl .ag-numeric-cell {\n text-align: left; }\n .ag-theme-dark .ag-rtl .ag-header-cell-menu-button {\n float: left; }\n .ag-theme-dark .ag-rtl .ag-header-cell-label {\n float: right;\n width: calc(100% - 12px); }\n .ag-theme-dark .ag-rtl .ag-header-cell-label > span {\n float: right; }\n .ag-theme-dark .ag-rtl .ag-header-cell-label .ag-header-icon {\n margin-top: 2px; }\n .ag-theme-dark .ag-rtl .ag-numeric-header .ag-header-cell-menu-button {\n float: right; }\n .ag-theme-dark .ag-rtl .ag-numeric-header .ag-header-cell-label {\n float: left; }\n .ag-theme-dark .ag-rtl .ag-numeric-header .ag-header-cell-label > span {\n float: left; }\n .ag-theme-dark .ag-rtl .ag-column-panel .ag-pivot-mode span {\n float: right; }\n .ag-theme-dark .ag-rtl .ag-column-panel .ag-pivot-mode .ag-pivot-mode-select {\n margin-right: 4px; }\n .ag-theme-dark .ag-rtl .ag-column-panel .ag-pivot-mode .ag-pivot-mode-select .ag-checkbox-label {\n margin-right: 4px; }\n .ag-theme-dark .ag-rtl .ag-column-panel .ag-column-drop .ag-icon {\n float: right; }\n .ag-theme-dark .ag-rtl .ag-column-panel .ag-column-drop .ag-column-drop-title {\n clear: left;\n float: right; }\n .ag-theme-dark .ag-rtl .ag-column-panel .ag-column-drop .ag-column-drop-empty-message {\n padding-left: 4px;\n padding-right: 16px; }\n .ag-theme-dark .ag-rtl .ag-filter-checkbox {\n float: right;\n margin-left: 4px; }\n .ag-theme-dark .ag-rtl .ag-column-select-panel .ag-column-select-column-group span,\n .ag-theme-dark .ag-rtl .ag-column-select-panel .ag-column-select-column span {\n float: right; }\n .ag-theme-dark .ag-rtl .ag-column-select-panel .ag-column-select-column-group .ag-column-select-checkbox,\n .ag-theme-dark .ag-rtl .ag-column-select-panel .ag-column-select-column-group .ag-column-group-icons,\n .ag-theme-dark .ag-rtl .ag-column-select-panel .ag-column-select-column .ag-column-select-checkbox,\n .ag-theme-dark .ag-rtl .ag-column-select-panel .ag-column-select-column .ag-column-group-icons {\n margin-left: 4px;\n margin-right: 4px; }\n .ag-theme-dark .ag-rtl .ag-column-select-panel .ag-column-select-column.ag-toolpanel-add-group-indent {\n margin-left: 0;\n margin-right: 20px; }\n .ag-theme-dark .ag-rtl .ag-icon-tree-closed {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxyZWN0IHN0cm9rZS1vcGFjaXR5PSIuNSIgc3Ryb2tlPSIjRDZENUQ1IiB4PSIxLjUiIHk9IjEuNSIgd2lkdGg9IjkiIGhlaWdodD0iOSIgcng9IjEiLz48cGF0aCBmaWxsPSIjRDZENUQ1IiBkPSJNOSA1djJIM1Y1eiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-dark .ag-rtl .ag-header-group-cell-label {\n height: 100%; }\n .ag-theme-dark .ag-rtl .ag-header-group-cell-label span {\n float: right;\n height: 100%; }\n .ag-theme-dark .ag-rtl .ag-header-select-all:not(.ag-hidden) + .ag-cell-label-container {\n float: right; }\n .ag-theme-dark .ag-rtl .ag-header-select-all {\n margin-left: 12px;\n margin-right: 0; }\n .ag-theme-dark .ag-rtl .ag-selection-checkbox span,\n .ag-theme-dark .ag-rtl .ag-group-expanded span,\n .ag-theme-dark .ag-rtl .ag-group-contracted span {\n margin-left: 12px;\n margin-right: 0; }\n .ag-theme-dark .ag-rtl .ag-column-drop-horizontal {\n padding-right: 12px; }\n .ag-theme-dark .ag-rtl .ag-column-drop-horizontal span {\n float: right; }\n .ag-theme-dark .ag-rtl .ag-column-drop-horizontal > div:first-child {\n float: right; }\n .ag-theme-dark .ag-rtl .ag-column-drop-horizontal .ag-icon-group,\n .ag-theme-dark .ag-rtl .ag-column-drop-horizontal .ag-icon-pivot {\n margin-left: 12px;\n margin-right: 0; }\n .ag-theme-dark .ag-rtl .ag-column-drop-horizontal .ag-right-arrow {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik00LjUgMS41aDJ2OWgtMnoiLz48cGF0aCBkPSJNOS45OTMgNC43VjIuOTkzaC02djZINS43VjQuN2g0LjI5M3oiIGlkPSJiIi8+PC9kZWZzPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoOTAgNS41IDYpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHBhdGggc3Ryb2tlPSIjRDZENUQ1IiBkPSJNNSAyaDF2OEg1eiIvPjwvZz48ZyB0cmFuc2Zvcm09InNjYWxlKC0xIDEpIHJvdGF0ZSgtNDUgMCAyMi44NzQpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNiIi8+PHBhdGggc3Ryb2tlPSIjRDZENUQ1IiBkPSJNOS40OTMgNC4ydi0uNzA3aC01djVINS4yVjQuMmg0LjI5M3oiLz48L2c+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n height: 100%; }\n .ag-theme-dark .ag-rtl .ag-column-drop-horizontal .ag-left-arrow {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01LjUgMS41aDJ2OWgtMnoiLz48cGF0aCBkPSJNNy45OTMgNC43VjIuOTkzaC02djZIMy43VjQuN2g0LjI5M3oiIGlkPSJiIi8+PC9kZWZzPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoOTAgNi41IDYpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHBhdGggc3Ryb2tlPSIjRDZENUQ1IiBkPSJNNiAyaDF2OEg2eiIvPjwvZz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtNDUgNC45OTMgNS45OTMpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNiIi8+PHBhdGggc3Ryb2tlPSIjRDZENUQ1IiBkPSJNNy40OTMgNC4ydi0uNzA3aC01djVIMy4yVjQuMmg0LjI5M3oiLz48L2c+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n height: 100%; }\n .ag-theme-dark .ag-rtl .ag-floating-filter-body {\n float: right;\n margin-left: 0; }\n .ag-theme-dark .ag-rtl .ag-floating-filter-button {\n float: left; }\n .ag-theme-dark .ag-rtl .ag-header .ag-header-cell-resize {\n left: -4px;\n right: auto; }\n .ag-theme-dark .ag-rtl .ag-header .ag-header-cell-resize::after {\n border-left: 1px solid darkgrey;\n border-right: 0; }\n .ag-theme-dark .ag-rtl .ag-column-select-header .ag-filter-body {\n margin-left: 4px;\n margin-right: 0; }\n .ag-theme-dark .ag-rtl .ag-column-drag {\n background-position-x: right; }\n .ag-theme-dark .ag-status-bar {\n background: #302e2e;\n border: 1px solid darkgrey;\n border-top: 0;\n color: rgba(228, 228, 228, 0.5);\n display: flex;\n font: 400 14px \"Helvetica Neue\", sans-serif;\n justify-content: flex-end;\n padding: 8px 16px; }\n .ag-theme-dark .ag-status-bar .ag-status-bar-item {\n margin-right: 8px; }\n .ag-theme-dark .ag-status-bar .ag-status-bar-item span:nth-child(1)::after {\n content: \":\"; }\n .ag-theme-dark .ag-status-bar .ag-status-bar-item span:nth-child(2) {\n color: #ccc; }\n .ag-theme-dark .ag-details-row {\n box-sizing: border-box;\n padding: 20px; }\n .ag-theme-dark .ag-overlay-loading-wrapper {\n background-color: rgba(255, 255, 255, 0.5); }\n .ag-theme-dark .ag-overlay-loading-center {\n background: #302e2e;\n border-radius: 0;\n box-shadow: none;\n padding: 4px; }\n .ag-theme-dark .ag-tool-panel {\n background-color: #302e2e;\n border-right: 1px solid darkgrey;\n border-top: 1px solid darkgrey; }\n .ag-theme-dark .ag-tool-panel .ag-side-buttons {\n border-bottom: 1px solid darkgrey; }\n .ag-theme-dark .ag-tool-panel .ag-side-buttons button {\n background: transparent;\n border: 0;\n border-right: 1px solid darkgrey;\n color: #ccc;\n height: 20px; }\n .ag-theme-dark .ag-tool-panel .ag-panel-container {\n border-right: 1px solid darkgrey;\n box-sizing: border-box; }\n .ag-theme-dark .ag-tool-panel.full-width .ag-panel-container {\n border-right: 0; }\n .ag-theme-dark .ag-tool-panel .ag-column-drop {\n min-height: 50px; }\n .ag-theme-dark .ag-rtl .ag-tool-panel .ag-panel-container {\n border-left: 1px solid darkgrey;\n border-right: 0; }\n .ag-theme-dark .ag-rtl .ag-tool-panel.full-width .ag-panel-container {\n border-left: 0; }\n .ag-theme-dark .ag-rtl .ag-tool-panel .ag-side-buttons button {\n border-left: 1px solid darkgrey;\n border-right: 0; }\n .ag-theme-dark .ag-column-name-filter {\n box-sizing: border-box;\n width: 100%; }\n .ag-theme-dark .sass-variables::after {\n content: '{ \"autoSizePadding\": \"12px\", \"headerHeight\": \"25px\", \"groupPaddingSize\": \"24px\", \"footerPaddingAddition\": \"16px\", \"virtualItemHeight\": \"20px\", \"aggFuncPopupHeight\": \"70px\", \"checkboxIndentWidth\": \"16px\", \"leafNodePadding\": \"12px\", \"rowHeight\": \"25px\", \"gridSize\": \"4px\", \"iconSize\": \"12px\" }';\n display: none; }\n .ag-theme-dark .ag-tab-header {\n background-color: #626262; }\n .ag-theme-dark .ag-faded {\n opacity: 0.3; }\n .ag-theme-dark .ag-column-drop-horizontal.ag-column-drop {\n border: 1px solid darkgrey;\n border-bottom: 0; }\n .ag-theme-dark .ag-column-drop-horizontal.ag-column-drop:last-child {\n border-left: 0; }\n .ag-theme-dark .ag-header {\n background-image: none;\n border-bottom: 1px solid darkgrey; }\n .ag-theme-dark .ag-header-cell-resize::after {\n height: 25px;\n margin-top: 0; }\n .ag-theme-dark .ag-header-cell {\n border-right: 1px solid darkgrey;\n box-sizing: border-box; }\n .ag-theme-dark .ag-header-group-cell {\n border-right: 1px solid darkgrey; }\n .ag-theme-dark .ag-header-group-cell-with-group {\n border-bottom: 1px solid darkgrey; }\n .ag-theme-dark .ag-header-row {\n border-bottom: 0; }\n .ag-theme-dark .ag-root {\n border: 1px solid darkgrey; }\n .ag-theme-dark .ag-column-panel {\n border-right: 1px solid darkgrey; }\n .ag-theme-dark .ag-cell-no-focus {\n border-right: 1px dotted grey; }\n .ag-theme-dark .ag-row {\n border-bottom-width: 0; }\n .ag-theme-dark .ag-column-panel .ag-column-drop .ag-column-drop-empty-message {\n line-height: 25px; }\n .ag-theme-dark .ag-floating-filter-button {\n margin-top: 8px; }\n .ag-theme-dark .ag-filter .ag-filter-apply-panel {\n border-top: 1px solid darkgrey;\n justify-content: flex-start; }\n .ag-theme-dark .ag-cell-focus {\n border: 1px solid darkgrey; }\n .ag-theme-dark .ag-menu .ag-menu-option-active {\n background: #4a708b; }\n .ag-theme-dark .ag-menu .ag-menu-option {\n line-height: 24px; }\n .ag-theme-dark .ag-column-drop-cell {\n background: #403e3e;\n background-image: none;\n border: 1px solid darkgrey;\n border-radius: 0;\n height: 18px !important; }\n .ag-theme-dark .ag-column-drop-cell .ag-column-drop-cell-button {\n box-sizing: border-box;\n height: calc(100% - 4px);\n margin-bottom: 2px;\n margin-top: 2px; }\n .ag-theme-dark .ag-column-drop-cell .ag-column-drop-cell-button:hover {\n border: 1px solid darkgrey; }\n .ag-theme-dark .ag-cell-range-selected-1:not(.ag-cell-focus) {\n background-color: rgba(100, 160, 160, 0.4); }\n .ag-theme-dark .ag-cell-range-selected-2:not(.ag-cell-focus) {\n background-color: rgba(100, 160, 160, 0.6); }\n .ag-theme-dark .ag-cell-range-selected-3:not(.ag-cell-focus) {\n background-color: rgba(100, 160, 160, 0.7); }\n .ag-theme-dark .ag-cell-range-selected-4:not(.ag-cell-focus) {\n background-color: rgba(100, 160, 160, 0.8); }\n .ag-theme-dark .ag-cell-highlight {\n background-color: rgba(100, 160, 160, 0.4);\n border-bottom: 2px solid lightgreen; }\n .ag-theme-dark .ag-cell-highlight-animation {\n transition: all 1s; }\n .ag-theme-dark .ag-group-expanded .ag-icon-contracted:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxyZWN0IHN0cm9rZS1vcGFjaXR5PSIuNSIgc3Ryb2tlPSIjRDZENUQ1IiB4PSIxLjUiIHk9IjEuNSIgd2lkdGg9IjkiIGhlaWdodD0iOSIgcng9IjEiLz48cGF0aCBmaWxsPSIjRDZENUQ1IiBkPSJNOSA1djJIM1Y1eiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-dark .ag-rtl .ag-icon-tree-closed {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMyA2bDQtNHY4eiIgZmlsbD0iI0Q2RDVENSIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-dark .ag-cell-inline-editing {\n height: 25px;\n padding: 0; }\n .ag-theme-dark .ag-cell-inline-editing input {\n box-sizing: border-box; }\n .ag-theme-dark .ag-column-panel .ag-column-drop .ag-column-drop-title {\n float: none; }\n .ag-theme-dark .ag-column-select-panel .ag-column-select-column-group,\n .ag-theme-dark .ag-column-select-panel .ag-column-select-column {\n height: 20px;\n line-height: 20px; }\n .ag-theme-dark .ag-filter .ag-filter-header-container {\n height: 24px; }\n .ag-theme-dark .ag-tab {\n box-sizing: initial; }\n .ag-theme-dark .ag-filter .ag-filter-value {\n line-height: 16px; }\n .ag-theme-dark .ag-selection-checkbox span {\n position: relative;\n top: 0; }\n .ag-theme-dark .ag-rich-select-value {\n border-bottom: 1px solid darkgrey; }\n .ag-theme-dark .ag-header-cell-moving .ag-header-cell-label {\n opacity: 0.5; }\n .ag-theme-dark .ag-header-cell-moving {\n background-color: #bebebe; }\n .ag-theme-dark .ag-ltr .ag-pinned-right-header {\n border-left: 1px solid darkgrey; }\n .ag-theme-dark .ag-rtl .ag-pinned-left-header {\n border-right: 1px solid darkgrey; }\n .ag-theme-dark .ag-overlay-loading-wrapper {\n background-color: rgba(255, 255, 255, 0.5); }\n .ag-theme-dark .ag-overlay-loading-center {\n background-color: #fff;\n border: 1px solid darkgrey;\n border-radius: 10px;\n color: black;\n padding: 10px; }\n .ag-theme-dark .ag-column-name-filter {\n height: 16px; }\n .ag-theme-dark .ag-column-drop-cell .ag-column-drag {\n background-position-y: 0 !important; }\n .ag-theme-dark input,\n .ag-theme-dark select {\n background-color: #302e2e;\n color: #ccc; }\n .ag-theme-dark .ag-floating-filter-body input[readonly] {\n background: rgba(48, 46, 46, 0.3); }\n", ""]);
36711
36712// exports
36713
36714
36715/***/ }),
36716/* 167 */
36717/***/ (function(module, exports, __webpack_require__) {
36718
36719// style-loader: Adds some css to the DOM by adding a <style> tag
36720
36721// load the styles
36722var content = __webpack_require__(168);
36723if(typeof content === 'string') content = [[module.i, content, '']];
36724// add the styles to the DOM
36725var update = __webpack_require__(15)(content, {});
36726if(content.locals) module.exports = content.locals;
36727// Hot Module Replacement
36728if(false) {
36729 // When the styles change, update the <style> tags
36730 if(!content.locals) {
36731 module.hot.accept("!!../../node_modules/css-loader/index.js!./ag-theme-fresh.css", function() {
36732 var newContent = require("!!../../node_modules/css-loader/index.js!./ag-theme-fresh.css");
36733 if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
36734 update(newContent);
36735 });
36736 }
36737 // When the module is disposed, remove the <style> tags
36738 module.hot.dispose(function() { update(); });
36739}
36740
36741/***/ }),
36742/* 168 */
36743/***/ (function(module, exports, __webpack_require__) {
36744
36745exports = module.exports = __webpack_require__(14)();
36746// imports
36747
36748
36749// module
36750exports.push([module.i, ".ag-theme-fresh {\n background-color: white;\n color: black;\n font: 400 14px \"Helvetica Neue\", sans-serif; }\n .ag-theme-fresh .ag-body {\n background-color: #f6f6f6; }\n .ag-theme-fresh .ag-cell {\n box-sizing: border-box; }\n .ag-theme-fresh .ag-menu, .ag-theme-fresh .ag-theme-fresh.ag-dnd-ghost, .ag-theme-fresh .ag-cell-inline-editing, .ag-theme-fresh .ag-popup-editor, .ag-theme-fresh .ag-select-agg-func-popup, .ag-theme-fresh .ag-overlay-loading-center {\n background-color: #f6f6f6;\n border: 1px solid darkgrey; }\n .ag-theme-fresh .ag-tab-header .ag-tab {\n border: 1px solid transparent;\n border-bottom-width: 0;\n display: inline-block;\n margin: 4px;\n margin-bottom: 0;\n padding: 4px 8px; }\n .ag-theme-fresh .ag-tab-header .ag-tab.ag-tab-selected {\n background-color: #f6f6f6;\n border-bottom: 2px solid #f6f6f6 !important;\n border-color: darkgrey; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-1 {\n padding-left: 16px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-1 {\n padding-right: 16px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-1 {\n padding-left: 24px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-1 {\n padding-right: 24px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-2 {\n padding-left: 32px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-2 {\n padding-right: 32px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-2 {\n padding-left: 48px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-2 {\n padding-right: 48px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-3 {\n padding-left: 48px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-3 {\n padding-right: 48px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-3 {\n padding-left: 72px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-3 {\n padding-right: 72px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-4 {\n padding-left: 64px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-4 {\n padding-right: 64px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-4 {\n padding-left: 96px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-4 {\n padding-right: 96px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-5 {\n padding-left: 80px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-5 {\n padding-right: 80px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-5 {\n padding-left: 120px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-5 {\n padding-right: 120px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-6 {\n padding-left: 96px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-6 {\n padding-right: 96px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-6 {\n padding-left: 144px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-6 {\n padding-right: 144px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-7 {\n padding-left: 112px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-7 {\n padding-right: 112px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-7 {\n padding-left: 168px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-7 {\n padding-right: 168px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-8 {\n padding-left: 128px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-8 {\n padding-right: 128px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-8 {\n padding-left: 192px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-8 {\n padding-right: 192px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-9 {\n padding-left: 144px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-9 {\n padding-right: 144px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-9 {\n padding-left: 216px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-9 {\n padding-right: 216px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-10 {\n padding-left: 160px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-10 {\n padding-right: 160px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-10 {\n padding-left: 240px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-10 {\n padding-right: 240px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-11 {\n padding-left: 176px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-11 {\n padding-right: 176px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-11 {\n padding-left: 264px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-11 {\n padding-right: 264px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-12 {\n padding-left: 192px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-12 {\n padding-right: 192px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-12 {\n padding-left: 288px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-12 {\n padding-right: 288px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-13 {\n padding-left: 208px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-13 {\n padding-right: 208px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-13 {\n padding-left: 312px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-13 {\n padding-right: 312px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-14 {\n padding-left: 224px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-14 {\n padding-right: 224px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-14 {\n padding-left: 336px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-14 {\n padding-right: 336px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-15 {\n padding-left: 240px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-15 {\n padding-right: 240px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-15 {\n padding-left: 360px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-15 {\n padding-right: 360px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-16 {\n padding-left: 256px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-16 {\n padding-right: 256px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-16 {\n padding-left: 384px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-16 {\n padding-right: 384px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-17 {\n padding-left: 272px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-17 {\n padding-right: 272px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-17 {\n padding-left: 408px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-17 {\n padding-right: 408px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-18 {\n padding-left: 288px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-18 {\n padding-right: 288px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-18 {\n padding-left: 432px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-18 {\n padding-right: 432px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-19 {\n padding-left: 304px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-19 {\n padding-right: 304px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-19 {\n padding-left: 456px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-19 {\n padding-right: 456px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-20 {\n padding-left: 320px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-20 {\n padding-right: 320px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-20 {\n padding-left: 480px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-20 {\n padding-right: 480px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-21 {\n padding-left: 336px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-21 {\n padding-right: 336px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-21 {\n padding-left: 504px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-21 {\n padding-right: 504px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-22 {\n padding-left: 352px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-22 {\n padding-right: 352px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-22 {\n padding-left: 528px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-22 {\n padding-right: 528px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-23 {\n padding-left: 368px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-23 {\n padding-right: 368px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-23 {\n padding-left: 552px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-23 {\n padding-right: 552px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-24 {\n padding-left: 384px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-24 {\n padding-right: 384px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-24 {\n padding-left: 576px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-24 {\n padding-right: 576px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-25 {\n padding-left: 400px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-25 {\n padding-right: 400px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-25 {\n padding-left: 600px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-25 {\n padding-right: 600px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-26 {\n padding-left: 416px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-26 {\n padding-right: 416px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-26 {\n padding-left: 624px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-26 {\n padding-right: 624px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-27 {\n padding-left: 432px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-27 {\n padding-right: 432px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-27 {\n padding-left: 648px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-27 {\n padding-right: 648px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-28 {\n padding-left: 448px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-28 {\n padding-right: 448px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-28 {\n padding-left: 672px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-28 {\n padding-right: 672px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-29 {\n padding-left: 464px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-29 {\n padding-right: 464px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-29 {\n padding-left: 696px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-29 {\n padding-right: 696px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-30 {\n padding-left: 480px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-30 {\n padding-right: 480px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-30 {\n padding-left: 720px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-30 {\n padding-right: 720px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-31 {\n padding-left: 496px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-31 {\n padding-right: 496px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-31 {\n padding-left: 744px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-31 {\n padding-right: 744px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-32 {\n padding-left: 512px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-32 {\n padding-right: 512px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-32 {\n padding-left: 768px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-32 {\n padding-right: 768px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-33 {\n padding-left: 528px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-33 {\n padding-right: 528px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-33 {\n padding-left: 792px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-33 {\n padding-right: 792px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-34 {\n padding-left: 544px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-34 {\n padding-right: 544px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-34 {\n padding-left: 816px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-34 {\n padding-right: 816px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-35 {\n padding-left: 560px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-35 {\n padding-right: 560px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-35 {\n padding-left: 840px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-35 {\n padding-right: 840px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-36 {\n padding-left: 576px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-36 {\n padding-right: 576px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-36 {\n padding-left: 864px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-36 {\n padding-right: 864px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-37 {\n padding-left: 592px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-37 {\n padding-right: 592px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-37 {\n padding-left: 888px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-37 {\n padding-right: 888px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-38 {\n padding-left: 608px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-38 {\n padding-right: 608px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-38 {\n padding-left: 912px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-38 {\n padding-right: 912px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-39 {\n padding-left: 624px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-39 {\n padding-right: 624px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-39 {\n padding-left: 936px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-39 {\n padding-right: 936px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-40 {\n padding-left: 640px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-40 {\n padding-right: 640px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-40 {\n padding-left: 960px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-40 {\n padding-right: 960px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-41 {\n padding-left: 656px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-41 {\n padding-right: 656px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-41 {\n padding-left: 984px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-41 {\n padding-right: 984px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-42 {\n padding-left: 672px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-42 {\n padding-right: 672px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-42 {\n padding-left: 1008px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-42 {\n padding-right: 1008px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-43 {\n padding-left: 688px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-43 {\n padding-right: 688px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-43 {\n padding-left: 1032px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-43 {\n padding-right: 1032px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-44 {\n padding-left: 704px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-44 {\n padding-right: 704px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-44 {\n padding-left: 1056px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-44 {\n padding-right: 1056px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-45 {\n padding-left: 720px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-45 {\n padding-right: 720px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-45 {\n padding-left: 1080px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-45 {\n padding-right: 1080px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-46 {\n padding-left: 736px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-46 {\n padding-right: 736px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-46 {\n padding-left: 1104px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-46 {\n padding-right: 1104px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-47 {\n padding-left: 752px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-47 {\n padding-right: 752px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-47 {\n padding-left: 1128px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-47 {\n padding-right: 1128px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-48 {\n padding-left: 768px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-48 {\n padding-right: 768px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-48 {\n padding-left: 1152px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-48 {\n padding-right: 1152px; }\n .ag-theme-fresh .ag-ltr .ag-toolpanel-indent-49 {\n padding-left: 784px; }\n .ag-theme-fresh .ag-rtl .ag-toolpanel-indent-49 {\n padding-right: 784px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-indent-49 {\n padding-left: 1176px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-indent-49 {\n padding-right: 1176px; }\n .ag-theme-fresh .ag-ltr .ag-row-group-leaf-indent {\n margin-left: 24px; }\n .ag-theme-fresh .ag-rtl .ag-row-group-leaf-indent {\n margin-right: 24px; }\n .ag-theme-fresh .ag-rtl .ag-cell-first-right-pinned {\n border-left: 1px solid darkgrey; }\n .ag-theme-fresh .ag-ltr .ag-cell-first-right-pinned {\n border-left: 1px solid darkgrey; }\n .ag-theme-fresh .ag-rtl .ag-cell-last-left-pinned {\n border-right: 1px solid darkgrey; }\n .ag-theme-fresh .ag-ltr .ag-cell-last-left-pinned {\n border-right: 1px solid darkgrey; }\n .ag-theme-fresh .ag-value-change-delta {\n padding-right: 2px; }\n .ag-theme-fresh .ag-value-change-delta-up {\n color: darkgreen; }\n .ag-theme-fresh .ag-value-change-delta-down {\n color: darkred; }\n .ag-theme-fresh .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 .ag-theme-fresh .ag-value-change-value-highlight {\n background-color: #cec;\n transition: background-color 0.1s; }\n .ag-theme-fresh .ag-header {\n background-color: transparent;\n color: #333333;\n font: 400 14px \"Helvetica Neue\", sans-serif; }\n .ag-theme-fresh .ag-header-row {\n border-bottom: 1px solid darkgrey;\n box-sizing: border-box; }\n .ag-theme-fresh .ag-row {\n border-bottom: 1px solid darkgrey;\n box-sizing: border-box; }\n .ag-theme-fresh .ag-row-odd {\n background-color: #f6f6f6; }\n .ag-theme-fresh .ag-row-even {\n background-color: white; }\n .ag-theme-fresh .ag-row-hover {\n background-color: \"\"; }\n .ag-theme-fresh .ag-numeric-cell {\n text-align: right; }\n .ag-theme-fresh .ag-header-cell-label {\n display: flex;\n float: left;\n height: 100%;\n width: calc(100% - 12px); }\n .ag-theme-fresh .ag-header-cell-label span {\n height: 100%; }\n .ag-theme-fresh .ag-header-cell-label > span {\n float: left; }\n .ag-theme-fresh .ag-header-cell-label .ag-header-icon {\n background-position-y: 10px;\n background-size: 14px 14px;\n height: 100%;\n margin: 0;\n margin-left: 4px;\n opacity: 1; }\n .ag-theme-fresh .ag-header-cell-label .ag-header-cell-text {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap; }\n .ag-theme-fresh .ag-numeric-header .ag-header-cell-label {\n flex-direction: row-reverse;\n float: right; }\n .ag-theme-fresh .ag-numeric-header .ag-header-cell-label > span {\n float: right; }\n .ag-theme-fresh .ag-numeric-header .ag-header-cell-menu-button {\n float: left; }\n .ag-theme-fresh .ag-header-group-text {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap; }\n .ag-theme-fresh .ag-header-cell,\n .ag-theme-fresh .ag-header-group-cell {\n line-height: 25px;\n padding-left: 12px;\n padding-right: 12px; }\n .ag-theme-fresh .ag-cell {\n line-height: 23px;\n padding-left: 12px;\n padding-right: 12px;\n border: 1px solid transparent;\n padding-left: 11px;\n padding-right: 11px; }\n .ag-theme-fresh .ag-row-drag {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjMzMzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0yIDFoMnYySDJ6bTMgMGgydjJINXptMyAwaDJ2Mkg4eiIvPjxwYXRoIGQ9Ik04IDFoMnYySDh6TTIgNGgydjJIMnptMyAwaDJ2Mkg1em0zIDBoMnYySDh6TTIgN2gydjJIMnptMyAwaDJ2Mkg1em0zIDBoMnYySDh6bS02IDNoMnYySDJ6bTMgMGgydjJINXptMyAwaDJ2Mkg4eiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n background-position-x: left;\n background-position-y: 4px;\n float: left;\n height: 100%;\n width: 24px; }\n .ag-theme-fresh .ag-column-drag {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjMzMzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0yIDFoMnYySDJ6bTMgMGgydjJINXptMyAwaDJ2Mkg4eiIvPjxwYXRoIGQ9Ik04IDFoMnYySDh6TTIgNGgydjJIMnptMyAwaDJ2Mkg1em0zIDBoMnYySDh6TTIgN2gydjJIMnptMyAwaDJ2Mkg1em0zIDBoMnYySDh6bS02IDNoMnYySDJ6bTMgMGgydjJINXptMyAwaDJ2Mkg4eiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n background-position-x: left;\n background-position-y: 4px !important;\n height: 100%;\n min-width: 16px; }\n .ag-theme-fresh .ag-row-dragging {\n opacity: 0.5;\n z-index: 10000; }\n .ag-theme-fresh .ag-ltr .ag-cell-focus {\n border: 1px solid black;\n outline: initial; }\n .ag-theme-fresh .ag-rtl .ag-cell-focus {\n border: 1px solid black;\n outline: initial; }\n .ag-theme-fresh .ag-header-cell-resize {\n position: absolute;\n right: -4px;\n width: 8px;\n z-index: 4; }\n .ag-theme-fresh .ag-header-cell-resize::after {\n border-right: 1px solid darkgrey;\n box-sizing: content-box;\n content: \"resize\";\n display: block;\n height: 9px;\n margin-top: 8px;\n overflow: hidden;\n text-indent: 4px;\n width: 4px; }\n .ag-theme-fresh .ag-icon-aggregation {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOS41IDIuNWgtNmwyIDMuNS0yIDMuNWg2IiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZT0iIzMzMyIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-arrows {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAiIGhlaWdodD0iMjAiIHZpZXdCb3g9IjAgMCAyMCAyMCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjMzMzIj48cGF0aCBkPSJNMTYgNmwtMS40MSAxLjQxTDE2LjE3IDlINHYyaDEyLjE3bC0xLjU4IDEuNTlMMTYgMTRsNC00eiIvPjxwYXRoIGQ9Ik00IDZsMS40MSAxLjQxTDMuODMgOUgxNnYySDMuODNsMS41OCAxLjU5TDQgMTRsLTQtNHoiLz48cGF0aCBkPSJNNiAxNmwxLjQxLTEuNDFMOSAxNi4xN1Y0aDJ2MTIuMTdsMS41OS0xLjU4TDE0IDE2bC00IDR6Ii8+PHBhdGggZD0iTTE0IDRsLTEuNDEgMS40MUwxMSAzLjgzVjE2SDlWMy44M0w3LjQxIDUuNDEgNiA0bDQtNHoiLz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-asc {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDNoMnY5SDV6Ii8+PHBhdGggZD0iTTguOTkzIDUuMlYzLjQ5M2gtNnY2SDQuN1Y1LjJoNC4yOTN6IiBpZD0iYiIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiMzMzMiIGQ9Ik01LjUgMy41aDF2OGgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSg0NSA1Ljk5MyA2LjQ5MykiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2IiLz48cGF0aCBzdHJva2U9IiMzMzMiIGQ9Ik04LjQ5MyA0Ljd2LS43MDdoLTV2NUg0LjJWNC43aDQuMjkzeiIvPjwvZz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-checkbox-checked-readonly {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjEiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjMzMzIiB4PSIuNSIgeT0iLjUiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgcng9IjEiLz48cGF0aCBzdHJva2U9IiMzMzMiIGQ9Ik05IDNMNiA4LjVsLTIuNS0yIi8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-checkbox-checked {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjEiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjMzMzIiB4PSIuNSIgeT0iLjUiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgcng9IjEiLz48cGF0aCBzdHJva2U9IiMzMzMiIGQ9Ik05IDNMNiA4LjVsLTIuNS0yIi8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-checkbox-indeterminate-readonly {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjEiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjMzMzIiB4PSIuNSIgeT0iLjUiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgcng9IjEiLz48cGF0aCBmaWxsPSIjMzMzIiBkPSJNNCA1aDR2Mkg0eiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-checkbox-indeterminate {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjEiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjMzMzIiB4PSIuNSIgeT0iLjUiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgcng9IjEiLz48cGF0aCBmaWxsPSIjMzMzIiBkPSJNNCA1aDR2Mkg0eiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-checkbox-unchecked-readonly {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjEiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjMzMzIiB4PSIuNSIgeT0iLjUiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgcng9IjEiLz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-checkbox-unchecked {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjEiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjMzMzIiB4PSIuNSIgeT0iLjUiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgcng9IjEiLz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-column {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAxaDR2Mkgxem0wIDNoNHY3SDF6IiBmaWxsPSIjMzMzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-columns {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAxaDR2Mkgxem02IDBoNHYySDd6TTEgNWg0djJIMXptNiAwaDR2Mkg3ek0xIDloNHYySDF6bTYgMGg0djJIN3oiIGZpbGw9IiMzMzMiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-contracted {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxyZWN0IHN0cm9rZS1vcGFjaXR5PSIuNSIgc3Ryb2tlPSIjMzMzIiB4PSIxLjUiIHk9IjEuNSIgd2lkdGg9IjkiIGhlaWdodD0iOSIgcng9IjEiLz48cGF0aCBmaWxsPSIjMzMzIiBkPSJNOSA1djJIM1Y1eiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-copy {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiMzMzMiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHBhdGggZD0iTTQuNSA0LjVoNXY1aC01eiIvPjxwYXRoIGQ9Ik03LjUgMi41aC01djVoMnYyaDV2LTVoLTJ2LTJ6Ii8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-cut {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiMzMzMiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHBhdGggZD0iTTMgMy4xMmMuNjY3LjA3OCAzIDEuNzQ1IDcgNS0uMzI2LjIwNC0uNjU5LjIwNC0xIDAtLjM0MS0uMjA2LTEuNjc0LTEuMjA2LTQtMyAwIC42NjYtLjY2Ny42NjYtMiAwLTItMS0xLTIuMTIgMC0yeiIvPjxwYXRoIGQ9Ik0zIDguMjY0Yy42NjctLjA4IDMtMS43NDYgNy01LS4zMjYtLjIwNS0uNjU5LS4yMDUtMSAwLS4zNDEuMjA0LTEuNjc0IDEuMjA0LTQgMyAwLS42NjctLjY2Ny0uNjY3LTIgMC0yIDEtMSAyLjExOSAwIDJ6Ii8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-desc {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDJoMnY5SDV6Ii8+PHBhdGggZD0iTTguOTkzIDYuMVY0LjM5M2gtNnY2SDQuN1Y2LjFoNC4yOTN6IiBpZD0iYiIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiMzMzMiIGQ9Ik01LjUgMi41aDF2OGgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtMTM1IDUuOTkzIDcuMzkzKSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjYiIvPjxwYXRoIHN0cm9rZT0iIzMzMyIgZD0iTTguNDkzIDUuNnYtLjcwN2gtNXY1SDQuMlY1LjZoNC4yOTN6Ii8+PC9nPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-expanded {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxyZWN0IHN0cm9rZS1vcGFjaXR5PSIuNSIgc3Ryb2tlPSIjMzMzIiB4PSIxLjUiIHk9IjEuNSIgd2lkdGg9IjkiIGhlaWdodD0iOSIgcng9IjEiLz48cGF0aCBmaWxsPSIjMzMzIiBkPSJNNSAzaDJ2Nkg1eiIvPjxwYXRoIGZpbGw9IiMzMzMiIGQ9Ik05IDV2MkgzVjV6Ii8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-eye-slash {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0zLjAwMSAzLjkwOEwzIDRhMyAzIDAgMSAwIDUuOTk5LS4wOTJBNS4yNDggNS4yNDggMCAwIDAgNiAzYy0xLjEgMC0yLjEuMzAzLTIuOTk5LjkwOHoiIGZpbGw9IiMzMzMiLz48cGF0aCBkPSJNNCA0LjVjLjY2Ny0uMzMzIDEuNjY3LS41IDMtLjUiIHN0cm9rZT0iIzk3OTc5NyIvPjxwYXRoIGQ9Ik0xIDZjMS4zMzMtMiAzLTMgNS0zczMuNjY3IDEgNSAzQzkuNjY3IDggOCA5IDYgOVMyLjMzMyA4IDEgNnoiIHN0cm9rZT0iIzMzMyIvPjxwYXRoIGQ9Ik00LjAwNCAyLjgzNWw0Ljk5MiA2LjMzIiBzdHJva2U9IiMzMzMiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiLz48cGF0aCBkPSJNMy4wMDQgMi44MzVsNC45OTIgNi4zMyIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-eye {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0zLjAwMSAzLjkwOEwzIDRhMyAzIDAgMSAwIDUuOTk5LS4wOTJBNS4yNDggNS4yNDggMCAwIDAgNiAzYy0xLjEgMC0yLjEuMzAzLTIuOTk5LjkwOHoiIGZpbGw9IiMzMzMiLz48cGF0aCBkPSJNNCA0LjVjLjY2Ny0uMzMzIDEuNjY3LS41IDMtLjUiIHN0cm9rZT0iIzk3OTc5NyIvPjxwYXRoIGQ9Ik0xIDZjMS4zMzMtMiAzLTMgNS0zczMuNjY3IDEgNSAzQzkuNjY3IDggOCA5IDYgOVMyLjMzMyA4IDEgNnoiIHN0cm9rZT0iIzMzMyIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-filter {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAyaDEwTDcgNnY1TDUgOVY2TDEgMnptNCA0djFoMlY2SDV6IiBmaWxsPSIjMzMzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-group {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIHN0cm9rZT0iIzMzMyIgZD0iTTcuNSAxLjVoM3YyaC0zem0wIDRoM3YyaC0zem0wIDRoM3YyaC0zeiIvPjxwYXRoIGZpbGw9IiMzMzMiIGQ9Ik0yIDNoMXY4SDJ6bTEgM2g0djFIM3ptMi00aDN2MUg1eiIvPjxwYXRoIGZpbGw9IiMzMzMiIGQ9Ik0yIDEwaDV2MUgyeiIvPjxwYXRoIHN0cm9rZT0iIzMzMyIgZD0iTTEuNSAxLjVoM3YyaC0zeiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-indeterminate {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0zLjA1NiA0LjU4MWEzLjAwMSAzLjAwMSAwIDAgMCA1Ljg4OCAwQzguMDU5IDQuMTk0IDcuMDc4IDQgNiA0Yy0xLjA3OCAwLTIuMDYuMTk0LTIuOTQ0LjU4MXoiIGZpbGw9IiMzMzMiLz48cGF0aCBkPSJNNCA1LjVjLjY2Ny0uMzMzIDEuNjY3LS41IDMtLjUiIHN0cm9rZT0iIzk3OTc5NyIvPjxwYXRoIGQ9Ik0xIDZjMS4zMzMtMS4zMzMgMy0yIDUtMnMzLjY2Ny42NjcgNSAyQzkuNjY3IDcuMzMzIDggOCA2IDhzLTMuNjY3LS42NjctNS0yeiIgc3Ryb2tlPSIjMzMzIi8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-left {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01LjUgMS41aDJ2OWgtMnoiLz48cGF0aCBkPSJNNy45OTMgNC43VjIuOTkzaC02djZIMy43VjQuN2g0LjI5M3oiIGlkPSJiIi8+PC9kZWZzPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoOTAgNi41IDYpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHBhdGggc3Ryb2tlPSIjMzMzIiBkPSJNNiAyaDF2OEg2eiIvPjwvZz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtNDUgNC45OTMgNS45OTMpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNiIi8+PHBhdGggc3Ryb2tlPSIjMzMzIiBkPSJNNy40OTMgNC4ydi0uNzA3aC01djVIMy4yVjQuMmg0LjI5M3oiLz48L2c+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-loading {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDFoMnYzSDV6Ii8+PHBhdGggaWQ9ImIiIGQ9Ik01IDhoMnYzSDV6Ii8+PHBhdGggaWQ9ImMiIGQ9Ik0xIDVoM3YySDF6Ii8+PHBhdGggaWQ9ImQiIGQ9Ik04IDVoM3YySDh6Ii8+PHBhdGggaWQ9ImUiIGQ9Ik00IDBoMnYzSDR6Ii8+PHBhdGggaWQ9ImYiIGQ9Ik00IDdoMnYzSDR6Ii8+PHBhdGggaWQ9ImciIGQ9Ik0wIDRoM3YySDB6Ii8+PHBhdGggaWQ9ImgiIGQ9Ik03IDRoM3YySDd6Ii8+PC9kZWZzPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjYSIvPjxwYXRoIHN0cm9rZT0iIzk3OTc5NyIgZD0iTTUuNSAxLjVoMXYyaC0xeiIvPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2IiLz48cGF0aCBzdHJva2U9IiM5Nzk3OTciIGQ9Ik01LjUgOC41aDF2MmgtMXoiLz48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNjIi8+PHBhdGggc3Ryb2tlPSIjOTc5Nzk3IiBkPSJNMS41IDUuNWgydjFoLTJ6Ii8+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjZCIvPjxwYXRoIHN0cm9rZT0iIzk3OTc5NyIgZD0iTTguNSA1LjVoMnYxaC0yeiIvPjxnIG9wYWNpdHk9Ii43MTQiPjxnIHRyYW5zZm9ybT0icm90YXRlKDQ1IDQuMjkzIDYuNzA3KSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjZSIvPjxwYXRoIHN0cm9rZT0iIzk3OTc5NyIgZD0iTTQuNS41aDF2MmgtMXoiLz48L2c+PGcgdHJhbnNmb3JtPSJyb3RhdGUoNDUgNC4yOTMgNi43MDcpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNmIi8+PHBhdGggc3Ryb2tlPSIjOTc5Nzk3IiBkPSJNNC41IDcuNWgxdjJoLTF6Ii8+PC9nPjxnIHRyYW5zZm9ybT0icm90YXRlKDQ1IDQuMjkzIDYuNzA3KSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjZyIvPjxwYXRoIHN0cm9rZT0iIzk3OTc5NyIgZD0iTS41IDQuNWgydjFoLTJ6Ii8+PC9nPjxnIHRyYW5zZm9ybT0icm90YXRlKDQ1IDQuMjkzIDYuNzA3KSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjaCIvPjxwYXRoIHN0cm9rZT0iIzk3OTc5NyIgZD0iTTcuNSA0LjVoMnYxaC0yeiIvPjwvZz48L2c+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-menu {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAxaDEwdjJIMXptMCA0aDEwdjJIMXptMCA0aDEwdjJIMXoiIGZpbGw9IiMzMzMiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-minus {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiA1aDh2MkgyeiIgZmlsbD0iIzMzMyIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-none {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDNoMnY2SDV6Ii8+PHBhdGggZD0iTTguMTQ2IDguMTgyVjYuNDc1aC01djVoMS43MDhWOC4xODJoMy4yOTJ6IiBpZD0iYiIvPjxwYXRoIGQ9Ik04LjUgMi45MTRWMS4yMDdoLTV2NWgxLjcwN1YyLjkxNEg4LjV6IiBpZD0iYyIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiMzMzMiIGQ9Ik01LjUgMy41aDF2NWgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtMTM1IDUuNjQ2IDguNDc1KSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjYiIvPjxwYXRoIHN0cm9rZT0iIzMzMyIgZD0iTTcuNjQ2IDcuNjgydi0uNzA3aC00djRoLjcwOFY3LjY4MmgzLjI5MnoiLz48L2c+PGcgdHJhbnNmb3JtPSJyb3RhdGUoNDUgNiAzLjcwNykiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2MiLz48cGF0aCBzdHJva2U9IiMzMzMiIGQ9Ik04IDIuNDE0di0uNzA3SDR2NGguNzA3VjIuNDE0SDh6Ii8+PC9nPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-not-allowed {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiMzMzMiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGNpcmNsZSBjeD0iNiIgY3k9IjYiIHI9IjQiLz48cGF0aCBkPSJNOC41IDMuNUwzLjQwMSA4LjU5OSIgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-paste {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiMzMzMiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHBhdGggZD0iTTIuNSAyLjVoN3Y3aC03eiIvPjxwYXRoIGQ9Ik02LjUgMS41aC0xdjJoLTF2MWgzdi0xaC0xdi0yeiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-pin {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGZpbGw9IiMzMzMiIGQ9Ik0zIDJoNnYxSDh2NGwyIDFIN2wtMSAzLTEtM0gybDItMVYzSDN6Ii8+PHBhdGggZD0iTTUgM2gxdjRINXpNNCAzaDF2M0g0eiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-pivot {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiMzMzMiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHJlY3QgeD0iMS41IiB5PSIxLjUiIHdpZHRoPSI5IiBoZWlnaHQ9IjkiIHJ4PSIxIi8+PHBhdGggZD0iTTEwLjUgMy41aC05bTItMnY5IiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIi8+PHBhdGggZD0iTTcuNSA2LjVsMS0xIDEgMW0tMyAxbC0xIDEgMSAxIi8+PHBhdGggZD0iTTguNSA1LjV2M2gtMyIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-plus {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjMzMzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik01IDJoMnY4SDV6Ii8+PHBhdGggZD0iTTIgNWg4djJIMnoiLz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-right {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik00LjUgMS41aDJ2OWgtMnoiLz48cGF0aCBkPSJNOS45OTMgNC43VjIuOTkzaC02djZINS43VjQuN2g0LjI5M3oiIGlkPSJiIi8+PC9kZWZzPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoOTAgNS41IDYpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHBhdGggc3Ryb2tlPSIjMzMzIiBkPSJNNSAyaDF2OEg1eiIvPjwvZz48ZyB0cmFuc2Zvcm09InNjYWxlKC0xIDEpIHJvdGF0ZSgtNDUgMCAyMi44NzQpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNiIi8+PHBhdGggc3Ryb2tlPSIjMzMzIiBkPSJNOS40OTMgNC4ydi0uNzA3aC01djVINS4yVjQuMmg0LjI5M3oiLz48L2c+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-small-left {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMyA2bDQtNHY4eiIgZmlsbD0iIzMzMyIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-small-right {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNSAybDQgNC00IDR6IiBmaWxsPSIjMzMzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-small-up {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiA3bDQtNCA0IDR6IiBmaWxsPSIjMzMzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-small-down {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiA1aDhMNiA5eiIgZmlsbD0iIzMzMyIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-tick {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMS41IDUuNWwzIDMgNi02IiBzdHJva2Utd2lkdGg9IjIiIHN0cm9rZT0iIzMzMyIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-cross {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiAxMGw4LThtMCA4TDIgMiIgc3Ryb2tlPSIjMzMzIiBzdHJva2Utd2lkdGg9IjIiIGZpbGw9Im5vbmUiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-tree-open {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiA1aDhMNiA5eiIgZmlsbD0iIzMzMyIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-tree-closed {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNSAybDQgNC00IDR6IiBmaWxsPSIjMzMzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-icon-tree-indeterminate {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiA1aDh2MkgyeiIgZmlsbD0iIzMzMyIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n display: inline-block; }\n .ag-theme-fresh .ag-header-cell-menu-button .ag-icon-menu {\n display: block;\n height: 25px; }\n .ag-theme-fresh .ag-icon-checkbox-checked:empty {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHdpZHRoPSIxMiIgaGVpZ2h0PSIxMiIgcng9IjEiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjMDAwIiB4PSIuNSIgeT0iLjUiIHdpZHRoPSIxMSIgaGVpZ2h0PSIxMSIgcng9IjEiLz48cGF0aCBzdHJva2U9IiMwMDAiIGQ9Ik05IDNMNiA4LjVsLTIuNS0yIi8+PC9nPjwvc3ZnPg==); }\n .ag-theme-fresh .ag-menu {\n background: #f6f6f6;\n border-radius: 0;\n box-shadow: none;\n padding: 4px;\n padding: 0;\n z-index: 5; }\n .ag-theme-fresh .ag-menu .ag-menu-list {\n cursor: default;\n margin-bottom: 4px;\n margin-top: 4px;\n width: 100%; }\n .ag-theme-fresh .ag-menu .ag-menu-option {\n line-height: 16px;\n padding-left: 8px;\n padding-right: 8px; }\n .ag-theme-fresh .ag-menu .ag-menu-option > span {\n display: table-cell;\n vertical-align: middle; }\n .ag-theme-fresh .ag-menu .ag-menu-option-active {\n background: \"\"; }\n .ag-theme-fresh .ag-menu .ag-menu-option-disabled {\n opacity: 0.5; }\n .ag-theme-fresh .ag-menu .ag-menu-option-icon {\n padding-left: 4px;\n padding-right: 4px; }\n .ag-theme-fresh .ag-menu .ag-menu-option-icon span {\n height: 12px;\n line-height: 0;\n margin-top: 4px; }\n .ag-theme-fresh .ag-menu .ag-menu-option-shortcut {\n padding-left: 8px; }\n .ag-theme-fresh .ag-menu .ag-menu-separator {\n margin-left: -4px; }\n .ag-theme-fresh .ag-menu .ag-menu-separator > span {\n background-image: url(\"data:image/svg+xml;utf8,<svg width='1' height='8px' viewBox='0 0 1 8px' xmlns='http://www.w3.org/2000/svg'> <line x1='0' y1='4px' x2='1' y2='4px' stroke-width='1' stroke='darkgrey'/> </svg>\");\n height: 8px; }\n .ag-theme-fresh .ag-menu .ag-menu-option-popup-pointer {\n width: 20px; }\n .ag-theme-fresh.ag-dnd-ghost {\n background: #f6f6f6;\n border-radius: 0;\n box-shadow: none;\n padding: 4px;\n border: 1px solid darkgrey;\n color: #333333;\n font: 400 14px \"Helvetica Neue\", sans-serif;\n height: 25px !important;\n line-height: 25px;\n margin: 0;\n padding: 0 8px;\n transform: translateY(8px);\n z-index: 5; }\n .ag-theme-fresh.ag-dnd-ghost span,\n .ag-theme-fresh.ag-dnd-ghost div {\n float: left;\n height: 100%;\n margin: 0;\n padding: 0; }\n .ag-theme-fresh.ag-dnd-ghost .ag-dnd-ghost-icon {\n margin-right: 4px;\n opacity: 1; }\n .ag-theme-fresh .ag-tab-header {\n background: #f6f6f6;\n min-width: 220px;\n width: 100%; }\n .ag-theme-fresh .ag-tab-header .ag-tab {\n border-bottom: 2px solid transparent;\n height: 16px;\n text-align: center;\n vertical-align: middle; }\n .ag-theme-fresh .ag-tab-header .ag-tab.ag-tab-selected .ag-icon-filter {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAyaDEwTDcgNnY1TDUgOVY2TDEgMnptNCA0djFoMlY2SDV6IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=);\n display: inline-block; }\n .ag-theme-fresh .ag-tab-header .ag-tab.ag-tab-selected .ag-icon-columns {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAxaDR2Mkgxem02IDBoNHYySDd6TTEgNWg0djJIMXptNiAwaDR2Mkg3ek0xIDloNHYySDF6bTYgMGg0djJIN3oiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==);\n display: inline-block; }\n .ag-theme-fresh .ag-tab-header .ag-tab.ag-tab-selected .ag-icon-menu {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAxaDEwdjJIMXptMCA0aDEwdjJIMXptMCA0aDEwdjJIMXoiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==);\n display: inline-block; }\n .ag-theme-fresh .ag-tab-body {\n padding: 4px 0; }\n .ag-theme-fresh .ag-tab-body .ag-filter-select {\n margin: 4px;\n width: calc(100% - 8px); }\n .ag-theme-fresh .ag-tab-body .ag-menu-list {\n margin-bottom: 0;\n margin-top: 0; }\n .ag-theme-fresh .ag-tab-body .ag-menu-list > div:first-child > span {\n padding-top: 0; }\n .ag-theme-fresh .ag-tab-body .ag-menu-list > div:last-child > span {\n padding-bottom: 0; }\n .ag-theme-fresh .ag-tab-body .ag-menu-list > div:last-child > .ag-menu-option-popup-pointer {\n background-position-y: 0; }\n .ag-theme-fresh .ag-filter-select {\n margin: 4px;\n width: calc(100% - 8px); }\n .ag-theme-fresh .ag-filter input[type=\"radio\"] {\n margin: 0 3px 0 6px;\n width: 12px;\n height: 17px;\n vertical-align: top; }\n .ag-theme-fresh .ag-filter input[type=\"text\"],\n .ag-theme-fresh .ag-filter input[type=\"date\"] {\n padding-left: 4px; }\n .ag-theme-fresh .ag-filter label {\n display: block;\n padding-left: 4px; }\n .ag-theme-fresh .ag-filter .ag-set-filter-list {\n height: 130px;\n padding-top: 4px; }\n .ag-theme-fresh .ag-filter .ag-filter-header-container {\n box-sizing: border-box;\n height: 20px; }\n .ag-theme-fresh .ag-filter .ag-filter-header-container:nth-child(2) {\n border-bottom: 1px solid darkgrey; }\n .ag-theme-fresh .ag-filter .ag-filter-checkbox {\n float: left;\n height: 20px;\n margin-right: 4px;\n padding-top: 2px; }\n .ag-theme-fresh .ag-filter .ag-filter-value {\n height: 20px;\n line-height: 14px; }\n .ag-theme-fresh .ag-filter .ag-filter-apply-panel {\n display: flex;\n justify-content: flex-end;\n padding: 4px;\n padding-top: 8px; }\n .ag-theme-fresh .ag-filter .ag-filter-apply-panel button + button {\n margin-left: 8px; }\n .ag-theme-fresh .ag-column-select-panel .ag-column-select-column-group,\n .ag-theme-fresh .ag-column-select-panel .ag-column-select-column {\n height: 16px;\n line-height: 16px;\n margin-left: 0; }\n .ag-theme-fresh .ag-column-select-panel .ag-column-select-column-group span,\n .ag-theme-fresh .ag-column-select-panel .ag-column-select-column span {\n float: left;\n height: 100%; }\n .ag-theme-fresh .ag-column-select-panel .ag-column-select-column-group .ag-column-select-indent,\n .ag-theme-fresh .ag-column-select-panel .ag-column-select-column .ag-column-select-indent {\n width: 8px; }\n .ag-theme-fresh .ag-column-select-panel .ag-column-select-column-group .ag-column-select-checkbox,\n .ag-theme-fresh .ag-column-select-panel .ag-column-select-column-group .ag-column-group-icons,\n .ag-theme-fresh .ag-column-select-panel .ag-column-select-column .ag-column-select-checkbox,\n .ag-theme-fresh .ag-column-select-panel .ag-column-select-column .ag-column-group-icons {\n margin-left: 4px;\n margin-right: 4px; }\n .ag-theme-fresh .ag-column-select-panel .ag-column-container {\n padding-top: 4px; }\n .ag-theme-fresh .ag-column-select-panel .ag-column-select-column.ag-toolpanel-add-group-indent {\n margin-left: 20px; }\n .ag-theme-fresh .ag-column-tool-panel {\n display: flex; }\n .ag-theme-fresh .ag-filter-body {\n flex-grow: 1;\n flex-shrink: 1;\n padding-right: 4px; }\n .ag-theme-fresh .ag-column-tool-panel-item button {\n font-family: \"Helvetica Neue\", sans-serif;\n font-size: 14px;\n height: 100%; }\n .ag-theme-fresh .ag-filter-filter {\n margin-bottom: 4px; }\n .ag-theme-fresh .ag-column-select-header {\n border-bottom: 1px solid darkgrey;\n box-sizing: border-box;\n height: 25px;\n padding-top: 4px; }\n .ag-theme-fresh .ag-column-select-header label {\n display: block;\n padding-left: 4px; }\n .ag-theme-fresh .ag-column-select-header label .ag-filter-checkbox {\n float: left;\n margin-right: 4px; }\n .ag-theme-fresh .ag-column-select-header .ag-column-tool-panel a {\n margin: 0 4px;\n padding-top: 2px; }\n .ag-theme-fresh .ag-group-child-count::before {\n content: \" \"; }\n .ag-theme-fresh .ag-column-panel {\n border-right: 0; }\n .ag-theme-fresh .ag-column-panel .ag-pivot-mode {\n border-bottom: 1px solid darkgrey;\n box-sizing: border-box;\n height: 25px;\n line-height: 25px; }\n .ag-theme-fresh .ag-column-panel .ag-pivot-mode span {\n float: left;\n height: 100%; }\n .ag-theme-fresh .ag-column-panel .ag-pivot-mode .ag-pivot-mode-select {\n margin-left: 4px; }\n .ag-theme-fresh .ag-column-panel .ag-pivot-mode .ag-pivot-mode-select .ag-checkbox-label {\n margin-left: 4px; }\n .ag-theme-fresh .ag-column-panel .ag-column-select-panel {\n border-bottom: 1px solid darkgrey;\n padding-bottom: 3px;\n padding-top: 0; }\n .ag-theme-fresh .ag-column-panel .ag-column-drop {\n border-bottom: 1px solid darkgrey;\n clear: both;\n overflow: auto;\n padding: 4px 0;\n padding-bottom: 8px; }\n .ag-theme-fresh .ag-column-panel .ag-column-drop .ag-icon {\n float: left;\n height: 20px;\n margin: 0 4px; }\n .ag-theme-fresh .ag-column-panel .ag-column-drop .ag-column-drop-title {\n clear: right;\n float: left;\n height: 20px;\n line-height: 20px;\n width: calc(100% - 20px); }\n .ag-theme-fresh .ag-column-panel .ag-column-drop .ag-column-drop-empty-message {\n clear: both;\n color: rgba(0, 0, 0, 0.5);\n font: 400 14px \"Helvetica Neue\", sans-serif;\n line-height: 8px;\n padding-left: 16px;\n padding-right: 4px; }\n .ag-theme-fresh .ag-column-panel .ag-column-drop:last-child {\n border-bottom: 0; }\n .ag-theme-fresh .ag-filter-icon:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMSAyaDEwTDcgNnY1TDUgOVY2TDEgMnptNCA0djFoMlY2SDV6IiBmaWxsPSIjMzMzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-fresh .ag-sort-ascending-icon:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDNoMnY5SDV6Ii8+PHBhdGggZD0iTTguOTkzIDUuMlYzLjQ5M2gtNnY2SDQuN1Y1LjJoNC4yOTN6IiBpZD0iYiIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiMzMzMiIGQ9Ik01LjUgMy41aDF2OGgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSg0NSA1Ljk5MyA2LjQ5MykiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2IiLz48cGF0aCBzdHJva2U9IiMzMzMiIGQ9Ik04LjQ5MyA0Ljd2LS43MDdoLTV2NUg0LjJWNC43aDQuMjkzeiIvPjwvZz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-fresh .ag-sort-descending-icon:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDJoMnY5SDV6Ii8+PHBhdGggZD0iTTguOTkzIDYuMVY0LjM5M2gtNnY2SDQuN1Y2LjFoNC4yOTN6IiBpZD0iYiIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiMzMzMiIGQ9Ik01LjUgMi41aDF2OGgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtMTM1IDUuOTkzIDcuMzkzKSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjYiIvPjxwYXRoIHN0cm9rZT0iIzMzMyIgZD0iTTguNDkzIDUuNnYtLjcwN2gtNXY1SDQuMlY1LjZoNC4yOTN6Ii8+PC9nPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-fresh .ag-sort-none-icon:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01IDNoMnY2SDV6Ii8+PHBhdGggZD0iTTguMTQ2IDguMTgyVjYuNDc1aC01djVoMS43MDhWOC4xODJoMy4yOTJ6IiBpZD0iYiIvPjxwYXRoIGQ9Ik04LjUgMi45MTRWMS4yMDdoLTV2NWgxLjcwN1YyLjkxNEg4LjV6IiBpZD0iYyIvPjwvZGVmcz48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2EiLz48cGF0aCBzdHJva2U9IiMzMzMiIGQ9Ik01LjUgMy41aDF2NWgtMXoiLz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtMTM1IDUuNjQ2IDguNDc1KSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjYiIvPjxwYXRoIHN0cm9rZT0iIzMzMyIgZD0iTTcuNjQ2IDcuNjgydi0uNzA3aC00djRoLjcwOFY3LjY4MmgzLjI5MnoiLz48L2c+PGcgdHJhbnNmb3JtPSJyb3RhdGUoNDUgNiAzLjcwNykiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2MiLz48cGF0aCBzdHJva2U9IiMzMzMiIGQ9Ik04IDIuNDE0di0uNzA3SDR2NGguNzA3VjIuNDE0SDh6Ii8+PC9nPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-fresh .ag-numeric-header .ag-header-cell-label .ag-header-icon {\n margin-left: 0;\n margin-right: 4px; }\n .ag-theme-fresh .ag-paging-panel {\n align-items: center;\n border-top: 1px solid darkgrey;\n color: #333333;\n display: flex;\n height: 25px;\n justify-content: flex-end;\n padding: 0 12px; }\n .ag-theme-fresh .ag-paging-panel > span {\n margin-left: 16px; }\n .ag-theme-fresh .ag-row-selected {\n background-color: #bde2e5; }\n .ag-theme-fresh .ag-cell-range-selected:not(.ag-cell-focus) {\n background-color: rgba(120, 120, 120, 0.4); }\n .ag-theme-fresh .ag-cell-inline-editing {\n background: #f6f6f6;\n border-radius: 0;\n box-shadow: none;\n padding: 4px;\n height: 37px;\n line-height: normal;\n padding: 12px;\n z-index: 2; }\n .ag-theme-fresh .ag-cell-inline-editing select {\n height: auto; }\n .ag-theme-fresh .ag-popup-editor {\n background: #f6f6f6;\n border-radius: 0;\n box-shadow: none;\n padding: 4px;\n padding: 0;\n z-index: 1; }\n .ag-theme-fresh .ag-popup-editor .ag-large-textarea textarea {\n height: auto;\n padding: 12px; }\n .ag-theme-fresh .ag-rich-select {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiA1aDhMNiA5eiIgZmlsbD0iIzMzMyIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);\n background-position-x: calc(100% - 4px);\n background-position-y: 8px;\n background-repeat: no-repeat; }\n .ag-theme-fresh .ag-rich-select .ag-rich-select-list {\n height: 162.5px; }\n .ag-theme-fresh .ag-rich-select .ag-rich-select-value {\n height: 25px;\n line-height: 25px;\n padding-left: 12px; }\n .ag-theme-fresh .ag-rich-select .ag-virtual-list-item {\n cursor: default;\n height: 25px;\n line-height: 25px; }\n .ag-theme-fresh .ag-rich-select .ag-virtual-list-item:hover {\n background-color: \"\"; }\n .ag-theme-fresh .ag-rich-select .ag-rich-select-row {\n padding-left: 12px; }\n .ag-theme-fresh .ag-rich-select .ag-rich-select-row-selected {\n background-color: #bde2e5; }\n .ag-theme-fresh .ag-floating-filter-body {\n float: left;\n height: 100%;\n margin-right: 0;\n width: calc(100% - 20px); }\n .ag-theme-fresh .ag-floating-filter-body input {\n box-sizing: border-box; }\n .ag-theme-fresh .ag-floating-filter-full-body input {\n box-sizing: border-box; }\n .ag-theme-fresh .ag-floating-filter-button {\n float: right;\n line-height: 12px;\n margin-top: 10px; }\n .ag-theme-fresh .ag-floating-filter-button button {\n appearance: none;\n background: transparent;\n border: 0;\n height: 12px;\n padding: 0;\n width: 12px; }\n .ag-theme-fresh .ag-cell-label-container {\n height: 100%; }\n .ag-theme-fresh .ag-header-group-cell-label {\n height: 100%; }\n .ag-theme-fresh .ag-header-group-cell-label span {\n float: left;\n height: 100%; }\n .ag-theme-fresh .ag-header-select-all {\n height: 100%;\n margin-right: 12px; }\n .ag-theme-fresh .ag-header-select-all span {\n height: 100%; }\n .ag-theme-fresh .ag-header-select-all:not(.ag-hidden) + .ag-cell-label-container {\n float: left;\n width: calc(100% - 12px - 12px); }\n .ag-theme-fresh .ag-selection-checkbox span,\n .ag-theme-fresh .ag-group-expanded span,\n .ag-theme-fresh .ag-group-contracted span {\n margin-right: 12px; }\n .ag-theme-fresh .ag-selection-checkbox span {\n position: relative;\n top: 2px; }\n .ag-theme-fresh .ag-group-expanded .ag-icon-contracted:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiA1aDhMNiA5eiIgZmlsbD0iIzMzMyIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-fresh .ag-column-drop-horizontal {\n background-color: #f6f6f6;\n height: 25px;\n line-height: 16px;\n padding-left: 12px; }\n .ag-theme-fresh .ag-column-drop-horizontal.ag-width-half {\n margin-bottom: -3px; }\n .ag-theme-fresh .ag-column-drop-horizontal span {\n float: left;\n height: 100%; }\n .ag-theme-fresh .ag-column-drop-horizontal > div:first-child {\n float: left;\n height: 100%; }\n .ag-theme-fresh .ag-column-drop-horizontal .ag-icon-group,\n .ag-theme-fresh .ag-column-drop-horizontal .ag-icon-pivot {\n margin-right: 12px; }\n .ag-theme-fresh .ag-column-drop-horizontal .ag-right-arrow {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik00LjUgMS41aDJ2OWgtMnoiLz48cGF0aCBkPSJNOS45OTMgNC43VjIuOTkzaC02djZINS43VjQuN2g0LjI5M3oiIGlkPSJiIi8+PC9kZWZzPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoOTAgNS41IDYpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHBhdGggc3Ryb2tlPSIjMzMzIiBkPSJNNSAyaDF2OEg1eiIvPjwvZz48ZyB0cmFuc2Zvcm09InNjYWxlKC0xIDEpIHJvdGF0ZSgtNDUgMCAyMi44NzQpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNiIi8+PHBhdGggc3Ryb2tlPSIjMzMzIiBkPSJNOS40OTMgNC4ydi0uNzA3aC01djVINS4yVjQuMmg0LjI5M3oiLz48L2c+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-fresh .ag-column-drop-horizontal .ag-left-arrow {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01LjUgMS41aDJ2OWgtMnoiLz48cGF0aCBkPSJNNy45OTMgNC43VjIuOTkzaC02djZIMy43VjQuN2g0LjI5M3oiIGlkPSJiIi8+PC9kZWZzPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoOTAgNi41IDYpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHBhdGggc3Ryb2tlPSIjMzMzIiBkPSJNNiAyaDF2OEg2eiIvPjwvZz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtNDUgNC45OTMgNS45OTMpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNiIi8+PHBhdGggc3Ryb2tlPSIjMzMzIiBkPSJNNy40OTMgNC4ydi0uNzA3aC01djVIMy4yVjQuMmg0LjI5M3oiLz48L2c+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-fresh .ag-column-drop-horizontal .ag-left-arrow,\n .ag-theme-fresh .ag-column-drop-horizontal .ag-right-arrow {\n overflow: hidden;\n text-indent: 100%;\n height: 100%;\n margin: 0 4px;\n opacity: 1; }\n .ag-theme-fresh .ag-column-drop-horizontal .ag-column-drop-empty-message {\n height: 100%;\n line-height: 25px;\n opacity: 0.5; }\n .ag-theme-fresh .ag-column-drop-cell {\n background: #ecf0f1;\n border-radius: 16px;\n box-sizing: border-box;\n height: 16px !important;\n margin-top: 4px;\n padding: 0 2px; }\n .ag-theme-fresh .ag-column-drop-cell .ag-column-drop-cell-text {\n height: 100%;\n line-height: 16px;\n margin: 0 4px; }\n .ag-theme-fresh .ag-column-drop-cell .ag-column-drop-cell-button {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOSA4LjE1NEw4LjE1NCA5IDYgNi44NDYgMy44NDYgOSAzIDguMTU0IDUuMTU0IDYgMyAzLjg0NiAzLjg0NiAzIDYgNS4xNTQgOC4xNTQgMyA5IDMuODQ2IDYuODQ2IDZ6IiBmaWxsPSIjMzMzIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n overflow: hidden;\n text-indent: 100%;\n min-width: 16px;\n height: 100%;\n margin: 0 2px;\n opacity: 1; }\n .ag-theme-fresh .ag-column-drop-cell .ag-column-drop-cell-button:hover {\n opacity: 1; }\n .ag-theme-fresh .ag-column-drop-cell .ag-column-drag {\n margin-left: 8px;\n margin-top: 2px;\n width: 12px; }\n .ag-theme-fresh .ag-select-agg-func-popup {\n background: #f6f6f6;\n border-radius: 0;\n box-shadow: none;\n padding: 4px;\n background: white;\n height: 70px;\n padding: 0; }\n .ag-theme-fresh .ag-select-agg-func-popup .ag-virtual-list-item {\n cursor: default;\n line-height: 20px;\n padding-left: 8px; }\n .ag-theme-fresh .ag-select-agg-func-popup .ag-virtual-list-item:hover {\n background-color: #bde2e5; }\n .ag-theme-fresh .ag-set-filter-list,\n .ag-theme-fresh .ag-menu-column-select-wrapper {\n width: auto; }\n .ag-theme-fresh .ag-column-drop-vertical > .ag-column-drop-cell {\n float: left;\n margin-bottom: 4px;\n margin-left: 4px;\n margin-top: 0; }\n .ag-theme-fresh .ag-cell-data-changed {\n background-color: #cec !important; }\n .ag-theme-fresh .ag-cell-data-changed-animation {\n background-color: transparent;\n transition: background-color 1s; }\n .ag-theme-fresh .ag-row-stub {\n background-color: #f0f0f0; }\n .ag-theme-fresh .ag-stub-cell {\n padding-left: 12px;\n padding-top: 4px; }\n .ag-theme-fresh .ag-stub-cell .ag-loading-icon {\n float: left;\n height: 100%; }\n .ag-theme-fresh .ag-stub-cell .ag-loading-text {\n float: left;\n height: 100%;\n margin-left: 4px;\n margin-top: 4px; }\n .ag-theme-fresh .ag-floating-top {\n background-color: #f0f0f0; }\n .ag-theme-fresh .ag-floating-top .ag-row {\n background-color: #f0f0f0; }\n .ag-theme-fresh .ag-floating-bottom {\n background-color: #f0f0f0; }\n .ag-theme-fresh .ag-rtl .ag-numeric-cell {\n text-align: left; }\n .ag-theme-fresh .ag-rtl .ag-header-cell-menu-button {\n float: left; }\n .ag-theme-fresh .ag-rtl .ag-header-cell-label {\n float: right;\n width: calc(100% - 12px); }\n .ag-theme-fresh .ag-rtl .ag-header-cell-label > span {\n float: right; }\n .ag-theme-fresh .ag-rtl .ag-header-cell-label .ag-header-icon {\n margin-top: 2px; }\n .ag-theme-fresh .ag-rtl .ag-numeric-header .ag-header-cell-menu-button {\n float: right; }\n .ag-theme-fresh .ag-rtl .ag-numeric-header .ag-header-cell-label {\n float: left; }\n .ag-theme-fresh .ag-rtl .ag-numeric-header .ag-header-cell-label > span {\n float: left; }\n .ag-theme-fresh .ag-rtl .ag-column-panel .ag-pivot-mode span {\n float: right; }\n .ag-theme-fresh .ag-rtl .ag-column-panel .ag-pivot-mode .ag-pivot-mode-select {\n margin-right: 4px; }\n .ag-theme-fresh .ag-rtl .ag-column-panel .ag-pivot-mode .ag-pivot-mode-select .ag-checkbox-label {\n margin-right: 4px; }\n .ag-theme-fresh .ag-rtl .ag-column-panel .ag-column-drop .ag-icon {\n float: right; }\n .ag-theme-fresh .ag-rtl .ag-column-panel .ag-column-drop .ag-column-drop-title {\n clear: left;\n float: right; }\n .ag-theme-fresh .ag-rtl .ag-column-panel .ag-column-drop .ag-column-drop-empty-message {\n padding-left: 4px;\n padding-right: 16px; }\n .ag-theme-fresh .ag-rtl .ag-filter-checkbox {\n float: right;\n margin-left: 4px; }\n .ag-theme-fresh .ag-rtl .ag-column-select-panel .ag-column-select-column-group span,\n .ag-theme-fresh .ag-rtl .ag-column-select-panel .ag-column-select-column span {\n float: right; }\n .ag-theme-fresh .ag-rtl .ag-column-select-panel .ag-column-select-column-group .ag-column-select-checkbox,\n .ag-theme-fresh .ag-rtl .ag-column-select-panel .ag-column-select-column-group .ag-column-group-icons,\n .ag-theme-fresh .ag-rtl .ag-column-select-panel .ag-column-select-column .ag-column-select-checkbox,\n .ag-theme-fresh .ag-rtl .ag-column-select-panel .ag-column-select-column .ag-column-group-icons {\n margin-left: 4px;\n margin-right: 4px; }\n .ag-theme-fresh .ag-rtl .ag-column-select-panel .ag-column-select-column.ag-toolpanel-add-group-indent {\n margin-left: 0;\n margin-right: 20px; }\n .ag-theme-fresh .ag-rtl .ag-icon-tree-closed {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxyZWN0IHN0cm9rZS1vcGFjaXR5PSIuNSIgc3Ryb2tlPSIjMzMzIiB4PSIxLjUiIHk9IjEuNSIgd2lkdGg9IjkiIGhlaWdodD0iOSIgcng9IjEiLz48cGF0aCBmaWxsPSIjMzMzIiBkPSJNOSA1djJIM1Y1eiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-fresh .ag-rtl .ag-header-group-cell-label {\n height: 100%; }\n .ag-theme-fresh .ag-rtl .ag-header-group-cell-label span {\n float: right;\n height: 100%; }\n .ag-theme-fresh .ag-rtl .ag-header-select-all:not(.ag-hidden) + .ag-cell-label-container {\n float: right; }\n .ag-theme-fresh .ag-rtl .ag-header-select-all {\n margin-left: 12px;\n margin-right: 0; }\n .ag-theme-fresh .ag-rtl .ag-selection-checkbox span,\n .ag-theme-fresh .ag-rtl .ag-group-expanded span,\n .ag-theme-fresh .ag-rtl .ag-group-contracted span {\n margin-left: 12px;\n margin-right: 0; }\n .ag-theme-fresh .ag-rtl .ag-column-drop-horizontal {\n padding-right: 12px; }\n .ag-theme-fresh .ag-rtl .ag-column-drop-horizontal span {\n float: right; }\n .ag-theme-fresh .ag-rtl .ag-column-drop-horizontal > div:first-child {\n float: right; }\n .ag-theme-fresh .ag-rtl .ag-column-drop-horizontal .ag-icon-group,\n .ag-theme-fresh .ag-rtl .ag-column-drop-horizontal .ag-icon-pivot {\n margin-left: 12px;\n margin-right: 0; }\n .ag-theme-fresh .ag-rtl .ag-column-drop-horizontal .ag-right-arrow {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik00LjUgMS41aDJ2OWgtMnoiLz48cGF0aCBkPSJNOS45OTMgNC43VjIuOTkzaC02djZINS43VjQuN2g0LjI5M3oiIGlkPSJiIi8+PC9kZWZzPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoOTAgNS41IDYpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHBhdGggc3Ryb2tlPSIjMzMzIiBkPSJNNSAyaDF2OEg1eiIvPjwvZz48ZyB0cmFuc2Zvcm09InNjYWxlKC0xIDEpIHJvdGF0ZSgtNDUgMCAyMi44NzQpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNiIi8+PHBhdGggc3Ryb2tlPSIjMzMzIiBkPSJNOS40OTMgNC4ydi0uNzA3aC01djVINS4yVjQuMmg0LjI5M3oiLz48L2c+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n height: 100%; }\n .ag-theme-fresh .ag-rtl .ag-column-drop-horizontal .ag-left-arrow {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik01LjUgMS41aDJ2OWgtMnoiLz48cGF0aCBkPSJNNy45OTMgNC43VjIuOTkzaC02djZIMy43VjQuN2g0LjI5M3oiIGlkPSJiIi8+PC9kZWZzPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGcgdHJhbnNmb3JtPSJyb3RhdGUoOTAgNi41IDYpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNhIi8+PHBhdGggc3Ryb2tlPSIjMzMzIiBkPSJNNiAyaDF2OEg2eiIvPjwvZz48ZyB0cmFuc2Zvcm09InJvdGF0ZSgtNDUgNC45OTMgNS45OTMpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNiIi8+PHBhdGggc3Ryb2tlPSIjMzMzIiBkPSJNNy40OTMgNC4ydi0uNzA3aC01djVIMy4yVjQuMmg0LjI5M3oiLz48L2c+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px;\n height: 100%; }\n .ag-theme-fresh .ag-rtl .ag-floating-filter-body {\n float: right;\n margin-left: 0; }\n .ag-theme-fresh .ag-rtl .ag-floating-filter-button {\n float: left; }\n .ag-theme-fresh .ag-rtl .ag-header .ag-header-cell-resize {\n left: -4px;\n right: auto; }\n .ag-theme-fresh .ag-rtl .ag-header .ag-header-cell-resize::after {\n border-left: 1px solid darkgrey;\n border-right: 0; }\n .ag-theme-fresh .ag-rtl .ag-column-select-header .ag-filter-body {\n margin-left: 4px;\n margin-right: 0; }\n .ag-theme-fresh .ag-rtl .ag-column-drag {\n background-position-x: right; }\n .ag-theme-fresh .ag-status-bar {\n background: white;\n border: 1px solid darkgrey;\n border-top: 0;\n color: rgba(0, 0, 0, 0.5);\n display: flex;\n font: 400 14px \"Helvetica Neue\", sans-serif;\n justify-content: flex-end;\n padding: 8px 16px; }\n .ag-theme-fresh .ag-status-bar .ag-status-bar-item {\n margin-right: 8px; }\n .ag-theme-fresh .ag-status-bar .ag-status-bar-item span:nth-child(1)::after {\n content: \":\"; }\n .ag-theme-fresh .ag-status-bar .ag-status-bar-item span:nth-child(2) {\n color: black; }\n .ag-theme-fresh .ag-details-row {\n box-sizing: border-box;\n padding: 20px; }\n .ag-theme-fresh .ag-overlay-loading-wrapper {\n background-color: rgba(255, 255, 255, 0.5); }\n .ag-theme-fresh .ag-overlay-loading-center {\n background: #f6f6f6;\n border-radius: 0;\n box-shadow: none;\n padding: 4px; }\n .ag-theme-fresh .ag-tool-panel {\n background-color: #f6f6f6;\n border-right: 1px solid darkgrey;\n border-top: 1px solid darkgrey; }\n .ag-theme-fresh .ag-tool-panel .ag-side-buttons {\n border-bottom: 1px solid darkgrey; }\n .ag-theme-fresh .ag-tool-panel .ag-side-buttons button {\n background: transparent;\n border: 0;\n border-right: 1px solid darkgrey;\n color: black;\n height: 20px; }\n .ag-theme-fresh .ag-tool-panel .ag-panel-container {\n border-right: 1px solid darkgrey;\n box-sizing: border-box; }\n .ag-theme-fresh .ag-tool-panel.full-width .ag-panel-container {\n border-right: 0; }\n .ag-theme-fresh .ag-tool-panel .ag-column-drop {\n min-height: 50px; }\n .ag-theme-fresh .ag-rtl .ag-tool-panel .ag-panel-container {\n border-left: 1px solid darkgrey;\n border-right: 0; }\n .ag-theme-fresh .ag-rtl .ag-tool-panel.full-width .ag-panel-container {\n border-left: 0; }\n .ag-theme-fresh .ag-rtl .ag-tool-panel .ag-side-buttons button {\n border-left: 1px solid darkgrey;\n border-right: 0; }\n .ag-theme-fresh .ag-column-name-filter {\n box-sizing: border-box;\n width: 100%; }\n .ag-theme-fresh .sass-variables::after {\n content: '{ \"autoSizePadding\": \"12px\", \"headerHeight\": \"25px\", \"groupPaddingSize\": \"24px\", \"footerPaddingAddition\": \"16px\", \"virtualItemHeight\": \"20px\", \"aggFuncPopupHeight\": \"70px\", \"checkboxIndentWidth\": \"16px\", \"leafNodePadding\": \"12px\", \"rowHeight\": \"25px\", \"gridSize\": \"4px\", \"iconSize\": \"12px\" }';\n display: none; }\n .ag-theme-fresh .ag-tab-header {\n background-color: #e6e6e6; }\n .ag-theme-fresh .ag-faded {\n opacity: 0.3; }\n .ag-theme-fresh .ag-column-drop-horizontal.ag-column-drop {\n border: 1px solid darkgrey;\n border-bottom: 0; }\n .ag-theme-fresh .ag-column-drop-horizontal.ag-column-drop:last-child {\n border-left: 0; }\n .ag-theme-fresh .ag-header {\n background-image: linear-gradient(white, lightgrey);\n border-bottom: 1px solid darkgrey; }\n .ag-theme-fresh .ag-header-cell-resize::after {\n height: 25px;\n margin-top: 0; }\n .ag-theme-fresh .ag-header-cell {\n border-right: 1px solid darkgrey;\n box-sizing: border-box; }\n .ag-theme-fresh .ag-header-group-cell {\n border-right: 1px solid darkgrey; }\n .ag-theme-fresh .ag-header-group-cell-with-group {\n border-bottom: 1px solid darkgrey; }\n .ag-theme-fresh .ag-header-row {\n border-bottom: 0; }\n .ag-theme-fresh .ag-root {\n border: 1px solid darkgrey; }\n .ag-theme-fresh .ag-column-panel {\n border-right: 1px solid darkgrey; }\n .ag-theme-fresh .ag-cell-no-focus {\n border-right: 1px dotted silver; }\n .ag-theme-fresh .ag-row {\n border-bottom-width: 0; }\n .ag-theme-fresh .ag-column-panel .ag-column-drop .ag-column-drop-empty-message {\n line-height: 25px; }\n .ag-theme-fresh .ag-floating-filter-button {\n margin-top: 8px; }\n .ag-theme-fresh .ag-filter .ag-filter-apply-panel {\n border-top: 1px solid darkgrey;\n justify-content: flex-start; }\n .ag-theme-fresh .ag-cell-focus {\n border: 1px solid darkgrey; }\n .ag-theme-fresh .ag-menu .ag-menu-option-active {\n background: #bde2e5; }\n .ag-theme-fresh .ag-menu .ag-menu-option {\n line-height: 24px; }\n .ag-theme-fresh .ag-column-drop-cell {\n background: #ecf0f1;\n background-image: linear-gradient(white, lightgrey);\n border: 1px solid darkgrey;\n border-radius: 0;\n height: 18px !important; }\n .ag-theme-fresh .ag-column-drop-cell .ag-column-drop-cell-button {\n box-sizing: border-box;\n height: calc(100% - 4px);\n margin-bottom: 2px;\n margin-top: 2px; }\n .ag-theme-fresh .ag-column-drop-cell .ag-column-drop-cell-button:hover {\n border: 1px solid darkgrey; }\n .ag-theme-fresh .ag-cell-range-selected-1:not(.ag-cell-focus) {\n background-color: rgba(120, 120, 120, 0.4); }\n .ag-theme-fresh .ag-cell-range-selected-2:not(.ag-cell-focus) {\n background-color: rgba(80, 80, 80, 0.4); }\n .ag-theme-fresh .ag-cell-range-selected-3:not(.ag-cell-focus) {\n background-color: rgba(40, 40, 40, 0.4); }\n .ag-theme-fresh .ag-cell-range-selected-4:not(.ag-cell-focus) {\n background-color: rgba(0, 0, 0, 0.4); }\n .ag-theme-fresh .ag-cell-highlight {\n background-color: rgba(120, 120, 120, 0.4);\n border-bottom: 2px solid darkgreen; }\n .ag-theme-fresh .ag-cell-highlight-animation {\n transition: all 1s; }\n .ag-theme-fresh .ag-group-expanded .ag-icon-contracted:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxyZWN0IHN0cm9rZS1vcGFjaXR5PSIuNSIgc3Ryb2tlPSIjMzMzIiB4PSIxLjUiIHk9IjEuNSIgd2lkdGg9IjkiIGhlaWdodD0iOSIgcng9IjEiLz48cGF0aCBmaWxsPSIjMzMzIiBkPSJNOSA1djJIM1Y1eiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-fresh .ag-rtl .ag-icon-tree-closed {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIiIGhlaWdodD0iMTIiIHZpZXdCb3g9IjAgMCAxMiAxMiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMyA2bDQtNHY4eiIgZmlsbD0iIzMzMyIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 12px 12px;\n height: 12px;\n opacity: 1;\n width: 12px; }\n .ag-theme-fresh .ag-cell-inline-editing {\n height: 25px;\n padding: 0; }\n .ag-theme-fresh .ag-cell-inline-editing input {\n box-sizing: border-box; }\n .ag-theme-fresh .ag-column-panel .ag-column-drop .ag-column-drop-title {\n float: none; }\n .ag-theme-fresh .ag-column-select-panel .ag-column-select-column-group,\n .ag-theme-fresh .ag-column-select-panel .ag-column-select-column {\n height: 20px;\n line-height: 20px; }\n .ag-theme-fresh .ag-filter .ag-filter-header-container {\n height: 24px; }\n .ag-theme-fresh .ag-tab {\n box-sizing: initial; }\n .ag-theme-fresh .ag-filter .ag-filter-value {\n line-height: 16px; }\n .ag-theme-fresh .ag-selection-checkbox span {\n position: relative;\n top: 0; }\n .ag-theme-fresh .ag-rich-select-value {\n border-bottom: 1px solid darkgrey; }\n .ag-theme-fresh .ag-header-cell-moving .ag-header-cell-label {\n opacity: 0.5; }\n .ag-theme-fresh .ag-header-cell-moving {\n background-color: #bebebe; }\n .ag-theme-fresh .ag-ltr .ag-pinned-right-header {\n border-left: 1px solid darkgrey; }\n .ag-theme-fresh .ag-rtl .ag-pinned-left-header {\n border-right: 1px solid darkgrey; }\n .ag-theme-fresh .ag-overlay-loading-wrapper {\n background-color: rgba(255, 255, 255, 0.5); }\n .ag-theme-fresh .ag-overlay-loading-center {\n background-color: #fff;\n border: 1px solid darkgrey;\n border-radius: 10px;\n color: black;\n padding: 10px; }\n .ag-theme-fresh .ag-column-name-filter {\n height: 16px; }\n .ag-theme-fresh .ag-column-drop-cell .ag-column-drag {\n background-position-y: 0 !important; }\n", ""]);
36751
36752// exports
36753
36754
36755/***/ }),
36756/* 169 */
36757/***/ (function(module, exports, __webpack_require__) {
36758
36759// style-loader: Adds some css to the DOM by adding a <style> tag
36760
36761// load the styles
36762var content = __webpack_require__(170);
36763if(typeof content === 'string') content = [[module.i, content, '']];
36764// add the styles to the DOM
36765var update = __webpack_require__(15)(content, {});
36766if(content.locals) module.exports = content.locals;
36767// Hot Module Replacement
36768if(false) {
36769 // When the styles change, update the <style> tags
36770 if(!content.locals) {
36771 module.hot.accept("!!../../node_modules/css-loader/index.js!./ag-theme-material.css", function() {
36772 var newContent = require("!!../../node_modules/css-loader/index.js!./ag-theme-material.css");
36773 if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
36774 update(newContent);
36775 });
36776 }
36777 // When the module is disposed, remove the <style> tags
36778 module.hot.dispose(function() { update(); });
36779}
36780
36781/***/ }),
36782/* 170 */
36783/***/ (function(module, exports, __webpack_require__) {
36784
36785exports = module.exports = __webpack_require__(14)();
36786// imports
36787
36788
36789// module
36790exports.push([module.i, ".ag-theme-material {\n background-color: #fff;\n color: rgba(0, 0, 0, 0.87);\n font: 400 13px \"Roboto\", sans-serif; }\n .ag-theme-material .ag-tab-header .ag-tab.ag-tab-selected {\n border-bottom: 2px solid #3f51b5; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-1 {\n padding-left: 26px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-1 {\n padding-right: 26px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-1 {\n padding-left: 42px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-1 {\n padding-right: 42px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-2 {\n padding-left: 52px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-2 {\n padding-right: 52px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-2 {\n padding-left: 84px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-2 {\n padding-right: 84px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-3 {\n padding-left: 78px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-3 {\n padding-right: 78px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-3 {\n padding-left: 126px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-3 {\n padding-right: 126px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-4 {\n padding-left: 104px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-4 {\n padding-right: 104px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-4 {\n padding-left: 168px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-4 {\n padding-right: 168px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-5 {\n padding-left: 130px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-5 {\n padding-right: 130px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-5 {\n padding-left: 210px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-5 {\n padding-right: 210px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-6 {\n padding-left: 156px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-6 {\n padding-right: 156px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-6 {\n padding-left: 252px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-6 {\n padding-right: 252px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-7 {\n padding-left: 182px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-7 {\n padding-right: 182px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-7 {\n padding-left: 294px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-7 {\n padding-right: 294px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-8 {\n padding-left: 208px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-8 {\n padding-right: 208px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-8 {\n padding-left: 336px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-8 {\n padding-right: 336px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-9 {\n padding-left: 234px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-9 {\n padding-right: 234px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-9 {\n padding-left: 378px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-9 {\n padding-right: 378px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-10 {\n padding-left: 260px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-10 {\n padding-right: 260px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-10 {\n padding-left: 420px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-10 {\n padding-right: 420px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-11 {\n padding-left: 286px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-11 {\n padding-right: 286px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-11 {\n padding-left: 462px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-11 {\n padding-right: 462px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-12 {\n padding-left: 312px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-12 {\n padding-right: 312px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-12 {\n padding-left: 504px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-12 {\n padding-right: 504px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-13 {\n padding-left: 338px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-13 {\n padding-right: 338px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-13 {\n padding-left: 546px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-13 {\n padding-right: 546px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-14 {\n padding-left: 364px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-14 {\n padding-right: 364px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-14 {\n padding-left: 588px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-14 {\n padding-right: 588px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-15 {\n padding-left: 390px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-15 {\n padding-right: 390px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-15 {\n padding-left: 630px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-15 {\n padding-right: 630px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-16 {\n padding-left: 416px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-16 {\n padding-right: 416px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-16 {\n padding-left: 672px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-16 {\n padding-right: 672px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-17 {\n padding-left: 442px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-17 {\n padding-right: 442px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-17 {\n padding-left: 714px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-17 {\n padding-right: 714px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-18 {\n padding-left: 468px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-18 {\n padding-right: 468px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-18 {\n padding-left: 756px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-18 {\n padding-right: 756px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-19 {\n padding-left: 494px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-19 {\n padding-right: 494px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-19 {\n padding-left: 798px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-19 {\n padding-right: 798px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-20 {\n padding-left: 520px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-20 {\n padding-right: 520px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-20 {\n padding-left: 840px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-20 {\n padding-right: 840px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-21 {\n padding-left: 546px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-21 {\n padding-right: 546px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-21 {\n padding-left: 882px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-21 {\n padding-right: 882px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-22 {\n padding-left: 572px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-22 {\n padding-right: 572px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-22 {\n padding-left: 924px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-22 {\n padding-right: 924px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-23 {\n padding-left: 598px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-23 {\n padding-right: 598px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-23 {\n padding-left: 966px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-23 {\n padding-right: 966px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-24 {\n padding-left: 624px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-24 {\n padding-right: 624px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-24 {\n padding-left: 1008px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-24 {\n padding-right: 1008px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-25 {\n padding-left: 650px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-25 {\n padding-right: 650px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-25 {\n padding-left: 1050px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-25 {\n padding-right: 1050px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-26 {\n padding-left: 676px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-26 {\n padding-right: 676px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-26 {\n padding-left: 1092px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-26 {\n padding-right: 1092px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-27 {\n padding-left: 702px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-27 {\n padding-right: 702px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-27 {\n padding-left: 1134px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-27 {\n padding-right: 1134px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-28 {\n padding-left: 728px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-28 {\n padding-right: 728px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-28 {\n padding-left: 1176px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-28 {\n padding-right: 1176px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-29 {\n padding-left: 754px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-29 {\n padding-right: 754px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-29 {\n padding-left: 1218px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-29 {\n padding-right: 1218px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-30 {\n padding-left: 780px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-30 {\n padding-right: 780px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-30 {\n padding-left: 1260px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-30 {\n padding-right: 1260px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-31 {\n padding-left: 806px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-31 {\n padding-right: 806px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-31 {\n padding-left: 1302px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-31 {\n padding-right: 1302px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-32 {\n padding-left: 832px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-32 {\n padding-right: 832px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-32 {\n padding-left: 1344px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-32 {\n padding-right: 1344px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-33 {\n padding-left: 858px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-33 {\n padding-right: 858px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-33 {\n padding-left: 1386px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-33 {\n padding-right: 1386px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-34 {\n padding-left: 884px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-34 {\n padding-right: 884px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-34 {\n padding-left: 1428px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-34 {\n padding-right: 1428px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-35 {\n padding-left: 910px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-35 {\n padding-right: 910px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-35 {\n padding-left: 1470px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-35 {\n padding-right: 1470px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-36 {\n padding-left: 936px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-36 {\n padding-right: 936px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-36 {\n padding-left: 1512px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-36 {\n padding-right: 1512px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-37 {\n padding-left: 962px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-37 {\n padding-right: 962px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-37 {\n padding-left: 1554px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-37 {\n padding-right: 1554px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-38 {\n padding-left: 988px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-38 {\n padding-right: 988px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-38 {\n padding-left: 1596px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-38 {\n padding-right: 1596px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-39 {\n padding-left: 1014px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-39 {\n padding-right: 1014px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-39 {\n padding-left: 1638px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-39 {\n padding-right: 1638px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-40 {\n padding-left: 1040px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-40 {\n padding-right: 1040px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-40 {\n padding-left: 1680px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-40 {\n padding-right: 1680px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-41 {\n padding-left: 1066px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-41 {\n padding-right: 1066px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-41 {\n padding-left: 1722px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-41 {\n padding-right: 1722px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-42 {\n padding-left: 1092px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-42 {\n padding-right: 1092px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-42 {\n padding-left: 1764px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-42 {\n padding-right: 1764px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-43 {\n padding-left: 1118px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-43 {\n padding-right: 1118px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-43 {\n padding-left: 1806px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-43 {\n padding-right: 1806px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-44 {\n padding-left: 1144px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-44 {\n padding-right: 1144px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-44 {\n padding-left: 1848px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-44 {\n padding-right: 1848px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-45 {\n padding-left: 1170px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-45 {\n padding-right: 1170px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-45 {\n padding-left: 1890px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-45 {\n padding-right: 1890px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-46 {\n padding-left: 1196px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-46 {\n padding-right: 1196px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-46 {\n padding-left: 1932px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-46 {\n padding-right: 1932px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-47 {\n padding-left: 1222px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-47 {\n padding-right: 1222px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-47 {\n padding-left: 1974px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-47 {\n padding-right: 1974px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-48 {\n padding-left: 1248px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-48 {\n padding-right: 1248px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-48 {\n padding-left: 2016px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-48 {\n padding-right: 2016px; }\n .ag-theme-material .ag-ltr .ag-toolpanel-indent-49 {\n padding-left: 1274px; }\n .ag-theme-material .ag-rtl .ag-toolpanel-indent-49 {\n padding-right: 1274px; }\n .ag-theme-material .ag-ltr .ag-row-group-indent-49 {\n padding-left: 2058px; }\n .ag-theme-material .ag-rtl .ag-row-group-indent-49 {\n padding-right: 2058px; }\n .ag-theme-material .ag-ltr .ag-row-group-leaf-indent {\n margin-left: 42px; }\n .ag-theme-material .ag-rtl .ag-row-group-leaf-indent {\n margin-right: 42px; }\n .ag-theme-material .ag-rtl .ag-cell-first-right-pinned {\n border-left: 1px solid #e0e0e0; }\n .ag-theme-material .ag-ltr .ag-cell-first-right-pinned {\n border-left: 1px solid #e0e0e0; }\n .ag-theme-material .ag-rtl .ag-cell-last-left-pinned {\n border-right: 1px solid #e0e0e0; }\n .ag-theme-material .ag-ltr .ag-cell-last-left-pinned {\n border-right: 1px solid #e0e0e0; }\n .ag-theme-material .ag-value-change-delta {\n padding-right: 2px; }\n .ag-theme-material .ag-value-change-delta-up {\n color: #43a047; }\n .ag-theme-material .ag-value-change-delta-down {\n color: #e53935; }\n .ag-theme-material .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 .ag-theme-material .ag-value-change-value-highlight {\n background-color: #00acc1;\n transition: background-color 0.1s; }\n .ag-theme-material .ag-header {\n color: rgba(0, 0, 0, 0.54);\n font: 700 12px \"Roboto\", sans-serif; }\n .ag-theme-material .ag-header-row {\n border-bottom: 1px solid #e0e0e0;\n box-sizing: border-box; }\n .ag-theme-material .ag-row {\n border-bottom: 1px solid #e0e0e0;\n box-sizing: border-box; }\n .ag-theme-material .ag-row-hover {\n background-color: #eee; }\n .ag-theme-material .ag-numeric-cell {\n text-align: right; }\n .ag-theme-material .ag-header-cell-label {\n display: flex;\n float: left;\n height: 100%;\n width: calc(100% - 18px); }\n .ag-theme-material .ag-header-cell-label span {\n height: 100%; }\n .ag-theme-material .ag-header-cell-label > span {\n float: left; }\n .ag-theme-material .ag-header-cell-label .ag-header-icon {\n background-position-y: 20px;\n background-size: 14px 14px;\n height: 100%;\n margin: 0;\n margin-left: 8px;\n opacity: 0.87; }\n .ag-theme-material .ag-header-cell-label .ag-header-cell-text {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap; }\n .ag-theme-material .ag-numeric-header .ag-header-cell-label {\n flex-direction: row-reverse;\n float: right; }\n .ag-theme-material .ag-numeric-header .ag-header-cell-label > span {\n float: right; }\n .ag-theme-material .ag-numeric-header .ag-header-cell-menu-button {\n float: left; }\n .ag-theme-material .ag-header-group-text {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap; }\n .ag-theme-material .ag-header-cell,\n .ag-theme-material .ag-header-group-cell {\n line-height: 56px;\n padding-left: 24px;\n padding-right: 24px; }\n .ag-theme-material .ag-cell {\n line-height: 46px;\n padding-left: 24px;\n padding-right: 24px;\n border: 1px solid transparent;\n padding-left: 23px;\n padding-right: 23px; }\n .ag-theme-material .ag-row-drag {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMyA2aDEydjJIM3ptMCA0aDEydjJIM3oiIGZpbGw9IiMzMzMiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n background-position-x: left;\n background-position-y: 6px;\n float: left;\n height: 100%;\n width: 42px; }\n .ag-theme-material .ag-column-drag {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMyA2aDEydjJIM3ptMCA0aDEydjJIM3oiIGZpbGw9IiMzMzMiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n background-position-x: left;\n background-position-y: 8px !important;\n height: 100%;\n min-width: 26px; }\n .ag-theme-material .ag-row-dragging {\n opacity: 0.5;\n z-index: 10000; }\n .ag-theme-material .ag-ltr .ag-cell-focus {\n border: 1px solid #3f51b5;\n outline: initial; }\n .ag-theme-material .ag-rtl .ag-cell-focus {\n border: 1px solid #3f51b5;\n outline: initial; }\n .ag-theme-material .ag-header-cell-resize {\n position: absolute;\n right: -8px;\n width: 16px;\n z-index: 4; }\n .ag-theme-material .ag-header-cell-resize::after {\n border-right: 1px solid #e0e0e0;\n box-sizing: content-box;\n content: \"resize\";\n display: block;\n height: 24px;\n margin-top: 16px;\n overflow: hidden;\n text-indent: 8px;\n width: 8px; }\n .ag-theme-material .ag-icon-aggregation {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTMgMTN2MWExIDEgMCAwIDEtMSAxSDVhMSAxIDAgMCAxLTEtMXYtMWwzLTQtMy00VjRhMSAxIDAgMCAxIDEtMWg3YTEgMSAwIDAgMSAxIDF2MUg2LjVsMi41NSAzLjRhMSAxIDAgMCAxIDAgMS4yTDYuNSAxM0gxM3oiIGZpbGw9IiMzMzMiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-arrows {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNy41IDYuNWgzdi0yaDJMOSAxIDUuNSA0LjVoMnYyem0tMSAxaC0ydi0yTDEgOWwzLjUgMy41di0yaDJ2LTN6TTE3IDlsLTMuNS0zLjV2MmgtMnYzaDJ2MkwxNyA5em0tNi41IDIuNWgtM3YyaC0yTDkgMTdsMy41LTMuNWgtMnYtMnoiIGZpbGw9IiMzMzMiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-asc {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTAgMTVWNmw0IDQgMS0xLTYtNi02IDYgMSAxIDQtNHY5eiIgZmlsbD0iIzMzMyIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-checkbox-checked-readonly {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTYgMEgyYTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgxNGEyIDIgMCAwIDAgMi0yVjJhMiAyIDAgMCAwLTItMnpNNyAxNEwyIDlsMS40MS0xLjQxTDcgMTEuMTdsNy41OS03LjU5TDE2IDVsLTkgOXoiIGZpbGw9IiMzMzMiIG9wYWNpdHk9Ii41Ii8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-checkbox-checked {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTYgMEgyYTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgxNGEyIDIgMCAwIDAgMi0yVjJhMiAyIDAgMCAwLTItMnpNNyAxNEwyIDlsMS40MS0xLjQxTDcgMTEuMTdsNy41OS03LjU5TDE2IDVsLTkgOXoiIGZpbGw9IiMzMzMiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-checkbox-indeterminate-readonly {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTYgMEgyQy45IDAgMCAuOSAwIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYyYzAtMS4xLS45LTItMi0yem0tMiAxMEg0VjhoMTB2MnoiIGZpbGw9IiMzMzMiIGZpbGwtb3BhY2l0eT0iLjUiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-checkbox-indeterminate {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTYgMEgyQy45IDAgMCAuOSAwIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYyYzAtMS4xLS45LTItMi0yem0tMiAxMEg0VjhoMTB2MnoiIGZpbGw9IiMzMzMiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-checkbox-unchecked-readonly {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTYgMnYxNEgyVjJoMTR6bTAtMkgyQy45IDAgMCAuOSAwIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYyYzAtMS4xLS45LTItMi0yeiIgZmlsbD0iIzMzMyIgZmlsbC1vcGFjaXR5PSIuNSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-checkbox-unchecked {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTYgMnYxNEgyVjJoMTR6bTAtMkgyQy45IDAgMCAuOSAwIDJ2MTRjMCAxLjEuOSAyIDIgMmgxNGMxLjEgMCAyLS45IDItMlYyYzAtMS4xLS45LTItMi0yeiIgZmlsbD0iIzMzMyIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-column {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMiAyaDR2Mkgyem0wIDRoNHYxMEgyeiIgZmlsbD0iIzMzMyIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-columns {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMyA0aDN2Mkgzem01IDBoM3YySDh6bTUgMGgzdjJoLTN6TTMgOGgzdjJIM3ptNSAwaDN2Mkg4em01IDBoM3YyaC0zek0zIDEyaDN2Mkgzem01IDBoM3YySDh6bTUgMGgzdjJoLTN6IiBmaWxsPSIjMzMzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-contracted {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTEuNSAxMi41TDggOWwzLjUtMy41LTEtMUw2IDlsNC41IDQuNXoiIGZpbGw9IiMzMzMiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-copy {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjMzMzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0xMSAySDRhMSAxIDAgMCAwLTEgMXY5aDFWM2g3VjJ6IiBmaWxsLXJ1bGU9Im5vbnplcm8iLz48cGF0aCBkPSJNNiA0aDZhMSAxIDAgMCAxIDEgMXY5YTEgMSAwIDAgMS0xIDFINmExIDEgMCAwIDEtMS0xVjVhMSAxIDAgMCAxIDEtMXptMCAxdjloNlY1SDZ6Ii8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-cut {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNy4zNDggNS45NDhjLjE2MS0uMzUuMjUyLS43MzUuMjUyLTEuMTQ4YTIuOCAyLjggMCAxIDAtNS42IDAgMi44IDIuOCAwIDAgMCAyLjggMi44Yy40MTMgMCAuNzk4LS4wOTEgMS4xNDgtLjI1Mkw3LjYgOWwtMS42NTIgMS42NTJBMi43MjggMi43MjggMCAwIDAgNC44IDEwLjRhMi44IDIuOCAwIDEgMCAwIDUuNiAyLjggMi44IDAgMCAwIDIuOC0yLjhjMC0uNDEzLS4wOTEtLjc5OC0uMjUyLTEuMTQ4TDkgMTAuNGw0LjkgNC45SDE2di0uN0w3LjM0OCA1Ljk0OHpNNC44IDYuMmExLjQgMS40IDAgMSAxIDAtMi44IDEuNCAxLjQgMCAwIDEgMCAyLjh6bTAgOC40YTEuNCAxLjQgMCAxIDEgMC0yLjggMS40IDEuNCAwIDAgMSAwIDIuOHpNOSA5LjM1QS4zNDcuMzQ3IDAgMCAxIDguNjUgOWMwLS4xOTYuMTU0LS4zNS4zNS0uMzUuMTk2IDAgLjM1LjE1NC4zNS4zNSAwIC4xOTYtLjE1NC4zNS0uMzUuMzV6bTQuOS02LjY1TDkuNyA2LjlsMS40IDEuNEwxNiAzLjR2LS43aC0yLjF6IiBmaWxsPSIjMzMzIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-desc {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOCAzdjkuMTNMNCA4IDMgOWw2IDYgNi02LTEtMS00IDQuMTNWM3oiIGZpbGw9IiMzMzMiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-expanded {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNiAxMi41TDkuNSA5IDYgNS41bDEtMUwxMS41IDkgNyAxMy41eiIgZmlsbD0iIzMzMyIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-eye-slash {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjMzMzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0xMi40NDkgMTIuNDVsLTEuMzg4LTEuMzg3YTIuOTE4IDIuOTE4IDAgMCAwLTQuMTI0LTQuMTI0TDUuNTUgNS41NUE2Ljg1IDYuODUgMCAwIDEgOSA0LjYyNSA2Ljg5OSA2Ljg5OSAwIDAgMSAxNS40MTcgOWE2LjkzNSA2LjkzNSAwIDAgMS0yLjk2OCAzLjQ1em0tLjk1NS40NkE2Ljg5OSA2Ljg5OSAwIDAgMSAyLjU4NCA5IDYuOTMzIDYuOTMzIDAgMCAxIDQuNzEgNi4xMjVMNi4zNTUgNy43N2EyLjkxOCAyLjkxOCAwIDAgMCAzLjg3NSAzLjg3NWwxLjI2NCAxLjI2NHoiIGZpbGwtcnVsZT0ibm9uemVybyIvPjxwYXRoIGQ9Ik0xMC4yNDIgMTAuMjM1TDcuNzY1IDcuNzU4QTEuNzQ0IDEuNzQ0IDAgMCAxIDkgNy4yNWMuOTY4IDAgMS43NS43ODIgMS43NSAxLjc1IDAgLjQ4Mi0uMTk0LjkxOC0uNTA4IDEuMjM1em0tLjkyNy40ODdhMS43NDggMS43NDggMCAwIDEtMi4wMzctMi4wMzdsMi4wMzcgMi4wMzd6Ii8+PHBhdGggZD0iTTMuMDcgOC40ODdoMTIuNDE3djFIMy4wN3oiLz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-eye {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOSA0LjYyNUE2Ljg5OSA2Ljg5OSAwIDAgMCAyLjU4MyA5IDYuODk5IDYuODk5IDAgMCAwIDkgMTMuMzc1IDYuODk5IDYuODk5IDAgMCAwIDE1LjQxNyA5IDYuODk5IDYuODk5IDAgMCAwIDkgNC42MjV6bTAgNy4yOTJhMi45MTggMi45MTggMCAwIDEgMC01LjgzNCAyLjkxOCAyLjkxOCAwIDAgMSAwIDUuODM0ek05IDcuMjVjLS45NjggMC0xLjc1Ljc4Mi0xLjc1IDEuNzVzLjc4MiAxLjc1IDEuNzUgMS43NSAxLjc1LS43ODIgMS43NS0xLjc1UzkuOTY4IDcuMjUgOSA3LjI1eiIgZmlsbD0iIzMzMyIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-filter {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjMzMzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik00IDEwaDEwVjhINHpNMiA0djJoMTRWNHoiLz48cGF0aCBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik03IDE0aDR2LTJIN3oiLz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-group {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjMzMzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0xNCAxNEg3di0yaDlhMiAyIDAgMCAxLTIgMnptLTUtMnYyaDJ2LTJIOXoiIGZpbGwtcnVsZT0ibm9uemVybyIvPjxwYXRoIGQ9Ik0xNiA2YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAyaDEzek03IDR2Mkg1VjRoMnptOSA2SDdWOGg5djJ6TTkgOHYyaDJWOEg5eiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-indeterminate {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOSA0LjYyNUE2Ljg5OSA2Ljg5OSAwIDAgMCAyLjU4MyA5IDYuODk5IDYuODk5IDAgMCAwIDkgMTMuMzc1IDYuODk5IDYuODk5IDAgMCAwIDE1LjQxNyA5IDYuODk5IDYuODk5IDAgMCAwIDkgNC42MjV6bTAgNy4yOTJhMi45MTggMi45MTggMCAwIDEgMC01LjgzNCAyLjkxOCAyLjkxOCAwIDAgMSAwIDUuODM0eiIgZmlsbD0iIzMzMyIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-left {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTUgOEg2bDQtNC0xLTEtNiA2IDYgNiAxLTEtNC00aDl6IiBmaWxsPSIjMzMzIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-loading {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHBhdGggaWQ9ImEiIGQ9Ik00IDBoMnYzSDR6Ii8+PHBhdGggaWQ9ImIiIGQ9Ik00IDdoMnYzSDR6Ii8+PHBhdGggaWQ9ImMiIGQ9Ik0wIDRoM3YySDB6Ii8+PHBhdGggaWQ9ImQiIGQ9Ik03IDRoM3YySDd6Ii8+PHBhdGggaWQ9ImUiIGQ9Ik00IDBoMnYzSDR6Ii8+PHBhdGggaWQ9ImYiIGQ9Ik00IDdoMnYzSDR6Ii8+PHBhdGggaWQ9ImciIGQ9Ik0wIDRoM3YySDB6Ii8+PHBhdGggaWQ9ImgiIGQ9Ik03IDRoM3YySDd6Ii8+PC9kZWZzPjxnIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMyA0KSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjYSIvPjxwYXRoIHN0cm9rZT0iIzk3OTc5NyIgZD0iTTQuNS41aDF2MmgtMXoiLz48L2c+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMyA0KSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjYiIvPjxwYXRoIHN0cm9rZT0iIzk3OTc5NyIgZD0iTTQuNSA3LjVoMXYyaC0xeiIvPjwvZz48ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzIDQpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNjIi8+PHBhdGggc3Ryb2tlPSIjOTc5Nzk3IiBkPSJNLjUgNC41aDJ2MWgtMnoiLz48L2c+PGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMyA0KSI+PHVzZSBmaWxsPSIjRDhEOEQ4IiB4bGluazpocmVmPSIjZCIvPjxwYXRoIHN0cm9rZT0iIzk3OTc5NyIgZD0iTTcuNSA0LjVoMnYxaC0yeiIvPjwvZz48ZyBvcGFjaXR5PSIuNzE0Ij48ZyB0cmFuc2Zvcm09InJvdGF0ZSg0NSAxLjY3MiAxMC42MjEpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNlIi8+PHBhdGggc3Ryb2tlPSIjOTc5Nzk3IiBkPSJNNC41LjVoMXYyaC0xeiIvPjwvZz48ZyB0cmFuc2Zvcm09InJvdGF0ZSg0NSAxLjY3MiAxMC42MjEpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNmIi8+PHBhdGggc3Ryb2tlPSIjOTc5Nzk3IiBkPSJNNC41IDcuNWgxdjJoLTF6Ii8+PC9nPjxnIHRyYW5zZm9ybT0icm90YXRlKDQ1IDEuNjcyIDEwLjYyMSkiPjx1c2UgZmlsbD0iI0Q4RDhEOCIgeGxpbms6aHJlZj0iI2ciLz48cGF0aCBzdHJva2U9IiM5Nzk3OTciIGQ9Ik0uNSA0LjVoMnYxaC0yeiIvPjwvZz48ZyB0cmFuc2Zvcm09InJvdGF0ZSg0NSAxLjY3MiAxMC42MjEpIj48dXNlIGZpbGw9IiNEOEQ4RDgiIHhsaW5rOmhyZWY9IiNoIi8+PHBhdGggc3Ryb2tlPSIjOTc5Nzk3IiBkPSJNNy41IDQuNWgydjFoLTJ6Ii8+PC9nPjwvZz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-menu {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjMzMzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTIgMTRoMTR2LTJIMnoiLz48cGF0aCBkPSJNMiAxMGgxNFY4SDJ6bTAtNnYyaDE0VjR6Ii8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-minus {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTQgMTBINFY4aDEweiIgZmlsbD0iIzMzMyIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-none {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjMzMzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTIgMTRoNXYtMkgyeiIvPjxwYXRoIGQ9Ik0yIDR2MmgxNFY0em0wIDZoOVY4SDJ6Ii8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-not-allowed {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOSAxLjVDNC44NiAxLjUgMS41IDQuODYgMS41IDljMCA0LjE0IDMuMzYgNy41IDcuNSA3LjUgNC4xNCAwIDcuNS0zLjM2IDcuNS03LjUgMC00LjE0LTMuMzYtNy41LTcuNS03LjV6TTMgOWMwLTMuMzE1IDIuNjg1LTYgNi02YTUuOTMgNS45MyAwIDAgMSAzLjY3NSAxLjI2OGwtOC40MDggOC40MDdBNS45MjcgNS45MjcgMCAwIDEgMyA5em02IDZhNS45MjcgNS45MjcgMCAwIDEtMy42NzUtMS4yNjhsOC40MDctOC40MDdBNS45MjcgNS45MjcgMCAwIDEgMTUgOWMwIDMuMzE1LTIuNjg1IDYtNiA2eiIgZmlsbD0iIzMzMyIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-paste {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTEgM2MwLS41LS41LTEuNS0yLTEuNVM3IDIuNSA3IDNINGExIDEgMCAwIDAtMSAxdjExYTEgMSAwIDAgMCAxIDFoMTBhMSAxIDAgMCAwIDEtMVY0YTEgMSAwIDAgMC0xLTFoLTN6bS0yIC4yNzNjLjM2NyAwIC42NjcuMjg2LjY2Ny42MzYgMCAuMzUtLjMuNjM2LS42NjcuNjM2LS4zNjcgMC0uNjY3LS4yODYtLjY2Ny0uNjM2IDAtLjM1LjMtLjYzNi42NjctLjYzNnpNMTQgMTVINFY0aDJ2Mmg2VjRoMnYxMXoiIGZpbGw9IiMzMzMiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-pin {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGZpbGw9IiMzMzMiIGQ9Ik05LjY1NyAybDUuNDEgNS40MS0uNTQuNTQyLS41NDItLjU0MS00LjMyOCAyLjE2NCAxLjA4MiAxLjA4Mi0xLjU0MSAxLjU0TDQuODY5IDcuODdsMS41NDItMS41NCAxLjA4MiAxLjA4IDIuMTY0LTQuMzI5LS41NDEtLjU0eiIvPjxwYXRoIGQ9Ik02IDExbC0yLjUgMi41IiBzdHJva2U9IiMzMzMiLz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-pivot {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIHN0cm9rZT0iIzMzMyIgZD0iTTExLjUgMTAuNUwxMyA5bDEuNSAxLjVtLTUgMUw4IDEzbDEuNSAxLjUiLz48cGF0aCBkPSJNMCAwaDE4djE4SDB6Ii8+PHBhdGggZD0iTTMgMWgxMmEyIDIgMCAwIDEgMiAydjEyYTIgMiAwIDAgMS0yIDJIM2EyIDIgMCAwIDEtMi0yVjNhMiAyIDAgMCAxIDItMnptMyAxNHYtM0gzdjNoM3ptMC00VjhIM3YzaDN6bTAtNVYzSDN2M2gzem01IDBWM0g3djNoNHptNCA5VjhIN3Y3aDh6bTAtOVYzaC0zdjNoM3oiIGZpbGw9IiMzMzMiIGZpbGwtcnVsZT0ibm9uemVybyIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-plus {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTQgMTBoLTR2NEg4di00SDRWOGg0VjRoMnY0aDR6IiBmaWxsPSIjMzMzIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-right {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOSAzTDggNGw0IDRIM3YyaDlsLTQgNCAxIDEgNi02eiIgZmlsbD0iIzMzMyIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-small-left {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTAgMTNMNiA5bDQtNHoiIGZpbGw9IiMzMzMiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-small-right {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOCA1bDQgNC00IDR6IiBmaWxsPSIjMzMzIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-small-up {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNSAxMGw0LTQgNCA0eiIgZmlsbD0iIzMzMyIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-small-down {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNSA4bDQgNCA0LTR6IiBmaWxsPSIjMzMzIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-tick {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNi41IDEyLjVMMyA5bC0xIDEgNC41IDQuNSA5LTktMS0xeiIgZmlsbD0iIzMzMyIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-cross {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTQgNWwtMS0xLTQgNC00LTQtMSAxIDQgNC00IDQgMSAxIDQtNCA0IDQgMS0xLTQtNHoiIGZpbGw9IiMzMzMiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-tree-open {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTIuNSA2LjVMOSAxMCA1LjUgNi41bC0xIDFMOSAxMmw0LjUtNC41eiIgZmlsbD0iIzMzMyIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-tree-closed {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNiAxMi41TDkuNSA5IDYgNS41bDEtMUwxMS41IDkgNyAxMy41eiIgZmlsbD0iIzMzMyIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-icon-tree-indeterminate {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMyA4aDEydjEuNUgzeiIgZmlsbD0iIzMzMyIgZmlsbC1ydWxlPSJldmVub2RkIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n display: inline-block; }\n .ag-theme-material .ag-header-cell-menu-button .ag-icon-menu {\n display: block;\n height: 56px; }\n .ag-theme-material .ag-icon-checkbox-checked:empty {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTYgMEgyYTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgxNGEyIDIgMCAwIDAgMi0yVjJhMiAyIDAgMCAwLTItMnpNNyAxNEwyIDlsMS40MS0xLjQxTDcgMTEuMTdsNy41OS03LjU5TDE2IDVsLTkgOXoiIGZpbGw9IiNGRjQwODEiLz48L3N2Zz4=); }\n .ag-theme-material .ag-menu {\n background: #fff;\n border-radius: 2px;\n box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n padding: 8px;\n padding: 0;\n z-index: 5; }\n .ag-theme-material .ag-menu .ag-menu-list {\n cursor: default;\n margin-bottom: 8px;\n margin-top: 8px;\n width: 100%; }\n .ag-theme-material .ag-menu .ag-menu-option {\n line-height: 32px;\n padding-left: 16px;\n padding-right: 16px; }\n .ag-theme-material .ag-menu .ag-menu-option > span {\n display: table-cell;\n vertical-align: middle; }\n .ag-theme-material .ag-menu .ag-menu-option-active {\n background: #eee; }\n .ag-theme-material .ag-menu .ag-menu-option-disabled {\n opacity: 0.5; }\n .ag-theme-material .ag-menu .ag-menu-option-icon {\n padding-left: 8px;\n padding-right: 8px; }\n .ag-theme-material .ag-menu .ag-menu-option-icon span {\n height: 18px;\n line-height: 0;\n margin-top: 8px; }\n .ag-theme-material .ag-menu .ag-menu-option-shortcut {\n padding-left: 16px; }\n .ag-theme-material .ag-menu .ag-menu-separator {\n margin-left: -8px; }\n .ag-theme-material .ag-menu .ag-menu-separator > span {\n background-image: url(\"data:image/svg+xml;utf8,<svg width='1' height='16px' viewBox='0 0 1 16px' xmlns='http://www.w3.org/2000/svg'> <line x1='0' y1='8px' x2='1' y2='8px' stroke-width='1' stroke='#e0e0e0'/> </svg>\");\n height: 16px; }\n .ag-theme-material .ag-menu .ag-menu-option-popup-pointer {\n width: 34px; }\n .ag-theme-material.ag-dnd-ghost {\n background: #fff;\n border-radius: 2px;\n box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n padding: 8px;\n border: 1px solid #e0e0e0;\n color: rgba(0, 0, 0, 0.54);\n font: 700 12px \"Roboto\", sans-serif;\n height: 56px !important;\n line-height: 56px;\n margin: 0;\n padding: 0 16px;\n transform: translateY(16px);\n z-index: 5; }\n .ag-theme-material.ag-dnd-ghost span,\n .ag-theme-material.ag-dnd-ghost div {\n float: left;\n height: 100%;\n margin: 0;\n padding: 0; }\n .ag-theme-material.ag-dnd-ghost .ag-dnd-ghost-icon {\n margin-right: 8px;\n opacity: 0.87; }\n .ag-theme-material .ag-tab-header {\n background: #eee;\n min-width: 220px;\n width: 100%;\n display: table; }\n .ag-theme-material .ag-tab-header .ag-tab {\n border-bottom: 2px solid transparent;\n height: 32px;\n text-align: center;\n vertical-align: middle;\n display: table-cell; }\n .ag-theme-material .ag-tab-header .ag-tab.ag-tab-selected .ag-icon-filter {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjM0Y1MUI1IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik00IDEwaDEwVjhINHpNMiA0djJoMTRWNHoiLz48cGF0aCBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik03IDE0aDR2LTJIN3oiLz48L2c+PC9zdmc+);\n display: inline-block; }\n .ag-theme-material .ag-tab-header .ag-tab.ag-tab-selected .ag-icon-columns {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMyA0aDN2Mkgzem01IDBoM3YySDh6bTUgMGgzdjJoLTN6TTMgOGgzdjJIM3ptNSAwaDN2Mkg4em01IDBoM3YyaC0zek0zIDEyaDN2Mkgzem01IDBoM3YySDh6bTUgMGgzdjJoLTN6IiBmaWxsPSIjM0Y1MUI1IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=);\n display: inline-block; }\n .ag-theme-material .ag-tab-header .ag-tab.ag-tab-selected .ag-icon-menu {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjM0Y1MUI1IiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTIgMTRoMTR2LTJIMnoiLz48cGF0aCBkPSJNMiAxMGgxNFY4SDJ6bTAtNnYyaDE0VjR6Ii8+PC9nPjwvc3ZnPg==);\n display: inline-block; }\n .ag-theme-material .ag-tab-body {\n padding: 8px 0; }\n .ag-theme-material .ag-tab-body .ag-filter-select {\n margin: 8px;\n width: calc(100% - 16px); }\n .ag-theme-material .ag-tab-body .ag-menu-list {\n margin-bottom: 0;\n margin-top: 0; }\n .ag-theme-material .ag-tab-body .ag-menu-list > div:first-child > span {\n padding-top: 0; }\n .ag-theme-material .ag-tab-body .ag-menu-list > div:last-child > span {\n padding-bottom: 0; }\n .ag-theme-material .ag-tab-body .ag-menu-list > div:last-child > .ag-menu-option-popup-pointer {\n background-position-y: 0; }\n .ag-theme-material .ag-filter-select {\n margin: 8px;\n width: calc(100% - 16px); }\n .ag-theme-material .ag-filter input[type=\"radio\"] {\n margin: 0 3px 0 6px;\n width: 12px;\n height: 17px;\n vertical-align: top; }\n .ag-theme-material .ag-filter input[type=\"text\"],\n .ag-theme-material .ag-filter input[type=\"date\"] {\n background: transparent;\n box-sizing: border-box;\n color: rgba(0, 0, 0, 0.87);\n font-family: inherit;\n font-size: inherit;\n height: 24px;\n padding-bottom: 8px;\n border-width: 0;\n border-bottom: 1px solid #e0e0e0;\n padding-left: 8px; }\n .ag-theme-material .ag-filter input[type=\"text\"]:focus,\n .ag-theme-material .ag-filter input[type=\"date\"]:focus {\n border-bottom: 2px solid #3f51b5;\n outline: none;\n padding-bottom: 7px; }\n .ag-theme-material .ag-filter input[type=\"text\"]::placeholder,\n .ag-theme-material .ag-filter input[type=\"date\"]::placeholder {\n color: rgba(0, 0, 0, 0.38); }\n .ag-theme-material .ag-filter label {\n display: block;\n padding-left: 8px; }\n .ag-theme-material .ag-filter .ag-set-filter-list {\n height: 260px;\n padding-top: 8px; }\n .ag-theme-material .ag-filter .ag-filter-header-container {\n box-sizing: border-box;\n height: 40px; }\n .ag-theme-material .ag-filter .ag-filter-header-container:nth-child(2) {\n border-bottom: 1px solid #e0e0e0; }\n .ag-theme-material .ag-filter .ag-filter-checkbox {\n float: left;\n height: 40px;\n margin-right: 8px;\n padding-top: 4px; }\n .ag-theme-material .ag-filter .ag-filter-value {\n height: 40px;\n line-height: 28px; }\n .ag-theme-material .ag-filter .ag-filter-apply-panel {\n display: flex;\n justify-content: flex-end;\n padding: 8px;\n padding-top: 16px; }\n .ag-theme-material .ag-filter .ag-filter-apply-panel button {\n appearance: none;\n background-color: transparent;\n border: 0;\n color: #3f51b5;\n font-family: inherit;\n font-size: inherit;\n margin: 0;\n padding: 0;\n text-transform: uppercase; }\n .ag-theme-material .ag-filter .ag-filter-apply-panel button + button {\n margin-left: 16px; }\n .ag-theme-material .ag-column-select-panel .ag-column-select-column-group,\n .ag-theme-material .ag-column-select-panel .ag-column-select-column {\n height: 32px;\n line-height: 32px;\n margin-left: 0; }\n .ag-theme-material .ag-column-select-panel .ag-column-select-column-group span,\n .ag-theme-material .ag-column-select-panel .ag-column-select-column span {\n float: left;\n height: 100%; }\n .ag-theme-material .ag-column-select-panel .ag-column-select-column-group .ag-column-select-indent,\n .ag-theme-material .ag-column-select-panel .ag-column-select-column .ag-column-select-indent {\n width: 16px; }\n .ag-theme-material .ag-column-select-panel .ag-column-select-column-group .ag-column-select-checkbox,\n .ag-theme-material .ag-column-select-panel .ag-column-select-column-group .ag-column-group-icons,\n .ag-theme-material .ag-column-select-panel .ag-column-select-column .ag-column-select-checkbox,\n .ag-theme-material .ag-column-select-panel .ag-column-select-column .ag-column-group-icons {\n margin-left: 8px;\n margin-right: 8px; }\n .ag-theme-material .ag-column-select-panel .ag-column-container {\n padding-top: 8px; }\n .ag-theme-material .ag-column-select-panel .ag-column-select-column.ag-toolpanel-add-group-indent {\n margin-left: 34px; }\n .ag-theme-material .ag-column-tool-panel {\n display: flex; }\n .ag-theme-material .ag-filter-body {\n flex-grow: 1;\n flex-shrink: 1;\n padding-right: 8px; }\n .ag-theme-material .ag-column-tool-panel-item button {\n font-family: \"Roboto\", sans-serif;\n font-size: 13px;\n height: 100%; }\n .ag-theme-material .ag-filter-filter {\n margin-bottom: 8px; }\n .ag-theme-material .ag-column-select-header {\n border-bottom: 1px solid #e0e0e0;\n box-sizing: border-box;\n height: 56px;\n padding-top: 8px; }\n .ag-theme-material .ag-column-select-header label {\n display: block;\n padding-left: 8px; }\n .ag-theme-material .ag-column-select-header label .ag-filter-checkbox {\n float: left;\n margin-right: 8px; }\n .ag-theme-material .ag-column-select-header .ag-column-tool-panel a {\n margin: 0 8px;\n padding-top: 4px; }\n .ag-theme-material .ag-group-child-count::before {\n content: \" \"; }\n .ag-theme-material .ag-column-panel {\n border-right: 0; }\n .ag-theme-material .ag-column-panel .ag-pivot-mode {\n border-bottom: 1px solid #e0e0e0;\n box-sizing: border-box;\n height: 56px;\n line-height: 56px; }\n .ag-theme-material .ag-column-panel .ag-pivot-mode span {\n float: left;\n height: 100%; }\n .ag-theme-material .ag-column-panel .ag-pivot-mode .ag-pivot-mode-select {\n margin-left: 8px; }\n .ag-theme-material .ag-column-panel .ag-pivot-mode .ag-pivot-mode-select .ag-checkbox-label {\n margin-left: 8px; }\n .ag-theme-material .ag-column-panel .ag-column-select-panel {\n border-bottom: 1px solid #e0e0e0;\n padding-bottom: 7px;\n padding-top: 0; }\n .ag-theme-material .ag-column-panel .ag-column-drop {\n border-bottom: 1px solid #e0e0e0;\n clear: both;\n overflow: auto;\n padding: 8px 0;\n padding-bottom: 16px; }\n .ag-theme-material .ag-column-panel .ag-column-drop .ag-icon {\n float: left;\n height: 40px;\n margin: 0 8px; }\n .ag-theme-material .ag-column-panel .ag-column-drop .ag-column-drop-title {\n clear: right;\n float: left;\n height: 40px;\n line-height: 40px;\n width: calc(100% - 34px); }\n .ag-theme-material .ag-column-panel .ag-column-drop .ag-column-drop-empty-message {\n clear: both;\n color: rgba(0, 0, 0, 0.38);\n font: 700 12px \"Roboto\", sans-serif;\n line-height: 16px;\n padding-left: 32px;\n padding-right: 8px; }\n .ag-theme-material .ag-column-panel .ag-column-drop:last-child {\n border-bottom: 0; }\n .ag-theme-material .ag-filter-icon:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjMzMzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik00IDEwaDEwVjhINHpNMiA0djJoMTRWNHoiLz48cGF0aCBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik03IDE0aDR2LTJIN3oiLz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px; }\n .ag-theme-material .ag-sort-ascending-icon:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTAgMTVWNmw0IDQgMS0xLTYtNi02IDYgMSAxIDQtNHY5eiIgZmlsbD0iIzMzMyIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px; }\n .ag-theme-material .ag-sort-descending-icon:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOCAzdjkuMTNMNCA4IDMgOWw2IDYgNi02LTEtMS00IDQuMTNWM3oiIGZpbGw9IiMzMzMiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px; }\n .ag-theme-material .ag-sort-none-icon:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjMzMzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTIgMTRoNXYtMkgyeiIvPjxwYXRoIGQ9Ik0yIDR2MmgxNFY0em0wIDZoOVY4SDJ6Ii8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px; }\n .ag-theme-material .ag-numeric-header .ag-header-cell-label .ag-header-icon {\n margin-left: 0;\n margin-right: 8px; }\n .ag-theme-material .ag-paging-panel {\n align-items: center;\n border-top: 1px solid #e0e0e0;\n color: rgba(0, 0, 0, 0.54);\n display: flex;\n height: 56px;\n justify-content: flex-end;\n padding: 0 24px; }\n .ag-theme-material .ag-paging-panel > span {\n margin-left: 32px; }\n .ag-theme-material button[ref=\"btFirst\"] {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjMzMzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik00LjUgNC41SDZ2OUg0LjV6Ii8+PHBhdGggZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNMTQgMTIuNUwxMC41IDkgMTQgNS41bC0xLTFMOC41IDlsNC41IDQuNXoiLz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n overflow: hidden;\n text-indent: 100%;\n appearance: none;\n border: 0;\n opacity: 0.54;\n padding: 0; }\n .ag-theme-material button[ref=\"btFirst\"][disabled] {\n opacity: 0.38; }\n .ag-theme-material button[ref=\"btPrevious\"] {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTEuNSAxMi41TDggOWwzLjUtMy41LTEtMUw2IDlsNC41IDQuNXoiIGZpbGw9IiMzMzMiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n overflow: hidden;\n text-indent: 100%;\n appearance: none;\n border: 0;\n opacity: 0.54;\n padding: 0; }\n .ag-theme-material button[ref=\"btPrevious\"][disabled] {\n opacity: 0.38; }\n .ag-theme-material button[ref=\"btLast\"] {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjMzMzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0xMy41IDQuNUgxMnY5aDEuNXoiLz48cGF0aCBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik00IDEyLjVMNy41IDkgNCA1LjVsMS0xTDkuNSA5IDUgMTMuNXoiLz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n overflow: hidden;\n text-indent: 100%;\n appearance: none;\n border: 0;\n opacity: 0.54;\n padding: 0; }\n .ag-theme-material button[ref=\"btLast\"][disabled] {\n opacity: 0.38; }\n .ag-theme-material button[ref=\"btNext\"] {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNiAxMi41TDkuNSA5IDYgNS41bDEtMUwxMS41IDkgNyAxMy41eiIgZmlsbD0iIzMzMyIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n overflow: hidden;\n text-indent: 100%;\n appearance: none;\n border: 0;\n opacity: 0.54;\n padding: 0; }\n .ag-theme-material button[ref=\"btNext\"][disabled] {\n opacity: 0.38; }\n .ag-theme-material .ag-rtl button[ref=\"btFirst\"] {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjMzMzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik0xMy41IDQuNUgxMnY5aDEuNXoiLz48cGF0aCBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik00IDEyLjVMNy41IDkgNCA1LjVsMS0xTDkuNSA5IDUgMTMuNXoiLz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px; }\n .ag-theme-material .ag-rtl button[ref=\"btPrevious\"] {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNiAxMi41TDkuNSA5IDYgNS41bDEtMUwxMS41IDkgNyAxMy41eiIgZmlsbD0iIzMzMyIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px; }\n .ag-theme-material .ag-rtl button[ref=\"btLast\"] {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBmaWxsPSIjMzMzIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGQ9Ik00LjUgNC41SDZ2OUg0LjV6Ii8+PHBhdGggZmlsbC1ydWxlPSJub256ZXJvIiBkPSJNMTQgMTIuNUwxMC41IDkgMTQgNS41bC0xLTFMOC41IDlsNC41IDQuNXoiLz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px; }\n .ag-theme-material .ag-rtl button[ref=\"btNext\"] {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTEuNSAxMi41TDggOWwzLjUtMy41LTEtMUw2IDlsNC41IDQuNXoiIGZpbGw9IiMzMzMiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px; }\n .ag-theme-material .ag-row-selected {\n background-color: #f5f5f5; }\n .ag-theme-material .ag-cell-range-selected:not(.ag-cell-focus) {\n background-color: #e8eaf6; }\n .ag-theme-material .ag-cell-inline-editing {\n background: #fff;\n border-radius: 2px;\n box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n padding: 8px;\n background: #f5f5f5;\n height: 72px;\n line-height: normal;\n padding: 24px;\n z-index: 2; }\n .ag-theme-material .ag-cell-inline-editing input[type=\"text\"],\n .ag-theme-material .ag-cell-inline-editing input[type=\"tel\"],\n .ag-theme-material .ag-cell-inline-editing input[type=\"date\"],\n .ag-theme-material .ag-cell-inline-editing input[type=\"datetime-local\"] {\n background: transparent;\n box-sizing: border-box;\n color: rgba(0, 0, 0, 0.87);\n font-family: inherit;\n font-size: inherit;\n height: 24px;\n padding-bottom: 8px;\n border-width: 0;\n border-bottom: 1px solid #e0e0e0; }\n .ag-theme-material .ag-cell-inline-editing input[type=\"text\"]:focus,\n .ag-theme-material .ag-cell-inline-editing input[type=\"tel\"]:focus,\n .ag-theme-material .ag-cell-inline-editing input[type=\"date\"]:focus,\n .ag-theme-material .ag-cell-inline-editing input[type=\"datetime-local\"]:focus {\n border-bottom: 2px solid #3f51b5;\n outline: none;\n padding-bottom: 7px; }\n .ag-theme-material .ag-cell-inline-editing input[type=\"text\"]::placeholder,\n .ag-theme-material .ag-cell-inline-editing input[type=\"tel\"]::placeholder,\n .ag-theme-material .ag-cell-inline-editing input[type=\"date\"]::placeholder,\n .ag-theme-material .ag-cell-inline-editing input[type=\"datetime-local\"]::placeholder {\n color: rgba(0, 0, 0, 0.38); }\n .ag-theme-material .ag-cell-inline-editing select {\n height: auto; }\n .ag-theme-material .ag-popup-editor {\n background: #fff;\n border-radius: 2px;\n box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n padding: 8px;\n background: #f5f5f5;\n padding: 0;\n z-index: 1; }\n .ag-theme-material .ag-popup-editor .ag-large-textarea textarea {\n background: transparent;\n box-sizing: border-box;\n color: rgba(0, 0, 0, 0.87);\n font-family: inherit;\n font-size: inherit;\n height: 24px;\n padding-bottom: 8px;\n border-width: 0;\n border-bottom: 1px solid #e0e0e0;\n height: auto;\n padding: 24px; }\n .ag-theme-material .ag-popup-editor .ag-large-textarea textarea:focus {\n border-bottom: 2px solid #3f51b5;\n outline: none;\n padding-bottom: 7px; }\n .ag-theme-material .ag-popup-editor .ag-large-textarea textarea::placeholder {\n color: rgba(0, 0, 0, 0.38); }\n .ag-theme-material .ag-rich-select {\n background-color: #f5f5f5;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTIuNSA2LjVMOSAxMCA1LjUgNi41bC0xIDFMOSAxMmw0LjUtNC41eiIgZmlsbD0iIzMzMyIvPjwvc3ZnPg==);\n background-position-x: calc(100% - 8px);\n background-position-y: 16px;\n background-repeat: no-repeat; }\n .ag-theme-material .ag-rich-select .ag-rich-select-list {\n height: 312px; }\n .ag-theme-material .ag-rich-select .ag-rich-select-value {\n height: 48px;\n line-height: 48px;\n padding-left: 24px; }\n .ag-theme-material .ag-rich-select .ag-virtual-list-item {\n cursor: default;\n height: 48px;\n line-height: 48px; }\n .ag-theme-material .ag-rich-select .ag-virtual-list-item:hover {\n background-color: #eee; }\n .ag-theme-material .ag-rich-select .ag-rich-select-row {\n padding-left: 24px; }\n .ag-theme-material .ag-rich-select .ag-rich-select-row-selected {\n background-color: #f5f5f5; }\n .ag-theme-material .ag-floating-filter-body {\n float: left;\n height: 100%;\n margin-right: 0;\n width: calc(100% - 34px); }\n .ag-theme-material .ag-floating-filter-body input {\n box-sizing: border-box;\n background: transparent;\n box-sizing: border-box;\n color: rgba(0, 0, 0, 0.87);\n font-family: inherit;\n font-size: inherit;\n height: 24px;\n padding-bottom: 8px;\n border-width: 0;\n border-bottom: 1px solid #e0e0e0; }\n .ag-theme-material .ag-floating-filter-body input:focus {\n border-bottom: 2px solid #3f51b5;\n outline: none;\n padding-bottom: 7px; }\n .ag-theme-material .ag-floating-filter-body input::placeholder {\n color: rgba(0, 0, 0, 0.38); }\n .ag-theme-material .ag-floating-filter-full-body input {\n box-sizing: border-box;\n background: transparent;\n box-sizing: border-box;\n color: rgba(0, 0, 0, 0.87);\n font-family: inherit;\n font-size: inherit;\n height: 24px;\n padding-bottom: 8px;\n border-width: 0;\n border-bottom: 1px solid #e0e0e0; }\n .ag-theme-material .ag-floating-filter-full-body input:focus {\n border-bottom: 2px solid #3f51b5;\n outline: none;\n padding-bottom: 7px; }\n .ag-theme-material .ag-floating-filter-full-body input::placeholder {\n color: rgba(0, 0, 0, 0.38); }\n .ag-theme-material .ag-floating-filter-button {\n float: right;\n line-height: 18px;\n margin-top: 20px; }\n .ag-theme-material .ag-floating-filter-button button {\n appearance: none;\n background: transparent;\n border: 0;\n height: 18px;\n padding: 0;\n width: 18px; }\n .ag-theme-material .ag-cell-label-container {\n height: 100%; }\n .ag-theme-material .ag-header-group-cell-label {\n height: 100%; }\n .ag-theme-material .ag-header-group-cell-label span {\n float: left;\n height: 100%; }\n .ag-theme-material .ag-header-select-all {\n height: 100%;\n margin-right: 24px; }\n .ag-theme-material .ag-header-select-all span {\n height: 100%; }\n .ag-theme-material .ag-header-select-all:not(.ag-hidden) + .ag-cell-label-container {\n float: left;\n width: calc(100% - 18px - 24px); }\n .ag-theme-material .ag-selection-checkbox span,\n .ag-theme-material .ag-group-expanded span,\n .ag-theme-material .ag-group-contracted span {\n margin-right: 24px; }\n .ag-theme-material .ag-selection-checkbox span {\n position: relative;\n top: 4px; }\n .ag-theme-material .ag-group-expanded .ag-icon-contracted:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTIuNSA2LjVMOSAxMCA1LjUgNi41bC0xIDFMOSAxMmw0LjUtNC41eiIgZmlsbD0iIzMzMyIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px; }\n .ag-theme-material .ag-column-drop-horizontal {\n background-color: #eee;\n height: 48px;\n line-height: 32px;\n padding-left: 24px; }\n .ag-theme-material .ag-column-drop-horizontal.ag-width-half {\n margin-bottom: -3px; }\n .ag-theme-material .ag-column-drop-horizontal span {\n float: left;\n height: 100%; }\n .ag-theme-material .ag-column-drop-horizontal > div:first-child {\n float: left;\n height: 100%; }\n .ag-theme-material .ag-column-drop-horizontal .ag-icon-group,\n .ag-theme-material .ag-column-drop-horizontal .ag-icon-pivot {\n margin-right: 24px; }\n .ag-theme-material .ag-column-drop-horizontal .ag-right-arrow {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOSAzTDggNGw0IDRIM3YyaDlsLTQgNCAxIDEgNi02eiIgZmlsbD0iIzMzMyIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px; }\n .ag-theme-material .ag-column-drop-horizontal .ag-left-arrow {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTUgOEg2bDQtNC0xLTEtNiA2IDYgNiAxLTEtNC00aDl6IiBmaWxsPSIjMzMzIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px; }\n .ag-theme-material .ag-column-drop-horizontal .ag-left-arrow,\n .ag-theme-material .ag-column-drop-horizontal .ag-right-arrow {\n overflow: hidden;\n text-indent: 100%;\n height: 100%;\n margin: 0 8px;\n opacity: 0.54; }\n .ag-theme-material .ag-column-drop-horizontal .ag-column-drop-empty-message {\n height: 100%;\n line-height: 48px;\n opacity: 0.38; }\n .ag-theme-material .ag-column-drop-cell {\n background: #e0e0e0;\n border-radius: 32px;\n box-sizing: border-box;\n height: 32px !important;\n margin-top: 8px;\n padding: 0 4px; }\n .ag-theme-material .ag-column-drop-cell .ag-column-drop-cell-text {\n height: 100%;\n line-height: 32px;\n margin: 0 8px; }\n .ag-theme-material .ag-column-drop-cell .ag-column-drop-cell-button {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOSAxLjVBNy40OTMgNy40OTMgMCAwIDAgMS41IDljMCA0LjE0OCAzLjM1MyA3LjUgNy41IDcuNSA0LjE0OCAwIDcuNS0zLjM1MiA3LjUtNy41IDAtNC4xNDctMy4zNTItNy41LTcuNS03LjV6bTMuNzUgMTAuMTkzbC0xLjA1NyAxLjA1N0w5IDEwLjA1NyA2LjMwOCAxMi43NSA1LjI1IDExLjY5MyA3Ljk0MiA5IDUuMjUgNi4zMDggNi4zMDggNS4yNSA5IDcuOTQybDIuNjkzLTIuNjkyIDEuMDU3IDEuMDU4TDEwLjA1NyA5bDIuNjkzIDIuNjkzeiIgZmlsbD0iIzMzMyIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n overflow: hidden;\n text-indent: 100%;\n min-width: 32px;\n height: 100%;\n margin: 0 4px;\n opacity: 0.54; }\n .ag-theme-material .ag-column-drop-cell .ag-column-drop-cell-button:hover {\n opacity: 0.87; }\n .ag-theme-material .ag-column-drop-cell .ag-column-drag {\n margin-left: 16px;\n margin-top: 4px;\n width: 18px; }\n .ag-theme-material .ag-select-agg-func-popup {\n background: #fff;\n border-radius: 2px;\n box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n padding: 8px;\n background: #fff;\n height: 140px;\n padding: 0; }\n .ag-theme-material .ag-select-agg-func-popup .ag-virtual-list-item {\n cursor: default;\n line-height: 40px;\n padding-left: 16px; }\n .ag-theme-material .ag-set-filter-list,\n .ag-theme-material .ag-menu-column-select-wrapper {\n width: auto; }\n .ag-theme-material .ag-column-drop-vertical > .ag-column-drop-cell {\n float: left;\n margin-bottom: 8px;\n margin-left: 8px;\n margin-top: 0; }\n .ag-theme-material .ag-cell-data-changed {\n background-color: #00acc1 !important; }\n .ag-theme-material .ag-cell-data-changed-animation {\n background-color: transparent;\n transition: background-color 1s; }\n .ag-theme-material .ag-stub-cell {\n padding-left: 24px;\n padding-top: 8px; }\n .ag-theme-material .ag-stub-cell .ag-loading-icon {\n float: left;\n height: 100%; }\n .ag-theme-material .ag-stub-cell .ag-loading-text {\n float: left;\n height: 100%;\n margin-left: 8px;\n margin-top: 8px; }\n .ag-theme-material .ag-rtl .ag-numeric-cell {\n text-align: left; }\n .ag-theme-material .ag-rtl .ag-header-cell-menu-button {\n float: left; }\n .ag-theme-material .ag-rtl .ag-header-cell-label {\n float: right;\n width: calc(100% - 18px); }\n .ag-theme-material .ag-rtl .ag-header-cell-label > span {\n float: right; }\n .ag-theme-material .ag-rtl .ag-header-cell-label .ag-header-icon {\n margin-top: 2px; }\n .ag-theme-material .ag-rtl .ag-numeric-header .ag-header-cell-menu-button {\n float: right; }\n .ag-theme-material .ag-rtl .ag-numeric-header .ag-header-cell-label {\n float: left; }\n .ag-theme-material .ag-rtl .ag-numeric-header .ag-header-cell-label > span {\n float: left; }\n .ag-theme-material .ag-rtl .ag-column-panel .ag-pivot-mode span {\n float: right; }\n .ag-theme-material .ag-rtl .ag-column-panel .ag-pivot-mode .ag-pivot-mode-select {\n margin-right: 8px; }\n .ag-theme-material .ag-rtl .ag-column-panel .ag-pivot-mode .ag-pivot-mode-select .ag-checkbox-label {\n margin-right: 8px; }\n .ag-theme-material .ag-rtl .ag-column-panel .ag-column-drop .ag-icon {\n float: right; }\n .ag-theme-material .ag-rtl .ag-column-panel .ag-column-drop .ag-column-drop-title {\n clear: left;\n float: right; }\n .ag-theme-material .ag-rtl .ag-column-panel .ag-column-drop .ag-column-drop-empty-message {\n padding-left: 8px;\n padding-right: 32px; }\n .ag-theme-material .ag-rtl .ag-filter-checkbox {\n float: right;\n margin-left: 8px; }\n .ag-theme-material .ag-rtl .ag-column-select-panel .ag-column-select-column-group span,\n .ag-theme-material .ag-rtl .ag-column-select-panel .ag-column-select-column span {\n float: right; }\n .ag-theme-material .ag-rtl .ag-column-select-panel .ag-column-select-column-group .ag-column-select-checkbox,\n .ag-theme-material .ag-rtl .ag-column-select-panel .ag-column-select-column-group .ag-column-group-icons,\n .ag-theme-material .ag-rtl .ag-column-select-panel .ag-column-select-column .ag-column-select-checkbox,\n .ag-theme-material .ag-rtl .ag-column-select-panel .ag-column-select-column .ag-column-group-icons {\n margin-left: 8px;\n margin-right: 8px; }\n .ag-theme-material .ag-rtl .ag-column-select-panel .ag-column-select-column.ag-toolpanel-add-group-indent {\n margin-left: 0;\n margin-right: 34px; }\n .ag-theme-material .ag-rtl .ag-icon-tree-closed {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTEuNSAxMi41TDggOWwzLjUtMy41LTEtMUw2IDlsNC41IDQuNXoiIGZpbGw9IiMzMzMiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px; }\n .ag-theme-material .ag-rtl .ag-header-group-cell-label {\n height: 100%; }\n .ag-theme-material .ag-rtl .ag-header-group-cell-label span {\n float: right;\n height: 100%; }\n .ag-theme-material .ag-rtl .ag-header-select-all:not(.ag-hidden) + .ag-cell-label-container {\n float: right; }\n .ag-theme-material .ag-rtl .ag-header-select-all {\n margin-left: 24px;\n margin-right: 0; }\n .ag-theme-material .ag-rtl .ag-selection-checkbox span,\n .ag-theme-material .ag-rtl .ag-group-expanded span,\n .ag-theme-material .ag-rtl .ag-group-contracted span {\n margin-left: 24px;\n margin-right: 0; }\n .ag-theme-material .ag-rtl .ag-column-drop-horizontal {\n padding-right: 24px; }\n .ag-theme-material .ag-rtl .ag-column-drop-horizontal span {\n float: right; }\n .ag-theme-material .ag-rtl .ag-column-drop-horizontal > div:first-child {\n float: right; }\n .ag-theme-material .ag-rtl .ag-column-drop-horizontal .ag-icon-group,\n .ag-theme-material .ag-rtl .ag-column-drop-horizontal .ag-icon-pivot {\n margin-left: 24px;\n margin-right: 0; }\n .ag-theme-material .ag-rtl .ag-column-drop-horizontal .ag-right-arrow {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOSAzTDggNGw0IDRIM3YyaDlsLTQgNCAxIDEgNi02eiIgZmlsbD0iIzMzMyIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n height: 100%; }\n .ag-theme-material .ag-rtl .ag-column-drop-horizontal .ag-left-arrow {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTgiIGhlaWdodD0iMTgiIHZpZXdCb3g9IjAgMCAxOCAxOCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTUgOEg2bDQtNC0xLTEtNiA2IDYgNiAxLTEtNC00aDl6IiBmaWxsPSIjMzMzIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 18px 18px;\n height: 18px;\n opacity: 0.87;\n width: 18px;\n height: 100%; }\n .ag-theme-material .ag-rtl .ag-floating-filter-body {\n float: right;\n margin-left: 0; }\n .ag-theme-material .ag-rtl .ag-floating-filter-button {\n float: left; }\n .ag-theme-material .ag-rtl .ag-header .ag-header-cell-resize {\n left: -8px;\n right: auto; }\n .ag-theme-material .ag-rtl .ag-header .ag-header-cell-resize::after {\n border-left: 1px solid #e0e0e0;\n border-right: 0; }\n .ag-theme-material .ag-rtl .ag-column-select-header .ag-filter-body {\n margin-left: 8px;\n margin-right: 0; }\n .ag-theme-material .ag-rtl .ag-column-drag {\n background-position-x: right; }\n .ag-theme-material .ag-status-bar {\n background: #fff;\n border: 1px solid #e0e0e0;\n border-top: 0;\n color: rgba(0, 0, 0, 0.38);\n display: flex;\n font: 700 12px \"Roboto\", sans-serif;\n justify-content: flex-end;\n padding: 16px 32px; }\n .ag-theme-material .ag-status-bar .ag-status-bar-item {\n margin-right: 16px; }\n .ag-theme-material .ag-status-bar .ag-status-bar-item span:nth-child(1)::after {\n content: \":\"; }\n .ag-theme-material .ag-status-bar .ag-status-bar-item span:nth-child(2) {\n color: rgba(0, 0, 0, 0.87); }\n .ag-theme-material .ag-details-row {\n box-sizing: border-box;\n padding: 40px; }\n .ag-theme-material .ag-overlay-loading-wrapper {\n background-color: rgba(255, 255, 255, 0.5); }\n .ag-theme-material .ag-overlay-loading-center {\n background: #fff;\n border-radius: 2px;\n box-shadow: 0 3px 1px -2px rgba(0, 0, 0, 0.2), 0 2px 2px 0 rgba(0, 0, 0, 0.14), 0 1px 5px 0 rgba(0, 0, 0, 0.12);\n padding: 8px; }\n .ag-theme-material .ag-tool-panel {\n background-color: #fafafa;\n border-right: 1px solid #e0e0e0;\n border-top: 1px solid #e0e0e0; }\n .ag-theme-material .ag-tool-panel .ag-side-buttons {\n border-bottom: 1px solid #e0e0e0; }\n .ag-theme-material .ag-tool-panel .ag-side-buttons button {\n background: transparent;\n border: 0;\n border-right: 1px solid #e0e0e0;\n color: rgba(0, 0, 0, 0.87);\n height: 20px; }\n .ag-theme-material .ag-tool-panel .ag-panel-container {\n border-right: 1px solid #e0e0e0;\n box-sizing: border-box; }\n .ag-theme-material .ag-tool-panel.full-width .ag-panel-container {\n border-right: 0; }\n .ag-theme-material .ag-tool-panel .ag-column-drop {\n min-height: 50px; }\n .ag-theme-material .ag-rtl .ag-tool-panel .ag-panel-container {\n border-left: 1px solid #e0e0e0;\n border-right: 0; }\n .ag-theme-material .ag-rtl .ag-tool-panel.full-width .ag-panel-container {\n border-left: 0; }\n .ag-theme-material .ag-rtl .ag-tool-panel .ag-side-buttons button {\n border-left: 1px solid #e0e0e0;\n border-right: 0; }\n .ag-theme-material .ag-column-name-filter {\n background: transparent;\n box-sizing: border-box;\n color: rgba(0, 0, 0, 0.87);\n font-family: inherit;\n font-size: inherit;\n height: 24px;\n padding-bottom: 8px;\n border-width: 0;\n border-bottom: 1px solid #e0e0e0;\n box-sizing: border-box;\n width: 100%; }\n .ag-theme-material .ag-column-name-filter:focus {\n border-bottom: 2px solid #3f51b5;\n outline: none;\n padding-bottom: 7px; }\n .ag-theme-material .ag-column-name-filter::placeholder {\n color: rgba(0, 0, 0, 0.38); }\n .ag-theme-material .sass-variables::after {\n content: '{ \"autoSizePadding\": \"24px\", \"headerHeight\": \"56px\", \"groupPaddingSize\": \"42px\", \"footerPaddingAddition\": \"32px\", \"virtualItemHeight\": \"40px\", \"aggFuncPopupHeight\": \"140px\", \"checkboxIndentWidth\": \"26px\", \"leafNodePadding\": \"24px\", \"rowHeight\": \"48px\", \"gridSize\": \"8px\", \"iconSize\": \"18px\" }';\n display: none; }\n .ag-theme-material .ag-cell-highlight {\n background-color: #fce4ec !important; }\n .ag-theme-material .ag-cell-highlight-animation {\n -webkit-transition: background-color 1s;\n transition: background-color 1s; }\n .ag-theme-material .ag-row-drag {\n background-position-y: center; }\n .ag-theme-material .ag-column-drag {\n background-position-y: center; }\n .ag-theme-material .ag-header-cell-resize {\n right: -7px; }\n .ag-theme-material .ag-cell-range-selected-1:not(.ag-cell-focus) {\n background-color: #e8eaf6; }\n .ag-theme-material .ag-cell-range-selected-2:not(.ag-cell-focus) {\n background-color: #d9ddf0; }\n .ag-theme-material .ag-cell-range-selected-3:not(.ag-cell-focus) {\n background-color: #cbcfeb; }\n .ag-theme-material .ag-cell-range-selected-4:not(.ag-cell-focus) {\n background-color: #bcc2e5; }\n .ag-theme-material .ag-tool-panel {\n border-bottom: 0;\n border-right: 0;\n border-top: 0; }\n .ag-theme-material .ag-tool-panel .ag-side-buttons button {\n border: 0;\n color: rgba(0, 0, 0, 0.54);\n font-family: \"Roboto\", sans-serif;\n font-size: 12px;\n font-weight: 700; }\n", ""]);
36791
36792// exports
36793
36794
36795/***/ }),
36796/* 171 */
36797/***/ (function(module, exports, __webpack_require__) {
36798
36799// style-loader: Adds some css to the DOM by adding a <style> tag
36800
36801// load the styles
36802var content = __webpack_require__(172);
36803if(typeof content === 'string') content = [[module.i, content, '']];
36804// add the styles to the DOM
36805var update = __webpack_require__(15)(content, {});
36806if(content.locals) module.exports = content.locals;
36807// Hot Module Replacement
36808if(false) {
36809 // When the styles change, update the <style> tags
36810 if(!content.locals) {
36811 module.hot.accept("!!../../node_modules/css-loader/index.js!./ag-theme-balham.css", function() {
36812 var newContent = require("!!../../node_modules/css-loader/index.js!./ag-theme-balham.css");
36813 if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
36814 update(newContent);
36815 });
36816 }
36817 // When the module is disposed, remove the <style> tags
36818 module.hot.dispose(function() { update(); });
36819}
36820
36821/***/ }),
36822/* 172 */
36823/***/ (function(module, exports, __webpack_require__) {
36824
36825exports = module.exports = __webpack_require__(14)();
36826// imports
36827
36828
36829// module
36830exports.push([module.i, ".ag-theme-balham {\n background-color: white;\n color: #000;\n font: 400 12px -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif; }\n .ag-theme-balham .ag-header,\n .ag-theme-balham .ag-row,\n .ag-theme-balham .ag-header-cell,\n .ag-theme-balham .ag-header-group-cell,\n .ag-theme-balham .ag-rich-select-value,\n .ag-theme-balham .ag-root {\n box-sizing: border-box; }\n .ag-theme-balham .ag-menu, .ag-theme-balham .ag-theme-balham.ag-dnd-ghost, .ag-theme-balham .ag-cell-inline-editing, .ag-theme-balham .ag-popup-editor, .ag-theme-balham .ag-select-agg-func-popup, .ag-theme-balham .ag-overlay-loading-center {\n border: 1px solid #BDC3C7; }\n .ag-theme-balham .ag-tab-header .ag-tab {\n border: 1px solid transparent;\n border-bottom-width: 0;\n display: inline-block;\n margin: 4px;\n margin-bottom: 0;\n padding: 4px 8px; }\n .ag-theme-balham .ag-tab-header .ag-tab.ag-tab-selected {\n background-color: white;\n border-bottom: 2px solid #0091EA;\n border-bottom: 2px solid white;\n border-color: #BDC3C7; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-1 {\n padding-left: 20px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-1 {\n padding-right: 20px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-1 {\n padding-left: 28px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-1 {\n padding-right: 28px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-2 {\n padding-left: 40px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-2 {\n padding-right: 40px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-2 {\n padding-left: 56px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-2 {\n padding-right: 56px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-3 {\n padding-left: 60px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-3 {\n padding-right: 60px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-3 {\n padding-left: 84px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-3 {\n padding-right: 84px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-4 {\n padding-left: 80px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-4 {\n padding-right: 80px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-4 {\n padding-left: 112px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-4 {\n padding-right: 112px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-5 {\n padding-left: 100px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-5 {\n padding-right: 100px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-5 {\n padding-left: 140px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-5 {\n padding-right: 140px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-6 {\n padding-left: 120px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-6 {\n padding-right: 120px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-6 {\n padding-left: 168px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-6 {\n padding-right: 168px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-7 {\n padding-left: 140px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-7 {\n padding-right: 140px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-7 {\n padding-left: 196px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-7 {\n padding-right: 196px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-8 {\n padding-left: 160px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-8 {\n padding-right: 160px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-8 {\n padding-left: 224px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-8 {\n padding-right: 224px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-9 {\n padding-left: 180px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-9 {\n padding-right: 180px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-9 {\n padding-left: 252px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-9 {\n padding-right: 252px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-10 {\n padding-left: 200px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-10 {\n padding-right: 200px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-10 {\n padding-left: 280px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-10 {\n padding-right: 280px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-11 {\n padding-left: 220px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-11 {\n padding-right: 220px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-11 {\n padding-left: 308px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-11 {\n padding-right: 308px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-12 {\n padding-left: 240px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-12 {\n padding-right: 240px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-12 {\n padding-left: 336px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-12 {\n padding-right: 336px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-13 {\n padding-left: 260px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-13 {\n padding-right: 260px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-13 {\n padding-left: 364px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-13 {\n padding-right: 364px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-14 {\n padding-left: 280px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-14 {\n padding-right: 280px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-14 {\n padding-left: 392px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-14 {\n padding-right: 392px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-15 {\n padding-left: 300px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-15 {\n padding-right: 300px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-15 {\n padding-left: 420px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-15 {\n padding-right: 420px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-16 {\n padding-left: 320px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-16 {\n padding-right: 320px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-16 {\n padding-left: 448px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-16 {\n padding-right: 448px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-17 {\n padding-left: 340px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-17 {\n padding-right: 340px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-17 {\n padding-left: 476px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-17 {\n padding-right: 476px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-18 {\n padding-left: 360px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-18 {\n padding-right: 360px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-18 {\n padding-left: 504px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-18 {\n padding-right: 504px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-19 {\n padding-left: 380px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-19 {\n padding-right: 380px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-19 {\n padding-left: 532px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-19 {\n padding-right: 532px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-20 {\n padding-left: 400px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-20 {\n padding-right: 400px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-20 {\n padding-left: 560px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-20 {\n padding-right: 560px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-21 {\n padding-left: 420px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-21 {\n padding-right: 420px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-21 {\n padding-left: 588px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-21 {\n padding-right: 588px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-22 {\n padding-left: 440px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-22 {\n padding-right: 440px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-22 {\n padding-left: 616px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-22 {\n padding-right: 616px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-23 {\n padding-left: 460px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-23 {\n padding-right: 460px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-23 {\n padding-left: 644px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-23 {\n padding-right: 644px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-24 {\n padding-left: 480px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-24 {\n padding-right: 480px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-24 {\n padding-left: 672px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-24 {\n padding-right: 672px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-25 {\n padding-left: 500px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-25 {\n padding-right: 500px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-25 {\n padding-left: 700px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-25 {\n padding-right: 700px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-26 {\n padding-left: 520px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-26 {\n padding-right: 520px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-26 {\n padding-left: 728px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-26 {\n padding-right: 728px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-27 {\n padding-left: 540px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-27 {\n padding-right: 540px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-27 {\n padding-left: 756px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-27 {\n padding-right: 756px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-28 {\n padding-left: 560px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-28 {\n padding-right: 560px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-28 {\n padding-left: 784px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-28 {\n padding-right: 784px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-29 {\n padding-left: 580px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-29 {\n padding-right: 580px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-29 {\n padding-left: 812px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-29 {\n padding-right: 812px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-30 {\n padding-left: 600px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-30 {\n padding-right: 600px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-30 {\n padding-left: 840px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-30 {\n padding-right: 840px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-31 {\n padding-left: 620px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-31 {\n padding-right: 620px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-31 {\n padding-left: 868px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-31 {\n padding-right: 868px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-32 {\n padding-left: 640px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-32 {\n padding-right: 640px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-32 {\n padding-left: 896px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-32 {\n padding-right: 896px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-33 {\n padding-left: 660px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-33 {\n padding-right: 660px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-33 {\n padding-left: 924px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-33 {\n padding-right: 924px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-34 {\n padding-left: 680px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-34 {\n padding-right: 680px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-34 {\n padding-left: 952px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-34 {\n padding-right: 952px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-35 {\n padding-left: 700px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-35 {\n padding-right: 700px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-35 {\n padding-left: 980px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-35 {\n padding-right: 980px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-36 {\n padding-left: 720px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-36 {\n padding-right: 720px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-36 {\n padding-left: 1008px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-36 {\n padding-right: 1008px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-37 {\n padding-left: 740px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-37 {\n padding-right: 740px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-37 {\n padding-left: 1036px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-37 {\n padding-right: 1036px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-38 {\n padding-left: 760px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-38 {\n padding-right: 760px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-38 {\n padding-left: 1064px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-38 {\n padding-right: 1064px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-39 {\n padding-left: 780px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-39 {\n padding-right: 780px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-39 {\n padding-left: 1092px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-39 {\n padding-right: 1092px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-40 {\n padding-left: 800px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-40 {\n padding-right: 800px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-40 {\n padding-left: 1120px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-40 {\n padding-right: 1120px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-41 {\n padding-left: 820px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-41 {\n padding-right: 820px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-41 {\n padding-left: 1148px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-41 {\n padding-right: 1148px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-42 {\n padding-left: 840px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-42 {\n padding-right: 840px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-42 {\n padding-left: 1176px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-42 {\n padding-right: 1176px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-43 {\n padding-left: 860px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-43 {\n padding-right: 860px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-43 {\n padding-left: 1204px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-43 {\n padding-right: 1204px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-44 {\n padding-left: 880px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-44 {\n padding-right: 880px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-44 {\n padding-left: 1232px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-44 {\n padding-right: 1232px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-45 {\n padding-left: 900px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-45 {\n padding-right: 900px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-45 {\n padding-left: 1260px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-45 {\n padding-right: 1260px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-46 {\n padding-left: 920px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-46 {\n padding-right: 920px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-46 {\n padding-left: 1288px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-46 {\n padding-right: 1288px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-47 {\n padding-left: 940px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-47 {\n padding-right: 940px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-47 {\n padding-left: 1316px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-47 {\n padding-right: 1316px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-48 {\n padding-left: 960px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-48 {\n padding-right: 960px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-48 {\n padding-left: 1344px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-48 {\n padding-right: 1344px; }\n .ag-theme-balham .ag-ltr .ag-toolpanel-indent-49 {\n padding-left: 980px; }\n .ag-theme-balham .ag-rtl .ag-toolpanel-indent-49 {\n padding-right: 980px; }\n .ag-theme-balham .ag-ltr .ag-row-group-indent-49 {\n padding-left: 1372px; }\n .ag-theme-balham .ag-rtl .ag-row-group-indent-49 {\n padding-right: 1372px; }\n .ag-theme-balham .ag-ltr .ag-row-group-leaf-indent {\n margin-left: 28px; }\n .ag-theme-balham .ag-rtl .ag-row-group-leaf-indent {\n margin-right: 28px; }\n .ag-theme-balham .ag-rtl .ag-cell-first-right-pinned {\n border-left: 1px solid #BDC3C7; }\n .ag-theme-balham .ag-ltr .ag-cell-first-right-pinned {\n border-left: 1px solid #BDC3C7; }\n .ag-theme-balham .ag-rtl .ag-cell-last-left-pinned {\n border-right: 1px solid #BDC3C7; }\n .ag-theme-balham .ag-ltr .ag-cell-last-left-pinned {\n border-right: 1px solid #BDC3C7; }\n .ag-theme-balham .ag-value-change-delta {\n padding-right: 2px; }\n .ag-theme-balham .ag-value-change-delta-up {\n color: #43a047; }\n .ag-theme-balham .ag-value-change-delta-down {\n color: #e53935; }\n .ag-theme-balham .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 .ag-theme-balham .ag-value-change-value-highlight {\n background-color: rgba(22, 160, 133, 0.5);\n transition: background-color 0.1s; }\n .ag-theme-balham .ag-header {\n background-color: #f5f7f7;\n color: rgba(0, 0, 0, 0.54);\n font: 600 12px -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif; }\n .ag-theme-balham .ag-header-row {\n border-bottom: 1px solid #BDC3C7;\n box-sizing: border-box; }\n .ag-theme-balham .ag-row {\n border-bottom: 1px solid #BDC3C7;\n box-sizing: border-box; }\n .ag-theme-balham .ag-row-odd {\n background-color: #fcfdfe; }\n .ag-theme-balham .ag-row-even {\n background-color: white; }\n .ag-theme-balham .ag-row-hover {\n background-color: #ECF0F1; }\n .ag-theme-balham .ag-numeric-cell {\n text-align: right; }\n .ag-theme-balham .ag-header-cell-label {\n display: flex;\n float: left;\n height: 100%;\n width: calc(100% - 16px); }\n .ag-theme-balham .ag-header-cell-label span {\n height: 100%; }\n .ag-theme-balham .ag-header-cell-label > span {\n float: left; }\n .ag-theme-balham .ag-header-cell-label .ag-header-icon {\n background-position-y: 10px;\n background-size: 14px 14px;\n height: 100%;\n margin: 0;\n margin-left: 4px;\n opacity: 0.87; }\n .ag-theme-balham .ag-header-cell-label .ag-header-cell-text {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap; }\n .ag-theme-balham .ag-numeric-header .ag-header-cell-label {\n flex-direction: row-reverse;\n float: right; }\n .ag-theme-balham .ag-numeric-header .ag-header-cell-label > span {\n float: right; }\n .ag-theme-balham .ag-numeric-header .ag-header-cell-menu-button {\n float: left; }\n .ag-theme-balham .ag-header-group-text {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap; }\n .ag-theme-balham .ag-header-cell,\n .ag-theme-balham .ag-header-group-cell {\n line-height: 32px;\n padding-left: 12px;\n padding-right: 12px; }\n .ag-theme-balham .ag-cell {\n line-height: 26px;\n padding-left: 12px;\n padding-right: 12px;\n border: 1px solid transparent;\n padding-left: 11px;\n padding-right: 11px; }\n .ag-theme-balham .ag-row-drag {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMy41IDIuNXYxbTAgMnYxbTAgMnYxbTMtN3YxbTAgMnYxbTAgMnYxbTMtN3YxbTAgMnYxbTAgMnYxbTMtN3YxbTAgMnYxbTAgMnYxIiBzdHJva2U9IiM3RjhDOEQiIGZpbGw9Im5vbmUiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n background-position-x: left;\n background-position-y: 4px;\n float: left;\n height: 100%;\n width: 28px; }\n .ag-theme-balham .ag-column-drag {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMy41IDIuNXYxbTAgMnYxbTAgMnYxbTMtN3YxbTAgMnYxbTAgMnYxbTMtN3YxbTAgMnYxbTAgMnYxbTMtN3YxbTAgMnYxbTAgMnYxIiBzdHJva2U9IiM3RjhDOEQiIGZpbGw9Im5vbmUiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n background-position-x: left;\n background-position-y: 4px !important;\n height: 100%;\n min-width: 20px; }\n .ag-theme-balham .ag-row-dragging {\n opacity: 0.5;\n z-index: 10000; }\n .ag-theme-balham .ag-ltr .ag-cell-focus {\n border: 1px solid #0091EA;\n outline: initial; }\n .ag-theme-balham .ag-rtl .ag-cell-focus {\n border: 1px solid #0091EA;\n outline: initial; }\n .ag-theme-balham .ag-header-cell-resize {\n position: absolute;\n right: -4px;\n width: 8px;\n z-index: 4; }\n .ag-theme-balham .ag-header-cell-resize::after {\n border-right: 1px solid #BDC3C7;\n box-sizing: content-box;\n content: \"resize\";\n display: block;\n height: 16px;\n margin-top: 8px;\n overflow: hidden;\n text-indent: 4px;\n width: 4px; }\n .ag-theme-balham .ag-icon-aggregation {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiM3RjhDOEQiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHBhdGggZD0iTTEwLjUgNlY0LjVoLTV2LjUzMmExIDEgMCAwIDAgLjM2Ljc2OGwxLjcxOCAxLjQzMmExIDEgMCAwIDEgMCAxLjUzNkw1Ljg2IDEwLjJhMSAxIDAgMCAwLS4zNi43Njh2LjUzMmg1VjEwIi8+PHJlY3QgeD0iMS41IiB5PSIxLjUiIHdpZHRoPSIxMyIgaGVpZ2h0PSIxMyIgcng9IjIiLz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-arrows {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNy41IDE0VjNNMiA4LjVoMTFtLTcuNSA0bDIgMiAyLTJtMC04bC0yLTItMiAybS0yIDJsLTIgMiAyIDJtOCAwbDItMi0yLTIiIHN0cm9rZT0iIzdGOEM4RCIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-asc {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNy41IDEyVjRtMyAyLjVsLTMtMy0zIDMiIHN0cm9rZT0iIzdGOEM4RCIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-checkbox-checked-readonly {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHg9IjEiIHk9IjEiIHdpZHRoPSIxNCIgaGVpZ2h0PSIxNCIgcng9IjIiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBvcGFjaXR5PSIuNSI+PHVzZSBmaWxsPSIjRkZGIiB4bGluazpocmVmPSIjYSIvPjxyZWN0IHN0cm9rZT0iIzdGOEM4RCIgeD0iMS41IiB5PSIxLjUiIHdpZHRoPSIxMyIgaGVpZ2h0PSIxMyIgcng9IjIiLz48cGF0aCBzdHJva2U9IiM3RjhDOEQiIGQ9Ik0xMiA1bC01LjUgNS41TDQgOCIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-checkbox-checked {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHg9IjEiIHk9IjEiIHdpZHRoPSIxNCIgaGVpZ2h0PSIxNCIgcng9IjIiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIGZpbGw9IiNGRkYiIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjN0Y4QzhEIiB4PSIxLjUiIHk9IjEuNSIgd2lkdGg9IjEzIiBoZWlnaHQ9IjEzIiByeD0iMiIvPjxwYXRoIHN0cm9rZT0iIzdGOEM4RCIgZD0iTTEyIDVsLTUuNSA1LjVMNCA4Ii8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-checkbox-indeterminate-readonly {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHg9IjEiIHk9IjEiIHdpZHRoPSIxNCIgaGVpZ2h0PSIxNCIgcng9IjIiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBvcGFjaXR5PSIuNSI+PHVzZSBmaWxsPSIjRkZGIiB4bGluazpocmVmPSIjYSIvPjxyZWN0IHN0cm9rZT0iIzdGOEM4RCIgeD0iMS41IiB5PSIxLjUiIHdpZHRoPSIxMyIgaGVpZ2h0PSIxMyIgcng9IjIiLz48cGF0aCBkPSJNNCA4LjVoOCIgc3Ryb2tlPSIjN0Y4QzhEIi8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-checkbox-indeterminate {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHg9IjEiIHk9IjEiIHdpZHRoPSIxNCIgaGVpZ2h0PSIxNCIgcng9IjIiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIGZpbGw9IiNGRkYiIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjN0Y4QzhEIiB4PSIxLjUiIHk9IjEuNSIgd2lkdGg9IjEzIiBoZWlnaHQ9IjEzIiByeD0iMiIvPjxwYXRoIGQ9Ik00IDguNWg4IiBzdHJva2U9IiM3RjhDOEQiLz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-checkbox-unchecked-readonly {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHg9IjEiIHk9IjEiIHdpZHRoPSIxNCIgaGVpZ2h0PSIxNCIgcng9IjIiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBvcGFjaXR5PSIuNSI+PHVzZSBmaWxsPSIjRkZGIiB4bGluazpocmVmPSIjYSIvPjxyZWN0IHN0cm9rZT0iIzdGOEM4RCIgeD0iMS41IiB5PSIxLjUiIHdpZHRoPSIxMyIgaGVpZ2h0PSIxMyIgcng9IjIiLz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-checkbox-unchecked {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHg9IjEiIHk9IjEiIHdpZHRoPSIxNCIgaGVpZ2h0PSIxNCIgcng9IjIiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIGZpbGw9IiNGRkYiIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjN0Y4QzhEIiB4PSIxLjUiIHk9IjEuNSIgd2lkdGg9IjEzIiBoZWlnaHQ9IjEzIiByeD0iMiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-column {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMy41IDMuNXY4aDN2LTh6IiBzdHJva2U9IiM3RjhDOEQiIGZpbGw9Im5vbmUiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-columns {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNi41IDMuNXY4bTMtOHY4bTMtOHY4bS05LTh2OCIgc3Ryb2tlPSIjN0Y4QzhEIiBmaWxsPSJub25lIiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-contracted {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOSA0TDUgOGw0IDQiIHN0cm9rZT0iIzdGOEM4RCIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-copy {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiM3RjhDOEQiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHJlY3QgeD0iNC41IiB5PSI0LjUiIHdpZHRoPSI4IiBoZWlnaHQ9IjkiIHJ4PSIyIi8+PHBhdGggZD0iTTExIDIuNUg0LjVhMiAyIDAgMCAwLTIgMlYxMyIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-cut {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNi4zNDggNC45NDhjLjE2MS0uMzUuMjUyLS43MzUuMjUyLTEuMTQ4YTIuOCAyLjggMCAxIDAtNS42IDAgMi44IDIuOCAwIDAgMCAyLjggMi44Yy40MTMgMCAuNzk4LS4wOTEgMS4xNDgtLjI1Mkw2LjYgOCA0Ljk0OCA5LjY1MkEyLjcyOCAyLjcyOCAwIDAgMCAzLjggOS40YTIuOCAyLjggMCAxIDAgMCA1LjYgMi44IDIuOCAwIDAgMCAyLjgtMi44YzAtLjQxMy0uMDkxLS43OTgtLjI1Mi0xLjE0OEw4IDkuNGw0LjkgNC45SDE1di0uN0w2LjM0OCA0Ljk0OHpNMy44IDUuMmExLjQgMS40IDAgMSAxIDAtMi44IDEuNCAxLjQgMCAwIDEgMCAyLjh6bTAgOC40YTEuNCAxLjQgMCAxIDEgMC0yLjggMS40IDEuNCAwIDAgMSAwIDIuOHpNOCA4LjM1QS4zNDcuMzQ3IDAgMCAxIDcuNjUgOGMwLS4xOTYuMTU0LS4zNS4zNS0uMzUuMTk2IDAgLjM1LjE1NC4zNS4zNSAwIC4xOTYtLjE1NC4zNS0uMzUuMzV6bTQuOS02LjY1TDguNyA1LjlsMS40IDEuNEwxNSAyLjR2LS43aC0yLjF6IiBmaWxsPSIjN0Y4QzhEIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-desc {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNy41IDExVjNtLTMgNS41bDMgMyAzLTMiIHN0cm9rZT0iIzdGOEM4RCIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-expanded {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNiAxMmw0LTQtNC00IiBzdHJva2U9IiM3RjhDOEQiIGZpbGw9Im5vbmUiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-eye-slash {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiM3RjhDOEQiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHBhdGggZD0iTTggMy42MjVBNi44OTkgNi44OTkgMCAwIDAgMS41ODMgOCA2Ljg5OSA2Ljg5OSAwIDAgMCA4IDEyLjM3NSA2Ljg5OSA2Ljg5OSAwIDAgMCAxNC40MTcgOCA2Ljg5OSA2Ljg5OSAwIDAgMCA4IDMuNjI1eiIvPjxwYXRoIGQ9Ik04IDEwLjkxN2EyLjkxOCAyLjkxOCAwIDAgMSAwLTUuODM0IDIuOTE4IDIuOTE4IDAgMCAxIDAgNS44MzR6Ii8+PHBhdGggZD0iTTMuNSAzLjVsOSA5IiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIi8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-eye {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiM3RjhDOEQiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHBhdGggZD0iTTggMy42MjVBNi44OTkgNi44OTkgMCAwIDAgMS41ODMgOCA2Ljg5OSA2Ljg5OSAwIDAgMCA4IDEyLjM3NSA2Ljg5OSA2Ljg5OSAwIDAgMCAxNC40MTcgOCA2Ljg5OSA2Ljg5OSAwIDAgMCA4IDMuNjI1eiIvPjxwYXRoIGQ9Ik04IDEwLjkxN2EyLjkxOCAyLjkxOCAwIDAgMSAwLTUuODM0IDIuOTE4IDIuOTE4IDAgMCAxIDAgNS44MzR6Ii8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-filter {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMy41IDMuNWg5di41ODZhMSAxIDAgMCAxLS4yOTMuNzA3TDkuMjkzIDcuNzA3QTEgMSAwIDAgMCA5IDguNDE0VjEwbC0yIDEuNVY4LjQxNGExIDEgMCAwIDAtLjI5My0uNzA3TDMuNzkzIDQuNzkzYTEgMSAwIDAgMS0uMjkzLS43MDdWMy41eiIgc3Ryb2tlPSIjN0Y4QzhEIiBmaWxsPSJub25lIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-group {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiM3RjhDOEQiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHBhdGggZD0iTTMuNSA1LjVoMW0xIDJoMW0yIDBoNG0tNyAyaDFtMiAwaDRtLTYtNGg2IiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIi8+PHJlY3QgeD0iMS41IiB5PSIxLjUiIHdpZHRoPSIxMyIgaGVpZ2h0PSIxMyIgcng9IjIiLz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-indeterminate {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiM3RjhDOEQiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHBhdGggZD0iTTggNC42MjVjLTIuOTE3IDAtNS40MDguODE0LTYuNDE3IDMuMzc1IDEuMDEgMi41NiAzLjUgMy4zNzUgNi40MTcgMy4zNzVzNS40MDgtLjgxNCA2LjQxNy0zLjM3NWMtMS4wMS0yLjU2LTMuNS0zLjM3NS02LjQxNy0zLjM3NXoiLz48cGF0aCBkPSJNOCA5LjkxN0M2LjM5IDkuOTE3IDUuMDgzIDkuNjEgNS4wODMgOFM2LjM5IDYuMDgzIDggNi4wODNjMS42MSAwIDIuOTE3LjMwNyAyLjkxNyAxLjkxN1M5LjYxIDkuOTE3IDggOS45MTd6Ii8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-left {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMi41IDguNWw0LTRMOCA2IDYuNSA3LjVoN3YyaC03TDggMTFsLTEuNSAxLjV6IiBzdHJva2U9IiM3RjhDOEQiIGZpbGw9Im5vbmUiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-loading {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiM3RjhDOEQiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSI+PHBhdGggZD0iTTcuNSAxMC41djMiIG9wYWNpdHk9Ii44Ii8+PHBhdGggZD0iTTEwLjUgNy41aDMiIG9wYWNpdHk9Ii42Ii8+PHBhdGggZD0iTTEuNSA3LjVoMyIvPjxwYXRoIGQ9Ik03LjUgMS41djMiIG9wYWNpdHk9Ii40Ii8+PHBhdGggZD0iTTkuNSA1LjVMMTIgMyIgb3BhY2l0eT0iLjUiLz48cGF0aCBkPSJNOS41IDkuNUwxMiAxMiIgb3BhY2l0eT0iLjciLz48cGF0aCBkPSJNNS41IDkuNUwzIDEyIiBvcGFjaXR5PSIuOSIvPjxwYXRoIGQ9Ik01LjUgNS41TDMgMyIgb3BhY2l0eT0iLjMiLz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-menu {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMy41IDQuNWg5bS05IDNoOW0tOSAzaDkiIHN0cm9rZT0iIzdGOEM4RCIgZmlsbD0ibm9uZSIgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-minus {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMi41IDYuNWgxMXYyaC0xMXoiIHN0cm9rZT0iIzdGOEM4RCIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-none {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTEuNSAxMlY0bTMgMi41bC0zLTMtMyAzbS00IDQuNVYzbS0zIDUuNWwzIDMgMy0zIiBzdHJva2U9IiM3RjhDOEQiIGZpbGw9Im5vbmUiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-not-allowed {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNS45IDExLjAxMkEzLjc1IDMuNzUgMCAwIDAgMTEuMDEyIDUuOWwtNS4xMTQgNS4xMTN6TTQuNDg3IDkuNjAxTDkuNiA0LjQ4OEEzLjc1IDMuNzUgMCAwIDAgNC40ODggOS42ek03Ljc1IDEzLjVhNS43NSA1Ljc1IDAgMSAxIDAtMTEuNSA1Ljc1IDUuNzUgMCAwIDEgMCAxMS41eiIgc3Ryb2tlPSIjN0Y4QzhEIiBmaWxsPSJub25lIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-paste {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTAgM2MwLS41LS41LTEuNS0yLTEuNVM2IDIuNSA2IDNINGEyIDIgMCAwIDAtMiAydjdhMiAyIDAgMCAwIDIgMmg4YTIgMiAwIDAgMCAyLTJWNWEyIDIgMCAwIDAtMi0yaC0yem0tMiAuMjczYy4zNjcgMCAuNjY3LjI4Ni42NjcuNjM2IDAgLjM1LS4zLjYzNi0uNjY3LjYzNi0uMzY3IDAtLjY2Ny0uMjg2LS42NjctLjYzNiAwLS4zNS4zLS42MzYuNjY3LS42MzZ6TTEyIDEzSDRhMSAxIDAgMCAxLTEtMVY1YTEgMSAwIDAgMSAxLTFoMXYyaDZWNGgxYTEgMSAwIDAgMSAxIDF2N2ExIDEgMCAwIDEtMSAxeiIgZmlsbD0iIzdGOEM4RCIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-pin {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMi41IDEzLjVsNC00TTE0IDZjLS4zOS41MjktLjcyNC44NjItMSAxcy0uNjEuMTM4LTEgMGwtMiAyYy4xMzguOTIuMTM4IDEuNTg2IDAgMi0uMTM4LjQxNC0uNDcxLjc0OC0xIDFMNCA3Yy4wOC0uNDcxLjQxNC0uODA1IDEtMSAuNTg2LS4xOTUgMS4yNTItLjE5NSAyIDBsMi0yYy0uMTk1LS4yNzYtLjE5NS0uNjEgMC0xcy41MjktLjcyNCAxLTFsNCA0eiIgc3Ryb2tlPSIjN0Y4QzhEIiBmaWxsPSJub25lIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-pivot {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiM3RjhDOEQiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHBhdGggZD0iTTEzLjUgNC41aC05bTAgMHY5IiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIi8+PHBhdGggZD0iTTcuNSAxMi41bC0xLTEgMS0xbTUtM2wtMS0xLTEgMSIvPjxwYXRoIGQ9Ik00LjUgMTEuNWgtMm02LTl2Mm0tMy0ydjJtNi0ydjIiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiLz48cGF0aCBkPSJNMTEuNSA2LjV2M2EyIDIgMCAwIDEtMiAyaC0zIi8+PHBhdGggZD0iTTQuNSA4LjVoLTJtMi0zaC0yIiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIi8+PHJlY3QgeD0iMS41IiB5PSIxLjUiIHdpZHRoPSIxMyIgaGVpZ2h0PSIxMyIgcng9IjIiLz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-plus {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMi41IDYuNWg0di00aDJ2NGg0djJoLTR2NGgtMnYtNGgtNHoiIHN0cm9rZT0iIzdGOEM4RCIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-right {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTMuNSA3LjVsLTQgNEw4IDEwbDEuNS0xLjVoLTd2LTJoN0w4IDVsMS41LTEuNXoiIHN0cm9rZT0iIzdGOEM4RCIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-small-left {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOCA0TDQgOGw0IDQiIHN0cm9rZT0iIzdGOEM4RCIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-small-right {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOCAxMmw0LTQtNC00IiBzdHJva2U9IiM3RjhDOEQiIGZpbGw9Im5vbmUiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-small-up {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTIgOEw4IDQgNCA4IiBzdHJva2U9IiM3RjhDOEQiIGZpbGw9Im5vbmUiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-small-down {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNCA4bDQgNCA0LTQiIHN0cm9rZT0iIzdGOEM4RCIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-tick {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTIgNmwtNS41IDUuNUw0IDkiIHN0cm9rZT0iIzdGOEM4RCIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-cross {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTAuNSA1LjVsLTYgNm0wLTZsNiA2IiBzdHJva2U9IiM3RjhDOEQiIGZpbGw9Im5vbmUiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-tree-open {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNCA3bDQgNCA0LTQiIHN0cm9rZT0iIzdGOEM4RCIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-tree-closed {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNiAxMmw0LTQtNC00IiBzdHJva2U9IiM3RjhDOEQiIGZpbGw9Im5vbmUiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-icon-tree-indeterminate {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMy41IDcuNWg5IiBzdHJva2U9IiM3RjhDOEQiIGZpbGw9Im5vbmUiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham .ag-header-cell-menu-button .ag-icon-menu {\n display: block;\n height: 32px; }\n .ag-theme-balham .ag-icon-checkbox-checked:empty {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHg9IjEiIHk9IjEiIHdpZHRoPSIxNCIgaGVpZ2h0PSIxNCIgcng9IjIiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIGZpbGw9IiNGRkYiIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjMDA5MUVBIiB4PSIxLjUiIHk9IjEuNSIgd2lkdGg9IjEzIiBoZWlnaHQ9IjEzIiByeD0iMiIvPjxwYXRoIHN0cm9rZT0iIzAwOTFFQSIgZD0iTTEyIDVsLTUuNSA1LjVMNCA4Ii8+PC9nPjwvc3ZnPg==); }\n .ag-theme-balham .ag-menu {\n background: white;\n border-radius: 2px;\n box-shadow: none;\n padding: 4px;\n padding: 0;\n z-index: 5; }\n .ag-theme-balham .ag-menu .ag-menu-list {\n cursor: default;\n margin-bottom: 4px;\n margin-top: 4px;\n width: 100%; }\n .ag-theme-balham .ag-menu .ag-menu-option {\n line-height: 16px;\n padding-left: 8px;\n padding-right: 8px; }\n .ag-theme-balham .ag-menu .ag-menu-option > span {\n display: table-cell;\n vertical-align: middle; }\n .ag-theme-balham .ag-menu .ag-menu-option-active {\n background: #ECF0F1; }\n .ag-theme-balham .ag-menu .ag-menu-option-disabled {\n opacity: 0.5; }\n .ag-theme-balham .ag-menu .ag-menu-option-icon {\n padding-left: 4px;\n padding-right: 4px; }\n .ag-theme-balham .ag-menu .ag-menu-option-icon span {\n height: 16px;\n line-height: 0;\n margin-top: 4px; }\n .ag-theme-balham .ag-menu .ag-menu-option-shortcut {\n padding-left: 8px; }\n .ag-theme-balham .ag-menu .ag-menu-separator {\n margin-left: -4px; }\n .ag-theme-balham .ag-menu .ag-menu-separator > span {\n background-image: url(\"data:image/svg+xml;utf8,<svg width='1' height='8px' viewBox='0 0 1 8px' xmlns='http://www.w3.org/2000/svg'> <line x1='0' y1='4px' x2='1' y2='4px' stroke-width='1' stroke='#BDC3C7'/> </svg>\");\n height: 8px; }\n .ag-theme-balham .ag-menu .ag-menu-option-popup-pointer {\n width: 24px; }\n .ag-theme-balham.ag-dnd-ghost {\n background: white;\n border-radius: 2px;\n box-shadow: none;\n padding: 4px;\n border: 1px solid #BDC3C7;\n color: rgba(0, 0, 0, 0.54);\n font: 600 12px -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n height: 32px !important;\n line-height: 32px;\n margin: 0;\n padding: 0 8px;\n transform: translateY(8px);\n z-index: 5; }\n .ag-theme-balham.ag-dnd-ghost span,\n .ag-theme-balham.ag-dnd-ghost div {\n float: left;\n height: 100%;\n margin: 0;\n padding: 0; }\n .ag-theme-balham.ag-dnd-ghost .ag-dnd-ghost-icon {\n margin-right: 4px;\n opacity: 0.87; }\n .ag-theme-balham .ag-tab-header {\n background: #f5f7f7;\n min-width: 220px;\n width: 100%; }\n .ag-theme-balham .ag-tab-header .ag-tab {\n border-bottom: 2px solid transparent;\n height: 16px;\n text-align: center;\n vertical-align: middle; }\n .ag-theme-balham .ag-tab-header .ag-tab.ag-tab-selected .ag-icon-filter {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMy41IDMuNWg5di41ODZhMSAxIDAgMCAxLS4yOTMuNzA3TDkuMjkzIDcuNzA3QTEgMSAwIDAgMCA5IDguNDE0VjEwbC0yIDEuNVY4LjQxNGExIDEgMCAwIDAtLjI5My0uNzA3TDMuNzkzIDQuNzkzYTEgMSAwIDAgMS0uMjkzLS43MDdWMy41eiIgc3Ryb2tlPSIjMDA5MUVBIiBmaWxsPSJub25lIi8+PC9zdmc+);\n display: inline-block; }\n .ag-theme-balham .ag-tab-header .ag-tab.ag-tab-selected .ag-icon-columns {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNi41IDMuNXY4bTMtOHY4bTMtOHY4bS05LTh2OCIgc3Ryb2tlPSIjMDA5MUVBIiBmaWxsPSJub25lIiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIi8+PC9zdmc+);\n display: inline-block; }\n .ag-theme-balham .ag-tab-header .ag-tab.ag-tab-selected .ag-icon-menu {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMy41IDQuNWg5bS05IDNoOW0tOSAzaDkiIHN0cm9rZT0iIzAwOTFFQSIgZmlsbD0ibm9uZSIgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSIvPjwvc3ZnPg==);\n display: inline-block; }\n .ag-theme-balham .ag-tab-body {\n padding: 4px 0; }\n .ag-theme-balham .ag-tab-body .ag-filter-select {\n margin: 4px;\n width: calc(100% - 8px); }\n .ag-theme-balham .ag-tab-body .ag-menu-list {\n margin-bottom: 0;\n margin-top: 0; }\n .ag-theme-balham .ag-tab-body .ag-menu-list > div:first-child > span {\n padding-top: 0; }\n .ag-theme-balham .ag-tab-body .ag-menu-list > div:last-child > span {\n padding-bottom: 0; }\n .ag-theme-balham .ag-tab-body .ag-menu-list > div:last-child > .ag-menu-option-popup-pointer {\n background-position-y: 0; }\n .ag-theme-balham .ag-filter-select {\n margin: 4px;\n width: calc(100% - 8px); }\n .ag-theme-balham .ag-filter input[type=\"radio\"] {\n margin: 0 3px 0 6px;\n width: 12px;\n height: 17px;\n vertical-align: top; }\n .ag-theme-balham .ag-filter input[type=\"text\"],\n .ag-theme-balham .ag-filter input[type=\"date\"] {\n padding-left: 4px; }\n .ag-theme-balham .ag-filter label {\n display: block;\n padding-left: 4px; }\n .ag-theme-balham .ag-filter .ag-set-filter-list {\n height: 182px;\n padding-top: 4px; }\n .ag-theme-balham .ag-filter .ag-filter-header-container {\n box-sizing: border-box;\n height: 28px; }\n .ag-theme-balham .ag-filter .ag-filter-header-container:nth-child(2) {\n border-bottom: 1px solid #BDC3C7; }\n .ag-theme-balham .ag-filter .ag-filter-checkbox {\n float: left;\n height: 28px;\n margin-right: 4px;\n padding-top: 2px; }\n .ag-theme-balham .ag-filter .ag-filter-value {\n height: 28px;\n line-height: 14px; }\n .ag-theme-balham .ag-filter .ag-filter-apply-panel {\n display: flex;\n justify-content: flex-end;\n padding: 4px;\n padding-top: 8px; }\n .ag-theme-balham .ag-filter .ag-filter-apply-panel button + button {\n margin-left: 8px; }\n .ag-theme-balham .ag-column-select-panel .ag-column-select-column-group,\n .ag-theme-balham .ag-column-select-panel .ag-column-select-column {\n height: 16px;\n line-height: 16px;\n margin-left: 0; }\n .ag-theme-balham .ag-column-select-panel .ag-column-select-column-group span,\n .ag-theme-balham .ag-column-select-panel .ag-column-select-column span {\n float: left;\n height: 100%; }\n .ag-theme-balham .ag-column-select-panel .ag-column-select-column-group .ag-column-select-indent,\n .ag-theme-balham .ag-column-select-panel .ag-column-select-column .ag-column-select-indent {\n width: 8px; }\n .ag-theme-balham .ag-column-select-panel .ag-column-select-column-group .ag-column-select-checkbox,\n .ag-theme-balham .ag-column-select-panel .ag-column-select-column-group .ag-column-group-icons,\n .ag-theme-balham .ag-column-select-panel .ag-column-select-column .ag-column-select-checkbox,\n .ag-theme-balham .ag-column-select-panel .ag-column-select-column .ag-column-group-icons {\n margin-left: 4px;\n margin-right: 4px; }\n .ag-theme-balham .ag-column-select-panel .ag-column-container {\n padding-top: 4px; }\n .ag-theme-balham .ag-column-select-panel .ag-column-select-column.ag-toolpanel-add-group-indent {\n margin-left: 24px; }\n .ag-theme-balham .ag-column-tool-panel {\n display: flex; }\n .ag-theme-balham .ag-filter-body {\n flex-grow: 1;\n flex-shrink: 1;\n padding-right: 4px; }\n .ag-theme-balham .ag-column-tool-panel-item button {\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n font-size: 12px;\n height: 100%; }\n .ag-theme-balham .ag-filter-filter {\n margin-bottom: 4px; }\n .ag-theme-balham .ag-column-select-header {\n border-bottom: 1px solid #BDC3C7;\n box-sizing: border-box;\n height: 32px;\n padding-top: 4px; }\n .ag-theme-balham .ag-column-select-header label {\n display: block;\n padding-left: 4px; }\n .ag-theme-balham .ag-column-select-header label .ag-filter-checkbox {\n float: left;\n margin-right: 4px; }\n .ag-theme-balham .ag-column-select-header .ag-column-tool-panel a {\n margin: 0 4px;\n padding-top: 2px; }\n .ag-theme-balham .ag-group-child-count::before {\n content: \" \"; }\n .ag-theme-balham .ag-column-panel {\n border-right: 0; }\n .ag-theme-balham .ag-column-panel .ag-pivot-mode {\n border-bottom: 1px solid #BDC3C7;\n box-sizing: border-box;\n height: 32px;\n line-height: 32px; }\n .ag-theme-balham .ag-column-panel .ag-pivot-mode span {\n float: left;\n height: 100%; }\n .ag-theme-balham .ag-column-panel .ag-pivot-mode .ag-pivot-mode-select {\n margin-left: 4px; }\n .ag-theme-balham .ag-column-panel .ag-pivot-mode .ag-pivot-mode-select .ag-checkbox-label {\n margin-left: 4px; }\n .ag-theme-balham .ag-column-panel .ag-column-select-panel {\n border-bottom: 1px solid #BDC3C7;\n padding-bottom: 3px;\n padding-top: 0; }\n .ag-theme-balham .ag-column-panel .ag-column-drop {\n border-bottom: 1px solid #BDC3C7;\n clear: both;\n overflow: auto;\n padding: 4px 0;\n padding-bottom: 8px; }\n .ag-theme-balham .ag-column-panel .ag-column-drop .ag-icon {\n float: left;\n height: 20px;\n margin: 0 4px; }\n .ag-theme-balham .ag-column-panel .ag-column-drop .ag-column-drop-title {\n clear: right;\n float: left;\n height: 20px;\n line-height: 20px;\n width: calc(100% - 24px); }\n .ag-theme-balham .ag-column-panel .ag-column-drop .ag-column-drop-empty-message {\n clear: both;\n color: rgba(0, 0, 0, 0.38);\n font: 600 12px -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n line-height: 8px;\n padding-left: 16px;\n padding-right: 4px; }\n .ag-theme-balham .ag-column-panel .ag-column-drop:last-child {\n border-bottom: 0; }\n .ag-theme-balham .ag-filter-icon:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMy41IDMuNWg5di41ODZhMSAxIDAgMCAxLS4yOTMuNzA3TDkuMjkzIDcuNzA3QTEgMSAwIDAgMCA5IDguNDE0VjEwbC0yIDEuNVY4LjQxNGExIDEgMCAwIDAtLjI5My0uNzA3TDMuNzkzIDQuNzkzYTEgMSAwIDAgMS0uMjkzLS43MDdWMy41eiIgc3Ryb2tlPSIjN0Y4QzhEIiBmaWxsPSJub25lIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px; }\n .ag-theme-balham .ag-sort-ascending-icon:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNy41IDEyVjRtMyAyLjVsLTMtMy0zIDMiIHN0cm9rZT0iIzdGOEM4RCIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px; }\n .ag-theme-balham .ag-sort-descending-icon:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNy41IDExVjNtLTMgNS41bDMgMyAzLTMiIHN0cm9rZT0iIzdGOEM4RCIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px; }\n .ag-theme-balham .ag-sort-none-icon:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTEuNSAxMlY0bTMgMi41bC0zLTMtMyAzbS00IDQuNVYzbS0zIDUuNWwzIDMgMy0zIiBzdHJva2U9IiM3RjhDOEQiIGZpbGw9Im5vbmUiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px; }\n .ag-theme-balham .ag-numeric-header .ag-header-cell-label .ag-header-icon {\n margin-left: 0;\n margin-right: 4px; }\n .ag-theme-balham .ag-paging-panel {\n align-items: center;\n border-top: 1px solid #BDC3C7;\n color: rgba(0, 0, 0, 0.54);\n display: flex;\n height: 32px;\n justify-content: flex-end;\n padding: 0 12px; }\n .ag-theme-balham .ag-paging-panel > span {\n margin-left: 16px; }\n .ag-theme-balham button[ref=\"btFirst\"] {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTIgNEw4IDhsNCA0TTQuNSA0djgiIHN0cm9rZT0iIzdGOEM4RCIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n overflow: hidden;\n text-indent: 100%;\n appearance: none;\n border: 0;\n opacity: 0.54;\n padding: 0; }\n .ag-theme-balham button[ref=\"btFirst\"][disabled] {\n opacity: 0.38; }\n .ag-theme-balham button[ref=\"btPrevious\"] {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOSA0TDUgOGw0IDQiIHN0cm9rZT0iIzdGOEM4RCIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n overflow: hidden;\n text-indent: 100%;\n appearance: none;\n border: 0;\n opacity: 0.54;\n padding: 0; }\n .ag-theme-balham button[ref=\"btPrevious\"][disabled] {\n opacity: 0.38; }\n .ag-theme-balham button[ref=\"btLast\"] {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNCAxMmw0LTQtNC00bTcuNSAwdjgiIHN0cm9rZT0iIzdGOEM4RCIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n overflow: hidden;\n text-indent: 100%;\n appearance: none;\n border: 0;\n opacity: 0.54;\n padding: 0; }\n .ag-theme-balham button[ref=\"btLast\"][disabled] {\n opacity: 0.38; }\n .ag-theme-balham button[ref=\"btNext\"] {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNiAxMmw0LTQtNC00IiBzdHJva2U9IiM3RjhDOEQiIGZpbGw9Im5vbmUiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n overflow: hidden;\n text-indent: 100%;\n appearance: none;\n border: 0;\n opacity: 0.54;\n padding: 0; }\n .ag-theme-balham button[ref=\"btNext\"][disabled] {\n opacity: 0.38; }\n .ag-theme-balham .ag-rtl button[ref=\"btFirst\"] {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNCAxMmw0LTQtNC00bTcuNSAwdjgiIHN0cm9rZT0iIzdGOEM4RCIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px; }\n .ag-theme-balham .ag-rtl button[ref=\"btPrevious\"] {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNiAxMmw0LTQtNC00IiBzdHJva2U9IiM3RjhDOEQiIGZpbGw9Im5vbmUiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px; }\n .ag-theme-balham .ag-rtl button[ref=\"btLast\"] {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTIgNEw4IDhsNCA0TTQuNSA0djgiIHN0cm9rZT0iIzdGOEM4RCIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px; }\n .ag-theme-balham .ag-rtl button[ref=\"btNext\"] {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOSA0TDUgOGw0IDQiIHN0cm9rZT0iIzdGOEM4RCIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px; }\n .ag-theme-balham .ag-row-selected {\n background-color: #b7e4ff; }\n .ag-theme-balham .ag-cell-range-selected:not(.ag-cell-focus) {\n background-color: rgba(0, 145, 234, 0.2); }\n .ag-theme-balham .ag-cell-inline-editing {\n background: white;\n border-radius: 2px;\n box-shadow: none;\n padding: 4px;\n background: #f5f7f7;\n height: 40px;\n line-height: normal;\n padding: 12px;\n z-index: 2; }\n .ag-theme-balham .ag-cell-inline-editing select {\n height: auto; }\n .ag-theme-balham .ag-popup-editor {\n background: white;\n border-radius: 2px;\n box-shadow: none;\n padding: 4px;\n background: #f5f7f7;\n padding: 0;\n z-index: 1; }\n .ag-theme-balham .ag-popup-editor .ag-large-textarea textarea {\n height: auto;\n padding: 12px; }\n .ag-theme-balham .ag-rich-select {\n background-color: #f5f7f7;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNCA3bDQgNCA0LTQiIHN0cm9rZT0iIzdGOEM4RCIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position-x: calc(100% - 4px);\n background-position-y: 8px;\n background-repeat: no-repeat; }\n .ag-theme-balham .ag-rich-select .ag-rich-select-list {\n height: 182px; }\n .ag-theme-balham .ag-rich-select .ag-rich-select-value {\n height: 28px;\n line-height: 28px;\n padding-left: 12px; }\n .ag-theme-balham .ag-rich-select .ag-virtual-list-item {\n cursor: default;\n height: 28px;\n line-height: 28px; }\n .ag-theme-balham .ag-rich-select .ag-virtual-list-item:hover {\n background-color: #ECF0F1; }\n .ag-theme-balham .ag-rich-select .ag-rich-select-row {\n padding-left: 12px; }\n .ag-theme-balham .ag-rich-select .ag-rich-select-row-selected {\n background-color: #b7e4ff; }\n .ag-theme-balham .ag-floating-filter-body {\n float: left;\n height: 100%;\n margin-right: 0;\n width: calc(100% - 24px); }\n .ag-theme-balham .ag-floating-filter-body input {\n box-sizing: border-box; }\n .ag-theme-balham .ag-floating-filter-full-body input {\n box-sizing: border-box; }\n .ag-theme-balham .ag-floating-filter-button {\n float: right;\n line-height: 16px;\n margin-top: 10px; }\n .ag-theme-balham .ag-floating-filter-button button {\n appearance: none;\n background: transparent;\n border: 0;\n height: 16px;\n padding: 0;\n width: 16px; }\n .ag-theme-balham .ag-cell-label-container {\n height: 100%; }\n .ag-theme-balham .ag-header-group-cell-label {\n height: 100%; }\n .ag-theme-balham .ag-header-group-cell-label span {\n float: left;\n height: 100%; }\n .ag-theme-balham .ag-header-select-all {\n height: 100%;\n margin-right: 12px; }\n .ag-theme-balham .ag-header-select-all span {\n height: 100%; }\n .ag-theme-balham .ag-header-select-all:not(.ag-hidden) + .ag-cell-label-container {\n float: left;\n width: calc(100% - 16px - 12px); }\n .ag-theme-balham .ag-selection-checkbox span,\n .ag-theme-balham .ag-group-expanded span,\n .ag-theme-balham .ag-group-contracted span {\n margin-right: 12px; }\n .ag-theme-balham .ag-selection-checkbox span {\n position: relative;\n top: 2px; }\n .ag-theme-balham .ag-group-expanded .ag-icon-contracted:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNCA3bDQgNCA0LTQiIHN0cm9rZT0iIzdGOEM4RCIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px; }\n .ag-theme-balham .ag-column-drop-horizontal {\n background-color: #f5f7f7;\n height: 28px;\n line-height: 16px;\n padding-left: 12px; }\n .ag-theme-balham .ag-column-drop-horizontal.ag-width-half {\n margin-bottom: -3px; }\n .ag-theme-balham .ag-column-drop-horizontal span {\n float: left;\n height: 100%; }\n .ag-theme-balham .ag-column-drop-horizontal > div:first-child {\n float: left;\n height: 100%; }\n .ag-theme-balham .ag-column-drop-horizontal .ag-icon-group,\n .ag-theme-balham .ag-column-drop-horizontal .ag-icon-pivot {\n margin-right: 12px; }\n .ag-theme-balham .ag-column-drop-horizontal .ag-right-arrow {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTMuNSA3LjVsLTQgNEw4IDEwbDEuNS0xLjVoLTd2LTJoN0w4IDVsMS41LTEuNXoiIHN0cm9rZT0iIzdGOEM4RCIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px; }\n .ag-theme-balham .ag-column-drop-horizontal .ag-left-arrow {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMi41IDguNWw0LTRMOCA2IDYuNSA3LjVoN3YyaC03TDggMTFsLTEuNSAxLjV6IiBzdHJva2U9IiM3RjhDOEQiIGZpbGw9Im5vbmUiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px; }\n .ag-theme-balham .ag-column-drop-horizontal .ag-left-arrow,\n .ag-theme-balham .ag-column-drop-horizontal .ag-right-arrow {\n overflow: hidden;\n text-indent: 100%;\n height: 100%;\n margin: 0 4px;\n opacity: 0.54; }\n .ag-theme-balham .ag-column-drop-horizontal .ag-column-drop-empty-message {\n height: 100%;\n line-height: 28px;\n opacity: 0.38; }\n .ag-theme-balham .ag-column-drop-cell {\n background: #dde4e6;\n border-radius: 16px;\n box-sizing: border-box;\n height: 16px !important;\n margin-top: 4px;\n padding: 0 2px; }\n .ag-theme-balham .ag-column-drop-cell .ag-column-drop-cell-text {\n height: 100%;\n line-height: 16px;\n margin: 0 4px; }\n .ag-theme-balham .ag-column-drop-cell .ag-column-drop-cell-button {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiM3RjhDOEQiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHBhdGggZD0iTTEwLjUgNC41bC02IDYiLz48Y2lyY2xlIGN4PSI3LjUiIGN5PSI3LjUiIHI9IjUuNSIvPjxwYXRoIGQ9Ik00LjUgNC41bDYgNiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n overflow: hidden;\n text-indent: 100%;\n min-width: 16px;\n height: 100%;\n margin: 0 2px;\n opacity: 0.54; }\n .ag-theme-balham .ag-column-drop-cell .ag-column-drop-cell-button:hover {\n opacity: 0.87; }\n .ag-theme-balham .ag-column-drop-cell .ag-column-drag {\n margin-left: 8px;\n margin-top: 2px;\n width: 16px; }\n .ag-theme-balham .ag-select-agg-func-popup {\n background: white;\n border-radius: 2px;\n box-shadow: none;\n padding: 4px;\n background: white;\n height: 70px;\n padding: 0; }\n .ag-theme-balham .ag-select-agg-func-popup .ag-virtual-list-item {\n cursor: default;\n line-height: 20px;\n padding-left: 8px; }\n .ag-theme-balham .ag-set-filter-list,\n .ag-theme-balham .ag-menu-column-select-wrapper {\n width: auto; }\n .ag-theme-balham .ag-column-drop-vertical > .ag-column-drop-cell {\n float: left;\n margin-bottom: 4px;\n margin-left: 4px;\n margin-top: 0; }\n .ag-theme-balham .ag-cell-data-changed {\n background-color: rgba(22, 160, 133, 0.5) !important; }\n .ag-theme-balham .ag-cell-data-changed-animation {\n background-color: transparent;\n transition: background-color 1s; }\n .ag-theme-balham .ag-stub-cell {\n padding-left: 12px;\n padding-top: 4px; }\n .ag-theme-balham .ag-stub-cell .ag-loading-icon {\n float: left;\n height: 100%; }\n .ag-theme-balham .ag-stub-cell .ag-loading-text {\n float: left;\n height: 100%;\n margin-left: 4px;\n margin-top: 4px; }\n .ag-theme-balham .ag-rtl .ag-numeric-cell {\n text-align: left; }\n .ag-theme-balham .ag-rtl .ag-header-cell-menu-button {\n float: left; }\n .ag-theme-balham .ag-rtl .ag-header-cell-label {\n float: right;\n width: calc(100% - 16px); }\n .ag-theme-balham .ag-rtl .ag-header-cell-label > span {\n float: right; }\n .ag-theme-balham .ag-rtl .ag-header-cell-label .ag-header-icon {\n margin-top: 2px; }\n .ag-theme-balham .ag-rtl .ag-numeric-header .ag-header-cell-menu-button {\n float: right; }\n .ag-theme-balham .ag-rtl .ag-numeric-header .ag-header-cell-label {\n float: left; }\n .ag-theme-balham .ag-rtl .ag-numeric-header .ag-header-cell-label > span {\n float: left; }\n .ag-theme-balham .ag-rtl .ag-column-panel .ag-pivot-mode span {\n float: right; }\n .ag-theme-balham .ag-rtl .ag-column-panel .ag-pivot-mode .ag-pivot-mode-select {\n margin-right: 4px; }\n .ag-theme-balham .ag-rtl .ag-column-panel .ag-pivot-mode .ag-pivot-mode-select .ag-checkbox-label {\n margin-right: 4px; }\n .ag-theme-balham .ag-rtl .ag-column-panel .ag-column-drop .ag-icon {\n float: right; }\n .ag-theme-balham .ag-rtl .ag-column-panel .ag-column-drop .ag-column-drop-title {\n clear: left;\n float: right; }\n .ag-theme-balham .ag-rtl .ag-column-panel .ag-column-drop .ag-column-drop-empty-message {\n padding-left: 4px;\n padding-right: 16px; }\n .ag-theme-balham .ag-rtl .ag-filter-checkbox {\n float: right;\n margin-left: 4px; }\n .ag-theme-balham .ag-rtl .ag-column-select-panel .ag-column-select-column-group span,\n .ag-theme-balham .ag-rtl .ag-column-select-panel .ag-column-select-column span {\n float: right; }\n .ag-theme-balham .ag-rtl .ag-column-select-panel .ag-column-select-column-group .ag-column-select-checkbox,\n .ag-theme-balham .ag-rtl .ag-column-select-panel .ag-column-select-column-group .ag-column-group-icons,\n .ag-theme-balham .ag-rtl .ag-column-select-panel .ag-column-select-column .ag-column-select-checkbox,\n .ag-theme-balham .ag-rtl .ag-column-select-panel .ag-column-select-column .ag-column-group-icons {\n margin-left: 4px;\n margin-right: 4px; }\n .ag-theme-balham .ag-rtl .ag-column-select-panel .ag-column-select-column.ag-toolpanel-add-group-indent {\n margin-left: 0;\n margin-right: 24px; }\n .ag-theme-balham .ag-rtl .ag-icon-tree-closed {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOSA0TDUgOGw0IDQiIHN0cm9rZT0iIzdGOEM4RCIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px; }\n .ag-theme-balham .ag-rtl .ag-header-group-cell-label {\n height: 100%; }\n .ag-theme-balham .ag-rtl .ag-header-group-cell-label span {\n float: right;\n height: 100%; }\n .ag-theme-balham .ag-rtl .ag-header-select-all:not(.ag-hidden) + .ag-cell-label-container {\n float: right; }\n .ag-theme-balham .ag-rtl .ag-header-select-all {\n margin-left: 12px;\n margin-right: 0; }\n .ag-theme-balham .ag-rtl .ag-selection-checkbox span,\n .ag-theme-balham .ag-rtl .ag-group-expanded span,\n .ag-theme-balham .ag-rtl .ag-group-contracted span {\n margin-left: 12px;\n margin-right: 0; }\n .ag-theme-balham .ag-rtl .ag-column-drop-horizontal {\n padding-right: 12px; }\n .ag-theme-balham .ag-rtl .ag-column-drop-horizontal span {\n float: right; }\n .ag-theme-balham .ag-rtl .ag-column-drop-horizontal > div:first-child {\n float: right; }\n .ag-theme-balham .ag-rtl .ag-column-drop-horizontal .ag-icon-group,\n .ag-theme-balham .ag-rtl .ag-column-drop-horizontal .ag-icon-pivot {\n margin-left: 12px;\n margin-right: 0; }\n .ag-theme-balham .ag-rtl .ag-column-drop-horizontal .ag-right-arrow {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTMuNSA3LjVsLTQgNEw4IDEwbDEuNS0xLjVoLTd2LTJoN0w4IDVsMS41LTEuNXoiIHN0cm9rZT0iIzdGOEM4RCIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n height: 100%; }\n .ag-theme-balham .ag-rtl .ag-column-drop-horizontal .ag-left-arrow {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMi41IDguNWw0LTRMOCA2IDYuNSA3LjVoN3YyaC03TDggMTFsLTEuNSAxLjV6IiBzdHJva2U9IiM3RjhDOEQiIGZpbGw9Im5vbmUiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n height: 100%; }\n .ag-theme-balham .ag-rtl .ag-floating-filter-body {\n float: right;\n margin-left: 0; }\n .ag-theme-balham .ag-rtl .ag-floating-filter-button {\n float: left; }\n .ag-theme-balham .ag-rtl .ag-header .ag-header-cell-resize {\n left: -4px;\n right: auto; }\n .ag-theme-balham .ag-rtl .ag-header .ag-header-cell-resize::after {\n border-left: 1px solid #BDC3C7;\n border-right: 0; }\n .ag-theme-balham .ag-rtl .ag-column-select-header .ag-filter-body {\n margin-left: 4px;\n margin-right: 0; }\n .ag-theme-balham .ag-rtl .ag-column-drag {\n background-position-x: right; }\n .ag-theme-balham .ag-status-bar {\n background: white;\n border: 1px solid #BDC3C7;\n border-top: 0;\n color: rgba(0, 0, 0, 0.38);\n display: flex;\n font: 600 12px -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n justify-content: flex-end;\n padding: 8px 16px; }\n .ag-theme-balham .ag-status-bar .ag-status-bar-item {\n margin-right: 8px; }\n .ag-theme-balham .ag-status-bar .ag-status-bar-item span:nth-child(1)::after {\n content: \":\"; }\n .ag-theme-balham .ag-status-bar .ag-status-bar-item span:nth-child(2) {\n color: #000; }\n .ag-theme-balham .ag-details-row {\n box-sizing: border-box;\n padding: 20px; }\n .ag-theme-balham .ag-overlay-loading-wrapper {\n background-color: rgba(255, 255, 255, 0.5); }\n .ag-theme-balham .ag-overlay-loading-center {\n background: white;\n border-radius: 2px;\n box-shadow: none;\n padding: 4px; }\n .ag-theme-balham .ag-tool-panel {\n background-color: #f5f7f7;\n border-right: 1px solid #BDC3C7;\n border-top: 1px solid #BDC3C7; }\n .ag-theme-balham .ag-tool-panel .ag-side-buttons {\n border-bottom: 1px solid #BDC3C7; }\n .ag-theme-balham .ag-tool-panel .ag-side-buttons button {\n background: transparent;\n border: 0;\n border-right: 1px solid #BDC3C7;\n color: #000;\n height: 20px; }\n .ag-theme-balham .ag-tool-panel .ag-panel-container {\n border-right: 1px solid #BDC3C7;\n box-sizing: border-box; }\n .ag-theme-balham .ag-tool-panel.full-width .ag-panel-container {\n border-right: 0; }\n .ag-theme-balham .ag-tool-panel .ag-column-drop {\n min-height: 50px; }\n .ag-theme-balham .ag-rtl .ag-tool-panel .ag-panel-container {\n border-left: 1px solid #BDC3C7;\n border-right: 0; }\n .ag-theme-balham .ag-rtl .ag-tool-panel.full-width .ag-panel-container {\n border-left: 0; }\n .ag-theme-balham .ag-rtl .ag-tool-panel .ag-side-buttons button {\n border-left: 1px solid #BDC3C7;\n border-right: 0; }\n .ag-theme-balham .ag-column-name-filter {\n box-sizing: border-box;\n width: 100%; }\n .ag-theme-balham .sass-variables::after {\n content: '{ \"autoSizePadding\": \"12px\", \"headerHeight\": \"32px\", \"groupPaddingSize\": \"28px\", \"footerPaddingAddition\": \"16px\", \"virtualItemHeight\": \"28px\", \"aggFuncPopupHeight\": \"98px\", \"checkboxIndentWidth\": \"20px\", \"leafNodePadding\": \"12px\", \"rowHeight\": \"28px\", \"gridSize\": \"4px\", \"iconSize\": \"16px\" }';\n display: none; }\n .ag-theme-balham .ag-header {\n background-color: #f5f7f7;\n border-bottom: 1px solid #BDC3C7; }\n .ag-theme-balham .ag-cell-highlight {\n background-color: #0091EA !important; }\n .ag-theme-balham .ag-header-cell-resize {\n right: -3px; }\n .ag-theme-balham .ag-rtl .ag-header .ag-header-cell-resize {\n left: -4px; }\n .ag-theme-balham .ag-header-cell-resize::after {\n height: 16px;\n margin-top: 8px; }\n .ag-theme-balham .ag-header-cell::after,\n .ag-theme-balham .ag-header-group-cell::after {\n border-right: 1px solid rgba(189, 195, 199, 0.5);\n content: \" \";\n height: 16px;\n margin-top: 8px;\n position: absolute;\n right: 0;\n text-indent: -2000px;\n top: 0; }\n .ag-theme-balham .ag-column-drop-horizontal.ag-column-drop {\n border: 1px solid #BDC3C7;\n border-bottom: 0; }\n .ag-theme-balham .ag-column-drop-horizontal.ag-column-drop.ag-width-half:first-child {\n border-right: 0; }\n .ag-theme-balham .ag-row {\n border-bottom-color: #d9dcde; }\n .ag-theme-balham .ag-row-selected {\n border-bottom-color: #b7e4ff; }\n .ag-theme-balham .ag-row-drag {\n background-position-y: center; }\n .ag-theme-balham .ag-column-drag {\n background-position-y: center; }\n .ag-theme-balham .ag-column-drop-cell {\n height: 24px !important; }\n .ag-theme-balham .ag-column-drop-cell .ag-column-drop-cell-button {\n box-sizing: border-box;\n height: calc(100% - 4px);\n margin-bottom: 2px;\n margin-top: 2px; }\n .ag-theme-balham .ag-column-drop-cell .ag-column-drop-cell-button:hover {\n opacity: 1; }\n .ag-theme-balham .ag-column-drop-vertical .ag-column-drop-cell {\n margin-left: 8px;\n margin-right: 8px; }\n .ag-theme-balham .ag-column-drop-vertical .ag-column-drop-cell .ag-column-drop-cell-text {\n line-height: 24px;\n margin-left: 8px; }\n .ag-theme-balham .ag-column-drop-horizontal {\n background-color: #f5f7f7;\n height: 32px; }\n .ag-theme-balham .ag-column-drop-horizontal .ag-column-drop-empty-message {\n line-height: 32px; }\n .ag-theme-balham .ag-column-drop-horizontal .ag-column-drop-cell-text {\n line-height: 24px;\n margin-left: 8px; }\n .ag-theme-balham .ag-filter .ag-filter-header-container {\n height: 24px; }\n .ag-theme-balham .ag-root {\n border: 1px solid #BDC3C7; }\n .ag-theme-balham .ag-tab {\n box-sizing: initial; }\n .ag-theme-balham .ag-filter .ag-filter-value {\n line-height: 20px; }\n .ag-theme-balham .ag-column-panel {\n border-right: 1px solid #BDC3C7;\n border-bottom: 1px solid #BDC3C7; }\n .ag-theme-balham .ag-column-panel .ag-column-select-panel {\n padding-bottom: 8px; }\n .ag-theme-balham .ag-column-panel .ag-column-select-panel .ag-column-select-column-group,\n .ag-theme-balham .ag-column-panel .ag-column-select-panel .ag-column-select-column {\n height: 20px;\n line-height: 20px; }\n .ag-theme-balham .ag-column-panel .ag-column-drop {\n padding-bottom: 8px;\n padding-top: 8px; }\n .ag-theme-balham .ag-column-panel .ag-column-drop .ag-icon {\n margin-bottom: 4px; }\n .ag-theme-balham .ag-column-panel .ag-column-drop .ag-column-drop-title {\n display: inline-block;\n float: none;\n margin-bottom: 4px; }\n .ag-theme-balham .ag-column-panel .ag-column-drop .ag-column-drop-empty-message {\n height: 16px;\n line-height: 16px;\n padding-left: 24px; }\n .ag-theme-balham .ag-rtl .ag-tool-panel,\n .ag-theme-balham .ag-rtl .ag-column-panel {\n border-left: 1px solid #BDC3C7;\n border-right: 0; }\n .ag-theme-balham .ag-icon-expanded,\n .ag-theme-balham .ag-icon-contracted {\n transform: translateY(2px); }\n .ag-theme-balham .ag-rtl .ag-icon-expanded {\n transform: translateY(2px) rotate(180deg); }\n .ag-theme-balham .ag-menu-option {\n height: 28px;\n line-height: 28px; }\n .ag-theme-balham .ag-column-select-panel .ag-column-select-column-group,\n .ag-theme-balham .ag-column-select-panel .ag-column-select-column {\n height: 20px;\n line-height: 20px; }\n .ag-theme-balham .ag-filter-filter {\n margin-left: 4px;\n margin-right: 4px;\n width: calc(100% - 8px); }\n .ag-theme-balham .ag-tab-header {\n border-bottom: 1px solid #BDC3C7; }\n .ag-theme-balham .ag-tab-header .ag-tab {\n margin-bottom: -2px; }\n .ag-theme-balham .ag-tab-header .ag-tab.ag-tab-selected {\n background-color: white;\n border-bottom-color: transparent; }\n .ag-theme-balham .ag-tab-body,\n .ag-theme-balham .ag-popup-editor,\n .ag-theme-balham .ag-menu {\n background-color: white;\n color: #000; }\n .ag-theme-balham .ag-cell-inline-editing {\n height: 28px;\n padding: 0; }\n .ag-theme-balham .ag-cell-inline-editing input {\n box-sizing: border-box; }\n .ag-theme-balham .ag-details-row {\n background-color: white; }\n .ag-theme-balham .ag-overlay-loading-wrapper {\n background-color: rgba(255, 255, 255, 0.5); }\n .ag-theme-balham .ag-overlay-loading-center {\n background-color: #fff;\n border: 1px solid #BDC3C7;\n color: #000;\n padding: 16px; }\n .ag-theme-balham .ag-cell-range-selected-1:not(.ag-cell-focus) {\n background-color: rgba(0, 145, 234, 0.3); }\n .ag-theme-balham .ag-cell-range-selected-2:not(.ag-cell-focus) {\n background-color: rgba(0, 145, 234, 0.4); }\n .ag-theme-balham .ag-cell-range-selected-3:not(.ag-cell-focus) {\n background-color: rgba(0, 145, 234, 0.5); }\n .ag-theme-balham .ag-cell-range-selected-4:not(.ag-cell-focus) {\n background-color: rgba(0, 145, 234, 0.6); }\n .ag-theme-balham .ag-rich-select-value {\n border-bottom: 1px solid #BDC3C7; }\n .ag-theme-balham .ag-filter-apply-panel {\n border-top: 1px solid #BDC3C7; }\n .ag-theme-balham .ag-header-cell-moving {\n background-color: white; }\n", ""]);
36831
36832// exports
36833
36834
36835/***/ }),
36836/* 173 */
36837/***/ (function(module, exports, __webpack_require__) {
36838
36839// style-loader: Adds some css to the DOM by adding a <style> tag
36840
36841// load the styles
36842var content = __webpack_require__(174);
36843if(typeof content === 'string') content = [[module.i, content, '']];
36844// add the styles to the DOM
36845var update = __webpack_require__(15)(content, {});
36846if(content.locals) module.exports = content.locals;
36847// Hot Module Replacement
36848if(false) {
36849 // When the styles change, update the <style> tags
36850 if(!content.locals) {
36851 module.hot.accept("!!../../node_modules/css-loader/index.js!./ag-theme-balham-dark.css", function() {
36852 var newContent = require("!!../../node_modules/css-loader/index.js!./ag-theme-balham-dark.css");
36853 if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];
36854 update(newContent);
36855 });
36856 }
36857 // When the module is disposed, remove the <style> tags
36858 module.hot.dispose(function() { update(); });
36859}
36860
36861/***/ }),
36862/* 174 */
36863/***/ (function(module, exports, __webpack_require__) {
36864
36865exports = module.exports = __webpack_require__(14)();
36866// imports
36867
36868
36869// module
36870exports.push([module.i, ".ag-theme-balham-dark {\n background-color: #2d3436;\n color: #F5F5F5;\n font: 400 12px -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif; }\n .ag-theme-balham-dark .ag-header,\n .ag-theme-balham-dark .ag-row,\n .ag-theme-balham-dark .ag-header-cell,\n .ag-theme-balham-dark .ag-header-group-cell,\n .ag-theme-balham-dark .ag-rich-select-value,\n .ag-theme-balham-dark .ag-root {\n box-sizing: border-box; }\n .ag-theme-balham-dark .ag-menu, .ag-theme-balham-dark .ag-theme-balham-dark.ag-dnd-ghost, .ag-theme-balham-dark .ag-cell-inline-editing, .ag-theme-balham-dark .ag-popup-editor, .ag-theme-balham-dark .ag-select-agg-func-popup, .ag-theme-balham-dark .ag-overlay-loading-center {\n border: 1px solid #424242; }\n .ag-theme-balham-dark .ag-tab-header .ag-tab {\n border: 1px solid transparent;\n border-bottom-width: 0;\n display: inline-block;\n margin: 4px;\n margin-bottom: 0;\n padding: 4px 8px; }\n .ag-theme-balham-dark .ag-tab-header .ag-tab.ag-tab-selected {\n background-color: #2d3436;\n border-bottom: 2px solid #00B0FF;\n border-bottom: 2px solid #2d3436;\n border-color: #424242; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-1 {\n padding-left: 20px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-1 {\n padding-right: 20px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-1 {\n padding-left: 28px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-1 {\n padding-right: 28px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-2 {\n padding-left: 40px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-2 {\n padding-right: 40px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-2 {\n padding-left: 56px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-2 {\n padding-right: 56px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-3 {\n padding-left: 60px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-3 {\n padding-right: 60px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-3 {\n padding-left: 84px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-3 {\n padding-right: 84px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-4 {\n padding-left: 80px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-4 {\n padding-right: 80px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-4 {\n padding-left: 112px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-4 {\n padding-right: 112px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-5 {\n padding-left: 100px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-5 {\n padding-right: 100px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-5 {\n padding-left: 140px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-5 {\n padding-right: 140px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-6 {\n padding-left: 120px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-6 {\n padding-right: 120px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-6 {\n padding-left: 168px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-6 {\n padding-right: 168px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-7 {\n padding-left: 140px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-7 {\n padding-right: 140px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-7 {\n padding-left: 196px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-7 {\n padding-right: 196px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-8 {\n padding-left: 160px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-8 {\n padding-right: 160px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-8 {\n padding-left: 224px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-8 {\n padding-right: 224px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-9 {\n padding-left: 180px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-9 {\n padding-right: 180px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-9 {\n padding-left: 252px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-9 {\n padding-right: 252px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-10 {\n padding-left: 200px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-10 {\n padding-right: 200px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-10 {\n padding-left: 280px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-10 {\n padding-right: 280px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-11 {\n padding-left: 220px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-11 {\n padding-right: 220px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-11 {\n padding-left: 308px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-11 {\n padding-right: 308px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-12 {\n padding-left: 240px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-12 {\n padding-right: 240px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-12 {\n padding-left: 336px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-12 {\n padding-right: 336px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-13 {\n padding-left: 260px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-13 {\n padding-right: 260px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-13 {\n padding-left: 364px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-13 {\n padding-right: 364px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-14 {\n padding-left: 280px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-14 {\n padding-right: 280px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-14 {\n padding-left: 392px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-14 {\n padding-right: 392px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-15 {\n padding-left: 300px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-15 {\n padding-right: 300px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-15 {\n padding-left: 420px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-15 {\n padding-right: 420px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-16 {\n padding-left: 320px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-16 {\n padding-right: 320px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-16 {\n padding-left: 448px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-16 {\n padding-right: 448px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-17 {\n padding-left: 340px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-17 {\n padding-right: 340px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-17 {\n padding-left: 476px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-17 {\n padding-right: 476px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-18 {\n padding-left: 360px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-18 {\n padding-right: 360px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-18 {\n padding-left: 504px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-18 {\n padding-right: 504px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-19 {\n padding-left: 380px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-19 {\n padding-right: 380px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-19 {\n padding-left: 532px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-19 {\n padding-right: 532px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-20 {\n padding-left: 400px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-20 {\n padding-right: 400px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-20 {\n padding-left: 560px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-20 {\n padding-right: 560px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-21 {\n padding-left: 420px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-21 {\n padding-right: 420px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-21 {\n padding-left: 588px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-21 {\n padding-right: 588px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-22 {\n padding-left: 440px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-22 {\n padding-right: 440px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-22 {\n padding-left: 616px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-22 {\n padding-right: 616px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-23 {\n padding-left: 460px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-23 {\n padding-right: 460px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-23 {\n padding-left: 644px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-23 {\n padding-right: 644px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-24 {\n padding-left: 480px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-24 {\n padding-right: 480px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-24 {\n padding-left: 672px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-24 {\n padding-right: 672px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-25 {\n padding-left: 500px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-25 {\n padding-right: 500px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-25 {\n padding-left: 700px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-25 {\n padding-right: 700px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-26 {\n padding-left: 520px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-26 {\n padding-right: 520px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-26 {\n padding-left: 728px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-26 {\n padding-right: 728px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-27 {\n padding-left: 540px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-27 {\n padding-right: 540px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-27 {\n padding-left: 756px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-27 {\n padding-right: 756px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-28 {\n padding-left: 560px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-28 {\n padding-right: 560px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-28 {\n padding-left: 784px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-28 {\n padding-right: 784px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-29 {\n padding-left: 580px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-29 {\n padding-right: 580px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-29 {\n padding-left: 812px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-29 {\n padding-right: 812px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-30 {\n padding-left: 600px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-30 {\n padding-right: 600px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-30 {\n padding-left: 840px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-30 {\n padding-right: 840px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-31 {\n padding-left: 620px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-31 {\n padding-right: 620px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-31 {\n padding-left: 868px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-31 {\n padding-right: 868px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-32 {\n padding-left: 640px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-32 {\n padding-right: 640px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-32 {\n padding-left: 896px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-32 {\n padding-right: 896px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-33 {\n padding-left: 660px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-33 {\n padding-right: 660px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-33 {\n padding-left: 924px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-33 {\n padding-right: 924px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-34 {\n padding-left: 680px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-34 {\n padding-right: 680px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-34 {\n padding-left: 952px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-34 {\n padding-right: 952px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-35 {\n padding-left: 700px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-35 {\n padding-right: 700px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-35 {\n padding-left: 980px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-35 {\n padding-right: 980px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-36 {\n padding-left: 720px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-36 {\n padding-right: 720px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-36 {\n padding-left: 1008px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-36 {\n padding-right: 1008px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-37 {\n padding-left: 740px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-37 {\n padding-right: 740px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-37 {\n padding-left: 1036px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-37 {\n padding-right: 1036px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-38 {\n padding-left: 760px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-38 {\n padding-right: 760px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-38 {\n padding-left: 1064px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-38 {\n padding-right: 1064px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-39 {\n padding-left: 780px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-39 {\n padding-right: 780px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-39 {\n padding-left: 1092px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-39 {\n padding-right: 1092px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-40 {\n padding-left: 800px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-40 {\n padding-right: 800px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-40 {\n padding-left: 1120px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-40 {\n padding-right: 1120px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-41 {\n padding-left: 820px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-41 {\n padding-right: 820px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-41 {\n padding-left: 1148px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-41 {\n padding-right: 1148px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-42 {\n padding-left: 840px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-42 {\n padding-right: 840px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-42 {\n padding-left: 1176px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-42 {\n padding-right: 1176px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-43 {\n padding-left: 860px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-43 {\n padding-right: 860px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-43 {\n padding-left: 1204px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-43 {\n padding-right: 1204px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-44 {\n padding-left: 880px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-44 {\n padding-right: 880px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-44 {\n padding-left: 1232px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-44 {\n padding-right: 1232px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-45 {\n padding-left: 900px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-45 {\n padding-right: 900px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-45 {\n padding-left: 1260px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-45 {\n padding-right: 1260px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-46 {\n padding-left: 920px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-46 {\n padding-right: 920px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-46 {\n padding-left: 1288px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-46 {\n padding-right: 1288px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-47 {\n padding-left: 940px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-47 {\n padding-right: 940px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-47 {\n padding-left: 1316px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-47 {\n padding-right: 1316px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-48 {\n padding-left: 960px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-48 {\n padding-right: 960px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-48 {\n padding-left: 1344px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-48 {\n padding-right: 1344px; }\n .ag-theme-balham-dark .ag-ltr .ag-toolpanel-indent-49 {\n padding-left: 980px; }\n .ag-theme-balham-dark .ag-rtl .ag-toolpanel-indent-49 {\n padding-right: 980px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-indent-49 {\n padding-left: 1372px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-indent-49 {\n padding-right: 1372px; }\n .ag-theme-balham-dark .ag-ltr .ag-row-group-leaf-indent {\n margin-left: 28px; }\n .ag-theme-balham-dark .ag-rtl .ag-row-group-leaf-indent {\n margin-right: 28px; }\n .ag-theme-balham-dark .ag-rtl .ag-cell-first-right-pinned {\n border-left: 1px solid #424242; }\n .ag-theme-balham-dark .ag-ltr .ag-cell-first-right-pinned {\n border-left: 1px solid #424242; }\n .ag-theme-balham-dark .ag-rtl .ag-cell-last-left-pinned {\n border-right: 1px solid #424242; }\n .ag-theme-balham-dark .ag-ltr .ag-cell-last-left-pinned {\n border-right: 1px solid #424242; }\n .ag-theme-balham-dark .ag-value-change-delta {\n padding-right: 2px; }\n .ag-theme-balham-dark .ag-value-change-delta-up {\n color: #43a047; }\n .ag-theme-balham-dark .ag-value-change-delta-down {\n color: #e53935; }\n .ag-theme-balham-dark .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 .ag-theme-balham-dark .ag-value-change-value-highlight {\n background-color: rgba(22, 160, 133, 0.5);\n transition: background-color 0.1s; }\n .ag-theme-balham-dark .ag-header {\n background-color: #1c1f20;\n color: rgba(245, 245, 245, 0.64);\n font: 600 12px -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif; }\n .ag-theme-balham-dark .ag-header-row {\n border-bottom: 1px solid #424242;\n box-sizing: border-box; }\n .ag-theme-balham-dark .ag-row {\n border-bottom: 1px solid #424242;\n box-sizing: border-box; }\n .ag-theme-balham-dark .ag-row-odd {\n background-color: #262c2e; }\n .ag-theme-balham-dark .ag-row-even {\n background-color: #2d3436; }\n .ag-theme-balham-dark .ag-row-hover {\n background-color: #3d4749; }\n .ag-theme-balham-dark .ag-numeric-cell {\n text-align: right; }\n .ag-theme-balham-dark .ag-header-cell-label {\n display: flex;\n float: left;\n height: 100%;\n width: calc(100% - 16px); }\n .ag-theme-balham-dark .ag-header-cell-label span {\n height: 100%; }\n .ag-theme-balham-dark .ag-header-cell-label > span {\n float: left; }\n .ag-theme-balham-dark .ag-header-cell-label .ag-header-icon {\n background-position-y: 10px;\n background-size: 14px 14px;\n height: 100%;\n margin: 0;\n margin-left: 4px;\n opacity: 0.87; }\n .ag-theme-balham-dark .ag-header-cell-label .ag-header-cell-text {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap; }\n .ag-theme-balham-dark .ag-numeric-header .ag-header-cell-label {\n flex-direction: row-reverse;\n float: right; }\n .ag-theme-balham-dark .ag-numeric-header .ag-header-cell-label > span {\n float: right; }\n .ag-theme-balham-dark .ag-numeric-header .ag-header-cell-menu-button {\n float: left; }\n .ag-theme-balham-dark .ag-header-group-text {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap; }\n .ag-theme-balham-dark .ag-header-cell,\n .ag-theme-balham-dark .ag-header-group-cell {\n line-height: 32px;\n padding-left: 12px;\n padding-right: 12px; }\n .ag-theme-balham-dark .ag-cell {\n line-height: 26px;\n padding-left: 12px;\n padding-right: 12px;\n border: 1px solid transparent;\n padding-left: 11px;\n padding-right: 11px; }\n .ag-theme-balham-dark .ag-row-drag {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMy41IDIuNXYxbTAgMnYxbTAgMnYxbTMtN3YxbTAgMnYxbTAgMnYxbTMtN3YxbTAgMnYxbTAgMnYxbTMtN3YxbTAgMnYxbTAgMnYxIiBzdHJva2U9IiNFQ0YwRjEiIGZpbGw9Im5vbmUiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n background-position-x: left;\n background-position-y: 4px;\n float: left;\n height: 100%;\n width: 28px; }\n .ag-theme-balham-dark .ag-column-drag {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMy41IDIuNXYxbTAgMnYxbTAgMnYxbTMtN3YxbTAgMnYxbTAgMnYxbTMtN3YxbTAgMnYxbTAgMnYxbTMtN3YxbTAgMnYxbTAgMnYxIiBzdHJva2U9IiNFQ0YwRjEiIGZpbGw9Im5vbmUiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n background-position-x: left;\n background-position-y: 4px !important;\n height: 100%;\n min-width: 20px; }\n .ag-theme-balham-dark .ag-row-dragging {\n opacity: 0.5;\n z-index: 10000; }\n .ag-theme-balham-dark .ag-ltr .ag-cell-focus {\n border: 1px solid #00B0FF;\n outline: initial; }\n .ag-theme-balham-dark .ag-rtl .ag-cell-focus {\n border: 1px solid #00B0FF;\n outline: initial; }\n .ag-theme-balham-dark .ag-header-cell-resize {\n position: absolute;\n right: -4px;\n width: 8px;\n z-index: 4; }\n .ag-theme-balham-dark .ag-header-cell-resize::after {\n border-right: 1px solid #424242;\n box-sizing: content-box;\n content: \"resize\";\n display: block;\n height: 16px;\n margin-top: 8px;\n overflow: hidden;\n text-indent: 4px;\n width: 4px; }\n .ag-theme-balham-dark .ag-icon-aggregation {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiNFQ0YwRjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHBhdGggZD0iTTEwLjUgNlY0LjVoLTV2LjUzMmExIDEgMCAwIDAgLjM2Ljc2OGwxLjcxOCAxLjQzMmExIDEgMCAwIDEgMCAxLjUzNkw1Ljg2IDEwLjJhMSAxIDAgMCAwLS4zNi43Njh2LjUzMmg1VjEwIi8+PHJlY3QgeD0iMS41IiB5PSIxLjUiIHdpZHRoPSIxMyIgaGVpZ2h0PSIxMyIgcng9IjIiLz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-arrows {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNy41IDE0VjNNMiA4LjVoMTFtLTcuNSA0bDIgMiAyLTJtMC04bC0yLTItMiAybS0yIDJsLTIgMiAyIDJtOCAwbDItMi0yLTIiIHN0cm9rZT0iI0VDRjBGMSIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-asc {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNy41IDEyVjRtMyAyLjVsLTMtMy0zIDMiIHN0cm9rZT0iI0VDRjBGMSIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-checkbox-checked-readonly {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHg9IjEiIHk9IjEiIHdpZHRoPSIxNCIgaGVpZ2h0PSIxNCIgcng9IjIiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBvcGFjaXR5PSIuNSI+PHVzZSBmaWxsPSIjMkQzNDM2IiB4bGluazpocmVmPSIjYSIvPjxyZWN0IHN0cm9rZT0iI0VDRjBGMSIgeD0iMS41IiB5PSIxLjUiIHdpZHRoPSIxMyIgaGVpZ2h0PSIxMyIgcng9IjIiLz48cGF0aCBzdHJva2U9IiNFQ0YwRjEiIGQ9Ik0xMiA1bC01LjUgNS41TDQgOCIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-checkbox-checked {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHg9IjEiIHk9IjEiIHdpZHRoPSIxNCIgaGVpZ2h0PSIxNCIgcng9IjIiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIGZpbGw9IiMyRDM0MzYiIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjRUNGMEYxIiB4PSIxLjUiIHk9IjEuNSIgd2lkdGg9IjEzIiBoZWlnaHQ9IjEzIiByeD0iMiIvPjxwYXRoIHN0cm9rZT0iI0VDRjBGMSIgZD0iTTEyIDVsLTUuNSA1LjVMNCA4Ii8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-checkbox-indeterminate-readonly {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHg9IjEiIHk9IjEiIHdpZHRoPSIxNCIgaGVpZ2h0PSIxNCIgcng9IjIiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBvcGFjaXR5PSIuNSI+PHVzZSBmaWxsPSIjMkQzNDM2IiB4bGluazpocmVmPSIjYSIvPjxyZWN0IHN0cm9rZT0iI0VDRjBGMSIgeD0iMS41IiB5PSIxLjUiIHdpZHRoPSIxMyIgaGVpZ2h0PSIxMyIgcng9IjIiLz48cGF0aCBkPSJNNCA4LjVoOCIgc3Ryb2tlPSIjRUNGMEYxIi8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-checkbox-indeterminate {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHg9IjEiIHk9IjEiIHdpZHRoPSIxNCIgaGVpZ2h0PSIxNCIgcng9IjIiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIGZpbGw9IiMyRDM0MzYiIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjRUNGMEYxIiB4PSIxLjUiIHk9IjEuNSIgd2lkdGg9IjEzIiBoZWlnaHQ9IjEzIiByeD0iMiIvPjxwYXRoIGQ9Ik00IDguNWg4IiBzdHJva2U9IiNFQ0YwRjEiLz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-checkbox-unchecked-readonly {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHg9IjEiIHk9IjEiIHdpZHRoPSIxNCIgaGVpZ2h0PSIxNCIgcng9IjIiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIiBvcGFjaXR5PSIuNSI+PHVzZSBmaWxsPSIjMkQzNDM2IiB4bGluazpocmVmPSIjYSIvPjxyZWN0IHN0cm9rZT0iI0VDRjBGMSIgeD0iMS41IiB5PSIxLjUiIHdpZHRoPSIxMyIgaGVpZ2h0PSIxMyIgcng9IjIiLz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-checkbox-unchecked {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHg9IjEiIHk9IjEiIHdpZHRoPSIxNCIgaGVpZ2h0PSIxNCIgcng9IjIiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIGZpbGw9IiMyRDM0MzYiIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjRUNGMEYxIiB4PSIxLjUiIHk9IjEuNSIgd2lkdGg9IjEzIiBoZWlnaHQ9IjEzIiByeD0iMiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-column {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMy41IDMuNXY4aDN2LTh6IiBzdHJva2U9IiNFQ0YwRjEiIGZpbGw9Im5vbmUiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-columns {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNi41IDMuNXY4bTMtOHY4bTMtOHY4bS05LTh2OCIgc3Ryb2tlPSIjRUNGMEYxIiBmaWxsPSJub25lIiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-contracted {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOSA0TDUgOGw0IDQiIHN0cm9rZT0iI0VDRjBGMSIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-copy {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiNFQ0YwRjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHJlY3QgeD0iNC41IiB5PSI0LjUiIHdpZHRoPSI4IiBoZWlnaHQ9IjkiIHJ4PSIyIi8+PHBhdGggZD0iTTExIDIuNUg0LjVhMiAyIDAgMCAwLTIgMlYxMyIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-cut {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNi4zNDggNC45NDhjLjE2MS0uMzUuMjUyLS43MzUuMjUyLTEuMTQ4YTIuOCAyLjggMCAxIDAtNS42IDAgMi44IDIuOCAwIDAgMCAyLjggMi44Yy40MTMgMCAuNzk4LS4wOTEgMS4xNDgtLjI1Mkw2LjYgOCA0Ljk0OCA5LjY1MkEyLjcyOCAyLjcyOCAwIDAgMCAzLjggOS40YTIuOCAyLjggMCAxIDAgMCA1LjYgMi44IDIuOCAwIDAgMCAyLjgtMi44YzAtLjQxMy0uMDkxLS43OTgtLjI1Mi0xLjE0OEw4IDkuNGw0LjkgNC45SDE1di0uN0w2LjM0OCA0Ljk0OHpNMy44IDUuMmExLjQgMS40IDAgMSAxIDAtMi44IDEuNCAxLjQgMCAwIDEgMCAyLjh6bTAgOC40YTEuNCAxLjQgMCAxIDEgMC0yLjggMS40IDEuNCAwIDAgMSAwIDIuOHpNOCA4LjM1QS4zNDcuMzQ3IDAgMCAxIDcuNjUgOGMwLS4xOTYuMTU0LS4zNS4zNS0uMzUuMTk2IDAgLjM1LjE1NC4zNS4zNSAwIC4xOTYtLjE1NC4zNS0uMzUuMzV6bTQuOS02LjY1TDguNyA1LjlsMS40IDEuNEwxNSAyLjR2LS43aC0yLjF6IiBmaWxsPSIjRUNGMEYxIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-desc {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNy41IDExVjNtLTMgNS41bDMgMyAzLTMiIHN0cm9rZT0iI0VDRjBGMSIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-expanded {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNiAxMmw0LTQtNC00IiBzdHJva2U9IiNFQ0YwRjEiIGZpbGw9Im5vbmUiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-eye-slash {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiNFQ0YwRjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHBhdGggZD0iTTggMy42MjVBNi44OTkgNi44OTkgMCAwIDAgMS41ODMgOCA2Ljg5OSA2Ljg5OSAwIDAgMCA4IDEyLjM3NSA2Ljg5OSA2Ljg5OSAwIDAgMCAxNC40MTcgOCA2Ljg5OSA2Ljg5OSAwIDAgMCA4IDMuNjI1eiIvPjxwYXRoIGQ9Ik04IDEwLjkxN2EyLjkxOCAyLjkxOCAwIDAgMSAwLTUuODM0IDIuOTE4IDIuOTE4IDAgMCAxIDAgNS44MzR6Ii8+PHBhdGggZD0iTTMuNSAzLjVsOSA5IiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIi8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-eye {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiNFQ0YwRjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHBhdGggZD0iTTggMy42MjVBNi44OTkgNi44OTkgMCAwIDAgMS41ODMgOCA2Ljg5OSA2Ljg5OSAwIDAgMCA4IDEyLjM3NSA2Ljg5OSA2Ljg5OSAwIDAgMCAxNC40MTcgOCA2Ljg5OSA2Ljg5OSAwIDAgMCA4IDMuNjI1eiIvPjxwYXRoIGQ9Ik04IDEwLjkxN2EyLjkxOCAyLjkxOCAwIDAgMSAwLTUuODM0IDIuOTE4IDIuOTE4IDAgMCAxIDAgNS44MzR6Ii8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-filter {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMy41IDMuNWg5di41ODZhMSAxIDAgMCAxLS4yOTMuNzA3TDkuMjkzIDcuNzA3QTEgMSAwIDAgMCA5IDguNDE0VjEwbC0yIDEuNVY4LjQxNGExIDEgMCAwIDAtLjI5My0uNzA3TDMuNzkzIDQuNzkzYTEgMSAwIDAgMS0uMjkzLS43MDdWMy41eiIgc3Ryb2tlPSIjRUNGMEYxIiBmaWxsPSJub25lIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-group {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiNFQ0YwRjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHBhdGggZD0iTTMuNSA1LjVoMW0xIDJoMW0yIDBoNG0tNyAyaDFtMiAwaDRtLTYtNGg2IiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIi8+PHJlY3QgeD0iMS41IiB5PSIxLjUiIHdpZHRoPSIxMyIgaGVpZ2h0PSIxMyIgcng9IjIiLz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-indeterminate {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiNFQ0YwRjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHBhdGggZD0iTTggNC42MjVjLTIuOTE3IDAtNS40MDguODE0LTYuNDE3IDMuMzc1IDEuMDEgMi41NiAzLjUgMy4zNzUgNi40MTcgMy4zNzVzNS40MDgtLjgxNCA2LjQxNy0zLjM3NWMtMS4wMS0yLjU2LTMuNS0zLjM3NS02LjQxNy0zLjM3NXoiLz48cGF0aCBkPSJNOCA5LjkxN0M2LjM5IDkuOTE3IDUuMDgzIDkuNjEgNS4wODMgOFM2LjM5IDYuMDgzIDggNi4wODNjMS42MSAwIDIuOTE3LjMwNyAyLjkxNyAxLjkxN1M5LjYxIDkuOTE3IDggOS45MTd6Ii8+PC9nPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-left {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMi41IDguNWw0LTRMOCA2IDYuNSA3LjVoN3YyaC03TDggMTFsLTEuNSAxLjV6IiBzdHJva2U9IiNFQ0YwRjEiIGZpbGw9Im5vbmUiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-loading {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiNFQ0YwRjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCIgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSI+PHBhdGggZD0iTTcuNSAxMC41djMiIG9wYWNpdHk9Ii44Ii8+PHBhdGggZD0iTTEwLjUgNy41aDMiIG9wYWNpdHk9Ii42Ii8+PHBhdGggZD0iTTEuNSA3LjVoMyIvPjxwYXRoIGQ9Ik03LjUgMS41djMiIG9wYWNpdHk9Ii40Ii8+PHBhdGggZD0iTTkuNSA1LjVMMTIgMyIgb3BhY2l0eT0iLjUiLz48cGF0aCBkPSJNOS41IDkuNUwxMiAxMiIgb3BhY2l0eT0iLjciLz48cGF0aCBkPSJNNS41IDkuNUwzIDEyIiBvcGFjaXR5PSIuOSIvPjxwYXRoIGQ9Ik01LjUgNS41TDMgMyIgb3BhY2l0eT0iLjMiLz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-menu {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMy41IDQuNWg5bS05IDNoOW0tOSAzaDkiIHN0cm9rZT0iI0VDRjBGMSIgZmlsbD0ibm9uZSIgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-minus {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMi41IDYuNWgxMXYyaC0xMXoiIHN0cm9rZT0iI0VDRjBGMSIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-none {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTEuNSAxMlY0bTMgMi41bC0zLTMtMyAzbS00IDQuNVYzbS0zIDUuNWwzIDMgMy0zIiBzdHJva2U9IiNFQ0YwRjEiIGZpbGw9Im5vbmUiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-not-allowed {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNS45IDExLjAxMkEzLjc1IDMuNzUgMCAwIDAgMTEuMDEyIDUuOWwtNS4xMTQgNS4xMTN6TTQuNDg3IDkuNjAxTDkuNiA0LjQ4OEEzLjc1IDMuNzUgMCAwIDAgNC40ODggOS42ek03Ljc1IDEzLjVhNS43NSA1Ljc1IDAgMSAxIDAtMTEuNSA1Ljc1IDUuNzUgMCAwIDEgMCAxMS41eiIgc3Ryb2tlPSIjRUNGMEYxIiBmaWxsPSJub25lIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-paste {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTAgM2MwLS41LS41LTEuNS0yLTEuNVM2IDIuNSA2IDNINGEyIDIgMCAwIDAtMiAydjdhMiAyIDAgMCAwIDIgMmg4YTIgMiAwIDAgMCAyLTJWNWEyIDIgMCAwIDAtMi0yaC0yem0tMiAuMjczYy4zNjcgMCAuNjY3LjI4Ni42NjcuNjM2IDAgLjM1LS4zLjYzNi0uNjY3LjYzNi0uMzY3IDAtLjY2Ny0uMjg2LS42NjctLjYzNiAwLS4zNS4zLS42MzYuNjY3LS42MzZ6TTEyIDEzSDRhMSAxIDAgMCAxLTEtMVY1YTEgMSAwIDAgMSAxLTFoMXYyaDZWNGgxYTEgMSAwIDAgMSAxIDF2N2ExIDEgMCAwIDEtMSAxeiIgZmlsbD0iI0VDRjBGMSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-pin {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMi41IDEzLjVsNC00TTE0IDZjLS4zOS41MjktLjcyNC44NjItMSAxcy0uNjEuMTM4LTEgMGwtMiAyYy4xMzguOTIuMTM4IDEuNTg2IDAgMi0uMTM4LjQxNC0uNDcxLjc0OC0xIDFMNCA3Yy4wOC0uNDcxLjQxNC0uODA1IDEtMSAuNTg2LS4xOTUgMS4yNTItLjE5NSAyIDBsMi0yYy0uMTk1LS4yNzYtLjE5NS0uNjEgMC0xcy41MjktLjcyNCAxLTFsNCA0eiIgc3Ryb2tlPSIjRUNGMEYxIiBmaWxsPSJub25lIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-pivot {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiNFQ0YwRjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHBhdGggZD0iTTEzLjUgNC41aC05bTAgMHY5IiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIi8+PHBhdGggZD0iTTcuNSAxMi41bC0xLTEgMS0xbTUtM2wtMS0xLTEgMSIvPjxwYXRoIGQ9Ik00LjUgMTEuNWgtMm02LTl2Mm0tMy0ydjJtNi0ydjIiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiLz48cGF0aCBkPSJNMTEuNSA2LjV2M2EyIDIgMCAwIDEtMiAyaC0zIi8+PHBhdGggZD0iTTQuNSA4LjVoLTJtMi0zaC0yIiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIi8+PHJlY3QgeD0iMS41IiB5PSIxLjUiIHdpZHRoPSIxMyIgaGVpZ2h0PSIxMyIgcng9IjIiLz48L2c+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-plus {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMi41IDYuNWg0di00aDJ2NGg0djJoLTR2NGgtMnYtNGgtNHoiIHN0cm9rZT0iI0VDRjBGMSIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-right {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTMuNSA3LjVsLTQgNEw4IDEwbDEuNS0xLjVoLTd2LTJoN0w4IDVsMS41LTEuNXoiIHN0cm9rZT0iI0VDRjBGMSIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-small-left {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOCA0TDQgOGw0IDQiIHN0cm9rZT0iI0VDRjBGMSIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-small-right {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOCAxMmw0LTQtNC00IiBzdHJva2U9IiNFQ0YwRjEiIGZpbGw9Im5vbmUiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-small-up {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTIgOEw4IDQgNCA4IiBzdHJva2U9IiNFQ0YwRjEiIGZpbGw9Im5vbmUiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-small-down {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNCA4bDQgNCA0LTQiIHN0cm9rZT0iI0VDRjBGMSIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-tick {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTIgNmwtNS41IDUuNUw0IDkiIHN0cm9rZT0iI0VDRjBGMSIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-cross {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTAuNSA1LjVsLTYgNm0wLTZsNiA2IiBzdHJva2U9IiNFQ0YwRjEiIGZpbGw9Im5vbmUiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-tree-open {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNCA3bDQgNCA0LTQiIHN0cm9rZT0iI0VDRjBGMSIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-tree-closed {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNiAxMmw0LTQtNC00IiBzdHJva2U9IiNFQ0YwRjEiIGZpbGw9Im5vbmUiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-icon-tree-indeterminate {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMy41IDcuNWg5IiBzdHJva2U9IiNFQ0YwRjEiIGZpbGw9Im5vbmUiIHN0cm9rZS1saW5lY2FwPSJzcXVhcmUiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n display: inline-block; }\n .ag-theme-balham-dark .ag-header-cell-menu-button .ag-icon-menu {\n display: block;\n height: 32px; }\n .ag-theme-balham-dark .ag-icon-checkbox-checked:empty {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+PGRlZnM+PHJlY3QgaWQ9ImEiIHg9IjEiIHk9IjEiIHdpZHRoPSIxNCIgaGVpZ2h0PSIxNCIgcng9IjIiLz48L2RlZnM+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48dXNlIGZpbGw9IiMyRDM0MzYiIHhsaW5rOmhyZWY9IiNhIi8+PHJlY3Qgc3Ryb2tlPSIjMDBCMEZGIiB4PSIxLjUiIHk9IjEuNSIgd2lkdGg9IjEzIiBoZWlnaHQ9IjEzIiByeD0iMiIvPjxwYXRoIHN0cm9rZT0iIzAwQjBGRiIgZD0iTTEyIDVsLTUuNSA1LjVMNCA4Ii8+PC9nPjwvc3ZnPg==); }\n .ag-theme-balham-dark .ag-menu {\n background: #2d3436;\n border-radius: 2px;\n box-shadow: none;\n padding: 4px;\n padding: 0;\n z-index: 5; }\n .ag-theme-balham-dark .ag-menu .ag-menu-list {\n cursor: default;\n margin-bottom: 4px;\n margin-top: 4px;\n width: 100%; }\n .ag-theme-balham-dark .ag-menu .ag-menu-option {\n line-height: 16px;\n padding-left: 8px;\n padding-right: 8px; }\n .ag-theme-balham-dark .ag-menu .ag-menu-option > span {\n display: table-cell;\n vertical-align: middle; }\n .ag-theme-balham-dark .ag-menu .ag-menu-option-active {\n background: #3d4749; }\n .ag-theme-balham-dark .ag-menu .ag-menu-option-disabled {\n opacity: 0.5; }\n .ag-theme-balham-dark .ag-menu .ag-menu-option-icon {\n padding-left: 4px;\n padding-right: 4px; }\n .ag-theme-balham-dark .ag-menu .ag-menu-option-icon span {\n height: 16px;\n line-height: 0;\n margin-top: 4px; }\n .ag-theme-balham-dark .ag-menu .ag-menu-option-shortcut {\n padding-left: 8px; }\n .ag-theme-balham-dark .ag-menu .ag-menu-separator {\n margin-left: -4px; }\n .ag-theme-balham-dark .ag-menu .ag-menu-separator > span {\n background-image: url(\"data:image/svg+xml;utf8,<svg width='1' height='8px' viewBox='0 0 1 8px' xmlns='http://www.w3.org/2000/svg'> <line x1='0' y1='4px' x2='1' y2='4px' stroke-width='1' stroke='#424242'/> </svg>\");\n height: 8px; }\n .ag-theme-balham-dark .ag-menu .ag-menu-option-popup-pointer {\n width: 24px; }\n .ag-theme-balham-dark.ag-dnd-ghost {\n background: #2d3436;\n border-radius: 2px;\n box-shadow: none;\n padding: 4px;\n border: 1px solid #424242;\n color: rgba(245, 245, 245, 0.64);\n font: 600 12px -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n height: 32px !important;\n line-height: 32px;\n margin: 0;\n padding: 0 8px;\n transform: translateY(8px);\n z-index: 5; }\n .ag-theme-balham-dark.ag-dnd-ghost span,\n .ag-theme-balham-dark.ag-dnd-ghost div {\n float: left;\n height: 100%;\n margin: 0;\n padding: 0; }\n .ag-theme-balham-dark.ag-dnd-ghost .ag-dnd-ghost-icon {\n margin-right: 4px;\n opacity: 0.87; }\n .ag-theme-balham-dark .ag-tab-header {\n background: #1c1f20;\n min-width: 220px;\n width: 100%; }\n .ag-theme-balham-dark .ag-tab-header .ag-tab {\n border-bottom: 2px solid transparent;\n height: 16px;\n text-align: center;\n vertical-align: middle; }\n .ag-theme-balham-dark .ag-tab-header .ag-tab.ag-tab-selected .ag-icon-filter {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMy41IDMuNWg5di41ODZhMSAxIDAgMCAxLS4yOTMuNzA3TDkuMjkzIDcuNzA3QTEgMSAwIDAgMCA5IDguNDE0VjEwbC0yIDEuNVY4LjQxNGExIDEgMCAwIDAtLjI5My0uNzA3TDMuNzkzIDQuNzkzYTEgMSAwIDAgMS0uMjkzLS43MDdWMy41eiIgc3Ryb2tlPSIjMDBCMEZGIiBmaWxsPSJub25lIi8+PC9zdmc+);\n display: inline-block; }\n .ag-theme-balham-dark .ag-tab-header .ag-tab.ag-tab-selected .ag-icon-columns {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNi41IDMuNXY4bTMtOHY4bTMtOHY4bS05LTh2OCIgc3Ryb2tlPSIjMDBCMEZGIiBmaWxsPSJub25lIiBzdHJva2UtbGluZWNhcD0ic3F1YXJlIi8+PC9zdmc+);\n display: inline-block; }\n .ag-theme-balham-dark .ag-tab-header .ag-tab.ag-tab-selected .ag-icon-menu {\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMy41IDQuNWg5bS05IDNoOW0tOSAzaDkiIHN0cm9rZT0iIzAwQjBGRiIgZmlsbD0ibm9uZSIgc3Ryb2tlLWxpbmVjYXA9InNxdWFyZSIvPjwvc3ZnPg==);\n display: inline-block; }\n .ag-theme-balham-dark .ag-tab-body {\n padding: 4px 0; }\n .ag-theme-balham-dark .ag-tab-body .ag-filter-select {\n margin: 4px;\n width: calc(100% - 8px); }\n .ag-theme-balham-dark .ag-tab-body .ag-menu-list {\n margin-bottom: 0;\n margin-top: 0; }\n .ag-theme-balham-dark .ag-tab-body .ag-menu-list > div:first-child > span {\n padding-top: 0; }\n .ag-theme-balham-dark .ag-tab-body .ag-menu-list > div:last-child > span {\n padding-bottom: 0; }\n .ag-theme-balham-dark .ag-tab-body .ag-menu-list > div:last-child > .ag-menu-option-popup-pointer {\n background-position-y: 0; }\n .ag-theme-balham-dark .ag-filter-select {\n margin: 4px;\n width: calc(100% - 8px); }\n .ag-theme-balham-dark .ag-filter input[type=\"radio\"] {\n margin: 0 3px 0 6px;\n width: 12px;\n height: 17px;\n vertical-align: top; }\n .ag-theme-balham-dark .ag-filter input[type=\"text\"],\n .ag-theme-balham-dark .ag-filter input[type=\"date\"] {\n padding-left: 4px; }\n .ag-theme-balham-dark .ag-filter label {\n display: block;\n padding-left: 4px; }\n .ag-theme-balham-dark .ag-filter .ag-set-filter-list {\n height: 182px;\n padding-top: 4px; }\n .ag-theme-balham-dark .ag-filter .ag-filter-header-container {\n box-sizing: border-box;\n height: 28px; }\n .ag-theme-balham-dark .ag-filter .ag-filter-header-container:nth-child(2) {\n border-bottom: 1px solid #424242; }\n .ag-theme-balham-dark .ag-filter .ag-filter-checkbox {\n float: left;\n height: 28px;\n margin-right: 4px;\n padding-top: 2px; }\n .ag-theme-balham-dark .ag-filter .ag-filter-value {\n height: 28px;\n line-height: 14px; }\n .ag-theme-balham-dark .ag-filter .ag-filter-apply-panel {\n display: flex;\n justify-content: flex-end;\n padding: 4px;\n padding-top: 8px; }\n .ag-theme-balham-dark .ag-filter .ag-filter-apply-panel button + button {\n margin-left: 8px; }\n .ag-theme-balham-dark .ag-column-select-panel .ag-column-select-column-group,\n .ag-theme-balham-dark .ag-column-select-panel .ag-column-select-column {\n height: 16px;\n line-height: 16px;\n margin-left: 0; }\n .ag-theme-balham-dark .ag-column-select-panel .ag-column-select-column-group span,\n .ag-theme-balham-dark .ag-column-select-panel .ag-column-select-column span {\n float: left;\n height: 100%; }\n .ag-theme-balham-dark .ag-column-select-panel .ag-column-select-column-group .ag-column-select-indent,\n .ag-theme-balham-dark .ag-column-select-panel .ag-column-select-column .ag-column-select-indent {\n width: 8px; }\n .ag-theme-balham-dark .ag-column-select-panel .ag-column-select-column-group .ag-column-select-checkbox,\n .ag-theme-balham-dark .ag-column-select-panel .ag-column-select-column-group .ag-column-group-icons,\n .ag-theme-balham-dark .ag-column-select-panel .ag-column-select-column .ag-column-select-checkbox,\n .ag-theme-balham-dark .ag-column-select-panel .ag-column-select-column .ag-column-group-icons {\n margin-left: 4px;\n margin-right: 4px; }\n .ag-theme-balham-dark .ag-column-select-panel .ag-column-container {\n padding-top: 4px; }\n .ag-theme-balham-dark .ag-column-select-panel .ag-column-select-column.ag-toolpanel-add-group-indent {\n margin-left: 24px; }\n .ag-theme-balham-dark .ag-column-tool-panel {\n display: flex; }\n .ag-theme-balham-dark .ag-filter-body {\n flex-grow: 1;\n flex-shrink: 1;\n padding-right: 4px; }\n .ag-theme-balham-dark .ag-column-tool-panel-item button {\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n font-size: 12px;\n height: 100%; }\n .ag-theme-balham-dark .ag-filter-filter {\n margin-bottom: 4px; }\n .ag-theme-balham-dark .ag-column-select-header {\n border-bottom: 1px solid #424242;\n box-sizing: border-box;\n height: 32px;\n padding-top: 4px; }\n .ag-theme-balham-dark .ag-column-select-header label {\n display: block;\n padding-left: 4px; }\n .ag-theme-balham-dark .ag-column-select-header label .ag-filter-checkbox {\n float: left;\n margin-right: 4px; }\n .ag-theme-balham-dark .ag-column-select-header .ag-column-tool-panel a {\n margin: 0 4px;\n padding-top: 2px; }\n .ag-theme-balham-dark .ag-group-child-count::before {\n content: \" \"; }\n .ag-theme-balham-dark .ag-column-panel {\n border-right: 0; }\n .ag-theme-balham-dark .ag-column-panel .ag-pivot-mode {\n border-bottom: 1px solid #424242;\n box-sizing: border-box;\n height: 32px;\n line-height: 32px; }\n .ag-theme-balham-dark .ag-column-panel .ag-pivot-mode span {\n float: left;\n height: 100%; }\n .ag-theme-balham-dark .ag-column-panel .ag-pivot-mode .ag-pivot-mode-select {\n margin-left: 4px; }\n .ag-theme-balham-dark .ag-column-panel .ag-pivot-mode .ag-pivot-mode-select .ag-checkbox-label {\n margin-left: 4px; }\n .ag-theme-balham-dark .ag-column-panel .ag-column-select-panel {\n border-bottom: 1px solid #424242;\n padding-bottom: 3px;\n padding-top: 0; }\n .ag-theme-balham-dark .ag-column-panel .ag-column-drop {\n border-bottom: 1px solid #424242;\n clear: both;\n overflow: auto;\n padding: 4px 0;\n padding-bottom: 8px; }\n .ag-theme-balham-dark .ag-column-panel .ag-column-drop .ag-icon {\n float: left;\n height: 20px;\n margin: 0 4px; }\n .ag-theme-balham-dark .ag-column-panel .ag-column-drop .ag-column-drop-title {\n clear: right;\n float: left;\n height: 20px;\n line-height: 20px;\n width: calc(100% - 24px); }\n .ag-theme-balham-dark .ag-column-panel .ag-column-drop .ag-column-drop-empty-message {\n clear: both;\n color: rgba(245, 245, 245, 0.38);\n font: 600 12px -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n line-height: 8px;\n padding-left: 16px;\n padding-right: 4px; }\n .ag-theme-balham-dark .ag-column-panel .ag-column-drop:last-child {\n border-bottom: 0; }\n .ag-theme-balham-dark .ag-filter-icon:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMy41IDMuNWg5di41ODZhMSAxIDAgMCAxLS4yOTMuNzA3TDkuMjkzIDcuNzA3QTEgMSAwIDAgMCA5IDguNDE0VjEwbC0yIDEuNVY4LjQxNGExIDEgMCAwIDAtLjI5My0uNzA3TDMuNzkzIDQuNzkzYTEgMSAwIDAgMS0uMjkzLS43MDdWMy41eiIgc3Ryb2tlPSIjRUNGMEYxIiBmaWxsPSJub25lIi8+PC9zdmc+);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px; }\n .ag-theme-balham-dark .ag-sort-ascending-icon:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNy41IDEyVjRtMyAyLjVsLTMtMy0zIDMiIHN0cm9rZT0iI0VDRjBGMSIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px; }\n .ag-theme-balham-dark .ag-sort-descending-icon:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNy41IDExVjNtLTMgNS41bDMgMyAzLTMiIHN0cm9rZT0iI0VDRjBGMSIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px; }\n .ag-theme-balham-dark .ag-sort-none-icon:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTEuNSAxMlY0bTMgMi41bC0zLTMtMyAzbS00IDQuNVYzbS0zIDUuNWwzIDMgMy0zIiBzdHJva2U9IiNFQ0YwRjEiIGZpbGw9Im5vbmUiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px; }\n .ag-theme-balham-dark .ag-numeric-header .ag-header-cell-label .ag-header-icon {\n margin-left: 0;\n margin-right: 4px; }\n .ag-theme-balham-dark .ag-paging-panel {\n align-items: center;\n border-top: 1px solid #424242;\n color: rgba(245, 245, 245, 0.64);\n display: flex;\n height: 32px;\n justify-content: flex-end;\n padding: 0 12px; }\n .ag-theme-balham-dark .ag-paging-panel > span {\n margin-left: 16px; }\n .ag-theme-balham-dark button[ref=\"btFirst\"] {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTIgNEw4IDhsNCA0TTQuNSA0djgiIHN0cm9rZT0iI0VDRjBGMSIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n overflow: hidden;\n text-indent: 100%;\n appearance: none;\n border: 0;\n opacity: 0.64;\n padding: 0; }\n .ag-theme-balham-dark button[ref=\"btFirst\"][disabled] {\n opacity: 0.38; }\n .ag-theme-balham-dark button[ref=\"btPrevious\"] {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOSA0TDUgOGw0IDQiIHN0cm9rZT0iI0VDRjBGMSIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n overflow: hidden;\n text-indent: 100%;\n appearance: none;\n border: 0;\n opacity: 0.64;\n padding: 0; }\n .ag-theme-balham-dark button[ref=\"btPrevious\"][disabled] {\n opacity: 0.38; }\n .ag-theme-balham-dark button[ref=\"btLast\"] {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNCAxMmw0LTQtNC00bTcuNSAwdjgiIHN0cm9rZT0iI0VDRjBGMSIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n overflow: hidden;\n text-indent: 100%;\n appearance: none;\n border: 0;\n opacity: 0.64;\n padding: 0; }\n .ag-theme-balham-dark button[ref=\"btLast\"][disabled] {\n opacity: 0.38; }\n .ag-theme-balham-dark button[ref=\"btNext\"] {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNiAxMmw0LTQtNC00IiBzdHJva2U9IiNFQ0YwRjEiIGZpbGw9Im5vbmUiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n overflow: hidden;\n text-indent: 100%;\n appearance: none;\n border: 0;\n opacity: 0.64;\n padding: 0; }\n .ag-theme-balham-dark button[ref=\"btNext\"][disabled] {\n opacity: 0.38; }\n .ag-theme-balham-dark .ag-rtl button[ref=\"btFirst\"] {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNCAxMmw0LTQtNC00bTcuNSAwdjgiIHN0cm9rZT0iI0VDRjBGMSIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px; }\n .ag-theme-balham-dark .ag-rtl button[ref=\"btPrevious\"] {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNiAxMmw0LTQtNC00IiBzdHJva2U9IiNFQ0YwRjEiIGZpbGw9Im5vbmUiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px; }\n .ag-theme-balham-dark .ag-rtl button[ref=\"btLast\"] {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTIgNEw4IDhsNCA0TTQuNSA0djgiIHN0cm9rZT0iI0VDRjBGMSIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px; }\n .ag-theme-balham-dark .ag-rtl button[ref=\"btNext\"] {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOSA0TDUgOGw0IDQiIHN0cm9rZT0iI0VDRjBGMSIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px; }\n .ag-theme-balham-dark .ag-row-selected {\n background-color: #005880; }\n .ag-theme-balham-dark .ag-cell-range-selected:not(.ag-cell-focus) {\n background-color: rgba(0, 176, 255, 0.2); }\n .ag-theme-balham-dark .ag-cell-inline-editing {\n background: #2d3436;\n border-radius: 2px;\n box-shadow: none;\n padding: 4px;\n background: #1c1f20;\n height: 40px;\n line-height: normal;\n padding: 12px;\n z-index: 2; }\n .ag-theme-balham-dark .ag-cell-inline-editing select {\n height: auto; }\n .ag-theme-balham-dark .ag-popup-editor {\n background: #2d3436;\n border-radius: 2px;\n box-shadow: none;\n padding: 4px;\n background: #1c1f20;\n padding: 0;\n z-index: 1; }\n .ag-theme-balham-dark .ag-popup-editor .ag-large-textarea textarea {\n height: auto;\n padding: 12px; }\n .ag-theme-balham-dark .ag-rich-select {\n background-color: #1c1f20;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNCA3bDQgNCA0LTQiIHN0cm9rZT0iI0VDRjBGMSIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position-x: calc(100% - 4px);\n background-position-y: 8px;\n background-repeat: no-repeat; }\n .ag-theme-balham-dark .ag-rich-select .ag-rich-select-list {\n height: 182px; }\n .ag-theme-balham-dark .ag-rich-select .ag-rich-select-value {\n height: 28px;\n line-height: 28px;\n padding-left: 12px; }\n .ag-theme-balham-dark .ag-rich-select .ag-virtual-list-item {\n cursor: default;\n height: 28px;\n line-height: 28px; }\n .ag-theme-balham-dark .ag-rich-select .ag-virtual-list-item:hover {\n background-color: #3d4749; }\n .ag-theme-balham-dark .ag-rich-select .ag-rich-select-row {\n padding-left: 12px; }\n .ag-theme-balham-dark .ag-rich-select .ag-rich-select-row-selected {\n background-color: #005880; }\n .ag-theme-balham-dark .ag-floating-filter-body {\n float: left;\n height: 100%;\n margin-right: 0;\n width: calc(100% - 24px); }\n .ag-theme-balham-dark .ag-floating-filter-body input {\n box-sizing: border-box; }\n .ag-theme-balham-dark .ag-floating-filter-full-body input {\n box-sizing: border-box; }\n .ag-theme-balham-dark .ag-floating-filter-button {\n float: right;\n line-height: 16px;\n margin-top: 10px; }\n .ag-theme-balham-dark .ag-floating-filter-button button {\n appearance: none;\n background: transparent;\n border: 0;\n height: 16px;\n padding: 0;\n width: 16px; }\n .ag-theme-balham-dark .ag-cell-label-container {\n height: 100%; }\n .ag-theme-balham-dark .ag-header-group-cell-label {\n height: 100%; }\n .ag-theme-balham-dark .ag-header-group-cell-label span {\n float: left;\n height: 100%; }\n .ag-theme-balham-dark .ag-header-select-all {\n height: 100%;\n margin-right: 12px; }\n .ag-theme-balham-dark .ag-header-select-all span {\n height: 100%; }\n .ag-theme-balham-dark .ag-header-select-all:not(.ag-hidden) + .ag-cell-label-container {\n float: left;\n width: calc(100% - 16px - 12px); }\n .ag-theme-balham-dark .ag-selection-checkbox span,\n .ag-theme-balham-dark .ag-group-expanded span,\n .ag-theme-balham-dark .ag-group-contracted span {\n margin-right: 12px; }\n .ag-theme-balham-dark .ag-selection-checkbox span {\n position: relative;\n top: 2px; }\n .ag-theme-balham-dark .ag-group-expanded .ag-icon-contracted:empty {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNNCA3bDQgNCA0LTQiIHN0cm9rZT0iI0VDRjBGMSIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px; }\n .ag-theme-balham-dark .ag-column-drop-horizontal {\n background-color: #1c1f20;\n height: 28px;\n line-height: 16px;\n padding-left: 12px; }\n .ag-theme-balham-dark .ag-column-drop-horizontal.ag-width-half {\n margin-bottom: -3px; }\n .ag-theme-balham-dark .ag-column-drop-horizontal span {\n float: left;\n height: 100%; }\n .ag-theme-balham-dark .ag-column-drop-horizontal > div:first-child {\n float: left;\n height: 100%; }\n .ag-theme-balham-dark .ag-column-drop-horizontal .ag-icon-group,\n .ag-theme-balham-dark .ag-column-drop-horizontal .ag-icon-pivot {\n margin-right: 12px; }\n .ag-theme-balham-dark .ag-column-drop-horizontal .ag-right-arrow {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTMuNSA3LjVsLTQgNEw4IDEwbDEuNS0xLjVoLTd2LTJoN0w4IDVsMS41LTEuNXoiIHN0cm9rZT0iI0VDRjBGMSIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px; }\n .ag-theme-balham-dark .ag-column-drop-horizontal .ag-left-arrow {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMi41IDguNWw0LTRMOCA2IDYuNSA3LjVoN3YyaC03TDggMTFsLTEuNSAxLjV6IiBzdHJva2U9IiNFQ0YwRjEiIGZpbGw9Im5vbmUiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px; }\n .ag-theme-balham-dark .ag-column-drop-horizontal .ag-left-arrow,\n .ag-theme-balham-dark .ag-column-drop-horizontal .ag-right-arrow {\n overflow: hidden;\n text-indent: 100%;\n height: 100%;\n margin: 0 4px;\n opacity: 0.64; }\n .ag-theme-balham-dark .ag-column-drop-horizontal .ag-column-drop-empty-message {\n height: 100%;\n line-height: 28px;\n opacity: 0.38; }\n .ag-theme-balham-dark .ag-column-drop-cell {\n background: #32393c;\n border-radius: 16px;\n box-sizing: border-box;\n height: 16px !important;\n margin-top: 4px;\n padding: 0 2px; }\n .ag-theme-balham-dark .ag-column-drop-cell .ag-column-drop-cell-text {\n height: 100%;\n line-height: 16px;\n margin: 0 4px; }\n .ag-theme-balham-dark .ag-column-drop-cell .ag-column-drop-cell-button {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48ZyBzdHJva2U9IiNFQ0YwRjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PHBhdGggZD0iTTEwLjUgNC41bC02IDYiLz48Y2lyY2xlIGN4PSI3LjUiIGN5PSI3LjUiIHI9IjUuNSIvPjxwYXRoIGQ9Ik00LjUgNC41bDYgNiIvPjwvZz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n overflow: hidden;\n text-indent: 100%;\n min-width: 16px;\n height: 100%;\n margin: 0 2px;\n opacity: 0.64; }\n .ag-theme-balham-dark .ag-column-drop-cell .ag-column-drop-cell-button:hover {\n opacity: 0.87; }\n .ag-theme-balham-dark .ag-column-drop-cell .ag-column-drag {\n margin-left: 8px;\n margin-top: 2px;\n width: 16px; }\n .ag-theme-balham-dark .ag-select-agg-func-popup {\n background: #2d3436;\n border-radius: 2px;\n box-shadow: none;\n padding: 4px;\n background: #2d3436;\n height: 70px;\n padding: 0; }\n .ag-theme-balham-dark .ag-select-agg-func-popup .ag-virtual-list-item {\n cursor: default;\n line-height: 20px;\n padding-left: 8px; }\n .ag-theme-balham-dark .ag-set-filter-list,\n .ag-theme-balham-dark .ag-menu-column-select-wrapper {\n width: auto; }\n .ag-theme-balham-dark .ag-column-drop-vertical > .ag-column-drop-cell {\n float: left;\n margin-bottom: 4px;\n margin-left: 4px;\n margin-top: 0; }\n .ag-theme-balham-dark .ag-cell-data-changed {\n background-color: rgba(22, 160, 133, 0.5) !important; }\n .ag-theme-balham-dark .ag-cell-data-changed-animation {\n background-color: transparent;\n transition: background-color 1s; }\n .ag-theme-balham-dark .ag-stub-cell {\n padding-left: 12px;\n padding-top: 4px; }\n .ag-theme-balham-dark .ag-stub-cell .ag-loading-icon {\n float: left;\n height: 100%; }\n .ag-theme-balham-dark .ag-stub-cell .ag-loading-text {\n float: left;\n height: 100%;\n margin-left: 4px;\n margin-top: 4px; }\n .ag-theme-balham-dark .ag-rtl .ag-numeric-cell {\n text-align: left; }\n .ag-theme-balham-dark .ag-rtl .ag-header-cell-menu-button {\n float: left; }\n .ag-theme-balham-dark .ag-rtl .ag-header-cell-label {\n float: right;\n width: calc(100% - 16px); }\n .ag-theme-balham-dark .ag-rtl .ag-header-cell-label > span {\n float: right; }\n .ag-theme-balham-dark .ag-rtl .ag-header-cell-label .ag-header-icon {\n margin-top: 2px; }\n .ag-theme-balham-dark .ag-rtl .ag-numeric-header .ag-header-cell-menu-button {\n float: right; }\n .ag-theme-balham-dark .ag-rtl .ag-numeric-header .ag-header-cell-label {\n float: left; }\n .ag-theme-balham-dark .ag-rtl .ag-numeric-header .ag-header-cell-label > span {\n float: left; }\n .ag-theme-balham-dark .ag-rtl .ag-column-panel .ag-pivot-mode span {\n float: right; }\n .ag-theme-balham-dark .ag-rtl .ag-column-panel .ag-pivot-mode .ag-pivot-mode-select {\n margin-right: 4px; }\n .ag-theme-balham-dark .ag-rtl .ag-column-panel .ag-pivot-mode .ag-pivot-mode-select .ag-checkbox-label {\n margin-right: 4px; }\n .ag-theme-balham-dark .ag-rtl .ag-column-panel .ag-column-drop .ag-icon {\n float: right; }\n .ag-theme-balham-dark .ag-rtl .ag-column-panel .ag-column-drop .ag-column-drop-title {\n clear: left;\n float: right; }\n .ag-theme-balham-dark .ag-rtl .ag-column-panel .ag-column-drop .ag-column-drop-empty-message {\n padding-left: 4px;\n padding-right: 16px; }\n .ag-theme-balham-dark .ag-rtl .ag-filter-checkbox {\n float: right;\n margin-left: 4px; }\n .ag-theme-balham-dark .ag-rtl .ag-column-select-panel .ag-column-select-column-group span,\n .ag-theme-balham-dark .ag-rtl .ag-column-select-panel .ag-column-select-column span {\n float: right; }\n .ag-theme-balham-dark .ag-rtl .ag-column-select-panel .ag-column-select-column-group .ag-column-select-checkbox,\n .ag-theme-balham-dark .ag-rtl .ag-column-select-panel .ag-column-select-column-group .ag-column-group-icons,\n .ag-theme-balham-dark .ag-rtl .ag-column-select-panel .ag-column-select-column .ag-column-select-checkbox,\n .ag-theme-balham-dark .ag-rtl .ag-column-select-panel .ag-column-select-column .ag-column-group-icons {\n margin-left: 4px;\n margin-right: 4px; }\n .ag-theme-balham-dark .ag-rtl .ag-column-select-panel .ag-column-select-column.ag-toolpanel-add-group-indent {\n margin-left: 0;\n margin-right: 24px; }\n .ag-theme-balham-dark .ag-rtl .ag-icon-tree-closed {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNOSA0TDUgOGw0IDQiIHN0cm9rZT0iI0VDRjBGMSIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px; }\n .ag-theme-balham-dark .ag-rtl .ag-header-group-cell-label {\n height: 100%; }\n .ag-theme-balham-dark .ag-rtl .ag-header-group-cell-label span {\n float: right;\n height: 100%; }\n .ag-theme-balham-dark .ag-rtl .ag-header-select-all:not(.ag-hidden) + .ag-cell-label-container {\n float: right; }\n .ag-theme-balham-dark .ag-rtl .ag-header-select-all {\n margin-left: 12px;\n margin-right: 0; }\n .ag-theme-balham-dark .ag-rtl .ag-selection-checkbox span,\n .ag-theme-balham-dark .ag-rtl .ag-group-expanded span,\n .ag-theme-balham-dark .ag-rtl .ag-group-contracted span {\n margin-left: 12px;\n margin-right: 0; }\n .ag-theme-balham-dark .ag-rtl .ag-column-drop-horizontal {\n padding-right: 12px; }\n .ag-theme-balham-dark .ag-rtl .ag-column-drop-horizontal span {\n float: right; }\n .ag-theme-balham-dark .ag-rtl .ag-column-drop-horizontal > div:first-child {\n float: right; }\n .ag-theme-balham-dark .ag-rtl .ag-column-drop-horizontal .ag-icon-group,\n .ag-theme-balham-dark .ag-rtl .ag-column-drop-horizontal .ag-icon-pivot {\n margin-left: 12px;\n margin-right: 0; }\n .ag-theme-balham-dark .ag-rtl .ag-column-drop-horizontal .ag-right-arrow {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMTMuNSA3LjVsLTQgNEw4IDEwbDEuNS0xLjVoLTd2LTJoN0w4IDVsMS41LTEuNXoiIHN0cm9rZT0iI0VDRjBGMSIgZmlsbD0ibm9uZSIvPjwvc3ZnPg==);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n height: 100%; }\n .ag-theme-balham-dark .ag-rtl .ag-column-drop-horizontal .ag-left-arrow {\n background-color: transparent;\n background-image: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48cGF0aCBkPSJNMi41IDguNWw0LTRMOCA2IDYuNSA3LjVoN3YyaC03TDggMTFsLTEuNSAxLjV6IiBzdHJva2U9IiNFQ0YwRjEiIGZpbGw9Im5vbmUiLz48L3N2Zz4=);\n background-position: center;\n background-repeat: no-repeat;\n background-size: 16px 16px;\n height: 16px;\n opacity: 0.87;\n width: 16px;\n height: 100%; }\n .ag-theme-balham-dark .ag-rtl .ag-floating-filter-body {\n float: right;\n margin-left: 0; }\n .ag-theme-balham-dark .ag-rtl .ag-floating-filter-button {\n float: left; }\n .ag-theme-balham-dark .ag-rtl .ag-header .ag-header-cell-resize {\n left: -4px;\n right: auto; }\n .ag-theme-balham-dark .ag-rtl .ag-header .ag-header-cell-resize::after {\n border-left: 1px solid #424242;\n border-right: 0; }\n .ag-theme-balham-dark .ag-rtl .ag-column-select-header .ag-filter-body {\n margin-left: 4px;\n margin-right: 0; }\n .ag-theme-balham-dark .ag-rtl .ag-column-drag {\n background-position-x: right; }\n .ag-theme-balham-dark .ag-status-bar {\n background: #2d3436;\n border: 1px solid #424242;\n border-top: 0;\n color: rgba(245, 245, 245, 0.38);\n display: flex;\n font: 600 12px -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Oxygen-Sans, Ubuntu, Cantarell, \"Helvetica Neue\", sans-serif;\n justify-content: flex-end;\n padding: 8px 16px; }\n .ag-theme-balham-dark .ag-status-bar .ag-status-bar-item {\n margin-right: 8px; }\n .ag-theme-balham-dark .ag-status-bar .ag-status-bar-item span:nth-child(1)::after {\n content: \":\"; }\n .ag-theme-balham-dark .ag-status-bar .ag-status-bar-item span:nth-child(2) {\n color: #F5F5F5; }\n .ag-theme-balham-dark .ag-details-row {\n box-sizing: border-box;\n padding: 20px; }\n .ag-theme-balham-dark .ag-overlay-loading-wrapper {\n background-color: rgba(255, 255, 255, 0.5); }\n .ag-theme-balham-dark .ag-overlay-loading-center {\n background: #2d3436;\n border-radius: 2px;\n box-shadow: none;\n padding: 4px; }\n .ag-theme-balham-dark .ag-tool-panel {\n background-color: #1c1f20;\n border-right: 1px solid #424242;\n border-top: 1px solid #424242; }\n .ag-theme-balham-dark .ag-tool-panel .ag-side-buttons {\n border-bottom: 1px solid #424242; }\n .ag-theme-balham-dark .ag-tool-panel .ag-side-buttons button {\n background: transparent;\n border: 0;\n border-right: 1px solid #424242;\n color: #F5F5F5;\n height: 20px; }\n .ag-theme-balham-dark .ag-tool-panel .ag-panel-container {\n border-right: 1px solid #424242;\n box-sizing: border-box; }\n .ag-theme-balham-dark .ag-tool-panel.full-width .ag-panel-container {\n border-right: 0; }\n .ag-theme-balham-dark .ag-tool-panel .ag-column-drop {\n min-height: 50px; }\n .ag-theme-balham-dark .ag-rtl .ag-tool-panel .ag-panel-container {\n border-left: 1px solid #424242;\n border-right: 0; }\n .ag-theme-balham-dark .ag-rtl .ag-tool-panel.full-width .ag-panel-container {\n border-left: 0; }\n .ag-theme-balham-dark .ag-rtl .ag-tool-panel .ag-side-buttons button {\n border-left: 1px solid #424242;\n border-right: 0; }\n .ag-theme-balham-dark .ag-column-name-filter {\n box-sizing: border-box;\n width: 100%; }\n .ag-theme-balham-dark .sass-variables::after {\n content: '{ \"autoSizePadding\": \"12px\", \"headerHeight\": \"32px\", \"groupPaddingSize\": \"28px\", \"footerPaddingAddition\": \"16px\", \"virtualItemHeight\": \"28px\", \"aggFuncPopupHeight\": \"98px\", \"checkboxIndentWidth\": \"20px\", \"leafNodePadding\": \"12px\", \"rowHeight\": \"28px\", \"gridSize\": \"4px\", \"iconSize\": \"16px\" }';\n display: none; }\n .ag-theme-balham-dark .ag-header {\n background-color: #1c1f20;\n border-bottom: 1px solid #424242; }\n .ag-theme-balham-dark .ag-cell-highlight {\n background-color: #00B0FF !important; }\n .ag-theme-balham-dark .ag-header-cell-resize {\n right: -3px; }\n .ag-theme-balham-dark .ag-rtl .ag-header .ag-header-cell-resize {\n left: -4px; }\n .ag-theme-balham-dark .ag-header-cell-resize::after {\n height: 16px;\n margin-top: 8px; }\n .ag-theme-balham-dark .ag-header-cell::after,\n .ag-theme-balham-dark .ag-header-group-cell::after {\n border-right: 1px solid rgba(66, 66, 66, 0.5);\n content: \" \";\n height: 16px;\n margin-top: 8px;\n position: absolute;\n right: 0;\n text-indent: -2000px;\n top: 0; }\n .ag-theme-balham-dark .ag-column-drop-horizontal.ag-column-drop {\n border: 1px solid #424242;\n border-bottom: 0; }\n .ag-theme-balham-dark .ag-column-drop-horizontal.ag-column-drop.ag-width-half:first-child {\n border-right: 0; }\n .ag-theme-balham-dark .ag-row {\n border-bottom-color: #5c5c5c; }\n .ag-theme-balham-dark .ag-row-selected {\n border-bottom-color: #005880; }\n .ag-theme-balham-dark .ag-row-drag {\n background-position-y: center; }\n .ag-theme-balham-dark .ag-column-drag {\n background-position-y: center; }\n .ag-theme-balham-dark .ag-column-drop-cell {\n height: 24px !important; }\n .ag-theme-balham-dark .ag-column-drop-cell .ag-column-drop-cell-button {\n box-sizing: border-box;\n height: calc(100% - 4px);\n margin-bottom: 2px;\n margin-top: 2px; }\n .ag-theme-balham-dark .ag-column-drop-cell .ag-column-drop-cell-button:hover {\n opacity: 1; }\n .ag-theme-balham-dark .ag-column-drop-vertical .ag-column-drop-cell {\n margin-left: 8px;\n margin-right: 8px; }\n .ag-theme-balham-dark .ag-column-drop-vertical .ag-column-drop-cell .ag-column-drop-cell-text {\n line-height: 24px;\n margin-left: 8px; }\n .ag-theme-balham-dark .ag-column-drop-horizontal {\n background-color: #1c1f20;\n height: 32px; }\n .ag-theme-balham-dark .ag-column-drop-horizontal .ag-column-drop-empty-message {\n line-height: 32px; }\n .ag-theme-balham-dark .ag-column-drop-horizontal .ag-column-drop-cell-text {\n line-height: 24px;\n margin-left: 8px; }\n .ag-theme-balham-dark .ag-filter .ag-filter-header-container {\n height: 24px; }\n .ag-theme-balham-dark .ag-root {\n border: 1px solid #424242; }\n .ag-theme-balham-dark .ag-tab {\n box-sizing: initial; }\n .ag-theme-balham-dark .ag-filter .ag-filter-value {\n line-height: 20px; }\n .ag-theme-balham-dark .ag-column-panel {\n border-right: 1px solid #424242;\n border-bottom: 1px solid #424242; }\n .ag-theme-balham-dark .ag-column-panel .ag-column-select-panel {\n padding-bottom: 8px; }\n .ag-theme-balham-dark .ag-column-panel .ag-column-select-panel .ag-column-select-column-group,\n .ag-theme-balham-dark .ag-column-panel .ag-column-select-panel .ag-column-select-column {\n height: 20px;\n line-height: 20px; }\n .ag-theme-balham-dark .ag-column-panel .ag-column-drop {\n padding-bottom: 8px;\n padding-top: 8px; }\n .ag-theme-balham-dark .ag-column-panel .ag-column-drop .ag-icon {\n margin-bottom: 4px; }\n .ag-theme-balham-dark .ag-column-panel .ag-column-drop .ag-column-drop-title {\n display: inline-block;\n float: none;\n margin-bottom: 4px; }\n .ag-theme-balham-dark .ag-column-panel .ag-column-drop .ag-column-drop-empty-message {\n height: 16px;\n line-height: 16px;\n padding-left: 24px; }\n .ag-theme-balham-dark .ag-rtl .ag-tool-panel,\n .ag-theme-balham-dark .ag-rtl .ag-column-panel {\n border-left: 1px solid #424242;\n border-right: 0; }\n .ag-theme-balham-dark .ag-icon-expanded,\n .ag-theme-balham-dark .ag-icon-contracted {\n transform: translateY(2px); }\n .ag-theme-balham-dark .ag-rtl .ag-icon-expanded {\n transform: translateY(2px) rotate(180deg); }\n .ag-theme-balham-dark .ag-menu-option {\n height: 28px;\n line-height: 28px; }\n .ag-theme-balham-dark .ag-column-select-panel .ag-column-select-column-group,\n .ag-theme-balham-dark .ag-column-select-panel .ag-column-select-column {\n height: 20px;\n line-height: 20px; }\n .ag-theme-balham-dark .ag-filter-filter {\n margin-left: 4px;\n margin-right: 4px;\n width: calc(100% - 8px); }\n .ag-theme-balham-dark .ag-tab-header {\n border-bottom: 1px solid #424242; }\n .ag-theme-balham-dark .ag-tab-header .ag-tab {\n margin-bottom: -2px; }\n .ag-theme-balham-dark .ag-tab-header .ag-tab.ag-tab-selected {\n background-color: #2d3436;\n border-bottom-color: transparent; }\n .ag-theme-balham-dark .ag-tab-body,\n .ag-theme-balham-dark .ag-popup-editor,\n .ag-theme-balham-dark .ag-menu {\n background-color: #2d3436;\n color: #F5F5F5; }\n .ag-theme-balham-dark .ag-cell-inline-editing {\n height: 28px;\n padding: 0; }\n .ag-theme-balham-dark .ag-cell-inline-editing input {\n box-sizing: border-box; }\n .ag-theme-balham-dark .ag-details-row {\n background-color: #2d3436; }\n .ag-theme-balham-dark .ag-overlay-loading-wrapper {\n background-color: rgba(255, 255, 255, 0.5); }\n .ag-theme-balham-dark .ag-overlay-loading-center {\n background-color: #fff;\n border: 1px solid #424242;\n color: #F5F5F5;\n padding: 16px; }\n .ag-theme-balham-dark .ag-cell-range-selected-1:not(.ag-cell-focus) {\n background-color: rgba(0, 176, 255, 0.3); }\n .ag-theme-balham-dark .ag-cell-range-selected-2:not(.ag-cell-focus) {\n background-color: rgba(0, 176, 255, 0.4); }\n .ag-theme-balham-dark .ag-cell-range-selected-3:not(.ag-cell-focus) {\n background-color: rgba(0, 176, 255, 0.5); }\n .ag-theme-balham-dark .ag-cell-range-selected-4:not(.ag-cell-focus) {\n background-color: rgba(0, 176, 255, 0.6); }\n .ag-theme-balham-dark .ag-rich-select-value {\n border-bottom: 1px solid #424242; }\n .ag-theme-balham-dark .ag-filter-apply-panel {\n border-top: 1px solid #424242; }\n .ag-theme-balham-dark .ag-header-cell-moving {\n background-color: #2d3436; }\n .ag-theme-balham-dark input,\n .ag-theme-balham-dark select {\n background-color: #262c2e;\n color: #F5F5F5; }\n .ag-theme-balham-dark .ag-floating-filter-body input {\n border-width: 1px;\n border-style: solid; }\n .ag-theme-balham-dark .ag-floating-filter-body input[readonly] {\n background: rgba(48, 46, 46, 0.3); }\n", ""]);
36871
36872// exports
36873
36874
36875/***/ })
36876/******/ ]);
36877});
\No newline at end of file