@esfaenza/es-table 12.2.21 → 12.2.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"esfaenza-es-table.umd.js","sources":["../../../node_modules/tslib/tslib.es6.js","../../../projects/es-table/src/lib/domain/externals/classes/appsearch/AppOrdering.ts","../../../projects/es-table/src/lib/domain/externals/classes/appsearch/AppSearch.ts","../../../projects/es-table/src/lib/domain/externals/classes/EsTableColumnsDefinition.ts","../../../projects/es-table/src/lib/domain/externals/classes/appsearch/GenericItem.ts","../../../projects/es-table/src/lib/domain/externals/classes/CornerMenuOption.ts","../../../projects/es-table/src/lib/domain/externals/classes/report/ReportDefinition.ts","../../../projects/es-table/src/lib/domain/externals/classes/report/ReportOrder.ts","../../../projects/es-table/src/lib/domain/externals/classes/report/ReportColumn.ts","../../../projects/es-table/src/lib/domain/externals/classes/report/ReportResult.ts","../../../projects/es-table/src/lib/domain/externals/classes/report/ReportRow.ts","../../../projects/es-table/src/lib/domain/externals/classes/report/ReportParam.ts","../../../projects/es-table/src/lib/domain/externals/classes/EsTableOperationDefinition.ts","../../../projects/es-table/src/lib/domain/externals/classes/appsearch/ItemsSelection.ts","../../../projects/es-table/src/lib/domain/externals/classes/appsearch/Group.ts","../../../projects/es-table/src/lib/domain/externals/classes/appsearch/GroupAggregation.ts","../../../projects/es-table/src/lib/domain/externals/classes/appsearch/GroupFilter.ts","../../../projects/es-table/src/lib/domain/externals/classes/appsearch/GroupOrAggregation.ts","../../../projects/es-table/src/lib/domain/internals/classes/CacheTriptic.ts","../../../projects/es-table/src/lib/domain/internals/classes/EsTableColumn.ts","../../../projects/es-table/src/lib/domain/internals/classes/GroupPager.ts","../../../projects/es-table/src/lib/domain/internals/classes/GroupRouteFragment.ts","../../../projects/es-table/src/lib/domain/internals/classes/ThAggregation.ts","../../../projects/es-table/src/lib/components/es-td/es_td.component.ts","../../../projects/es-table/src/lib/components/es-th/es_th.component.ts","../../../projects/es-table/src/lib/directives/es_td.directive.ts","../../../projects/es-table/src/lib/directives/es_th.directive.ts","../../../projects/es-table/src/lib/tokens.ts","../../../projects/es-table/src/lib/components/es-table/es_table.component.loc.ts","../../../projects/es-table/src/lib/domain/configuration/EsTableDefaultable.ts","../../../projects/es-table/src/lib/core/handlers/classes/ColumnMetadataHandler.ts","../../../projects/es-table/src/lib/core/handlers/classes/DynamicModeHandler.ts","../../../projects/es-table/src/lib/core/handlers/classes/ExportHandler.ts","../../../projects/es-table/src/lib/core/handlers/classes/HierarchyModeHandler.ts","../../../projects/es-table/src/lib/core/handlers/classes/ItemsHandler.ts","../../../projects/es-table/src/lib/core/handlers/classes/ReportModeHandler.ts","../../../projects/es-table/src/lib/core/handlers/classes/RowGroupingHandler.ts","../../../projects/es-table/src/lib/core/handlers/classes/SelectionHandler.ts","../../../projects/es-table/src/lib/core/handlers/classes/UtilitiesHandler.ts","../../../projects/es-table/src/lib/components/es-table/es_table.component.ts","../../../projects/es-table/src/lib/domain/configuration/EsTableModuleConfig.ts","../../../projects/es-table/src/lib/components/pager/table_pager.component.loc.ts","../../../projects/es-table/src/lib/components/pager/table_pager.component.ts","../../../projects/es-table/src/lib/es-table.module.ts","../../../projects/es-table/src/public-api.ts","../../../projects/es-table/src/esfaenza-es-table.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n 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;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","/**\r\n * Classe che identifica un ordinamento di una colonna\r\n */\r\nexport class AppOrdering {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} id ID della colonna a cui si vogliono applicare ordinamenti, deve combaciare all'id messo nella dichiarazione dell'ES-TD/TH\r\n * @param {'DESC' | 'ASC' } order Ordinamento da applicare alla colonna, Discendente/Ascendente, default 'null' per indicare assenza di ordine\r\n */\r\n constructor(public id: string, public order?: 'DESC' | 'ASC') { }\r\n}","import { AppOrdering } from './AppOrdering';\r\nimport { ItemsSelection } from './ItemsSelection';\r\nimport { Group } from './Group';\r\nimport { GroupFilter } from './GroupFilter';\r\nimport { GroupOrAggregation } from './GroupOrAggregation';\r\n\r\n/**\r\n * Classe che identifica una ricerca paginata in tutte le sue sfumature (di grigio)\r\n */\r\nexport class AppSearch<T> {\r\n\r\n /**\r\n * Costruttore che genera un'istanza coi valori di default e impostando **firstsearch** a **true**\r\n */\r\n constructor() {\r\n this.itemsperpageoverride = 15;\r\n this.items = [];\r\n this.orders = [];\r\n this.columns = [];\r\n this.column_ordering = [];\r\n this.savedstate = false;\r\n this.searchinprogress = false;\r\n this.firstsearch = true;\r\n }\r\n\r\n /** Indica se c'è una ricerca in corso */\r\n public searchinprogress: boolean;\r\n /** Indica il numero totale di pagine trovate dalla ricerca. Ogni pagina è una lista di **itemsperpageoverride** oggetti */\r\n public pages: number;\r\n /** Conteggio totale degli oggetti trovati (inclusi quelli in pagine non attualmente selezionate) */\r\n public objectcount: number;\r\n /** Conteggio totale dei gruppi trovati (inclusi quelli in pagine non attualmente selezionate) */\r\n public groupcount: number;\r\n /** Pagina attualmente in visualizzazione */\r\n public page: number;\r\n /** Numero di oggetti da persentare in ogni pagina. Per convenzione si considera valorizzato a 15 se non fornito */\r\n public itemsperpageoverride: number;\r\n /** Lista degli oggetti nella pagina attualmente in visualizzazione */\r\n public items: T[];\r\n /** Dizionario contenente tutti i gruppi paginati */\r\n public groups: Group[];\r\n /** Lista di colonne per cui ordinare */\r\n public orders: AppOrdering[];\r\n /** Lista di colonne da visualizzare */\r\n public columns: string[];\r\n /** Lista di colonne nell'ordine corretto */\r\n public column_ordering: string[];\r\n /** Indica se la ricerca era salvata. Qualora fosse questo il caso, al caricamento l'es-table si occuperà di ri-effettuare la ricerca ed aggiornare il modello */\r\n public savedstate: boolean;\r\n /** Indica se bisogna ancora effettuare la prima ricerca */\r\n public firstsearch: boolean;\r\n\r\n /**\r\n * Oggetto che indica la selezione corrente. \r\n * \r\n * Se **all** è **true** vuole dire che è tutto selezionato ed eventualmente ci sono delle esclusioni (**exclusions**)\r\n * Se **all** è **false** vuol dire che sono selezionati **item** specifici\r\n * \r\n * In base all'Input **UseSelectionCache** le proprietà **exclusions** e **items** fanno riferimento o alla pagina corrente (se **false**) \r\n * o all'intera ricerca (se **true**)\r\n */\r\n public selection: ItemsSelection<T>;\r\n\r\n /**\r\n * Indica che la ricerca è stata richiesta dall'estable. Questa variabile NON deve essere toccata. È gestita al 100% dall'es-table. \r\n * \r\n * L'unica cosa che serve è che nel modello lato C# sia presente in modo da non perderla durante la serializzazione\r\n */\r\n public internalsearchrequest: boolean;\r\n\r\n /** Raggruppamenti da fare per questa query. Se impostato e non ci sono **filtergroup** mi aspetto di ricevere oggetti nel campo **groups** */\r\n public groupings: GroupOrAggregation[];\r\n\r\n /**\r\n * Filtro da applicare ai gruppi. Qualora il numero di filtri qui fosse uguale al numero di raggruppamenti mi inizio ad apettare di ricevere oggetti\r\n * sul campo **items**, in caso contrario mi aspetto di ricevere o i gruppi nel campo **groups** o l'N-esimo livello dei gruppi\r\n */\r\n public requestedgroups: GroupFilter[];\r\n\r\n /**\r\n * Permette di resettare questo oggetto ai valori di default\r\n */\r\n public reset() {\r\n this.pages = 1;\r\n this.objectcount = 0;\r\n this.searchinprogress = false;\r\n this.firstsearch = false;\r\n this.page = 1;\r\n this.itemsperpageoverride = 15;\r\n this.items = [];\r\n this.orders = [];\r\n this.columns = [];\r\n this.column_ordering = [];\r\n this.savedstate = false;\r\n }\r\n}","/** Classe che identifica una colonna. Utilizzata in modalità \"Colonne dinamiche\" */\r\nexport class EsTableColumnsDefinition {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} description Descrizione della colonna\r\n * @param {string} propertyName Nome della proprietà del modello in cui sono contenuti i dati da visualizzare per questa colonna\r\n * @param {string} routePath Route di navigazione. Es. \"['/pages/mod/mod_detail', { 'idItem': '{0}', 'idItem2' : '{1}' }]\"\r\n * @param {string[]} routeParameterProperties Proprietà da bindare a **routePath** per generare la route completa. \r\n * L'indice scritto in **routePath** è l'indice di accesso a questo array. Es. [\"iditem\", \"iditem2\"]\r\n * @param {'ASC' | 'DESC' } dataOrder Ordinamento dei dati presentati in questa colonna\r\n * @param {number} columnOrder Ordinamento di questa colonna\r\n * @param {boolean} visible Visibilità o meno della colonna\r\n * @param {string} clss Classe da applicare sia ai TD che ai TH relativi a questa colonna\r\n * @param {boolean} orderable Indica se la colonna è ordinabile o no (nel senso ASC / DESC / NONE)\r\n * @param {boolean} headerWraps Indica se il testo dell'header dev'essere wrappato all'interno del th. Di default no.\r\n */\r\n constructor(\r\n public description: string,\r\n public propertyName: string,\r\n public routePath: string = null,\r\n public routeParameterProperties: string[] = null,\r\n public dataOrder: 'ASC' | 'DESC' = null,\r\n public columnOrder: number = null,\r\n public visible: boolean = true,\r\n public clss: string = null,\r\n public orderable: boolean = true,\r\n public headerWraps: boolean = false) {\r\n\r\n }\r\n\r\n /** Routerlink che verrà generato a runtime basandosi sulle informazioni di **routePath** e **routeParameterProperties** */\r\n public routerLink: any;\r\n}","/** Classe che definisce un oggetto generico come lista di proprietà-valore */\r\nexport class GenericItem {\r\n\r\n /** @ignore */\r\n constructor() {\r\n this._selected = false;\r\n this._rowClass = null;\r\n this._hash = null;\r\n this.properties = {};\r\n }\r\n\r\n /** Dizionario delle proprietà dell'oggeto con il loro valore */\r\n public properties: Record<string, string>;\r\n /** Indica se l'oggetto in questione è selezionato o meno */\r\n public _selected: boolean;\r\n /** Viene valorizzato da un eventuale **RowClassAssigner** (o automaticamente se in modalità gerarchica) e serve applicare stili particolari alla intera riga */\r\n public _rowClass: string;\r\n /** Hash dell'oggetto per generare i contesti di bind all'interno dell'es-table (vedere eventualmente l'implementazione specifica) */\r\n public _hash: string;\r\n}","\r\n/** Indica un'opzione cliccabile nel Corner Menù della tabella (il menù richiamabile dai 3 pallini verticli in alto a destra) */\r\nexport class CornerMenuOption {\r\n\r\n /** Id dell'operazione. I callback relativi verranno effettuati con questo */\r\n public id: string;\r\n /** Descrizione dell'operazione da presentare all'utente */\r\n public description: string;\r\n}","import { ReportParam, ReportOrder, ReportResult } from \"../..\";\r\n\r\n/** Definizione generica di un report che può o no disporre di paginazione/export e la cui richiesta è basata su uno o più parametri */\r\nexport class ReportDefinition {\r\n\r\n /** Codice report */\r\n public id: string;\r\n /** Descrizione report */\r\n public description: string;\r\n /** Indica se questo report dispone/può disporre di paginazione */\r\n public pagingavailable: boolean;\r\n /** Pagina attualmente in visualizzazione */\r\n public page: number;\r\n /** Numero massimo di pagine */\r\n public pages: number;\r\n /** Numero di elementi per pagina, si consideri 15 in caso questo parametro non fosse assegnato */\r\n public itemsperpageoverride: number;\r\n /** Formato di Export disponibile */\r\n public expformat: string;\r\n /** Parametri del report */\r\n public pars: ReportParam[];\r\n /** Informazioni di ordinamento dati delle colonne relative al report */\r\n public orders: ReportOrder[];\r\n /** Risultato della ricerca di un report, equivalente all'**items** dell'AppSearch e nel formato specifico dei report */\r\n public result: ReportResult;\r\n}","\r\n/** Classe che identifica una direttiva di ordinamento per un report */\r\nexport class ReportOrder {\r\n\r\n /** Ordine */\r\n public order: string;\r\n /** Colonna relativa */\r\n public column: string;\r\n}","/** Classe che rappresenta una colonna di un report */\r\nexport class ReportColumn {\r\n\r\n /** Id della colonna */\r\n public id: string;\r\n /** Descrizione della colonna (Header) */\r\n public description: string;\r\n /** Colore in notazione HTML */\r\n public color: string;\r\n /** Tipo di campo contenuto in questa colonna */\r\n public type: number;\r\n /** Sequenza per eventuali ordinamenti */\r\n public seq: number;\r\n /** Ordinamento dei dati presentati */\r\n public order: string;\r\n}","import { ReportColumn, ReportRow } from \"../..\";\r\n\r\n/** Classe che rappresenta una lista di oggetti generati da un report */\r\nexport class ReportResult {\r\n\r\n /** Numero di oggetti generati */\r\n public count: number;\r\n /** Se il report è vuoto o no (essenzialmente è un **count == 0**) */\r\n public empty: boolean;\r\n /** Colonne del report (indicazione delle varie proprietà da mostrare e Header con cui mostrarli) */\r\n public columns: ReportColumn[];\r\n /** Righe del report: 1 riga = 1 oggetto */\r\n public rows: ReportRow[];\r\n}","/** Classe che rappresenta i valori delle proprietà di un oggetto Report */\r\nexport class ReportRow {\r\n \r\n /** Valori dell'oggetto in ordine sequenziale */\r\n public values: string[];\r\n}","\r\n/** Classe che identifica un parametro generico per un report */\r\nexport class ReportParam {\r\n\r\n /** Codice del parametro */\r\n public id: string;\r\n /** Descrizione del parametro */\r\n public description: string;\r\n /** Tipo enumerabile del parametro (qualora fosse un dizionario di valori) */\r\n public enumtype: string;\r\n /** Colonna relativa e questo parametro */\r\n public column: string;\r\n /** Tipo del dizionario */\r\n public dictype: string;\r\n /** Sequenza del parametro per ordinarlo logicamente rispetto agli altri */\r\n public seq: number;\r\n /** Typecode C# della tipologia di parametro */\r\n public typecode: number;\r\n /** Indica se i parametro è richiesto o meno */\r\n public required: boolean;\r\n /** Valore del parametro, offerto sia come valore di default o in alternativa riempito lato UI */\r\n public value: any;\r\n /** Indica se questo parametro si basa su un enum. Se questa proprietà è true mi aspetto che almeno **enumtype** sia valorizzato */\r\n public isenum: boolean;\r\n /** Indica se questo parametro si basa su un dizionario. Se questa proprietà è true mi aspetto che almeno **dictype** sia valorizzato */\r\n public isdictionary: boolean;\r\n /** Indica se il parametro è di tipo data */\r\n public isdate: boolean;\r\n /** Indica se il parametro è di tipo boolean */\r\n public isboolean: boolean;\r\n /** Indica un filtro da applicare nei confronti del Backend qualora si vogliano caricare solo le possibilità logicamente accettabili per questo parametro */\r\n public dictionaryfilter: string;\r\n /** Valori disponibili per questo parametro, da valorizzare in caso **enumtype** o **dictype** fossero valorizzati */\r\n public availablevalues: { id: string; description: string; }[];\r\n /** Tipologia lato \"typescript\" di questo parametro, dev'essere sempre logicamente congruente al **typecode** */\r\n public type: \"string\" | \"number\" | \"date\" | \"boolean\";\r\n /** Eventuale pattern di validazione per questo parametro */\r\n public pattern: string;\r\n}","\r\n/** Indica operazioni dinamiche generiche che possono essere effettuate per riga. Appaiono come colonne extra sul lato sinistro della tabella */\r\nexport class EsTableOperationDefinition {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} id Codice dell'operazione\r\n * @param {string} title Titolo dell'operazione, da presentare all'utente su hover della cella\r\n * @param {string} iconClass Classe che fornisca un iconcina Es. \"fa fa-remove\"\r\n * @param {string} text Eventuale testo presentato nella cella, genericamente va in alternativa a **iconClass**\r\n * @param {string} conditionField Indica il campo dell'oggetto sottostante su cui verificare la visibilità o meno di questa icona\r\n * @param {string} conditionValue Indica il valore che la proprietà **conditionField** dell'oggetto sottostante deve assumere affinché questa opzione si veda\r\n */\r\n constructor(\r\n public id: string, \r\n public title: string, \r\n public iconClass?: string, \r\n public text?: string, \r\n public conditionField?: string, \r\n public conditionValue?: string) {\r\n }\r\n}","import { Group } from \"../..\";\r\n\r\n/** Identifica una selezione applicabile agli oggetti presentati in una tabella */\r\nexport class ItemsSelection<T> {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {T[]} selected Oggetti da considerare selezionati\r\n */\r\n constructor(selected: T[]) {\r\n this.count = selected.length;\r\n this.items = selected;\r\n this.all = false;\r\n this.exclusions = [];\r\n this.groups = [];\r\n this.group_exclusions = [];\r\n }\r\n\r\n /** Conteggio degli oggetti selezionati */\r\n public count: number;\r\n /** Se **all** è **false** indica gli elementi da includere, altrimenti è insensato */\r\n public items: T[]\r\n /** Se **all** è **false** indica i gruppi, altrimenti è insensato */\r\n public groups: Group[];\r\n /** Indica se tutti gli elementi sono da considerarsi selezionati (anche quelli di altre pagine) */\r\n public all: boolean = false;\r\n /** Se **all** è **true**, indica gli elementi da escludere, altrimenti è insensato */\r\n public exclusions: T[] = [];\r\n /** Se **all** è **true**, indica i gruppi da escludere, altrimenti è insensato */\r\n public group_exclusions: Group[] = [];\r\n}","import { GroupAggregation } from \"./GroupAggregation\";\r\n\r\n/** Classe che rappresenta un Gruppo con le proprie aggregazioni */\r\nexport class Group {\r\n\r\n /**\r\n * Costruttore\r\n *\r\n * @param {string} column ID della colonna raggruppata\r\n * @param {number} count Numero di elementi raggruppati sotto questa colonna\r\n * @param {string} value Valore del Gruppo\r\n */\r\n constructor(\r\n public column: string,\r\n public count: number,\r\n public value: string) {\r\n\r\n this.aggregations = [];\r\n }\r\n\r\n /** Aggregazioni presenti su questo gruppo, valide per tutte le altre colonne (non a loro volta gruppate) */\r\n public aggregations: GroupAggregation[];\r\n}","/** Classe che rappresenta un'aggregazione */\r\nexport class GroupAggregation {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} column ID della colonna aggregata\r\n * @param {'min' | 'max' | 'sum' } aggregation Aggregazione da effettuare su questa colonna\r\n * @param {string} value Valore dell'aggregazione\r\n */\r\n constructor(\r\n public column: string,\r\n public aggregation: 'min' | 'max' | 'sum',\r\n public value: string) { }\r\n}\r\n","/** Classe che rappresenta un filtro su un gruppo */\r\nexport class GroupFilter {\r\n\r\n /**\r\n * Costruttore\r\n *\r\n * @param {string} column ID della colonna gruppata per cui si richiede di filtrare\r\n * @param {string} value Valore del gruppo su questa **column** per cui si richiede di filtrare\r\n */\r\n constructor(\r\n public column: string,\r\n public value: string) { }\r\n}\r\n","/** Classe che rappresenta o un gruppo o una aggregazione su una colonna. Usata solo internamente */\r\nexport class GroupOrAggregation {\r\n\r\n /**\r\n * Costruttore\r\n *\r\n * @param {string} column Colonna su cui è presente o un gruppo o un'aggregazione\r\n * @param {'min' | 'max' | 'sum' } aggregation Aggregazione presente sulla **column**. Se questo campo è nullo significa che è un gruppo.\r\n * @param {'string' | 'date' | 'number'} datatype Tipo di dati contenuto nella colonna **column** se non c'è alcuna aggregazione è inutile, pertanto non sarà valorizzato\r\n */\r\n constructor(\r\n public column: string,\r\n public aggregation?: 'min' | 'max' | 'sum',\r\n public datatype?: 'string' | 'date' | 'number') { }\r\n}\r\n","/** Rappresenta un trittico formato da un array e due cache relative a tale array per un accesso estremamente veloce per tutte le operazioni del caso */\r\nexport class CacheTriptic {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {Map<string, any>} cache Cache Chiave-Oggetto\r\n * @param {Map<string, number>} index_cache Cache Indice-Oggetto\r\n * @param {any[]} array Array contenente gli oggetti\r\n */\r\n constructor(\r\n public cache: Map<string, any>,\r\n public index_cache: Map<string, number>,\r\n public array: any[]) { }\r\n}","import { TemplateRef } from \"@angular/core\";\r\n\r\n/** Definizione di una colonna, utilizzato nella dialog che permette di modificare le posizioni e le visibilità */\r\nexport class EsTableColumn {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} id Id colonna\r\n * @param {string} description Descrizione (Header)\r\n * @param {boolean} visible Indica se di default mostrarla o meno\r\n * @param {boolean} fixed Indica se è una colonna fixed\r\n * @param {boolean} pinned Indica se è una colonna pinnata\r\n * @param {number} pinnedWidth Indica la dimensione da assegnare a questa colonna quando è pinnata\r\n * @param {TemplateRef<any>} template Indica il template da usare per mostrare il testo dell'Header\r\n */\r\n constructor(\r\n public id: string,\r\n public description: string,\r\n public visible: boolean,\r\n public fixed: boolean,\r\n public pinned: boolean,\r\n public pinnedWidth: number,\r\n public template: TemplateRef<any>) { }\r\n\r\n /** Indice precedente in cui si trovava questa colonna in modo da poterla spinnare in maniera super sexy */\r\n public prev_index: number;\r\n}\r\n","import { AppSearch, GroupRouteFragment } from \"../..\";\r\n\r\n/** Classe che rappresenta un separatore da inserire fra gli oggetti dell'es-table per le operazioni di paginazione dei raggruppamenti per riga */\r\nexport class GroupPager {\r\n \r\n /**\r\n * Costruttore\r\n * \r\n * @param {number} groupLevel Livello del gruppo a cui questo separatore fa riferimento\r\n * @param {string} parentKey Chiave del gruppo parent se esiste\r\n * @param {AppSearch<any>} view Vista di ricerca collegata a questo elemento\r\n * @param {'groups' | 'items'} searches Indica che cosa cerca questo separatore, se sottogruppi o oggetti\r\n */\r\n constructor(\r\n public _grouplevel: number,\r\n public _thisRoute: GroupRouteFragment[],\r\n public _parent: string,\r\n public view: AppSearch<any>,\r\n public searches: 'groups' | 'items') {\r\n\r\n this._sep = true;\r\n this.buttons = [];\r\n }\r\n\r\n /** Indica che è un separatore, sempre impostato a **true** */\r\n public _sep: boolean;\r\n /** Array dei pulsanti da collegare lato interfaccia per le paginazione */\r\n public buttons: any[];\r\n}","/**\r\n * Classe che rappresenta un singolo frammento di route di un elemento gruppo o non. Un array di questi indica tutte le colonne di gruppo con i loro valori\r\n * per arrivare ad una ricerca su sottogruppi o elementi relativi\r\n */\r\nexport class GroupRouteFragment {\r\n\r\n /**\r\n * Costruttore\r\n *\r\n * @param {string} column Colonna di raggruppamento\r\n * @param {string} value Valore della colonna di raggruppamento\r\n */\r\n constructor(\r\n public column: string,\r\n public value: string) { }\r\n}","/** Classe rappresentante una singola aggregazione effettuata su una colonna */\r\nexport class ThAggregation {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {'min' | 'max' | 'sum'} func Funzione di aggergazione, può essere **min**, **max** o **sum**\r\n * @param {string} format Formato richiesto per il valore dell'aggregazione\r\n * @param {string} match Match intero del pezzo di testo da cui si è estrapolata l'aggregazione, da rimpiazzare col valore calcolato\r\n */\r\n constructor(\r\n public func: 'min' | 'max' | 'sum',\r\n public format: string,\r\n public match: string) { }\r\n}","//Angular\r\nimport { Component, Input, Renderer2, ElementRef, ViewContainerRef, ChangeDetectionStrategy } from \"@angular/core\";\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\n\r\n/** Componente rappresentante una singola cella del body della tabella */\r\n@Component({\r\n selector: \"[es-td]\",\r\n templateUrl: \"./es_td.component.html\",\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class EsTd {\r\n\r\n /** Id della cella, dev'essere lo stesso della colonna **EsTh** relativa */\r\n @Input('es-td') ID: string = \"\";\r\n\r\n /** Indica se è una cella interna (rigenerata programmaticamente) o no */\r\n @Input() Internal?: boolean;\r\n\r\n /** RouterLink qualora il click su questa cella debba navigare da qualche parte */\r\n @Input() RouterLink?: any;\r\n\r\n /** Valore da mostrare all'interno della cella. Se omesso verrà proiettato il contenuto dal template in cui è stata usata */\r\n @Input() Display?: string = null;\r\n\r\n /** Template Angular da istanziare per questo TD */\r\n @Input() Template?: any = null;\r\n\r\n /** Classi da applicare alla cella */\r\n public Class?: string;\r\n\r\n /** Contenuto da mostrare proiettato dal componente padre */\r\n public Content?: SafeHtml;\r\n\r\n /** Contesto dell'oggetto a cui si riferisce il dato visualizzato. Contiene l'hash dell'oggetto in questione */\r\n @Input() Context: string;\r\n\r\n /** Indicazioni sulla visibilità della cella */\r\n private _Visible?: boolean;\r\n\r\n /** @ignore */\r\n constructor(private myself: ElementRef, private renderer: Renderer2, private _viewContainer: ViewContainerRef, protected sanitizer: DomSanitizer) { }\r\n\r\n /**\r\n * Imposta la visibilità o meno della cella, si traduce nell'applicazione o rimozione della classe **app-display-none**\r\n * \r\n * @param {boolean} expression Indicazione della visibilità\r\n */\r\n @Input() set Visible(expression: boolean) {\r\n this._Visible = expression;\r\n\r\n if (expression)\r\n this.renderer.removeClass(this.myself.nativeElement, \"app-display-none\");\r\n else\r\n this.renderer.addClass(this.myself.nativeElement, \"app-display-none\");\r\n }\r\n\r\n /**\r\n * Restituisce lo stato di Visibilità della cella in oggetto\r\n * \r\n * @returns {boolean} **true** se visibile, **false** altrimenti\r\n */\r\n get Visible(): boolean {\r\n if (this._Visible == undefined)\r\n this._Visible = true;\r\n\r\n return this._Visible;\r\n }\r\n\r\n /** @ignore */\r\n ngAfterViewInit() {\r\n // Se è Internal significa che è gestita internamente da ES-TABLE quindi evito di fare sti due passaggi di lettura del DOM\r\n if (this.Internal)\r\n return;\r\n\r\n // L'hash è calcolato dalla ES-table in fase di binding\r\n this.Context = this.Context || this.getTemplateContext()._hash;\r\n this.Content = this.Display === null || this.Display === \"\" ? this.sanitizer.bypassSecurityTrustHtml(this.myself.nativeElement.innerHTML) : this.sanitizer.bypassSecurityTrustHtml(this.Display);\r\n this.Class = this.myself.nativeElement.className.replace(\"app-display-none\", \"\");\r\n }\r\n\r\n /** Ottiene il contesto della view su cui è istanziato il componente */\r\n private getTemplateContext() {\r\n // NGBUG: (<any>this._viewContainer)._view non esiste più in IVY: https://stackoverflow.com/questions/60398827/getting-the-context-of-the-template-inside-of-which-my-component-has-been-render\r\n let vc = (<any>this._viewContainer);\r\n let context;\r\n // Primo giro di recupero del contesto, supponendo di non avere a che fare col compilatore IVY\r\n if (vc._view == null)\r\n context = null;\r\n else if (vc._view.parent && !vc._view.context.$implicit && vc._view.parent.context && vc._view.parent.context.$implicit)\r\n context = vc._view.parent.context.$implicit;\r\n else if (vc._view.context && vc._view.context.ngIf)\r\n context = vc._view.viewContainerParent.context.$implicit;\r\n else\r\n context = vc._view.context.$implicit;\r\n\r\n if (context)\r\n return context;\r\n\r\n // Se non ho ancora trovato il contesto probabilmente sono in IVY e devo fare dei lookup un po' incasinati per beccarlo\r\n var array = (<any>this._viewContainer)._hostLView;\r\n for (let i = 0; i < array.length; i++) {\r\n let item = array[i];\r\n if (item && item.$implicit && !item.ngIf)\r\n return item.$implicit;\r\n\r\n // Second level search for the real context in case the first one we find is an ngIf\r\n if (item && item.length && item.length > 0) {\r\n for (let ii = 0; ii < item.length; ii++) {\r\n let iitem = item[ii];\r\n if (iitem && iitem.$implicit && !iitem.ngIf)\r\n return iitem.$implicit;\r\n }\r\n }\r\n }\r\n }\r\n}","//Angular\r\nimport { Component, Input, Output, EventEmitter, ElementRef, ViewChild, Renderer2, HostListener, ChangeDetectionStrategy } from \"@angular/core\";\r\n\r\n/** Componente rappresentante una Colonna della tabella */\r\n@Component({\r\n selector: \"[es-th]\",\r\n templateUrl: \"./es_th.component.html\",\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class EsTh {\r\n\r\n /** Dizionario di mappatura con ordinamento attuale e ordinamento successivo per gestire i passaggi di stato */\r\n private orderNext: { [index: string]: 'DESC' | 'ASC' | null } = { \"NONE\": \"DESC\", \"DESC\": \"ASC\", \"ASC\": null };\r\n\r\n /** Indicazione sulla visibilità della colonna */\r\n private _Visible: boolean;\r\n\r\n /** Indica se si sta effettuando un'operazione di resize su questa colonna */\r\n private resizingThis: boolean = false;\r\n\r\n /**\r\n * Storicizza l'offset di partenza del resize dell'elemento HTML per poter calcolare la nuova dimensione richiesta durente il resize \r\n * \r\n * nuova width = startOffset + posizione X del mouse\r\n */\r\n private startOffset: number = null;\r\n\r\n /** Id della colonna, dev'essere lo stesso per tutti gli **EsTd** relativi */\r\n @Input('es-th') ID: string = \"\";\r\n\r\n /** Ordinamento attuale della colonna */\r\n @Input() Order?: 'DESC' | 'ASC';\r\n\r\n /** Indica se questa colonna è ordinabile o meno */\r\n @Input() Orderable: boolean = true;\r\n\r\n /** Valore da mostrare all'interno della colonna. Se omesso verrà proiettato il contenuto dal template in cui è stata usata */\r\n @Input() Display: string = \"\";\r\n\r\n /** Indica se le dimnsioni di questa colonna sono modificabili o meno */\r\n @Input() Resizable: boolean = false;\r\n\r\n /** Indica se questo header è pinnato. In caso lo fosse presenta il tastino per effettuare lo spinning */\r\n @Input() Pinned: boolean = false;\r\n\r\n /**\r\n * Indica se sta venendo eseguita una operazione di ricerca o meno, serve per evitare l'esecuzione di eventuale codice che potrebbe dare fastidio \r\n * come ad esempio l'escuzione di un ordinamento durante il caricamento di dati nuovi\r\n */\r\n @Input() SearchInProgress: boolean = false;\r\n\r\n /** Impostato dall'**EsTable**, serve per permettere o meno di effettuare ordinamenti dati su questa colonna */\r\n @Input() OrderBy: boolean;\r\n\r\n /** Indica se il testo presente in questo Header può andare a capo o meno, di default non può */\r\n @Input() Wrap: boolean = false;\r\n\r\n /** Indica se la colonna è fixed, cioè se non può né essere nascosta, né riposizionata. Solo le prime colonne possono essere Fixed */\r\n @Input() Fixed: boolean = false;\r\n\r\n /** Template Angular da istanziare per questo TH */\r\n @Input() Template?: any = null;\r\n\r\n /** Evento emesso al cambio di ordinamento effettuato su questa colonna */\r\n @Output() public onOrderChange: EventEmitter<'DESC' | 'ASC' | null> = new EventEmitter<'DESC' | 'ASC' | null>();\r\n\r\n /** Evento emesso all'unpinning della colonna */\r\n @Output() public onUnpinning: EventEmitter<string> = new EventEmitter<string>();\r\n\r\n /** Proiezione del contenuto di questa colonna */\r\n @ViewChild(\"content\", { static: false }) content: ElementRef;\r\n\r\n /** Classi da applicare alla colonna */\r\n public Class: string;\r\n\r\n /** Impostato dall'**EsTable**, per controllare che ci sia almeno un TD che utilizzi quest'header */\r\n public _referenced: boolean = false;\r\n\r\n /** Variabile finale su cui è bindato il contenuto della cella. Sarà valorizzato a **Display** se specificato, all'**innerHTML** dell'elemento proiettato altrimenti */\r\n public Description: string;\r\n\r\n /** @ignore */\r\n constructor(private myself: ElementRef, private renderer: Renderer2) { }\r\n\r\n /**\r\n * Imposta la visibilità o meno della colonna, si traduce nell'applicazione o rimozione della classe **app-display-none**\r\n * \r\n * @param {boolean} expression Indicazione della visibilità\r\n */\r\n @Input() set Visible(expression: boolean) {\r\n this._Visible = expression;\r\n\r\n if (expression)\r\n this.renderer.removeClass(this.myself.nativeElement, \"app-display-none\");\r\n else\r\n this.renderer.addClass(this.myself.nativeElement, \"app-display-none\");\r\n }\r\n\r\n /**\r\n * Restituisce lo stato di Visibilità della colonna in oggetto\r\n * \r\n * @returns {boolean} **true** se visibile, **false** altrimenti\r\n */\r\n get Visible(): boolean {\r\n if (this._Visible == undefined)\r\n this._Visible = true;\r\n\r\n return this._Visible;\r\n }\r\n\r\n /** @ignore */\r\n ngAfterViewInit() {\r\n //Assegnare direttamente il content è più veloce che passare dal native element per qualche motivo\r\n this.Description = this.Display === null || this.Display === \"\" ? this.content.nativeElement.innerText : this.Display;\r\n\r\n this.Class = this.myself.nativeElement.className.replace(\"app-display-none\", \"\");\r\n\r\n //Resize\r\n if (this.Resizable)\r\n this.renderer.addClass(this.myself.nativeElement, \"app-relative\");\r\n }\r\n\r\n /** Emette l'evento di unpinning */\r\n unpin() {\r\n this.onUnpinning.emit(this.ID);\r\n }\r\n\r\n /** Gestisce la modifica dell'ordinamento qualora venisse cliccato su questa colonna */\r\n setupNextOrderAndNotify() {\r\n if (!this.ID) {\r\n console.log(\"Attempt to order a column without ID. Operation ignored\");\r\n return;\r\n }\r\n\r\n if (this.SearchInProgress) {\r\n console.log(\"Attempt to order a column during a search. Operation ignored\");\r\n return;\r\n }\r\n\r\n if (!this.OrderBy || !this.Orderable)\r\n return;\r\n\r\n var nextOrder = this.orderNext[this.Order || \"NONE\"];\r\n this.Order = nextOrder;\r\n\r\n this.onOrderChange.emit(this.Order);\r\n }\r\n\r\n /**\r\n * Evento di inizio resize della colonna\r\n * \r\n * @param {any} ev Evento MouseDown\r\n */\r\n onResizeStart(ev) {\r\n if (!this.Resizable)\r\n return;\r\n\r\n this.resizingThis = true;\r\n this.startOffset = this.myself.nativeElement.offsetWidth - ev.pageX;\r\n }\r\n\r\n /** Listener per la fine dell'operazione di resize */\r\n @HostListener('window:mouseup.out-zone')\r\n public onMouseUp(): void {\r\n if (!this.Resizable)\r\n return;\r\n\r\n this.resizingThis = false;\r\n }\r\n\r\n /**\r\n * Listener per gestire il movimento del mouse qualora un'operazione di resize fosse in esecuzione\r\n * \r\n * @param {$event} ev Evento MouseMove\r\n */\r\n @HostListener('window:mousemove.out-zone', ['$event'])\r\n public onMouseMove($event): void {\r\n if (!this.Resizable || !this.resizingThis)\r\n return;\r\n\r\n //Uso jquery per non dover far partire un intero ciclo di change detection solo per fare un resize del cazzo\r\n //(anche perché viene lanciato ogni 0.1 secondo quindi not a good idea)\r\n this.myself.nativeElement.style.width = (this.startOffset + $event.pageX) + \"px\";\r\n\r\n //Fermo il bubbling per non fare cose strane\r\n $event.preventDefault();\r\n }\r\n}","import { Directive, Input, TemplateRef } from '@angular/core';\r\n\r\n/** Direttiva per la dichiarazione snella di un EsTd da emettere per ogni elemento, data una colonna */\r\n@Directive({ selector: '[td]' })\r\nexport class EsTdDirective {\r\n\r\n /** Variabile interna che indica il fatto che questo componente è una direttiva. Serve per disambigualrlo dell'EsTdComponent */\r\n public _directive = true;\r\n\r\n /** Indica se la cella è visibile o meno di default */\r\n @Input() tdVisible = true;\r\n\r\n /** Id della colonna, fa riferimento al **th** padre */\r\n @Input() td: string;\r\n\r\n /** Equivalente dell'NgIf sul td */\r\n @Input() tdIf: boolean = true;\r\n\r\n /** Eventuali classi da applicare al **td** generato */\r\n @Input() tdClass: string;\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(public Template: TemplateRef<any>) { }\r\n}","import { Directive, Input, TemplateRef } from \"@angular/core\";\r\n\r\nimport { ThAggregation } from \"../domain\";\r\n\r\n/** Direttiva per la dichiarazione snella di un EsTh da emettere come header */\r\n@Directive({ selector: '[th]' })\r\nexport class EsThDirective {\r\n\r\n /** Variabile interna all'interno della quale viene raccolta la cache delle aggregazioni specificate in thAggregation */\r\n public _thAggregations: ThAggregation[] = null;\r\n\r\n /** Variabile interna che indica il fatto che questo componente è una direttiva. Serve per disambigualrlo dell'EsThComponent */\r\n public _directive = true;\r\n\r\n /** Variabile interna impostata dall'**EsTable**, per controllare che ci sia almeno un TD che utilizzi quest'header */\r\n public _referenced: boolean = false;\r\n\r\n /** Id della colonna, dev'essere lo stesso per tutti i **td** relativi */\r\n @Input() th: string = \"\";\r\n\r\n /** Indica se la colonna è pinnata o no */\r\n @Input() thPinned: boolean = false;\r\n\r\n /** Indica le dimensioni che deve avere questa colonna quando viene pinnata, senza questo tutte le colonne mi collasserebbero l'una sull'altra */\r\n @Input() thPinnedWidth: number = 150;\r\n\r\n /** Indicazione sulla visibilità della colonna */\r\n @Input() thVisible: boolean = true;\r\n\r\n /** Indica se la colonna è fixed, cioè se non può né essere nascosta, né riposizionata. Solo le prime colonne possono essere Fixed */\r\n @Input() thFixed: boolean = false;\r\n\r\n /** Indica che la colonna è sotto ad un raggruppamento padre, con questo nome nel **th** */\r\n @Input() thParent: string = \"\";\r\n\r\n /** Ordinamento attuale della colonna */\r\n @Input() thOrder?: 'DESC' | 'ASC';\r\n\r\n /** Indica se questa colonna è ordinabile o meno */\r\n @Input() thOrderable: boolean = true;\r\n\r\n /** Indica se il testo presente in questo Header può andare a capo o meno, di default non può */\r\n @Input() thWrap: boolean = false;\r\n\r\n /** Indica se le dimnsioni di questa colonna sono modificabili o meno */\r\n @Input() thResizable: boolean = false;\r\n\r\n /** Classi da applicare all'Header della colonna */\r\n @Input() thClass: string;\r\n\r\n /** Classi da applicare alle righe quando rappresentano un Gruppo */\r\n @Input() thGroupClass: string;\r\n\r\n /** Equivalente dell'NgIf sul th */\r\n @Input() thIf: boolean = true;\r\n\r\n /** Indica che bisogna fare un raggruppamento su questa colonna */\r\n @Input() thGroup : boolean = false;\r\n\r\n /** Indica che bisogna fare una aggregazione su questa colonna, a fronte di almeno un altra con un raggruppamento */\r\n @Input() thAggregation : string = null;\r\n\r\n /** \r\n * @ignore\r\n */\r\n constructor(public Template: TemplateRef<any>) { }\r\n}","import { InjectionToken } from '@angular/core';\r\nimport { EsTableDefaultable } from './domain/configuration/EsTableDefaultable';\r\n\r\n/** Token che indica il locale da utilizzare all'interno del componente. Supportati solo \"it-IT\" ed \"en-US\" */\r\nexport const EST_LOCALE: InjectionToken<string> = new InjectionToken<string>('EST_LOCALE');\r\n\r\n/** Token che indica se emettere log a console o meno */\r\nexport const EST_DEBUG: InjectionToken<string> = new InjectionToken<string>('EST_DEBUG');\r\n\r\n/** Token che indica i default da assegnare agli Input */\r\nexport const EST_DEFAULTS: InjectionToken<EsTableDefaultable> = new InjectionToken<EsTableDefaultable>('EST_DEFAULTS');","import { Injectable, Inject, Optional } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { EST_LOCALE } from '../../tokens';\r\n\r\n/** Classe di localizzazione per il componente **EsTableComponent** */\r\n@Injectable()\r\nexport class EsTableLoc extends LocalizationService {\r\n\r\n /** @ignore */\r\n constructor(@Optional() @Inject(EST_LOCALE) LOC_LOCALE: string) { \r\n super(LOC_LOCALE ?? 'it-IT');\r\n \r\n \r\n super.set(\"en->it\", \"All the\", [\"Tutti gli\"]);\r\n super.set(\"en->it\", \"All\", [\"Tutto\"]);\r\n super.set(\"en->it\", \"Groups\", [\"Gruppi\"]);\r\n super.set(\"en->it\", \"Cannot export an empty dataset\", [\"Impossibile esportare un dataset vuoto\"]);\r\n super.set(\"en->it\", \"Performing Table bootstrap\", [\"Sto caricando la Tabella\"]);\r\n super.set(\"en->it\", \"Update every\", [\"Aggiorna ogni\"]);\r\n super.set(\"en->it\", \"second/s\", [\"secondo/i\"]);\r\n super.set(\"en->it\", \"Export View\", [\"Esporta Vista\"]);\r\n super.set(\"en->it\", \"Column Name\", [\"Nome Colonna\"]);\r\n super.set(\"en->it\", \"Columns Order\", [\"Ordine Colonne\"]);\r\n super.set(\"en->it\", \"Columns Visibility\", [\"Visibilità Colonne\"]);\r\n super.set(\"en->it\", \"There are no columns configured to be hidden/shown in this view\", [\"Non ci sono colonne configurate per essere visualizzate/nascoste in questa vista dati\"]);\r\n super.set(\"en->it\", \"Columns Visibility and Order\", [\"Visibilità e Ordine Colonne\"]);\r\n super.set(\"en->it\", \"Objects Selected\", [\"Oggetti Selezionati\"]);\r\n super.set(\"en->it\", \"Object Selected\", [\"Oggetto Selezionato\"]);\r\n super.set(\"en->it\", \"Select Everything\", [\"Seleziona Tutto\"]);\r\n super.set(\"en->it\", \"Reset Selection\", [\"Resetta Selezione\"]);\r\n super.set(\"en->it\", \"No operations available\", [\"Nessuna operazione disponibile\"]);\r\n super.set(\"en->it\", \"Paging options are not available for this report\", [\"Le opzioni di paginazione non sono disponibili per questo report\"]);\r\n }\r\n}","/** Raccolta di tutti gli Input dell'EsTable a cui può essere logicamente sensato assegnare default per progetto */\r\nexport class EsTableDefaultable {\r\n /** @ignore Vedi **EsTableComponent** */ ColumnsResizable?: boolean;\r\n /** @ignore Vedi **EsTableComponent** */ AutoUpdate?: boolean;\r\n /** @ignore Vedi **EsTableComponent** */ AllSearch?: boolean;\r\n /** @ignore Vedi **EsTableComponent** */ Export?: boolean;\r\n /** @ignore Vedi **EsTableComponent** */ HidePaging?: boolean;\r\n /** @ignore Vedi **EsTableComponent** */ HidePagingCount?: boolean;\r\n /** @ignore Vedi **EsTableComponent** */ HidePagingButtons?: boolean;\r\n /** @ignore Vedi **EsTableComponent** */ ContainerClass?: string;\r\n /** @ignore Vedi **EsTableComponent** */ TableClass?: string;\r\n /** @ignore Vedi **EsTableComponent** */ Selection?: boolean;\r\n /** @ignore Vedi **EsTableComponent** */ SavePreferences?: boolean;\r\n /** @ignore Vedi **EsTableComponent** */ PagingStyle?: 'both' | 'top' | 'bottom';\r\n /** @ignore Vedi **EsTableComponent** */ RowGroupingPagingStyle?: 'left' | 'right';\r\n /** @ignore Vedi **EsTableComponent** */ UseSelectionCache?: boolean;\r\n /** @ignore Vedi **EsTableComponent** */ ShowItemGroupsColumns?: boolean;\r\n /** @ignore Vedi **EsTableComponent** */ ArraymodeItemsPerPage?: number;\r\n}\r\n","// Angular\r\nimport { TemplateRef } from \"@angular/core\";\r\n\r\n// Libs\r\nimport { UtilityService } from \"@esfaenza/extensions\";\r\nimport { PreferencesService } from \"@esfaenza/preferences\";\r\n\r\n// Componenti / Direttive\r\nimport { EsTd } from \"../../../components/es-td/es_td.component\";\r\nimport { EsTh } from \"../../../components/es-th/es_th.component\";\r\nimport { EsTableComponent } from \"../../../components/es-table/es_table.component\"\r\nimport { EsTdDirective } from \"../../../directives/es_td.directive\";\r\nimport { EsThDirective } from \"../../../directives/es_th.directive\";\r\n\r\n// Handlers\r\nimport { UtilitiesHandler, RowGroupingHandler } from \"..\";\r\n\r\n// Modelli\r\nimport { AppOrdering, AppSearch, EsTableColumn } from \"../../../domain\";\r\n\r\n/** Classe che gestisce tutte le informaizoni relative alle colonne: visibilità, posizione, stato di pin/unpin, ecc ecc... */\r\nexport class ColumnMetadataHandler {\r\n\r\n /** @ignore Costruttore*/\r\n constructor(private est: EsTableComponent, private utilities: UtilitiesHandler, private utiExts: UtilityService, private prefService: PreferencesService, private rgH: RowGroupingHandler) { }\r\n\r\n /**\r\n * Metodo che gestisce il cambio di Ordinamento di una colonna\r\n *\r\n * @param {string} id ID della colonna il cui oridnamento è cambiato\r\n * @param {'DESC' | 'ASC'} order Nuovo ordine selezionato per la colonna\r\n */\r\n public handleTHOrderChange(id: string, order: 'DESC' | 'ASC') {\r\n let orders = this.est.viewMode ? (this.est.View as AppSearch<any>).orders : this.est.arrayOrders;\r\n let orderToAdd = true;\r\n let orderToRemove: number = null;\r\n\r\n // Se per qualche motivo il costruttore non è passato (cache tarpate o simila) fixo\r\n if (!orders && this.est.viewMode)\r\n (this.est.View as AppSearch<any>).orders = [];\r\n else if (!orders && this.est.arrayMode)\r\n this.est.arrayOrders = [];\r\n\r\n for (let i = 0; i < orders.length; i++) {\r\n let t = orders[i];\r\n if (t.id == id) {\r\n if (order) {\r\n t.order = order;\r\n orderToAdd = false;\r\n }\r\n else\r\n orderToRemove = i;\r\n }\r\n }\r\n\r\n if (orderToRemove != null) {\r\n orders.splice(orderToRemove, 1);\r\n }\r\n else if (orderToAdd) {\r\n if (this.est.MultipleOrderingDirectives)\r\n orders.push(new AppOrdering(id, order));\r\n else {\r\n if (this.est.viewMode)\r\n (this.est.View as AppSearch<any>).orders = [new AppOrdering(id, order)];\r\n else if (this.est.arrayMode)\r\n this.est.arrayOrders = [new AppOrdering(id, order)];\r\n }\r\n }\r\n\r\n this.est.onOrderChanged.emit({ id, order });\r\n\r\n if (this.est.viewMode) {\r\n if (this.est.groupSearchRequestsCache.length > 0)\r\n this.rgH.emitRowGroupingSearches(id, orders);\r\n else\r\n this.est.emitSearchRequest(false);\r\n }\r\n else if (this.est.arrayMode)\r\n this.est.internalWriteValue();\r\n }\r\n\r\n /**\r\n * Partendo dagli **EsThs** estrappolo la lista di **EsTableColumn** che questa tabella dovrà eventualmente gestire per Visibilità e Ordine\r\n *\r\n * Costo: 1 scan EsThs\r\n *\r\n * @param {EsTh[] | EsThDirective[]} ths Colonne della tabella\r\n */\r\n public reviewColumnsList(ths: EsTh[] | EsThDirective[]) {\r\n this.est.TMPColumnsList = [];\r\n if (ths.length == 0)\r\n return;\r\n\r\n // Appena il contentChildren è valorizzato scorro tutti gli header\r\n for (let i = 0; i < ths.length; i++) {\r\n let th = ths[i];\r\n\r\n if (this.utilities.isEsTh(th)) {\r\n // Se non ho un id il th è considerato inerte\r\n if (!th.ID)\r\n continue;\r\n\r\n th.OrderBy = this.est.OrderByColumn;\r\n\r\n // Salvo le informazioni dell'header per far parte della lista da cui scegliere quali colonne visualizzare/nascondere\r\n // Di default la visibilità è quella impostata nel componente\r\n if (this.est.HiddenColumns || th.Visible)\r\n this.est.TMPColumnsList.push(new EsTableColumn(th.ID, th.Description, th.Visible, th.Fixed, null, null, null));\r\n }\r\n else {\r\n let column = th.th;\r\n // Se non ho un id il th è considerato inerte\r\n if (!column)\r\n continue;\r\n\r\n // Salvo le informazioni dell'header per far parte della lista da cui scegliere quali colonne visualizzare/nascondere\r\n // Di default la visibilità è quella impostata nel componente\r\n if ((this.est.HiddenColumns || th.thVisible) && th.thIf) {\r\n let previouslyPinned = !this.est.ColumnsList || this.est.ColumnsList.length == 0 ? null : this.est.ColumnsList.find(t => t.id == column) || null;\r\n let toAdd = new EsTableColumn(column, null, th.thVisible, (th.thFixed || th.thGroup), previouslyPinned == null ? th.thPinned : previouslyPinned.pinned, th.thPinnedWidth, th.Template);\r\n if (previouslyPinned)\r\n toAdd.prev_index = previouslyPinned.prev_index;\r\n this.est.TMPColumnsList.push(toAdd);\r\n }\r\n }\r\n }\r\n this.est.ColumnsList = [];\r\n this.est.TMPColumnsList.forEach(c => { this.est.ColumnsList.push(Object.assign({}, c)); });\r\n }\r\n\r\n /**\r\n * Prende i th e i td in modalità diretive e li ordina in base a se ci sono colonne fixed o meno\r\n */\r\n public moveFixedColumnsAtTheBeginning(ths: EsTh[] | EsThDirective[], tds: EsTd[] | EsTdDirective[]) {\r\n\r\n let thsCache: { [index: string]: any; } = {};\r\n let fixeds = 0, pinneds = 0;\r\n let columnsCache: { [index: string]: EsTableColumn; } = {};\r\n let columnsIndexCache: { [index: string]: number; } = {};\r\n\r\n // Creo la cache delle colonne\r\n for (let coli = 0; coli < this.est.ColumnsList.length; coli++) {\r\n let col = this.est.ColumnsList[coli];\r\n columnsCache[col.id] = col;\r\n\r\n // Anche per le columnslist sposto le pinnate o le fixed all'inizio\r\n if (col.pinned) {\r\n if (coli != pinneds)\r\n this.utilities.arrayMove(this.est.ColumnsList, coli, pinneds);\r\n pinneds++;\r\n }\r\n\r\n if (col.fixed) {\r\n if (coli != pinneds + fixeds)\r\n this.utilities.arrayMove(ths, coli, pinneds + fixeds);\r\n fixeds++;\r\n }\r\n }\r\n\r\n pinneds = fixeds = 0;\r\n\r\n // Sposto tutti gli header fixed o pinned all'inizio\r\n for (let i = 0; i < ths.length; i++) {\r\n let th = ths[i];\r\n if (this.utilities.isEsTh(th)) {\r\n thsCache[th.ID] = th;\r\n if (th.Fixed) {\r\n if (i != pinneds + fixeds)\r\n this.utilities.arrayMove(ths, i, pinneds + fixeds);\r\n fixeds++;\r\n }\r\n }\r\n else {\r\n\r\n thsCache[th.th] = th;\r\n // Riassegno sempre per ripulire valori di partenza o per aggiornarli in caso di modifiche utente\r\n th.thPinned = (!columnsCache[th.th] && th.thPinned) || (columnsCache[th.th] && columnsCache[th.th].pinned);\r\n if (th.thPinned) {\r\n if (i != pinneds)\r\n this.utilities.arrayMove(ths, i, pinneds);\r\n pinneds++;\r\n }\r\n\r\n //In questo caso sono informazioni statiche invece, non modificabili dall'utente, quindi non mi dò preoccupazioni\r\n if (th.thFixed || th.thGroup) {\r\n if (i != pinneds + fixeds)\r\n this.utilities.arrayMove(ths, i, pinneds + fixeds);\r\n fixeds++;\r\n }\r\n }\r\n }\r\n\r\n if (this.utilities.isEsTh(ths[0]) || this.utilities.isEsTd(tds[0]))\r\n return;\r\n\r\n // Cache degli indici per riposizionare i td come i th\r\n for (let i = 0; i < ths.length; i++)\r\n columnsIndexCache[(<EsThDirective>ths[i]).th] = i;\r\n\r\n // Riordino le celle per fargli mantenere la stessa struttura dei th\r\n let newTds = new Array(ths.length);\r\n\r\n for (let i = 0; i < tds.length; i++) {\r\n let item = tds[i] as EsTdDirective;\r\n newTds[columnsIndexCache[item.td]] = item;\r\n }\r\n\r\n this.est.HasPinnedColumns = pinneds > 0;\r\n }\r\n\r\n /** In base alla configurazione delle colonne calcola le dimenioni delle colonne pinnate */\r\n public evaluatePinnedColumnsWidth() {\r\n if (!this.est.HasPinnedColumns)\r\n return;\r\n\r\n this.est.PinnedContainerWidth = 0;\r\n for (let i = 0; i < this.est.ColumnsList.length; i++) {\r\n let col = this.est.ColumnsList[i];\r\n if (col.pinned && col.visible)\r\n this.est.PinnedContainerWidth += col.pinnedWidth;\r\n }\r\n this.est.PinnedContainerWidth += this.est.Selection ? 25 : 0;\r\n }\r\n\r\n /**\r\n * Terminato il binding delle colonne da **reviewColumnsList** e della **View** dal **writeValue** questo metodo si occupa\r\n * dell'allineamento delle informazioni fra le colonne calcolate internamente e le informazioni sulle colonne che arrivano dall'AppSearch\r\n *\r\n * @param {AppSearch<any>} view AppSearch da utilizzare per questa operazione\r\n */\r\n public alignColumnsIfLoadedView(view: AppSearch<any>) {\r\n let emitChanged = this.est.viewMode && view.savedstate;\r\n let newColset = [];\r\n\r\n if (!this.est.ColumnsList || this.est.ColumnsList.length == 0)\r\n return;\r\n\r\n let columns = this.est.viewMode ? view.columns : this.est.arrayColumns;\r\n this.est.ColumnsList.forEach(c => {\r\n // Se la colonna è pinnata mi arriva col simoleon, ma anche se è una composizione di più colonne\r\n let exCl = columns.filter(cc => (cc.startsWith('§') ? cc.substring(1) : cc) == c.id);\r\n\r\n // Se la colonna è pinnata aggiorno l'informazione nella view\r\n if (exCl.length == 1)\r\n c.pinned = exCl[0].startsWith('§');\r\n\r\n // Se l'appsearch viene da uno stato precedente, uso le informazioni sulle colonne che ha dentro, altrimenti sovrascrivo tutto **\r\n if (c.visible && columns.length == 0)\r\n newColset.push(c.id);\r\n\r\n // Se ho una colonna lato AppSearch e nella ColumnList non è visibile, allineo all'AppSearch\r\n else if (exCl.length == 1 && !c.visible)\r\n c.visible = true;\r\n\r\n // Allineamento sull'AppSearch per casistiche inverse al di sopra\r\n else if (exCl.length == 0 && c.visible)\r\n c.visible = false;\r\n });\r\n\r\n // Non ho colonne nella appsearch, vuol dire che sono al primo binding\r\n if (columns.length == 0) {\r\n if (this.est.viewMode)\r\n view.columns = newColset;\r\n else\r\n this.est.arrayColumns = newColset;\r\n }\r\n\r\n if ((this.est.viewMode && view.savedstate) && this.est.ColumnsOrdering && view.column_ordering.length > 0) {\r\n // Scorro gli ordinamenti che avevo salvato e ricreo la ColumnsList in base a loro\r\n let newColList = [];\r\n view.column_ordering.forEach(co => {\r\n this.est.ColumnsList.forEach(c => {\r\n if (c.id == co)\r\n newColList.push(c);\r\n });\r\n });\r\n this.est.ColumnsList = newColList;\r\n }\r\n\r\n // In ogni caso questo non mi serve più, lo resetto **\r\n if (this.est.viewMode)\r\n view.savedstate = false;\r\n\r\n if (emitChanged)\r\n this.est.changed();\r\n }\r\n\r\n /**\r\n * In base alla visibilità registrata nelle **ColumnsList** questo metodo si occupa di prendere tutti i **EsThs** ed **EsTds** relativi e nasonderli/mostrarli\r\n *\r\n * Costo: 1 scan ColumnsList, 1 scan EsThs, 1 scan EsTds\r\n *\r\n * @param {EsTh[] | EsThDirective[]} ths Header della tabella\r\n * @param {EsTd[] | EsTdDirective[]} tds Celle della tabella\r\n * @param {AppSearch<any>} view AppSearch da utilizzare per questa operazione\r\n */\r\n public refreshColumnsVisibility(ths: EsTh[] | EsThDirective[], tds: EsTd[] | EsTdDirective[], view: AppSearch<any>) {\r\n let newColset = [];\r\n let fixedThs: { [id: string]: boolean; } = {};\r\n let columnsCache: { [index: string]: EsTableColumn; } = {};\r\n for (let coli = 0; coli < this.est.ColumnsList.length; coli++) {\r\n let col = this.est.ColumnsList[coli];\r\n columnsCache[col.id] = col;\r\n if (col.visible)\r\n newColset.push((col.pinned ? \"§\" : \"\") + col.id);\r\n }\r\n if (view)\r\n view.columns = newColset;\r\n\r\n else\r\n this.est.arrayColumns = newColset;\r\n\r\n // Da qui in poi devono essere eseguiti SOLO in fase di writeValue quindi devo assicurarmi di passarli null in tutti i passaggi diversi da quello\r\n if (ths) {\r\n // Definisco se la colonna è visibile in base alla sua rappresentazione locale in ColumnsList\r\n for (let i = 0; i < ths.length; i++) {\r\n let th = ths[i];\r\n\r\n if (this.utilities.isEsTh(th)) {\r\n th.Visible = th.Fixed || (columnsCache[th.ID] ? columnsCache[th.ID].visible : th.Visible);\r\n if (th.Fixed)\r\n fixedThs[th.ID] = true;\r\n }\r\n else {\r\n th.thVisible = th.thFixed || (columnsCache[th.th] ? columnsCache[th.th].visible : th.thVisible);\r\n if (th.thFixed || th.thGroup)\r\n fixedThs[th.th] = true;\r\n }\r\n }\r\n }\r\n\r\n if (tds) {\r\n // Definisco se la cella è visibile in base alla sua rappresentazione locale in ColumnsList\r\n for (let i = 0; i < tds.length; i++) {\r\n let td = tds[i];\r\n\r\n if (this.utilities.isEsTd(td))\r\n td.Visible = fixedThs[td.ID] || (columnsCache[td.ID] ? columnsCache[td.ID].visible : td.Visible);\r\n\r\n else\r\n td.tdVisible = fixedThs[td.td] || (columnsCache[td.td] ? columnsCache[td.td].visible : td.tdVisible);\r\n }\r\n }\r\n\r\n this.est.changed();\r\n }\r\n\r\n /**\r\n * Allinea gli ordinamenti dati fra le **EsThs** e le informazioni all'interno della View bindata\r\n *\r\n * @param {AppSearch<any>} view AppSearch da utilizzare per questa operazione\r\n * @param {EsTh[] | EsThDirective[]} ths Colonne della tabella\r\n */\r\n public alignHeadersOrdering(ths: EsTh[] | EsThDirective[], view: AppSearch<any>) {\r\n let orders = view ? view.orders : this.est.arrayOrders;\r\n for (let i = 0; i < ths.length; i++) {\r\n let th = ths[i];\r\n\r\n if (this.utilities.isEsTh(th)) {\r\n th.Order = null;\r\n\r\n // Assegno tutti gli ordinamenti che mi vengono da AppSearch. Sono i più importanti. Non faccio cache o cose strano perché tanto questa\r\n // variabile sarà sempre massimo 3 elementi\r\n for (let i = 0; i < orders.length; i++) {\r\n let or = orders[i];\r\n if (or.id == th.ID)\r\n th.Order = or.order;\r\n }\r\n }\r\n else {\r\n th.thOrder = null;\r\n for (let i = 0; i < orders.length; i++) {\r\n let or = orders[i];\r\n if (or.id == th.th)\r\n th.thOrder = or.order;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Genera tutte le informazioni che servono per gestire il raggruppamento degli header\r\n *\r\n * @param {EsTh[] | EsThDirective[]} ths Colonne della tabella\r\n *\r\n * @returns {{ leafs: EsTh[] | EsThDirective[], groupingLevel: number, parentsCache: any, thsCache: any }} Oggetto contenente la lista delle foglie (header base), il livello\r\n * massimo di raggruppamento raggiunto, una cache in cui vengono indicati tutti i gruppi che sono \"parent\" (quindi che raggruppano almeno 1 header) e la cache degli header\r\n */\r\n public evaluateHeadersGroupingInfos(ths: EsTh[] | EsThDirective[]): { leafs: EsTh[] | EsThDirective[]; groupingLevel: number; parentsCache: any; thsCache: any; } {\r\n // Pregiro per trovare i parent\r\n let parentsCache: { [index: string]: boolean; } = {};\r\n let thsCache: { [index: string]: EsThDirective; } = {};\r\n for (let i = 0; i < ths.length; i++) {\r\n let th = ths[i];\r\n if (this.utilities.isEsTh(th))\r\n continue;\r\n\r\n thsCache[th.th] = th;\r\n if (th.thParent && !parentsCache[th.thParent])\r\n parentsCache[th.thParent] = true;\r\n }\r\n\r\n // Secondo giro per beccare il livello massimo e la lista di foglie (th senza parent)\r\n let hMaxLevel = 0;\r\n let leafs: any[] = [];\r\n for (let i = 0; i < ths.length; i++) {\r\n let th = ths[i];\r\n if (this.utilities.isEsTh(th)) { leafs.push(th); continue; }\r\n // Se sono una foglia vedo quanti livelli ci sono sopra\r\n if (!parentsCache[th.th]) {\r\n leafs.push(th);\r\n let tmp = this.jumpsToFinalParent(th, thsCache);\r\n hMaxLevel = tmp > hMaxLevel ? tmp : hMaxLevel;\r\n }\r\n }\r\n\r\n return { leafs: leafs, groupingLevel: hMaxLevel, parentsCache: parentsCache, thsCache: thsCache };\r\n }\r\n\r\n /**\r\n * Genera gli header groups da una lista di info sui th all'interno della variabile **TMPRowThGroups**\r\n *\r\n * @param {{ leafs: EsTh[] | EsThDirective[], groupingLevel: number, parentsCache: any, thsCache: any }} infos Informazioni di raggruppamento valutate precedentemente\r\n */\r\n public evaluateHeaderGroups(infos: { leafs: EsTh[] | EsThDirective[]; groupingLevel: number; parentsCache: any; thsCache: any; }) {\r\n if (infos.groupingLevel == 0)\r\n return;\r\n\r\n // Giro 2.5, creo l'output dei raggruppamenti per header in modo da non dovermi preoccupare di celle non inizializzate\r\n let expandedGroups = [];\r\n let visibleUnpinnedLeafs: EsThDirective[] = (<any[]>infos.leafs).filter((t: EsThDirective) => t.thVisible && !t.thPinned);\r\n for (let l = 0; l < infos.groupingLevel; l++) {\r\n expandedGroups.push([]);\r\n for (let i = 0; i < visibleUnpinnedLeafs.length; i++)\r\n expandedGroups[l].push(\"\");\r\n }\r\n\r\n // Ordino le foglie in base agli ordinamenti delle colonne\r\n let orderedLeafs = [];\r\n for (let i = 0; i < this.est.OrderDirectives.length; i++) {\r\n let leaf: EsThDirective = infos.thsCache[this.est.OrderDirectives[i]];\r\n if (leaf.thVisible && !leaf.thPinned)\r\n orderedLeafs.push(leaf);\r\n }\r\n\r\n // Terzo giro per creare l'array group con tutti i riferimenti del caso\r\n let currentParent = \"\";\r\n for (let i = 0; i < orderedLeafs.length; i++) {\r\n let refTh: EsThDirective = orderedLeafs[i];\r\n let prevTh: EsThDirective = i - 1 >= 0 ? orderedLeafs[i - 1] : null;\r\n\r\n // Parent diverso da prima, metto il bordo a sinistra e a destra della cella precedente (se c'è)\r\n // All'ultimo giro metto il bordo a destra. Tutto questo lo rieseguo per ogni cella in modo da ripulire eventuali a cui avevo assegnato tag precedentemente\r\n (<any>refTh)._lbord = refTh.thParent != currentParent;\r\n (<any>refTh)._rbord = visibleUnpinnedLeafs.length == i + 1;\r\n if (prevTh)\r\n (<any>prevTh)._rbord = refTh.thParent != currentParent;\r\n\r\n currentParent = refTh.thParent;\r\n\r\n // Per ogni gruppo srotolo il parent nella matrice dei raggruppamenti\r\n for (let l = 0; l < infos.groupingLevel; l++) {\r\n let parent = refTh.thParent;\r\n if (parent && !refTh.thPinned) {\r\n expandedGroups[l][i] = parent;\r\n refTh = infos.thsCache[parent];\r\n }\r\n }\r\n }\r\n\r\n // Quarto giro per compattarlo nell'elemento finale su cui bindarmi\r\n currentParent = \"\";\r\n let currentSpan = 0;\r\n this.est.TMPRowThGroups = [];\r\n for (let l = 0; l < expandedGroups.length; l++) {\r\n let levelArray: { Span: number; Template: TemplateRef<any>; Pinned?: boolean; Borders?: boolean; }[] = [];\r\n this.est.TMPRowThGroups.push(levelArray);\r\n\r\n if (this.est.Selection || this.est.HasPinnedColumns)\r\n levelArray.push({ Span: 1, Template: null, Pinned: this.est.HasPinnedColumns });\r\n\r\n for (let h = 0; h < expandedGroups[l].length; h++) {\r\n let item = expandedGroups[l][h];\r\n if (item == currentParent)\r\n currentSpan++;\r\n else {\r\n if (currentSpan > 0)\r\n levelArray.push({ Span: currentSpan, Template: (currentParent ? infos.thsCache[currentParent].Template : null), Borders: !!currentParent });\r\n currentSpan = 1;\r\n currentParent = item;\r\n }\r\n }\r\n\r\n // Ultima aggiunta che altrimenti mi rimarrebbe in cache\r\n levelArray.push({ Span: currentSpan, Template: (currentParent ? infos.thsCache[currentParent].Template : null), Borders: !!currentParent });\r\n\r\n if (this.est.Removal)\r\n levelArray.push({ Span: 1, Template: null });\r\n\r\n if (this.est.Export || this.est.HiddenColumns || this.est.ColumnsOrdering || this.est.CornerMenuOptions)\r\n levelArray.push({ Span: 1, Template: null });\r\n\r\n currentSpan = 0;\r\n currentParent = \"\";\r\n }\r\n }\r\n\r\n /**\r\n * Calcola il numero di salti da un header foglia all'ultimo parent della catena\r\n *\r\n * @param {EsThDirective} th Header da cui scorrere i padri per capire quanti livelli ci sono sopra\r\n * @param {{ [index: string]: EsThDirective }} thsCache Cache degli header\r\n */\r\n private jumpsToFinalParent(th: EsThDirective, thsCache: { [index: string]: EsThDirective; }) {\r\n let jumps = 0; let parent = null;\r\n do {\r\n parent = th.thParent;\r\n if (parent)\r\n jumps++;\r\n th = thsCache[parent];\r\n } while (parent);\r\n return jumps;\r\n }\r\n\r\n /**\r\n * Metodo che genera l'ordine di default delle colonne\r\n *\r\n * @param {AppSearch<any>} view AppSearch da utilizzare per questa operazione\r\n */\r\n public generateDefaultOrder(ths: EsTh[] | EsThDirective[], view: AppSearch<any>) {\r\n if (ths.length == 0)\r\n return;\r\n\r\n let orderings = this.est.viewMode ? view.column_ordering : this.est.arrayColumnOrdering;\r\n // Genero ordinamento di default da 0 fino a dove deve arrivare. Situazione attuale senza hotpotato\r\n if (!orderings || orderings.length == 0) {\r\n for (let i = 0; i < ths.length; i++) {\r\n let th = ths[i];\r\n let order = this.utilities.isEsTh(th) ? th.ID : th.th;\r\n this.est.OrderDirectives.push(order);\r\n }\r\n }\r\n\r\n else\r\n this.est.OrderDirectives = orderings;\r\n }\r\n\r\n /**\r\n * Applica l'ordine specificato alle varie colonne\r\n *\r\n * @param {AppSearch<any>} view AppSearch da utilizzare per questa operazione\r\n * @param {boolean} finalize Se **true** significa che non mi aspetto di dover effettuare altre operazioni e posso renderizzare la situazione in base ai RowContext\r\n * Senza finalize significa che mi aspetto altre operazioni che prima o poi richiameranno questa funzione col finalize.\r\n *\r\n * Ad esempio, una volta selezionato ordinamento fisico/logico delle colonne so che parte un altra ricerca che mi rivalorizzerà da \"writeValue\", che già chiama questa funzione.\r\n * Mettendo solo la chiamata da \"writeValue\" come \"finalizzante\" mi assicuro che smanattamenti a frontend non causino flickering fino a quando non servono\r\n */\r\n public applyOrdering(view: AppSearch<any>, finalize: boolean) {\r\n // Genero ordinamento per gli header\r\n let newHeaders = [];\r\n\r\n // Se devo finalizzare aggancio tutte le variabili di bind\r\n if (finalize) {\r\n this.est.OrderDirectives.forEach(o => {\r\n let heaedrItem = this.est.TMPRowTHs.filter(t => t.ID == o)[0];\r\n if (heaedrItem)\r\n newHeaders.push(heaedrItem);\r\n });\r\n this.est.TMPRowTHs = newHeaders;\r\n\r\n // Genero ordinamento per le celle\r\n for (let i = 0; i < this.est.RowContexts.length; i++) {\r\n let context = this.est.TMPRowTDs[this.est.RowContexts[i]];\r\n let newContext = [];\r\n\r\n this.est.OrderDirectives.forEach(o => {\r\n let contextItem = context.filter(t => t.ID == o)[0];\r\n newContext.push(contextItem);\r\n });\r\n\r\n this.est.TMPRowTDs[this.est.RowContexts[i]] = newContext;\r\n }\r\n }\r\n\r\n if (this.est.viewMode)\r\n view.column_ordering = this.est.OrderDirectives;\r\n\r\n else\r\n this.est.arrayColumnOrdering = this.est.OrderDirectives;\r\n\r\n this.est.changed();\r\n }\r\n\r\n /**\r\n * All'interno della dialog \"Ordinamento e Visibilità Colonne\" mette la colonna specificata prima della colonna precedente\r\n *\r\n * @param {EsTableColumn} columnItem Colonna da spostare\r\n */\r\n public sendUp(columnItem: EsTableColumn) {\r\n let itemIndex = this.est.TMPColumnsList.indexOf(columnItem);\r\n if (this.est.TMPColumnsList[itemIndex - 1].fixed || this.est.TMPColumnsList[itemIndex - 1].pinned)\r\n return;\r\n this.utiExts.swap(this.est.TMPColumnsList, itemIndex, itemIndex - 1);\r\n\r\n // Non posso fare JSON.parse(JSON.stringify(this.ColumnsList)) perché contiene riferimenti a TemplateRef\r\n let tmp = [];\r\n this.est.TMPColumnsList.forEach(c => { tmp.push(Object.assign({}, c)); });\r\n this.est.TMPColumnsList = tmp;\r\n }\r\n\r\n /**\r\n * All'interno della dialog \"Ordinamento e Visibilità Colonne\" mette la colonna specificata dopo la colonna successiva\r\n *\r\n * @param {EsTableColumn} columnItem Colonna da spostare\r\n */\r\n public sendDown(columnItem: EsTableColumn) {\r\n let itemIndex = this.est.TMPColumnsList.indexOf(columnItem);\r\n this.utiExts.swap(this.est.TMPColumnsList, itemIndex, itemIndex + 1);\r\n\r\n // Non posso fare JSON.parse(JSON.stringify(this.ColumnsList)) perché contiene riferimenti a TemplateRef\r\n let tmp = [];\r\n this.est.TMPColumnsList.forEach(c => { tmp.push(Object.assign({}, c)); });\r\n this.est.TMPColumnsList = tmp;\r\n }\r\n\r\n /**\r\n * All'interno della dialog \"Ordinamento e Visibilità Colonne\" pinna la colonna specificata\r\n *\r\n * @param {EsTableColumn} columnItem Colonna da spostare\r\n */\r\n public pinOrUnpinColumn(columnItem: EsTableColumn) {\r\n let itemIndex = this.est.TMPColumnsList.indexOf(columnItem);\r\n if (!columnItem.pinned) {\r\n columnItem.prev_index = itemIndex;\r\n\r\n //Quando pinno devo spostare l'elemento come ultima colonna pinnata o come prima colonna se non ce ne sono di pinnate\r\n for (let i = 0; i < this.est.TMPColumnsList.length; i++) {\r\n if (!this.est.TMPColumnsList[i].pinned) {\r\n this.utilities.arrayMove(this.est.TMPColumnsList, itemIndex, i);\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n //Quando spinno riporto l'elemento allo stesso indice in cui era prima (se sono stati fatti spostamenti nel mezzo cazzi dell'utente)\r\n if (columnItem.prev_index != null && columnItem.prev_index != undefined)\r\n this.utilities.arrayMove(this.est.TMPColumnsList, itemIndex, columnItem.prev_index);\r\n else {\r\n // Se spinno senza un prev_index vuol dire che la colonna era pinnata da configurazione. La sposto nel primo punto disponibile\r\n for (let i = 0; i < this.est.TMPColumnsList.length; i++) {\r\n if (!this.est.TMPColumnsList[i].pinned && !this.est.TMPColumnsList[i].fixed) {\r\n this.utilities.arrayMove(this.est.TMPColumnsList, itemIndex, i - 1);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n columnItem.pinned = !columnItem.pinned;\r\n }\r\n\r\n /**\r\n * All'interno della dialog \"Ordinamento e Visibilità Colonne\" inverte le impostazioni di visibilità della colonna\r\n *\r\n * @param {EsTableColumn} columnItem Colonna da spostare\r\n */\r\n public columnClicked(item: EsTableColumn) {\r\n this.est.lastSelectedItemID = item.id;\r\n if (!this.est.HiddenColumns || item.fixed)\r\n return;\r\n\r\n item.visible = !item.visible;\r\n this.updateGlobalColVisCheck();\r\n }\r\n\r\n /** All'apertura della dialog \"Ordinamento e Visibilità Colonne\" ricarica le informazioni attuali per permettere la modifica */\r\n public resetColumnVisSelection() {\r\n this.est.TMPColumnsList = [];\r\n // Non posso fare JSON.parse(JSON.stringify(this.ColumnsList)) perché contiene riferimenti a TemplateRef\r\n this.est.TMPColumnsList = [];\r\n this.est.ColumnsList.forEach(c => { this.est.TMPColumnsList.push(Object.assign({}, c)); });\r\n\r\n let reorderedColList = [];\r\n\r\n if (this.est.ColumnsOrdering) {\r\n this.est.OrderDirectives.forEach(o => {\r\n let column = this.est.TMPColumnsList.filter(t => t.id == o)[0];\r\n // Potrei non averne nel caso ci sia il flag HiddenColumns a false, evito di inserire degli undefined\r\n if (column)\r\n reorderedColList.push(column);\r\n });\r\n\r\n this.est.TMPColumnsList = reorderedColList;\r\n }\r\n\r\n this.updateGlobalColVisCheck();\r\n }\r\n\r\n /** Riaggiorna le **OrderDirectives** con le informazioni in **ColumnsList** */\r\n private refreshColumnOrdering() {\r\n this.est.OrderDirectives = [];\r\n\r\n for (let c = 0; c < this.est.ColumnsList.length; c++)\r\n this.est.OrderDirectives.push(this.est.ColumnsList[c].id);\r\n }\r\n\r\n /** Effettua la selezione o meno del check globale (**globalColVisCheck**) di visibilità in base a se tutte le **TMPColumnsList** sono visibili o no */\r\n public updateGlobalColVisCheck() {\r\n // TMPColList viene riempita di undefined nel caso in cui sia disattivata la selezione delle colonne nascoste\r\n this.est.globalColVisCheck = this.est.TMPColumnsList.every(t => t.visible);\r\n }\r\n\r\n /**\r\n * Funzione che effettua la conferma della visibilità e dell'ordine delle colonne.\r\n *\r\n * Questa selezione viene inoltre salvata nelle preferenze (**@esfaenza/preferences**), qualora l'Input **SavePreferences** fosse valorizzato\r\n *\r\n * @returns {boolean} **true** se non ci sono problemi, **false** altrimenti\r\n */\r\n public confirmColumnVisibilitySelection(): boolean {\r\n // Non permetto di non selezionare nulla\r\n if (this.est.TMPColumnsList.every(t => !t.visible))\r\n return false;\r\n\r\n let castedView = this.est.viewMode ? (this.est.MainGroupView || this.est.View as AppSearch<any>) : null;\r\n this.est.ColumnsList = [];\r\n this.est.TMPColumnsList.forEach(c => { this.est.ColumnsList.push(Object.assign({}, c)); });\r\n\r\n this.refreshColumnOrdering();\r\n this.applyOrdering(castedView, false);\r\n\r\n this.refreshColumnsVisibility(null, null, castedView);\r\n\r\n //Salvo le preferences di questa view\r\n //Di default registro ordinamento e visibilità delle colonne nella vista. Solo le cose di UI\r\n if (this.est.SavePreferences) {\r\n if (!this.est.ngControl.name) {\r\n console.error(\"Non posso utilizzare le preference senza avere un 'name' per la tabella\");\r\n return false;\r\n }\r\n\r\n if (!this.prefService) {\r\n console.error(\"Non posso utilizzare le preference senza che il pacchetto @esfaenza/preferences sia installato\");\r\n return false;\r\n }\r\n\r\n let columns = this.est.arrayMode ? this.est.arrayColumns : castedView.columns;\r\n let columnsOrderings = this.est.arrayMode ? this.est.arrayColumnOrdering : castedView.column_ordering;\r\n var toStore = { columns: <string[]>JSON.parse(JSON.stringify(columns)), column_ordering: <string[]>JSON.parse(JSON.stringify(columnsOrderings)) };\r\n this.prefService.store(<string>this.est.ngControl.name, toStore).subscribe();\r\n }\r\n\r\n // Rieseguo l'ultima ricerca bindata alla tabella\r\n // Mi assicuro di farlo dopo l'espansione del changed o rischio che la ricerca mi ridia colonne che in realtà non esistono\r\n if (this.est.viewMode)\r\n setTimeout(() => {\r\n if (this.est.MainGroupView) {\r\n //this.emitSearchRequest(true, this.MainGroupView);\r\n for (let i = 0; i < this.est.groupSearchRequestsCache.length; i++) {\r\n let view = this.est.groupSearchRequestsCache[i].view;\r\n view.columns = this.est.MainGroupView.columns;\r\n view.column_ordering = this.est.MainGroupView.column_ordering;\r\n this.est.emitSearchRequest(true, this.est.groupSearchRequestsCache[i].view);\r\n }\r\n }\r\n\r\n else\r\n this.est.emitSearchRequest(true);\r\n });\r\n else if (this.est.arrayMode)\r\n setTimeout(() => { this.est.internalWriteValue(); });\r\n\r\n // Lo vorrei mettere lato template ma no\r\n this.est.lastSelectedItemID = null;\r\n return true;\r\n }\r\n\r\n /**\r\n * Effettuo l'unpinning di una colonna in maniera programmatica semplicemente eseguendo una per una le operazioni che verrebbero eseguite altrimenti\r\n *\r\n * @param {string} id Codice della colonna da spinnare\r\n */\r\n public unpinColumn(id: string) {\r\n this.resetColumnVisSelection();\r\n this.pinOrUnpinColumn(this.est.TMPColumnsList.find(t => t.id == id));\r\n this.confirmColumnVisibilitySelection();\r\n }\r\n\r\n /** Sul click nella checkbox di selezione globale si scorrono tutte le colonne e si impostano al valore della check globale */\r\n public globalColVisCheckChanged() {\r\n this.est.TMPColumnsList.forEach(t => {\r\n if (!t.fixed)\r\n t.visible = this.est.globalColVisCheck;\r\n });\r\n }\r\n}\r\n","// Componenti\r\nimport { EsTableComponent } from \"../../../components/es-table/es_table.component\"\r\n\r\n// Dominio\r\nimport { EsTableColumnsDefinition, GenericItem } from \"../../../domain\";\r\n\r\n/** Classe contenente le gestioni particolari della modalità dinamica dell'es-table */\r\nexport class DynamicModeHandler {\r\n\r\n /** @ignore Costruttore*/\r\n constructor(private est: EsTableComponent) { }\r\n\r\n /**\r\n * Metodo di supporto alla creazione di un router link parametrizzato all'oggetto corrente utilizzato nella modalità dinamica\r\n *\r\n * @param {string} path Path su cui navigare con eventuali parametri riferiti all'oggetto cotnestuale come {0}, {1}, ecc...\r\n * @param {string[]} parameterProps Lista posizionale delle proprietà a cui bindare i riferimenti del parametro **path**\r\n * Es. Il valore dela proprietà all'indice 0 di questo array verrà sostituita al valore {0} del parametro **path**\r\n * @param {GenericItem} item Oggetto generico collegato a questo contesto\r\n *\r\n * @returns {any} Router link generato in base al parametri\r\n */\r\n public generateRouterLink(path: string, parameterProps: string[], item: GenericItem): any {\r\n if (this.est.DynamicTableRouterLinkCache[item._hash + path]) {\r\n return this.est.DynamicTableRouterLinkCache[item._hash + path];\r\n } else {\r\n let link = this.getRouterLink(path, parameterProps, item);\r\n this.est.DynamicTableRouterLinkCache[item._hash + path] = link;\r\n return link;\r\n }\r\n }\r\n\r\n /**\r\n * Crea un router link\r\n *\r\n * @param {string} path Path su cui navigare con eventuali parametri riferiti all'oggetto cotnestuale come {0}, {1}, ecc...\r\n * @param {string[]} pars Lista posizionale delle proprietà a cui bindare i riferimenti del parametro **path**\r\n * Es. Il valore dela proprietà all'indice 0 di questo array verrà sostituita al valore {0} del parametro **path**\r\n * @param {GenericItem} item Oggetto generico collegato a questo contesto\r\n *\r\n * @returns {any} Router link generato in base al parametri\r\n */\r\n private getRouterLink(path: string, pars: string[], item: GenericItem): any {\r\n\r\n for (let i = 0; i < pars.length; i++)\r\n path = path.replace('{' + i + '}', item.properties[pars[i]]);\r\n\r\n path = path.replace(/'/g, '\"').replace(/ /g, '');\r\n return JSON.parse(path);\r\n }\r\n\r\n /** Se non ho l'Input **DynamicRowColumnsDefinition** in modalità dinamica lo riempio con il default nome della colonna = testo della colonna */\r\n public eventuallyReviewDynamicColumns() {\r\n // Senza oggetti esco\r\n if (!this.est.TMPBoundSource || this.est.TMPBoundSource.length == 0)\r\n return;\r\n\r\n var useGenericItems = !!this.est.TMPBoundSource[0][\"properties\"];\r\n if (!useGenericItems || (!this.est.FirstBind && this.est.DynamicRowColumnsDefinition && this.est.DynamicRowColumnsDefinition.length > 0))\r\n return;\r\n\r\n if ((!this.est.DynamicRowColumnsDefinition || this.est.DynamicRowColumnsDefinition.length == 0)) {\r\n var props = <Record<string, string>>this.est.TMPBoundSource[0][\"properties\"];\r\n this.est.DynamicRowColumnsDefinition = [];\r\n for (let key in props)\r\n this.est.DynamicRowColumnsDefinition.push(new EsTableColumnsDefinition(key, key));\r\n this.est.UserDefinedDynamicCols = false;\r\n }\r\n\r\n else\r\n this.est.UserDefinedDynamicCols = true;\r\n }\r\n\r\n}\r\n","// Librerie\r\nimport { ExportService, MessageService } from \"@esfaenza/extensions\";\r\n\r\n// Componenti\r\nimport { EsTableComponent } from \"../../../components/es-table/es_table.component\"\r\n\r\n/** Classe contenente la gestione delle importazioni */\r\nexport class ExportHandler {\r\n\r\n /** @ignore Costruttore*/\r\n constructor(private est: EsTableComponent, private expExts: ExportService, private msgExts: MessageService) { }\r\n\r\n /**\r\n * Effettua l'esportazione dei dati\r\n *\r\n * @param {string} format Formato di esportazione. Letto solo in modalità Report della tabella\r\n */\r\n public tryExport(format?: string) {\r\n if (!this.est.ExportFunction)\r\n return;\r\n\r\n if (this.est.reportMode)\r\n this.est.ExportFunction(format);\r\n\r\n else\r\n this.est.ExportFunction((data: any[], cancel: boolean = false) => {\r\n if (cancel)\r\n return;\r\n\r\n if (data.length == 0) {\r\n this.msgExts.simpleWarning(this.est.lc.loc(\"Cannot export an empty dataset\"));\r\n return;\r\n }\r\n\r\n this.setupExport(data);\r\n this.est.cdr.detectChanges();\r\n setTimeout(() => { this.est.exportDownloader.nativeElement.click(); });\r\n });\r\n }\r\n\r\n /**\r\n * Metodo che effettivamente genera gli header e i dati per l'esportazione con **ngx-csv**\r\n *\r\n * @param {any[]} items Oggetti da esportare\r\n */\r\n private setupExport(items: any[]) {\r\n let drcd = this.est.DynamicRowColumnsDefinition;\r\n\r\n this.est.headers = drcd && drcd.length > 0 ? this.expExts.setupForGenericExport(items, drcd.map(t => { return { label: t.description, key: t.propertyName, order: t.columnOrder }; })) : this.expExts.setupForExport(items);\r\n this.est.data = items;\r\n }\r\n}\r\n","import { EsTableComponent } from \"../../../components/es-table/es_table.component\"\r\n\r\n/** Classe contenente la gestione della modalità gerarchica */\r\nexport class HierarchyModeHandler {\r\n\r\n /** @ignore Costruttore*/\r\n constructor(private est: EsTableComponent) { }\r\n\r\n /**\r\n * Data una lista di oggetti assegno il livello gerarchico rispetto alla lista di oggetti passata\r\n *\r\n * @param {any[]} objs Lista di oggetti a cui aggiungere l'informazione del livello gerarchico\r\n */\r\n public assignHierarchyLevels(objs: any[]) {\r\n // Casistica input nullo\r\n if (!objs || !objs.length)\r\n return;\r\n\r\n //Se mancano entrambe le info le cerco di valorizzare in automatico coi default \"parentid\" e \"id\" (posto che le props esistano nell'oggetto)\r\n if (!this.est.ParentKey && !this.est.OwnKey) {\r\n if (objs[0]['parentid'] !== undefined)\r\n this.est.ParentKey = 'parentid';\r\n if (objs[0]['id'] !== undefined)\r\n this.est.OwnKey = 'id';\r\n }\r\n\r\n //Check finale per assicurarmi che le props ci siano\r\n if (!this.est.ParentKey || !this.est.OwnKey) {\r\n console.error('Per utilizzare il sistema in modalità gerarchica è obbligatorio specificare sia ParentKey che OwnKey. Fallback a sistema non gerarchico');\r\n return;\r\n }\r\n\r\n // Valorizzazione campi level, expanded, e visible per ogni item\r\n let currentLevel = 1;\r\n let assigned = 0;\r\n do {\r\n assigned = this.assignLevel(objs, currentLevel);\r\n currentLevel++;\r\n } while (assigned > 0);\r\n // butto su lato html e poi me la gioco là con padding = 20 * (level - 1) per far capire il diverso livello\r\n }\r\n\r\n /**\r\n * Per ognuno degli oggetti passati gli assegna un livello di gerarchia in base a **ParentKey** e **OwnKey**\r\n *\r\n * @param {any[]} objs Oggetti a cui assegnare il livello di gerarchia\r\n * @param {number} levelToAssign Livello che sta assegnando attualmente questa iterazione (dato che è ricorsiva)\r\n *\r\n * @returns {number} Numero di oggetti a cui è stato assegnato un livello gerarchico\r\n */\r\n private assignLevel(objs: any[], levelToAssign: number): number {\r\n let assigned = 0;\r\n for (let i = 0; i < objs.length; i++) {\r\n let obj = objs[i];\r\n\r\n // Se la parentKey non è valorizzata, questo è il livello 0 (1... perché gli 0 son perciolosi)\r\n if (!obj[this.est.ParentKey] && levelToAssign == 1) {\r\n obj._level = 1;\r\n obj._visible = true;\r\n obj._expanded = this.est.StartsExpanded;\r\n assigned++;\r\n continue;\r\n }\r\n\r\n // Per i livelli superiore al primo\r\n if (obj[this.est.ParentKey] && levelToAssign > 1) {\r\n // trovo il parent\r\n for (let p = 0; p < objs.length; p++) {\r\n let possibleParent = objs[p];\r\n\r\n // Trovato il parent dell'item, assegno all'item il livello giusto\r\n if (possibleParent[this.est.OwnKey] == obj[this.est.ParentKey] && possibleParent._level == levelToAssign - 1) {\r\n obj._level = levelToAssign;\r\n\r\n // So che questo item ha un parent. Ribadisco che il parent è espanso in base alle impostazione e stessa logica\r\n // per la visibilità del figlio\r\n possibleParent._expanded = this.est.StartsExpanded;\r\n possibleParent.parent = true;\r\n obj._visible = this.est.StartsExpanded;\r\n assigned++;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return assigned;\r\n }\r\n\r\n /**\r\n * Funzione che permette di effettuare l'espansione di un parent quando la tabella funziona in modalità gerarchica\r\n *\r\n * @param {string} key Chiave del parent da espandere\r\n */\r\n public expandParent(key: string) {\r\n for (let i = 0; i < this.est.boundSource.length; i++) {\r\n let obj = this.est.boundSource[i];\r\n\r\n // Trovo il parent con quell'id e lo espando\r\n if (obj[this.est.OwnKey] == key) {\r\n obj._expanded = true;\r\n\r\n for (let ic = 0; ic < this.est.boundSource.length; ic++) {\r\n let child = this.est.boundSource[ic];\r\n\r\n // Trovo tutti i child di quel parent e li rendo visibili\r\n if (child[this.est.ParentKey] == key)\r\n child._visible = true;\r\n }\r\n return;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Funzione che permette di effettuare il collapse di un parent quando la tabella funziona in modalità gerarchica\r\n *\r\n * @param {string} key Chiave del parent da collassare\r\n */\r\n public collapseParent(key: string) {\r\n for (let i = 0; i < this.est.boundSource.length; i++) {\r\n let obj = this.est.boundSource[i];\r\n\r\n // Trovo il parent con quell'id e lo collasso\r\n if (obj[this.est.OwnKey] == key) {\r\n obj._expanded = false;\r\n\r\n // Collasso/nascondo tutti i child del parent\r\n this.collapseChildOfParent(key);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Collassa ricorsivamente tutti i figli di un parent identificato dalla **parentKey**\r\n *\r\n * @param {string} parentKey Chiave del parent di cui collassare i figli\r\n */\r\n private collapseChildOfParent(parentKey: string) {\r\n for (let ic = 0; ic < this.est.boundSource.length; ic++) {\r\n let child = this.est.boundSource[ic];\r\n\r\n // Trovo tutti i child di quel parent e li rendo invisibili. Se il child trovato è a sua volta un parent,\r\n // lo collasso e vado in ricorsione sui figli\r\n if (child[this.est.ParentKey] == parentKey && !child.parent)\r\n child._visible = false;\r\n else if (child[this.est.ParentKey] == parentKey && child.parent) {\r\n child._expanded = false;\r\n child._visible = false;\r\n this.collapseChildOfParent(child[this.est.OwnKey]);\r\n }\r\n }\r\n }\r\n}\r\n","// Componenti\r\nimport { EsTableComponent } from \"../../../components/es-table/es_table.component\"\r\n\r\n// Modelli\r\nimport { AppSearch } from \"../../../domain\";\r\n\r\n// Utilities\r\nimport { UtilitiesHandler } from \"./UtilitiesHandler\";\r\n\r\n/** Classe che si occupa della gestione del recupero degli oggetti, paginazione e tutto ciò in cui gli elementi caricati vengono manipolati direttamente */\r\nexport class ItemsHandler {\r\n\r\n /** @ignore Costruttore */\r\n constructor(private est: EsTableComponent, private utilities: UtilitiesHandler) { }\r\n\r\n /**\r\n * In base alla modalità specificata (ArrayMode, ViewMode, ecc...) questo metodo recupera l'array di oggetti da bindare ad interfaccia\r\n *\r\n * @param {boolean} onlyselected [false] Indica di prendere solo gli oggetti selezionati\r\n * @param {boolean} refreshPaging [false] Indica se aggiornare le informazioni di paginazione o meno\r\n * @param {boolean} allIfPossible [false] Indica se prendere tutti gli oggetti quaora possibile, usato solo in ArrayMode\r\n *\r\n * @returns {any[]} Lista degli oggetti su cui effettuare il bind lato interfaccia\r\n */\r\n public getItemsByMode(onlyselected: boolean = false, refreshPaging: boolean = false, allIfPossible: boolean = false): any[] {\r\n let items: any[] = [];\r\n\r\n if ((this.est.viewMode && this.est.View instanceof AppSearch)) {\r\n items = this.getViewItemsBySource();\r\n }\r\n else if (this.est.arrayMode) {\r\n this.est.View.forEach(itm => { itm._item = true; });\r\n\r\n // Se faccio dei raggruppamenti ignoro la paginazione\r\n if (this.est.UseArrayModePaging && !allIfPossible) {\r\n\r\n // Se sono in modalità array ma la ricerca dipende da una view devo riallineare gli itemperpage\r\n if (this.est.SearchView)\r\n {\r\n this.est.ArraymodeItemsPerPage = this.est.SearchView.itemsperpageoverride;\r\n this.est.arraymodePage = this.est.SearchView.page;\r\n this.est.arraymodePages = this.est.SearchView.pages;\r\n }\r\n // Devo chiamare il refresh page solo se vengo richiamato da un binding esterno\r\n else if (refreshPaging)\r\n this.refreshPaging(this.est.ArraymodeItemsPerPage);\r\n\r\n items = this.adaptViewToPaging();\r\n } else {\r\n items = this.est.View as any[];\r\n }\r\n }\r\n\r\n // Se voglio solo i selezionati filtro\r\n if (onlyselected)\r\n return items.filter(t => t._selected);\r\n\r\n return items;\r\n }\r\n\r\n /**\r\n * Metodo per effettuare il refresh della paginazione sul cambiamento degli oggetti da visualizzare in una singola pagina.\r\n *\r\n * Vale solo per la modalità Array\r\n *\r\n * @param {number} pageSize Dimensione della pagina\r\n */\r\n public refreshPaging(pageSize: number) {\r\n this.est.ArraymodeItemsPerPage = pageSize;\r\n this.est.arraymodePages = Math.ceil((this.est.View as any[]).length / this.est.ArraymodeItemsPerPage);\r\n this.est.arraymodePage = 1;\r\n\r\n // Riforzo il writevalue in modo che il codice passi dalla gestione come se fosse fatta ripartire una ricerca\r\n this.est.internalWriteValue();\r\n }\r\n\r\n /**\r\n * Ottiene gli oggetti in base alla sorgente\r\n */\r\n private getViewItemsBySource(): any[] {\r\n let castedView = this.est.View as AppSearch<any>;\r\n let groupKeys = castedView.groupings ? castedView.groupings.filter(t => !t.aggregation).length : 0;\r\n\r\n //Gruppi intermedi\r\n if ((castedView.requestedgroups?.length != groupKeys || castedView.requestedgroups?.length == 0) && groupKeys > 0) {\r\n let ret = castedView.groups;\r\n ret.forEach(itm => {\r\n\r\n // Setto variabile interna per capire che questo è in realtà un gruppo\r\n (<any>itm)._group = true;\r\n\r\n // Le informazioni passate come lista le metto dentro a una cache per velocizzarne l'accesso quando devo tirare fuori il display della proprietà\r\n this.utilities.cacheAggregations(itm);\r\n });\r\n return ret;\r\n }\r\n else {\r\n let ret = this.est.SecondarySource ? (this.est.View as any).items2 : this.est.TertiarySource ? (this.est.View as any).items3 : (this.est.View as any).items;\r\n if (!ret) ret = [];\r\n // Setto variabile interna per specificare che questo è un elemento normale, non un gruppo o altro\r\n ret.forEach(itm => { (<any>itm)._item = true; });\r\n return ret;\r\n }\r\n }\r\n\r\n /** Genera le informazioni di paginazione e taglia la View in modalità array per mostrare solo gli oggetti della pagina specificata */\r\n private adaptViewToPaging() {\r\n let tmpItems: any[] = [];\r\n\r\n // Se ho una search view l'array pulsanti viene calcolato da lei, non devo prendere quello della modalità array,\r\n // inoltre non ho bisogno di fare ragionamenti su quanti elementi ci sono e sulla pagina, dato che viene tutto gestito esternamente, \r\n // unendo al risultato della view tutti gli oggetti addizionali\r\n if (!this.est.SearchView)\r\n this.est.arrayPulsanti = this.utilities.getPagesArray(6, this.est.arraymodePage, this.est.arraymodePages);\r\n else\r\n return this.est.View as any[];\r\n\r\n // Poi per tutti i valori dopo compresi fra la pagina - 1 e la pagina\r\n for (let i = ((this.est.arraymodePage - 1) * this.est.ArraymodeItemsPerPage); i < this.est.arraymodePage * this.est.ArraymodeItemsPerPage; i++) {\r\n if (i <= (this.est.View as any[]).length - 1)\r\n tmpItems.push((this.est.View as any[])[i]);\r\n }\r\n\r\n return tmpItems;\r\n }\r\n\r\n /**\r\n * Metodo che prende tutti gli oggetti di cui dispone divisi in bucket da 100 elementi\r\n *\r\n * @returns {any[][]} Matrice di array Nx100\r\n */\r\n public getItemSlices(): any[][] {\r\n // Se sono qui di sicuro non ho rowgrouping\r\n let items = this.getItemsByMode();\r\n if (!items)\r\n return [];\r\n\r\n let arrayBy100 = [];\r\n let slices = Math.ceil(items.length / this.est.SliceSize);\r\n for (let i = 0; i < slices; i++) {\r\n let arraySlice = items.slice(i * this.est.SliceSize, i * this.est.SliceSize + this.est.SliceSize);\r\n arrayBy100.push(arraySlice);\r\n }\r\n return arrayBy100;\r\n }\r\n\r\n /** Se in modalità array applica gli ordinamenti ASC-DESC delle colonne */\r\n public arrayModeReviewOrderings() {\r\n if (this.est.arrayOrders.length > 0)\r\n this.est.arrayOrders.forEach(t => { this.est.boundSource = this.est.boundSource.sort((a, b) => (a[t.id] > b[t.id] ? 1 : -1) * (t.order == 'DESC' ? -1 : 1)); });\r\n }\r\n}\r\n","// Handlers\r\nimport { UtilitiesHandler } from \"./UtilitiesHandler\";\r\n\r\n// Componenti\r\nimport { EsTableComponent } from \"../../../components/es-table/es_table.component\"\r\n\r\n// Modelli\r\nimport { ReportColumn, ReportDefinition, ReportOrder } from \"../../../domain\";\r\n\r\n/** Classe che gestisce la modalità Report dell'es-table utilizzata nel Metering */\r\nexport class ReportModeHandler {\r\n\r\n /** @ignore Costruttore */\r\n constructor(private est: EsTableComponent, private utilities: UtilitiesHandler) { }\r\n\r\n /**\r\n * Sul click dell'Header di una colonna questo metodo si occupa di applicare l'ordinamento successivo e di notificare con **emitSearchRequest**\r\n * il bisogno di aggiornare i dati da parte del componente che utilizza la tabella\r\n *\r\n * Utilizzato solo in modalità REport\r\n *\r\n * @param {ReportColumn} clm Colonna del report per cui ordinare\r\n */\r\n public setupNextOrderAndSearch(clm: ReportColumn) {\r\n if (!(this.est.View instanceof ReportDefinition)) {\r\n console.error('View diversa da reportdefinition entrata nel metodo setupNextOrderAndSearch');\r\n return;\r\n }\r\n\r\n let orderNext = { NONE: 'DESC', DESC: 'ASC', ASC: null };\r\n let nextOrder = orderNext[clm.order || 'NONE'];\r\n clm.order = nextOrder;\r\n\r\n let order: ReportOrder;\r\n let clmOrder = this.est.View.orders ? this.est.View.orders.filter(t => t.column == clm.id) : [];\r\n if (clmOrder.length == 0 && clm.order) {\r\n order = new ReportOrder();\r\n order.column = clm.id;\r\n order.order = clm.order;\r\n if (!this.est.View.orders)\r\n this.est.View.orders = [];\r\n\r\n this.est.View.orders.push(order);\r\n }\r\n else if (clmOrder.length == 1) {\r\n // Rimuovo l'ordinamento o aggiorno quello già esistente\r\n if (!clm.order)\r\n clmOrder = [];\r\n\r\n else\r\n clmOrder[0].order = clm.order;\r\n }\r\n\r\n else\r\n console.warn('Impossibile settare ordinamento. Colonna ' + clm.id + ' direttive di ordinamento ' + clmOrder.length + ' ordinamento scelto ' + clm.order);\r\n\r\n // Dopo aver aggiornato l'ordinamento rilancio la ricerca\r\n this.est.emitSearchRequest(false);\r\n }\r\n\r\n /** Metodo che si occupa di gestire la grafica della tabella in base alle informazioni di ordinamento colonne e paginazione contenuti nel modello */\r\n public reviewReportBindings() {\r\n if (!(this.est.View instanceof ReportDefinition)) {\r\n console.error('View diversa da reportdefinition entrata nel metodo reviewReportBindings');\r\n return;\r\n }\r\n\r\n // Allineo le informazioni su eventuali ordinamenti fatti precedentemente\r\n if (this.est.View.orders && this.est.View.orders.length > 0) {\r\n this.est.View.orders.forEach(t => {\r\n this.est.ReportValues.columns.filter(c => c.id == t.column)[0].order = t.order;\r\n });\r\n }\r\n\r\n // Recupero il count precedente se serve\r\n if (this.est.ReportValues.count != -2)\r\n this.est.previousCount = this.est.ReportValues.count;\r\n else if (this.est.ReportValues.count == -2)\r\n this.est.ReportValues.count = this.est.previousCount;\r\n\r\n let ipp = (this.est.View.itemsperpageoverride || 15);\r\n this.est.View.pages = Math.ceil(this.est.ReportValues.count / ipp);\r\n this.est.arrayPulsanti = this.utilities.getPagesArray(6, this.est.View.page, this.est.View.pages);\r\n }\r\n}\r\n","// Librerie\r\nimport { DateService } from \"@esfaenza/extensions\";\r\n\r\n// Direttive / Componenti\r\nimport { EsTh } from \"../../../components/es-th/es_th.component\";\r\nimport { EsThDirective } from \"../../../directives/es_th.directive\";\r\nimport { EsTableComponent } from \"../../../components/es-table/es_table.component\"\r\n\r\n// Modelli\r\nimport { AppOrdering, AppSearch, Group, GroupAggregation, GroupOrAggregation, GroupPager, GroupRouteFragment, ThAggregation } from \"../../../domain\";\r\n\r\n// Utilities\r\nimport { UtilitiesHandler } from \"./UtilitiesHandler\";\r\n\r\n/** Classe che gestisce la modalità Row Grouping dell'es-table */\r\nexport class RowGroupingHandler {\r\n\r\n /** Cache per salvare per ogni chiave di ogni gruppo chi è il gruppo rappresentato */\r\n public rgGroupCache: Map<string, Group> = new Map<string, Group>();\r\n /** Cache per salvare per ogni chiave di ogni gruppo chi sono gli oggetti sottostanti, non dei sottogruppi */\r\n public rgItemCache: Map<string, any[]> = new Map<string, any[]>();\r\n /** Cache per salvare per ogni chiave di ogni gruppo chi sono gli oggetti sottostanti, non dei sottogruppi */\r\n public rgChildGroupsCache: Map<string, Group[]> = new Map<string, Group[]>();\r\n\r\n /** @ignore Costruttore */\r\n constructor(private est: EsTableComponent, private utilities: UtilitiesHandler, private dateExts: DateService) { }\r\n\r\n /**\r\n * In modalità rowgrouping quando mi arriva un nuovo blocco di oggetti devo aggiungerlo alla vista attuale:\r\n *\r\n * 1) Se non viene richiesto il dettaglio di alcun gruppo significa che devo considerare mi siano arrivati tutti i gruppi principali\r\n * 2) Se viene richiesto il dettaglio di un gruppo diverso dall'ultimo devo aggiungere dopo al gruppo cliccato la lista dei sottogruppi\r\n * 2) Se viene richiesto il dettaglio dell'ultimo gruppo devo aggiungere dopo al gruppo cliccato la lista degli oggetti\r\n *\r\n * @param {any} view AppSearch<T> da cui sono arrivati gli oggetti\r\n * @param {number} groupingKeys Livelli di raggruppamento da aspettarsi sui dati\r\n */\r\n public handleNewDataOnRowGrouping(view: AppSearch<any>, groupingKeys: number) {\r\n // 1) Se non viene richiesto il dettaglio di alcun gruppo significa che la chiamata restituisce la lista paginata dei gruppi principali.\r\n // Li tratto come se fosse una qualsiasi altra query paginata su N elementi\r\n if ((view.requestedgroups?.length || 0) == 0) {\r\n this.est.boundSource = this.est.TMPBoundSource;\r\n this.rgGroupCache = new Map<string, Group>();\r\n this.rgItemCache = new Map<string, any[]>();\r\n this.rgChildGroupsCache = new Map<string, Group[]>();\r\n\r\n this.est.TMPBoundSource.forEach(itm => {\r\n itm._thisRoute = itm._group ? [{ column: (<Group>itm).column, value: (<Group>itm).value }] : [];\r\n itm._thisKey = itm._group ? (<Group>itm).value : null;\r\n itm._grouplevel = 0;\r\n\r\n this.rgGroupCache.set(itm._thisKey, itm);\r\n });\r\n\r\n // Resetto la ricerca alla cache di questa \"sessione\"\r\n let firstItem = this.est.TMPBoundSource[0];\r\n this.est.MainGroupView = Object.assign({}, view);\r\n this.est.groupSearchRequestsCache = [{ path: '', route: [{ column: (<Group>firstItem).column, value: (<Group>firstItem).value }], view: this.est.MainGroupView, group_column: (<Group>this.est.TMPBoundSource[0]).column }];\r\n this.est.BaseItemsCount = view.objectcount;\r\n }\r\n else {\r\n // 2) Se viene richiesto il dettaglio di un qualsiasi gruppo diverso dall'ultimo vuol dire che devo aggiungere \r\n // dopo al gruppo che ho cliccato la lista dei gruppi tirata fuori questa volta (intermediateGroup = true)\r\n /*\r\n * GruppoA GruppoA\r\n * GruppoB GruppoB\r\n * GruppoC <- Clicco qui GruppoC\r\n * GruppoD GruppoC1\r\n * GruppoE GruppoC2\r\n * GruppoD\r\n * GruppoE\r\n */\r\n // 3) se i gruppi richiesti dalla view sono uguali ai gruppi presenti vuol dire che sto prendendo gli oggetti veri e propri, sono in \r\n // view.items e quindi in TMPBoundSource, ho inoltre le informazioni di paginazione **per il singolo sottogruppo** (intermediateGroup = false)\r\n /*\r\n * GruppoA GruppoA\r\n * GruppoC1 GruppoC1\r\n * GruppoB GruppoB\r\n * GruppoC GruppoC\r\n * GruppoC1 <-- Clicco qui GruppoC1\r\n * Oggetto1\r\n * Oggetto2\r\n * Oggetto3\r\n * GruppoC2 GruppoC2\r\n * GruppoD GruppoD\r\n * GruppoE GruppoE\r\n */\r\n let intermediateGroup = view.requestedgroups.length != groupingKeys;\r\n\r\n let items = this.est.boundSource;\r\n let insertIndex = 0;\r\n let insertGroup = null;\r\n let groupKey: string = \"\";\r\n let groupRoute: GroupRouteFragment[] = [];\r\n\r\n // Navigo la stuttura dei gruppi ignorando ricorsivamente tutti gli indici fino ai gruppi che mi interessano in modo da non beccare il primo \"GruppoC1\" del caso sopra\r\n for (let i = 0; i < view.requestedgroups.length; i++) {\r\n let rg = view.requestedgroups[i];\r\n groupKey += rg.value;\r\n groupRoute.push({ column: rg.column, value: rg.value });\r\n for (let i = insertIndex; i < items.length; i++) {\r\n let t = items[i];\r\n if (i >= insertIndex && t._group && t.column == rg.column && t.value == rg.value) {\r\n insertIndex = i; insertGroup = t;\r\n // Lo marco expanded dato che questo click sul gruppo potrebbe non essere stato fatto\r\n insertGroup._expanded = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n let itemsCacheReference;\r\n let childGroupsCacheReference;\r\n\r\n // Se non è un gruppo intermedio devo ripulire la cache del gruppo su cui ho attualmente cliccato. Gli oggetti saranno riaggiunti dopo\r\n if (!intermediateGroup) {\r\n this.rgItemCache.set(groupKey, []);\r\n itemsCacheReference = this.rgItemCache.get(groupKey);\r\n }\r\n else {\r\n // Se invece è un gruppo intermedio devo ripulire sia tutti i child group ricorsivamente, sia tutti gli item\r\n for (let key of this.rgChildGroupsCache.keys())\r\n if (key.startsWith(groupKey))\r\n this.rgChildGroupsCache.delete(key);\r\n\r\n for (let key of this.rgItemCache.keys())\r\n if (key.startsWith(groupKey))\r\n this.rgItemCache.delete(key);\r\n\r\n this.rgChildGroupsCache.set(groupKey, []);\r\n childGroupsCacheReference = this.rgChildGroupsCache.get(groupKey);\r\n }\r\n\r\n // Assegno un livello ai valori che arrivano da usare per formattare la parte grafica. Il primo gruppo cliccato sarà a livello 1,\r\n // il secondo sarà a livello 2 e così via...\r\n // Li marco inoltre con il parent in modo da poter eliminare i vecchi qualora servisse\r\n this.est.TMPBoundSource.forEach(itm => {\r\n itm._parent = groupKey;\r\n itm._parentRoute = groupRoute;\r\n itm._thisRoute = itm._group ? [...groupRoute, new GroupRouteFragment((<Group>itm).column, (<Group>itm).value)] : [];\r\n itm._thisKey = itm._group ? groupKey + (<Group>itm).value : groupKey;\r\n\r\n // Per le ricerca intermedie metto i gruppi nella cache dei gruppi\r\n if (intermediateGroup) {\r\n itm._grouplevel = view.requestedgroups.length;\r\n this.rgGroupCache.set(itm._thisKey, itm);\r\n childGroupsCacheReference.push(itm);\r\n }\r\n else {\r\n // Metto anche gli oggetti nella cache non ricorsiva\r\n itemsCacheReference.push(itm);\r\n }\r\n });\r\n\r\n // Elimino gli oggetti vecchi \r\n // 1) Ricerca intermedia, stato salvato - Elimino tutti gli item e tutti i gruppi la cui route è più lunga della corrente, tutti gli item relativi alla path corrente, e tutte\r\n // le cache di ricerca effettuate su una path più profonda dell'attuale\r\n // 2) Ricerca finale o ricerca intermedia senza stato salvato - Elimino tutti gli item relativi alla path corrente\r\n // Per \"stato salvato\" si intendono ricerche vecchie salvate per poter essere rieffettuate in caso di ordinamenti su colonne di interesse \r\n if (intermediateGroup && view.savedstate) {\r\n this.est.boundSource = this.est.boundSource.filter(t => !(t._item || t._thisRoute.length > groupRoute.length));\r\n this.est.groupSearchRequestsCache = this.est.groupSearchRequestsCache.filter(t => !(t.route.length > groupRoute.length));\r\n }\r\n\r\n this.est.boundSource = this.est.boundSource.filter(t => !(t._parent == groupKey));\r\n\r\n let thisGroup = this.est.boundSource[insertIndex];\r\n if (intermediateGroup)\r\n thisGroup._groupscount = (<AppSearch<any>>this.est.View)?.groupcount;\r\n\r\n // Li sostituisco coi nuovi di questa ricerca\r\n this.est.boundSource.splice(insertIndex + 1, 0, ...this.est.TMPBoundSource);\r\n\r\n // Aggiungo un separatore alla fine o all'inizio di questi gruppi che dovrà occuparsi di caricare ALTRI gruppi o oggetti (se sono all'ultimo gruppo)\r\n let addLast = false;\r\n this.est.boundSource.splice(insertIndex + 1 + (addLast ? this.est.TMPBoundSource.length : 0), 0, this.getGroupSeparator(view, groupKey, groupRoute, view.requestedgroups.length, intermediateGroup ? 'groups' : 'items'));\r\n\r\n // Aggiungo la ricerca alla cache di questa \"sessione\"\r\n let toAdd = { path: groupKey, route: groupRoute, view: Object.assign({}, view), group_column: intermediateGroup ? (<Group>this.est.TMPBoundSource[0]).column : '' };\r\n let prev = this.est.groupSearchRequestsCache.findIndex(t => t.path == toAdd.path && t.group_column == toAdd.group_column);\r\n if (prev == -1)\r\n this.est.groupSearchRequestsCache.push(toAdd);\r\n\r\n else\r\n this.est.groupSearchRequestsCache.splice(prev, 1, toAdd);\r\n }\r\n }\r\n\r\n /**\r\n * Se in modalità array applica i raggruppamenti definiti lato row-grouping\r\n *\r\n * @param {ths: EsTh[] | EsThDirective[]} ths Header\r\n */\r\n public arrayModeReviewGroupings(ths: EsTh[] | EsThDirective[]) {\r\n if (ths.length == 0)\r\n return;\r\n\r\n if (this.utilities.isEsTh(ths[0]))\r\n return;\r\n\r\n let headerGroups: Group[] = [];\r\n let headerAggregations: GroupOrAggregation[] = [];\r\n\r\n for (let i = 0; i < ths.length; i++) {\r\n let th = ths[i] as EsThDirective;\r\n\r\n if (th.thGroup)\r\n headerGroups.push(new Group(th.th, 0, \"\"));\r\n else if (th.thAggregation)\r\n headerAggregations = [...headerAggregations, ...this.getGroupAggregations(th)];\r\n }\r\n\r\n if (headerGroups.length > 0) {\r\n // Pulizia delle cache\r\n this.rgGroupCache.clear();\r\n this.rgItemCache.clear();\r\n this.rgChildGroupsCache.clear();\r\n\r\n this.est.ArrayGrouping = true;\r\n this.est.boundSource = this.getGroupsRecursive(headerGroups, 0, this.est.boundSource, headerAggregations, null);\r\n }\r\n }\r\n\r\n /**\r\n * Data una direttiva EsTh restituisce la lista delle aggregazioni richiesta per questa colonna o il gruppo che rappresenta\r\n *\r\n * @param {EsThDirective} th Direttiva\r\n *\r\n * @returns {GroupOrAggregation[]} Lista dei gruppi o aggregazioni relativi alla Direttiva passata\r\n */\r\n public getGroupAggregations(th: EsThDirective): GroupOrAggregation[] {\r\n let ret = [];\r\n // Es: '{min:dd/MM/yyyy} - {max:dd/MM/yyyy}'\r\n if (th.thAggregation) {\r\n this.getEsThDirectiveListOfAggregations(th).forEach((agg: ThAggregation) => {\r\n let isdate = agg.format && ['small', 'long', 'verylong'].includes(agg.format);\r\n let isnumber = agg.format && agg.format.startsWith(\"F\") && !Number.isNaN(agg.format.charAt(1)) && agg.format.length == 2;\r\n\r\n if (!isdate && !isnumber && agg.format)\r\n throw \"Le aggergazioni supportate dall'es-table sono solo 'small', 'long', 'verylong' per le date e 'F0-9' per i numeri\";\r\n\r\n ret.push(new GroupOrAggregation(th.th, agg.func, isdate ? 'date' : isnumber ? 'number' : 'string'));\r\n });\r\n }\r\n else if (th.thGroup)\r\n ret.push(new GroupOrAggregation(th.th, null));\r\n\r\n return ret;\r\n }\r\n\r\n\r\n /**\r\n * Data una direttiva con un formato restituisce tutte le coppie Funzione di Aggregazione - Formato\r\n *\r\n * @param {EsThDirective} th Direttiva EsTh di cui calcolare le funzioni di aggregazione usate\r\n *\r\n * @returns {{ func: string, format: string }[]} Lista delle funzioni di aggregazione rilevate\r\n */\r\n private getEsThDirectiveListOfAggregations(th: EsThDirective): ThAggregation[] {\r\n if (!th.thAggregation)\r\n return [];\r\n\r\n // Se ho già effettuato questo calcolo per questo th restituisco la versione in cache\r\n if (th._thAggregations)\r\n return th._thAggregations;\r\n\r\n let ret = [];\r\n let display = th.thAggregation;\r\n var matches = display.match(/{[a-zA-Z0-9\\/:]*}/gi);\r\n if (!matches)\r\n return [];\r\n matches.forEach(m => {\r\n let split = m.split(\":\");\r\n let func = m, format = \"\";\r\n if (split.length > 0) {\r\n // Escludo primo e ultimo carattere (le graffe)\r\n func = split[0].substr(1);\r\n format = split[1].substr(0, split[1].length - 1);\r\n }\r\n\r\n ret.push({ func: <'min' | 'max' | 'sum'>func, format: format, match: m });\r\n });\r\n\r\n th._thAggregations = ret;\r\n return ret;\r\n }\r\n\r\n /**\r\n * Data la definizione dei gruppi da generare da una lista di oggetti, suddivide gli oggetti passati in gruppi e sottogruppi\r\n *\r\n * @param {Group[]} grps Definizione dei gruppi\r\n * @param {number} currentIndex Indice di elaborazione. Al livello 0 ho tutti gli oggetti e devo generare i primi gruppi, a livello 1 ho tutti i gruppi principali e devo\r\n * elaborare i sottogruppi, e così via ricorsivamente...\r\n * @param {any[]} items Oggetti da raggruppare\r\n * @param {GroupOrAggregation[]} aggregations Info di aggregazione\r\n * @param {any} parent Riferimento al gruppo padre\r\n */\r\n private getGroupsRecursive(grps: Group[], currentIndex: number, items: any[], aggregations: GroupOrAggregation[], parent?: any): any[] {\r\n // Se l'indice è 0 devo sicuramente nascondere tutti gli oggetti. Solo i gruppi saranno visualizzati\r\n if (currentIndex == 0)\r\n items.forEach(i => i._visible = false);\r\n\r\n let grp = grps[currentIndex];\r\n let ret: any[] = [];\r\n let last = grps.length == currentIndex + 1;\r\n let groups = this.utilities.groupBy(items, grp.column);\r\n for (let prop in groups) {\r\n let itms = groups[prop];\r\n let gp = new Group(grp.column, itms.length, prop);\r\n gp.aggregations = this.generateAggregations(itms, aggregations);\r\n\r\n let anygp = (<any>gp);\r\n anygp._group = true;\r\n anygp._expanded = false;\r\n if (!parent) {\r\n anygp._thisRoute = [{ column: gp.column, value: gp.value }];\r\n anygp._thisKey = gp.value;\r\n anygp._grouplevel = 0;\r\n }\r\n else {\r\n anygp._parent = parent._thisKey;\r\n anygp._parentRoute = parent._thisRoute;\r\n anygp._thisRoute = [...parent._thisRoute, { column: gp.column, value: gp.value }];\r\n anygp._thisKey = parent._thisKey + gp.value;\r\n anygp._grouplevel = parent._grouplevel + 1;\r\n }\r\n\r\n // Pusho il gruppo, tutti i gruppi del livello sotto, o gli item se io sono l'ultimo gruppo. \r\n // La visibilità è solo per il gruppo a livello 0, tutti gli altri gruppi saranno mostrati o nascosti di conseguenza\r\n if (currentIndex == 0)\r\n anygp._visible = true;\r\n\r\n this.utilities.calculateHash([anygp]);\r\n this.utilities.cacheAggregations(anygp);\r\n\r\n // Aggiungo il gruppo padre\r\n ret.push(anygp);\r\n this.rgGroupCache.set(anygp._thisKey, anygp);\r\n if (!last) {\r\n\r\n //Dal gruppo padre, se non è l'ultimo gruppo della catena, calcolo ricorsivamente tutta la catena sotto\r\n let subGroupsAndItems = this.getGroupsRecursive(grps, currentIndex + 1, itms, aggregations, anygp);\r\n let childgroups = subGroupsAndItems.filter(t => t._group && t._parent == anygp._thisKey);\r\n anygp._groupscount = childgroups.length;\r\n\r\n // Aggiungo la catena del gruppo sotto, aggiungendo alla cache solo i gruppi padre\r\n ret.push(...subGroupsAndItems);\r\n this.rgChildGroupsCache.set(anygp._thisKey, childgroups);\r\n }\r\n else {\r\n // Al gruppo padre, se è l'ultimo assegno tutte le foglie assegnandogli anche la chiave del gruppo\r\n itms.forEach(i => i._thisKey = anygp._thisKey);\r\n\r\n ret.push(...itms);\r\n this.rgItemCache.set(anygp._thisKey, itms);\r\n }\r\n }\r\n return ret;\r\n }\r\n\r\n /**\r\n * Data una lista di oggetti genera le aggregazioni specificate. Si considera di avere tutti gli oggetti\r\n *\r\n * @param {any[]} items Oggetti di cui calcolare le aggregazione\r\n * @param {GroupOrAggregation[]} aggregations Aggergazioni da generare\r\n */\r\n private generateAggregations(items: any[], aggregations: GroupOrAggregation[]): GroupAggregation[] {\r\n let rets: GroupAggregation[] = [];\r\n let aggregationValue = \"\", feField = null, stringAgg = null, dateAgg = null, numberAgg = null;\r\n\r\n for (let i = 0; i < aggregations.length; i++) {\r\n let agg = aggregations[i];\r\n feField = agg.column;\r\n if (!feField)\r\n continue;\r\n\r\n switch (agg.datatype) {\r\n case 'string': stringAgg = items.map(i => i[feField].toString()); break;\r\n case 'date': dateAgg = items.map(i => new Date(i[feField]).getTime()); break;\r\n case 'number': numberAgg = items.map(i => parseFloat(i[feField])); break;\r\n }\r\n\r\n switch (agg.aggregation) {\r\n case 'max':\r\n switch (agg.datatype) {\r\n case 'string': aggregationValue = stringAgg.sort().reverse()[0]; break;\r\n case 'date': aggregationValue = new Date(Math.max(...dateAgg)).toString(); break;\r\n case 'number': aggregationValue = Math.max(...numberAgg).toString(); break;\r\n }\r\n break;\r\n case 'min':\r\n switch (agg.datatype) {\r\n case 'string': aggregationValue = stringAgg.sort()[0]; break;\r\n case 'date': aggregationValue = new Date(Math.min(...dateAgg)).toString(); break;\r\n case 'number': aggregationValue = Math.min(...numberAgg).toString(); break;\r\n }\r\n break;\r\n case 'sum':\r\n switch (agg.datatype) {\r\n case 'string': aggregationValue = stringAgg.join(\", \"); break;\r\n case 'date': aggregationValue = \"\"; break;\r\n case 'number': aggregationValue = numberAgg.reduce((pre, curr) => pre + curr, 0).toString(); break;\r\n }\r\n break;\r\n }\r\n rets.push(new GroupAggregation(agg.column, agg.aggregation, aggregationValue));\r\n }\r\n\r\n return rets;\r\n }\r\n\r\n /**\r\n * Ottiene un elemento di separazione fra Gruppi che serve per paginare le ricerche all'interno di ogni singolo gruppo\r\n *\r\n * @param {AppSearch<any>} view View utilizzata per la ricerca. Me ne salvo i parametri nel separatore attuale dato che ne ho bisogno per caricare altri elementi\r\n * facenti riferimento allo stesso contesto\r\n * @param {string} parent Parent path che rappresenta a quale gruppo è affibbiato questo separatore\r\n * @param {GroupRouteFragment[]} route Route path che rappresenta a quale gruppo è affibbiato questo separatore\r\n * @param {number} level Livello del gruppo di cui questo elemento è separatore, viene usato per applicare la classe \"est-lvl-{{level}}\"\r\n *\r\n * @returns {any} Elemento di separazione contenente tutti i bind per presentare una paginazione sotto questo gruppo lato interfaccia\r\n */\r\n public getGroupSeparator(view: AppSearch<any>, parent: string, route: GroupRouteFragment[], level: number, searches: 'groups' | 'items'): GroupPager {\r\n let item = new GroupPager(level, route, parent, Object.assign({}, view), searches);\r\n item.buttons = this.utilities.getPagesArray(6, view.page, view.pages);\r\n this.utilities.calculateHash([item]);\r\n return item;\r\n }\r\n\r\n\r\n /**\r\n * Data una colonna effettua la riemissione di tutte le ricerche relative.\r\n *\r\n * Es. Ho 2 campi di gruppo e ho espanso fino a vedere i valori fino ad un livello qualsiasi.\r\n * Clicco l'ordinamento sul secondo gruppo.\r\n * Tutte le ricerche relative ai primi gruppi devono essere rieseguite. Quando i risultati arriveranno ci penserà il metodo **bindDisplayToLoadedItemsOrGroups**\r\n * a tagliare via gli oggetti non più visualizzati\r\n *\r\n * @param {string} column Colonna su cui si è effettuata un'operazione di ordinamento\r\n * @param {AppOrdering[]} orderings Direttive di ordinamento da applicare alle varie sottoricerche\r\n */\r\n public emitRowGroupingSearches(column: string, orderings: AppOrdering[]) {\r\n // Per tutte le ricerche intermedie che devo rivalutare le re-emitto in modo da aggiornargli i dati\r\n var meaningfulAppSearches = this.est.groupSearchRequestsCache.filter(t => t.group_column == column).map(t => t.view);\r\n\r\n // Se non ne trovo significa che ho fatto l'ordinamento o sugli item, o su colonne relative a un sottogruppo non caricato\r\n if (!meaningfulAppSearches || meaningfulAppSearches.length == 0)\r\n meaningfulAppSearches = this.est.groupSearchRequestsCache.filter(t => !t.group_column).map(t => t.view);\r\n\r\n // Se non ne trovo qui significa che sto ordinando su colonne relative a un sottogruppo non caricato\r\n if (!meaningfulAppSearches || meaningfulAppSearches.length == 0)\r\n return;\r\n\r\n meaningfulAppSearches.forEach(as => {\r\n // Ovviamente gli oridnamenti devono essere quelli appena generati\r\n as.orders = orderings;\r\n as.savedstate = true;\r\n this.est.emitSearchRequest(false, as);\r\n });\r\n }\r\n\r\n /**\r\n * Helper che calcola il contenuto di una cella relativa a un gruppo riga, tenendo conto del formato delle eventuali aggregazioni\r\n *\r\n * @param {Group} grp Gruppo di cui mostrare le celle\r\n * @param {string} cell Cella attuale di cui calcolare il testo\r\n * @param {EsThDirective} header Header relativo alla cella attuale, utilizzata per identificare le informazioni di aggregazione\r\n *\r\n * @returns {string} Testo finale calcolato per la **cell** corrente, in base alle aggregazioni di **header**\r\n */\r\n public getGroupCellDisplay(grp: Group, cell: string, header: EsThDirective): string {\r\n if ((<any>grp)._sep)\r\n return \"\";\r\n let display = header.thAggregation;\r\n if (grp.column == cell) {\r\n let groupsPart = (<any>grp)._groupscount ? \" - \" + (<any>grp)._groupscount + \" \" + this.est.lc.loc(\"Groups\") : \"\";\r\n return grp.value + \" (\" + grp.count + groupsPart + \")\";\r\n }\r\n else {\r\n\r\n let agg = (<Map<string, Map<string, string>>>(<any>grp)._aggregationsCache).get(cell);\r\n if (!agg)\r\n return \"\";\r\n\r\n this.getEsThDirectiveListOfAggregations(header).forEach((itm: ThAggregation) => {\r\n display = display.replace(itm.match, this.formatAggregationValue(agg.get(itm.func), itm.format));\r\n });\r\n\r\n return display;\r\n }\r\n }\r\n\r\n /**\r\n * Funzione che dato un valore lo formatta in base al tipo\r\n * \r\n * @param {string} value Valore che generalemnte può essere una data o un numero\r\n * @param {string} fromat Formato su cui formattare il valore. Può essere ad esempio \"small\", \"long\" \"verylong\" per le date o F{0-9} per i numeri decimali\r\n * \r\n * @returns {string} Valore dell'aggregazione formattato come si deve\r\n */\r\n private formatAggregationValue(value: string, format?: string): string {\r\n if (!format)\r\n return value;\r\n\r\n let isNumber = !Number.isNaN(value) && (!format || format.startsWith(\"F\"));\r\n\r\n if (isNumber && format.startsWith(\"F\") && !Number.isNaN(format.substr(1)))\r\n return parseFloat(value).toFixed(parseInt(format.substr(1)));\r\n\r\n let date = null;\r\n // Alcune versione di extensions rischiano di crashare con cose non date... è stato risolto dopo quindi questo try - catch in realtà\r\n // torna utile solo con versioni vecchie/deprecate della libreria @esfaenza/extensions\r\n try { date = this.dateExts.getDateConvertion(value); } catch { }\r\n\r\n if (date)\r\n return this.dateExts.getFormatted(date, format == 'small', format == 'verylong');\r\n\r\n // Qui ci finisco sia per input che non sono né date né numeri, sia per formati non riconosciuti\r\n return value;\r\n }\r\n}","// Modelli\r\nimport { AppSearch, CacheTriptic, ItemsSelection } from \"../../../domain\";\r\n\r\n// Componenti\r\nimport { EsTableComponent } from \"../../../components/es-table/es_table.component\"\r\n\r\n// Handlers\r\nimport { RowGroupingHandler } from \"../\";\r\n\r\n/** Classe che gestisce le selezioni degli oggetti */\r\nexport class SelectionHandler {\r\n\r\n /** Cache di selezione Hash - Oggetto per la variabile **items** dell'itemSelector. Facilita le operazioni di lookup via hash*/\r\n private itemsCache: Map<string, any> = new Map();\r\n /** Cache di selezione Hash - Oggetto per la variabile **groups** dell'itemSelector. Facilita le operazioni di lookup via hash */\r\n private groupsCache: Map<string, any> = new Map();\r\n /** Cache di selezione Hash - Oggetto per la variabile **exclusions** dell'itemSelector. Facilita le operazioni di lookup via hash */\r\n private exclusionsCache: Map<string, any> = new Map();\r\n /** Cache di selezione Hash - Oggetto per la variabile **group_exclusions** dell'itemSelector. Facilita le operazioni di lookup via hash */\r\n private group_exclusionsCache: Map<string, any> = new Map();\r\n\r\n /** Cache di selezione Hash - Oggetto per la variabile **items** dell'itemSelector. Facilita le operazioni di lookup via indice*/\r\n private i_itemsCache: Map<string, number> = new Map();\r\n /** Cache di selezione Hash - Oggetto per la variabile **groups** dell'itemSelector. Facilita le operazioni di lookup via indice */\r\n private i_groupsCache: Map<string, number> = new Map();\r\n /** Cache di selezione Hash - Oggetto per la variabile **exclusions** dell'itemSelector. Facilita le operazioni di lookup via indice */\r\n private i_exclusionsCache: Map<string, number> = new Map();\r\n /** Cache di selezione Hash - Oggetto per la variabile **group_exclusions** dell'itemSelector. Facilita le operazioni di lookup via indice */\r\n private i_group_exclusionsCache: Map<string, number> = new Map();\r\n\r\n /** @ignore Costruttore */\r\n constructor(private est: EsTableComponent, private rgHandler: RowGroupingHandler) { }\r\n\r\n /** Ripulisce le cache di selezione */\r\n public clearSelectionCaches() {\r\n this.itemsCache.clear();\r\n this.groupsCache.clear();\r\n this.exclusionsCache.clear();\r\n this.group_exclusionsCache.clear();\r\n\r\n this.i_itemsCache.clear();\r\n this.i_groupsCache.clear();\r\n this.i_exclusionsCache.clear();\r\n this.i_group_exclusionsCache.clear();\r\n }\r\n\r\n /**\r\n * Valuta quali elementi devono essere marcati come selezionati nella vista attuale. Si basa sull'oggetto **selection** interno all'AppSearch\r\n *\r\n * @param {any[]} items Oggetti di cui valutare la selezione\r\n * @param {ItemsSelection<any>} selectionItem Oggetti di selezione derivante dalla view o dall'oggetto per Array\r\n */\r\n public evaluateSelection(items: any[], selectionItem: ItemsSelection<any>) {\r\n if (!selectionItem)\r\n return;\r\n\r\n this.handleSelectionEvaluation(items, selectionItem);\r\n }\r\n\r\n /**\r\n * Implementazione agnostica della valutazione delle selezioni degli oggetti. Richiede gli oggetti della vista attuale e l'itemSelector\r\n *\r\n * @param {any[]} items Oggetti di cui aggiornare lo stato di selezione\r\n * @param {ItemsSelection<any>} selectionItem Oggetto contenente lo stato attuale di selezione\r\n */\r\n private handleSelectionEvaluation(items: any[], selectionItem: ItemsSelection<any>) {\r\n for (let i = 0; i < items.length; i++) {\r\n let itm = items[i];\r\n let hash = itm._hash;\r\n let itemGroup = itm._group ? null : this.getItemGroup(itm);\r\n // Reidrato la cache di selezione coi nuovi oggetti altrimenti non riuscirei a beccare gli indici giusti\r\n // Dopodiché la uso per calcolare istantaneamente se gli oggetti sono selezionati o no\r\n this.rehidrateCache(itm);\r\n\r\n if (itm._item) {\r\n if (selectionItem.all)\r\n itm._selected = !this.exclusionsCache.has(hash) && ((!this.groupsCache.has(itemGroup?._hash) && this.itemsCache.has(hash)) || !this.group_exclusionsCache.has(itemGroup?._hash));\r\n else\r\n itm._selected = !this.exclusionsCache.has(hash) && (this.groupsCache.has(itemGroup?._hash) || this.itemsCache.has(hash) || (this.parentTreeStatus(itemGroup) == 'included' && !this.group_exclusionsCache.has(itemGroup?._hash)));\r\n }\r\n else if (itm._group) {\r\n if (selectionItem.all)\r\n itm._selected = !this.group_exclusionsCache.has(hash) && this.parentTreeStatus(itm) != 'excluded';\r\n else\r\n itm._selected = this.groupsCache.has(hash) || (this.parentTreeStatus(itm) == 'included' && !this.group_exclusionsCache.has(hash));\r\n }\r\n }\r\n\r\n // Se tutti gli oggetti di questa pagina sono solezionati allora posso mettere il global check a true\r\n // Se sono in situazione di all-select anche metto la global checkbox, nonostante ci possano essere delle esclusioni\r\n this.est.globalCheck = this.est.boundSource.length > 0 && this.est.boundSource.filter(t => t._group || t._item).every(t => t._selected);\r\n this.est.canSelectAll = selectionItem.count > 0 && this.est.SelectAll;\r\n\r\n // Potrebbe cambiare qualora qualcuno inserisse dati a manazza in modalità Array e desse il refresh manuale alla tabella\r\n // Comunque costa 0 quindi mi permetto di refreshare\r\n if (this.est.arrayMode) {\r\n let prevSelected = this.est.selectedObjects;\r\n this.finalizeSelectionInformations(selectionItem);\r\n if (this.est.selectedObjects != prevSelected)\r\n this.est.onSelectionChanged.emit(selectionItem);\r\n }\r\n }\r\n\r\n /**\r\n * Dato un oggetto trova la cella di cache in cui è registrato e aggiorna il contenuto\r\n * \r\n * @param {any} item Oggetto da aggiornare\r\n */\r\n private rehidrateCache(item: any) {\r\n let ctx = item._hash;\r\n if (this.itemsCache.has(ctx))\r\n this.itemsCache.set(ctx, item);\r\n\r\n if (this.group_exclusionsCache.has(ctx))\r\n this.group_exclusionsCache.set(ctx, item);\r\n\r\n if (this.groupsCache.has(ctx))\r\n this.groupsCache.set(ctx, item);\r\n\r\n if (this.exclusionsCache.has(ctx))\r\n this.exclusionsCache.set(ctx, item);\r\n }\r\n\r\n /**\r\n * Dato un gruppo controlla ricorsivamente l'albero di cui fa parte se c'è stata una inclusione o esclusione diretta\r\n * \r\n * @param {any} grp Gruppo da controllare\r\n * \r\n * @returns {'none' | 'excluded' | 'included'} \r\n * 'none' se non ci sono informazioni su inclusioni o esclusioni \r\n * 'included' se il gruppo controllato è stato incluso in maniera esplicita dall'albero dei gruppi padri\r\n * 'excluded' se il gruppo controllato è stato escluso in maniera esplicita dall'albero dei gruppi padri\r\n */\r\n private parentTreeStatus(grp: any): 'none' | 'excluded' | 'included' {\r\n if (!grp)\r\n return 'none';\r\n\r\n let parentGroup: any = this.rgHandler.rgGroupCache.get(grp._parent);\r\n\r\n if (!parentGroup)\r\n return 'none';\r\n\r\n if (this.group_exclusionsCache.has(parentGroup._hash))\r\n return 'excluded';\r\n\r\n if (this.groupsCache.has(parentGroup._hash))\r\n return 'included';\r\n\r\n return this.parentTreeStatus(parentGroup);\r\n }\r\n\r\n\r\n /**\r\n * Helper per gestire la selezione di N elementi utilizzando la Cache di selezione ed eventualmente aggiornando il concetto di \"all selection\"\r\n *\r\n * Vunziona sia in modalità Array che in modalità View Semplice o View Avanzata (con le Custom Cells)\r\n *\r\n * @param {any[]} items Oggetti da selezionare o deselezionare\r\n * @param {boolean} forcedVal Valore forzato di check da assegnare agli oggetti\r\n * @param {boolean} globalCheck Valore del check globale\r\n *\r\n * @returns {ItemsSelection<any>} Oggetto di selezione aggiornato con le informazioni sull'ultima operazione effettuata\r\n */\r\n public handleItemsSelection(items: any[], forcedVal: boolean = null, globalCheck: boolean = null): ItemsSelection<any> {\r\n let si = (this.est.View as AppSearch<any>)?.selection || this.est.arraymodeSelection;\r\n\r\n // Se sono in modalità di selezione singola e devo selezionare un'oggetto, per prima cosa devo deselezionare tutti gli altri\r\n if (this.est.SingleSelection && items[0]?._selected && !items[0]?._group) {\r\n if (items.length > 1 && forcedVal == null)\r\n throw \"Tentativo di selezionare o deselezionare più di un elemento con SingleSelection attivo\";\r\n\r\n if (items.length == 1 && forcedVal == null) {\r\n si = this.handleItemsSelection(this.est.boundSource.filter(t => !t._group), false, null);\r\n items[0]._selected = true;\r\n }\r\n }\r\n\r\n for (let i = 0; i < items.length; i++) {\r\n let item = items[i];\r\n let toChange = forcedVal != null ? item._selected != forcedVal : globalCheck != null ? item._selected != this.est.globalCheck : false;\r\n\r\n // Se dev'essere overridato il valore di check effettuo l'override o col valore forzato o col valore globale\r\n if (toChange && !item.locked)\r\n item._selected = forcedVal != null ? forcedVal : this.est.globalCheck;\r\n\r\n // Se il valore non dev'essere variato e vengo da una selezione globale semplicemente evito di effettuare operaizoni inutili. L'item/gruppo è già nello stato giusto\r\n if (!toChange && globalCheck != null)\r\n continue;\r\n\r\n let allSelection = si.all;\r\n let isGroup = item._group;\r\n let isSelection = item._selected;\r\n let itemGroup = null, allItems = null, selectedItems = null, unselectedItems = null, allGroups = null, selectedGroups = null, unselectedGroups = null, parentGroupSelected = null, parentGroupUnselected = null;\r\n\r\n if (isGroup) {\r\n let pts = this.parentTreeStatus(item);\r\n parentGroupSelected = pts == 'included';\r\n parentGroupUnselected = pts == 'excluded';\r\n allItems = this.getGroupItems(si, item, null, true);\r\n selectedItems = this.getGroupItems(si, item, 'selected', true, allItems);\r\n unselectedItems = this.getGroupItems(si, item, 'unselected', true, allItems);\r\n allGroups = this.getGroupChildGroups(si, item, null, true);\r\n selectedGroups = this.getGroupChildGroups(si, item, 'selected', true, allGroups);\r\n unselectedGroups = this.getGroupChildGroups(si, item, 'unselected', true, allGroups);\r\n }\r\n else {\r\n itemGroup = this.getItemGroup(item);\r\n parentGroupSelected = itemGroup == null ? null : itemGroup._selected;\r\n parentGroupUnselected = itemGroup == null ? null : !itemGroup._selected;\r\n }\r\n\r\n if (!this.est.ArrayGrouping)\r\n this.performSelectionOperations(si, item, allSelection, isGroup, isSelection, selectedItems, selectedGroups, unselectedItems, unselectedGroups, allItems, allGroups, parentGroupSelected, parentGroupUnselected);\r\n else\r\n this.performSimpleSelectionOperations(si, item, isGroup, isSelection, itemGroup, selectedItems, unselectedItems, allItems, allGroups);\r\n }\r\n\r\n // Imposto il check globale in base a se tutti gli elementi sono selezionati o meno.\r\n // Evito di fare queste operazioni se la selezione deriva proprio dal global Check\r\n if (globalCheck == null)\r\n this.est.globalCheck = !this.est.boundSource.some(t => !t._selected && !t._sep);\r\n\r\n this.finalizeSelectionInformations(si);\r\n\r\n return si;\r\n }\r\n\r\n /**\r\n * Dato L'oggetto di selezione, l'oggetto da selezionare/deselezionare e tutti i parametri del caso effettua le operazioni che servono.\r\n * \r\n * Logica semplificata rispetto all'originale **performSelectionOperations** per lavorare in una modalità in cui tutti gli elementi sono caricati (**ArrayGrouping** = true)\r\n */\r\n private performSimpleSelectionOperations(base: ItemsSelection<any>, item: any, group: boolean, sel: boolean, itm_group: any, sel_itm: any[], desel_itm: any[], all_itms: any[], all_grps: any[]) {\r\n let tripticItem = this.getTriptic('item', base);\r\n\r\n if (group) {\r\n if (sel) {\r\n all_grps.forEach(gr => { gr._selected = true; });\r\n if (desel_itm)\r\n desel_itm.forEach(el => { el._selected = true; this.addItem(el, tripticItem) });\r\n }\r\n else {\r\n all_grps.forEach(gr => { gr._selected = false; });\r\n if (sel_itm)\r\n sel_itm.forEach(el => { el._selected = false; this.removeItem(el, tripticItem) });\r\n }\r\n }\r\n else {\r\n if (sel) {\r\n this.addItem(item, tripticItem);\r\n if (itm_group && all_itms && all_itms.every(t => t._selected))\r\n this.selectGroup(itm_group);\r\n }\r\n else {\r\n this.removeItem(item, tripticItem);\r\n if (itm_group)\r\n itm_group._selected = false;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Helper per selezionare un gruppo e, ricorsivamente, se tutti i gruppi sottostanti al parent sono selezionati, selezionare i gruppi padri\r\n * \r\n * @param {any} group Gruppo da selezionare\r\n */\r\n private selectGroup(group: any) {\r\n group._selected = true;\r\n let parent = this.getGroupParent(group);\r\n if (parent && this.getGroupChildGroups(null, parent, null, true).every(t => t._selected))\r\n this.selectGroup(parent);\r\n }\r\n\r\n /**\r\n * Dato L'oggetto di selezione, l'oggetto da selezionare/deselezionare e tutti i parametri del caso effettua le operazioni che servono.\r\n * \r\n * La logica di questa funzione è nata essenzialmente da spam di trial & error ed è stata testata solo fino a due livelli di raggruppamento,\r\n * qualsiasi cosa vada oltre non è 100% detto che funzioni...\r\n */\r\n private performSelectionOperations(base: ItemsSelection<any>, item: any, all: boolean, group: boolean, sel: boolean, sel_itm: any[], sel_grp: any[], desel_itm: any[], desel_grp: any[], all_itms: any[], all_grps: any[], parent_incl: boolean, parent_excl: boolean) {\r\n let tripticGroup = this.getTriptic('group', base);\r\n let tripticItem = this.getTriptic('item', base);\r\n let tripticExcl = this.getTriptic('exclusion', base);\r\n let tripticgrpExcl = this.getTriptic('group_exclusion', base);\r\n\r\n if (group) {\r\n if (sel) {\r\n if (all || parent_incl)\r\n this.removeItem(item, tripticgrpExcl);\r\n else\r\n this.addItem(item, tripticGroup);\r\n\r\n if (sel_itm) sel_itm.forEach(el => this.removeItem(el, tripticItem));\r\n if (sel_grp) sel_grp.forEach(gr => this.removeItem(gr, tripticGroup));\r\n if (all_itms) all_itms.forEach(el => { el._selected = true; this.removeItem(el, tripticExcl); });\r\n if (all_grps) all_grps.forEach(gr => { gr._selected = true; this.removeItem(gr, tripticgrpExcl); });\r\n }\r\n else {\r\n if (all || parent_incl)\r\n this.addItem(item, tripticgrpExcl);\r\n else\r\n this.removeItem(item, tripticGroup);\r\n\r\n if (desel_itm) desel_itm.forEach(el => this.removeItem(el, tripticExcl));\r\n if (desel_grp) desel_grp.forEach(gr => this.removeItem(gr, tripticExcl));\r\n if (all_itms) all_itms.forEach(el => { el._selected = false; this.removeItem(el, tripticItem); });\r\n if (all_grps) all_grps.forEach(gr => { gr._selected = false; this.removeItem(gr, tripticGroup); });\r\n }\r\n }\r\n else {\r\n if (sel) {\r\n if ((parent_excl == null && all) || parent_incl)\r\n this.removeItem(item, tripticExcl);\r\n else\r\n this.addItem(item, tripticItem);\r\n }\r\n else {\r\n if (parent_excl || (!all && parent_excl == null))\r\n this.removeItem(item, tripticItem);\r\n else\r\n this.addItem(item, tripticExcl);\r\n }\r\n }\r\n }\r\n\r\n /** Helper per evitare di riscrivere ogni santa volta array.splice(array.indexof(item), 1); */\r\n private removeItem(item: any, triptic?: CacheTriptic) {\r\n let index = triptic.index_cache.get(item._hash);\r\n if (index != null) {\r\n triptic.cache.delete(item._hash);\r\n triptic.index_cache.delete(item._hash);\r\n triptic.array[index] = null;\r\n }\r\n\r\n return !!index;\r\n }\r\n\r\n /** Helper per evitare di riscrivere ogni santa volta array.push(item); e la gestione della */\r\n private addItem(item: any, triptic?: CacheTriptic): boolean {\r\n if (triptic.index_cache.get(item._hash) == null) {\r\n let i = triptic.array.push(item) - 1;\r\n triptic.cache.set(item._hash, item);\r\n triptic.index_cache.set(item._hash, i);\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Ottiene il trittico di selezione, cioè l'array degli oggetti che si vuole manipolare e le due cache collegate ad esso\r\n * \r\n * @param {'group' | 'item' | 'group_exclusion' | 'exclusion'} subject Oggetto logico desiderato su cui effettuare le operazioni successive\r\n * @param {ItemsSelection<any>} base Selettore di base\r\n * \r\n * @returns {CacheTriptic} Trittico di selezione\r\n */\r\n private getTriptic(subject: 'group' | 'item' | 'group_exclusion' | 'exclusion', base: ItemsSelection<any>): CacheTriptic {\r\n switch (subject) {\r\n case 'group':\r\n return new CacheTriptic(this.groupsCache, this.i_groupsCache, base.groups);\r\n case 'item':\r\n return new CacheTriptic(this.itemsCache, this.i_itemsCache, base.items);\r\n case 'group_exclusion':\r\n return new CacheTriptic(this.group_exclusionsCache, this.i_group_exclusionsCache, base.group_exclusions);\r\n case 'exclusion':\r\n return new CacheTriptic(this.exclusionsCache, this.i_exclusionsCache, base.exclusions);\r\n }\r\n }\r\n\r\n /**\r\n * Dato un oggetto restituisce il gruppo di cui fa parte, se esiste\r\n * \r\n * @param {any} item Oggetto di cui trovare il gruppo\r\n */\r\n private getItemGroup(item: any): any {\r\n let parent = this.rgHandler.rgGroupCache.get(item._thisKey)\r\n if (parent)\r\n return parent;\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Data la chiave di un gruppo restituisce tutti gli oggetti con quella chiave\r\n * \r\n * @param {any} group Chiave da cercare\r\n * @param {'selected' | 'unselected'} status Stato degli elementi, selezionati o no\r\n * @param {boolean} recursive Indica se cercare solo gli elementi direttamente collegati o se prendere anche quelli dei gruppi figli\r\n * \r\n * @returns {any[]} Oggetti di tipo **_item** facenti capo alla chiave **groupKey**\r\n */\r\n private getGroupItems(sel: ItemsSelection<any>, group: any, status?: 'selected' | 'unselected', recursive: boolean = false, allbase: any[] = null): any[] {\r\n let items = [];\r\n\r\n if (allbase)\r\n items = allbase;\r\n else {\r\n if (recursive) {\r\n // In modalità ricorsiva prendo gli oggetti di tutte le chiavi simili che trovo\r\n for (let key of this.rgHandler.rgItemCache.keys())\r\n if (key.startsWith(group._thisKey))\r\n items.push(...this.rgHandler.rgItemCache.get(key));\r\n }\r\n else\r\n items = this.rgHandler.rgItemCache.get(group._thisKey);\r\n }\r\n\r\n items = items.filter(t => !status || (t._selected && status == 'selected') || (!t._selected && status == 'unselected'));\r\n\r\n // Non trovo nessun oggetto, però magari di oggetti ne ho all'interno dell'oggetto di selezione. \r\n // Questo può essere vero solo se NON sono in modalità array, in caso contrario gli oggetti li devo per forza avere tutti\r\n if (items.length != 0 || !sel || this.est.arrayMode)\r\n return items;\r\n\r\n if (status == 'unselected')\r\n items = sel.exclusions.filter(t => t != null &&\r\n (!recursive && t._thisKey == group._thisKey) ||\r\n (recursive && t._thisKey.startsWith(group._thisKey)));\r\n else if (status == 'selected')\r\n items = sel.items.filter(t => t != null &&\r\n (!recursive && t._thisKey == group._thisKey) ||\r\n (recursive && t._thisKey.startsWith(group._thisKey)));\r\n\r\n return items;\r\n }\r\n\r\n /**\r\n * Data la chiave di un gruppo restituisce tutti gli oggetti con quella chiave\r\n * \r\n * @param {any} group Gruppo di cui cercare il parent\r\n * \r\n * @returns {any} Oggetto di tipo **_group** rappresentante il parent del **group** attuale\r\n */\r\n private getGroupParent(group: any): any {\r\n let parent = this.rgHandler.rgGroupCache.get(group._parent)\r\n if (parent)\r\n return parent;\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Data la chiave di un gruppo restituisce tutti i gruppi figli\r\n * \r\n * @param {string} group Gruppo che rappresenta il padre di cui cercare i figli\r\n * @param {'selected' | 'unselected'} status Stato dei gruppi, selezionati o no\r\n * @param {boolean} recursive Indica se cercare solo i gruppi direttamente collegati o se prendere anche quelli dei gruppi figli\r\n * \r\n * @returns {any[]} Oggetti di tipo **_group** facenti capo alla chiave **groupKey**\r\n */\r\n private getGroupChildGroups(sel: ItemsSelection<any>, group: any, status?: 'selected' | 'unselected', recursive: boolean = false, allbase: any[] = null) {\r\n let thisGroup: any = this.rgHandler.rgGroupCache.get(group._thisKey);\r\n let items = [];\r\n\r\n if (allbase)\r\n items = allbase;\r\n else {\r\n if (recursive) {\r\n // In modalità ricorsiva prendo gli oggetti di tutte le chiavi simili che trovo\r\n for (let key of this.rgHandler.rgChildGroupsCache.keys())\r\n if (key.startsWith(group._thisKey))\r\n items.push(...this.rgHandler.rgChildGroupsCache.get(key));\r\n }\r\n else\r\n items = this.rgHandler.rgChildGroupsCache.get(group._thisKey);\r\n }\r\n\r\n items = items.filter(t => !status || (t._selected && status == 'selected') || (!t._selected && status == 'unselected'));\r\n\r\n // Non trovo nessun oggetto, però magari di oggetti ne ho all'interno dell'oggetto di selezione\r\n if (items.length != 0 || !sel)\r\n return items;\r\n\r\n if (status == 'unselected')\r\n items = sel.group_exclusions.filter((t: any) => t != null && (\r\n (!recursive && t._thisRoute.length == thisGroup._thisRoute.length + 1 && t._thisRoute.startsWith(group._thisKey)) ||\r\n (recursive && t._thisKey.startsWith(group._thisKey))));\r\n else\r\n items = sel.groups.filter((t: any) => t != null && (\r\n (!recursive && t._thisRoute.length == thisGroup._thisRoute.length + 1 && t._thisRoute.startsWith(group._thisKey)) ||\r\n (recursive && t._thisKey.startsWith(group._thisKey))));\r\n\r\n return items;\r\n }\r\n\r\n /** Finalizza le informazioni di selezione del **ItemsSelection** corrente */\r\n private finalizeSelectionInformations(selectionItem: ItemsSelection<any>) {\r\n // Dato che le delete sono logiche dato che tengo la cache degli indici devo renderle fisiche\r\n let tmpGrp = [], tmpItems = [], tmpExcl = [], tmpGrpExcl = [];\r\n let grpRemoved = false, itemsRemoved = false, exclRemoved = false, grpExclRemoved = false;\r\n\r\n for (let i = 0; i < selectionItem.items.length; i++)\r\n if (selectionItem.items[i] != null) tmpItems.push(selectionItem.items[i]);\r\n else itemsRemoved = true;\r\n\r\n for (let i = 0; i < selectionItem.exclusions.length; i++)\r\n if (selectionItem.exclusions[i] != null) tmpExcl.push(selectionItem.exclusions[i]);\r\n else exclRemoved = true;\r\n\r\n // In vecchie versioni dell'AppSearch per cui non vengono deserializzate queste informaizoni potrebbero esserci casini\r\n if (selectionItem.groups) {\r\n for (let i = 0; i < selectionItem.groups.length; i++)\r\n if (selectionItem.groups[i] != null) tmpGrp.push(selectionItem.groups[i]);\r\n else grpRemoved = true;\r\n }\r\n\r\n if (selectionItem.group_exclusions) {\r\n for (let i = 0; i < selectionItem.group_exclusions.length; i++)\r\n if (selectionItem.group_exclusions[i] != null) tmpGrpExcl.push(selectionItem.group_exclusions[i]);\r\n else grpExclRemoved = true;\r\n }\r\n\r\n selectionItem.items = tmpItems;\r\n selectionItem.group_exclusions = tmpGrpExcl;\r\n selectionItem.exclusions = tmpExcl;\r\n selectionItem.groups = tmpGrp;\r\n\r\n // Le cache degli indici potrebbero avere buchi, risolvo\r\n if (grpRemoved)\r\n this.i_groupsCache = this.compactIndexMap(this.i_groupsCache);\r\n if (itemsRemoved)\r\n this.i_itemsCache = this.compactIndexMap(this.i_itemsCache);\r\n if (exclRemoved)\r\n this.i_exclusionsCache = this.compactIndexMap(this.i_exclusionsCache);\r\n if (grpExclRemoved)\r\n this.i_group_exclusionsCache = this.compactIndexMap(this.i_group_exclusionsCache);\r\n\r\n // Poi riprendo a fare tutto in normalità\r\n selectionItem.count = this.evaluateSelected();\r\n\r\n // Se ho fatto selezione \"all\" ma poi mi sono messo a togliere tutti gli elementi fino a rimanerne 0 resetto l'oggetto di selezione\r\n if (selectionItem.count == 0) {\r\n this.est.boundSource.forEach(t => t._selected = false);\r\n selectionItem.all = false;\r\n selectionItem.exclusions = [];\r\n selectionItem.items = [];\r\n selectionItem.groups = [];\r\n selectionItem.group_exclusions = [];\r\n\r\n // Ripulisco la cache altrimenti mi rimane piena di tutte le esclusioni\r\n this.clearSelectionCaches();\r\n }\r\n\r\n // Se la possibilità di fare \"Seleziona tutto\" è abilitata allora la considero appena mi viene selezionato qualcosa\r\n this.est.canSelectAll = selectionItem.count > 0 && this.est.SelectAll;\r\n }\r\n\r\n /** Compatta una cache di indici */\r\n private compactIndexMap(map: Map<string, number>): Map<string, number> {\r\n let index = 0;\r\n let ret = new Map();\r\n for (let key of map.keys())\r\n ret.set(key, index++);\r\n\r\n return ret;\r\n }\r\n\r\n\r\n /**\r\n * Valuta la quantità di oggetti che sono stati selezionati al termine di un evento di selezione\r\n *\r\n * @returns {number} Numero di oggetti selezionati\r\n */\r\n private evaluateSelected(): number {\r\n let si = (this.est.View as AppSearch<any>)?.selection || this.est.arraymodeSelection;\r\n\r\n let excByGroup = si.group_exclusions.reduce((prev, curr) => prev + curr.count, 0);\r\n let incByGroup = si.groups.reduce((prev, curr) => prev + curr.count, 0);\r\n\r\n this.est.selectedObjects = (si.all ? this.est.BaseItemsCount : incByGroup) - excByGroup + si.items.length - si.exclusions.length;\r\n return this.est.selectedObjects;\r\n }\r\n\r\n /** Gestisce il comando di \"Seleziona tutto in tutte le pagine\" o il suo contrario, cioè \"Reimposta selezione\" */\r\n public selectAllOrResetSelection() {\r\n let selectionItem = this.est.View.selection || this.est.arraymodeSelection;\r\n this.clearSelectionCaches();\r\n selectionItem.all = !selectionItem.all;\r\n selectionItem.exclusions = [];\r\n selectionItem.groups = [];\r\n selectionItem.group_exclusions = [];\r\n selectionItem.items = [];\r\n\r\n // Ripulisco gli stati UI di selezione globale se l'ho disattivata\r\n if (!selectionItem.all) {\r\n this.est.canSelectAll = false;\r\n this.est.globalCheck = false;\r\n }\r\n\r\n this.finalizeSelectionInformations(selectionItem);\r\n\r\n this.est.onSelectionChanged.emit(selectionItem);\r\n\r\n // Dopo aver resettato direttamente il solo oggetto this.View.selection devo anche riallineare a tutti gli oggetti bindati\r\n this.evaluateSelection(this.est.boundSource, selectionItem);\r\n }\r\n}","// Angular\r\nimport { Injectable } from \"@angular/core\";\r\n\r\n// Librerie\r\nimport { HashingService } from \"@esfaenza/extensions\";\r\n\r\n// Componenti\r\nimport { EsTd } from \"../../../components/es-td/es_td.component\";\r\nimport { EsTh } from \"../../../components/es-th/es_th.component\";\r\n\r\n/** Classe di utilità per le cose comuni */\r\n@Injectable({ providedIn: 'root' })\r\nexport class UtilitiesHandler {\r\n\r\n /** @ignore Costruttore */\r\n constructor(private hashExts: HashingService) { }\r\n\r\n /**\r\n * Data una lista di oggetti effettua dei raggruppamenti in base alla proprietà **field**, \r\n * restituendo un oggetto del tipo { Gruppo1: oggetti[], Gruppo2: oggetti[], ecc... }\r\n *\r\n * @param {any[]} array Lista degli oggetti da raggruppare\r\n * @param {string} field Campo su cui effettuare i raggruppamenti\r\n *\r\n * @returns {{ [id: string]: any[] }} Dizionario dei gruppi\r\n */\r\n public groupBy(array: any[], field: string): { [id: string]: any[]; } {\r\n let ret = {};\r\n for (let i = 0; i < array.length; i++) {\r\n let x = array[i];\r\n (ret[x[field]] = ret[x[field]] || []).push(x);\r\n }\r\n return ret;\r\n };\r\n\r\n /**\r\n * Helper per effettuare il caching delle aggregazioni. Le sposta da una lista di **GroupAggregation** a una **<Map<string, Map<string, string>>**\r\n *\r\n * @param {any} group Gruppo di cui cachare le aggregazioni\r\n */\r\n public cacheAggregations(group: any) {\r\n (<any>group)._aggregationsCache = new Map();\r\n let castedAgCache = (<Map<string, Map<string, string>>>(<any>group)._aggregationsCache);\r\n for (let i = 0; i < group.aggregations.length; i++) {\r\n let agg = group.aggregations[i];\r\n if (castedAgCache.has(agg.column))\r\n castedAgCache.get(agg.column).set(agg.aggregation, agg.value);\r\n else {\r\n let tmp: Map<string, string> = new Map();\r\n tmp.set(agg.aggregation, agg.value);\r\n castedAgCache.set(agg.column, tmp);\r\n }\r\n }\r\n }\r\n\r\n /** Helper per spostare un oggetto di un array da un indice all'altro, in place */\r\n public arrayMove(array: any[], oldI: number, newI: number) {\r\n if (newI > array.length - 1 || oldI > array.length - 1 || newI < 0 || oldI < 0)\r\n throw \"Gli indici passati non fanno riferimento a una posizione dell'array. Length: \" + array.length + \" Old:\" + oldI + \" New: \" + newI;\r\n\r\n array.splice(newI, 0, array.splice(oldI, 1)[0]);\r\n }\r\n\r\n /**\r\n * Helper che identifica se il td attuale è di tipo **EsTd**. In caso contrario è da considerarsi **EsTdDirective**\r\n *\r\n * @param {any} td Cella da valutare\r\n * @returns {boolean} Restituisce **true** se il **td** è di tipo **EsTd**, **false** se è di tipo **EsTdDirective**\r\n */\r\n public isEsTd(td: any): td is EsTd { return !td._directive; }\r\n\r\n /**\r\n * Helper che identifica se il th attuale è di tipo **EsTh**. In caso contrario è da considerarsi **EsThDirective**\r\n *\r\n * @param {any} td Header da valutare\r\n * @returns {boolean} Restituisce **true** se il **th** è di tipo **EsTh**, **false** se è di tipo **EsThDirective**\r\n */\r\n public isEsTh(th: any): th is EsTh { return !th._directive; }\r\n\r\n /**\r\n * Date le informazioni di paginazione ottiene l'array dei pulsanti\r\n *\r\n * @param {number} maxBtns Numero massimo di pulsanti da visualizzare\r\n * @param {number} page Pagina corrente\r\n * @param {number} lastPage Ultima pagina disponibile\r\n *\r\n * @returns {any[]} Pseudo-array di pulsanti a cui ci si può bindare lato HTML\r\n */\r\n public getPagesArray(maxBtns: number, page: number, lastPage: number, actualCount: number = null, ipp: number = null): any[] {\r\n let result = [];\r\n\r\n // Se sono in modalità \"Numero di pagine ed oggetti sconosciuti\" faccio in modo di mostrare la pagina successiva solo se gli items effettivamente pervenuti\r\n // sono uguali alla paginazione attuale (cioè questa pagina è di sicuro riempita completamente)\r\n if (lastPage == -1 && ((actualCount == null && ipp == null) || (actualCount == ipp)))\r\n lastPage = page + 1;\r\n\r\n // Se sono in modalità \"Numero di pagine ed oggetti sconosciuti\" e mi arrivano 0 oggetti significa che l'ultima pagina è la precedente e non mostro pagine oltre\r\n if (lastPage == -1 && actualCount == 0)\r\n lastPage = page;\r\n\r\n let min, max;\r\n if (lastPage <= maxBtns) {\r\n min = 1;\r\n max = lastPage - 1;\r\n } else {\r\n // tolgo la pagina selected è l'ultima pagina che è quella delle pagine totali\r\n let rangeOutside = (maxBtns - 2) / 2;\r\n\r\n min = page - rangeOutside;\r\n max = page + rangeOutside;\r\n\r\n if (min < 1) {\r\n min = 1;\r\n max = maxBtns - 1;\r\n } else if (max >= lastPage) {\r\n min = lastPage - maxBtns + 1;\r\n max = lastPage - 1;\r\n }\r\n }\r\n\r\n result.push({ val: 1, cssClass: (1 === page ? 'btn-main app-white-text' : 'app-white-button') });\r\n\r\n if (max >= min) {\r\n for (let i = min; i <= max; i++)\r\n if (i !== 1)\r\n result.push({ val: i, cssClass: (i === page ? 'btn-main app-white-text' : 'app-white-button') });\r\n\r\n result.push({\r\n val: lastPage,\r\n cssClass: (lastPage === page ? 'btn-main app-white-text' : 'app-white-button')\r\n });\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Calcola l'hash di un oggetto qualsiasi\r\n *\r\n * @param {any[]} items Oggetti per cui calcolare l'hash\r\n */\r\n public calculateHash(items: any[]) {\r\n if (!items)\r\n return;\r\n\r\n // Supporto a hash duplicati di oggetti uguali\r\n let usedHashesCache: { [index: string]: number; } = {};\r\n for (let i = 0; i < items.length; i++) {\r\n let item = items[i];\r\n\r\n // Prima di calcolare l'hash rimuovo le proprietà interne per evitare che mi scompensino i calcoli successivi\r\n let tmp = Object.assign({}, items[i]);\r\n delete tmp._selected;\r\n delete tmp._visible;\r\n delete tmp._hash;\r\n let hash = this.hashExts.hashObject(tmp);\r\n\r\n usedHashesCache[hash] = usedHashesCache[hash] ? usedHashesCache[hash] + 1 : 1;\r\n item._hash = hash + (usedHashesCache[hash] > 1 ? \"_\" + usedHashesCache[hash] : \"\");\r\n }\r\n }\r\n\r\n /**\r\n * Se l'Input è null (valore non settato) vede se c'è un default con cui valorizzarlo. Se non c'è utilizza il valore di fallback (qualora fornito)\r\n * \r\n * @param {T} inputValue Valore dell'Input\r\n * @param {T} defaultValue Valore di default impostato da configurazione\r\n * @param {T} fallbackValue Valore dell'Input per quando non è stato assegnato dal programmatore e non ha un default\r\n */\r\n public InputOrDefault<T>(inputValue: T, defaultValue: T, fallbackValue?: T) {\r\n\r\n // Input valorizzato dal programmatore\r\n if (inputValue != null && inputValue != undefined)\r\n return inputValue;\r\n\r\n // Input valorizzato da configurazione globale\r\n if (defaultValue != null && defaultValue != undefined)\r\n return defaultValue;\r\n\r\n //Input non valorizzato da niente e da nessuno\r\n if (fallbackValue != null && fallbackValue != undefined)\r\n return fallbackValue;\r\n\r\n // I casi in cui si arriva qui sono i casi di Input che di default va bene che siano nulli e che nessuno si caga\r\n return null;\r\n }\r\n}\r\n","// Angular\r\nimport {\r\n Component, forwardRef, ContentChildren, QueryList, ChangeDetectorRef, ChangeDetectionStrategy, Input,\r\n EventEmitter, Output, ContentChild, OnChanges, SimpleChanges, ViewChild, ElementRef, ViewEncapsulation, Optional, Self, TemplateRef, Inject\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\r\n\r\n// Configurazioni\r\nimport { UtilityService, ExportService, MessageService, DateService } from '@esfaenza/extensions';\r\nimport { LocalizationService } from '@esfaenza/localizations';\r\nimport { PreferencesService } from '@esfaenza/preferences';\r\n\r\n// Plugins\r\nimport { ContextMenuComponent } from '@esfaenza/ngx-contextmenu';\r\n\r\n// Modelli\r\nimport {\r\n AppSearch, AppOrdering, EsTableColumnsDefinition, CornerMenuOption, ReportDefinition, ReportResult,\r\n EsTableOperationDefinition, EsTableColumn, GroupPager, GroupRouteFragment, ThElement\r\n} from '../../domain';\r\n\r\n// Componenti e Localizzazione\r\nimport { EsTd } from '../es-td/es_td.component';\r\nimport { EsTh } from '../es-th/es_th.component';\r\nimport { EsTdDirective } from '../../directives/es_td.directive';\r\nimport { EsThDirective } from '../../directives/es_th.directive';\r\nimport { EsTableLoc } from './es_table.component.loc';\r\nimport { ItemsSelection } from '../../domain/externals/classes/appsearch/ItemsSelection';\r\nimport { GroupOrAggregation } from \"../../domain/externals/classes/appsearch/GroupOrAggregation\";\r\nimport { GroupFilter } from \"../../domain/externals/classes/appsearch/GroupFilter\";\r\nimport { Group } from \"../../domain/externals/classes/appsearch/Group\";\r\nimport { EsTableDefaultable } from '../../domain/configuration/EsTableDefaultable';\r\n\r\nimport { EST_DEFAULTS, EST_LOCALE } from '../../tokens';\r\n\r\nimport { ExportHandler, ColumnMetadataHandler, DynamicModeHandler, HierarchyModeHandler, ItemsHandler, ReportModeHandler, RowGroupingHandler, SelectionHandler, UtilitiesHandler } from '../../core/handlers';\r\n\r\n/** Componente che permette di rappresentare una griglia di valori */\r\n@Component({\r\n selector: 'es-table',\r\n viewProviders: [{ provide: LocalizationService, useClass: EsTableLoc }],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n styleUrls: ['./es_table.component.scss'],\r\n templateUrl: './es_table.component.html'\r\n})\r\nexport class EsTableComponent implements ControlValueAccessor, OnChanges {\r\n\r\n export_H: ExportHandler;\r\n columnMetadata_H: ColumnMetadataHandler;\r\n dynamicMode_H: DynamicModeHandler;\r\n hierarchyMode_H: HierarchyModeHandler;\r\n items_H: ItemsHandler;\r\n reportMode_H: ReportModeHandler;\r\n rowGrouping_H: RowGroupingHandler\r\n selection_H: SelectionHandler;\r\n\r\n /** @ignore */\r\n constructor(\r\n @Self() @Optional() public ngControl: NgControl, \r\n @Optional() private prefService: PreferencesService, \r\n @Optional() @Inject(EST_DEFAULTS) private deafults: EsTableDefaultable, \r\n @Optional() @Inject(EST_LOCALE) public locale: string, \r\n public lc: LocalizationService,\r\n public cdr: ChangeDetectorRef, \r\n private utilities_H: UtilitiesHandler, \r\n private utiExts: UtilityService, \r\n private expExts: ExportService, \r\n private dateExts: DateService, \r\n private msgExts: MessageService) {\r\n\r\n this.export_H = new ExportHandler(this, this.expExts, this.msgExts);\r\n this.rowGrouping_H = new RowGroupingHandler(this, this.utilities_H, this.dateExts);\r\n this.columnMetadata_H = new ColumnMetadataHandler(this, this.utilities_H, this.utiExts, this.prefService, this.rowGrouping_H);\r\n this.dynamicMode_H = new DynamicModeHandler(this);\r\n this.hierarchyMode_H = new HierarchyModeHandler(this);\r\n this.items_H = new ItemsHandler(this, this.utilities_H);\r\n this.reportMode_H = new ReportModeHandler(this, this.utilities_H);\r\n this.selection_H = new SelectionHandler(this, this.rowGrouping_H);\r\n\r\n if (ngControl)\r\n ngControl.valueAccessor = this;\r\n\r\n // Assegnazione per tutti gli Input di default\r\n this.ColumnsResizable = this.utilities_H.InputOrDefault(this.ColumnsResizable, this.deafults?.ColumnsResizable);\r\n this.AutoUpdate = this.utilities_H.InputOrDefault(this.AutoUpdate, this.deafults?.AutoUpdate);\r\n this.AllSearch = this.utilities_H.InputOrDefault(this.AllSearch, this.deafults?.AllSearch, true);\r\n this.Export = this.utilities_H.InputOrDefault(this.Export, this.deafults?.Export);\r\n this.HidePaging = this.utilities_H.InputOrDefault(this.HidePaging, this.deafults?.HidePaging, false);\r\n this.HidePagingCount = this.utilities_H.InputOrDefault(this.HidePagingCount, this.deafults?.HidePagingCount);\r\n this.HidePagingButtons = this.utilities_H.InputOrDefault(this.HidePagingButtons, this.deafults?.HidePagingButtons);\r\n this.ContainerClass = this.utilities_H.InputOrDefault(this.ContainerClass, this.deafults?.ContainerClass, '');\r\n this.TableClass = this.utilities_H.InputOrDefault(this.TableClass, this.deafults?.TableClass, 'table table-striped table-hover table-sm');\r\n this.Selection = this.utilities_H.InputOrDefault(this.Selection, this.deafults?.Selection);\r\n this.SavePreferences = this.utilities_H.InputOrDefault(this.SavePreferences, this.deafults?.SavePreferences);\r\n this.PagingStyle = this.utilities_H.InputOrDefault(this.PagingStyle, this.deafults?.PagingStyle, 'bottom');\r\n this.RowGroupingPagingStyle = this.utilities_H.InputOrDefault(this.RowGroupingPagingStyle, this.deafults?.RowGroupingPagingStyle, 'left');\r\n this.UseSelectionCache = this.utilities_H.InputOrDefault(this.UseSelectionCache, this.deafults?.UseSelectionCache, true);\r\n this.ShowItemGroupsColumns = this.utilities_H.InputOrDefault(this.ShowItemGroupsColumns, this.deafults?.ShowItemGroupsColumns, false);\r\n this.ArraymodeItemsPerPage = this.utilities_H.InputOrDefault(this.ArraymodeItemsPerPage, this.deafults?.ArraymodeItemsPerPage, 15);\r\n }\r\n\r\n /** View finale su cui bindarsi lato Frontend, il tipo può essere IAppSearch<any> (per la **viewMode**), any[] (per l'**arrayMode**) e ReportDefinition per la **reportMode** */\r\n public View: any = null;\r\n /** Modello da cui l'es-table mostra i pulsanti di paginazione in basso a destra */\r\n public arrayPulsanti: any;\r\n /** Indica se l'es-table deve mostrare il check globale nell'header per fare il \"seleziona tutto\" */\r\n public globalCheck = false;\r\n /** Tiene da conto l'ultimo elemento selezionato in modo da poter effettuare il SHIFT+CLICK */\r\n private lastSelected: any = null;\r\n /** Conteggio interno per il numero di elementi selezionati */\r\n public selectedObjects = 0;\r\n /** Indica se è possibile effettuare una selezione massiva */\r\n public canSelectAll = false;\r\n /** Indica se il componente sta gestendo un IAppSearch<any> */\r\n public viewMode = false;\r\n /** Indica se il componente sta gestendo un any[] */\r\n public arrayMode = false;\r\n /** Indica se il componente sta gestendo un ReportDefinition */\r\n public reportMode = false;\r\n\r\n /**\r\n * Contenitore degli elementi da listare lato interfaccia dopo tutte le elaborazioni del caso,\r\n * generalmente non sono altro che tutti gli oggetti da presentare con in più l'hash calcolato per identificare 1 oggetto con la propria riga\r\n */\r\n public boundSource: any[] = [];\r\n /** Stessa cosa della **boundSource**, utilizzata come appoggio temporaneo interno */\r\n public TMPBoundSource: any[] = [];\r\n /** \"Fetta\" di oggetti utilizzata nell'endless scroll, ogni elemento di questo array è un blocchetto di 100 elementi */\r\n public boundSubSources: any[] = [];\r\n /** Questa funge da indicatore per gli slice inseriti, la lunghezza dovrebbe essere corrispondente a **boundSubSources** */\r\n public addedSlices: number[] = [];\r\n /** Variabile che identifica il valore del \"seleziona Tutto\" nella paginazione */\r\n public defaultAllPageOverride = 999999;\r\n /** Indica se utilizzare il sistema di Endless Scroll */\r\n public UseEndlessscroll: boolean;\r\n /** Valori dell'eventuale report in visualizzazione */\r\n public ReportValues: ReportResult;\r\n /** Serve per tenere in memoria il conteggio precedente e recuperarlo in caso diventi -2 (verificare con Ale perché la logica del -2) */\r\n public previousCount: number;\r\n /** Indica se utilizzare il sistema di autoupdate, cioè un trigger time-izzato in alto a destra della tabella che ripete le ricerche ogni X **seconds** */\r\n public autoUpdate = false;\r\n /** Numero di secondi da fare trascorrere fra una ricerca e l'altra */\r\n public seconds = '10';\r\n /** Riferimento all'Interval che viene generato se **autoUpdate** è impostata a true in modo da poterlo ripulire */\r\n public updateTimer: any;\r\n /** Impostata a true ogni volta che viene avviata una ricerca, e a false ogni volta che un nuovo valore viene ricevuto */\r\n public researchInProgress: boolean = false;\r\n /** Modello rappresentante un singolo td della tabella, generato in base alle configurazioni e agli oggetti ricevuti */\r\n public RowTDs: { [context: string]: EsTd[] } = null;\r\n /** Modello di appoggio temporaneo per i **RowTDs** */\r\n public TMPRowTDs: { [context: string]: EsTd[] } = null;\r\n /** Modello rappresentante un singolo th della tabella, generato in base alle configurazioni e agli oggetti ricevuti */\r\n public RowTHs: ThElement[] = null;\r\n /** Modello di appoggio temporaneo per i **RowTHs** */\r\n public TMPRowTHs: ThElement[] = null;\r\n /** Modello di appoggio temporaneo per i **RowThGroups** */\r\n public TMPRowThGroups: { Span: number, Template: TemplateRef<any> }[][] = null;\r\n /** Modello rappresentante un singolo header group della tabella. Questa lista è già ordinata e pronta per essere utilizzata in ngFor */\r\n public RowThGroups: { Span: number, Template: TemplateRef<any> }[][] = null;\r\n /** Cache per i routerLink generati nelle tabelle dinamiche */\r\n public DynamicTableRouterLinkCache: {} = {};\r\n\r\n /**\r\n * Lista dei contesti. Un contesto non è altro che un hash particolare calcolato su un oggetto che identifica univocamente tale oggetto.\r\n *\r\n * Ognuno di questi contesti rappresenterà a sua volta, univocamente, una riga all'interno della tabella\r\n */\r\n public RowContexts: any[] = [];\r\n /** Direttive di ordinamento delle colonne (non ordinamento dei dati ma delle colonne in se) */\r\n public OrderDirectives: string[] = [];\r\n /** Codice dell'ultimo oggetto solezionato */\r\n public lastSelectedItemID = null;\r\n\r\n /**\r\n * Indica se oltre alle colonne dinamiche specifiche di un tipo di oggetto ci sono anche colonne dinamiche aggiunte dall'utente\r\n *\r\n * Es. una colonna in cui mostrare sempre un iconcina\r\n */\r\n public UserDefinedDynamicCols: boolean = false;\r\n /** Indica che questo è il primo Bind della tabella, viene settato a false non appena il primo bind viene terminato con successo */\r\n public FirstBind: boolean = true;\r\n /** Lista di colonne che si possono visualizzare/ordinare fra di loro */\r\n public ColumnsList: EsTableColumn[] = [];\r\n /** Variabile d'appoggio usata dalla dialog di selezione/nascondimento, per evitare di danneggiare **ColumnsList** in caso di modifiche poi annullate */\r\n public TMPColumnsList: EsTableColumn[] = [];\r\n /** Valore del check globale di visibilità valido per tutte le colonne in **ColumnsList** */\r\n public globalColVisCheck = false;\r\n\r\n /** Query per recuperare tutte le nuove direttive assegnati a direttiva (Per la modalità dinamica dell'es-table) */\r\n @ContentChildren(EsTdDirective) EsTdsDirective: QueryList<EsTdDirective>;\r\n /** Query per recuperare tutti gli es-td assegnati a direttiva (Per la modalità dinamica dell'es-table) */\r\n @ContentChildren(EsThDirective) EsThsDirective: QueryList<EsThDirective>;\r\n /** @deprecated Query per recuperare tutti gli es-th */\r\n @ContentChildren(forwardRef(() => EsTh)) private EsThs: QueryList<EsTh>;\r\n /** @deprecated Query per recuperare tutti gli es-td */\r\n @ContentChildren(forwardRef(() => EsTd)) private EsTds: QueryList<EsTd>;\r\n /** @deprecated Query per recuperare le informazioni del body (punto della tabella dove vengono mostrate le righe) */\r\n @ContentChild('body', { static: false }) public bodyRef: any;\r\n /** @deprecated Query per recuperare le informazioni dell'header (punto della tabella dove vengono mostrate le intestazioni delle righe) */\r\n @ContentChild('header', { static: false }) public headerRef: any;\r\n /** Query per recuperare le informazioni sul raggruppamento degli header */\r\n @ContentChild('headerGroup', { static: false }) public headerGroupRef: any;\r\n /** Query per recuperare le informazioni sul raggruppamento di secondo livello degli header */\r\n @ContentChild('secondaryHeaderGroup', { static: false }) public secondaryHeaderGroupRef: any;\r\n /** Opzioni extra che devono apparire nel Menù contestuale in alto a destra, richiamato dai 3 pallini verticali */\r\n @Input() CornerMenuOptions: CornerMenuOption[] = null;\r\n /** Indica se dev'essere possibile effettuare il resize delle colonne */\r\n @Input() ColumnsResizable: boolean = null;\r\n /** Indica se dev'essere disponibile il sistema di aggiornamento automatico */\r\n @Input() AutoUpdate: boolean = null;\r\n\r\n /** Indica se la tabella (configurata con **UseCustomCells**) deve mettersi in ascolto per i click sulle celle desiderate\r\n * \r\n * @deprecated Utilizzare l'Input **Template** delle es-td e assegnare un template con tutti i binding che si vuole ai click\r\n */\r\n @Input() UseCustomCellActions: boolean = null;\r\n\r\n /**\r\n * Indica le celle desiderate su cui intercettare i click. Attiva solo quando **UseCustomCellActions** è true.\r\n * Ogni cella dev'essere separata dalla successiva dal carattere del Simoleon:\r\n *\r\n * Es, \"MiaCella1§MiaCella2\"\r\n * \r\n * @deprecated Utilizzare l'Input **Template** delle es-td e assegnare un template con tutti i binding che si vuole ai click\r\n */\r\n @Input() CustomCellActionsOn = '';\r\n\r\n /** \r\n * Serve per decidere di lanciare o meno il **event.stopPropagation()** al termine della gestione dell'evento \r\n * \r\n * @deprecated Utilizzare l'Input **Template** delle es-td e assegnare un template con tutti i binding che si vuole ai click\r\n */\r\n @Input() CellActionPropagates = true;\r\n\r\n /**\r\n * Decide se utilizzare o meno le CustomCells. Impostandolo a **true** l'es-table diventa in grado di gestire nativamente:\r\n *\r\n * 1) Ordinamento e visibilità delle colonne\r\n *\r\n * 2) Ordinamento dei dati\r\n *\r\n * 3) Modalità Gerarchica\r\n *\r\n * ecc...\r\n */\r\n @Input() UseCustomCells: boolean = null;\r\n /** Permette di impostare l'altezza massima della tabella. Se null la dimensione si adatta al numero di elementi attualmente in visualizzazione */\r\n @Input() MaxHeight: number = null;\r\n /** Classi da applicare al contenitore della tabella */\r\n @Input() ContainerClass = null;\r\n /** Permette o meno l'export in formato XLSX */\r\n @Input() XLSXExport: boolean = null;\r\n /** Permette o meno l'export in formato CSV */\r\n @Input() CSVExport = true;\r\n /** Permette di visualizzare o meno l'opzione di paginazione \"Tutti\" */\r\n @Input() AllSearch = null;\r\n /** Diminuisce gli spazi fra una cella e l'altra, e internamente il padding del font in modo da presentare molti più dati in un'unica pagina */\r\n @Input() HighCellDensity: boolean = null;\r\n /** Abilita o meno la possibilità di selezionare oggetti */\r\n @Input() Selection: boolean = null;\r\n /** Mostra o meno un messaggio di Loading al primo caricamento della tabella */\r\n @Input() ShowLoadingOnBootstrap: boolean = null;\r\n /** Se impostato a **true** aggiunge una colonna con pulsante di eliminazione per effettuare l'elimina dell'oggetto relativo */\r\n @Input() Removal: boolean = null;\r\n\r\n /**\r\n * Condizione che nasconde l'icona di eliminazione inserita impostando **Removal** a true qualora la condizione non venisse rispettata\r\n *\r\n * Come condizione si considera un semplice campo su cui effettuare un controllo booleano, come ad esempio \"canremove\"\r\n */\r\n @Input() RemovalCondition = '';\r\n /** Indica se abilitare la possibilità di esportare la vista dati attuale */\r\n @Input() Export: boolean = null;\r\n /** Indica se permettere la selezione multipla Windows-like cliccando un oggetto e facendo poi Shift + click su un oggetto successivo */\r\n @Input() ShiftClick: boolean = null;\r\n /** Indica il testo che va a sostituire \"Oggetti Visualizzati\" in caso si stia facendo qualcosa di custom */\r\n @Input() CountLabel: string = null;\r\n /** Indica se nascondere o mostrare il componente di paginazione */\r\n @Input() HidePaging: boolean = null;\r\n /** Indica se nascondere o mostrare il conteggio degli elementi trovati */\r\n @Input() HidePagingCount: boolean = null;\r\n /** Indica se nascondere o mostrare i pulsanti di paginazione */\r\n @Input() HidePagingButtons: boolean = null;\r\n /** Riferimento al ContextMenu (ngx-contextmenu) associato al click destro di uno o più elementi selezionati nella tabella */\r\n @Input() ContextMenu: ContextMenuComponent = null;\r\n /** Nome dell'esportazione generata da questa tabella */\r\n @Input() ExportFileName = 'Export.csv';\r\n /** Classe (HTML) di default della tabella */\r\n @Input() TableClass = null;\r\n\r\n /**\r\n * Funzione da utilizzare in esportazione. Nel formato \"Report\" avrà un unico parametro \"Formato\" e nessun valore di ritorno.\r\n *\r\n * Nel formato \"View\" ha come parametro una callback con i dati completi da esportare (dato che di default la ricerca è paginata)\r\n */\r\n @Input() ExportFunction: any;\r\n /** Indica la presenza di raggruppamenti a livello di header */\r\n @Input() HasHeaderGroup: boolean = null;\r\n /** Indica la presenza di raggruppamenti a livello del raggruppamento precedentemente esistente, chiaramente è insensata senza **HasHeaderGroup** */\r\n @Input() HasSecondaryHeaderGroup: boolean = null;\r\n /** Utilizzato per dividere la sorgente in modalità EndlessScroll */\r\n @Input() SliceSize = 100;\r\n /** Decide se utilizzare la modalità di EndlessScroll */\r\n @Input() EndlessScroll: boolean = null;\r\n /** Qualora **EndlessScroll** fosse true, indica se utilizzare questa modalità solo quando si cerca per \"Tutti\" o in generale */\r\n @Input() EndlessScrollOnlyForAll = true;\r\n /** Indica se nascondere gli Header della tabella */\r\n @Input() HeaderHidden: boolean = null;\r\n /** Indica se nascondere il Body della tabella */\r\n @Input() BodyHidden: boolean = null;\r\n\r\n /**\r\n * Indica se la selezione è temporaneamente disabilitata. Rispetto all'Input **Selection** che visivamente gestisce se ci sono o no gli input di selezione,\r\n * questo Input gestisce se questi input sono abilitati o meno\r\n */\r\n @Input() SelectionDisabled: boolean = null;\r\n\r\n /**\r\n * Indica se forzare il sistema di selezione a gestire un elemento per volta.\r\n * Selezionare un'altra riga con una già selezionata applicherà la selezione alla nuova riga, rimuovendola dall'attuale\r\n */\r\n @Input() SingleSelection: boolean = null;\r\n /** Callback che dato un oggetto resituisce l'eventuale classe da applicare alla riga collegata all'oggetto */\r\n @Input() RowClassAssigner: any = null;\r\n /** Permette di ordinare i dati in maniera discendente o ascendente */\r\n @Input() OrderByColumn: boolean = null;\r\n /** Permette di avere più direttive di ordinamento dei dati */\r\n @Input() MultipleOrderingDirectives = true;\r\n /** Permette di nascondere le colonne in base alle selezioni effettuate dal Menù contestuale in alto a destra */\r\n @Input() HiddenColumns: boolean = null;\r\n /** Permette di riordinare le colonne in base alle impostazioni effettuate dal Menù contestuale in alto a destra */\r\n @Input() ColumnsOrdering: boolean = null;\r\n /** Eventuale supporto alle ricerche applicate alla modalità Array */\r\n @Input() SearchView = null as AppSearch<any>;\r\n /** Abilita o disabilita il sistema che permette di selezionare tutti gli elementi nella vista */\r\n @Input() SelectAll: boolean = null;\r\n /** Simula la paginazione anche per le tabelle che funzionano in modalità Array */\r\n @Input() UseArrayModePaging = true;\r\n /** Definizione di colonne dinamche per la modalità, appunto, dinamica */\r\n @Input() DynamicRowColumnsDefinition: EsTableColumnsDefinition[] = null;\r\n /** Indica operazioni dinamiche generiche che possono essere effettuate per riga. Appaiono come colonne extra sul lato sinistro della tabella */\r\n @Input() DynamicOperations: EsTableOperationDefinition[] = [];\r\n /** Indica se visualizzare i dati in maniera gerarchica */\r\n @Input() Hierarchy: boolean = null;\r\n /** Nome della proprietà che contiene l'ID del padre. Da utilizzare se **Hierarchy** è impostato */\r\n @Input() ParentKey = '';\r\n /** Nome della proprietà che contiene l'ID dell'oggetto attuale. Da utilizzare se **Hierarchy** è impostato */\r\n @Input() OwnKey = '';\r\n /** Indica se partire con un albero espanso. Da utilizzare se **Hierarchy** è impostato */\r\n @Input() StartsExpanded = true;\r\n /** Indica se effettuare il salvataggio delle preferenze di ricerca */\r\n @Input() SavePreferences: boolean = null;\r\n\r\n /** Indica dove visualizzare le informazioni di paginazione, se sopra, sotto o in entrambi */\r\n @Input() PagingStyle: 'both' | 'top' | 'bottom' = null;\r\n /** Indica dove visualizzare le informazioni di paginazione, se sopra, sotto o in entrambi */\r\n @Input() RowGroupingPagingStyle: 'left' | 'right' = null;\r\n\r\n /**\r\n * Sorgente dati secondaria\r\n *\r\n * @deprecated Utilizzato solo per un caso particolare del Metering\r\n */\r\n @Input() SecondarySource: boolean = null;\r\n\r\n /**\r\n * Sorgente dati secondaria\r\n *\r\n * @deprecated Utilizzato solo per un caso particolare del Metering\r\n */\r\n @Input() TertiarySource: boolean = null;\r\n /** Indica se utilizzare la cache di selezione che permette di mantenere gli stati di selezione dei vari oggetti navigando da una pagina all'altra */\r\n @Input() UseSelectionCache = null;\r\n /** Permette di decidere se, in modalità raggruppamento, mostrare o meno il valore delle colonne di gruppo negli oggetti finali. Di default sono nascosti */\r\n @Input() ShowItemGroupsColumns = null;\r\n /** Evento che viene richiamato al cambio di oridnamento di una colonna */\r\n @Output() onOrderChanged: EventEmitter<AppOrdering> = new EventEmitter<AppOrdering>();\r\n\r\n /**\r\n * Evento che viene richiamato quando l'es-table ritiene sia necessario ri-effettuare la ricerca.\r\n * Il booleano dell'evento indica se viene suggerito di resettare la pagina o meno.\r\n * \r\n * Solo in caso venga utilizzata la modalità a raggruppamenti di righe può succedere che l'es-table passi un intero AppSearch come parametro di ricerca,\r\n * in quel caso l'applicazione ricevente dovrà onorare la richiesta spedendo al backand l'oggetto di ricerca AS-IS\r\n * \r\n * il tipo dell'Emitter invece di essere [boolean | AppSearch<any>] è stato impostato a \"any\" per evitare problemi di retrocompatibilità\r\n */\r\n @Output() onSearchRequest: EventEmitter<any> = new EventEmitter<any>();\r\n /** Evento che parte ad ogni modifica di \"checkaggio\" in forma di comodo array. Espone l'oggetto con lo stato di check attuale */\r\n @Output() onSelectionChanged: EventEmitter<ItemsSelection<any>> = new EventEmitter<ItemsSelection<any>>();\r\n /** Evento richiamato all'eliminazione di un oggetto */\r\n @Output() onRemoval: EventEmitter<any> = new EventEmitter<any>();\r\n /** Evento richiamato all'annullamento di un'eliminazione */\r\n @Output() onAbortRemoval: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n /** Evento richiamato al click su una cella quando **UseCustomCellActions** è attivo \r\n * \r\n * @deprecated Utilizzare l'Input **Template** delle es-td e assegnare un template con tutti i binding che si vuole ai click\r\n */\r\n @Output() onCellClick: EventEmitter<{ column: string, model: any }> = new EventEmitter<{ column: string, model: any }>();\r\n /** Evento richiamato quando si clicca su un opzione definita nelle **CornerMenuOptions** */\r\n @Output() onCornerAction: EventEmitter<{ id: string, estable: any }> = new EventEmitter<{ id: string, estable: any }>();\r\n /** Evento richiamato quando si clicca su un opzione definita nelle **DynamicOperations** */\r\n @Output() onDynamicOperation: EventEmitter<{ id: string, item: any }> = new EventEmitter<{ id: string, item: any }>();\r\n\r\n /** Dati esportati da ngx-csv */\r\n public data: any[];\r\n /** Header dei dati esportati da ngx-csv */\r\n public headers: any[];\r\n /** Elemento HTML da cliccare per l'esportazione */\r\n @ViewChild('exportDownloader', { static: false }) public exportDownloader: ElementRef;\r\n /** Placeholder di menù contestuale per quando non ci sono opzioni nel placeholder \"Vero\" */\r\n @ViewChild('emptyMenu', { static: true }) public tableEmptyMenu: ContextMenuComponent;\r\n\r\n /** Subscription sull'apertura del context menu da ripulire al destroy della classe */\r\n private ctxMenuSubscription: any;\r\n\r\n /** Pagina in visualizzazione (durante la paginazione in modalità Array) */\r\n public arraymodePage = 1;\r\n /** Numero di pagine (durante la paginazione in modalità Array) */\r\n public arraymodePages = 1;\r\n /** Oggetti per ogni pagina (durante la paginazione in modalità Array) */\r\n @Input() ArraymodeItemsPerPage = null;\r\n /** Oggetto di selezione per la modalità Array, che deve comportarsi come la controparte in modalità View */\r\n public arraymodeSelection: ItemsSelection<any>;\r\n /** Colonne da visualizzare in modalità array */\r\n public arrayColumns: string[] = [];\r\n /** Ordine delle colonne da visualizzare in modalità array */\r\n public arrayColumnOrdering: string[] = [];\r\n /** Ordinamenti ASC-DESC sulle colonne in modalità array */\r\n public arrayOrders: AppOrdering[] = [];\r\n\r\n /**\r\n * Variabile che serve a gestire il momento in cui l'es-table aggiorna la paginazione (pulsanti ecc).\r\n * Essendo operazioni comunque costose le effettuo solo su binding esterni, non su rewrite generati internamente\r\n */\r\n private internalWriteCall = false;\r\n\r\n /**\r\n * Cache che conterrà tutte le ricerche effettuate su gruppi diversi dal primo e su elementi contenuti nei gruppi.\r\n * In caso di cambi di ordinamento delle colonne diverse dalla prima tutte le chiamate fatte dal secondo livello in poi devono essere rieseguite secondo la seguente logica:\r\n * \r\n * \r\n * **Cambio ordinamento sul primo gruppo**: reload completo, non mi occupo di ripulire gli elementi bindati in alcun modo\r\n * \r\n * **Cambio ordinamento sulla colonna relativa all'N-esimo gruppo**: reload completo del contenuto dei gruppi precedenti, ripulendo precedentemente \r\n * tutti gli elementi con **_grouplevel** = N\r\n * \r\n * **Cambio ordinamento su una colonna non raggruppata**: reload completo per tutti i gruppi finali aperti, devo precedentemente ripulire tutti gli elementi con **_item** = true\r\n * \r\n * Altri eventi non dovrebbero rappresentare problemi:\r\n * - Selezione: non cambia nulla\r\n * - Paginazione: cambia a livello root quindi viene ricaricato tutto comunque, stesso vale per le paginazioni interne\r\n */\r\n public groupSearchRequestsCache: { path: string, route: GroupRouteFragment[], view: AppSearch<any>, group_column: string }[] = [];\r\n\r\n /** Variabile d'appoggio per capire se c'è bisogno di ri-effettuare una ricerca o meno */\r\n private ResearchNeeded: boolean = false;\r\n /** Colonne visibili della vista attuale. Valorizzato di default al numero massimo di colonne supportate dalla tabella per le casistiche in assenza di custom cells */\r\n public Columns: { Visibile: number, VisibleUnpinned: number, Global: number } = { Visibile: 100, VisibleUnpinned: 100, Global: 100 };\r\n /** In caso di Row Grouping qui viene salvata la vista principale dei gruppi base */\r\n public MainGroupView: AppSearch<any> = null;\r\n \r\n /** Conteggio base degli oggetti. In modalità normale viene resettato ad ogni nuova View inserita, in modalità RowGrouping viene resettato solo ad una nuova View di livello \"0\" */\r\n public BaseItemsCount = null;\r\n\r\n /** Indica se ci sono delle colonne pinnate e visibili. Serve per poter settare tutte le colonne prima che arrivino dati a pinned*/\r\n public HasPinnedColumns: boolean\r\n /** Larghezza calcolata del container delle colonne pinnate */\r\n public PinnedContainerWidth: number;\r\n /** Indica se nonostante siamo in modalità array sono stati individuati dei gruppi. In tal caso es-table si comporta da pseudo backend ed effettua le aggregazioni e raggruppamenti completamente lato client */\r\n public ArrayGrouping: boolean = false;\r\n /** Indica che l'es-table è basata sulle direttive (nuova modalità) */\r\n public DirectivesBased: boolean = false;\r\n\r\n /** Opzioni di paginazione */\r\n public PagerOptions: { PagerCount: number, ShowCount: boolean, ShowPaging: boolean, UsesView: boolean, ShowButtons: boolean, ShowPagingOptions: boolean, View: any, Ready: boolean, Searches: 'items' | 'groups' } =\r\n { PagerCount: null, ShowCount: true, ShowPaging: true, ShowButtons: true, ShowPagingOptions: true, UsesView: true, View: null, Ready: false, Searches: 'items' };\r\n\r\n /** @ignore */\r\n public ngOnInit() {\r\n //Per poter cambiare il layout in base al livello gerarchico il componente deva avere il pieno controllo di ogni cella,\r\n //che con solo la proiezione (senza celle cusotm) non è disponibile\r\n if (this.Hierarchy && !this.UseCustomCells)\r\n throw \"Es-table error: Per poter utilizzare l'es-table con [Hierarchy]=\\\"true\\\" è richiesto anche [UseCustomCells]=\\\"true\\\"\";\r\n\r\n // click destro su una riga con selezione attiva: Tiro fuori il context menu e selezione l'elemento corrente\r\n this.ctxMenuSubscription = (this.ContextMenu || this.tableEmptyMenu).open.subscribe(t => {\r\n // Gruppi va bene, oggetti pure, ma separatori fra gruppi proprio no...\r\n if (t.item._sep) return;\r\n\r\n let shouldEmit = !t.item._selected;\r\n\r\n t.item._selected = true;\r\n var itemSelection = this.selection_H.handleItemsSelection([t.item]);\r\n this.changed();\r\n\r\n if (shouldEmit)\r\n this.onSelectionChanged.emit(itemSelection);\r\n });\r\n }\r\n\r\n /** @ignore */\r\n public ngAfterViewInit() {\r\n // Se utilizzo la new spicy mode deduco tutti i parametri di lavoro possibili al caricamento della tabella\r\n // Vengono sovrascritte solo le proprietà non impostate dall'utente\r\n if (this.EsTdsDirective && this.EsTdsDirective.length > 0 && this.EsThsDirective && this.EsThsDirective.length > 0) {\r\n if (this.UseCustomCells == null) this.UseCustomCells = true;\r\n if (this.HiddenColumns == null && this.UseCustomCells) this.HiddenColumns = true;\r\n if (this.ColumnsOrdering == null && this.UseCustomCells) this.ColumnsOrdering = true;\r\n if (this.OrderByColumn == null && this.UseCustomCells) this.OrderByColumn = true;\r\n if (this.SelectAll == null && this.Selection) this.SelectAll = true;\r\n if (this.ShiftClick == null && this.Selection) this.ShiftClick = true;\r\n this.DirectivesBased = true;\r\n }\r\n }\r\n\r\n /** @ignore */\r\n public ngOnDestroy() {\r\n if (this.ctxMenuSubscription)\r\n this.ctxMenuSubscription.unsubscribe();\r\n }\r\n\r\n /** @ignore */\r\n public async ngOnChanges(changes: SimpleChanges) {\r\n let newSearchView = changes['SearchView'];\r\n if (newSearchView && this.SearchView)\r\n this.arrayPulsanti = this.utilities_H.getPagesArray(6, this.SearchView.page, this.SearchView.pages || 1, this.SearchView.items.length, this.SearchView.itemsperpageoverride);\r\n }\r\n\r\n /** @ignore */\r\n public registerOnChange(fn): void { this.propagateChange = fn; }\r\n /** @ignore */\r\n public registerOnTouched(fn): void { }\r\n /** @ignore */\r\n changed() { this.propagateChange(this.View); }\r\n /** @ignore */\r\n propagateChange = (_: any) => { };\r\n\r\n /** @ignore */\r\n public writeValue(obj): void {\r\n this.View = obj ? obj : null;\r\n\r\n // Mi è arrivata l'AppSearch quindi di sicuro non ho una ricerca in progress\r\n this.researchInProgress = false;\r\n\r\n if (!this.View && !this.SearchView) {\r\n // Su view nulla evito di fare pressoché qualsiasi cosa. Se arriva un null devo anche assicurarmi di non mostrare nulla\r\n this.boundSource = this.TMPBoundSource || [];\r\n\r\n // Per essere sicuro che dopo un bind di oggetti la es-table aggiorni la grafica\r\n this.cdr.markForCheck();\r\n return;\r\n }\r\n\r\n // Se per sbaglio l'oggetto che mi arriva non è tipizzato (instanceof AppSearch restituisce false anche se è del tipo giusto)\r\n // lo correggo--------------------------------------------------------------------------------------------------------------\r\n if (this.View && typeof (this.View as any).result != 'undefined' && !(this.View instanceof ReportDefinition)) \r\n (this.View as any).__proto__ = new ReportDefinition();\r\n else if (this.View && typeof (this.View as any).itemsperpageoverride != 'undefined' && !(this.View instanceof AppSearch)) \r\n (this.View as any).__proto__ = new AppSearch();\r\n else if (this.SearchView && typeof (this.SearchView as any).itemsperpageoverride != 'undefined' && !(this.SearchView instanceof AppSearch)) \r\n (this.SearchView as any).__proto__ = new AppSearch();\r\n // -------------------------------------------------------------------------------------------------------------------------\r\n\r\n if (this.View && this.View instanceof ReportDefinition) {\r\n // Se mi arriva una report definition vuol dire che potrei avere dei risultati da visualizzare\r\n this.setMode('report');\r\n\r\n this.ReportValues = this.View.result;\r\n if (this.ReportValues)\r\n this.reportMode_H.reviewReportBindings();\r\n }\r\n else if (this.View && this.View instanceof AppSearch) {\r\n // Se cambia l'oggetto intero significa che ho rimandato la ricerca\r\n this.setMode('view');\r\n\r\n let firstItemGroupOrNoGrouping = (this.View.requestedgroups?.length || 0) == 0;\r\n\r\n // Se vengo da una ricerca interna mantengo lo stato di selezione precedente (quindi su cambio pagina, cambio ipp, ecc...)\r\n // se invece l'utente ha fatto una ricerca lui (quindi cambiando filtri), secco le info di selezione\r\n if (!this.View.selection || (!this.View.internalsearchrequest && firstItemGroupOrNoGrouping) || !this.UseSelectionCache) {\r\n this.selection_H.clearSelectionCaches();\r\n this.View.selection = new ItemsSelection([]);\r\n this.onSelectionChanged.emit(this.View.selection);\r\n }\r\n\r\n this.View.internalsearchrequest = false;\r\n\r\n // Recupero Preference\r\n if (this.SavePreferences) {\r\n if (!this.ngControl.name)\r\n console.error(\"Non posso utilizzare le preference senza avere un 'name' per questa tabella\");\r\n else if (!this.prefService)\r\n console.error(\"Non posso utilizzare le preference senza che il pacchetto @esfaenza/preferences sia installato\");\r\n else {\r\n this.prefService.retrieve<{ columns: string[], column_ordering: string[] }>(<string>this.ngControl.name).subscribe(prefs => {\r\n if (prefs) {\r\n this.View.columns = prefs.columns;\r\n this.View.column_ordering = prefs.column_ordering;\r\n }\r\n });\r\n }\r\n }\r\n\r\n // La paginazione devo farla solamente quando richiedo o un gruppo principale (se sono in row grouping) o se non richiedo gruppi (in tutti lgi altri casi)\r\n if (firstItemGroupOrNoGrouping)\r\n this.arrayPulsanti = this.utilities_H.getPagesArray(6, this.View.page, this.View.pages || 1, this.View.items.length, this.View.itemsperpageoverride);\r\n }\r\n else if (this.View && (this.View.length != null && this.View.length != undefined)) {\r\n this.setMode('array');\r\n\r\n if (!this.UseSelectionCache || !this.arraymodeSelection) {\r\n this.selection_H.clearSelectionCaches();\r\n this.arraymodeSelection = new ItemsSelection([]);\r\n this.onSelectionChanged.emit(this.arraymodeSelection);\r\n }\r\n\r\n // Recupero Preference\r\n if (this.SavePreferences) {\r\n if (!this.ngControl.name)\r\n console.error(\"Non posso utilizzare le preference senza avere un 'name' per questa tabella\");\r\n else if (!this.prefService)\r\n console.error(\"Non posso utilizzare le preference senza che il pacchetto @esfaenza/preferences sia installato\");\r\n else {\r\n this.prefService.retrieve<{ columns: string[], column_ordering: string[] }>(<string>this.ngControl.name).subscribe(prefs => {\r\n if (prefs) {\r\n this.arrayColumns = prefs.columns;\r\n this.arrayColumnOrdering = prefs.column_ordering;\r\n }\r\n });\r\n }\r\n }\r\n\r\n if (this.SearchView)\r\n this.arrayPulsanti = this.utilities_H.getPagesArray(6, this.SearchView.page, this.SearchView.pages || 1, this.SearchView.items.length, this.SearchView.itemsperpageoverride);\r\n }\r\n\r\n if (this.View && !(this.View instanceof ReportDefinition))\r\n this.finalizeContext();\r\n\r\n this.postBoundSourceCalculation();\r\n }\r\n\r\n /** Funzione di trackby per il body che dovrebbe evitare il 90% delle change detection */\r\n public bodyTrackBy = (index: number, item: any) => item._hash;\r\n\r\n /**\r\n * Successivamente al bind del nuovo input questa funzione si occupa di finalizzare tutti i parametri di funzionamento dell'es-table \r\n * in base a Input - Modello, e qualsiasi altra cosa possa servire\r\n */\r\n private finalizeContext() {\r\n let viewCasted = this.View as AppSearch<any>;\r\n\r\n /*\r\n *Uso la tecnica di EndlessScroll se la variabile relativa è attiva e se\r\n * 1) Ho un Array, oppure\r\n * 2) Ho un AppSearch che sta cercando con paginazione \"Tutto\", oppure\r\n * 3) Ho un AppSearch che sta cercando con paginazione diversa da \"Tutto\" ma con la variabile EndlessScrollOnlyForAll a false\r\n */\r\n let isAppSearchWithIppMax = this.viewMode && viewCasted.itemsperpageoverride == this.defaultAllPageOverride;\r\n let isAppSearchNoMaxIpp = this.viewMode && viewCasted.itemsperpageoverride != this.defaultAllPageOverride;\r\n this.UseEndlessscroll = this.EndlessScroll && (this.arrayMode || isAppSearchWithIppMax || (isAppSearchNoMaxIpp && !this.EndlessScrollOnlyForAll));\r\n\r\n let hasRowGroups = (viewCasted.groupings && viewCasted.groupings.filter(t => !t.aggregation).length > 0) || (this.arrayMode && this.EsThsDirective.some(t => t.thGroup));\r\n\r\n // Se ho dei gruppi in modalità array devo sistemare un po' di variabili che diventano insensate\r\n if (this.arrayMode && hasRowGroups)\r\n this.UseArrayModePaging = false;\r\n\r\n // Riempimento della TMPBoundSource con gli oggetti che verranno poi mostrati ad interfaccia\r\n if (this.UseEndlessscroll && !hasRowGroups) {\r\n this.addedSlices = [];\r\n this.boundSubSources = this.items_H.getItemSlices();\r\n let firstSub = this.boundSubSources[0];\r\n\r\n this.TMPBoundSource = firstSub ? firstSub : [];\r\n if (firstSub)\r\n this.addedSlices.push(0);\r\n }\r\n else\r\n this.TMPBoundSource = this.items_H.getItemsByMode(false, !this.internalWriteCall);\r\n\r\n // Se ho una gerarchia, assegno i livelli gerarchici alla TMPBoundSource\r\n if (this.Hierarchy && !hasRowGroups)\r\n this.hierarchyMode_H.assignHierarchyLevels(this.TMPBoundSource);\r\n\r\n // L'hashing degli oggetti lo faccio a prescindere\r\n this.utilities_H.calculateHash(this.TMPBoundSource);\r\n\r\n // Assegno a una variabile mia l'eventuale override per la classe della riga\r\n // Se poi sono in modalità gerarchica inietto anche la classe per la configurazione del livello della riga\r\n if ((this.TMPBoundSource && this.RowClassAssigner) || this.Hierarchy) {\r\n for (let i = 0; i < this.TMPBoundSource.length; i++) {\r\n let item = this.TMPBoundSource[i];\r\n item._rowClass = this.RowClassAssigner ? this.RowClassAssigner(item) : \"\";\r\n item._rowClass += this.Hierarchy ? \" est-row-lvl-\" + item._level : \"\";\r\n }\r\n }\r\n }\r\n\r\n /** Genera le informzioni di paginazione per la vista globale dell'es-table */\r\n private setupPagingInformations() {\r\n\r\n // Default che valgono di base, poi eventualmente moddati dalle funzioni sotto\r\n this.PagerOptions.ShowCount = !this.HidePagingCount;\r\n this.PagerOptions.ShowButtons = !this.HidePagingButtons;\r\n this.PagerOptions.ShowPaging = !this.HidePaging\r\n this.PagerOptions.UsesView = true;\r\n\r\n if (this.arrayMode && this.UseArrayModePaging && !this.SearchView) {\r\n this.PagerOptions.PagerCount = (<any[]>this.View).length || 0;\r\n this.PagerOptions.ShowButtons = this.PagerOptions.ShowButtons && this.View.length > 10;\r\n this.PagerOptions.View = this.View;\r\n this.PagerOptions.UsesView = false;\r\n this.PagerOptions.ShowPagingOptions = this.PagerOptions.ShowButtons;\r\n }\r\n else if (this.arrayMode && (!this.UseArrayModePaging || this.SearchView)) {\r\n if (this.SearchView) {\r\n this.PagerOptions.View = this.SearchView\r\n this.PagerOptions.PagerCount = this.SearchView.objectcount || 0;\r\n }\r\n else\r\n this.PagerOptions.PagerCount = (<any[]>this.View).length || 0\r\n\r\n this.PagerOptions.ShowButtons = this.PagerOptions.ShowButtons && (this.View.length > 10 || (this.SearchView?.objectcount || 0) > 10);\r\n this.PagerOptions.ShowCount = this.PagerOptions.ShowCount || (this.View && this.View.length) || (this.SearchView && this.SearchView.objectcount && this.SearchView.objectcount != -1);\r\n this.PagerOptions.ShowPaging = this.PagerOptions.ShowButtons || this.PagerOptions.ShowCount;\r\n this.PagerOptions.ShowPagingOptions = this.PagerOptions.ShowButtons;\r\n }\r\n else if (this.viewMode) {\r\n let tmpView = this.MainGroupView || this.View;\r\n let count = tmpView?.groupcount || tmpView?.objectcount;\r\n this.PagerOptions.Searches = tmpView?.groupcount != null && tmpView?.groupcount != undefined ? 'groups' : 'items';\r\n this.PagerOptions.PagerCount = count || 0;\r\n this.PagerOptions.View = tmpView;\r\n this.PagerOptions.ShowCount = this.PagerOptions.ShowCount || (tmpView && count && count != -1);\r\n }\r\n else if (this.reportMode) {\r\n let rvc = this.ReportValues.count;\r\n this.PagerOptions.View = this.View;\r\n this.PagerOptions.PagerCount = rvc && rvc == -1 ? this.ReportValues.rows.length : rvc && rvc > 0 ? this.ReportValues.count : 0;\r\n this.PagerOptions.ShowCount = this.PagerOptions.ShowCount || (this.View && (<ReportDefinition>this.View).result.count != -1);\r\n this.PagerOptions.ShowButtons = this.PagerOptions.ShowButtons && (this.View.pagingavailable || this.PagerOptions.ShowCount);\r\n this.PagerOptions.ShowPagingOptions = this.PagerOptions.ShowButtons;\r\n }\r\n }\r\n\r\n /**\r\n * Metodo che gestisce l'endless scroll e in base a quanto la tabella è stata scrollata aggiunge degli elementi extra a **TMPBoundSource**\r\n *\r\n * @param {any} e Evento di scroll del browser\r\n */\r\n public onScroll(e: any) {\r\n let tableViewHeight = e.target.offsetHeight;\r\n let tableScrollHeight = e.target.scrollHeight;\r\n let scrollLocation = e.target.scrollTop;\r\n let buffer = 200;\r\n\r\n let limit = tableScrollHeight - tableViewHeight - buffer;\r\n if (scrollLocation > limit) {\r\n let indexToAdd = Math.floor(this.TMPBoundSource.length / 100);\r\n if (this.boundSubSources[indexToAdd] && this.addedSlices.indexOf(indexToAdd) == -1) {\r\n // Devo ricordarmi di fare l'hash del nuovo pezzo\r\n this.utilities_H.calculateHash(this.boundSubSources[indexToAdd]);\r\n this.TMPBoundSource = this.TMPBoundSource.concat(this.boundSubSources[indexToAdd]);\r\n this.addedSlices.push(indexToAdd);\r\n\r\n setTimeout(() => { this.postBoundSourceCalculation(); });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Metodo lanciato dopo che la sorgente dati è stata correttamente bindata, si occupa di ricalcolare tutto ciò che serve\r\n * all'es-table per renderizzare i valori da mostrare\r\n */\r\n private postBoundSourceCalculation() {\r\n // Resetto tutto tranne RowTDs e RowTHs per evitare flickering. RowTDs e RowTHs saranno modificate all'interno del prossimo ciclo di CD\r\n this.RowContexts = [];\r\n this.OrderDirectives = [];\r\n this.lastSelectedItemID = null;\r\n\r\n if (this.EsThsDirective && this.EsThsDirective.length > 0 && this.EsTdsDirective && this.EsTdsDirective.length > 0)\r\n this.internalPostBoundSource();\r\n else {\r\n this.cdr.detectChanges();\r\n setTimeout(() => { this.internalPostBoundSource(); });\r\n }\r\n }\r\n\r\n /** Per poter distinguere le chiamate a questo metodo: Dopo il setTimeout se uso gli EsTd/EsTh vecchi, senza il setTimeout se uso le nuove direttive */\r\n private internalPostBoundSource() {\r\n let View = this.View;\r\n let ths = this.EsThs && this.EsThs.length > 0 ? this.EsThs.toArray() : this.EsThsDirective && this.EsThsDirective.length > 0 ? this.EsThsDirective.toArray() : [];\r\n let tds = this.EsTds && this.EsTds.length > 0 ? this.EsTds.toArray() : this.EsTdsDirective && this.EsTdsDirective.length > 0 ? this.EsTdsDirective.toArray() : [];\r\n\r\n // Se non ho colonne dinamiche ma sono in modalità dinamica (lo capisco perché c'è una view piena di genericitem) metto il default delle colonne\r\n this.dynamicMode_H.eventuallyReviewDynamicColumns();\r\n this.bindDisplayToLoadedItemsOrGroups(View);\r\n\r\n // Questo dev'essere per forza lanciato dopo **bindDisplayToLoadedItemsOrGroups** dato che è lì che alcune cose vengono valorizzate\r\n this.setupPagingInformations();\r\n\r\n // Molte cose sono ovviamente disponibili solo in modalità View\r\n if ((this.viewMode || this.arrayMode) && this.UseCustomCells) {\r\n let view = this.viewMode ? View as AppSearch<any> : null;\r\n let itemsAndGroups = this.viewMode ? [...(view.items || []), ...(view.groups || [])] : View as any[];\r\n let si = this.viewMode ? view.selection : this.arraymodeSelection;\r\n // N.B: Rispettare l'ordine di queste 3 macrocategorie è VITALE\r\n\r\n // ************************************* Sistemazioni di TH, TD, e visibilità varie *************************************\r\n\r\n // Prepassaggio per tirare fuori tutte le info utili sugli headers in modo da non ricacolarseli sempre dopo\r\n let hI = this.columnMetadata_H.evaluateHeadersGroupingInfos(ths); \r\n\r\n if (this.arrayMode) { // In modalità array non ho un backend...\r\n this.items_H.arrayModeReviewOrderings() // ... quindi gli ordinamenti li devo fare lato client, e ...\r\n this.rowGrouping_H.arrayModeReviewGroupings(hI.leafs); // ... i raggruppamenti li devo fare lato client\r\n }\r\n\r\n this.columnMetadata_H.reviewColumnsList(hI.leafs); // Aggiorna la lista delle colonne da mostrare nella dialog per ordinamento ecc\r\n this.columnMetadata_H.alignColumnsIfLoadedView(view); // Se sto caricando una View da hotpotato (quindi con savedstate = true) riallineo la visibilità delle colonne e il loro ordine.\r\n this.columnMetadata_H.moveFixedColumnsAtTheBeginning(hI.leafs, tds); // Sposto tutte le cose fixed all'inizio in modo che la creazione di th e td sia più snella (Utilizza le ColumnsList, quindi dev'essere richiamata PIRMA di reviewColumnsList)\r\n this.columnMetadata_H.alignHeadersOrdering(hI.leafs, view); // Allineo gli ordinamenti agli header\r\n this.columnMetadata_H.refreshColumnsVisibility(hI.leafs, tds, view); // Lavoro sui TH ed eventualmente modifico la visibilità anche dei TD.\r\n this.columnMetadata_H.evaluatePinnedColumnsWidth(); // Se sono presenti colonne pinnate valuta la dimensione del contenitore\r\n this.columnMetadata_H.generateDefaultOrder(hI.leafs, view); // Genero le direttive di ordinamento, che siano default o derivanti dalla AppSearch\r\n this.columnMetadata_H.evaluateHeaderGroups(hI); // Valuto i raggruppamenti degli header se presenti\r\n\r\n // ************************************* Generazione binding per righe e colonne *************************************\r\n\r\n this.evaluateRowThs(hI.leafs); // Raccolgo i TH\r\n this.evaluateRowTds(hI.leafs, tds); // Raccolgo i TD in contesti separati, un contesto per ogni item o gruppo\r\n\r\n // ************************************* Ultimi aggiustmaenti dei binding *************************************\r\n\r\n this.columnMetadata_H.applyOrdering(view, true); // Applico l'ordinamento sulle colonne (non ASC DESC, ma \"prima questa o quella colonna\")\r\n this.MoveTemporaryVariablesToRealOnes(); // Collego TH e TD aggiustati fino ad ora alle variabili di Binding HTML\r\n this.selection_H.evaluateSelection(itemsAndGroups, si); // Riallineo le info di selezione degli elementi della View\r\n\r\n if (this.ResearchNeeded) {\r\n this.changed();\r\n this.emitSearchRequest(false);\r\n this.ResearchNeeded = false;\r\n }\r\n }\r\n else if ((this.viewMode || this.arrayMode) && !this.UseCustomCells) {\r\n // Riallineo le info di selezione degli elementi della View\r\n let items = this.viewMode ? (View as AppSearch<any>).items : View as any[];\r\n let si = this.viewMode ? (View as AppSearch<any>).selection : this.arraymodeSelection;\r\n this.selection_H.evaluateSelection(items, si);\r\n }\r\n\r\n // Per essere sicuro che dopo un bind di oggetti la es-table aggiorni la grafica\r\n this.cdr.markForCheck();\r\n this.FirstBind = false;\r\n }\r\n\r\n /**\r\n * Effettua il binding degli oggetti pervenuti da questa chiamata con gli oggetti effettivamente da graficare\r\n * \r\n * @param {any} view View da cui sono arrivati gli oggetti. Può essere o un array se sono in **arrayMode** o una AppSearch<T> se sono in **viewMode**\r\n */\r\n private bindDisplayToLoadedItemsOrGroups(view: any) {\r\n if (this.TMPBoundSource.length == 0) {\r\n this.BaseItemsCount = 0;\r\n this.boundSource = this.TMPBoundSource;\r\n return;\r\n }\r\n\r\n if (this.arrayMode || !this.UseCustomCells) {\r\n this.boundSource = this.TMPBoundSource;\r\n this.BaseItemsCount = view?.objectcount || view.length;\r\n return;\r\n }\r\n\r\n let groupingKeys = view.groupings?.filter(t => !t.aggregation)?.length || 0;\r\n if (groupingKeys == 0) {\r\n this.boundSource = this.TMPBoundSource;\r\n this.BaseItemsCount = view.objectcount;\r\n return;\r\n }\r\n\r\n this.rowGrouping_H.handleNewDataOnRowGrouping(view, groupingKeys);\r\n }\r\n\r\n /** Metodo richiamato solo quando **TMPRowTDs** e **TMPRowTHs** sono completamente generati ed aggiustati. Serve per collegarli alle variabili usate lato binding HTML */\r\n private MoveTemporaryVariablesToRealOnes() {\r\n this.RowTDs = this.TMPRowTDs;\r\n this.RowTHs = this.TMPRowTHs;\r\n this.RowThGroups = this.TMPRowThGroups ? this.TMPRowThGroups.reverse() : null;\r\n\r\n this.Columns.Visibile = this.RowTHs.filter(t => t.Visible).length;\r\n this.Columns.VisibleUnpinned = this.RowTHs.filter(t => t.Visible && !t.Pinned).length;\r\n this.Columns.Global = this.Columns.VisibleUnpinned + (this.HasPinnedColumns ? 1 : 0) + (this.Selection ? 1 : 0) + (this.Removal ? 1 : 0) + (this.Export || this.HiddenColumns || this.ColumnsOrdering || this.CornerMenuOptions ? 1 : 0)\r\n }\r\n\r\n /**\r\n * Permette di selezionare o deselezionare in maniera arbitraria degli oggetti\r\n * \r\n * @param {any[]} items Oggetti da selezionare o deselezionare\r\n * @param {boolean} select **true** per selezionarli, **false** per non toccarli\r\n */\r\n public setSelectionStatus(items: any[], select: boolean) {\r\n this.selection_H.handleItemsSelection(items, select);\r\n this.cdr.markForCheck();\r\n }\r\n\r\n /**\r\n * Metodo che gestisce il cambio di Ordinamento di una colonna\r\n *\r\n * @param {string} id ID della colonna il cui oridnamento è cambiato\r\n * @param {'DESC' | 'ASC'} order Nuovo ordine selezionato per la colonna\r\n */\r\n public thOrderChanged(id: string, order?: 'DESC' | 'ASC') {\r\n if (!this.viewMode && !this.arrayMode) {\r\n console.warn('Order changed on a table not in viewMode or Array mode. Operation not supported');\r\n return;\r\n }\r\n\r\n if (!this.OrderByColumn)\r\n return;\r\n\r\n this.columnMetadata_H.handleTHOrderChange(id, order);\r\n }\r\n\r\n /**\r\n * Metodo da chiamare ogni volta che si vuole dare evidenza all'esterno del bisogno di rieffettuare la ricerca\r\n * \r\n * @param {boolean} resetsPage Indica al listener che deve resettare il numero di pagina\r\n * @param {AppSearch<any>} viewOverride Override della view da emettere per questa ricerca\r\n */\r\n public emitSearchRequest(resetsPage: boolean, viewOverride?: AppSearch<any>) {\r\n if (this.viewMode && !viewOverride) {\r\n (this.View as AppSearch<any>).internalsearchrequest = true;\r\n this.changed();\r\n }\r\n\r\n if (viewOverride) {\r\n if (resetsPage)\r\n viewOverride.page = 1;\r\n viewOverride.internalsearchrequest = true\r\n }\r\n\r\n this.researchInProgress = true;\r\n this.onSearchRequest.emit(viewOverride ? viewOverride : resetsPage);\r\n }\r\n\r\n /**\r\n * Partendo dagli **EsTds** bindati genera, all'interno del dizionario **TMPRowTDs** tutti i contesti dei vari oggetti.\r\n *\r\n * Vengono esclusi i TD \"Interni\" in quanto vengono generati dagli originali quindi includerli vorrebbe dire rieffettuare le operazioni due volte\r\n *\r\n * Costo: 2 scan EsThs, 1 scan EsTds\r\n *\r\n * @param {EsTh[] | EsThDirective[]} ths Colonne della tabella\r\n * @param {EsTd[] | EsTdDirective[]} tds Celle della tabella\r\n */\r\n private evaluateRowTds(ths: EsTh[] | EsThDirective[], tds: EsTd[] | EsTdDirective[]) {\r\n if (tds.length == 0)\r\n return;\r\n\r\n let thsCache: { [index: string]: EsTh | EsThDirective } = {};\r\n let columnsCache: { [index: string]: EsTableColumn } = {};\r\n\r\n for (let coli = 0; coli < this.ColumnsList.length; coli++) {\r\n let col = this.ColumnsList[coli];\r\n columnsCache[col.id] = col;\r\n }\r\n\r\n for (let i = 0; i < ths.length; i++) {\r\n let th = ths[i];\r\n thsCache[this.utilities_H.isEsTh(th) ? th.ID : th.th] = th;\r\n }\r\n\r\n this.TMPRowTDs = {};\r\n // Variabile d'appoggio per permettermi di inserire tutte le colonne \"Fixed\" davanti\r\n let contextFixeds: { [context: string]: number } = {};\r\n for (let i = 0; i < tds.length; i++) {\r\n let td = tds[i];\r\n\r\n if (this.utilities_H.isEsTd(td)) {\r\n let th = thsCache[td.ID];\r\n if (!!th)\r\n th._referenced = true;\r\n else\r\n throw \"ID dell'oggeto EsTd non compatibile con gli ID dicharati negli EsTh: \" + td.ID;\r\n\r\n let isFixed = (this.utilities_H.isEsTh(th) && th.Fixed) || (!this.utilities_H.isEsTh(th) && (th.thFixed || th.thGroup));\r\n let itemToAdd = <any>{ GroupAggregation: false, GroupHeader: false, Wraps: true, ID: td.ID, Visible: td.Visible, Class: td.Class, Content: td.Content, RouterLink: td.RouterLink, Template: td.Template };\r\n let ctx = td.Context;\r\n if (this.TMPRowTDs[ctx]) {\r\n if (isFixed)\r\n this.TMPRowTDs[ctx].splice(0 + (contextFixeds[ctx]++), 0, itemToAdd);\r\n else\r\n this.TMPRowTDs[ctx].push(itemToAdd);\r\n }\r\n else {\r\n this.RowContexts.push(ctx);\r\n this.TMPRowTDs[ctx] = [itemToAdd];\r\n contextFixeds[ctx] = isFixed ? 1 : 0\r\n }\r\n }\r\n else {\r\n for (let i = 0; i < this.boundSource.length; i++) {\r\n let item = this.boundSource[i];\r\n let ctx = item._hash;\r\n let key = td.td;\r\n let th = thsCache[td.td];\r\n if (!!th)\r\n th._referenced = true;\r\n else\r\n throw \"ID dell'oggeto EsTd non compatibile con gli ID dicharati negli EsTh: \" + td.td;\r\n\r\n if (td.tdIf || (!this.utilities_H.isEsTh(th) && th.thGroup)) {\r\n let thCasted = <EsThDirective>th;\r\n let isFixed = (this.utilities_H.isEsTh(th) && th.Fixed) || (!this.utilities_H.isEsTh(th) && (th.thFixed || th.thGroup || th.thPinned));\r\n let itemToAdd = item._item ?\r\n <any>{ LeftBorder: (<any>thCasted)._lbord, RightBorder: (<any>thCasted)._rbord, ID: key, Pinned: columnsCache[td.td].pinned, PinnedWidth: thCasted.thPinnedWidth, GroupHeader: false, GroupAggregation: false, Visible: columnsCache[td.td].visible, Wraps: false, Class: td.tdClass, Template: thCasted.thGroup && !this.ShowItemGroupsColumns ? null : td.Template } :\r\n <any>{ LeftBorder: (<any>thCasted)._lbord, RightBorder: (<any>thCasted)._rbord, ID: key, Pinned: columnsCache[td.td].pinned, PinnedWidth: thCasted.thPinnedWidth, GroupHeader: thCasted.thGroup, GroupAggregation: !!thCasted.thAggregation, Visible: columnsCache[td.td].visible, Wraps: false, Class: thCasted.thGroupClass || '', Content: this.rowGrouping_H.getGroupCellDisplay(<Group>item, key, <EsThDirective>th) };\r\n\r\n if (this.TMPRowTDs[ctx]) {\r\n this.TMPRowTDs[ctx].push(itemToAdd);\r\n }\r\n else {\r\n this.RowContexts.push(ctx);\r\n this.TMPRowTDs[ctx] = [itemToAdd];\r\n contextFixeds[ctx] = isFixed ? 1 : 0;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Se non ho oggetti è inutile che controllo gli errori, dato che gli es-td non esisteranno di certo e di conseguenza gli es-th non saranno referenziati\r\n if (this.TMPBoundSource.length == 0)\r\n return;\r\n\r\n var errs: string[] = [];\r\n for (let i = 0; i < ths.length; i++) {\r\n let th = ths[i];\r\n if (!th._referenced)\r\n errs.push(this.utilities_H.isEsTh(th) ? th.ID : th.th);\r\n }\r\n\r\n if (errs.length > 0) {\r\n var errIds = errs.join(', ');\r\n throw \"L'ID di uno o più EsTh non hanno alcun EsTd associato: \" + errIds;\r\n }\r\n }\r\n\r\n /**\r\n * Partendo dagli **EsThs** bindati genera, all'interno del dizionario **TMPRowTHs** tutti i contesti dei vari oggetti.\r\n *\r\n * Vengono esclusi i TH \"Interni\" in quanto vengono generati dagli originali quindi includerli vorrebbe dire rieffettuare le operazioni due volte\r\n *\r\n * Costo: 1 scan EsThs\r\n *\r\n * @param {EsTh[] | EsThDirective[]} ths Colonne della tabella\r\n */\r\n private evaluateRowThs(ths: EsTh[] | EsThDirective[]) {\r\n if (ths.length == 0)\r\n return;\r\n\r\n let columnsListCache: { [index: string]: EsTableColumn } = {};\r\n let castedView = <AppSearch<any>>this.View;\r\n let groupingsUndefined = this.viewMode && (castedView && !castedView.groupings || castedView.groupings.length == 0);\r\n\r\n for (let i = 0; i < this.ColumnsList.length; i++) {\r\n let itm = this.ColumnsList[i];\r\n columnsListCache[itm.id] = itm\r\n }\r\n\r\n this.TMPRowTHs = [];\r\n let fixed = 0;\r\n for (let i = 0; i < ths.length; i++) {\r\n let th = ths[i];\r\n let toAdd;\r\n\r\n if (this.utilities_H.isEsTh(th)) {\r\n toAdd = { Pinned: false, ID: th.ID, Visible: th.Visible, Class: th.Class, Order: th.Order, Orderable: th.Orderable, Template: null, Content: th.Description, Wrap: th.Wrap };\r\n if (th.Fixed)\r\n this.TMPRowTHs.splice(0 + (fixed++), 0, toAdd);\r\n else\r\n this.TMPRowTHs.push(toAdd);\r\n }\r\n else if (th.thIf || th.thGroup) {\r\n\r\n let thClass = (th.thClass || '') + (th.thGroup ? \" est-col-min\" : \"\");\r\n toAdd = { Pinned: columnsListCache[th.th].pinned, PinnedWidth: th.thPinnedWidth, ID: th.th, Visible: th.thVisible, Class: thClass, Order: th.thOrder, Orderable: th.thOrderable, Template: th.Template, Content: null, Wrap: th.thWrap, LeftBorder: (<any>th)._lbord, RightBorder: (<any>th)._rbord };\r\n this.TMPRowTHs.push(toAdd);\r\n\r\n // Se ho un modello che deve funzionare a rowgrouping ma non è ancora stata effettuata nessuna ricerca sui gruppi principali (groupingsUndefined)\r\n // li genero e mando la prima ricerca che dev'essere spedita al backend per il primo caricamento dei gruppi\r\n if (groupingsUndefined && (th.thAggregation || th.thGroup)) {\r\n let groupAggregations: GroupOrAggregation[] = this.rowGrouping_H.getGroupAggregations(th);\r\n if (!castedView.groupings)\r\n castedView.groupings = groupAggregations;\r\n else\r\n castedView.groupings.push(...groupAggregations);\r\n\r\n this.ResearchNeeded = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sposta la ricerca di una pagina in avanti (o indietro)\r\n *\r\n * @param {number} page Numero di pagine da aggiungere (o sottrarre, se negativo) alla pagina attuale\r\n * @param {any} pager Elemento di separazione su cui è effettuata la ricerca\r\n */\r\n public addToPageGroup(page: number, pager: GroupPager) {\r\n this.goToPageGroup(pager.view.page + page, pager);\r\n }\r\n\r\n /**\r\n * Sposta la ricerca alla pagina specificata\r\n *\r\n * @param {number} page Pagina a cui navigare\r\n * @param {any} pager Elemento di separazione su cui è effettuata la ricerca\r\n */\r\n public goToPageGroup(page: number, pager: GroupPager) {\r\n\r\n let appSearchElement = pager.view;\r\n if (page === 0 || (page > appSearchElement.pages && appSearchElement.pages > 0))\r\n return;\r\n\r\n appSearchElement.page = page;\r\n pager.buttons = this.utilities_H.getPagesArray(6, appSearchElement.page, appSearchElement.pages);\r\n\r\n this.emitSearchRequest(false, appSearchElement);\r\n }\r\n\r\n\r\n /**\r\n * Gestisce i click sulla tabella solo per le righe a gruppo. \r\n * O rimuove gli elementi attualmente presenti o carica il contenuto del gruppo\r\n *\r\n * @param {any} group Gruppo bindato su cui si è effettuato il click\r\n *\r\n * @returns {boolean} **true** se l'operaizone è andata a buon fine, **false** altrimenti\r\n */\r\n public handleGroupClick(group: Group): boolean {\r\n let casted = this.View as AppSearch<any>;\r\n let anyG = (<any>group);\r\n anyG._expanded = !anyG._expanded;\r\n\r\n // Sono in modalità raggruppamento virtuale da array: Espandere significa rendere visibili tutti gli oggetti relativi a questo gruppo, viceversa il contrarre\r\n if (this.ArrayGrouping) {\r\n let allRelatives = this.boundSource.filter(t =>\r\n (t._group && ((anyG._expanded && t._parent == anyG._thisKey) || (!anyG._expanded && t._parent && t._parent.startsWith(anyG._thisKey)))) ||\r\n (t._item && ((anyG._expanded && t._thisKey == anyG._thisKey) || (!anyG._expanded && t._thisKey.startsWith(anyG._thisKey)))))\r\n allRelatives.forEach(t => { t._visible = anyG._expanded; if (t._group) t._expanded = false });\r\n return;\r\n }\r\n\r\n if (anyG._expanded) {\r\n // Resetto ipp\r\n casted.itemsperpageoverride = 15;\r\n if (!casted.requestedgroups)\r\n casted.requestedgroups = [new GroupFilter(group.column, group.value)];\r\n else {\r\n let level = anyG._grouplevel;\r\n // se il gruppo cliccato non ha un livello è il primo gruppo, quindi ordinamento unico\r\n // altrimenti devo rimuovere tutti i filtri su livelli superiori al level cliccato e aggiungere il level cliccato\r\n if (!level)\r\n casted.requestedgroups = [new GroupFilter(group.column, group.value)];\r\n else {\r\n casted.requestedgroups = [];\r\n anyG._parentRoute.forEach((step: GroupRouteFragment) => {\r\n casted.requestedgroups.push(new GroupFilter(step.column, step.value));\r\n });\r\n casted.requestedgroups.push(new GroupFilter(group.column, group.value));\r\n }\r\n }\r\n\r\n this.changed();\r\n this.emitSearchRequest(true);\r\n }\r\n else {\r\n let path = (anyG._parent || '') + group.value;\r\n\r\n // Se ho chiuso un gruppo non mi serve rieffettuare ricerce, mi basta eliminare dagli oggetti bindati tutti gli elementi sottostanti a quel gruppo\r\n this.boundSource = this.boundSource.filter(t => !t._parent || !t._parent.startsWith(path));\r\n\r\n // devo però anche rimuovere eventuali cache relative\r\n this.groupSearchRequestsCache = this.groupSearchRequestsCache.filter(t => t.path != path);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n\r\n /**\r\n * Gestisce la selezione globale degli oggetti, sia per pagina che a livello di **SelectAll**\r\n *\r\n * @param {boolean} forcedVal Valore forzato di check da assegnare agli oggetti\r\n */\r\n public globalCheckChanged(forcedVal: boolean = null) {\r\n\r\n // Prendo tutti gli elementi presenti in questa vista. Se ho gruppi prendo solo i gruppi a livello 0, altrimenti prendo tutti gli oggetti per selezionarli\r\n let items = this.boundSource.find(t => t._group) ? this.boundSource.filter(t => t._group && !t._parent) : this.boundSource;\r\n var itemSelection = this.selection_H.handleItemsSelection(items, forcedVal, this.globalCheck);\r\n this.changed();\r\n\r\n this.onSelectionChanged.emit(itemSelection);\r\n }\r\n\r\n /**\r\n * Gestisce i click sulla tabella, gestendo eventualmente anche gli Shift + Click per selezionare un range di oggetti\r\n *\r\n * @param {any} event Evento nativo HTML del click\r\n * @param {any} item Oggetto bindato su cui si è effettuato il click\r\n *\r\n * @returns {boolean} **true** se l'operaizone è andata a buon fine, **false** altrimenti\r\n */\r\n public handleClick(event: any, item: any): boolean {\r\n // Seleziono del testo ma non ho shift premuto -> ignoro la selezione\r\n if ((event.view.getSelection().type == 'Range' || event.view.getSelection().toString().length > 0) && !event.shiftKey)\r\n return false;\r\n\r\n // Seleziono del testo e ho shift premuto -> annullo la selezione del testo\r\n if ((event.view.getSelection().type == 'Range' || event.view.getSelection().toString().length > 0) && event.shiftKey)\r\n this.utiExts.clearTextSelection();\r\n\r\n let selecteditems: any[] = [];\r\n if (event.shiftKey && this.ShiftClick && !this.SingleSelection) {\r\n let startSelecting = false;\r\n\r\n let items = this.boundSource.filter(t => !t._group && !t._sep);\r\n for (let i = 0; i < items.length; i++) {\r\n let t = items[i];\r\n if (startSelecting) {\r\n t._selected = true;\r\n selecteditems.push(t);\r\n }\r\n if ((t == item || t == this.lastSelected) && !startSelecting) {\r\n startSelecting = true;\r\n t._selected = true;\r\n selecteditems.push(t);\r\n } else if ((t == item || t == this.lastSelected) && startSelecting)\r\n startSelecting = false;\r\n }\r\n } else {\r\n item._selected = !item._selected;\r\n this.lastSelected = item;\r\n selecteditems.push(item);\r\n }\r\n\r\n var itemSelection = this.selection_H.handleItemsSelection(selecteditems);\r\n this.changed();\r\n\r\n this.onSelectionChanged.emit(itemSelection);\r\n return true;\r\n }\r\n\r\n\r\n /**\r\n * Sposta la ricerca di una pagina in avanti (o indeitro)\r\n *\r\n * @param {number} page Numero di pagine da aggiungere (o sottrarre, se negativo) alla pagina attuale\r\n */\r\n public addToPage(page: number) {\r\n let view = this.MainGroupView ? this.MainGroupView : this.View;\r\n\r\n this.goToPage(((this.SearchView || view)?.page || 0) + page);\r\n }\r\n\r\n /**\r\n * Sposta la ricerca alla pagina specificata\r\n *\r\n * @param {number} page Pagina a cui navigare\r\n */\r\n public goToPage(page: number) {\r\n let view = this.MainGroupView ? this.MainGroupView : (this.arrayMode ? this.SearchView : this.View);\r\n if (!view.page || !view.pages)\r\n return;\r\n\r\n let appSearchElement = this.SearchView || view;\r\n if (page === 0 || (page > appSearchElement.pages && appSearchElement.pages > 0))\r\n return;\r\n\r\n appSearchElement.page = page;\r\n let count = this.reportMode ? ((<ReportDefinition>view).result?.count || 0) : (view.items.length || view.groups?.length || 0);\r\n let ipp = this.reportMode ? ((<ReportDefinition>view).itemsperpageoverride || 15) : view.itemsperpageoverride || 15;\r\n this.arrayPulsanti = this.utilities_H.getPagesArray(6, appSearchElement.page, appSearchElement.pages, count, ipp);\r\n\r\n let hasGroupings = !!this.MainGroupView;\r\n this.emitSearchRequest(false, hasGroupings ? view : this.SearchView ? this.SearchView : null);\r\n }\r\n\r\n /**\r\n * Evento richiamato sul cambio della paginazione. Verrà richiamato l'evento **emitSearchRequest**\r\n * per comunicare al componente che utilizza questa tabella che i dati sono da aggiornare\r\n */\r\n public onItemsPerPageChanged(newIpp) {\r\n this.PagerOptions.View.itemsperpageoverride = newIpp;\r\n this.changed();\r\n if (this.MainGroupView)\r\n this.emitSearchRequest(true, this.MainGroupView);\r\n else if (this.SearchView) {\r\n // Questo secondo me si può portare a livello un po' più alto\r\n this.SearchView.page = 1;\r\n this.emitSearchRequest(true, this.SearchView);\r\n }\r\n else\r\n this.emitSearchRequest(true);\r\n }\r\n\r\n /** Evento richiamato sul cambio della paginazione. Verrà richiamato l'evento **emitSearchRequest** con la vista del separatore */\r\n public onGroupItemsPerPageChanged(pager: GroupPager, newIpp: number) {\r\n pager.view.itemsperpageoverride = newIpp;\r\n this.emitSearchRequest(true, pager.view);\r\n }\r\n\r\n\r\n /** Metodo che gestisce la modifica del tempo specificato per l'aggiornamento automatico */\r\n public autoUpdateChanged() {\r\n if (!/^[1-9]\\d*$/.test(this.seconds))\r\n this.seconds = '10';\r\n\r\n let secondsInMs = parseInt(this.seconds, null) * 1000;\r\n\r\n if (this.autoUpdate)\r\n this.updateTimer = setInterval(() => { this.emitSearchRequest(false); }, secondsInMs);\r\n else\r\n clearInterval(this.updateTimer);\r\n }\r\n\r\n /**\r\n * Metodo chiamato dal click su una delle colonne generate dall'Input **DynamicOperations**\r\n *\r\n * @param {any} item L'oggetto su cui va effettuata l'operazione\r\n * @param {string} opid Codice identificativo dell'operazione da effettuarsi\r\n */\r\n public dynamicOperation(item: any, opid: string) {\r\n this.onDynamicOperation.emit({ id: opid, item: item });\r\n }\r\n\r\n /**\r\n * Ottiene il contenuto dell'EsTd da utilizzare per la colonna specificata\r\n * \r\n * @param {string} column Colonna per cui cercare la cella\r\n * \r\n * @returns {TemplateRef<any>} Template da usare per la colonna\r\n */\r\n public findEsTd(column: string): TemplateRef<any> {\r\n var EsTd = this.EsTdsDirective.find((item) => item.td === column);\r\n return EsTd ? EsTd.Template : null;\r\n }\r\n\r\n\r\n /**\r\n * Equivalente del metodo **addToPage** riadattato per la modalità array\r\n *\r\n * @param {number} page Numero di pagine da aggiungere (o sottrarre, se negativo) alla pagina attuale\r\n */\r\n public arrayAddToPage(page: number) {\r\n this.arrayGoToPage(this.arraymodePage + page)\r\n }\r\n\r\n /**\r\n * Equivalente del metodo **goToPage** riadattato per la modalità array\r\n *\r\n * @param {number} page Pagina a cui navigare\r\n */\r\n public arrayGoToPage(page: number) {\r\n if (page === 0 || page > this.arraymodePages)\r\n return;\r\n this.arraymodePage = page;\r\n\r\n // Riforzo il writevalue in modo che il codice passi dalla gestione come se fosse fatta ripartire una ricerca\r\n this.internalWriteValue();\r\n }\r\n\r\n /**\r\n * Gestore dei click sulle celle per le quali era impostata una azione custom da **CustomCellActionsOn**\r\n *\r\n * @param {string} name Nome della cella su cui si è fatto click\r\n * @param {any} model Modello relativo alla cella cliccata\r\n *\r\n * @returns {boolean} **true** se il click è stato fatto su una cella cliccabile, **false** altrimenti\r\n */\r\n public cellClicked(name: string, model: any): boolean {\r\n if (this.UseCustomCellActions && this.CustomCellActionsOn.split('$').indexOf(name) != -1) {\r\n this.onCellClick.emit({ column: name, model: model });\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Gestione dei click sulle opzioni del menù contestuale in alto a destra generato dall'Input **CornerMenuOptions**\r\n *\r\n * @param {string} cornerid Codice dell'operazione selezionata\r\n */\r\n public cornerActionClicked(cornerid: string) {\r\n this.onCornerAction.emit({ id: cornerid, estable: this });\r\n }\r\n\r\n /** \r\n * Impostazione modalità dell'EsTable \r\n * \r\n * @param {'array' | 'view' | 'report'} mode Modalità da impostare\r\n **/\r\n private setMode(mode: 'array' | 'view' | 'report') {\r\n this.viewMode = mode == 'view';\r\n this.arrayMode = mode == 'array';\r\n this.reportMode = mode == 'report';\r\n\r\n if (this.reportMode) {\r\n // In modalità report ho di sicuro queste due\r\n this.XLSXExport = true;\r\n this.CSVExport = false;\r\n }\r\n }\r\n\r\n /**\r\n * Helper per effettuare chiamate interne di allineamento alla funzione **writeValue**, \r\n * impostando prima **internalWriteCall** in modo da non effettuare operazioni inutili\r\n */\r\n public internalWriteValue() {\r\n this.internalWriteCall = true;\r\n this.writeValue(this.View);\r\n this.internalWriteCall = false;\r\n }\r\n\r\n /**\r\n * Metodo eventualmente richiamabile anche dal componente esterno che permette di forzare un refresh della tabella\r\n */\r\n public forceRefresh() {\r\n\r\n // Se sono in modalità View viene mantenuto in automatico il numero di pagina, ma per la modalità array devo prendere le info di paginazione prima e riapplicarle dopo\r\n let arrayPage: number;\r\n let arrayIpp: number;\r\n if (this.arrayMode) {\r\n arrayPage = this.arraymodePage;\r\n arrayIpp = this.ArraymodeItemsPerPage;\r\n }\r\n\r\n this.writeValue(this.View);\r\n this.cdr.detectChanges();\r\n\r\n if (this.arrayMode) {\r\n this.ArraymodeItemsPerPage = arrayIpp;\r\n this.arrayGoToPage(arrayPage);\r\n }\r\n }\r\n}","import { EsTableDefaultable } from \"./EsTableDefaultable\";\r\n\r\n/** Modello di configurazione per L'EsTable */\r\nexport class EsTableModuleConfig {\r\n\r\n /** Locale da utilizzare per i messaggi, supportati \"it-IT\" ed \"en-US\" */\r\n public locale?: string;\r\n /** Indica se scrivere messaggi di log a console */\r\n public debugMode?: boolean;\r\n /** Eventuali proprietà di default per l'EsTable */\r\n public EsTableDefaults?: EsTableDefaultable;\r\n}","import { Injectable, Inject, Optional } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { EST_LOCALE } from '../../tokens';\r\n\r\n/** Classe di localizzazione per il componente **TablePagerComponent** */\r\n@Injectable()\r\nexport class TablePagerLoc extends LocalizationService {\r\n\r\n /** @ignore */\r\n constructor(@Optional() @Inject(EST_LOCALE) LOC_LOCALE: string) {\r\n super(LOC_LOCALE ?? 'it-IT');\r\n super.set(\"en->it\", \"All\", [\"Tutto\"]);\r\n super.set(\"en->it\", \"Shown Elements\", [\"Elementi visualizzati\"]);\r\n super.set(\"en->it\", \"Shown Groups\", [\"Gruppi visualizzati\"]);\r\n super.set(\"en->it\", \"Are you sure you want to retrieve all results?\", [\"Si è sicuri di voler caricare tutti i risultati?\"]);\r\n super.set(\"en->it\", \"This might slow down the page and possibly crash the entire application\", [\"L'operazione potrebbe rallentare la pagina fino al crash dell'applicazione\"]);\r\n }\r\n}","// Angular\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Inject, Input, Optional, Output, SimpleChanges, ViewEncapsulation } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { MessageService } from \"@esfaenza/extensions\";\r\n\r\n// Applicazione\r\nimport { TablePagerLoc } from \"./table_pager.component.loc\";\r\nimport { EST_LOCALE } from \"../../tokens\";\r\n\r\n/** Componente che si occupa della paginazione di una tabella */\r\n@Component({\r\n selector: \"app-paging\",\r\n viewProviders: [{ provide: LocalizationService, useClass: TablePagerLoc }],\r\n styleUrls: ['./table_pager.component.scss'],\r\n templateUrl: \"./table_pager.component.html\",\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TablePagerComponent {\r\n\r\n /** Dimensione di pagina attuale */\r\n @Input() CurrentPageSize: any;\r\n\r\n /** View gestita, che può essere un IAppSearch o una ReportView */\r\n @Input() View: any;\r\n\r\n /** Indica se deve mostrare un warning quando si cercano di solezionare come elementi da visualizzare \"Tutti\" */\r\n @Input() WarnOnAll: boolean = true;\r\n\r\n /** Indica se dare la possibilità o meno di selezionare \"Tutti\" nelle opzioni di paginazione */\r\n @Input() AllSearch: boolean = true;\r\n \r\n /** Placeholder che identifica il \"Tutti\" */\r\n @Input() DefaultAll = 999999;\r\n \r\n /** Indica se attivare la modalità gruppo con stili più snelli per apparire sotto ai raggruppamenti */\r\n @Input() GroupMode = false;\r\n\r\n /** Indica se utilizzare il conteggio dei gruppi o degli oggetti */\r\n @Input() GroupCount = false;\r\n\r\n /** Indica il testo che va a sostituire \"Oggetti Visualizzati\" in caso si stia facendo qualcosa di custom, Ignorato in caso di gruppi */\r\n @Input() CountLabel: string = null;\r\n\r\n /** Indica se visualizzare il numero totale di oggeti presenti */\r\n @Input() ShowCount: boolean = true;\r\n\r\n /** Indica se visualizzare il numero totale di oggeti presenti */\r\n @Input() ShowPaging: boolean = true;\r\n\r\n /** Indica il numero totale di oggeti presenti */\r\n @Input() PagerCount: number;\r\n\r\n /** Indica se mostrare o meno il contenuto @deprecated usata solo da MatrixValuesComponent nella lib relativa */\r\n @Input() Hidden: boolean;\r\n\r\n /** Output invocato quando il numero di elementi per pagina viene modificato da un click utente */\r\n @Output() pagingSelected = new EventEmitter<number>();\r\n\r\n /** @ignore */\r\n constructor(private msgExts: MessageService, public lc: LocalizationService, public cdr: ChangeDetectorRef, @Optional() @Inject(EST_LOCALE) public locale: string) { }\r\n\r\n /** Modello su cui la select effettua operazioni di selezione */\r\n public Model: number;\r\n\r\n /** Opzioni di paginazione */\r\n public PagingOptions: number[] = [10, 15, 30, 45, 100 ];\r\n\r\n /** @ignore */\r\n ngOnInit() {\r\n this.Model = this.View ? (this.View.itemsperpageoverride || 15) : this.CurrentPageSize;\r\n if (this.AllSearch)\r\n this.PagingOptions.push(this.DefaultAll);\r\n }\r\n\r\n /** @ignore */\r\n ngOnChanges(changes: SimpleChanges) {\r\n let newView = changes['View'];\r\n let newCPS = changes['CurrentPageSize'];\r\n\r\n if ((newView && !newView.firstChange) || (newCPS && !newCPS.firstChange))\r\n this.Model = newView?.currentValue ? (newView.currentValue.itemsperpageoverride || 15) : newCPS?.currentValue ? newCPS.currentValue : null;\r\n }\r\n\r\n /**\r\n * Funzione richiamata dal template quando un utente clicca su un numero di paginazione.\r\n * \r\n * Cliccare 2 volte sullo stesso numero causa comunque un refresh dei dati\r\n * \r\n * @param {number} pageSize Dimensione selezionata lato UI\r\n */\r\n public choice(pageSize: number) {\r\n if (pageSize == this.DefaultAll && this.WarnOnAll) {\r\n this.msgExts.simpleWarningWithChoice(\r\n this.lc.loc(\"Are you sure you want to retrieve all results?\"),\r\n this.lc.loc(\"This might slow down the page and possibly crash the entire application\"),\r\n () => { this.pagingSelected.emit(pageSize); this.Model = pageSize; },\r\n () => {\r\n // Dio solo sa perché mi tocca fare sta roba... qui dentro per qualche motivo la CD non prende\r\n let prevModel = this.Model;\r\n this.Model = null;\r\n this.cdr.detectChanges();\r\n this.Model = prevModel;\r\n this.cdr.detectChanges();\r\n });\r\n }\r\n else {\r\n this.pagingSelected.emit(pageSize);\r\n this.Model = pageSize;\r\n }\r\n }\r\n}","import { CommonModule } from '@angular/common';\r\nimport { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { RouterModule } from '@angular/router';\r\n\r\nimport { MatSelectModule } from \"@angular/material/select\";\r\nimport { MatInputModule } from \"@angular/material/input\";\r\n\r\nimport { UtilityService, ExportService, HashingService, MessageService } from '@esfaenza/extensions';\r\nimport { LocalizationModule } from '@esfaenza/localizations';\r\n\r\nimport { EST_LOCALE, EST_DEBUG } from './tokens';\r\nimport { EsTableModuleConfig } from './domain/configuration/EsTableModuleConfig';\r\n\r\nimport { TablePagerComponent } from './components/pager/table_pager.component';\r\nimport { EsTableComponent } from './components/es-table/es_table.component';\r\nimport { EsTh } from './components/es-th/es_th.component';\r\nimport { EsTd } from './components/es-td/es_td.component';\r\nimport { EsTdDirective } from './directives/es_td.directive';\r\nimport { EsThDirective } from './directives/es_th.directive';\r\n\r\nimport { ModalModule } from \"ngx-bootstrap/modal\";\r\nimport { BsDropdownModule } from \"ngx-bootstrap/dropdown\";\r\nimport { CsvModule } from \"@ctrl/ngx-csv\";\r\nimport { ContextMenuModule } from \"@esfaenza/ngx-contextmenu\";\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule, \r\n RouterModule, \r\n LocalizationModule, \r\n ModalModule, \r\n BsDropdownModule, \r\n CsvModule, \r\n ContextMenuModule, \r\n MatSelectModule,\r\n MatInputModule,\r\n ],\r\n declarations: [EsTh, EsTd, EsTableComponent, EsTdDirective, EsThDirective, TablePagerComponent],\r\n providers: [UtilityService, ExportService, HashingService, MessageService],\r\n exports: [EsTh, EsTd, EsTableComponent, EsTdDirective, EsThDirective, TablePagerComponent]\r\n})\r\nexport class EsTableModule {\r\n static forRoot(config?: EsTableModuleConfig): ModuleWithProviders<EsTableModule> {\r\n return {\r\n ngModule: EsTableModule,\r\n providers: [\r\n { provide: EST_LOCALE, useValue: config?.locale || 'it-IT' },\r\n { provide: EST_DEBUG, useValue: config?.debugMode || false }\r\n ]\r\n };\r\n }\r\n}","/*\r\n * Public API Surface of es-table\r\n */\r\n\r\nexport * from './lib/components/es-table/es_table.component';\r\nexport * from './lib/components/es-th/es_th.component';\r\nexport * from './lib/components/es-td/es_td.component';\r\nexport * from './lib/domain/configuration/EsTableModuleConfig';\r\nexport * from './lib/domain/configuration/EsTableDefaultable';\r\nexport * from './lib/es-table.module';\r\nexport * from './lib/domain/externals';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {EsTableLoc as ɵa} from './lib/components/es-table/es_table.component.loc';\nexport {TablePagerComponent as ɵh} from './lib/components/pager/table_pager.component';\nexport {TablePagerLoc as ɵi} from './lib/components/pager/table_pager.component.loc';\nexport {UtilitiesHandler as ɵe} from './lib/core/handlers';\nexport {EsTdDirective as ɵf} from './lib/directives/es_td.directive';\nexport {EsThDirective as ɵg} from './lib/directives/es_th.directive';\nexport {EST_DEBUG as ɵc,EST_DEFAULTS as ɵd,EST_LOCALE as ɵb} from './lib/tokens';"],"names":["Component","ChangeDetectionStrategy","ElementRef","Renderer2","ViewContainerRef","DomSanitizer","Input","EventEmitter","Output","ViewChild","HostListener","Directive","TemplateRef","InjectionToken","LocalizationService","Injectable","Optional","Inject","HashingService","ViewEncapsulation","NgControl","Self","PreferencesService","ChangeDetectorRef","UtilityService","ExportService","DateService","MessageService","ContentChildren","forwardRef","ContentChild","NgModule","CommonModule","FormsModule","RouterModule","LocalizationModule","ModalModule","BsDropdownModule","CsvModule","ContextMenuModule","MatSelectModule","MatInputModule"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;IAAA;;;;;;;;;;;;;;IAcA;IAEA,IAAI,aAAa,GAAG,UAAS,CAAC,EAAE,CAAC;QAC7B,aAAa,GAAG,MAAM,CAAC,cAAc;aAChC,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,KAAK,IAAI,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,EAAE,CAAC;YAC5E,UAAU,CAAC,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC;gBAAE,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;oBAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACtG,OAAO,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAC/B,CAAC,CAAC;aAEc,SAAS,CAAC,CAAC,EAAE,CAAC;QAC1B,IAAI,OAAO,CAAC,KAAK,UAAU,IAAI,CAAC,KAAK,IAAI;YACrC,MAAM,IAAI,SAAS,CAAC,sBAAsB,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,+BAA+B,CAAC,CAAC;QAC9F,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACpB,SAAS,EAAE,KAAK,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,EAAE;QACvC,CAAC,CAAC,SAAS,GAAG,CAAC,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;IACzF,CAAC;IAEM,IAAI,QAAQ,GAAG;QAClB,QAAQ,GAAG,MAAM,CAAC,MAAM,IAAI,SAAS,QAAQ,CAAC,CAAC;YAC3C,KAAK,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;gBACjD,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;gBACjB,KAAK,IAAI,CAAC,IAAI,CAAC;oBAAE,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;wBAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;aAChF;YACD,OAAO,CAAC,CAAC;SACZ,CAAA;QACD,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC3C,CAAC,CAAA;aAEe,MAAM,CAAC,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC,GAAG,EAAE,CAAC;QACX,KAAK,IAAI,CAAC,IAAI,CAAC;YAAE,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;gBAC/E,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAChB,IAAI,CAAC,IAAI,IAAI,IAAI,OAAO,MAAM,CAAC,qBAAqB,KAAK,UAAU;YAC/D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACpE,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1E,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACzB;QACL,OAAO,CAAC,CAAC;IACb,CAAC;aAEe,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI;QACpD,IAAI,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC,wBAAwB,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;QAC7H,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,UAAU;YAAE,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;;YAC1H,KAAK,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE;gBAAE,IAAI,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;oBAAE,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;QAClJ,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IAClE,CAAC;aAEe,OAAO,CAAC,UAAU,EAAE,SAAS;QACzC,OAAO,UAAU,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,MAAM,EAAE,GAAG,EAAE,UAAU,CAAC,CAAC,EAAE,CAAA;IACzE,CAAC;aAEe,UAAU,CAAC,WAAW,EAAE,aAAa;QACjD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,OAAO,CAAC,QAAQ,KAAK,UAAU;YAAE,OAAO,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;IACnI,CAAC;aAEe,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,EAAE,SAAS;QACvD,SAAS,KAAK,CAAC,KAAK,IAAI,OAAO,KAAK,YAAY,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,CAAC,UAAU,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;QAC5G,OAAO,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,EAAE,UAAU,OAAO,EAAE,MAAM;YACrD,SAAS,SAAS,CAAC,KAAK,IAAI,IAAI;gBAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;aAAE;YAAC,OAAO,CAAC,EAAE;gBAAE,MAAM,CAAC,CAAC,CAAC,CAAC;aAAE,EAAE;YAC3F,SAAS,QAAQ,CAAC,KAAK,IAAI,IAAI;gBAAE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;aAAE;YAAC,OAAO,CAAC,EAAE;gBAAE,MAAM,CAAC,CAAC,CAAC,CAAC;aAAE,EAAE;YAC9F,SAAS,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,EAAE;YAC9G,IAAI,CAAC,CAAC,SAAS,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;SACzE,CAAC,CAAC;IACP,CAAC;aAEe,WAAW,CAAC,OAAO,EAAE,IAAI;QACrC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,cAAa,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;gBAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACjH,OAAO,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,OAAO,MAAM,KAAK,UAAU,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,cAAa,OAAO,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACzJ,SAAS,IAAI,CAAC,CAAC,IAAI,OAAO,UAAU,CAAC,IAAI,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;QAClE,SAAS,IAAI,CAAC,EAAE;YACZ,IAAI,CAAC;gBAAE,MAAM,IAAI,SAAS,CAAC,iCAAiC,CAAC,CAAC;YAC9D,OAAO,CAAC;gBAAE,IAAI;oBACV,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI;wBAAE,OAAO,CAAC,CAAC;oBAC7J,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;wBAAE,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;oBACxC,QAAQ,EAAE,CAAC,CAAC,CAAC;wBACT,KAAK,CAAC,CAAC;wBAAC,KAAK,CAAC;4BAAE,CAAC,GAAG,EAAE,CAAC;4BAAC,MAAM;wBAC9B,KAAK,CAAC;4BAAE,CAAC,CAAC,KAAK,EAAE,CAAC;4BAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;wBACxD,KAAK,CAAC;4BAAE,CAAC,CAAC,KAAK,EAAE,CAAC;4BAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;4BAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;4BAAC,SAAS;wBACjD,KAAK,CAAC;4BAAE,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;4BAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;4BAAC,SAAS;wBACjD;4BACI,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE;gCAAE,CAAC,GAAG,CAAC,CAAC;gCAAC,SAAS;6BAAE;4BAC5G,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;gCAAE,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;gCAAC,MAAM;6BAAE;4BACtF,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;gCAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gCAAC,CAAC,GAAG,EAAE,CAAC;gCAAC,MAAM;6BAAE;4BACrE,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE;gCAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gCAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gCAAC,MAAM;6BAAE;4BACnE,IAAI,CAAC,CAAC,CAAC,CAAC;gCAAE,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;4BACtB,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;4BAAC,SAAS;qBAC9B;oBACD,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;iBAC9B;gBAAC,OAAO,CAAC,EAAE;oBAAE,EAAE,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;oBAAC,CAAC,GAAG,CAAC,CAAC;iBAAE;wBAAS;oBAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;iBAAE;YAC1D,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;gBAAE,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;YAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;SACpF;IACL,CAAC;IAEM,IAAI,eAAe,GAAG,MAAM,CAAC,MAAM,IAAI,UAAS,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;QAC9D,IAAI,EAAE,KAAK,SAAS;YAAE,EAAE,GAAG,CAAC,CAAC;QAC7B,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,EAAE,cAAa,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACzF,CAAC,KAAK,UAAS,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;QACtB,IAAI,EAAE,KAAK,SAAS;YAAE,EAAE,GAAG,CAAC,CAAC;QAC7B,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACjB,CAAC,CAAC,CAAC;aAEa,YAAY,CAAC,CAAC,EAAE,CAAC;QAC7B,KAAK,IAAI,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;gBAAE,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAClH,CAAC;aAEe,QAAQ,CAAC,CAAC;QACtB,IAAI,CAAC,GAAG,OAAO,MAAM,KAAK,UAAU,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QAC9E,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ;YAAE,OAAO;gBAC1C,IAAI,EAAE;oBACF,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM;wBAAE,CAAC,GAAG,KAAK,CAAC,CAAC;oBACnC,OAAO,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;iBAC3C;aACJ,CAAC;QACF,MAAM,IAAI,SAAS,CAAC,CAAC,GAAG,yBAAyB,GAAG,iCAAiC,CAAC,CAAC;IAC3F,CAAC;aAEe,MAAM,CAAC,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC,GAAG,OAAO,MAAM,KAAK,UAAU,IAAI,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC3D,IAAI,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC;QACjB,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;QACjC,IAAI;YACA,OAAO,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI;gBAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;SAC9E;QACD,OAAO,KAAK,EAAE;YAAE,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;SAAE;gBAC/B;YACJ,IAAI;gBACA,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC;oBAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aACpD;oBACO;gBAAE,IAAI,CAAC;oBAAE,MAAM,CAAC,CAAC,KAAK,CAAC;aAAE;SACpC;QACD,OAAO,EAAE,CAAC;IACd,CAAC;IAED;aACgB,QAAQ;QACpB,KAAK,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE;YAC9C,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,OAAO,EAAE,CAAC;IACd,CAAC;IAED;aACgB,cAAc;QAC1B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;YAAE,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACpF,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE;YAC5C,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE;gBAC7D,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpB,OAAO,CAAC,CAAC;IACb,CAAC;aAEe,aAAa,CAAC,EAAE,EAAE,IAAI;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE;YAC7D,EAAE,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,OAAO,EAAE,CAAC;IACd,CAAC;aAEe,OAAO,CAAC,CAAC;QACrB,OAAO,IAAI,YAAY,OAAO,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,IAAI,IAAI,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC;IACzE,CAAC;aAEe,gBAAgB,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS;QAC3D,IAAI,CAAC,MAAM,CAAC,aAAa;YAAE,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;QACvF,IAAI,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;QAC9D,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,cAAc,OAAO,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QACtH,SAAS,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;YAAE,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE;QAC1I,SAAS,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI;YAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SAAE;QAAC,OAAO,CAAC,EAAE;YAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;SAAE,EAAE;QAClF,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,YAAY,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;QACxH,SAAS,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,EAAE;QAClD,SAAS,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,EAAE;QAClD,SAAS,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,MAAM;YAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;IACtF,CAAC;aAEe,gBAAgB,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE,CAAC,CAAC;QACT,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG,cAAc,OAAO,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;QAC5I,SAAS,IAAI,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,QAAQ,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE;IACnJ,CAAC;aAEe,aAAa,CAAC,CAAC;QAC3B,IAAI,CAAC,MAAM,CAAC,aAAa;YAAE,MAAM,IAAI,SAAS,CAAC,sCAAsC,CAAC,CAAC;QACvF,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,QAAQ,KAAK,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,cAAc,OAAO,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACjN,SAAS,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,OAAO,IAAI,OAAO,CAAC,UAAU,OAAO,EAAE,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE;QAChK,SAAS,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAS,CAAC,IAAI,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,EAAE;IAChI,CAAC;aAEe,oBAAoB,CAAC,MAAM,EAAE,GAAG;QAC5C,IAAI,MAAM,CAAC,cAAc,EAAE;YAAE,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;SAAE;aAAM;YAAE,MAAM,CAAC,GAAG,GAAG,GAAG,CAAC;SAAE;QAC/G,OAAO,MAAM,CAAC;IAClB,CAAC;IAAA,CAAC;IAEF,IAAI,kBAAkB,GAAG,MAAM,CAAC,MAAM,IAAI,UAAS,CAAC,EAAE,CAAC;QACnD,MAAM,CAAC,cAAc,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IACxE,CAAC,IAAI,UAAS,CAAC,EAAE,CAAC;QACd,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC,CAAC;aAEc,YAAY,CAAC,GAAG;QAC5B,IAAI,GAAG,IAAI,GAAG,CAAC,UAAU;YAAE,OAAO,GAAG,CAAC;QACtC,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,GAAG,IAAI,IAAI;YAAE,KAAK,IAAI,CAAC,IAAI,GAAG;gBAAE,IAAI,CAAC,KAAK,SAAS,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;oBAAE,eAAe,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;QACzI,kBAAkB,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAChC,OAAO,MAAM,CAAC;IAClB,CAAC;aAEe,eAAe,CAAC,GAAG;QAC/B,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,IAAI,GAAG,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;IAC5D,CAAC;aAEe,sBAAsB,CAAC,QAAQ,EAAE,UAAU;QACvD,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YAC3B,MAAM,IAAI,SAAS,CAAC,gDAAgD,CAAC,CAAC;SACzE;QACD,OAAO,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACpC,CAAC;aAEe,sBAAsB,CAAC,QAAQ,EAAE,UAAU,EAAE,KAAK;QAC9D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;YAC3B,MAAM,IAAI,SAAS,CAAC,gDAAgD,CAAC,CAAC;SACzE;QACD,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC;IACjB;;IC5OA;;;;;;;;;;QAWI,qBAAmB,EAAU,EAAS,KAAsB;YAAzC,OAAE,GAAF,EAAE,CAAQ;YAAS,UAAK,GAAL,KAAK,CAAiB;SAAK;0BACpE;KAAA;;ICND;;;;;;;QAQI;YACI,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;YAC/B,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;YAClB,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;YAC1B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YACxB,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;YAC9B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;SAC3B;;;;QA2DM,yBAAK,GAAL;YACH,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;YACf,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;YACrB,IAAI,CAAC,gBAAgB,GAAG,KAAK,CAAC;YAC9B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YACd,IAAI,CAAC,oBAAoB,GAAG,EAAE,CAAC;YAC/B,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YAChB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;YACjB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;YAClB,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;YAC1B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;SAC3B;wBACJ;KAAA;;IC/FD;;;;;;;;;;;;;;;;;QAkBI,kCACW,WAAmB,EACnB,YAAoB,EACpB,SAAwB,EACxB,wBAAyC,EACzC,SAAgC,EAChC,WAA0B,EAC1B,OAAuB,EACvB,IAAmB,EACnB,SAAyB,EACzB,WAA4B;YAP5B,0BAAA,EAAA,gBAAwB;YACxB,yCAAA,EAAA,+BAAyC;YACzC,0BAAA,EAAA,gBAAgC;YAChC,4BAAA,EAAA,kBAA0B;YAC1B,wBAAA,EAAA,cAAuB;YACvB,qBAAA,EAAA,WAAmB;YACnB,0BAAA,EAAA,gBAAyB;YACzB,4BAAA,EAAA,mBAA4B;YAT5B,gBAAW,GAAX,WAAW,CAAQ;YACnB,iBAAY,GAAZ,YAAY,CAAQ;YACpB,cAAS,GAAT,SAAS,CAAe;YACxB,6BAAwB,GAAxB,wBAAwB,CAAiB;YACzC,cAAS,GAAT,SAAS,CAAuB;YAChC,gBAAW,GAAX,WAAW,CAAe;YAC1B,YAAO,GAAP,OAAO,CAAgB;YACvB,SAAI,GAAJ,IAAI,CAAe;YACnB,cAAS,GAAT,SAAS,CAAgB;YACzB,gBAAW,GAAX,WAAW,CAAiB;SAEtC;uCAIJ;KAAA;;IClCD;;;QAII;YACI,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;YACvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;YACtB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;YAClB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;SACxB;0BAUJ;KAAA;;IClBD;;QACA;SAMC;+BAAA;KAAA;;ICND;;QACA;SAsBC;+BAAA;KAAA;;ICxBD;;QACA;SAMC;0BAAA;KAAA;;ICRD;;QACA;SAcC;2BAAA;KAAA;;ICbD;;QACA;SAUC;2BAAA;KAAA;;ICbD;;QACA;SAIC;wBAAA;KAAA;;ICJD;;QACA;SAoCC;0BAAA;KAAA;;ICrCD;;;;;;;;;;;;QAaI,oCACW,EAAU,EACV,KAAa,EACb,SAAkB,EAClB,IAAa,EACb,cAAuB,EACvB,cAAuB;YALvB,OAAE,GAAF,EAAE,CAAQ;YACV,UAAK,GAAL,KAAK,CAAQ;YACb,cAAS,GAAT,SAAS,CAAS;YAClB,SAAI,GAAJ,IAAI,CAAS;YACb,mBAAc,GAAd,cAAc,CAAS;YACvB,mBAAc,GAAd,cAAc,CAAS;SACjC;yCACJ;KAAA;;ICpBD;;;;;;;QAQI,wBAAY,QAAa;;YAgBlB,QAAG,GAAY,KAAK,CAAC;;YAErB,eAAU,GAAQ,EAAE,CAAC;;YAErB,qBAAgB,GAAY,EAAE,CAAC;YAnBlC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;YAC7B,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;YACtB,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC;YACjB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;YACrB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;YACjB,IAAI,CAAC,gBAAgB,GAAG,EAAE,CAAC;SAC9B;6BAcJ;KAAA;;IC7BD;;;;;;;;;QAUI,eACW,MAAc,EACd,KAAa,EACb,KAAa;YAFb,WAAM,GAAN,MAAM,CAAQ;YACd,UAAK,GAAL,KAAK,CAAQ;YACb,UAAK,GAAL,KAAK,CAAQ;YAEpB,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;SAC1B;oBAIJ;KAAA;;ICtBD;;;;;;;;;QAUI,0BACW,MAAc,EACd,WAAkC,EAClC,KAAa;YAFb,WAAM,GAAN,MAAM,CAAQ;YACd,gBAAW,GAAX,WAAW,CAAuB;YAClC,UAAK,GAAL,KAAK,CAAQ;SAAK;+BAChC;KAAA;;ICdD;;;;;;;;QASI,qBACW,MAAc,EACd,KAAa;YADb,WAAM,GAAN,MAAM,CAAQ;YACd,UAAK,GAAL,KAAK,CAAQ;SAAK;0BAChC;KAAA;;ICZD;;;;;;;;;QAUI,4BACW,MAAc,EACd,WAAmC,EACnC,QAAuC;YAFvC,WAAM,GAAN,MAAM,CAAQ;YACd,gBAAW,GAAX,WAAW,CAAwB;YACnC,aAAQ,GAAR,QAAQ,CAA+B;SAAK;iCAC1D;KAAA;;ICdD;IACA;;;;;;;;QASI,sBACW,KAAuB,EACvB,WAAgC,EAChC,KAAY;YAFZ,UAAK,GAAL,KAAK,CAAkB;YACvB,gBAAW,GAAX,WAAW,CAAqB;YAChC,UAAK,GAAL,KAAK,CAAO;SAAK;2BAC/B;KAAA;;ICZD;IACA;;;;;;;;;;;;QAaI,uBACW,EAAU,EACV,WAAmB,EACnB,OAAgB,EAChB,KAAc,EACd,MAAe,EACf,WAAmB,EACnB,QAA0B;YAN1B,OAAE,GAAF,EAAE,CAAQ;YACV,gBAAW,GAAX,WAAW,CAAQ;YACnB,YAAO,GAAP,OAAO,CAAS;YAChB,UAAK,GAAL,KAAK,CAAS;YACd,WAAM,GAAN,MAAM,CAAS;YACf,gBAAW,GAAX,WAAW,CAAQ;YACnB,aAAQ,GAAR,QAAQ,CAAkB;SAAK;4BAI7C;KAAA;;ICzBD;IACA;;;;;;;;;QAUI,oBACW,WAAmB,EACnB,UAAgC,EAChC,OAAe,EACf,IAAoB,EACpB,QAA4B;YAJ5B,gBAAW,GAAX,WAAW,CAAQ;YACnB,eAAU,GAAV,UAAU,CAAsB;YAChC,YAAO,GAAP,OAAO,CAAQ;YACf,SAAI,GAAJ,IAAI,CAAgB;YACpB,aAAQ,GAAR,QAAQ,CAAoB;YAEnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;YACjB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;SACrB;yBAMJ;KAAA;;IC5BD;;;;IAIA;;;;;;;QAQI,4BACW,MAAc,EACd,KAAa;YADb,WAAM,GAAN,MAAM,CAAQ;YACd,UAAK,GAAL,KAAK,CAAQ;SAAK;iCAChC;KAAA;;ICfD;IACA;;;;;;;;QASI,uBACW,IAA2B,EAC3B,MAAc,EACd,KAAa;YAFb,SAAI,GAAJ,IAAI,CAAuB;YAC3B,WAAM,GAAN,MAAM,CAAQ;YACd,UAAK,GAAL,KAAK,CAAQ;SAAK;4BAChC;KAAA;;ICdD;IAIA;;;QAoCI,cAAoB,MAAkB,EAAU,QAAmB,EAAU,cAAgC,EAAY,SAAuB;YAA5H,WAAM,GAAN,MAAM,CAAY;YAAU,aAAQ,GAAR,QAAQ,CAAW;YAAU,mBAAc,GAAd,cAAc,CAAkB;YAAY,cAAS,GAAT,SAAS,CAAc;;YA3BhI,OAAE,GAAW,EAAE,CAAC;;YASvB,YAAO,GAAY,IAAI,CAAC;;YAGxB,aAAQ,GAAS,IAAI,CAAC;SAesH;QAOrJ,sBAAa,yBAAO;;;;;;iBAcpB;gBACI,IAAI,IAAI,CAAC,QAAQ,IAAI,SAAS;oBAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAEzB,OAAO,IAAI,CAAC,QAAQ,CAAC;aACxB;;;;;;iBAnBD,UAAqB,UAAmB;gBACpC,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;gBAE3B,IAAI,UAAU;oBACV,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;;oBAEzE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;aAC7E;;;WAAA;;QAeD,8BAAe,GAAf;;YAEI,IAAI,IAAI,CAAC,QAAQ;gBACb,OAAO;;YAGX,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC,KAAK,CAAC;YAC/D,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,uBAAuB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACjM,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;SACpF;;QAGO,iCAAkB,GAAlB;;YAEJ,IAAI,EAAE,GAAS,IAAI,CAAC,cAAe,CAAC;YACpC,IAAI,OAAO,CAAC;;YAEZ,IAAI,EAAE,CAAC,KAAK,IAAI,IAAI;gBAChB,OAAO,GAAG,IAAI,CAAC;iBACd,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS;gBACnH,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC;iBAC3C,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI;gBAC9C,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,OAAO,CAAC,SAAS,CAAC;;gBAEzD,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;YAEzC,IAAI,OAAO;gBACP,OAAO,OAAO,CAAC;;YAGnB,IAAI,KAAK,GAAS,IAAI,CAAC,cAAe,CAAC,UAAU,CAAC;YAClD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACnC,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACpB,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,IAAI;oBACpC,OAAO,IAAI,CAAC,SAAS,CAAC;;gBAG1B,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;oBACxC,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;wBACrC,IAAI,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;wBACrB,IAAI,KAAK,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,IAAI;4BACvC,OAAO,KAAK,CAAC,SAAS,CAAC;qBAC9B;iBACJ;aACJ;SACJ;;;;gBA7GJA,YAAS,SAAC;oBACP,QAAQ,EAAE,SAAS;oBACnB,8DAAqC;oBACrC,eAAe,EAAEC,0BAAuB,CAAC,MAAM;iBAClD;;;gBARqCC,aAAU;gBAArBC,YAAS;gBAAcC,mBAAgB;gBACzDC,4BAAY;;;qBAWhBC,QAAK,SAAC,OAAO;2BAGbA,QAAK;6BAGLA,QAAK;0BAGLA,QAAK;2BAGLA,QAAK;0BASLA,QAAK;0BAaLA,QAAK;;;IC/CV;IAGA;;;QA+EI,cAAoB,MAAkB,EAAU,QAAmB;YAA/C,WAAM,GAAN,MAAM,CAAY;YAAU,aAAQ,GAAR,QAAQ,CAAW;;YAtE3D,cAAS,GAA+C,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;;YAMvG,iBAAY,GAAY,KAAK,CAAC;;;;;;YAO9B,gBAAW,GAAW,IAAI,CAAC;;YAGnB,OAAE,GAAW,EAAE,CAAC;;YAMvB,cAAS,GAAY,IAAI,CAAC;;YAG1B,YAAO,GAAW,EAAE,CAAC;;YAGrB,cAAS,GAAY,KAAK,CAAC;;YAG3B,WAAM,GAAY,KAAK,CAAC;;;;;YAMxB,qBAAgB,GAAY,KAAK,CAAC;;YAMlC,SAAI,GAAY,KAAK,CAAC;;YAGtB,UAAK,GAAY,KAAK,CAAC;;YAGvB,aAAQ,GAAS,IAAI,CAAC;;YAGd,kBAAa,GAAwC,IAAIC,eAAY,EAAyB,CAAC;;YAG/F,gBAAW,GAAyB,IAAIA,eAAY,EAAU,CAAC;;YASzE,gBAAW,GAAY,KAAK,CAAC;SAMoC;QAOxE,sBAAa,yBAAO;;;;;;iBAcpB;gBACI,IAAI,IAAI,CAAC,QAAQ,IAAI,SAAS;oBAC1B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAEzB,OAAO,IAAI,CAAC,QAAQ,CAAC;aACxB;;;;;;iBAnBD,UAAqB,UAAmB;gBACpC,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC;gBAE3B,IAAI,UAAU;oBACV,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;;oBAEzE,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;aAC7E;;;WAAA;;QAeD,8BAAe,GAAf;;YAEI,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC;YAEtH,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC;;YAGjF,IAAI,IAAI,CAAC,SAAS;gBACd,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;SACzE;;QAGD,oBAAK,GAAL;YACI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;SAClC;;QAGD,sCAAuB,GAAvB;YACI,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE;gBACV,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;gBACvE,OAAO;aACV;YAED,IAAI,IAAI,CAAC,gBAAgB,EAAE;gBACvB,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;gBAC5E,OAAO;aACV;YAED,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS;gBAChC,OAAO;YAEX,IAAI,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC;YACrD,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC;YAEvB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACvC;;;;;;QAOD,4BAAa,GAAb,UAAc,EAAE;YACZ,IAAI,CAAC,IAAI,CAAC,SAAS;gBACf,OAAO;YAEX,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;YACzB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,WAAW,GAAG,EAAE,CAAC,KAAK,CAAC;SACvE;;QAIM,wBAAS,GAAT;YACH,IAAI,CAAC,IAAI,CAAC,SAAS;gBACf,OAAO;YAEX,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;SAC7B;;;;;;QAQM,0BAAW,GAAX,UAAY,MAAM;YACrB,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,YAAY;gBACrC,OAAO;;;YAIX,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC;;YAGjF,MAAM,CAAC,cAAc,EAAE,CAAC;SAC3B;;;;gBAtLJP,YAAS,SAAC;oBACP,QAAQ,EAAE,SAAS;oBACnB,quBAAqC;oBACrC,eAAe,EAAEC,0BAAuB,CAAC,MAAM;iBAClD;;;gBAPgDC,aAAU;gBAAaC,YAAS;;;qBA2B5EG,QAAK,SAAC,OAAO;wBAGbA,QAAK;4BAGLA,QAAK;0BAGLA,QAAK;4BAGLA,QAAK;yBAGLA,QAAK;mCAMLA,QAAK;0BAGLA,QAAK;uBAGLA,QAAK;wBAGLA,QAAK;2BAGLA,QAAK;gCAGLE,SAAM;8BAGNA,SAAM;0BAGNC,YAAS,SAAC,SAAS,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;0BAmBtCH,QAAK;4BAyELI,eAAY,SAAC,yBAAyB;8BAatCA,eAAY,SAAC,2BAA2B,EAAE,CAAC,QAAQ,CAAC;;;IC7KzD;;;;;QAsBI,uBAAmB,QAA0B;YAA1B,aAAQ,GAAR,QAAQ,CAAkB;;YAjBtC,eAAU,GAAG,IAAI,CAAC;;YAGhB,cAAS,GAAG,IAAI,CAAC;;YAMjB,SAAI,GAAY,IAAI,CAAC;SAQoB;;;;gBArBrDC,YAAS,SAAC,EAAE,QAAQ,EAAE,MAAM,EAAE;;;gBAHJC,cAAW;;;4BAUjCN,QAAK;qBAGLA,QAAK;uBAGLA,QAAK;0BAGLA,QAAK;;;ICfV;;;;;QA6DI,uBAAmB,QAA0B;YAA1B,aAAQ,GAAR,QAAQ,CAAkB;;YAxDtC,oBAAe,GAAoB,IAAI,CAAC;;YAGxC,eAAU,GAAG,IAAI,CAAC;;YAGlB,gBAAW,GAAY,KAAK,CAAC;;YAG3B,OAAE,GAAW,EAAE,CAAC;;YAGhB,aAAQ,GAAY,KAAK,CAAC;;YAG1B,kBAAa,GAAW,GAAG,CAAC;;YAG5B,cAAS,GAAY,IAAI,CAAC;;YAG1B,YAAO,GAAY,KAAK,CAAC;;YAGzB,aAAQ,GAAW,EAAE,CAAC;;YAMtB,gBAAW,GAAY,IAAI,CAAC;;YAG5B,WAAM,GAAY,KAAK,CAAC;;YAGxB,gBAAW,GAAY,KAAK,CAAC;;YAS7B,SAAI,GAAY,IAAI,CAAC;;YAGrB,YAAO,GAAa,KAAK,CAAC;;YAG1B,kBAAa,GAAY,IAAI,CAAC;SAKW;;;;gBA5DrDK,YAAS,SAAC,EAAE,QAAQ,EAAE,MAAM,EAAE;;;gBALJC,cAAW;;;qBAkBjCN,QAAK;2BAGLA,QAAK;gCAGLA,QAAK;4BAGLA,QAAK;0BAGLA,QAAK;2BAGLA,QAAK;0BAGLA,QAAK;8BAGLA,QAAK;yBAGLA,QAAK;8BAGLA,QAAK;0BAGLA,QAAK;+BAGLA,QAAK;uBAGLA,QAAK;0BAGLA,QAAK;gCAGLA,QAAK;;;ICzDV;QACa,UAAU,GAA2B,IAAIO,iBAAc,CAAS,YAAY,EAAE;IAE3F;QACa,SAAS,GAA2B,IAAIA,iBAAc,CAAS,WAAW,EAAE;IAEzF;QACa,YAAY,GAAuC,IAAIA,iBAAc,CAAqB,cAAc;;ICNrH;;QAEgC,8BAAmB;;QAG/C,oBAA4C,UAAkB;YAA9D,YACI,kBAAM,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,OAAO,CAAC,SAsB/B;YAnBG,iBAAM,GAAG,aAAC,QAAQ,EAAE,SAAS,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;YAC9C,iBAAM,GAAG,aAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;YACtC,iBAAM,GAAG,aAAC,QAAQ,EAAE,QAAQ,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;YAC1C,iBAAM,GAAG,aAAC,QAAQ,EAAE,gCAAgC,EAAE,CAAC,wCAAwC,CAAC,CAAC,CAAC;YAClG,iBAAM,GAAG,aAAC,QAAQ,EAAE,4BAA4B,EAAE,CAAC,0BAA0B,CAAC,CAAC,CAAC;YAChF,iBAAM,GAAG,aAAC,QAAQ,EAAE,cAAc,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;YACvD,iBAAM,GAAG,aAAC,QAAQ,EAAE,UAAU,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC;YAC/C,iBAAM,GAAG,aAAC,QAAQ,EAAE,aAAa,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;YACtD,iBAAM,GAAG,aAAC,QAAQ,EAAE,aAAa,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;YACrD,iBAAM,GAAG,aAAC,QAAQ,EAAE,eAAe,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;YACzD,iBAAM,GAAG,aAAC,QAAQ,EAAE,oBAAoB,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC;YAClE,iBAAM,GAAG,aAAC,QAAQ,EAAE,iEAAiE,EAAE,CAAC,uFAAuF,CAAC,CAAC,CAAC;YAClL,iBAAM,GAAG,aAAC,QAAQ,EAAE,8BAA8B,EAAE,CAAC,6BAA6B,CAAC,CAAC,CAAC;YACrF,iBAAM,GAAG,aAAC,QAAQ,EAAE,kBAAkB,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC;YACjE,iBAAM,GAAG,aAAC,QAAQ,EAAE,iBAAiB,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC;YAChE,iBAAM,GAAG,aAAC,QAAQ,EAAE,mBAAmB,EAAE,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAC9D,iBAAM,GAAG,aAAC,QAAQ,EAAE,iBAAiB,EAAE,CAAC,mBAAmB,CAAC,CAAC,CAAC;YAC9D,iBAAM,GAAG,aAAC,QAAQ,EAAE,yBAAyB,EAAE,CAAC,gCAAgC,CAAC,CAAC,CAAC;YACnF,iBAAM,GAAG,aAAC,QAAQ,EAAE,kDAAkD,EAAE,CAAC,kEAAkE,CAAC,CAAC,CAAC;;SACjJ;;KA1BL,CAAgCC,iCAAmB;;gBADlDC,aAAU;;;6CAIMC,WAAQ,YAAIC,SAAM,SAAC,UAAU;;;ICT9C;;QACA;SAiBC;iCAAA;KAAA;;ICDD;IAGA;IACA;;QAGI,+BAAoB,GAAqB,EAAU,SAA2B,EAAU,OAAuB,EAAU,WAA+B,EAAU,GAAuB;YAArK,QAAG,GAAH,GAAG,CAAkB;YAAU,cAAS,GAAT,SAAS,CAAkB;YAAU,YAAO,GAAP,OAAO,CAAgB;YAAU,gBAAW,GAAX,WAAW,CAAoB;YAAU,QAAG,GAAH,GAAG,CAAoB;SAAK;;;;;;;QAQvL,mDAAmB,GAAnB,UAAoB,EAAU,EAAE,KAAqB;YACxD,IAAI,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAI,IAAI,CAAC,GAAG,CAAC,IAAuB,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;YACjG,IAAI,UAAU,GAAG,IAAI,CAAC;YACtB,IAAI,aAAa,GAAW,IAAI,CAAC;;YAGjC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ;gBAC3B,IAAI,CAAC,GAAG,CAAC,IAAuB,CAAC,MAAM,GAAG,EAAE,CAAC;iBAC7C,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS;gBAClC,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,EAAE,CAAC;YAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACpC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;gBAClB,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE;oBACZ,IAAI,KAAK,EAAE;wBACP,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC;wBAChB,UAAU,GAAG,KAAK,CAAC;qBACtB;;wBAEG,aAAa,GAAG,CAAC,CAAC;iBACzB;aACJ;YAED,IAAI,aAAa,IAAI,IAAI,EAAE;gBACvB,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC;aACnC;iBACI,IAAI,UAAU,EAAE;gBACjB,IAAI,IAAI,CAAC,GAAG,CAAC,0BAA0B;oBACnC,MAAM,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;qBACvC;oBACD,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ;wBAChB,IAAI,CAAC,GAAG,CAAC,IAAuB,CAAC,MAAM,GAAG,CAAC,IAAI,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;yBACvE,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS;wBACvB,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,IAAI,WAAW,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;iBAC3D;aACJ;YAED,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,IAAA,EAAE,KAAK,OAAA,EAAE,CAAC,CAAC;YAE5C,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE;gBACnB,IAAI,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,MAAM,GAAG,CAAC;oBAC5C,IAAI,CAAC,GAAG,CAAC,uBAAuB,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;;oBAE7C,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;aACzC;iBACI,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS;gBACvB,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC;SACrC;;;;;;;;QASM,iDAAiB,GAAjB,UAAkB,GAA6B;YAA/C,iBAwCN;YAvCG,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,EAAE,CAAC;YAC7B,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC;gBACf,OAAO;oCAGF,CAAC;gBACN,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBAEhB,IAAI,OAAK,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;;oBAE3B,IAAI,CAAC,EAAE,CAAC,EAAE;0CACG;oBAEb,EAAE,CAAC,OAAO,GAAG,OAAK,GAAG,CAAC,aAAa,CAAC;;;oBAIpC,IAAI,OAAK,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC,OAAO;wBACpC,OAAK,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;iBACtH;qBACI;oBACD,IAAI,QAAM,GAAG,EAAE,CAAC,EAAE,CAAC;;oBAEnB,IAAI,CAAC,QAAM;0CACE;;;oBAIb,IAAI,CAAC,OAAK,GAAG,CAAC,aAAa,IAAI,EAAE,CAAC,SAAS,KAAK,EAAE,CAAC,IAAI,EAAE;wBACrD,IAAI,gBAAgB,GAAG,CAAC,OAAK,GAAG,CAAC,WAAW,IAAI,OAAK,GAAG,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,GAAG,OAAK,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,EAAE,IAAI,QAAM,GAAA,CAAC,IAAI,IAAI,CAAC;wBACjJ,IAAI,KAAK,GAAG,IAAI,aAAa,CAAC,QAAM,EAAE,IAAI,EAAE,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,GAAG,gBAAgB,IAAI,IAAI,GAAG,EAAE,CAAC,QAAQ,GAAG,gBAAgB,CAAC,MAAM,EAAE,EAAE,CAAC,aAAa,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC;wBACvL,IAAI,gBAAgB;4BAChB,KAAK,CAAC,UAAU,GAAG,gBAAgB,CAAC,UAAU,CAAC;wBACnD,OAAK,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;qBACvC;iBACJ;;;;YA9BL,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE;wBAA1B,CAAC;aA+BT;YACD,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,UAAA,CAAC,IAAM,KAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SAC9F;;;;QAKO,8DAA8B,GAA9B,UAA+B,GAA6B,EAAE,GAA6B;YAE/F,IAAI,QAAQ,GAA8B,EAAE,CAAC;YAC7C,IAAI,MAAM,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC;YAC5B,IAAI,YAAY,GAAwC,EAAE,CAAC;YAC3D,IAAI,iBAAiB,GAAiC,EAAE,CAAC;;YAGzD,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;gBAC3D,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACrC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;;gBAG3B,IAAI,GAAG,CAAC,MAAM,EAAE;oBACZ,IAAI,IAAI,IAAI,OAAO;wBACf,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;oBAClE,OAAO,EAAE,CAAC;iBACb;gBAED,IAAI,GAAG,CAAC,KAAK,EAAE;oBACX,IAAI,IAAI,IAAI,OAAO,GAAG,MAAM;wBACxB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC;oBAC1D,MAAM,EAAE,CAAC;iBACZ;aACJ;YAED,OAAO,GAAG,MAAM,GAAG,CAAC,CAAC;;YAGrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACjC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBAChB,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;oBAC3B,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;oBACrB,IAAI,EAAE,CAAC,KAAK,EAAE;wBACV,IAAI,CAAC,IAAI,OAAO,GAAG,MAAM;4BACrB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC;wBACvD,MAAM,EAAE,CAAC;qBACZ;iBACJ;qBACI;oBAED,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;;oBAErB,EAAE,CAAC,QAAQ,GAAG,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,QAAQ,MAAM,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;oBAC3G,IAAI,EAAE,CAAC,QAAQ,EAAE;wBACb,IAAI,CAAC,IAAI,OAAO;4BACZ,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;wBAC9C,OAAO,EAAE,CAAC;qBACb;;oBAGD,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,EAAE;wBAC1B,IAAI,CAAC,IAAI,OAAO,GAAG,MAAM;4BACrB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,GAAG,MAAM,CAAC,CAAC;wBACvD,MAAM,EAAE,CAAC;qBACZ;iBACJ;aACJ;YAED,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC9D,OAAO;;YAGX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE;gBAC/B,iBAAiB,CAAiB,GAAG,CAAC,CAAC,CAAE,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;;YAGtD,IAAI,MAAM,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAEnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACjC,IAAI,IAAI,GAAG,GAAG,CAAC,CAAC,CAAkB,CAAC;gBACnC,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;aAC7C;YAED,IAAI,CAAC,GAAG,CAAC,gBAAgB,GAAG,OAAO,GAAG,CAAC,CAAC;SAC3C;;QAGM,0DAA0B,GAA1B;YACH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,gBAAgB;gBAC1B,OAAO;YAEX,IAAI,CAAC,GAAG,CAAC,oBAAoB,GAAG,CAAC,CAAC;YAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAClD,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBAClC,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO;oBACzB,IAAI,CAAC,GAAG,CAAC,oBAAoB,IAAI,GAAG,CAAC,WAAW,CAAC;aACxD;YACD,IAAI,CAAC,GAAG,CAAC,oBAAoB,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,EAAE,GAAG,CAAC,CAAC;SAChE;;;;;;;QAQO,wDAAwB,GAAxB,UAAyB,IAAoB;YAA7C,iBAuDP;YAtDG,IAAI,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC;YACvD,IAAI,SAAS,GAAG,EAAE,CAAC;YAEnB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC;gBACzD,OAAO;YAEX,IAAI,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC;YACvE,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,UAAA,CAAC;;gBAE1B,IAAI,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,UAAA,EAAE,IAAI,OAAA,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC,EAAE,GAAA,CAAC,CAAC;;gBAGrF,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC;oBAChB,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;;gBAGvC,IAAI,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC;oBAChC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;;qBAGpB,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO;oBACnC,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;;qBAGhB,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO;oBAClC,CAAC,CAAC,OAAO,GAAG,KAAK,CAAC;aACzB,CAAC,CAAC;;YAGH,IAAI,OAAO,CAAC,MAAM,IAAI,CAAC,EAAE;gBACrB,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ;oBACjB,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;;oBAEzB,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,SAAS,CAAC;aACzC;YAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE;;gBAEvG,IAAI,YAAU,GAAG,EAAE,CAAC;gBACpB,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,UAAA,EAAE;oBAC3B,KAAI,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,UAAA,CAAC;wBAC1B,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE;4BACV,YAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;qBAC1B,CAAC,CAAC;iBACN,CAAC,CAAC;gBACH,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,YAAU,CAAC;aACrC;;YAGD,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ;gBACjB,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;YAE5B,IAAI,WAAW;gBACX,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;SAC1B;;;;;;;;;;QAWM,wDAAwB,GAAxB,UAAyB,GAA6B,EAAE,GAA6B,EAAE,IAAoB;YAC9G,IAAI,SAAS,GAAG,EAAE,CAAC;YACnB,IAAI,QAAQ,GAA+B,EAAE,CAAC;YAC9C,IAAI,YAAY,GAAwC,EAAE,CAAC;YAC3D,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;gBAC3D,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACrC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;gBAC3B,IAAI,GAAG,CAAC,OAAO;oBACX,SAAS,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,GAAG,EAAE,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC;aACxD;YACD,IAAI,IAAI;gBACJ,IAAI,CAAC,OAAO,GAAG,SAAS,CAAC;;gBAGzB,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,SAAS,CAAC;;YAGtC,IAAI,GAAG,EAAE;;gBAEL,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACjC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;oBAEhB,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;wBAC3B,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,KAAK,KAAK,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;wBAC1F,IAAI,EAAE,CAAC,KAAK;4BACR,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;qBAC9B;yBACI;wBACD,EAAE,CAAC,SAAS,GAAG,EAAE,CAAC,OAAO,KAAK,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;wBAChG,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO;4BACxB,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;qBAC9B;iBACJ;aACJ;YAED,IAAI,GAAG,EAAE;;gBAEL,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACjC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;oBAEhB,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;wBACzB,EAAE,CAAC,OAAO,GAAG,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC;;wBAGjG,EAAE,CAAC,SAAS,GAAG,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;iBAC5G;aACJ;YAED,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;SACtB;;;;;;;QAQO,oDAAoB,GAApB,UAAqB,GAA6B,EAAE,IAAoB;YAC5E,IAAI,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;YACvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACjC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBAEhB,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;oBAC3B,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC;;;oBAIhB,KAAK,IAAI,GAAC,GAAG,CAAC,EAAE,GAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAC,EAAE,EAAE;wBACpC,IAAI,EAAE,GAAG,MAAM,CAAC,GAAC,CAAC,CAAC;wBACnB,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;4BACd,EAAE,CAAC,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC;qBAC3B;iBACJ;qBACI;oBACD,EAAE,CAAC,OAAO,GAAG,IAAI,CAAC;oBAClB,KAAK,IAAI,GAAC,GAAG,CAAC,EAAE,GAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAC,EAAE,EAAE;wBACpC,IAAI,EAAE,GAAG,MAAM,CAAC,GAAC,CAAC,CAAC;wBACnB,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE;4BACd,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC;qBAC7B;iBACJ;aACJ;SACJ;;;;;;;;;QAUM,4DAA4B,GAA5B,UAA6B,GAA6B;;YAE7D,IAAI,YAAY,GAAkC,EAAE,CAAC;YACrD,IAAI,QAAQ,GAAwC,EAAE,CAAC;YACvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACjC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBAChB,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC;oBACzB,SAAS;gBAEb,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;gBACrB,IAAI,EAAE,CAAC,QAAQ,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,QAAQ,CAAC;oBACzC,YAAY,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC;aACxC;;YAGD,IAAI,SAAS,GAAG,CAAC,CAAC;YAClB,IAAI,KAAK,GAAU,EAAE,CAAC;YACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACjC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBAChB,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;oBAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBAAC,SAAS;iBAAE;;gBAE5D,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;oBACtB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;oBACf,IAAI,GAAG,GAAG,IAAI,CAAC,kBAAkB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;oBAChD,SAAS,GAAG,GAAG,GAAG,SAAS,GAAG,GAAG,GAAG,SAAS,CAAC;iBACjD;aACJ;YAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC;SACrG;;;;;;QAOM,oDAAoB,GAApB,UAAqB,KAAoG;YAC5H,IAAI,KAAK,CAAC,aAAa,IAAI,CAAC;gBACxB,OAAO;;YAGX,IAAI,cAAc,GAAG,EAAE,CAAC;YACxB,IAAI,oBAAoB,GAA4B,KAAK,CAAC,KAAM,CAAC,MAAM,CAAC,UAAC,CAAgB,IAAK,OAAA,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,QAAQ,GAAA,CAAC,CAAC;YAC1H,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE;gBAC1C,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,oBAAoB,CAAC,MAAM,EAAE,CAAC,EAAE;oBAChD,cAAc,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aAClC;;YAGD,IAAI,YAAY,GAAG,EAAE,CAAC;YACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACtD,IAAI,IAAI,GAAkB,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtE,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,QAAQ;oBAChC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC/B;;YAGD,IAAI,aAAa,GAAG,EAAE,CAAC;YACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC1C,IAAI,KAAK,GAAkB,YAAY,CAAC,CAAC,CAAC,CAAC;gBAC3C,IAAI,MAAM,GAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC;;;gBAI9D,KAAM,CAAC,MAAM,GAAG,KAAK,CAAC,QAAQ,IAAI,aAAa,CAAC;gBAChD,KAAM,CAAC,MAAM,GAAG,oBAAoB,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC3D,IAAI,MAAM;oBACA,MAAO,CAAC,MAAM,GAAG,KAAK,CAAC,QAAQ,IAAI,aAAa,CAAC;gBAE3D,aAAa,GAAG,KAAK,CAAC,QAAQ,CAAC;;gBAG/B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE;oBAC1C,IAAI,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC;oBAC5B,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;wBAC3B,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;wBAC9B,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;qBAClC;iBACJ;aACJ;;YAGD,aAAa,GAAG,EAAE,CAAC;YACnB,IAAI,WAAW,GAAG,CAAC,CAAC;YACpB,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,EAAE,CAAC;YAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC5C,IAAI,UAAU,GAAyF,EAAE,CAAC;gBAC1G,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAEzC,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,gBAAgB;oBAC/C,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,CAAC;gBAEpF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC/C,IAAI,IAAI,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;oBAChC,IAAI,IAAI,IAAI,aAAa;wBACrB,WAAW,EAAE,CAAC;yBACb;wBACD,IAAI,WAAW,GAAG,CAAC;4BACf,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,GAAG,aAAa,GAAG,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;wBAChJ,WAAW,GAAG,CAAC,CAAC;wBAChB,aAAa,GAAG,IAAI,CAAC;qBACxB;iBACJ;;gBAGD,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,GAAG,aAAa,GAAG,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC;gBAE5I,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO;oBAChB,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;gBAEjD,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAiB;oBACnG,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;gBAEjD,WAAW,GAAG,CAAC,CAAC;gBAChB,aAAa,GAAG,EAAE,CAAC;aACtB;SACJ;;;;;;;QAQO,kDAAkB,GAAlB,UAAmB,EAAiB,EAAE,QAA6C;YACvF,IAAI,KAAK,GAAG,CAAC,CAAC;YAAC,IAAI,MAAM,GAAG,IAAI,CAAC;YACjC,GAAG;gBACC,MAAM,GAAG,EAAE,CAAC,QAAQ,CAAC;gBACrB,IAAI,MAAM;oBACN,KAAK,EAAE,CAAC;gBACZ,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;aACzB,QAAQ,MAAM,EAAE;YACjB,OAAO,KAAK,CAAC;SAChB;;;;;;QAOM,oDAAoB,GAApB,UAAqB,GAA6B,EAAE,IAAoB;YAC3E,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC;gBACf,OAAO;YAEX,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB,CAAC;;YAExF,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,IAAI,CAAC,EAAE;gBACrC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACjC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;oBAChB,IAAI,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;oBACtD,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBACxC;aACJ;;gBAGG,IAAI,CAAC,GAAG,CAAC,eAAe,GAAG,SAAS,CAAC;SAC5C;;;;;;;;;;;QAYM,6CAAa,GAAb,UAAc,IAAoB,EAAE,QAAiB;YAArD,iBAkCN;;YAhCG,IAAI,UAAU,GAAG,EAAE,CAAC;;YAGpB,IAAI,QAAQ,EAAE;gBACV,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,UAAA,CAAC;oBAC9B,IAAI,UAAU,GAAG,KAAI,CAAC,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,EAAE,IAAI,CAAC,GAAA,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC9D,IAAI,UAAU;wBACV,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;iBACnC,CAAC,CAAC;gBACH,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,UAAU,CAAC;wCAGvB,CAAC;oBACN,IAAI,OAAO,GAAG,OAAK,GAAG,CAAC,SAAS,CAAC,OAAK,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1D,IAAI,UAAU,GAAG,EAAE,CAAC;oBAEpB,OAAK,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,UAAA,CAAC;wBAC9B,IAAI,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,EAAE,IAAI,CAAC,GAAA,CAAC,CAAC,CAAC,CAAC,CAAC;wBACpD,UAAU,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;qBAChC,CAAC,CAAC;oBAEH,OAAK,GAAG,CAAC,SAAS,CAAC,OAAK,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;;;;gBAT7D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE;4BAA3C,CAAC;iBAUT;aACJ;YAED,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ;gBACjB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC;;gBAGhD,IAAI,CAAC,GAAG,CAAC,mBAAmB,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC;YAE5D,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;SACtB;;;;;;QAOM,sCAAM,GAAN,UAAO,UAAyB;YACnC,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC5D,IAAI,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,MAAM;gBAC7F,OAAO;YACX,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,SAAS,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC;;YAGrE,IAAI,GAAG,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,UAAA,CAAC,IAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1E,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,GAAG,CAAC;SACjC;;;;;;QAOM,wCAAQ,GAAR,UAAS,UAAyB;YACrC,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC5D,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,SAAS,EAAE,SAAS,GAAG,CAAC,CAAC,CAAC;;YAGrE,IAAI,GAAG,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,UAAA,CAAC,IAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1E,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,GAAG,CAAC;SACjC;;;;;;QAOM,gDAAgB,GAAhB,UAAiB,UAAyB;YAC7C,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAC5D,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;gBACpB,UAAU,CAAC,UAAU,GAAG,SAAS,CAAC;;gBAGlC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACrD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE;wBACpC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;wBAChE,MAAM;qBACT;iBACJ;aACJ;iBACI;;gBAED,IAAI,UAAU,CAAC,UAAU,IAAI,IAAI,IAAI,UAAU,CAAC,UAAU,IAAI,SAAS;oBACnE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,SAAS,EAAE,UAAU,CAAC,UAAU,CAAC,CAAC;qBACnF;;oBAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBACrD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE;4BACzE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,EAAE,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;4BACpE,MAAM;yBACT;qBACJ;iBACJ;aACJ;YAED,UAAU,CAAC,MAAM,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;SAC1C;;;;;;QAOM,6CAAa,GAAb,UAAc,IAAmB;YACpC,IAAI,CAAC,GAAG,CAAC,kBAAkB,GAAG,IAAI,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK;gBACrC,OAAO;YAEX,IAAI,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC;YAC7B,IAAI,CAAC,uBAAuB,EAAE,CAAC;SAClC;;QAGM,uDAAuB,GAAvB;YAAA,iBAoBN;YAnBG,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,EAAE,CAAC;;YAE7B,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,EAAE,CAAC;YAC7B,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,UAAA,CAAC,IAAM,KAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAE3F,IAAI,gBAAgB,GAAG,EAAE,CAAC;YAE1B,IAAI,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE;gBAC1B,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,OAAO,CAAC,UAAA,CAAC;oBAC9B,IAAI,MAAM,GAAG,KAAI,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,EAAE,IAAI,CAAC,GAAA,CAAC,CAAC,CAAC,CAAC,CAAC;;oBAE/D,IAAI,MAAM;wBACN,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBACrC,CAAC,CAAC;gBAEH,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,gBAAgB,CAAC;aAC9C;YAED,IAAI,CAAC,uBAAuB,EAAE,CAAC;SAClC;;QAGO,qDAAqB,GAArB;YACJ,IAAI,CAAC,GAAG,CAAC,eAAe,GAAG,EAAE,CAAC;YAE9B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE;gBAChD,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SACjE;;QAGM,uDAAuB,GAAvB;;YAEH,IAAI,CAAC,GAAG,CAAC,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,OAAO,GAAA,CAAC,CAAC;SAC9E;;;;;;;;QASM,gEAAgC,GAAhC;YAAA,iBAwDN;;YAtDG,IAAI,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,KAAK,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,OAAO,GAAA,CAAC;gBAC9C,OAAO,KAAK,CAAC;YAEjB,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,aAAa,IAAI,IAAI,CAAC,GAAG,CAAC,IAAsB,IAAI,IAAI,CAAC;YACxG,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,UAAA,CAAC,IAAM,KAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAE3F,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;YAEtC,IAAI,CAAC,wBAAwB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC;;;YAItD,IAAI,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE;gBAC1B,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE;oBAC1B,OAAO,CAAC,KAAK,CAAC,yEAAyE,CAAC,CAAC;oBACzF,OAAO,KAAK,CAAC;iBAChB;gBAED,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;oBACnB,OAAO,CAAC,KAAK,CAAC,gGAAgG,CAAC,CAAC;oBAChH,OAAO,KAAK,CAAC;iBAChB;gBAED,IAAI,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,UAAU,CAAC,OAAO,CAAC;gBAC9E,IAAI,gBAAgB,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,mBAAmB,GAAG,UAAU,CAAC,eAAe,CAAC;gBACtG,IAAI,OAAO,GAAG,EAAE,OAAO,EAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,EAAE,eAAe,EAAY,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC,EAAE,CAAC;gBAClJ,IAAI,CAAC,WAAW,CAAC,KAAK,CAAS,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC;aAChF;;;YAID,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ;gBACjB,UAAU,CAAC;oBACP,IAAI,KAAI,CAAC,GAAG,CAAC,aAAa,EAAE;;wBAExB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;4BAC/D,IAAI,IAAI,GAAG,KAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;4BACrD,IAAI,CAAC,OAAO,GAAG,KAAI,CAAC,GAAG,CAAC,aAAa,CAAC,OAAO,CAAC;4BAC9C,IAAI,CAAC,eAAe,GAAG,KAAI,CAAC,GAAG,CAAC,aAAa,CAAC,eAAe,CAAC;4BAC9D,KAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;yBAC/E;qBACJ;;wBAGG,KAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;iBACxC,CAAC,CAAC;iBACF,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS;gBACvB,UAAU,CAAC,cAAQ,KAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,EAAE,CAAC,CAAC;;YAGzD,IAAI,CAAC,GAAG,CAAC,kBAAkB,GAAG,IAAI,CAAC;YACnC,OAAO,IAAI,CAAC;SACf;;;;;;QAOM,2CAAW,GAAX,UAAY,EAAU;YACzB,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAC/B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,EAAE,IAAI,EAAE,GAAA,CAAC,CAAC,CAAC;YACrE,IAAI,CAAC,gCAAgC,EAAE,CAAC;SAC3C;;QAGM,wDAAwB,GAAxB;YAAA,iBAKN;YAJG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,UAAA,CAAC;gBAC7B,IAAI,CAAC,CAAC,CAAC,KAAK;oBACR,CAAC,CAAC,OAAO,GAAG,KAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC;aAC9C,CAAC,CAAC;SACN;oCACJ;KAAA;;ICxxBD;IAGA;IACA;;QAGI,4BAAoB,GAAqB;YAArB,QAAG,GAAH,GAAG,CAAkB;SAAK;;;;;;;;;;;QAYvC,+CAAkB,GAAlB,UAAmB,IAAY,EAAE,cAAwB,EAAE,IAAiB;YAC/E,IAAI,IAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE;gBACzD,OAAO,IAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;aAClE;iBAAM;gBACH,IAAI,IAAI,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;gBAC1D,IAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;gBAC/D,OAAO,IAAI,CAAC;aACf;SACJ;;;;;;;;;;;QAYO,0CAAa,GAAb,UAAc,IAAY,EAAE,IAAc,EAAE,IAAiB;YAEjE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE;gBAChC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAEjE,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACjD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;SAC3B;;QAGM,2DAA8B,GAA9B;;YAEH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,IAAI,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,IAAI,CAAC;gBAC/D,OAAO;YAEX,IAAI,eAAe,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;YACjE,IAAI,CAAC,eAAe,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,2BAA2B,IAAI,IAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC,MAAM,GAAG,CAAC,CAAC;gBACpI,OAAO;YAEX,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,2BAA2B,IAAI,IAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC,MAAM,IAAI,CAAC,GAAG;gBAC7F,IAAI,KAAK,GAA2B,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;gBAC7E,IAAI,CAAC,GAAG,CAAC,2BAA2B,GAAG,EAAE,CAAC;gBAC1C,KAAK,IAAI,GAAG,IAAI,KAAK;oBACjB,IAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC,IAAI,CAAC,IAAI,wBAAwB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;gBACtF,IAAI,CAAC,GAAG,CAAC,sBAAsB,GAAG,KAAK,CAAC;aAC3C;;gBAGG,IAAI,CAAC,GAAG,CAAC,sBAAsB,GAAG,IAAI,CAAC;SAC9C;iCAEJ;KAAA;;ICnED;IACA;;QAGI,uBAAoB,GAAqB,EAAU,OAAsB,EAAU,OAAuB;YAAtF,QAAG,GAAH,GAAG,CAAkB;YAAU,YAAO,GAAP,OAAO,CAAe;YAAU,YAAO,GAAP,OAAO,CAAgB;SAAK;;;;;;QAOxG,iCAAS,GAAT,UAAU,MAAe;YAAzB,iBAqBN;YApBG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc;gBACxB,OAAO;YAEX,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU;gBACnB,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;;gBAGhC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,UAAC,IAAW,EAAE,MAAuB;oBAAvB,uBAAA,EAAA,cAAuB;oBACzD,IAAI,MAAM;wBACN,OAAO;oBAEX,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE;wBAClB,KAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC,CAAC;wBAC9E,OAAO;qBACV;oBAED,KAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;oBACvB,KAAI,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;oBAC7B,UAAU,CAAC,cAAQ,KAAI,CAAC,GAAG,CAAC,gBAAgB,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;iBAC1E,CAAC,CAAC;SACV;;;;;;QAOO,mCAAW,GAAX,UAAY,KAAY;YAC5B,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,2BAA2B,CAAC;YAEhD,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,UAAA,CAAC,IAAM,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC,CAAC,YAAY,EAAE,KAAK,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YAC5N,IAAI,CAAC,GAAG,CAAC,IAAI,GAAG,KAAK,CAAC;SACzB;4BACJ;KAAA;;ICjDD;IACA;;QAGI,8BAAoB,GAAqB;YAArB,QAAG,GAAH,GAAG,CAAkB;SAAK;;;;;;QAOvC,oDAAqB,GAArB,UAAsB,IAAW;;YAEpC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM;gBACrB,OAAO;;YAGX,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;gBACzC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,SAAS;oBACjC,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,UAAU,CAAC;gBACpC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,SAAS;oBAC3B,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC;aAC9B;;YAGD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE;gBACzC,OAAO,CAAC,KAAK,CAAC,yIAAyI,CAAC,CAAC;gBACzJ,OAAO;aACV;;YAGD,IAAI,YAAY,GAAG,CAAC,CAAC;YACrB,IAAI,QAAQ,GAAG,CAAC,CAAC;YACjB,GAAG;gBACC,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;gBAChD,YAAY,EAAE,CAAC;aAClB,QAAQ,QAAQ,GAAG,CAAC,EAAE;;SAE1B;;;;;;;;;QAUO,0CAAW,GAAX,UAAY,IAAW,EAAE,aAAqB;YAClD,IAAI,QAAQ,GAAG,CAAC,CAAC;YACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAClC,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;;gBAGlB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,aAAa,IAAI,CAAC,EAAE;oBAChD,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC;oBACf,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC;oBACpB,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC;oBACxC,QAAQ,EAAE,CAAC;oBACX,SAAS;iBACZ;;gBAGD,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,aAAa,GAAG,CAAC,EAAE;;oBAE9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;wBAClC,IAAI,cAAc,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;;wBAG7B,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,cAAc,CAAC,MAAM,IAAI,aAAa,GAAG,CAAC,EAAE;4BAC1G,GAAG,CAAC,MAAM,GAAG,aAAa,CAAC;;;4BAI3B,cAAc,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC;4BACnD,cAAc,CAAC,MAAM,GAAG,IAAI,CAAC;4BAC7B,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC;4BACvC,QAAQ,EAAE,CAAC;4BACX,MAAM;yBACT;qBACJ;iBACJ;aACJ;YACD,OAAO,QAAQ,CAAC;SACnB;;;;;;QAOM,2CAAY,GAAZ,UAAa,GAAW;YAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAClD,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;;gBAGlC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE;oBAC7B,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC;oBAErB,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;wBACrD,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;;wBAGrC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,GAAG;4BAChC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;qBAC7B;oBACD,OAAO;iBACV;aACJ;SACJ;;;;;;QAOM,6CAAc,GAAd,UAAe,GAAW;YAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAClD,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;;gBAGlC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE;oBAC7B,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC;;oBAGtB,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC;oBAChC,OAAO;iBACV;aACJ;SACJ;;;;;;QAOO,oDAAqB,GAArB,UAAsB,SAAiB;YAC3C,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE;gBACrD,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;;;gBAIrC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,CAAC,KAAK,CAAC,MAAM;oBACvD,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;qBACtB,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,KAAK,CAAC,MAAM,EAAE;oBAC7D,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;oBACxB,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC;oBACvB,IAAI,CAAC,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;iBACtD;aACJ;SACJ;mCACJ;KAAA;;ICtJD;IAMA;IACA;;QAGI,sBAAoB,GAAqB,EAAU,SAA2B;YAA1D,QAAG,GAAH,GAAG,CAAkB;YAAU,cAAS,GAAT,SAAS,CAAkB;SAAK;;;;;;;;;;QAW5E,qCAAc,GAAd,UAAe,YAA6B,EAAE,aAA8B,EAAE,aAA8B;YAA7F,6BAAA,EAAA,oBAA6B;YAAE,8BAAA,EAAA,qBAA8B;YAAE,8BAAA,EAAA,qBAA8B;YAC/G,IAAI,KAAK,GAAU,EAAE,CAAC;YAEtB,KAAK,IAAI,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,YAAY,SAAS,GAAG;gBAC3D,KAAK,GAAG,IAAI,CAAC,oBAAoB,EAAE,CAAC;aACvC;iBACI,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE;gBACzB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,UAAA,GAAG,IAAM,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;;gBAGpD,IAAI,IAAI,CAAC,GAAG,CAAC,kBAAkB,IAAI,CAAC,aAAa,EAAE;;oBAG/C,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,EACvB;wBACI,IAAI,CAAC,GAAG,CAAC,qBAAqB,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,oBAAoB,CAAC;wBAC1E,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC;wBAClD,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC;qBACvD;;yBAEI,IAAI,aAAa;wBAClB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;oBAEvD,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;iBACpC;qBAAM;oBACH,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,IAAa,CAAC;iBAClC;aACJ;;YAGD,IAAI,YAAY;gBACZ,OAAO,KAAK,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,GAAA,CAAC,CAAC;YAE1C,OAAO,KAAK,CAAC;SAChB;;;;;;;;QASM,oCAAa,GAAb,UAAc,QAAgB;YACjC,IAAI,CAAC,GAAG,CAAC,qBAAqB,GAAG,QAAQ,CAAC;YAC1C,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,IAAI,CAAE,IAAI,CAAC,GAAG,CAAC,IAAc,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;YACtG,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC;;YAG3B,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC;SACjC;;;;QAKO,2CAAoB,GAApB;YAAA,iBAwBP;;YAvBG,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAsB,CAAC;YACjD,IAAI,SAAS,GAAG,UAAU,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,WAAW,GAAA,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;;YAGnG,IAAI,CAAC,CAAA,MAAA,UAAU,CAAC,eAAe,0CAAE,MAAM,KAAI,SAAS,IAAI,CAAA,MAAA,UAAU,CAAC,eAAe,0CAAE,MAAM,KAAI,CAAC,KAAK,SAAS,GAAG,CAAC,EAAE;gBAC/G,IAAI,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC;gBAC5B,GAAG,CAAC,OAAO,CAAC,UAAA,GAAG;;oBAGL,GAAI,CAAC,MAAM,GAAG,IAAI,CAAC;;oBAGzB,KAAI,CAAC,SAAS,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;iBACzC,CAAC,CAAC;gBACH,OAAO,GAAG,CAAC;aACd;iBACI;gBACD,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,GAAI,IAAI,CAAC,GAAG,CAAC,IAAY,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,GAAI,IAAI,CAAC,GAAG,CAAC,IAAY,CAAC,MAAM,GAAI,IAAI,CAAC,GAAG,CAAC,IAAY,CAAC,KAAK,CAAC;gBAC5J,IAAI,CAAC,GAAG;oBAAE,GAAG,GAAG,EAAE,CAAC;;gBAEnB,GAAG,CAAC,OAAO,CAAC,UAAA,GAAG,IAAY,GAAI,CAAC,KAAK,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;gBACjD,OAAO,GAAG,CAAC;aACd;SACJ;;QAGO,wCAAiB,GAAjB;YACJ,IAAI,QAAQ,GAAU,EAAE,CAAC;;;;YAKzB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU;gBACpB,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;;gBAE1G,OAAO,IAAI,CAAC,GAAG,CAAC,IAAa,CAAC;;YAGlC,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,qBAAqB,EAAE,CAAC,EAAE,EAAE;gBAC5I,IAAI,CAAC,IAAK,IAAI,CAAC,GAAG,CAAC,IAAc,CAAC,MAAM,GAAG,CAAC;oBACxC,QAAQ,CAAC,IAAI,CAAE,IAAI,CAAC,GAAG,CAAC,IAAc,CAAC,CAAC,CAAC,CAAC,CAAC;aAClD;YAED,OAAO,QAAQ,CAAC;SACnB;;;;;;QAOM,oCAAa,GAAb;;YAEH,IAAI,KAAK,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YAClC,IAAI,CAAC,KAAK;gBACN,OAAO,EAAE,CAAC;YAEd,IAAI,UAAU,GAAG,EAAE,CAAC;YACpB,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC7B,IAAI,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gBAClG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;aAC/B;YACD,OAAO,UAAU,CAAC;SACrB;;QAGM,+CAAwB,GAAxB;YAAA,iBAGN;YAFG,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;gBAC/B,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,UAAA,CAAC,IAAM,KAAI,CAAC,GAAG,CAAC,WAAW,GAAG,KAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,IAAK,OAAA,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,GAAA,CAAC,CAAC,EAAE,CAAC,CAAC;SACvK;2BACJ;KAAA;;ICjJD;IAGA;IACA;;QAGI,2BAAoB,GAAqB,EAAU,SAA2B;YAA1D,QAAG,GAAH,GAAG,CAAkB;YAAU,cAAS,GAAT,SAAS,CAAkB;SAAK;;;;;;;;;QAU5E,mDAAuB,GAAvB,UAAwB,GAAiB;YAC5C,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,YAAY,gBAAgB,CAAC,EAAE;gBAC9C,OAAO,CAAC,KAAK,CAAC,6EAA6E,CAAC,CAAC;gBAC7F,OAAO;aACV;YAED,IAAI,SAAS,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;YACzD,IAAI,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI,MAAM,CAAC,CAAC;YAC/C,GAAG,CAAC,KAAK,GAAG,SAAS,CAAC;YAEtB,IAAI,KAAkB,CAAC;YACvB,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,MAAM,IAAI,GAAG,CAAC,EAAE,GAAA,CAAC,GAAG,EAAE,CAAC;YAChG,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE;gBACnC,KAAK,GAAG,IAAI,WAAW,EAAE,CAAC;gBAC1B,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,EAAE,CAAC;gBACtB,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;gBACxB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM;oBACrB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;gBAE9B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACpC;iBACI,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,EAAE;;gBAE3B,IAAI,CAAC,GAAG,CAAC,KAAK;oBACV,QAAQ,GAAG,EAAE,CAAC;;oBAGd,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC;aACrC;;gBAGG,OAAO,CAAC,IAAI,CAAC,2CAA2C,GAAG,GAAG,CAAC,EAAE,GAAG,4BAA4B,GAAG,QAAQ,CAAC,MAAM,GAAG,sBAAsB,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC;;YAG7J,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;SACrC;;QAGM,gDAAoB,GAApB;YAAA,iBAsBN;YArBG,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,YAAY,gBAAgB,CAAC,EAAE;gBAC9C,OAAO,CAAC,KAAK,CAAC,0EAA0E,CAAC,CAAC;gBAC1F,OAAO;aACV;;YAGD,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE;gBACzD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAA,CAAC;oBAC1B,KAAI,CAAC,GAAG,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,MAAM,GAAA,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;iBAClF,CAAC,CAAC;aACN;;YAGD,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC,CAAC;gBACjC,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC;iBACpD,IAAI,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC,CAAC;gBACtC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC;YAEzD,IAAI,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC,CAAC;YACrD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;YACnE,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACrG;gCACJ;KAAA;;ICtED;IACA;;QAUI,4BAAoB,GAAqB,EAAU,SAA2B,EAAU,QAAqB;YAAzF,QAAG,GAAH,GAAG,CAAkB;YAAU,cAAS,GAAT,SAAS,CAAkB;YAAU,aAAQ,GAAR,QAAQ,CAAa;;YAPtG,iBAAY,GAAuB,IAAI,GAAG,EAAiB,CAAC;;YAE5D,gBAAW,GAAuB,IAAI,GAAG,EAAiB,CAAC;;YAE3D,uBAAkB,GAAyB,IAAI,GAAG,EAAmB,CAAC;SAGqC;;;;;;;;;;;QAY3G,uDAA0B,GAA1B,UAA2B,IAAoB,EAAE,YAAoB;;YAArE,iBAqJN;;;;YAlJG,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,eAAe,0CAAE,MAAM,KAAI,CAAC,KAAK,CAAC,EAAE;gBAC1C,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC;gBAC/C,IAAI,CAAC,YAAY,GAAG,IAAI,GAAG,EAAiB,CAAC;gBAC7C,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAiB,CAAC;gBAC5C,IAAI,CAAC,kBAAkB,GAAG,IAAI,GAAG,EAAmB,CAAC;gBAErD,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,UAAA,GAAG;oBAC/B,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,MAAM,EAAU,GAAI,CAAC,MAAM,EAAE,KAAK,EAAU,GAAI,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,CAAC;oBAChG,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,GAAW,GAAI,CAAC,KAAK,GAAG,IAAI,CAAC;oBACtD,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC;oBAEpB,KAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;iBAC5C,CAAC,CAAC;;gBAGH,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;gBAC3C,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;gBACjD,IAAI,CAAC,GAAG,CAAC,wBAAwB,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAU,SAAU,CAAC,MAAM,EAAE,KAAK,EAAU,SAAU,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,YAAY,EAAU,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAE,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC5N,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC;aAC9C;iBACI;;;;;;;;;;;;;;;;;;;;;;;;;;;gBA2BD,IAAI,mBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,IAAI,YAAY,CAAC;gBAEpE,IAAI,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;gBACjC,IAAI,WAAW,GAAG,CAAC,CAAC;gBACpB,IAAI,WAAW,GAAG,IAAI,CAAC;gBACvB,IAAI,UAAQ,GAAW,EAAE,CAAC;gBAC1B,IAAI,YAAU,GAAyB,EAAE,CAAC;;gBAG1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAClD,IAAI,EAAE,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;oBACjC,UAAQ,IAAI,EAAE,CAAC,KAAK,CAAC;oBACrB,YAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;oBACxD,KAAK,IAAI,GAAC,GAAG,WAAW,EAAE,GAAC,GAAG,KAAK,CAAC,MAAM,EAAE,GAAC,EAAE,EAAE;wBAC7C,IAAI,CAAC,GAAG,KAAK,CAAC,GAAC,CAAC,CAAC;wBACjB,IAAI,GAAC,IAAI,WAAW,IAAI,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,KAAK,EAAE;4BAC9E,WAAW,GAAG,GAAC,CAAC;4BAAC,WAAW,GAAG,CAAC,CAAC;;4BAEjC,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC;4BAC7B,MAAM;yBACT;qBACJ;iBACJ;gBAED,IAAI,qBAAmB,CAAC;gBACxB,IAAI,2BAAyB,CAAC;;gBAG9B,IAAI,CAAC,mBAAiB,EAAE;oBACpB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAQ,EAAE,EAAE,CAAC,CAAC;oBACnC,qBAAmB,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,UAAQ,CAAC,CAAC;iBACxD;qBACI;;;wBAED,KAAgB,IAAA,KAAA,SAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAA,gBAAA;4BAAzC,IAAI,GAAG,WAAA;4BACR,IAAI,GAAG,CAAC,UAAU,CAAC,UAAQ,CAAC;gCACxB,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;yBAAA;;;;;;;;;;wBAE5C,KAAgB,IAAA,KAAA,SAAA,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAA,gBAAA;4BAAlC,IAAI,GAAG,WAAA;4BACR,IAAI,GAAG,CAAC,UAAU,CAAC,UAAQ,CAAC;gCACxB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;yBAAA;;;;;;;;;oBAErC,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAQ,EAAE,EAAE,CAAC,CAAC;oBAC1C,2BAAyB,GAAG,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,UAAQ,CAAC,CAAC;iBACrE;;;;gBAKD,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,UAAA,GAAG;oBAC/B,GAAG,CAAC,OAAO,GAAG,UAAQ,CAAC;oBACvB,GAAG,CAAC,YAAY,GAAG,YAAU,CAAC;oBAC9B,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,MAAM,0CAAO,YAAU,KAAE,IAAI,kBAAkB,CAAS,GAAI,CAAC,MAAM,EAAU,GAAI,CAAC,KAAK,CAAC,KAAI,EAAE,CAAC;oBACpH,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,MAAM,GAAG,UAAQ,GAAW,GAAI,CAAC,KAAK,GAAG,UAAQ,CAAC;;oBAGrE,IAAI,mBAAiB,EAAE;wBACnB,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;wBAC9C,KAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;wBACzC,2BAAyB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;qBACvC;yBACI;;wBAED,qBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;qBACjC;iBACJ,CAAC,CAAC;;;;;;gBAOH,IAAI,mBAAiB,IAAI,IAAI,CAAC,UAAU,EAAE;oBACtC,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,YAAU,CAAC,MAAM,CAAC,GAAA,CAAC,CAAC;oBAC/G,IAAI,CAAC,GAAG,CAAC,wBAAwB,GAAG,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,YAAU,CAAC,MAAM,CAAC,GAAA,CAAC,CAAC;iBAC5H;gBAED,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,EAAE,CAAC,CAAC,OAAO,IAAI,UAAQ,CAAC,GAAA,CAAC,CAAC;gBAElF,IAAI,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;gBAClD,IAAI,mBAAiB;oBACjB,SAAS,CAAC,YAAY,GAAG,MAAiB,IAAI,CAAC,GAAG,CAAC,IAAK,0CAAE,UAAU,CAAC;;gBAGzE,CAAA,KAAA,IAAI,CAAC,GAAG,CAAC,WAAW,EAAC,MAAM,0BAAC,WAAW,GAAG,CAAC,EAAE,CAAC,UAAK,IAAI,CAAC,GAAG,CAAC,cAAc,IAAE;;gBAG5E,IAAI,OAAO,GAAG,KAAK,CAAC;gBACpB,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,IAAI,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,UAAQ,EAAE,YAAU,EAAE,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,mBAAiB,GAAG,QAAQ,GAAG,OAAO,CAAC,CAAC,CAAC;;gBAG1N,IAAI,OAAK,GAAG,EAAE,IAAI,EAAE,UAAQ,EAAE,KAAK,EAAE,YAAU,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,YAAY,EAAE,mBAAiB,GAAW,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,CAAE,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;gBACpK,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,SAAS,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,IAAI,IAAI,OAAK,CAAC,IAAI,IAAI,CAAC,CAAC,YAAY,IAAI,OAAK,CAAC,YAAY,GAAA,CAAC,CAAC;gBAC1H,IAAI,IAAI,IAAI,CAAC,CAAC;oBACV,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,IAAI,CAAC,OAAK,CAAC,CAAC;;oBAG9C,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,OAAK,CAAC,CAAC;aAChE;SACJ;;;;;;QAOM,qDAAwB,GAAxB,UAAyB,GAA6B;YACzD,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC;gBACf,OAAO;YAEX,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBAC7B,OAAO;YAEX,IAAI,YAAY,GAAY,EAAE,CAAC;YAC/B,IAAI,kBAAkB,GAAyB,EAAE,CAAC;YAElD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACjC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAkB,CAAC;gBAEjC,IAAI,EAAE,CAAC,OAAO;oBACV,YAAY,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;qBAC1C,IAAI,EAAE,CAAC,aAAa;oBACrB,kBAAkB,0CAAO,kBAAkB,WAAK,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,EAAC,CAAC;aACtF;YAED,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE;;gBAEzB,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;gBAC1B,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,CAAC;gBAEhC,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC;gBAC9B,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,EAAE,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,kBAAkB,EAAE,IAAI,CAAC,CAAC;aACnH;SACJ;;;;;;;;QASM,iDAAoB,GAApB,UAAqB,EAAiB;YACzC,IAAI,GAAG,GAAG,EAAE,CAAC;;YAEb,IAAI,EAAE,CAAC,aAAa,EAAE;gBAClB,IAAI,CAAC,kCAAkC,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,UAAC,GAAkB;oBACnE,IAAI,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBAC9E,IAAI,QAAQ,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC;oBAEzH,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM;wBAClC,MAAM,kHAAkH,CAAC;oBAE7H,GAAG,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC;iBACvG,CAAC,CAAC;aACN;iBACI,IAAI,EAAE,CAAC,OAAO;gBACf,GAAG,CAAC,IAAI,CAAC,IAAI,kBAAkB,CAAC,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;YAElD,OAAO,GAAG,CAAC;SACd;;;;;;;;QAUO,+DAAkC,GAAlC,UAAmC,EAAiB;YACxD,IAAI,CAAC,EAAE,CAAC,aAAa;gBACjB,OAAO,EAAE,CAAC;;YAGd,IAAI,EAAE,CAAC,eAAe;gBAClB,OAAO,EAAE,CAAC,eAAe,CAAC;YAE9B,IAAI,GAAG,GAAG,EAAE,CAAC;YACb,IAAI,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC;YAC/B,IAAI,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;YACnD,IAAI,CAAC,OAAO;gBACR,OAAO,EAAE,CAAC;YACd,OAAO,CAAC,OAAO,CAAC,UAAA,CAAC;gBACb,IAAI,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACzB,IAAI,IAAI,GAAG,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC;gBAC1B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;;oBAElB,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBAC1B,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;iBACpD;gBAED,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAyB,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;aAC7E,CAAC,CAAC;YAEH,EAAE,CAAC,eAAe,GAAG,GAAG,CAAC;YACzB,OAAO,GAAG,CAAC;SACd;;;;;;;;;;;QAYO,+CAAkB,GAAlB,UAAmB,IAAa,EAAE,YAAoB,EAAE,KAAY,EAAE,YAAkC,EAAE,MAAY;;YAE1H,IAAI,YAAY,IAAI,CAAC;gBACjB,KAAK,CAAC,OAAO,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,QAAQ,GAAG,KAAK,GAAA,CAAC,CAAC;YAE3C,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC;YAC7B,IAAI,GAAG,GAAU,EAAE,CAAC;YACpB,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,IAAI,YAAY,GAAG,CAAC,CAAC;YAC3C,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;oCAC9C,IAAI;gBACT,IAAI,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;gBACxB,IAAI,EAAE,GAAG,IAAI,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBAClD,EAAE,CAAC,YAAY,GAAG,OAAK,oBAAoB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;gBAEhE,IAAI,KAAK,GAAS,EAAG,CAAC;gBACtB,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;gBACpB,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;gBACxB,IAAI,CAAC,MAAM,EAAE;oBACT,KAAK,CAAC,UAAU,GAAG,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC;oBAC5D,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC;oBAC1B,KAAK,CAAC,WAAW,GAAG,CAAC,CAAC;iBACzB;qBACI;oBACD,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC;oBAChC,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC,UAAU,CAAC;oBACvC,KAAK,CAAC,UAAU,0CAAO,MAAM,CAAC,UAAU,KAAE,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,EAAC,CAAC;oBAClF,KAAK,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC;oBAC5C,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC;iBAC9C;;;gBAID,IAAI,YAAY,IAAI,CAAC;oBACjB,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC;gBAE1B,OAAK,SAAS,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;gBACtC,OAAK,SAAS,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;;gBAGxC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBAChB,OAAK,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBAC7C,IAAI,CAAC,IAAI,EAAE;;oBAGP,IAAI,iBAAiB,GAAG,OAAK,kBAAkB,CAAC,IAAI,EAAE,YAAY,GAAG,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;oBACnG,IAAI,WAAW,GAAG,iBAAiB,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,GAAA,CAAC,CAAC;oBACzF,KAAK,CAAC,YAAY,GAAG,WAAW,CAAC,MAAM,CAAC;;oBAGxC,GAAG,CAAC,IAAI,OAAR,GAAG,2BAAS,iBAAiB,IAAE;oBAC/B,OAAK,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;iBAC5D;qBACI;;oBAED,IAAI,CAAC,OAAO,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,GAAA,CAAC,CAAC;oBAE/C,GAAG,CAAC,IAAI,OAAR,GAAG,2BAAS,IAAI,IAAE;oBAClB,OAAK,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;iBAC9C;;;YAjDL,KAAK,IAAI,IAAI,IAAI,MAAM;wBAAd,IAAI;aAkDZ;YACD,OAAO,GAAG,CAAC;SACd;;;;;;;QAQO,iDAAoB,GAApB,UAAqB,KAAY,EAAE,YAAkC;YACzE,IAAI,IAAI,GAAuB,EAAE,CAAC;YAClC,IAAI,gBAAgB,GAAG,EAAE,EAAE,OAAO,GAAG,IAAI,EAAE,SAAS,GAAG,IAAI,EAAE,OAAO,GAAG,IAAI,EAAE,SAAS,GAAG,IAAI,CAAC;YAE9F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC1C,IAAI,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;gBAC1B,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC;gBACrB,IAAI,CAAC,OAAO;oBACR,SAAS;gBAEb,QAAQ,GAAG,CAAC,QAAQ;oBAChB,KAAK,QAAQ;wBAAE,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,GAAA,CAAC,CAAC;wBAAC,MAAM;oBACxE,KAAK,MAAM;wBAAE,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,GAAA,CAAC,CAAC;wBAAC,MAAM;oBAC7E,KAAK,QAAQ;wBAAE,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAA,CAAC,CAAC;wBAAC,MAAM;iBAC5E;gBAED,QAAQ,GAAG,CAAC,WAAW;oBACnB,KAAK,KAAK;wBACN,QAAQ,GAAG,CAAC,QAAQ;4BAChB,KAAK,QAAQ;gCAAE,gBAAgB,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC;gCAAC,MAAM;4BACvE,KAAK,MAAM;gCAAE,gBAAgB,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,OAAR,IAAI,2BAAQ,OAAO,IAAE,CAAC,QAAQ,EAAE,CAAC;gCAAC,MAAM;4BACjF,KAAK,QAAQ;gCAAE,gBAAgB,GAAG,IAAI,CAAC,GAAG,OAAR,IAAI,2BAAQ,SAAS,IAAE,QAAQ,EAAE,CAAC;gCAAC,MAAM;yBAC9E;wBACD,MAAM;oBACV,KAAK,KAAK;wBACN,QAAQ,GAAG,CAAC,QAAQ;4BAChB,KAAK,QAAQ;gCAAE,gBAAgB,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;gCAAC,MAAM;4BAC7D,KAAK,MAAM;gCAAE,gBAAgB,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,OAAR,IAAI,2BAAQ,OAAO,IAAE,CAAC,QAAQ,EAAE,CAAC;gCAAC,MAAM;4BACjF,KAAK,QAAQ;gCAAE,gBAAgB,GAAG,IAAI,CAAC,GAAG,OAAR,IAAI,2BAAQ,SAAS,IAAE,QAAQ,EAAE,CAAC;gCAAC,MAAM;yBAC9E;wBACD,MAAM;oBACV,KAAK,KAAK;wBACN,QAAQ,GAAG,CAAC,QAAQ;4BAChB,KAAK,QAAQ;gCAAE,gBAAgB,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gCAAC,MAAM;4BAC9D,KAAK,MAAM;gCAAE,gBAAgB,GAAG,EAAE,CAAC;gCAAC,MAAM;4BAC1C,KAAK,QAAQ;gCAAE,gBAAgB,GAAG,SAAS,CAAC,MAAM,CAAC,UAAC,GAAG,EAAE,IAAI,IAAK,OAAA,GAAG,GAAG,IAAI,GAAA,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;gCAAC,MAAM;yBACtG;wBACD,MAAM;iBACb;gBACD,IAAI,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAC;aAClF;YAED,OAAO,IAAI,CAAC;SACf;;;;;;;;;;;;QAaM,8CAAiB,GAAjB,UAAkB,IAAoB,EAAE,MAAc,EAAE,KAA2B,EAAE,KAAa,EAAE,QAA4B;YACnI,IAAI,IAAI,GAAG,IAAI,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;YACnF,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACtE,IAAI,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;YACrC,OAAO,IAAI,CAAC;SACf;;;;;;;;;;;;QAcM,oDAAuB,GAAvB,UAAwB,MAAc,EAAE,SAAwB;YAAhE,iBAkBN;;YAhBG,IAAI,qBAAqB,GAAG,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,YAAY,IAAI,MAAM,GAAA,CAAC,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,IAAI,GAAA,CAAC,CAAC;;YAGrH,IAAI,CAAC,qBAAqB,IAAI,qBAAqB,CAAC,MAAM,IAAI,CAAC;gBAC3D,qBAAqB,GAAG,IAAI,CAAC,GAAG,CAAC,wBAAwB,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,YAAY,GAAA,CAAC,CAAC,GAAG,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,IAAI,GAAA,CAAC,CAAC;;YAG5G,IAAI,CAAC,qBAAqB,IAAI,qBAAqB,CAAC,MAAM,IAAI,CAAC;gBAC3D,OAAO;YAEX,qBAAqB,CAAC,OAAO,CAAC,UAAA,EAAE;;gBAE5B,EAAE,CAAC,MAAM,GAAG,SAAS,CAAC;gBACtB,EAAE,CAAC,UAAU,GAAG,IAAI,CAAC;gBACrB,KAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;aACzC,CAAC,CAAC;SACN;;;;;;;;;;QAWM,gDAAmB,GAAnB,UAAoB,GAAU,EAAE,IAAY,EAAE,MAAqB;YAAnE,iBAoBN;YAnBG,IAAU,GAAI,CAAC,IAAI;gBACf,OAAO,EAAE,CAAC;YACd,IAAI,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC;YACnC,IAAI,GAAG,CAAC,MAAM,IAAI,IAAI,EAAE;gBACpB,IAAI,UAAU,GAAS,GAAI,CAAC,YAAY,GAAG,KAAK,GAAS,GAAI,CAAC,YAAY,GAAG,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC;gBAClH,OAAO,GAAG,CAAC,KAAK,GAAG,IAAI,GAAG,GAAG,CAAC,KAAK,GAAG,UAAU,GAAG,GAAG,CAAC;aAC1D;iBACI;gBAED,IAAI,KAAG,GAA4C,GAAI,CAAC,kBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACtF,IAAI,CAAC,KAAG;oBACJ,OAAO,EAAE,CAAC;gBAEd,IAAI,CAAC,kCAAkC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,UAAC,GAAkB;oBACvE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAI,CAAC,sBAAsB,CAAC,KAAG,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;iBACpG,CAAC,CAAC;gBAEH,OAAO,OAAO,CAAC;aAClB;SACJ;;;;;;;;;QAUO,mDAAsB,GAAtB,UAAuB,KAAa,EAAE,MAAe;YACzD,IAAI,CAAC,MAAM;gBACP,OAAO,KAAK,CAAC;YAEjB,IAAI,QAAQ,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;YAE3E,IAAI,QAAQ,IAAI,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACrE,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAEjE,IAAI,IAAI,GAAG,IAAI,CAAC;;;YAGhB,IAAI;gBAAE,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;aAAE;YAAC,WAAM,GAAG;YAEhE,IAAI,IAAI;gBACJ,OAAO,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,IAAI,OAAO,EAAE,MAAM,IAAI,UAAU,CAAC,CAAC;;YAGrF,OAAO,KAAK,CAAC;SAChB;iCACJ;KAAA;;IC/fD;IACA;;QAqBI,0BAAoB,GAAqB,EAAU,SAA6B;YAA5D,QAAG,GAAH,GAAG,CAAkB;YAAU,cAAS,GAAT,SAAS,CAAoB;;YAlBxE,eAAU,GAAqB,IAAI,GAAG,EAAE,CAAC;;YAEzC,gBAAW,GAAqB,IAAI,GAAG,EAAE,CAAC;;YAE1C,oBAAe,GAAqB,IAAI,GAAG,EAAE,CAAC;;YAE9C,0BAAqB,GAAqB,IAAI,GAAG,EAAE,CAAC;;YAGpD,iBAAY,GAAwB,IAAI,GAAG,EAAE,CAAC;;YAE9C,kBAAa,GAAwB,IAAI,GAAG,EAAE,CAAC;;YAE/C,sBAAiB,GAAwB,IAAI,GAAG,EAAE,CAAC;;YAEnD,4BAAuB,GAAwB,IAAI,GAAG,EAAE,CAAC;SAGoB;;QAG9E,+CAAoB,GAApB;YACH,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACxB,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,CAAC;YAC7B,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;YAEnC,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC;YAC1B,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;YAC3B,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC;YAC/B,IAAI,CAAC,uBAAuB,CAAC,KAAK,EAAE,CAAC;SACxC;;;;;;;QAQM,4CAAiB,GAAjB,UAAkB,KAAY,EAAE,aAAkC;YACrE,IAAI,CAAC,aAAa;gBACd,OAAO;YAEX,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;SACxD;;;;;;;QAQO,oDAAyB,GAAzB,UAA0B,KAAY,EAAE,aAAkC;YAC9E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACnC,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACnB,IAAI,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC;gBACrB,IAAI,SAAS,GAAG,GAAG,CAAC,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;;;gBAG3D,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;gBAEzB,IAAI,GAAG,CAAC,KAAK,EAAE;oBACX,IAAI,aAAa,CAAC,GAAG;wBACjB,GAAG,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,KAAK,CAAC,CAAC,CAAC;;wBAEjL,GAAG,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,IAAI,UAAU,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,KAAK,CAAC,CAAC,CAAC,CAAC;iBACzO;qBACI,IAAI,GAAG,CAAC,MAAM,EAAE;oBACjB,IAAI,aAAa,CAAC,GAAG;wBACjB,GAAG,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC;;wBAElG,GAAG,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,UAAU,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;iBACzI;aACJ;;;YAID,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,GAAA,CAAC,CAAC,KAAK,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,GAAA,CAAC,CAAC;YACxI,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,aAAa,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;;;YAItE,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE;gBACpB,IAAI,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC;gBAC5C,IAAI,CAAC,6BAA6B,CAAC,aAAa,CAAC,CAAC;gBAClD,IAAI,IAAI,CAAC,GAAG,CAAC,eAAe,IAAI,YAAY;oBACxC,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;aACvD;SACJ;;;;;;QAOO,yCAAc,GAAd,UAAe,IAAS;YAC5B,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;YACrB,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC;gBACxB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAEnC,IAAI,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,CAAC;gBACnC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAE9C,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;gBACzB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAEpC,IAAI,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,CAAC;gBAC7B,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;SAC3C;;;;;;;;;;;QAYO,2CAAgB,GAAhB,UAAiB,GAAQ;YAC7B,IAAI,CAAC,GAAG;gBACJ,OAAO,MAAM,CAAC;YAElB,IAAI,WAAW,GAAQ,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAEpE,IAAI,CAAC,WAAW;gBACZ,OAAO,MAAM,CAAC;YAElB,IAAI,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC;gBACjD,OAAO,UAAU,CAAC;YAEtB,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC;gBACvC,OAAO,UAAU,CAAC;YAEtB,OAAO,IAAI,CAAC,gBAAgB,CAAC,WAAW,CAAC,CAAC;SAC7C;;;;;;;;;;;;QAcM,+CAAoB,GAApB,UAAqB,KAAY,EAAE,SAAyB,EAAE,WAA2B;YAAtD,0BAAA,EAAA,gBAAyB;YAAE,4BAAA,EAAA,kBAA2B;;YAC5F,IAAI,EAAE,GAAG,CAAA,MAAC,IAAI,CAAC,GAAG,CAAC,IAAuB,0CAAE,SAAS,KAAI,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC;;YAGrF,IAAI,IAAI,CAAC,GAAG,CAAC,eAAe,KAAI,MAAA,KAAK,CAAC,CAAC,CAAC,0CAAE,SAAS,CAAA,IAAI,EAAC,MAAA,KAAK,CAAC,CAAC,CAAC,0CAAE,MAAM,CAAA,EAAE;gBACtE,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,IAAI,IAAI;oBACrC,MAAM,wFAAwF,CAAC;gBAEnG,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,SAAS,IAAI,IAAI,EAAE;oBACxC,EAAE,GAAG,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,MAAM,GAAA,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;oBACzF,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC;iBAC7B;aACJ;YAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACnC,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACpB,IAAI,QAAQ,GAAG,SAAS,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,IAAI,SAAS,GAAG,WAAW,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC;;gBAGtI,IAAI,QAAQ,IAAI,CAAC,IAAI,CAAC,MAAM;oBACxB,IAAI,CAAC,SAAS,GAAG,SAAS,IAAI,IAAI,GAAG,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC;;gBAG1E,IAAI,CAAC,QAAQ,IAAI,WAAW,IAAI,IAAI;oBAChC,SAAS;gBAEb,IAAI,YAAY,GAAG,EAAE,CAAC,GAAG,CAAC;gBAC1B,IAAI,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC;gBAC1B,IAAI,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC;gBACjC,IAAI,SAAS,GAAG,IAAI,EAAE,QAAQ,GAAG,IAAI,EAAE,aAAa,GAAG,IAAI,EAAE,eAAe,GAAG,IAAI,EAAE,SAAS,GAAG,IAAI,EAAE,cAAc,GAAG,IAAI,EAAE,gBAAgB,GAAG,IAAI,EAAE,mBAAmB,GAAG,IAAI,EAAE,qBAAqB,GAAG,IAAI,CAAC;gBAEhN,IAAI,OAAO,EAAE;oBACT,IAAI,GAAG,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;oBACtC,mBAAmB,GAAG,GAAG,IAAI,UAAU,CAAC;oBACxC,qBAAqB,GAAG,GAAG,IAAI,UAAU,CAAC;oBAC1C,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;oBACpD,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;oBACzE,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;oBAC7E,SAAS,GAAG,IAAI,CAAC,mBAAmB,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;oBAC3D,cAAc,GAAG,IAAI,CAAC,mBAAmB,CAAC,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;oBACjF,gBAAgB,GAAG,IAAI,CAAC,mBAAmB,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;iBACxF;qBACI;oBACD,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;oBACpC,mBAAmB,GAAG,SAAS,IAAI,IAAI,GAAG,IAAI,GAAG,SAAS,CAAC,SAAS,CAAC;oBACrE,qBAAqB,GAAG,SAAS,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC;iBAC3E;gBAED,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa;oBACvB,IAAI,CAAC,0BAA0B,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,gBAAgB,EAAE,QAAQ,EAAE,SAAS,EAAE,mBAAmB,EAAE,qBAAqB,CAAC,CAAC;;oBAEjN,IAAI,CAAC,gCAAgC,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;aAC7I;;;YAID,IAAI,WAAW,IAAI,IAAI;gBACnB,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,IAAI,GAAA,CAAC,CAAC;YAEpF,IAAI,CAAC,6BAA6B,CAAC,EAAE,CAAC,CAAC;YAEvC,OAAO,EAAE,CAAC;SACb;;;;;;QAOO,2DAAgC,GAAhC,UAAiC,IAAyB,EAAE,IAAS,EAAE,KAAc,EAAE,GAAY,EAAE,SAAc,EAAE,OAAc,EAAE,SAAgB,EAAE,QAAe,EAAE,QAAe;YAAvL,iBA2BP;YA1BG,IAAI,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAEhD,IAAI,KAAK,EAAE;gBACP,IAAI,GAAG,EAAE;oBACL,QAAQ,CAAC,OAAO,CAAC,UAAA,EAAE,IAAM,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;oBACjD,IAAI,SAAS;wBACT,SAAS,CAAC,OAAO,CAAC,UAAA,EAAE,IAAM,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,KAAI,CAAC,OAAO,CAAC,EAAE,EAAE,WAAW,CAAC,CAAA,EAAE,CAAC,CAAC;iBACvF;qBACI;oBACD,QAAQ,CAAC,OAAO,CAAC,UAAA,EAAE,IAAM,EAAE,CAAC,SAAS,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;oBAClD,IAAI,OAAO;wBACP,OAAO,CAAC,OAAO,CAAC,UAAA,EAAE,IAAM,EAAE,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC,KAAI,CAAC,UAAU,CAAC,EAAE,EAAE,WAAW,CAAC,CAAA,EAAE,CAAC,CAAC;iBACzF;aACJ;iBACI;gBACD,IAAI,GAAG,EAAE;oBACL,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;oBAChC,IAAI,SAAS,IAAI,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,GAAA,CAAC;wBACzD,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;iBACnC;qBACI;oBACD,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;oBACnC,IAAI,SAAS;wBACT,SAAS,CAAC,SAAS,GAAG,KAAK,CAAC;iBACnC;aACJ;SACJ;;;;;;QAOO,sCAAW,GAAX,UAAY,KAAU;YAC1B,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;YACvB,IAAI,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;YACxC,IAAI,MAAM,IAAI,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,GAAA,CAAC;gBACpF,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;SAChC;;;;;;;QAQO,qDAA0B,GAA1B,UAA2B,IAAyB,EAAE,IAAS,EAAE,GAAY,EAAE,KAAc,EAAE,GAAY,EAAE,OAAc,EAAE,OAAc,EAAE,SAAgB,EAAE,SAAgB,EAAE,QAAe,EAAE,QAAe,EAAE,WAAoB,EAAE,WAAoB;YAA7P,iBA4CP;YA3CG,IAAI,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAClD,IAAI,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YAChD,IAAI,WAAW,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YACrD,IAAI,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,iBAAiB,EAAE,IAAI,CAAC,CAAC;YAE9D,IAAI,KAAK,EAAE;gBACP,IAAI,GAAG,EAAE;oBACL,IAAI,GAAG,IAAI,WAAW;wBAClB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;;wBAEtC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;oBAErC,IAAI,OAAO;wBAAE,OAAO,CAAC,OAAO,CAAC,UAAA,EAAE,IAAI,OAAA,KAAI,CAAC,UAAU,CAAC,EAAE,EAAE,WAAW,CAAC,GAAA,CAAC,CAAC;oBACrE,IAAI,OAAO;wBAAE,OAAO,CAAC,OAAO,CAAC,UAAA,EAAE,IAAI,OAAA,KAAI,CAAC,UAAU,CAAC,EAAE,EAAE,YAAY,CAAC,GAAA,CAAC,CAAC;oBACtE,IAAI,QAAQ;wBAAE,QAAQ,CAAC,OAAO,CAAC,UAAA,EAAE,IAAM,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,KAAI,CAAC,UAAU,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;oBACjG,IAAI,QAAQ;wBAAE,QAAQ,CAAC,OAAO,CAAC,UAAA,EAAE,IAAM,EAAE,CAAC,SAAS,GAAG,IAAI,CAAC,CAAC,KAAI,CAAC,UAAU,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC;iBACvG;qBACI;oBACD,IAAI,GAAG,IAAI,WAAW;wBAClB,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;;wBAEnC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;oBAExC,IAAI,SAAS;wBAAE,SAAS,CAAC,OAAO,CAAC,UAAA,EAAE,IAAI,OAAA,KAAI,CAAC,UAAU,CAAC,EAAE,EAAE,WAAW,CAAC,GAAA,CAAC,CAAC;oBACzE,IAAI,SAAS;wBAAE,SAAS,CAAC,OAAO,CAAC,UAAA,EAAE,IAAI,OAAA,KAAI,CAAC,UAAU,CAAC,EAAE,EAAE,WAAW,CAAC,GAAA,CAAC,CAAC;oBACzE,IAAI,QAAQ;wBAAE,QAAQ,CAAC,OAAO,CAAC,UAAA,EAAE,IAAM,EAAE,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC,KAAI,CAAC,UAAU,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;oBAClG,IAAI,QAAQ;wBAAE,QAAQ,CAAC,OAAO,CAAC,UAAA,EAAE,IAAM,EAAE,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC,KAAI,CAAC,UAAU,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC,EAAE,CAAC,CAAC;iBACtG;aACJ;iBACI;gBACD,IAAI,GAAG,EAAE;oBACL,IAAI,CAAC,WAAW,IAAI,IAAI,IAAI,GAAG,KAAK,WAAW;wBAC3C,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;;wBAEnC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;iBACvC;qBACI;oBACD,IAAI,WAAW,KAAK,CAAC,GAAG,IAAI,WAAW,IAAI,IAAI,CAAC;wBAC5C,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;;wBAEnC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;iBACvC;aACJ;SACJ;;QAGO,qCAAU,GAAV,UAAW,IAAS,EAAE,OAAsB;YAChD,IAAI,KAAK,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChD,IAAI,KAAK,IAAI,IAAI,EAAE;gBACf,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACjC,OAAO,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACvC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;aAC/B;YAED,OAAO,CAAC,CAAC,KAAK,CAAC;SAClB;;QAGO,kCAAO,GAAP,UAAQ,IAAS,EAAE,OAAsB;YAC7C,IAAI,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE;gBAC7C,IAAI,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACrC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBACpC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBACvC,OAAO,IAAI,CAAC;aACf;YAED,OAAO,KAAK,CAAC;SAChB;;;;;;;;;QAUO,qCAAU,GAAV,UAAW,OAA2D,EAAE,IAAyB;YACrG,QAAQ,OAAO;gBACX,KAAK,OAAO;oBACR,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC/E,KAAK,MAAM;oBACP,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC5E,KAAK,iBAAiB;oBAClB,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,qBAAqB,EAAE,IAAI,CAAC,uBAAuB,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBAC7G,KAAK,WAAW;oBACZ,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,iBAAiB,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;aAC9F;SACJ;;;;;;QAOO,uCAAY,GAAZ,UAAa,IAAS;YAC1B,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;YAC3D,IAAI,MAAM;gBACN,OAAO,MAAM,CAAC;YAElB,OAAO,IAAI,CAAC;SACf;;;;;;;;;;QAWO,wCAAa,GAAb,UAAc,GAAwB,EAAE,KAAU,EAAE,MAAkC,EAAE,SAA0B,EAAE,OAAqB;;YAAjD,0BAAA,EAAA,iBAA0B;YAAE,wBAAA,EAAA,cAAqB;YAC7I,IAAI,KAAK,GAAG,EAAE,CAAC;YAEf,IAAI,OAAO;gBACP,KAAK,GAAG,OAAO,CAAC;iBACf;gBACD,IAAI,SAAS,EAAE;;;wBAEX,KAAgB,IAAA,KAAA,SAAA,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,CAAA,gBAAA;4BAA5C,IAAI,GAAG,WAAA;4BACR,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC;gCAC9B,KAAK,CAAC,IAAI,OAAV,KAAK,2BAAS,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,IAAE;yBAAA;;;;;;;;;iBAC9D;;oBAEG,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;aAC9D;YAED,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,MAAM,KAAK,CAAC,CAAC,SAAS,IAAI,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,IAAI,MAAM,IAAI,YAAY,CAAC,GAAA,CAAC,CAAC;;;YAIxH,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS;gBAC/C,OAAO,KAAK,CAAC;YAEjB,IAAI,MAAM,IAAI,YAAY;gBACtB,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,IAAI,IAAI;qBACvC,CAAC,SAAS,IAAI,CAAC,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC;qBAC3C,SAAS,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAA,CAAC,CAAC;iBACzD,IAAI,MAAM,IAAI,UAAU;gBACzB,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,IAAI,IAAI;qBAClC,CAAC,SAAS,IAAI,CAAC,CAAC,QAAQ,IAAI,KAAK,CAAC,QAAQ,CAAC;qBAC3C,SAAS,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAA,CAAC,CAAC;YAE9D,OAAO,KAAK,CAAC;SAChB;;;;;;;;QASO,yCAAc,GAAd,UAAe,KAAU;YAC7B,IAAI,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YAC3D,IAAI,MAAM;gBACN,OAAO,MAAM,CAAC;YAElB,OAAO,IAAI,CAAC;SACf;;;;;;;;;;QAWO,8CAAmB,GAAnB,UAAoB,GAAwB,EAAE,KAAU,EAAE,MAAkC,EAAE,SAA0B,EAAE,OAAqB;;YAAjD,0BAAA,EAAA,iBAA0B;YAAE,wBAAA,EAAA,cAAqB;YACnJ,IAAI,SAAS,GAAQ,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACrE,IAAI,KAAK,GAAG,EAAE,CAAC;YAEf,IAAI,OAAO;gBACP,KAAK,GAAG,OAAO,CAAC;iBACf;gBACD,IAAI,SAAS,EAAE;;;wBAEX,KAAgB,IAAA,KAAA,SAAA,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAA,gBAAA;4BAAnD,IAAI,GAAG,WAAA;4BACR,IAAI,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC;gCAC9B,KAAK,CAAC,IAAI,OAAV,KAAK,2BAAS,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAE;yBAAA;;;;;;;;;iBACrE;;oBAEG,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;aACrE;YAED,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,MAAM,KAAK,CAAC,CAAC,SAAS,IAAI,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,IAAI,MAAM,IAAI,YAAY,CAAC,GAAA,CAAC,CAAC;;YAGxH,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG;gBACzB,OAAO,KAAK,CAAC;YAEjB,IAAI,MAAM,IAAI,YAAY;gBACtB,KAAK,GAAG,GAAG,CAAC,gBAAgB,CAAC,MAAM,CAAC,UAAC,CAAM,IAAK,OAAA,CAAC,IAAI,IAAI,KACrD,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC;qBAC/G,SAAS,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAA,CAAC,CAAC;;gBAE3D,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,UAAC,CAAM,IAAK,OAAA,CAAC,IAAI,IAAI,KAC3C,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,UAAU,CAAC,MAAM,IAAI,SAAS,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC;qBAC/G,SAAS,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,GAAA,CAAC,CAAC;YAE/D,OAAO,KAAK,CAAC;SAChB;;QAGO,wDAA6B,GAA7B,UAA8B,aAAkC;;YAEpE,IAAI,MAAM,GAAG,EAAE,EAAE,QAAQ,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,EAAE,UAAU,GAAG,EAAE,CAAC;YAC9D,IAAI,UAAU,GAAG,KAAK,EAAE,YAAY,GAAG,KAAK,EAAE,WAAW,GAAG,KAAK,EAAE,cAAc,GAAG,KAAK,CAAC;YAE1F,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE;gBAC/C,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI;oBAAE,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;;oBACrE,YAAY,GAAG,IAAI,CAAC;YAE7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE;gBACpD,IAAI,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,IAAI;oBAAE,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;;oBAC9E,WAAW,GAAG,IAAI,CAAC;;YAG5B,IAAI,aAAa,CAAC,MAAM,EAAE;gBACtB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE;oBAChD,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI;wBAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;;wBACrE,UAAU,GAAG,IAAI,CAAC;aAC9B;YAED,IAAI,aAAa,CAAC,gBAAgB,EAAE;gBAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE;oBAC1D,IAAI,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,IAAI;wBAAE,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;;wBAC7F,cAAc,GAAG,IAAI,CAAC;aAClC;YAED,aAAa,CAAC,KAAK,GAAG,QAAQ,CAAC;YAC/B,aAAa,CAAC,gBAAgB,GAAG,UAAU,CAAC;YAC5C,aAAa,CAAC,UAAU,GAAG,OAAO,CAAC;YACnC,aAAa,CAAC,MAAM,GAAG,MAAM,CAAC;;YAG9B,IAAI,UAAU;gBACV,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAClE,IAAI,YAAY;gBACZ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAChE,IAAI,WAAW;gBACX,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;YAC1E,IAAI,cAAc;gBACd,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;;YAGtF,aAAa,CAAC,KAAK,GAAG,IAAI,CAAC,gBAAgB,EAAE,CAAC;;YAG9C,IAAI,aAAa,CAAC,KAAK,IAAI,CAAC,EAAE;gBAC1B,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,OAAO,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,SAAS,GAAG,KAAK,GAAA,CAAC,CAAC;gBACvD,aAAa,CAAC,GAAG,GAAG,KAAK,CAAC;gBAC1B,aAAa,CAAC,UAAU,GAAG,EAAE,CAAC;gBAC9B,aAAa,CAAC,KAAK,GAAG,EAAE,CAAC;gBACzB,aAAa,CAAC,MAAM,GAAG,EAAE,CAAC;gBAC1B,aAAa,CAAC,gBAAgB,GAAG,EAAE,CAAC;;gBAGpC,IAAI,CAAC,oBAAoB,EAAE,CAAC;aAC/B;;YAGD,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,aAAa,CAAC,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC;SACzE;;QAGO,0CAAe,GAAf,UAAgB,GAAwB;;YAC5C,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,IAAI,GAAG,GAAG,IAAI,GAAG,EAAE,CAAC;;gBACpB,KAAgB,IAAA,KAAA,SAAA,GAAG,CAAC,IAAI,EAAE,CAAA,gBAAA;oBAArB,IAAI,GAAG,WAAA;oBACR,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;iBAAA;;;;;;;;;YAE1B,OAAO,GAAG,CAAC;SACd;;;;;;QAQO,2CAAgB,GAAhB;;YACJ,IAAI,EAAE,GAAG,CAAA,MAAC,IAAI,CAAC,GAAG,CAAC,IAAuB,0CAAE,SAAS,KAAI,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC;YAErF,IAAI,UAAU,GAAG,EAAE,CAAC,gBAAgB,CAAC,MAAM,CAAC,UAAC,IAAI,EAAE,IAAI,IAAK,OAAA,IAAI,GAAG,IAAI,CAAC,KAAK,GAAA,EAAE,CAAC,CAAC,CAAC;YAClF,IAAI,UAAU,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,UAAC,IAAI,EAAE,IAAI,IAAK,OAAA,IAAI,GAAG,IAAI,CAAC,KAAK,GAAA,EAAE,CAAC,CAAC,CAAC;YAExE,IAAI,CAAC,GAAG,CAAC,eAAe,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,cAAc,GAAG,UAAU,IAAI,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;YACjI,OAAO,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC;SACnC;;QAGM,oDAAyB,GAAzB;YACH,IAAI,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC;YAC3E,IAAI,CAAC,oBAAoB,EAAE,CAAC;YAC5B,aAAa,CAAC,GAAG,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC;YACvC,aAAa,CAAC,UAAU,GAAG,EAAE,CAAC;YAC9B,aAAa,CAAC,MAAM,GAAG,EAAE,CAAC;YAC1B,aAAa,CAAC,gBAAgB,GAAG,EAAE,CAAC;YACpC,aAAa,CAAC,KAAK,GAAG,EAAE,CAAC;;YAGzB,IAAI,CAAC,aAAa,CAAC,GAAG,EAAE;gBACpB,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,KAAK,CAAC;gBAC9B,IAAI,CAAC,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC;aAChC;YAED,IAAI,CAAC,6BAA6B,CAAC,aAAa,CAAC,CAAC;YAElD,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;;YAGhD,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;SAC/D;+BACJ;KAAA;;ICrlBD;IAUA;;;QAKI,0BAAoB,QAAwB;YAAxB,aAAQ,GAAR,QAAQ,CAAgB;SAAK;;;;;;;;;;QAW1C,kCAAO,GAAP,UAAQ,KAAY,EAAE,KAAa;YACtC,IAAI,GAAG,GAAG,EAAE,CAAC;YACb,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACnC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACjB,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;aACjD;YACD,OAAO,GAAG,CAAC;SACd;QAAA,CAAC;;;;;;QAOK,4CAAiB,GAAjB,UAAkB,KAAU;YACzB,KAAM,CAAC,kBAAkB,GAAG,IAAI,GAAG,EAAE,CAAC;YAC5C,IAAI,aAAa,GAA4C,KAAM,CAAC,kBAAmB,CAAC;YACxF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAChD,IAAI,GAAG,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAChC,IAAI,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC;oBAC7B,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;qBAC7D;oBACD,IAAI,GAAG,GAAwB,IAAI,GAAG,EAAE,CAAC;oBACzC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC;oBACpC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;iBACtC;aACJ;SACJ;;QAGM,oCAAS,GAAT,UAAU,KAAY,EAAE,IAAY,EAAE,IAAY;YACrD,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC;gBAC1E,MAAM,+EAA+E,GAAG,KAAK,CAAC,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,QAAQ,GAAG,IAAI,CAAC;YAE5I,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACnD;;;;;;;QAQM,iCAAM,GAAN,UAAO,EAAO,IAAgB,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE;;;;;;;QAQtD,iCAAM,GAAN,UAAO,EAAO,IAAgB,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE;;;;;;;;;;QAWtD,wCAAa,GAAb,UAAc,OAAe,EAAE,IAAY,EAAE,QAAgB,EAAE,WAA0B,EAAE,GAAkB;YAA9C,4BAAA,EAAA,kBAA0B;YAAE,oBAAA,EAAA,UAAkB;YAChH,IAAI,MAAM,GAAG,EAAE,CAAC;;;YAIhB,IAAI,QAAQ,IAAI,CAAC,CAAC,KAAK,CAAC,WAAW,IAAI,IAAI,IAAI,GAAG,IAAI,IAAI,MAAM,WAAW,IAAI,GAAG,CAAC,CAAC;gBAChF,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC;;YAGxB,IAAI,QAAQ,IAAI,CAAC,CAAC,IAAI,WAAW,IAAI,CAAC;gBAClC,QAAQ,GAAG,IAAI,CAAC;YAEpB,IAAI,GAAG,EAAE,GAAG,CAAC;YACb,IAAI,QAAQ,IAAI,OAAO,EAAE;gBACrB,GAAG,GAAG,CAAC,CAAC;gBACR,GAAG,GAAG,QAAQ,GAAG,CAAC,CAAC;aACtB;iBAAM;;gBAEH,IAAI,YAAY,GAAG,CAAC,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;gBAErC,GAAG,GAAG,IAAI,GAAG,YAAY,CAAC;gBAC1B,GAAG,GAAG,IAAI,GAAG,YAAY,CAAC;gBAE1B,IAAI,GAAG,GAAG,CAAC,EAAE;oBACT,GAAG,GAAG,CAAC,CAAC;oBACR,GAAG,GAAG,OAAO,GAAG,CAAC,CAAC;iBACrB;qBAAM,IAAI,GAAG,IAAI,QAAQ,EAAE;oBACxB,GAAG,GAAG,QAAQ,GAAG,OAAO,GAAG,CAAC,CAAC;oBAC7B,GAAG,GAAG,QAAQ,GAAG,CAAC,CAAC;iBACtB;aACJ;YAED,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,GAAG,CAAC,KAAK,IAAI,GAAG,yBAAyB,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC;YAEjG,IAAI,GAAG,IAAI,GAAG,EAAE;gBACZ,KAAK,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC,EAAE;oBAC3B,IAAI,CAAC,KAAK,CAAC;wBACP,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,QAAQ,GAAG,CAAC,KAAK,IAAI,GAAG,yBAAyB,GAAG,kBAAkB,CAAC,EAAE,CAAC,CAAC;gBAEzG,MAAM,CAAC,IAAI,CAAC;oBACR,GAAG,EAAE,QAAQ;oBACb,QAAQ,GAAG,QAAQ,KAAK,IAAI,GAAG,yBAAyB,GAAG,kBAAkB,CAAC;iBACjF,CAAC,CAAC;aACN;YACD,OAAO,MAAM,CAAC;SACjB;;;;;;QAOM,wCAAa,GAAb,UAAc,KAAY;YAC7B,IAAI,CAAC,KAAK;gBACN,OAAO;;YAGX,IAAI,eAAe,GAAiC,EAAE,CAAC;YACvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACnC,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;;gBAGpB,IAAI,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtC,OAAO,GAAG,CAAC,SAAS,CAAC;gBACrB,OAAO,GAAG,CAAC,QAAQ,CAAC;gBACpB,OAAO,GAAG,CAAC,KAAK,CAAC;gBACjB,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;gBAEzC,eAAe,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBAC9E,IAAI,CAAC,KAAK,GAAG,IAAI,IAAI,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,eAAe,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;aACtF;SACJ;;;;;;;;QASM,yCAAc,GAAd,UAAkB,UAAa,EAAE,YAAe,EAAE,aAAiB;;YAGtE,IAAI,UAAU,IAAI,IAAI,IAAI,UAAU,IAAI,SAAS;gBAC7C,OAAO,UAAU,CAAC;;YAGtB,IAAI,YAAY,IAAI,IAAI,IAAI,YAAY,IAAI,SAAS;gBACjD,OAAO,YAAY,CAAC;;YAGxB,IAAI,aAAa,IAAI,IAAI,IAAI,aAAa,IAAI,SAAS;gBACnD,OAAO,aAAa,CAAC;;YAGzB,OAAO,IAAI,CAAC;SACf;;;;;gBA7KJF,aAAU,SAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;gBAPzBG,iBAAc;;;ICiCvB;;;QAqBI,0BAC+B,SAAoB,EAC3B,WAA+B,EACT,QAA4B,EAC/B,MAAc,EAC9C,EAAuB,EACvB,GAAsB,EACrB,WAA6B,EAC7B,OAAuB,EACvB,OAAsB,EACtB,QAAqB,EACrB,OAAuB;;YAVJ,cAAS,GAAT,SAAS,CAAW;YAC3B,gBAAW,GAAX,WAAW,CAAoB;YACT,aAAQ,GAAR,QAAQ,CAAoB;YAC/B,WAAM,GAAN,MAAM,CAAQ;YAC9C,OAAE,GAAF,EAAE,CAAqB;YACvB,QAAG,GAAH,GAAG,CAAmB;YACrB,gBAAW,GAAX,WAAW,CAAkB;YAC7B,YAAO,GAAP,OAAO,CAAgB;YACvB,YAAO,GAAP,OAAO,CAAe;YACtB,aAAQ,GAAR,QAAQ,CAAa;YACrB,YAAO,GAAP,OAAO,CAAgB;;YAkC5B,SAAI,GAAQ,IAAI,CAAC;;YAIjB,gBAAW,GAAG,KAAK,CAAC;;YAEnB,iBAAY,GAAQ,IAAI,CAAC;;YAE1B,oBAAe,GAAG,CAAC,CAAC;;YAEpB,iBAAY,GAAG,KAAK,CAAC;;YAErB,aAAQ,GAAG,KAAK,CAAC;;YAEjB,cAAS,GAAG,KAAK,CAAC;;YAElB,eAAU,GAAG,KAAK,CAAC;;;;;YAMnB,gBAAW,GAAU,EAAE,CAAC;;YAExB,mBAAc,GAAU,EAAE,CAAC;;YAE3B,oBAAe,GAAU,EAAE,CAAC;;YAE5B,gBAAW,GAAa,EAAE,CAAC;;YAE3B,2BAAsB,GAAG,MAAM,CAAC;;YAQhC,eAAU,GAAG,KAAK,CAAC;;YAEnB,YAAO,GAAG,IAAI,CAAC;;YAIf,uBAAkB,GAAY,KAAK,CAAC;;YAEpC,WAAM,GAAkC,IAAI,CAAC;;YAE7C,cAAS,GAAkC,IAAI,CAAC;;YAEhD,WAAM,GAAgB,IAAI,CAAC;;YAE3B,cAAS,GAAgB,IAAI,CAAC;;YAE9B,mBAAc,GAAqD,IAAI,CAAC;;YAExE,gBAAW,GAAqD,IAAI,CAAC;;YAErE,gCAA2B,GAAO,EAAE,CAAC;;;;;;YAOrC,gBAAW,GAAU,EAAE,CAAC;;YAExB,oBAAe,GAAa,EAAE,CAAC;;YAE/B,uBAAkB,GAAG,IAAI,CAAC;;;;;;YAO1B,2BAAsB,GAAY,KAAK,CAAC;;YAExC,cAAS,GAAY,IAAI,CAAC;;YAE1B,gBAAW,GAAoB,EAAE,CAAC;;YAElC,mBAAc,GAAoB,EAAE,CAAC;;YAErC,sBAAiB,GAAG,KAAK,CAAC;;YAmBxB,sBAAiB,GAAuB,IAAI,CAAC;;YAE7C,qBAAgB,GAAY,IAAI,CAAC;;YAEjC,eAAU,GAAY,IAAI,CAAC;;;;;YAM3B,yBAAoB,GAAY,IAAI,CAAC;;;;;;;;;YAUrC,wBAAmB,GAAG,EAAE,CAAC;;;;;;YAOzB,yBAAoB,GAAG,IAAI,CAAC;;;;;;;;;;;;YAa5B,mBAAc,GAAY,IAAI,CAAC;;YAE/B,cAAS,GAAW,IAAI,CAAC;;YAEzB,mBAAc,GAAG,IAAI,CAAC;;YAEtB,eAAU,GAAY,IAAI,CAAC;;YAE3B,cAAS,GAAG,IAAI,CAAC;;YAEjB,cAAS,GAAG,IAAI,CAAC;;YAEjB,oBAAe,GAAY,IAAI,CAAC;;YAEhC,cAAS,GAAY,IAAI,CAAC;;YAE1B,2BAAsB,GAAY,IAAI,CAAC;;YAEvC,YAAO,GAAY,IAAI,CAAC;;;;;;YAOxB,qBAAgB,GAAG,EAAE,CAAC;;YAEtB,WAAM,GAAY,IAAI,CAAC;;YAEvB,eAAU,GAAY,IAAI,CAAC;;YAE3B,eAAU,GAAW,IAAI,CAAC;;YAE1B,eAAU,GAAY,IAAI,CAAC;;YAE3B,oBAAe,GAAY,IAAI,CAAC;;YAEhC,sBAAiB,GAAY,IAAI,CAAC;;YAElC,gBAAW,GAAyB,IAAI,CAAC;;YAEzC,mBAAc,GAAG,YAAY,CAAC;;YAE9B,eAAU,GAAG,IAAI,CAAC;;YASlB,mBAAc,GAAY,IAAI,CAAC;;YAE/B,4BAAuB,GAAY,IAAI,CAAC;;YAExC,cAAS,GAAG,GAAG,CAAC;;YAEhB,kBAAa,GAAY,IAAI,CAAC;;YAE9B,4BAAuB,GAAG,IAAI,CAAC;;YAE/B,iBAAY,GAAY,IAAI,CAAC;;YAE7B,eAAU,GAAY,IAAI,CAAC;;;;;YAM3B,sBAAiB,GAAY,IAAI,CAAC;;;;;YAMlC,oBAAe,GAAY,IAAI,CAAC;;YAEhC,qBAAgB,GAAQ,IAAI,CAAC;;YAE7B,kBAAa,GAAY,IAAI,CAAC;;YAE9B,+BAA0B,GAAG,IAAI,CAAC;;YAElC,kBAAa,GAAY,IAAI,CAAC;;YAE9B,oBAAe,GAAY,IAAI,CAAC;;YAEhC,eAAU,GAAG,IAAsB,CAAC;;YAEpC,cAAS,GAAY,IAAI,CAAC;;YAE1B,uBAAkB,GAAG,IAAI,CAAC;;YAE1B,gCAA2B,GAA+B,IAAI,CAAC;;YAE/D,sBAAiB,GAAiC,EAAE,CAAC;;YAErD,cAAS,GAAY,IAAI,CAAC;;YAE1B,cAAS,GAAG,EAAE,CAAC;;YAEf,WAAM,GAAG,EAAE,CAAC;;YAEZ,mBAAc,GAAG,IAAI,CAAC;;YAEtB,oBAAe,GAAY,IAAI,CAAC;;YAGhC,gBAAW,GAA8B,IAAI,CAAC;;YAE9C,2BAAsB,GAAqB,IAAI,CAAC;;;;;;YAOhD,oBAAe,GAAY,IAAI,CAAC;;;;;;YAOhC,mBAAc,GAAY,IAAI,CAAC;;YAE/B,sBAAiB,GAAG,IAAI,CAAC;;YAEzB,0BAAqB,GAAG,IAAI,CAAC;;YAE5B,mBAAc,GAA8B,IAAIX,eAAY,EAAe,CAAC;;;;;;;;;;YAW5E,oBAAe,GAAsB,IAAIA,eAAY,EAAO,CAAC;;YAE7D,uBAAkB,GAAsC,IAAIA,eAAY,EAAuB,CAAC;;YAEhG,cAAS,GAAsB,IAAIA,eAAY,EAAO,CAAC;;YAEvD,mBAAc,GAAsB,IAAIA,eAAY,EAAO,CAAC;;;;;YAM5D,gBAAW,GAAiD,IAAIA,eAAY,EAAkC,CAAC;;YAE/G,mBAAc,GAA+C,IAAIA,eAAY,EAAgC,CAAC;;YAE9G,uBAAkB,GAA4C,IAAIA,eAAY,EAA6B,CAAC;;YAe/G,kBAAa,GAAG,CAAC,CAAC;;YAElB,mBAAc,GAAG,CAAC,CAAC;;YAEjB,0BAAqB,GAAG,IAAI,CAAC;;YAI/B,iBAAY,GAAa,EAAE,CAAC;;YAE5B,wBAAmB,GAAa,EAAE,CAAC;;YAEnC,gBAAW,GAAkB,EAAE,CAAC;;;;;YAM/B,sBAAiB,GAAG,KAAK,CAAC;;;;;;;;;;;;;;;;;YAkB3B,6BAAwB,GAAgG,EAAE,CAAC;;YAG1H,mBAAc,GAAY,KAAK,CAAC;;YAEjC,YAAO,GAAkE,EAAE,QAAQ,EAAE,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;;YAE9H,kBAAa,GAAmB,IAAI,CAAC;;YAGrC,mBAAc,GAAG,IAAI,CAAC;;YAOtB,kBAAa,GAAY,KAAK,CAAC;;YAE/B,oBAAe,GAAY,KAAK,CAAC;;YAGjC,iBAAY,GACf,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,iBAAiB,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;;YA4DrK,oBAAe,GAAG,UAAC,CAAM,KAAQ,CAAC;;YA4G3B,gBAAW,GAAG,UAAC,KAAa,EAAE,IAAS,IAAK,OAAA,IAAI,CAAC,KAAK,GAAA,CAAC;YA/jB1D,IAAI,CAAC,QAAQ,GAAG,IAAI,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACpE,IAAI,CAAC,aAAa,GAAG,IAAI,kBAAkB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnF,IAAI,CAAC,gBAAgB,GAAG,IAAI,qBAAqB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YAC9H,IAAI,CAAC,aAAa,GAAG,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAClD,IAAI,CAAC,eAAe,GAAG,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC;YACtD,IAAI,CAAC,OAAO,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YACxD,IAAI,CAAC,YAAY,GAAG,IAAI,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAClE,IAAI,CAAC,WAAW,GAAG,IAAI,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;YAElE,IAAI,SAAS;gBACT,SAAS,CAAC,aAAa,GAAG,IAAI,CAAC;;YAGnC,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAA,IAAI,CAAC,QAAQ,0CAAE,gBAAgB,CAAC,CAAC;YAChH,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,MAAA,IAAI,CAAC,QAAQ,0CAAE,UAAU,CAAC,CAAC;YAC9F,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,MAAA,IAAI,CAAC,QAAQ,0CAAE,SAAS,EAAE,IAAI,CAAC,CAAC;YACjG,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,MAAA,IAAI,CAAC,QAAQ,0CAAE,MAAM,CAAC,CAAC;YAClF,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,MAAA,IAAI,CAAC,QAAQ,0CAAE,UAAU,EAAE,KAAK,CAAC,CAAC;YACrG,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,EAAE,MAAA,IAAI,CAAC,QAAQ,0CAAE,eAAe,CAAC,CAAC;YAC7G,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAA,IAAI,CAAC,QAAQ,0CAAE,iBAAiB,CAAC,CAAC;YACnH,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,cAAc,EAAE,MAAA,IAAI,CAAC,QAAQ,0CAAE,cAAc,EAAE,EAAE,CAAC,CAAC;YAC9G,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,MAAA,IAAI,CAAC,QAAQ,0CAAE,UAAU,EAAE,0CAA0C,CAAC,CAAC;YAC1I,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,MAAA,IAAI,CAAC,QAAQ,0CAAE,SAAS,CAAC,CAAC;YAC3F,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,EAAE,MAAA,IAAI,CAAC,QAAQ,0CAAE,eAAe,CAAC,CAAC;YAC7G,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,MAAA,IAAI,CAAC,QAAQ,0CAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;YAC3G,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,sBAAsB,EAAE,MAAA,IAAI,CAAC,QAAQ,0CAAE,sBAAsB,EAAE,MAAM,CAAC,CAAC;YAC1I,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,iBAAiB,EAAE,MAAA,IAAI,CAAC,QAAQ,0CAAE,iBAAiB,EAAE,IAAI,CAAC,CAAC;YACzH,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,qBAAqB,EAAE,MAAA,IAAI,CAAC,QAAQ,0CAAE,qBAAqB,EAAE,KAAK,CAAC,CAAC;YACtI,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,qBAAqB,EAAE,MAAA,IAAI,CAAC,QAAQ,0CAAE,qBAAqB,EAAE,EAAE,CAAC,CAAC;SACtI;;QA6XM,mCAAQ,GAAR;YAAA,iBAoBN;;;YAjBG,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,cAAc;gBACtC,MAAM,sHAAsH,CAAC;;YAGjI,IAAI,CAAC,mBAAmB,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC,UAAA,CAAC;;gBAEjF,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI;oBAAE,OAAO;gBAExB,IAAI,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC;gBAEnC,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBACxB,IAAI,aAAa,GAAG,KAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;gBACpE,KAAI,CAAC,OAAO,EAAE,CAAC;gBAEf,IAAI,UAAU;oBACV,KAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;aACnD,CAAC,CAAC;SACN;;QAGM,0CAAe,GAAf;;;YAGH,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;gBAChH,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI;oBAAE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;gBAC5D,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,cAAc;oBAAE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;gBACjF,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,IAAI,IAAI,CAAC,cAAc;oBAAE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;gBACrF,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,IAAI,IAAI,CAAC,cAAc;oBAAE,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;gBACjF,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS;oBAAE,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;gBACpE,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS;oBAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBACtE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC;aAC/B;SACJ;;QAGM,sCAAW,GAAX;YACH,IAAI,IAAI,CAAC,mBAAmB;gBACxB,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,CAAC;SAC9C;;QAGa,sCAAW,GAAX,UAAY,OAAsB;;;;oBACxC,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;oBAC1C,IAAI,aAAa,IAAI,IAAI,CAAC,UAAU;wBAChC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;;;aACpL;SAAA;;QAGM,2CAAgB,GAAhB,UAAiB,EAAE,IAAU,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC,EAAE;;QAEzD,4CAAiB,GAAjB,UAAkB,EAAE,KAAW;;QAEtC,kCAAO,GAAP,cAAY,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;;QAKvC,qCAAU,GAAV,UAAW,GAAG;YAAd,iBAsGN;;YArGG,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC;;YAG7B,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;YAEhC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;;gBAEhC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,IAAI,EAAE,CAAC;;gBAG7C,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;gBACxB,OAAO;aACV;;;YAID,IAAI,IAAI,CAAC,IAAI,IAAI,OAAQ,IAAI,CAAC,IAAY,CAAC,MAAM,IAAI,WAAW,IAAI,EAAE,IAAI,CAAC,IAAI,YAAY,gBAAgB,CAAC;gBACvG,IAAI,CAAC,IAAY,CAAC,SAAS,GAAG,IAAI,gBAAgB,EAAE,CAAC;iBACrD,IAAI,IAAI,CAAC,IAAI,IAAI,OAAQ,IAAI,CAAC,IAAY,CAAC,oBAAoB,IAAI,WAAW,IAAI,EAAE,IAAI,CAAC,IAAI,YAAY,SAAS,CAAC;gBACnH,IAAI,CAAC,IAAY,CAAC,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;iBAC9C,IAAI,IAAI,CAAC,UAAU,IAAI,OAAQ,IAAI,CAAC,UAAkB,CAAC,oBAAoB,IAAI,WAAW,IAAI,EAAE,IAAI,CAAC,UAAU,YAAY,SAAS,CAAC;gBACrI,IAAI,CAAC,UAAkB,CAAC,SAAS,GAAG,IAAI,SAAS,EAAE,CAAC;;YAGzD,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,YAAY,gBAAgB,EAAE;;gBAEpD,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAEvB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;gBACrC,IAAI,IAAI,CAAC,YAAY;oBACjB,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE,CAAC;aAChD;iBACI,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,YAAY,SAAS,EAAE;;gBAElD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAErB,IAAI,0BAA0B,GAAG,CAAC,CAAA,MAAA,IAAI,CAAC,IAAI,CAAC,eAAe,0CAAE,MAAM,KAAI,CAAC,KAAK,CAAC,CAAC;;;gBAI/E,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,qBAAqB,IAAI,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE;oBACrH,IAAI,CAAC,WAAW,CAAC,oBAAoB,EAAE,CAAC;oBACxC,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,IAAI,cAAc,CAAC,EAAE,CAAC,CAAC;oBAC7C,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;iBACrD;gBAED,IAAI,CAAC,IAAI,CAAC,qBAAqB,GAAG,KAAK,CAAC;;gBAGxC,IAAI,IAAI,CAAC,eAAe,EAAE;oBACtB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI;wBACpB,OAAO,CAAC,KAAK,CAAC,6EAA6E,CAAC,CAAC;yBAC5F,IAAI,CAAC,IAAI,CAAC,WAAW;wBACtB,OAAO,CAAC,KAAK,CAAC,gGAAgG,CAAC,CAAC;yBAC/G;wBACD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAA2D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,UAAA,KAAK;4BACpH,IAAI,KAAK,EAAE;gCACP,KAAI,CAAC,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;gCAClC,KAAI,CAAC,IAAI,CAAC,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC;6BACrD;yBACJ,CAAC,CAAC;qBACN;iBACJ;;gBAGD,IAAI,0BAA0B;oBAC1B,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;aAC5J;iBACI,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,EAAE;gBAC/E,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAEtB,IAAI,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE;oBACrD,IAAI,CAAC,WAAW,CAAC,oBAAoB,EAAE,CAAC;oBACxC,IAAI,CAAC,kBAAkB,GAAG,IAAI,cAAc,CAAC,EAAE,CAAC,CAAC;oBACjD,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;iBACzD;;gBAGD,IAAI,IAAI,CAAC,eAAe,EAAE;oBACtB,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI;wBACpB,OAAO,CAAC,KAAK,CAAC,6EAA6E,CAAC,CAAC;yBAC5F,IAAI,CAAC,IAAI,CAAC,WAAW;wBACtB,OAAO,CAAC,KAAK,CAAC,gGAAgG,CAAC,CAAC;yBAC/G;wBACD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAA2D,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,UAAA,KAAK;4BACpH,IAAI,KAAK,EAAE;gCACP,KAAI,CAAC,YAAY,GAAG,KAAK,CAAC,OAAO,CAAC;gCAClC,KAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC,eAAe,CAAC;6BACpD;yBACJ,CAAC,CAAC;qBACN;iBACJ;gBAED,IAAI,IAAI,CAAC,UAAU;oBACf,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;aACpL;YAED,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,IAAI,CAAC,IAAI,YAAY,gBAAgB,CAAC;gBACrD,IAAI,CAAC,eAAe,EAAE,CAAC;YAE3B,IAAI,CAAC,0BAA0B,EAAE,CAAC;SACrC;;;;;QASO,0CAAe,GAAf;YACJ,IAAI,UAAU,GAAG,IAAI,CAAC,IAAsB,CAAC;;;;;;;YAQ7C,IAAI,qBAAqB,GAAG,IAAI,CAAC,QAAQ,IAAI,UAAU,CAAC,oBAAoB,IAAI,IAAI,CAAC,sBAAsB,CAAC;YAC5G,IAAI,mBAAmB,GAAG,IAAI,CAAC,QAAQ,IAAI,UAAU,CAAC,oBAAoB,IAAI,IAAI,CAAC,sBAAsB,CAAC;YAC1G,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,SAAS,IAAI,qBAAqB,KAAK,mBAAmB,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,CAAC;YAElJ,IAAI,YAAY,GAAG,CAAC,UAAU,CAAC,SAAS,IAAI,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,WAAW,GAAA,CAAC,CAAC,MAAM,GAAG,CAAC,MAAM,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,OAAO,GAAA,CAAC,CAAC,CAAC;;YAGzK,IAAI,IAAI,CAAC,SAAS,IAAI,YAAY;gBAC9B,IAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;;YAGpC,IAAI,IAAI,CAAC,gBAAgB,IAAI,CAAC,YAAY,EAAE;gBACxC,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;gBACtB,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;gBACpD,IAAI,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;gBAEvC,IAAI,CAAC,cAAc,GAAG,QAAQ,GAAG,QAAQ,GAAG,EAAE,CAAC;gBAC/C,IAAI,QAAQ;oBACR,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aAChC;;gBAEG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;;YAGtF,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,YAAY;gBAC/B,IAAI,CAAC,eAAe,CAAC,qBAAqB,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;;YAGpE,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;;;YAIpD,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,gBAAgB,KAAK,IAAI,CAAC,SAAS,EAAE;gBAClE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACjD,IAAI,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;oBAClC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;oBAC1E,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,GAAG,eAAe,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;iBACzE;aACJ;SACJ;;QAGO,kDAAuB,GAAvB;;;YAGJ,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC;YACpD,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC;YACxD,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,CAAC,IAAI,CAAC,UAAU,CAAA;YAC/C,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,IAAI,CAAC;YAElC,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,kBAAkB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBAC/D,IAAI,CAAC,YAAY,CAAC,UAAU,GAAW,IAAI,CAAC,IAAK,CAAC,MAAM,IAAI,CAAC,CAAC;gBAC9D,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;gBACvF,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBACnC,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,KAAK,CAAC;gBACnC,IAAI,CAAC,YAAY,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;aACvE;iBACI,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE;gBACtE,IAAI,IAAI,CAAC,UAAU,EAAE;oBACjB,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,UAAU,CAAA;oBACxC,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,IAAI,CAAC,CAAC;iBACnE;;oBAEG,IAAI,CAAC,YAAY,CAAC,UAAU,GAAW,IAAI,CAAC,IAAK,CAAC,MAAM,IAAI,CAAC,CAAA;gBAEjE,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,KAAK,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,CAAC,CAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,WAAW,KAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBACrI,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,KAAK,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC;gBACtL,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC;gBAC5F,IAAI,CAAC,YAAY,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;aACvE;iBACI,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACpB,IAAI,OAAO,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,IAAI,CAAC;gBAC9C,IAAI,KAAK,GAAG,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,MAAI,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,CAAA,CAAC;gBACxD,IAAI,CAAC,YAAY,CAAC,QAAQ,GAAG,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,KAAI,IAAI,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,UAAU,KAAI,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;gBAClH,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,KAAK,IAAI,CAAC,CAAC;gBAC1C,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,OAAO,CAAC;gBACjC,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,KAAK,OAAO,IAAI,KAAK,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;aAClG;iBACI,IAAI,IAAI,CAAC,UAAU,EAAE;gBACtB,IAAI,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;gBAClC,IAAI,CAAC,YAAY,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;gBACnC,IAAI,CAAC,YAAY,CAAC,UAAU,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,GAAG,GAAG,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC;gBAC/H,IAAI,CAAC,YAAY,CAAC,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,KAAK,IAAI,CAAC,IAAI,IAAuB,IAAI,CAAC,IAAK,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC;gBAC7H,IAAI,CAAC,YAAY,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,KAAK,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;gBAC5H,IAAI,CAAC,YAAY,CAAC,iBAAiB,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC;aACvE;SACJ;;;;;;QAOM,mCAAQ,GAAR,UAAS,CAAM;YAAf,iBAkBN;YAjBG,IAAI,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;YAC5C,IAAI,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC;YAC9C,IAAI,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;YACxC,IAAI,MAAM,GAAG,GAAG,CAAC;YAEjB,IAAI,KAAK,GAAG,iBAAiB,GAAG,eAAe,GAAG,MAAM,CAAC;YACzD,IAAI,cAAc,GAAG,KAAK,EAAE;gBACxB,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC;gBAC9D,IAAI,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE;;oBAEhF,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;oBACjE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC;oBACnF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBAElC,UAAU,CAAC,cAAQ,KAAI,CAAC,0BAA0B,EAAE,CAAC,EAAE,CAAC,CAAC;iBAC5D;aACJ;SACJ;;;;;QAMO,qDAA0B,GAA1B;YAAA,iBAYP;;YAVG,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;YACtB,IAAI,CAAC,eAAe,GAAG,EAAE,CAAC;YAC1B,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAE/B,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;gBAC9G,IAAI,CAAC,uBAAuB,EAAE,CAAC;iBAC9B;gBACD,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;gBACzB,UAAU,CAAC,cAAQ,KAAI,CAAC,uBAAuB,EAAE,CAAC,EAAE,CAAC,CAAC;aACzD;SACJ;;QAGO,kDAAuB,GAAvB;YACJ,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;YACrB,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC;YAClK,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC;;YAGlK,IAAI,CAAC,aAAa,CAAC,8BAA8B,EAAE,CAAC;YACpD,IAAI,CAAC,gCAAgC,CAAC,IAAI,CAAC,CAAC;;YAG5C,IAAI,CAAC,uBAAuB,EAAE,CAAC;;YAG/B,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,cAAc,EAAE;gBAC1D,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAsB,GAAG,IAAI,CAAC;gBACzD,IAAI,cAAc,GAAG,IAAI,CAAC,QAAQ,2CAAQ,IAAI,CAAC,KAAK,IAAI,EAAE,aAAO,IAAI,CAAC,MAAM,IAAI,EAAE,MAAK,IAAa,CAAC;gBACrG,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC;;;;gBAMlE,IAAI,EAAE,GAAG,IAAI,CAAC,gBAAgB,CAAC,4BAA4B,CAAC,GAAG,CAAC,CAAC;gBAEjE,IAAI,IAAI,CAAC,SAAS,EAAE;oBAChB,IAAI,CAAC,OAAO,CAAC,wBAAwB,EAAE,CAAA;oBACvC,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;iBACzD;gBAED,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;gBAClD,IAAI,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC;gBACrD,IAAI,CAAC,gBAAgB,CAAC,8BAA8B,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;gBACpE,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC3D,IAAI,CAAC,gBAAgB,CAAC,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;gBACpE,IAAI,CAAC,gBAAgB,CAAC,0BAA0B,EAAE,CAAC;gBACnD,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC3D,IAAI,CAAC,gBAAgB,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;;gBAI/C,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;gBAC9B,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;;gBAInC,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBAChD,IAAI,CAAC,gCAAgC,EAAE,CAAC;gBACxC,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC;gBAEvD,IAAI,IAAI,CAAC,cAAc,EAAE;oBACrB,IAAI,CAAC,OAAO,EAAE,CAAC;oBACf,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;oBAC9B,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;iBAC/B;aACJ;iBACI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,cAAc,EAAE;;gBAEhE,IAAI,KAAK,GAAG,IAAI,CAAC,QAAQ,GAAI,IAAuB,CAAC,KAAK,GAAG,IAAa,CAAC;gBAC3E,IAAI,EAAE,GAAG,IAAI,CAAC,QAAQ,GAAI,IAAuB,CAAC,SAAS,GAAG,IAAI,CAAC,kBAAkB,CAAC;gBACtF,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;aACjD;;YAGD,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;YACxB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;SAC1B;;;;;;QAOO,2DAAgC,GAAhC,UAAiC,IAAS;;YAC9C,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,CAAC,EAAE;gBACjC,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC;gBACxB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC;gBACvC,OAAO;aACV;YAED,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE;gBACxC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC;gBACvC,IAAI,CAAC,cAAc,GAAG,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,WAAW,KAAI,IAAI,CAAC,MAAM,CAAC;gBACvD,OAAO;aACV;YAED,IAAI,YAAY,GAAG,CAAA,MAAA,MAAA,IAAI,CAAC,SAAS,0CAAE,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,WAAW,GAAA,CAAC,0CAAE,MAAM,KAAI,CAAC,CAAC;YAC5E,IAAI,YAAY,IAAI,CAAC,EAAE;gBACnB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC;gBACvC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC;gBACvC,OAAO;aACV;YAED,IAAI,CAAC,aAAa,CAAC,0BAA0B,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;SACrE;;QAGO,2DAAgC,GAAhC;YACJ,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;YAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC;YAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;YAE9E,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,OAAO,GAAA,CAAC,CAAC,MAAM,CAAC;YAClE,IAAI,CAAC,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,MAAM,GAAA,CAAC,CAAC,MAAM,CAAC;YACtF,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,IAAI,CAAC,gBAAgB,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,SAAS,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,iBAAiB,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;SAC3O;;;;;;;QAQM,6CAAkB,GAAlB,UAAmB,KAAY,EAAE,MAAe;YACnD,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;YACrD,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;SAC3B;;;;;;;QAQM,yCAAc,GAAd,UAAe,EAAU,EAAE,KAAsB;YACpD,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;gBACnC,OAAO,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAC;gBAChG,OAAO;aACV;YAED,IAAI,CAAC,IAAI,CAAC,aAAa;gBACnB,OAAO;YAEX,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;SACxD;;;;;;;QAQM,4CAAiB,GAAjB,UAAkB,UAAmB,EAAE,YAA6B;YACvE,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,YAAY,EAAE;gBAC/B,IAAI,CAAC,IAAuB,CAAC,qBAAqB,GAAG,IAAI,CAAC;gBAC3D,IAAI,CAAC,OAAO,EAAE,CAAC;aAClB;YAED,IAAI,YAAY,EAAE;gBACd,IAAI,UAAU;oBACV,YAAY,CAAC,IAAI,GAAG,CAAC,CAAC;gBAC1B,YAAY,CAAC,qBAAqB,GAAG,IAAI,CAAA;aAC5C;YAED,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAC/B,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,GAAG,YAAY,GAAG,UAAU,CAAC,CAAC;SACvE;;;;;;;;;;;QAYO,yCAAc,GAAd,UAAe,GAA6B,EAAE,GAA6B;YAC/E,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC;gBACf,OAAO;YAEX,IAAI,QAAQ,GAA8C,EAAE,CAAC;YAC7D,IAAI,YAAY,GAAuC,EAAE,CAAC;YAE1D,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;gBACvD,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;gBACjC,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;aAC9B;YAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACjC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBAChB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC;aAC9D;YAED,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;;YAEpB,IAAI,aAAa,GAAkC,EAAE,CAAC;YACtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACjC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBAEhB,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;oBAC7B,IAAI,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;oBACzB,IAAI,CAAC,CAAC,EAAE;wBACJ,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC;;wBAEtB,MAAM,uEAAuE,GAAG,EAAE,CAAC,EAAE,CAAC;oBAE1F,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;oBACxH,IAAI,SAAS,GAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,CAAC;oBAC1M,IAAI,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC;oBACrB,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;wBACrB,IAAI,OAAO;4BACP,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;;4BAErE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;qBAC3C;yBACI;wBACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBAC3B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;wBAClC,aAAa,CAAC,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,CAAC,CAAA;qBACvC;iBACJ;qBACI;oBACD,KAAK,IAAI,GAAC,GAAG,CAAC,EAAE,GAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,GAAC,EAAE,EAAE;wBAC9C,IAAI,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,GAAC,CAAC,CAAC;wBAC/B,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;wBACrB,IAAI,GAAG,GAAG,EAAE,CAAC,EAAE,CAAC;wBAChB,IAAI,EAAE,GAAG,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;wBACzB,IAAI,CAAC,CAAC,EAAE;4BACJ,EAAE,CAAC,WAAW,GAAG,IAAI,CAAC;;4BAEtB,MAAM,uEAAuE,GAAG,EAAE,CAAC,EAAE,CAAC;wBAE1F,IAAI,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE;4BACzD,IAAI,QAAQ,GAAkB,EAAE,CAAC;4BACjC,IAAI,OAAO,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;4BACvI,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK;gCACjB,EAAE,UAAU,EAAQ,QAAS,CAAC,MAAM,EAAE,WAAW,EAAQ,QAAS,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,aAAa,EAAE,WAAW,EAAE,KAAK,EAAE,gBAAgB,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,qBAAqB,GAAG,IAAI,GAAG,EAAE,CAAC,QAAQ,EAAE;gCACjW,EAAE,UAAU,EAAQ,QAAS,CAAC,MAAM,EAAE,WAAW,EAAQ,QAAS,CAAC,MAAM,EAAE,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,CAAC,aAAa,EAAE,WAAW,EAAE,QAAQ,CAAC,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,EAAE,YAAY,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,YAAY,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAQ,IAAI,EAAE,GAAG,EAAiB,EAAE,CAAC,EAAE,CAAC;4BAEha,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE;gCACrB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;6BACvC;iCACI;gCACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gCAC3B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;gCAClC,aAAa,CAAC,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;6BACxC;yBACJ;qBACJ;iBACJ;aACJ;;YAGD,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,IAAI,CAAC;gBAC/B,OAAO;YAEX,IAAI,IAAI,GAAa,EAAE,CAAC;YACxB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACjC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBAChB,IAAI,CAAC,EAAE,CAAC,WAAW;oBACf,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;aAC9D;YAED,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;gBACjB,IAAI,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC7B,MAAM,yDAAyD,GAAG,MAAM,CAAC;aAC5E;SACJ;;;;;;;;;;QAWO,yCAAc,GAAd,UAAe,GAA6B;;YAChD,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC;gBACf,OAAO;YAEX,IAAI,gBAAgB,GAAuC,EAAE,CAAC;YAC9D,IAAI,UAAU,GAAmB,IAAI,CAAC,IAAI,CAAC;YAC3C,IAAI,kBAAkB,GAAG,IAAI,CAAC,QAAQ,KAAK,UAAU,IAAI,CAAC,UAAU,CAAC,SAAS,IAAI,UAAU,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;YAEpH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBAC9C,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;gBAC9B,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAA;aACjC;YAED,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;YACpB,IAAI,KAAK,GAAG,CAAC,CAAC;YACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACjC,IAAI,EAAE,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;gBAChB,IAAI,KAAK,SAAA,CAAC;gBAEV,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;oBAC7B,KAAK,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,EAAE,CAAC;oBAC7K,IAAI,EAAE,CAAC,KAAK;wBACR,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;;wBAE/C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;iBAClC;qBACI,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE;oBAE5B,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC,OAAO,IAAI,EAAE,KAAK,EAAE,CAAC,OAAO,GAAG,cAAc,GAAG,EAAE,CAAC,CAAC;oBACtE,KAAK,GAAG,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,CAAC,aAAa,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,WAAW,EAAE,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,UAAU,EAAQ,EAAG,CAAC,MAAM,EAAE,WAAW,EAAQ,EAAG,CAAC,MAAM,EAAE,CAAC;oBACtS,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;;oBAI3B,IAAI,kBAAkB,KAAK,EAAE,CAAC,aAAa,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE;wBACxD,IAAI,iBAAiB,GAAyB,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;wBAC1F,IAAI,CAAC,UAAU,CAAC,SAAS;4BACrB,UAAU,CAAC,SAAS,GAAG,iBAAiB,CAAC;;4BAEzC,CAAA,KAAA,UAAU,CAAC,SAAS,EAAC,IAAI,oCAAI,iBAAiB,IAAE;wBAEpD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;qBAC9B;iBACJ;aACJ;SACJ;;;;;;;QAQM,yCAAc,GAAd,UAAe,IAAY,EAAE,KAAiB;YACjD,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC;SACrD;;;;;;;QAQM,wCAAa,GAAb,UAAc,IAAY,EAAE,KAAiB;YAEhD,IAAI,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC;YAClC,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI,GAAG,gBAAgB,CAAC,KAAK,IAAI,gBAAgB,CAAC,KAAK,GAAG,CAAC,CAAC;gBAC3E,OAAO;YAEX,gBAAgB,CAAC,IAAI,GAAG,IAAI,CAAC;YAC7B,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,EAAE,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;YAEjG,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;SACnD;;;;;;;;;QAWM,2CAAgB,GAAhB,UAAiB,KAAY;YAChC,IAAI,MAAM,GAAG,IAAI,CAAC,IAAsB,CAAC;YACzC,IAAI,IAAI,GAAS,KAAM,CAAC;YACxB,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;;YAGjC,IAAI,IAAI,CAAC,aAAa,EAAE;gBACpB,IAAI,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,UAAA,CAAC,IACxC,OAAA,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,QAAQ,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;qBACrI,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAA,CAAC,CAAA;gBAChI,YAAY,CAAC,OAAO,CAAC,UAAA,CAAC;oBAAM,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC;oBAAC,IAAI,CAAC,CAAC,MAAM;wBAAE,CAAC,CAAC,SAAS,GAAG,KAAK,CAAA;iBAAE,CAAC,CAAC;gBAC9F,OAAO;aACV;YAED,IAAI,IAAI,CAAC,SAAS,EAAE;;gBAEhB,MAAM,CAAC,oBAAoB,GAAG,EAAE,CAAC;gBACjC,IAAI,CAAC,MAAM,CAAC,eAAe;oBACvB,MAAM,CAAC,eAAe,GAAG,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;qBACrE;oBACD,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC;;;oBAG7B,IAAI,CAAC,KAAK;wBACN,MAAM,CAAC,eAAe,GAAG,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;yBACrE;wBACD,MAAM,CAAC,eAAe,GAAG,EAAE,CAAC;wBAC5B,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,UAAC,IAAwB;4BAC/C,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;yBACzE,CAAC,CAAC;wBACH,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;qBAC3E;iBACJ;gBAED,IAAI,CAAC,OAAO,EAAE,CAAC;gBACf,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;aAChC;iBACI;gBACD,IAAI,MAAI,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,IAAI,KAAK,CAAC,KAAK,CAAC;;gBAG9C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,MAAI,CAAC,GAAA,CAAC,CAAC;;gBAG3F,IAAI,CAAC,wBAAwB,GAAG,IAAI,CAAC,wBAAwB,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,IAAI,IAAI,MAAI,GAAA,CAAC,CAAC;aAC7F;YAED,OAAO,IAAI,CAAC;SACf;;;;;;QAQM,6CAAkB,GAAlB,UAAmB,SAAyB;YAAzB,0BAAA,EAAA,gBAAyB;;YAG/C,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,MAAM,GAAA,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,OAAO,GAAA,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC;YAC3H,IAAI,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;YAC9F,IAAI,CAAC,OAAO,EAAE,CAAC;YAEf,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SAC/C;;;;;;;;;QAUM,sCAAW,GAAX,UAAY,KAAU,EAAE,IAAS;;YAEpC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ;gBACjH,OAAO,KAAK,CAAC;;YAGjB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,GAAG,CAAC,KAAK,KAAK,CAAC,QAAQ;gBAChH,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAEtC,IAAI,aAAa,GAAU,EAAE,CAAC;YAC9B,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE;gBAC5D,IAAI,cAAc,GAAG,KAAK,CAAC;gBAE3B,IAAI,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,IAAI,GAAA,CAAC,CAAC;gBAC/D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBACnC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;oBACjB,IAAI,cAAc,EAAE;wBAChB,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC;wBACnB,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;qBACzB;oBACD,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,KAAK,CAAC,cAAc,EAAE;wBAC1D,cAAc,GAAG,IAAI,CAAC;wBACtB,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC;wBACnB,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;qBACzB;yBAAM,IAAI,CAAC,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,YAAY,KAAK,cAAc;wBAC9D,cAAc,GAAG,KAAK,CAAC;iBAC9B;aACJ;iBAAM;gBACH,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;gBACjC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;gBACzB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aAC5B;YAED,IAAI,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,oBAAoB,CAAC,aAAa,CAAC,CAAC;YACzE,IAAI,CAAC,OAAO,EAAE,CAAC;YAEf,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;YAC5C,OAAO,IAAI,CAAC;SACf;;;;;;QAQM,oCAAS,GAAT,UAAU,IAAY;;YACzB,IAAI,IAAI,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC;YAE/D,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAA,OAAC,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,0CAAE,IAAI,KAAI,CAAC,IAAI,IAAI,CAAC,CAAC;SAChE;;;;;;QAOM,mCAAQ,GAAR,UAAS,IAAY;;YACxB,IAAI,IAAI,GAAG,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;YACpG,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK;gBACzB,OAAO;YAEX,IAAI,gBAAgB,GAAG,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC;YAC/C,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI,GAAG,gBAAgB,CAAC,KAAK,IAAI,gBAAgB,CAAC,KAAK,GAAG,CAAC,CAAC;gBAC3E,OAAO;YAEX,gBAAgB,CAAC,IAAI,GAAG,IAAI,CAAC;YAC7B,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,IAAI,CAAA,MAAmB,IAAK,CAAC,MAAM,0CAAE,KAAK,KAAI,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,MAAM,KAAI,MAAA,IAAI,CAAC,MAAM,0CAAE,MAAM,CAAA,IAAI,CAAC,CAAC,CAAC;YAC9H,IAAI,GAAG,GAAG,IAAI,CAAC,UAAU,IAAuB,IAAK,CAAC,oBAAoB,IAAI,EAAE,IAAI,IAAI,CAAC,oBAAoB,IAAI,EAAE,CAAC;YACpH,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,EAAE,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;YAElH,IAAI,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC;YACxC,IAAI,CAAC,iBAAiB,CAAC,KAAK,EAAE,YAAY,GAAG,IAAI,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;SACjG;;;;;QAMM,gDAAqB,GAArB,UAAsB,MAAM;YAC/B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC;YACrD,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,IAAI,CAAC,aAAa;gBAClB,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;iBAChD,IAAI,IAAI,CAAC,UAAU,EAAE;;gBAEtB,IAAI,CAAC,UAAU,CAAC,IAAI,GAAG,CAAC,CAAC;gBACzB,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;aACjD;;gBAEG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;SACpC;;QAGM,qDAA0B,GAA1B,UAA2B,KAAiB,EAAE,MAAc;YAC/D,KAAK,CAAC,IAAI,CAAC,oBAAoB,GAAG,MAAM,CAAC;YACzC,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;SAC5C;;QAIM,4CAAiB,GAAjB;YAAA,iBAUN;YATG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC;gBAChC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;YAExB,IAAI,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC;YAEtD,IAAI,IAAI,CAAC,UAAU;gBACf,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC,cAAQ,KAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;;gBAEtF,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;SACvC;;;;;;;QAQM,2CAAgB,GAAhB,UAAiB,IAAS,EAAE,IAAY;YAC3C,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;SAC1D;;;;;;;;QASM,mCAAQ,GAAR,UAAS,MAAc;YAC1B,IAAI,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,CAAC,EAAE,KAAK,MAAM,GAAA,CAAC,CAAC;YAClE,OAAO,IAAI,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;SACtC;;;;;;QAQM,yCAAc,GAAd,UAAe,IAAY;YAC9B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;SAChD;;;;;;QAOM,wCAAa,GAAb,UAAc,IAAY;YAC7B,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,GAAG,IAAI,CAAC,cAAc;gBACxC,OAAO;YACX,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;;YAG1B,IAAI,CAAC,kBAAkB,EAAE,CAAC;SAC7B;;;;;;;;;QAUM,sCAAW,GAAX,UAAY,IAAY,EAAE,KAAU;YACvC,IAAI,IAAI,CAAC,oBAAoB,IAAI,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;gBACtF,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;gBACtD,OAAO,IAAI,CAAC;aACf;YAED,OAAO,KAAK,CAAC;SAChB;;;;;;QAOM,8CAAmB,GAAnB,UAAoB,QAAgB;YACvC,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;SAC7D;;;;;;QAOO,kCAAO,GAAP,UAAQ,IAAiC;YAC7C,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,MAAM,CAAC;YAC/B,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,OAAO,CAAC;YACjC,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,QAAQ,CAAC;YAEnC,IAAI,IAAI,CAAC,UAAU,EAAE;;gBAEjB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;gBACvB,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;aAC1B;SACJ;;;;;QAMM,6CAAkB,GAAlB;YACH,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC;YAC9B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,CAAC,iBAAiB,GAAG,KAAK,CAAC;SAClC;;;;QAKM,uCAAY,GAAZ;;YAGH,IAAI,SAAiB,CAAC;YACtB,IAAI,QAAgB,CAAC;YACrB,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,SAAS,GAAG,IAAI,CAAC,aAAa,CAAC;gBAC/B,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC;aACzC;YAED,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;YAEzB,IAAI,IAAI,CAAC,SAAS,EAAE;gBAChB,IAAI,CAAC,qBAAqB,GAAG,QAAQ,CAAC;gBACtC,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;aACjC;SACJ;;;;gBAt4CJP,YAAS,SAAC;oBACP,QAAQ,EAAE,UAAU;oBACpB,aAAa,EAAE,CAAC,EAAE,OAAO,EAAEc,iCAAmB,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;oBACvE,eAAe,EAAEb,0BAAuB,CAAC,MAAM;oBAC/C,aAAa,EAAEkB,oBAAiB,CAAC,IAAI;oBAErC,ww1CAAwC;;iBAC3C;;;gBAxC8BC,eAAS,uBAsD/BC,OAAI,YAAIL,WAAQ;gBAjDhBM,8BAAkB,uBAkDlBN,WAAQ;gBA7BR,kBAAkB,uBA8BlBA,WAAQ,YAAIC,SAAM,SAAC,YAAY;6CAC/BD,WAAQ,YAAIC,SAAM,SAAC,UAAU;gBArD7BH,iCAAmB;gBAP2BS,oBAAiB;gBAiCwF,gBAAgB;gBA3BvKC,iBAAc;gBAAEC,gBAAa;gBAAkBC,cAAW;gBAA3BC,iBAAc;;;iCAsLjDC,kBAAe,SAAC,aAAa;iCAE7BA,kBAAe,SAAC,aAAa;wBAE7BA,kBAAe,SAACC,aAAU,CAAC,cAAM,OAAA,IAAI,GAAA,CAAC;wBAEtCD,kBAAe,SAACC,aAAU,CAAC,cAAM,OAAA,IAAI,GAAA,CAAC;0BAEtCC,eAAY,SAAC,MAAM,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;4BAEtCA,eAAY,SAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;iCAExCA,eAAY,SAAC,aAAa,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;0CAE7CA,eAAY,SAAC,sBAAsB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;oCAEtDxB,QAAK;mCAELA,QAAK;6BAELA,QAAK;uCAMLA,QAAK;sCAULA,QAAK;uCAOLA,QAAK;iCAaLA,QAAK;4BAELA,QAAK;iCAELA,QAAK;6BAELA,QAAK;4BAELA,QAAK;4BAELA,QAAK;kCAELA,QAAK;4BAELA,QAAK;yCAELA,QAAK;0BAELA,QAAK;mCAOLA,QAAK;yBAELA,QAAK;6BAELA,QAAK;6BAELA,QAAK;6BAELA,QAAK;kCAELA,QAAK;oCAELA,QAAK;8BAELA,QAAK;iCAELA,QAAK;6BAELA,QAAK;iCAOLA,QAAK;iCAELA,QAAK;0CAELA,QAAK;4BAELA,QAAK;gCAELA,QAAK;0CAELA,QAAK;+BAELA,QAAK;6BAELA,QAAK;oCAMLA,QAAK;kCAMLA,QAAK;mCAELA,QAAK;gCAELA,QAAK;6CAELA,QAAK;gCAELA,QAAK;kCAELA,QAAK;6BAELA,QAAK;4BAELA,QAAK;qCAELA,QAAK;8CAELA,QAAK;oCAELA,QAAK;4BAELA,QAAK;4BAELA,QAAK;yBAELA,QAAK;iCAELA,QAAK;kCAELA,QAAK;8BAGLA,QAAK;yCAELA,QAAK;kCAOLA,QAAK;iCAOLA,QAAK;oCAELA,QAAK;wCAELA,QAAK;iCAELE,SAAM;kCAWNA,SAAM;qCAENA,SAAM;4BAENA,SAAM;iCAENA,SAAM;8BAMNA,SAAM;iCAENA,SAAM;qCAENA,SAAM;mCAONC,YAAS,SAAC,kBAAkB,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;iCAE/CA,YAAS,SAAC,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE;wCAUvCH,QAAK;;;ICraV;;QACA;SAQC;kCAAA;KAAA;;ICPD;;QAEmC,iCAAmB;;QAGlD,uBAA4C,UAAkB;YAA9D,YACI,kBAAM,UAAU,aAAV,UAAU,cAAV,UAAU,GAAI,OAAO,CAAC,SAM/B;YALG,iBAAM,GAAG,aAAC,QAAQ,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;YACtC,iBAAM,GAAG,aAAC,QAAQ,EAAE,gBAAgB,EAAE,CAAC,uBAAuB,CAAC,CAAC,CAAC;YACjE,iBAAM,GAAG,aAAC,QAAQ,EAAE,cAAc,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC;YAC7D,iBAAM,GAAG,aAAC,QAAQ,EAAE,gDAAgD,EAAE,CAAC,kDAAkD,CAAC,CAAC,CAAC;YAC5H,iBAAM,GAAG,aAAC,QAAQ,EAAE,yEAAyE,EAAE,CAAC,4EAA4E,CAAC,CAAC,CAAC;;SAClL;;KAVL,CAAmCQ,iCAAmB;;gBADrDC,aAAU;;;6CAIMC,WAAQ,YAAIC,SAAM,SAAC,UAAU;;;ICT9C;IAWA;;;QAmDI,6BAAoB,OAAuB,EAAS,EAAuB,EAAS,GAAsB,EAAyC,MAAc;YAA7I,YAAO,GAAP,OAAO,CAAgB;YAAS,OAAE,GAAF,EAAE,CAAqB;YAAS,QAAG,GAAH,GAAG,CAAmB;YAAyC,WAAM,GAAN,MAAM,CAAQ;;YAjCxJ,cAAS,GAAY,IAAI,CAAC;;YAG1B,cAAS,GAAY,IAAI,CAAC;;YAG1B,eAAU,GAAG,MAAM,CAAC;;YAGpB,cAAS,GAAG,KAAK,CAAC;;YAGlB,eAAU,GAAG,KAAK,CAAC;;YAGnB,eAAU,GAAW,IAAI,CAAC;;YAG1B,cAAS,GAAY,IAAI,CAAC;;YAG1B,eAAU,GAAY,IAAI,CAAC;;YAS1B,mBAAc,GAAG,IAAIV,eAAY,EAAU,CAAC;;YAS/C,kBAAa,GAAa,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAE,CAAC;SAN8G;;QAStK,sCAAQ,GAAR;YACI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,oBAAoB,IAAI,EAAE,IAAI,IAAI,CAAC,eAAe,CAAC;YACvF,IAAI,IAAI,CAAC,SAAS;gBACd,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;SAChD;;QAGD,yCAAW,GAAX,UAAY,OAAsB;YAC9B,IAAI,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;YAC9B,IAAI,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;YAExC,IAAI,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,MAAM,MAAM,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;gBACpE,IAAI,CAAC,KAAK,GAAG,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,YAAY,KAAI,OAAO,CAAC,YAAY,CAAC,oBAAoB,IAAI,EAAE,IAAI,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,YAAY,IAAG,MAAM,CAAC,YAAY,GAAG,IAAI,CAAC;SAClJ;;;;;;;;QASM,oCAAM,GAAN,UAAO,QAAgB;YAAvB,iBAmBN;YAlBG,IAAI,QAAQ,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,SAAS,EAAE;gBAC/C,IAAI,CAAC,OAAO,CAAC,uBAAuB,CAChC,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,gDAAgD,CAAC,EAC7D,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,yEAAyE,CAAC,EACtF,cAAQ,KAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAI,CAAC,KAAK,GAAG,QAAQ,CAAC,EAAE,EACpE;;oBAEI,IAAI,SAAS,GAAG,KAAI,CAAC,KAAK,CAAC;oBAC3B,KAAI,CAAC,KAAK,GAAG,IAAI,CAAC;oBAClB,KAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;oBACzB,KAAI,CAAC,KAAK,GAAG,SAAS,CAAC;oBACvB,KAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;iBAC5B,CAAC,CAAC;aACV;iBACI;gBACD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACnC,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;aACzB;SACJ;;;;gBApGJP,YAAS,SAAC;oBACP,QAAQ,EAAE,YAAY;oBACtB,aAAa,EAAE,CAAC,EAAE,OAAO,EAAEc,iCAAmB,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC;oBAE1E,knCAA2C;oBAC3C,aAAa,EAAEK,oBAAiB,CAAC,IAAI;oBACrC,eAAe,EAAElB,0BAAuB,CAAC,MAAM;;iBAClD;;;gBAdQ0B,iBAAc;gBADdb,iCAAmB;gBAHMS,oBAAiB;6CA6D8DP,WAAQ,YAAIC,SAAM,SAAC,UAAU;;;kCAvCzIX,QAAK;uBAGLA,QAAK;4BAGLA,QAAK;4BAGLA,QAAK;6BAGLA,QAAK;4BAGLA,QAAK;6BAGLA,QAAK;6BAGLA,QAAK;4BAGLA,QAAK;6BAGLA,QAAK;6BAGLA,QAAK;yBAGLA,QAAK;iCAGLE,SAAM;;;;QChBX;;QACS,qBAAO,GAAd,UAAe,MAA4B;YACzC,OAAO;gBACL,QAAQ,EAAE,aAAa;gBACvB,SAAS,EAAE;oBACT,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,MAAM,KAAI,OAAO,EAAE;oBAC5D,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAA,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,SAAS,KAAI,KAAK,EAAE;iBAC7D;aACF,CAAC;SACH;;;;gBA1BFuB,WAAQ,SAAC;oBACR,OAAO,EAAE;wBACPC,mBAAY;wBACZC,iBAAW;wBACXC,mBAAY;wBACZC,gCAAkB;wBAClBC,iBAAW;wBACXC,yBAAgB;wBAChBC,gBAAS;wBACTC,gCAAiB;wBACjBC,sBAAe;wBACfC,oBAAc;qBACf;oBACD,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,mBAAmB,CAAC;oBAC/F,SAAS,EAAE,CAACjB,iBAAc,EAAEC,gBAAa,EAAEP,iBAAc,EAAES,iBAAc,CAAC;oBAC1E,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,gBAAgB,EAAE,aAAa,EAAE,aAAa,EAAE,mBAAmB,CAAC;iBAC3F;;;IC1CD;;;;ICAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"esfaenza-es-table.umd.js","sources":["../../../node_modules/tslib/tslib.es6.js","../../../projects/es-table/src/lib/domain/externals/classes/appsearch/AppOrdering.ts","../../../projects/es-table/src/lib/domain/externals/classes/appsearch/AppSearch.ts","../../../projects/es-table/src/lib/domain/externals/classes/EsTableColumnsDefinition.ts","../../../projects/es-table/src/lib/domain/externals/classes/appsearch/GenericItem.ts","../../../projects/es-table/src/lib/domain/externals/classes/CornerMenuOption.ts","../../../projects/es-table/src/lib/domain/externals/classes/report/ReportDefinition.ts","../../../projects/es-table/src/lib/domain/externals/classes/report/ReportOrder.ts","../../../projects/es-table/src/lib/domain/externals/classes/report/ReportColumn.ts","../../../projects/es-table/src/lib/domain/externals/classes/report/ReportResult.ts","../../../projects/es-table/src/lib/domain/externals/classes/report/ReportRow.ts","../../../projects/es-table/src/lib/domain/externals/classes/report/ReportParam.ts","../../../projects/es-table/src/lib/domain/externals/classes/EsTableOperationDefinition.ts","../../../projects/es-table/src/lib/domain/externals/classes/appsearch/ItemsSelection.ts","../../../projects/es-table/src/lib/domain/externals/classes/appsearch/Group.ts","../../../projects/es-table/src/lib/domain/externals/classes/appsearch/GroupAggregation.ts","../../../projects/es-table/src/lib/domain/externals/classes/appsearch/GroupFilter.ts","../../../projects/es-table/src/lib/domain/externals/classes/appsearch/GroupOrAggregation.ts","../../../projects/es-table/src/lib/domain/internals/classes/CacheTriptic.ts","../../../projects/es-table/src/lib/domain/internals/classes/EsTableColumn.ts","../../../projects/es-table/src/lib/domain/internals/classes/GroupPager.ts","../../../projects/es-table/src/lib/domain/internals/classes/GroupRouteFragment.ts","../../../projects/es-table/src/lib/domain/internals/classes/ThAggregation.ts","../../../projects/es-table/src/lib/components/es-td/es_td.component.ts","../../../projects/es-table/src/lib/components/es-th/es_th.component.ts","../../../projects/es-table/src/lib/directives/es_td.directive.ts","../../../projects/es-table/src/lib/directives/es_th.directive.ts","../../../projects/es-table/src/lib/tokens.ts","../../../projects/es-table/src/lib/components/es-table/es_table.component.loc.ts","../../../projects/es-table/src/lib/domain/configuration/EsTableDefaultable.ts","../../../projects/es-table/src/lib/core/handlers/classes/ColumnMetadataHandler.ts","../../../projects/es-table/src/lib/core/handlers/classes/DynamicModeHandler.ts","../../../projects/es-table/src/lib/core/handlers/classes/ExportHandler.ts","../../../projects/es-table/src/lib/core/handlers/classes/HierarchyModeHandler.ts","../../../projects/es-table/src/lib/core/handlers/classes/ItemsHandler.ts","../../../projects/es-table/src/lib/core/handlers/classes/ReportModeHandler.ts","../../../projects/es-table/src/lib/core/handlers/classes/RowGroupingHandler.ts","../../../projects/es-table/src/lib/core/handlers/classes/SelectionHandler.ts","../../../projects/es-table/src/lib/core/handlers/classes/UtilitiesHandler.ts","../../../projects/es-table/src/lib/components/es-table/es_table.component.ts","../../../projects/es-table/src/lib/domain/configuration/EsTableModuleConfig.ts","../../../projects/es-table/src/lib/components/pager/table_pager.component.loc.ts","../../../projects/es-table/src/lib/components/pager/table_pager.component.ts","../../../projects/es-table/src/lib/es-table.module.ts","../../../projects/es-table/src/public-api.ts","../../../projects/es-table/src/esfaenza-es-table.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n 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;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from) {\r\n for (var i = 0, il = from.length, j = to.length; i < il; i++, j++)\r\n to[j] = from[i];\r\n return to;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","/**\r\n * Classe che identifica un ordinamento di una colonna\r\n */\r\nexport class AppOrdering {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} id ID della colonna a cui si vogliono applicare ordinamenti, deve combaciare all'id messo nella dichiarazione dell'ES-TD/TH\r\n * @param {'DESC' | 'ASC' } order Ordinamento da applicare alla colonna, Discendente/Ascendente, default 'null' per indicare assenza di ordine\r\n */\r\n constructor(public id: string, public order?: 'DESC' | 'ASC') { }\r\n}","import { AppOrdering } from './AppOrdering';\r\nimport { ItemsSelection } from './ItemsSelection';\r\nimport { Group } from './Group';\r\nimport { GroupFilter } from './GroupFilter';\r\nimport { GroupOrAggregation } from './GroupOrAggregation';\r\n\r\n/**\r\n * Classe che identifica una ricerca paginata in tutte le sue sfumature (di grigio)\r\n */\r\nexport class AppSearch<T> {\r\n\r\n /**\r\n * Costruttore che genera un'istanza coi valori di default e impostando **firstsearch** a **true**\r\n */\r\n constructor() {\r\n this.itemsperpageoverride = 15;\r\n this.items = [];\r\n this.orders = [];\r\n this.columns = [];\r\n this.column_ordering = [];\r\n this.savedstate = false;\r\n this.searchinprogress = false;\r\n this.firstsearch = true;\r\n }\r\n\r\n /** Indica se c'è una ricerca in corso */\r\n public searchinprogress: boolean;\r\n /** Indica il numero totale di pagine trovate dalla ricerca. Ogni pagina è una lista di **itemsperpageoverride** oggetti */\r\n public pages: number;\r\n /** Conteggio totale degli oggetti trovati (inclusi quelli in pagine non attualmente selezionate) */\r\n public objectcount: number;\r\n /** Conteggio totale dei gruppi trovati (inclusi quelli in pagine non attualmente selezionate) */\r\n public groupcount: number;\r\n /** Pagina attualmente in visualizzazione */\r\n public page: number;\r\n /** Numero di oggetti da persentare in ogni pagina. Per convenzione si considera valorizzato a 15 se non fornito */\r\n public itemsperpageoverride: number;\r\n /** Lista degli oggetti nella pagina attualmente in visualizzazione */\r\n public items: T[];\r\n /** Dizionario contenente tutti i gruppi paginati */\r\n public groups: Group[];\r\n /** Lista di colonne per cui ordinare */\r\n public orders: AppOrdering[];\r\n /** Lista di colonne da visualizzare */\r\n public columns: string[];\r\n /** Lista di colonne nell'ordine corretto */\r\n public column_ordering: string[];\r\n /** Indica se la ricerca era salvata. Qualora fosse questo il caso, al caricamento l'es-table si occuperà di ri-effettuare la ricerca ed aggiornare il modello */\r\n public savedstate: boolean;\r\n /** Indica se bisogna ancora effettuare la prima ricerca */\r\n public firstsearch: boolean;\r\n\r\n /**\r\n * Oggetto che indica la selezione corrente. \r\n * \r\n * Se **all** è **true** vuole dire che è tutto selezionato ed eventualmente ci sono delle esclusioni (**exclusions**)\r\n * Se **all** è **false** vuol dire che sono selezionati **item** specifici\r\n * \r\n * In base all'Input **UseSelectionCache** le proprietà **exclusions** e **items** fanno riferimento o alla pagina corrente (se **false**) \r\n * o all'intera ricerca (se **true**)\r\n */\r\n public selection: ItemsSelection<T>;\r\n\r\n /**\r\n * Indica che la ricerca è stata richiesta dall'estable. Questa variabile NON deve essere toccata. È gestita al 100% dall'es-table. \r\n * \r\n * L'unica cosa che serve è che nel modello lato C# sia presente in modo da non perderla durante la serializzazione\r\n */\r\n public internalsearchrequest: boolean;\r\n\r\n /** Raggruppamenti da fare per questa query. Se impostato e non ci sono **filtergroup** mi aspetto di ricevere oggetti nel campo **groups** */\r\n public groupings: GroupOrAggregation[];\r\n\r\n /**\r\n * Filtro da applicare ai gruppi. Qualora il numero di filtri qui fosse uguale al numero di raggruppamenti mi inizio ad apettare di ricevere oggetti\r\n * sul campo **items**, in caso contrario mi aspetto di ricevere o i gruppi nel campo **groups** o l'N-esimo livello dei gruppi\r\n */\r\n public requestedgroups: GroupFilter[];\r\n\r\n /**\r\n * Permette di resettare questo oggetto ai valori di default\r\n */\r\n public reset() {\r\n this.pages = 1;\r\n this.objectcount = 0;\r\n this.searchinprogress = false;\r\n this.firstsearch = false;\r\n this.page = 1;\r\n this.itemsperpageoverride = 15;\r\n this.items = [];\r\n this.orders = [];\r\n this.columns = [];\r\n this.column_ordering = [];\r\n this.savedstate = false;\r\n }\r\n}","/** Classe che identifica una colonna. Utilizzata in modalità \"Colonne dinamiche\" */\r\nexport class EsTableColumnsDefinition {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} description Descrizione della colonna\r\n * @param {string} propertyName Nome della proprietà del modello in cui sono contenuti i dati da visualizzare per questa colonna\r\n * @param {string} routePath Route di navigazione. Es. \"['/pages/mod/mod_detail', { 'idItem': '{0}', 'idItem2' : '{1}' }]\"\r\n * @param {string[]} routeParameterProperties Proprietà da bindare a **routePath** per generare la route completa. \r\n * L'indice scritto in **routePath** è l'indice di accesso a questo array. Es. [\"iditem\", \"iditem2\"]\r\n * @param {'ASC' | 'DESC' } dataOrder Ordinamento dei dati presentati in questa colonna\r\n * @param {number} columnOrder Ordinamento di questa colonna\r\n * @param {boolean} visible Visibilità o meno della colonna\r\n * @param {string} clss Classe da applicare sia ai TD che ai TH relativi a questa colonna\r\n * @param {boolean} orderable Indica se la colonna è ordinabile o no (nel senso ASC / DESC / NONE)\r\n * @param {boolean} headerWraps Indica se il testo dell'header dev'essere wrappato all'interno del th. Di default no.\r\n */\r\n constructor(\r\n public description: string,\r\n public propertyName: string,\r\n public routePath: string = null,\r\n public routeParameterProperties: string[] = null,\r\n public dataOrder: 'ASC' | 'DESC' = null,\r\n public columnOrder: number = null,\r\n public visible: boolean = true,\r\n public clss: string = null,\r\n public orderable: boolean = true,\r\n public headerWraps: boolean = false) {\r\n\r\n }\r\n\r\n /** Routerlink che verrà generato a runtime basandosi sulle informazioni di **routePath** e **routeParameterProperties** */\r\n public routerLink: any;\r\n}","/** Classe che definisce un oggetto generico come lista di proprietà-valore */\r\nexport class GenericItem {\r\n\r\n /** @ignore */\r\n constructor() {\r\n this._selected = false;\r\n this._rowClass = null;\r\n this._hash = null;\r\n this.properties = {};\r\n }\r\n\r\n /** Dizionario delle proprietà dell'oggeto con il loro valore */\r\n public properties: Record<string, string>;\r\n /** Indica se l'oggetto in questione è selezionato o meno */\r\n public _selected: boolean;\r\n /** Viene valorizzato da un eventuale **RowClassAssigner** (o automaticamente se in modalità gerarchica) e serve applicare stili particolari alla intera riga */\r\n public _rowClass: string;\r\n /** Hash dell'oggetto per generare i contesti di bind all'interno dell'es-table (vedere eventualmente l'implementazione specifica) */\r\n public _hash: string;\r\n}","\r\n/** Indica un'opzione cliccabile nel Corner Menù della tabella (il menù richiamabile dai 3 pallini verticli in alto a destra) */\r\nexport class CornerMenuOption {\r\n\r\n /** Id dell'operazione. I callback relativi verranno effettuati con questo */\r\n public id: string;\r\n /** Descrizione dell'operazione da presentare all'utente */\r\n public description: string;\r\n}","import { ReportParam, ReportOrder, ReportResult } from \"../..\";\r\n\r\n/** Definizione generica di un report che può o no disporre di paginazione/export e la cui richiesta è basata su uno o più parametri */\r\nexport class ReportDefinition {\r\n\r\n /** Codice report */\r\n public id: string;\r\n /** Descrizione report */\r\n public description: string;\r\n /** Indica se questo report dispone/può disporre di paginazione */\r\n public pagingavailable: boolean;\r\n /** Pagina attualmente in visualizzazione */\r\n public page: number;\r\n /** Numero massimo di pagine */\r\n public pages: number;\r\n /** Numero di elementi per pagina, si consideri 15 in caso questo parametro non fosse assegnato */\r\n public itemsperpageoverride: number;\r\n /** Formato di Export disponibile */\r\n public expformat: string;\r\n /** Parametri del report */\r\n public pars: ReportParam[];\r\n /** Informazioni di ordinamento dati delle colonne relative al report */\r\n public orders: ReportOrder[];\r\n /** Risultato della ricerca di un report, equivalente all'**items** dell'AppSearch e nel formato specifico dei report */\r\n public result: ReportResult;\r\n}","\r\n/** Classe che identifica una direttiva di ordinamento per un report */\r\nexport class ReportOrder {\r\n\r\n /** Ordine */\r\n public order: string;\r\n /** Colonna relativa */\r\n public column: string;\r\n}","/** Classe che rappresenta una colonna di un report */\r\nexport class ReportColumn {\r\n\r\n /** Id della colonna */\r\n public id: string;\r\n /** Descrizione della colonna (Header) */\r\n public description: string;\r\n /** Colore in notazione HTML */\r\n public color: string;\r\n /** Tipo di campo contenuto in questa colonna */\r\n public type: number;\r\n /** Sequenza per eventuali ordinamenti */\r\n public seq: number;\r\n /** Ordinamento dei dati presentati */\r\n public order: string;\r\n}","import { ReportColumn, ReportRow } from \"../..\";\r\n\r\n/** Classe che rappresenta una lista di oggetti generati da un report */\r\nexport class ReportResult {\r\n\r\n /** Numero di oggetti generati */\r\n public count: number;\r\n /** Se il report è vuoto o no (essenzialmente è un **count == 0**) */\r\n public empty: boolean;\r\n /** Colonne del report (indicazione delle varie proprietà da mostrare e Header con cui mostrarli) */\r\n public columns: ReportColumn[];\r\n /** Righe del report: 1 riga = 1 oggetto */\r\n public rows: ReportRow[];\r\n}","/** Classe che rappresenta i valori delle proprietà di un oggetto Report */\r\nexport class ReportRow {\r\n \r\n /** Valori dell'oggetto in ordine sequenziale */\r\n public values: string[];\r\n}","\r\n/** Classe che identifica un parametro generico per un report */\r\nexport class ReportParam {\r\n\r\n /** Codice del parametro */\r\n public id: string;\r\n /** Descrizione del parametro */\r\n public description: string;\r\n /** Tipo enumerabile del parametro (qualora fosse un dizionario di valori) */\r\n public enumtype: string;\r\n /** Colonna relativa e questo parametro */\r\n public column: string;\r\n /** Tipo del dizionario */\r\n public dictype: string;\r\n /** Sequenza del parametro per ordinarlo logicamente rispetto agli altri */\r\n public seq: number;\r\n /** Typecode C# della tipologia di parametro */\r\n public typecode: number;\r\n /** Indica se i parametro è richiesto o meno */\r\n public required: boolean;\r\n /** Valore del parametro, offerto sia come valore di default o in alternativa riempito lato UI */\r\n public value: any;\r\n /** Indica se questo parametro si basa su un enum. Se questa proprietà è true mi aspetto che almeno **enumtype** sia valorizzato */\r\n public isenum: boolean;\r\n /** Indica se questo parametro si basa su un dizionario. Se questa proprietà è true mi aspetto che almeno **dictype** sia valorizzato */\r\n public isdictionary: boolean;\r\n /** Indica se il parametro è di tipo data */\r\n public isdate: boolean;\r\n /** Indica se il parametro è di tipo boolean */\r\n public isboolean: boolean;\r\n /** Indica un filtro da applicare nei confronti del Backend qualora si vogliano caricare solo le possibilità logicamente accettabili per questo parametro */\r\n public dictionaryfilter: string;\r\n /** Valori disponibili per questo parametro, da valorizzare in caso **enumtype** o **dictype** fossero valorizzati */\r\n public availablevalues: { id: string; description: string; }[];\r\n /** Tipologia lato \"typescript\" di questo parametro, dev'essere sempre logicamente congruente al **typecode** */\r\n public type: \"string\" | \"number\" | \"date\" | \"boolean\";\r\n /** Eventuale pattern di validazione per questo parametro */\r\n public pattern: string;\r\n}","\r\n/** Indica operazioni dinamiche generiche che possono essere effettuate per riga. Appaiono come colonne extra sul lato sinistro della tabella */\r\nexport class EsTableOperationDefinition {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} id Codice dell'operazione\r\n * @param {string} title Titolo dell'operazione, da presentare all'utente su hover della cella\r\n * @param {string} iconClass Classe che fornisca un iconcina Es. \"fa fa-remove\"\r\n * @param {string} text Eventuale testo presentato nella cella, genericamente va in alternativa a **iconClass**\r\n * @param {string} conditionField Indica il campo dell'oggetto sottostante su cui verificare la visibilità o meno di questa icona\r\n * @param {string} conditionValue Indica il valore che la proprietà **conditionField** dell'oggetto sottostante deve assumere affinché questa opzione si veda\r\n */\r\n constructor(\r\n public id: string, \r\n public title: string, \r\n public iconClass?: string, \r\n public text?: string, \r\n public conditionField?: string, \r\n public conditionValue?: string) {\r\n }\r\n}","import { Group } from \"../..\";\r\n\r\n/** Identifica una selezione applicabile agli oggetti presentati in una tabella */\r\nexport class ItemsSelection<T> {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {T[]} selected Oggetti da considerare selezionati\r\n */\r\n constructor(selected: T[]) {\r\n this.count = selected.length;\r\n this.items = selected;\r\n this.all = false;\r\n this.exclusions = [];\r\n this.groups = [];\r\n this.group_exclusions = [];\r\n }\r\n\r\n /** Conteggio degli oggetti selezionati */\r\n public count: number;\r\n /** Se **all** è **false** indica gli elementi da includere, altrimenti è insensato */\r\n public items: T[]\r\n /** Se **all** è **false** indica i gruppi, altrimenti è insensato */\r\n public groups: Group[];\r\n /** Indica se tutti gli elementi sono da considerarsi selezionati (anche quelli di altre pagine) */\r\n public all: boolean = false;\r\n /** Se **all** è **true**, indica gli elementi da escludere, altrimenti è insensato */\r\n public exclusions: T[] = [];\r\n /** Se **all** è **true**, indica i gruppi da escludere, altrimenti è insensato */\r\n public group_exclusions: Group[] = [];\r\n}","import { GroupAggregation } from \"./GroupAggregation\";\r\n\r\n/** Classe che rappresenta un Gruppo con le proprie aggregazioni */\r\nexport class Group {\r\n\r\n /**\r\n * Costruttore\r\n *\r\n * @param {string} column ID della colonna raggruppata\r\n * @param {number} count Numero di elementi raggruppati sotto questa colonna\r\n * @param {string} value Valore del Gruppo\r\n */\r\n constructor(\r\n public column: string,\r\n public count: number,\r\n public value: string) {\r\n\r\n this.aggregations = [];\r\n }\r\n\r\n /** Aggregazioni presenti su questo gruppo, valide per tutte le altre colonne (non a loro volta gruppate) */\r\n public aggregations: GroupAggregation[];\r\n}","/** Classe che rappresenta un'aggregazione */\r\nexport class GroupAggregation {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} column ID della colonna aggregata\r\n * @param {'min' | 'max' | 'sum' } aggregation Aggregazione da effettuare su questa colonna\r\n * @param {string} value Valore dell'aggregazione\r\n */\r\n constructor(\r\n public column: string,\r\n public aggregation: 'min' | 'max' | 'sum',\r\n public value: string) { }\r\n}\r\n","/** Classe che rappresenta un filtro su un gruppo */\r\nexport class GroupFilter {\r\n\r\n /**\r\n * Costruttore\r\n *\r\n * @param {string} column ID della colonna gruppata per cui si richiede di filtrare\r\n * @param {string} value Valore del gruppo su questa **column** per cui si richiede di filtrare\r\n */\r\n constructor(\r\n public column: string,\r\n public value: string) { }\r\n}\r\n","/** Classe che rappresenta o un gruppo o una aggregazione su una colonna. Usata solo internamente */\r\nexport class GroupOrAggregation {\r\n\r\n /**\r\n * Costruttore\r\n *\r\n * @param {string} column Colonna su cui è presente o un gruppo o un'aggregazione\r\n * @param {'min' | 'max' | 'sum' } aggregation Aggregazione presente sulla **column**. Se questo campo è nullo significa che è un gruppo.\r\n * @param {'string' | 'date' | 'number'} datatype Tipo di dati contenuto nella colonna **column** se non c'è alcuna aggregazione è inutile, pertanto non sarà valorizzato\r\n */\r\n constructor(\r\n public column: string,\r\n public aggregation?: 'min' | 'max' | 'sum',\r\n public datatype?: 'string' | 'date' | 'number') { }\r\n}\r\n","/** Rappresenta un trittico formato da un array e due cache relative a tale array per un accesso estremamente veloce per tutte le operazioni del caso */\r\nexport class CacheTriptic {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {Map<string, any>} cache Cache Chiave-Oggetto\r\n * @param {Map<string, number>} index_cache Cache Indice-Oggetto\r\n * @param {any[]} array Array contenente gli oggetti\r\n */\r\n constructor(\r\n public cache: Map<string, any>,\r\n public index_cache: Map<string, number>,\r\n public array: any[]) { }\r\n}","import { TemplateRef } from \"@angular/core\";\r\n\r\n/** Definizione di una colonna, utilizzato nella dialog che permette di modificare le posizioni e le visibilità */\r\nexport class EsTableColumn {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {string} id Id colonna\r\n * @param {string} description Descrizione (Header)\r\n * @param {boolean} visible Indica se di default mostrarla o meno\r\n * @param {boolean} fixed Indica se è una colonna fixed\r\n * @param {boolean} pinned Indica se è una colonna pinnata\r\n * @param {number} pinnedWidth Indica la dimensione da assegnare a questa colonna quando è pinnata\r\n * @param {TemplateRef<any>} template Indica il template da usare per mostrare il testo dell'Header\r\n * @param {TemplateRef<any>[]} parentTemplates Indica la lista di template padri collegata a questo header\r\n */\r\n constructor(\r\n public id: string,\r\n public description: string,\r\n public visible?: boolean,\r\n public fixed?: boolean,\r\n public pinned?: boolean,\r\n public pinnedWidth?: number,\r\n public template?: TemplateRef<any>, \r\n public parentTemplates?: TemplateRef<any>[]) { }\r\n\r\n /** Indice precedente in cui si trovava questa colonna in modo da poterla spinnare in maniera super sexy */\r\n public prev_index: number;\r\n}\r\n","import { AppSearch, GroupRouteFragment } from \"../..\";\r\n\r\n/** Classe che rappresenta un separatore da inserire fra gli oggetti dell'es-table per le operazioni di paginazione dei raggruppamenti per riga */\r\nexport class GroupPager {\r\n \r\n /**\r\n * Costruttore\r\n * \r\n * @param {number} groupLevel Livello del gruppo a cui questo separatore fa riferimento\r\n * @param {string} parentKey Chiave del gruppo parent se esiste\r\n * @param {AppSearch<any>} view Vista di ricerca collegata a questo elemento\r\n * @param {'groups' | 'items'} searches Indica che cosa cerca questo separatore, se sottogruppi o oggetti\r\n */\r\n constructor(\r\n public _grouplevel: number,\r\n public _thisRoute: GroupRouteFragment[],\r\n public _parent: string,\r\n public view: AppSearch<any>,\r\n public searches: 'groups' | 'items') {\r\n\r\n this._sep = true;\r\n this.buttons = [];\r\n }\r\n\r\n /** Indica che è un separatore, sempre impostato a **true** */\r\n public _sep: boolean;\r\n /** Array dei pulsanti da collegare lato interfaccia per le paginazione */\r\n public buttons: any[];\r\n}","/**\r\n * Classe che rappresenta un singolo frammento di route di un elemento gruppo o non. Un array di questi indica tutte le colonne di gruppo con i loro valori\r\n * per arrivare ad una ricerca su sottogruppi o elementi relativi\r\n */\r\nexport class GroupRouteFragment {\r\n\r\n /**\r\n * Costruttore\r\n *\r\n * @param {string} column Colonna di raggruppamento\r\n * @param {string} value Valore della colonna di raggruppamento\r\n */\r\n constructor(\r\n public column: string,\r\n public value: string) { }\r\n}","/** Classe rappresentante una singola aggregazione effettuata su una colonna */\r\nexport class ThAggregation {\r\n\r\n /**\r\n * Costruttore\r\n * \r\n * @param {'min' | 'max' | 'sum'} func Funzione di aggergazione, può essere **min**, **max** o **sum**\r\n * @param {string} format Formato richiesto per il valore dell'aggregazione\r\n * @param {string} match Match intero del pezzo di testo da cui si è estrapolata l'aggregazione, da rimpiazzare col valore calcolato\r\n */\r\n constructor(\r\n public func: 'min' | 'max' | 'sum',\r\n public format: string,\r\n public match: string) { }\r\n}","//Angular\r\nimport { Component, Input, Renderer2, ElementRef, ViewContainerRef, ChangeDetectionStrategy } from \"@angular/core\";\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\n\r\n/** Componente rappresentante una singola cella del body della tabella */\r\n@Component({\r\n selector: \"[es-td]\",\r\n templateUrl: \"./es_td.component.html\",\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class EsTd {\r\n\r\n /** Id della cella, dev'essere lo stesso della colonna **EsTh** relativa */\r\n @Input('es-td') ID: string = \"\";\r\n\r\n /** Indica se è una cella interna (rigenerata programmaticamente) o no */\r\n @Input() Internal?: boolean;\r\n\r\n /** RouterLink qualora il click su questa cella debba navigare da qualche parte */\r\n @Input() RouterLink?: any;\r\n\r\n /** Valore da mostrare all'interno della cella. Se omesso verrà proiettato il contenuto dal template in cui è stata usata */\r\n @Input() Display?: string = null;\r\n\r\n /** Template Angular da istanziare per questo TD */\r\n @Input() Template?: any = null;\r\n\r\n /** Classi da applicare alla cella */\r\n public Class?: string;\r\n\r\n /** Contenuto da mostrare proiettato dal componente padre */\r\n public Content?: SafeHtml;\r\n\r\n /** Contesto dell'oggetto a cui si riferisce il dato visualizzato. Contiene l'hash dell'oggetto in questione */\r\n @Input() Context: string;\r\n\r\n /** Indicazioni sulla visibilità della cella */\r\n private _Visible?: boolean;\r\n\r\n /** @ignore */\r\n constructor(private myself: ElementRef, private renderer: Renderer2, private _viewContainer: ViewContainerRef, protected sanitizer: DomSanitizer) { }\r\n\r\n /**\r\n * Imposta la visibilità o meno della cella, si traduce nell'applicazione o rimozione della classe **app-display-none**\r\n * \r\n * @param {boolean} expression Indicazione della visibilità\r\n */\r\n @Input() set Visible(expression: boolean) {\r\n this._Visible = expression;\r\n\r\n if (expression)\r\n this.renderer.removeClass(this.myself.nativeElement, \"app-display-none\");\r\n else\r\n this.renderer.addClass(this.myself.nativeElement, \"app-display-none\");\r\n }\r\n\r\n /**\r\n * Restituisce lo stato di Visibilità della cella in oggetto\r\n * \r\n * @returns {boolean} **true** se visibile, **false** altrimenti\r\n */\r\n get Visible(): boolean {\r\n if (this._Visible == undefined)\r\n this._Visible = true;\r\n\r\n return this._Visible;\r\n }\r\n\r\n /** @ignore */\r\n ngAfterViewInit() {\r\n // Se è Internal significa che è gestita internamente da ES-TABLE quindi evito di fare sti due passaggi di lettura del DOM\r\n if (this.Internal)\r\n return;\r\n\r\n // L'hash è calcolato dalla ES-table in fase di binding\r\n this.Context = this.Context || this.getTemplateContext()._hash;\r\n this.Content = this.Display === null || this.Display === \"\" ? this.sanitizer.bypassSecurityTrustHtml(this.myself.nativeElement.innerHTML) : this.sanitizer.bypassSecurityTrustHtml(this.Display);\r\n this.Class = this.myself.nativeElement.className.replace(\"app-display-none\", \"\");\r\n }\r\n\r\n /** Ottiene il contesto della view su cui è istanziato il componente */\r\n private getTemplateContext() {\r\n // NGBUG: (<any>this._viewContainer)._view non esiste più in IVY: https://stackoverflow.com/questions/60398827/getting-the-context-of-the-template-inside-of-which-my-component-has-been-render\r\n let vc = (<any>this._viewContainer);\r\n let context;\r\n // Primo giro di recupero del contesto, supponendo di non avere a che fare col compilatore IVY\r\n if (vc._view == null)\r\n context = null;\r\n else if (vc._view.parent && !vc._view.context.$implicit && vc._view.parent.context && vc._view.parent.context.$implicit)\r\n context = vc._view.parent.context.$implicit;\r\n else if (vc._view.context && vc._view.context.ngIf)\r\n context = vc._view.viewContainerParent.context.$implicit;\r\n else\r\n context = vc._view.context.$implicit;\r\n\r\n if (context)\r\n return context;\r\n\r\n // Se non ho ancora trovato il contesto probabilmente sono in IVY e devo fare dei lookup un po' incasinati per beccarlo\r\n var array = (<any>this._viewContainer)._hostLView;\r\n for (let i = 0; i < array.length; i++) {\r\n let item = array[i];\r\n if (item && item.$implicit && !item.ngIf)\r\n return item.$implicit;\r\n\r\n // Second level search for the real context in case the first one we find is an ngIf\r\n if (item && item.length && item.length > 0) {\r\n for (let ii = 0; ii < item.length; ii++) {\r\n let iitem = item[ii];\r\n if (iitem && iitem.$implicit && !iitem.ngIf)\r\n return iitem.$implicit;\r\n }\r\n }\r\n }\r\n }\r\n}","//Angular\r\nimport { Component, Input, Output, EventEmitter, ElementRef, ViewChild, Renderer2, HostListener, ChangeDetectionStrategy } from \"@angular/core\";\r\n\r\n/** Componente rappresentante una Colonna della tabella */\r\n@Component({\r\n selector: \"[es-th]\",\r\n templateUrl: \"./es_th.component.html\",\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class EsTh {\r\n\r\n /** Dizionario di mappatura con ordinamento attuale e ordinamento successivo per gestire i passaggi di stato */\r\n private orderNext: { [index: string]: 'DESC' | 'ASC' | null } = { \"NONE\": \"DESC\", \"DESC\": \"ASC\", \"ASC\": null };\r\n\r\n /** Indicazione sulla visibilità della colonna */\r\n private _Visible: boolean;\r\n\r\n /** Indica se si sta effettuando un'operazione di resize su questa colonna */\r\n private resizingThis: boolean = false;\r\n\r\n /**\r\n * Storicizza l'offset di partenza del resize dell'elemento HTML per poter calcolare la nuova dimensione richiesta durente il resize \r\n * \r\n * nuova width = startOffset + posizione X del mouse\r\n */\r\n private startOffset: number = null;\r\n\r\n /** Id della colonna, dev'essere lo stesso per tutti gli **EsTd** relativi */\r\n @Input('es-th') ID: string = \"\";\r\n\r\n /** Ordinamento attuale della colonna */\r\n @Input() Order?: 'DESC' | 'ASC';\r\n\r\n /** Indica se questa colonna è ordinabile o meno */\r\n @Input() Orderable: boolean = true;\r\n\r\n /** Valore da mostrare all'interno della colonna. Se omesso verrà proiettato il contenuto dal template in cui è stata usata */\r\n @Input() Display: string = \"\";\r\n\r\n /** Indica se le dimnsioni di questa colonna sono modificabili o meno */\r\n @Input() Resizable: boolean = false;\r\n\r\n /** Indica se questo header è pinnato. In caso lo fosse presenta il tastino per effettuare lo spinning */\r\n @Input() Pinned: boolean = false;\r\n\r\n /**\r\n * Indica se sta venendo eseguita una operazione di ricerca o meno, serve per evitare l'esecuzione di eventuale codice che potrebbe dare fastidio \r\n * come ad esempio l'escuzione di un ordinamento durante il caricamento di dati nuovi\r\n */\r\n @Input() SearchInProgress: boolean = false;\r\n\r\n /** Impostato dall'**EsTable**, serve per permettere o meno di effettuare ordinamenti dati su questa colonna */\r\n @Input() OrderBy: boolean;\r\n\r\n /** Indica se il testo presente in questo Header può andare a capo o meno, di default non può */\r\n @Input() Wrap: boolean = false;\r\n\r\n /** Indica se la colonna è fixed, cioè se non può né essere nascosta, né riposizionata. Solo le prime colonne possono essere Fixed */\r\n @Input() Fixed: boolean = false;\r\n\r\n /** Template Angular da istanziare per questo TH */\r\n @Input() Template?: any = null;\r\n\r\n /** Evento emesso al cambio di ordinamento effettuato su questa colonna */\r\n @Output() public onOrderChange: EventEmitter<'DESC' | 'ASC' | null> = new EventEmitter<'DESC' | 'ASC' | null>();\r\n\r\n /** Evento emesso all'unpinning della colonna */\r\n @Output() public onUnpinning: EventEmitter<string> = new EventEmitter<string>();\r\n\r\n /** Proiezione del contenuto di questa colonna */\r\n @ViewChild(\"content\", { static: false }) content: ElementRef;\r\n\r\n /** Classi da applicare alla colonna */\r\n public Class: string;\r\n\r\n /** Impostato dall'**EsTable**, per controllare che ci sia almeno un TD che utilizzi quest'header */\r\n public _referenced: boolean = false;\r\n\r\n /** Variabile finale su cui è bindato il contenuto della cella. Sarà valorizzato a **Display** se specificato, all'**innerHTML** dell'elemento proiettato altrimenti */\r\n public Description: string;\r\n\r\n /** @ignore */\r\n constructor(private myself: ElementRef, private renderer: Renderer2) { }\r\n\r\n /**\r\n * Imposta la visibilità o meno della colonna, si traduce nell'applicazione o rimozione della classe **app-display-none**\r\n * \r\n * @param {boolean} expression Indicazione della visibilità\r\n */\r\n @Input() set Visible(expression: boolean) {\r\n this._Visible = expression;\r\n\r\n if (expression)\r\n this.renderer.removeClass(this.myself.nativeElement, \"app-display-none\");\r\n else\r\n this.renderer.addClass(this.myself.nativeElement, \"app-display-none\");\r\n }\r\n\r\n /**\r\n * Restituisce lo stato di Visibilità della colonna in oggetto\r\n * \r\n * @returns {boolean} **true** se visibile, **false** altrimenti\r\n */\r\n get Visible(): boolean {\r\n if (this._Visible == undefined)\r\n this._Visible = true;\r\n\r\n return this._Visible;\r\n }\r\n\r\n /** @ignore */\r\n ngAfterViewInit() {\r\n //Assegnare direttamente il content è più veloce che passare dal native element per qualche motivo\r\n this.Description = this.Display === null || this.Display === \"\" ? this.content.nativeElement.innerText : this.Display;\r\n\r\n this.Class = this.myself.nativeElement.className.replace(\"app-display-none\", \"\");\r\n\r\n //Resize\r\n if (this.Resizable)\r\n this.renderer.addClass(this.myself.nativeElement, \"app-relative\");\r\n }\r\n\r\n /** Emette l'evento di unpinning */\r\n unpin() {\r\n this.onUnpinning.emit(this.ID);\r\n }\r\n\r\n /** Gestisce la modifica dell'ordinamento qualora venisse cliccato su questa colonna */\r\n setupNextOrderAndNotify() {\r\n if (!this.ID) {\r\n console.log(\"Attempt to order a column without ID. Operation ignored\");\r\n return;\r\n }\r\n\r\n if (this.SearchInProgress) {\r\n console.log(\"Attempt to order a column during a search. Operation ignored\");\r\n return;\r\n }\r\n\r\n if (!this.OrderBy || !this.Orderable)\r\n return;\r\n\r\n var nextOrder = this.orderNext[this.Order || \"NONE\"];\r\n this.Order = nextOrder;\r\n\r\n this.onOrderChange.emit(this.Order);\r\n }\r\n\r\n /**\r\n * Evento di inizio resize della colonna\r\n * \r\n * @param {any} ev Evento MouseDown\r\n */\r\n onResizeStart(ev) {\r\n if (!this.Resizable)\r\n return;\r\n\r\n this.resizingThis = true;\r\n this.startOffset = this.myself.nativeElement.offsetWidth - ev.pageX;\r\n }\r\n\r\n /** Listener per la fine dell'operazione di resize */\r\n @HostListener('window:mouseup.out-zone')\r\n public onMouseUp(): void {\r\n if (!this.Resizable)\r\n return;\r\n\r\n this.resizingThis = false;\r\n }\r\n\r\n /**\r\n * Listener per gestire il movimento del mouse qualora un'operazione di resize fosse in esecuzione\r\n * \r\n * @param {$event} ev Evento MouseMove\r\n */\r\n @HostListener('window:mousemove.out-zone', ['$event'])\r\n public onMouseMove($event): void {\r\n if (!this.Resizable || !this.resizingThis)\r\n return;\r\n\r\n //Uso jquery per non dover far partire un intero ciclo di change detection solo per fare un resize del cazzo\r\n //(anche perché viene lanciato ogni 0.1 secondo quindi not a good idea)\r\n this.myself.nativeElement.style.width = (this.startOffset + $event.pageX) + \"px\";\r\n\r\n //Fermo il bubbling per non fare cose strane\r\n $event.preventDefault();\r\n }\r\n}","import { Directive, Input, TemplateRef } from '@angular/core';\r\n\r\n/** Direttiva per la dichiarazione snella di un EsTd da emettere per ogni elemento, data una colonna */\r\n@Directive({ selector: '[td]' })\r\nexport class EsTdDirective {\r\n\r\n /** Variabile interna che indica il fatto che questo componente è una direttiva. Serve per disambigualrlo dell'EsTdComponent */\r\n public _directive = true;\r\n\r\n /** Indica se la cella è visibile o meno di default */\r\n @Input() tdVisible = true;\r\n\r\n /** Id della colonna, fa riferimento al **th** padre */\r\n @Input() td: string;\r\n\r\n /** Equivalente dell'NgIf sul td */\r\n @Input() tdIf: boolean = true;\r\n\r\n /** Eventuali classi da applicare al **td** generato */\r\n @Input() tdClass: string;\r\n\r\n /**\r\n * @ignore\r\n */\r\n constructor(public Template: TemplateRef<any>) { }\r\n}","import { Directive, Input, TemplateRef } from \"@angular/core\";\r\n\r\nimport { ThAggregation } from \"../domain\";\r\n\r\n/** Direttiva per la dichiarazione snella di un EsTh da emettere come header */\r\n@Directive({ selector: '[th]' })\r\nexport class EsThDirective {\r\n\r\n /** Variabile interna all'interno della quale viene raccolta la cache delle aggregazioni specificate in thAggregation */\r\n public _thAggregations: ThAggregation[] = null;\r\n\r\n /** Variabile interna contenente in maniera ordinata i template dei padri */\r\n public _thParents: TemplateRef<any>[] = null;\r\n\r\n /** Variabile interna che indica il fatto che questo componente è una direttiva. Serve per disambigualrlo dell'EsThComponent */\r\n public _directive = true;\r\n\r\n /** Variabile interna impostata dall'**EsTable**, per controllare che ci sia almeno un TD che utilizzi quest'header */\r\n public _referenced: boolean = false;\r\n\r\n /** Id della colonna, dev'essere lo stesso per tutti i **td** relativi */\r\n @Input() th: string = \"\";\r\n\r\n /** Indica se la colonna è pinnata o no */\r\n @Input() thPinned: boolean = false;\r\n\r\n /** Indica le dimensioni che deve avere questa colonna quando viene pinnata, senza questo tutte le colonne mi collasserebbero l'una sull'altra */\r\n @Input() thPinnedWidth: number = 150;\r\n\r\n /** Indicazione sulla visibilità della colonna */\r\n @Input() thVisible: boolean = true;\r\n\r\n /** Indica se la colonna è fixed, cioè se non può né essere nascosta, né riposizionata. Solo le prime colonne possono essere Fixed */\r\n @Input() thFixed: boolean = false;\r\n\r\n /** Indica che la colonna è sotto ad un raggruppamento padre, con questo nome nel **th** */\r\n @Input() thParent: string = \"\";\r\n\r\n /** Ordinamento attuale della colonna */\r\n @Input() thOrder?: 'DESC' | 'ASC';\r\n\r\n /** Indica se questa colonna è ordinabile o meno */\r\n @Input() thOrderable: boolean = true;\r\n\r\n /** Indica se il testo presente in questo Header può andare a capo o meno, di default non può */\r\n @Input() thWrap: boolean = false;\r\n\r\n /** Indica se le dimnsioni di questa colonna sono modificabili o meno */\r\n @Input() thResizable: boolean = false;\r\n\r\n /** Classi da applicare all'Header della colonna */\r\n @Input() thClass: string;\r\n\r\n /** Classi da applicare alle righe quando rappresentano un Gruppo */\r\n @Input() thGroupClass: string;\r\n\r\n /** Equivalente dell'NgIf sul th */\r\n @Input() thIf: boolean = true;\r\n\r\n /** Campo particolare che indica che questo header è vuoto. Viene utilizzato solo a livello grafico per ignorare o meno l'emit del template */\r\n @Input() thEmpty: boolean = false;\r\n\r\n /** Indica che bisogna fare un raggruppamento su questa colonna */\r\n @Input() thGroup : boolean = false;\r\n\r\n /** Indica che bisogna fare una aggregazione su questa colonna, a fronte di almeno un altra con un raggruppamento */\r\n @Input() thAggregation : string = null;\r\n\r\n /** \r\n * @ignore\r\n */\r\n constructor(public Template: TemplateRef<any>) { }\r\n}","import { InjectionToken } from '@angular/core';\r\nimport { EsTableDefaultable } from './domain/configuration/EsTableDefaultable';\r\n\r\n/** Token che indica il locale da utilizzare all'interno del componente. Supportati solo \"it-IT\" ed \"en-US\" */\r\nexport const EST_LOCALE: InjectionToken<string> = new InjectionToken<string>('EST_LOCALE');\r\n\r\n/** Token che indica se emettere log a console o meno */\r\nexport const EST_DEBUG: InjectionToken<string> = new InjectionToken<string>('EST_DEBUG');\r\n\r\n/** Token che indica i default da assegnare agli Input */\r\nexport const EST_DEFAULTS: InjectionToken<EsTableDefaultable> = new InjectionToken<EsTableDefaultable>('EST_DEFAULTS');","import { Injectable, Inject, Optional } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { EST_LOCALE } from '../../tokens';\r\n\r\n/** Classe di localizzazione per il componente **EsTableComponent** */\r\n@Injectable()\r\nexport class EsTableLoc extends LocalizationService {\r\n\r\n /** @ignore */\r\n constructor(@Optional() @Inject(EST_LOCALE) LOC_LOCALE: string) { \r\n super(LOC_LOCALE ?? 'it-IT');\r\n \r\n super.set(\"en->it\", \"All the\", [\"Tutti gli\"]);\r\n super.set(\"en->it\", \"All\", [\"Tutto\"]);\r\n super.set(\"en->it\", \"Groups\", [\"Gruppi\"]);\r\n super.set(\"en->it\", \"Cannot export an empty dataset\", [\"Impossibile esportare un dataset vuoto\"]);\r\n super.set(\"en->it\", \"Performing Table bootstrap\", [\"Sto caricando la Tabella\"]);\r\n super.set(\"en->it\", \"Update every\", [\"Aggiorna ogni\"]);\r\n super.set(\"en->it\", \"second/s\", [\"secondo/i\"]);\r\n super.set(\"en->it\", \"Export View\", [\"Esporta Vista\"]);\r\n super.set(\"en->it\", \"Column Name\", [\"Nome Colonna\"]);\r\n super.set(\"en->it\", \"Columns Order\", [\"Ordine Colonne\"]);\r\n super.set(\"en->it\", \"Columns Visibility\", [\"Visibilità Colonne\"]);\r\n super.set(\"en->it\", \"There are no columns configured to be hidden/shown in this view\", [\"Non ci sono colonne configurate per essere visualizzate/nascoste in questa vista dati\"]);\r\n super.set(\"en->it\", \"Columns Visibility and Order\", [\"Visibilità e Ordine Colonne\"]);\r\n super.set(\"en->it\", \"Objects Selected\", [\"Oggetti Selezionati\"]);\r\n super.set(\"en->it\", \"Object Selected\", [\"Oggetto Selezionato\"]);\r\n super.set(\"en->it\", \"Select Everything\", [\"Seleziona Tutto\"]);\r\n super.set(\"en->it\", \"Reset Selection\", [\"Resetta Selezione\"]);\r\n super.set(\"en->it\", \"No operations available\", [\"Nessuna operazione disponibile\"]);\r\n super.set(\"en->it\", \"Paging options are not available for this report\", [\"Le opzioni di paginazione non sono disponibili per questo report\"]);\r\n }\r\n}","/** Raccolta di tutti gli Input dell'EsTable a cui può essere logicamente sensato assegnare default per progetto */\r\nexport class EsTableDefaultable {\r\n /** @ignore Vedi **EsTableComponent** */ ColumnsResizable?: boolean;\r\n /** @ignore Vedi **EsTableComponent** */ AutoUpdate?: boolean;\r\n /** @ignore Vedi **EsTableComponent** */ AllSearch?: boolean;\r\n /** @ignore Vedi **EsTableComponent** */ Export?: boolean;\r\n /** @ignore Vedi **EsTableComponent** */ HidePaging?: boolean;\r\n /** @ignore Vedi **EsTableComponent** */ HidePagingCount?: boolean;\r\n /** @ignore Vedi **EsTableComponent** */ HidePagingButtons?: boolean;\r\n /** @ignore Vedi **EsTableComponent** */ ContainerClass?: string;\r\n /** @ignore Vedi **EsTableComponent** */ TableClass?: string;\r\n /** @ignore Vedi **EsTableComponent** */ Selection?: boolean;\r\n /** @ignore Vedi **EsTableComponent** */ SavePreferences?: boolean;\r\n /** @ignore Vedi **EsTableComponent** */ PagingStyle?: 'both' | 'top' | 'bottom';\r\n /** @ignore Vedi **EsTableComponent** */ RowGroupingPagingStyle?: 'left' | 'right';\r\n /** @ignore Vedi **EsTableComponent** */ UseSelectionCache?: boolean;\r\n /** @ignore Vedi **EsTableComponent** */ ShowItemGroupsColumns?: boolean;\r\n /** @ignore Vedi **EsTableComponent** */ ArraymodeItemsPerPage?: number;\r\n}\r\n","// Angular\r\nimport { TemplateRef } from \"@angular/core\";\r\n\r\n// Libs\r\nimport { UtilityService } from \"@esfaenza/extensions\";\r\nimport { PreferencesService } from \"@esfaenza/preferences\";\r\n\r\n// Componenti / Direttive\r\nimport { EsTd } from \"../../../components/es-td/es_td.component\";\r\nimport { EsTh } from \"../../../components/es-th/es_th.component\";\r\nimport { EsTableComponent } from \"../../../components/es-table/es_table.component\"\r\nimport { EsTdDirective } from \"../../../directives/es_td.directive\";\r\nimport { EsThDirective } from \"../../../directives/es_th.directive\";\r\n\r\n// Handlers\r\nimport { UtilitiesHandler, RowGroupingHandler } from \"..\";\r\n\r\n// Modelli\r\nimport { AppOrdering, AppSearch, EsTableColumn } from \"../../../domain\";\r\nimport { CdkDrag, CdkDragDrop, moveItemInArray } from \"@angular/cdk/drag-drop\";\r\n\r\n/** Classe che gestisce tutte le informaizoni relative alle colonne: visibilità, posizione, stato di pin/unpin, ecc ecc... */\r\nexport class ColumnMetadataHandler {\r\n\r\n /** @ignore Costruttore*/\r\n constructor(private est: EsTableComponent, private utilities: UtilitiesHandler, private utiExts: UtilityService, private prefService: PreferencesService, private rgH: RowGroupingHandler) { }\r\n\r\n /**\r\n * Metodo che gestisce il cambio di Ordinamento di una colonna\r\n *\r\n * @param {string} id ID della colonna il cui oridnamento è cambiato\r\n * @param {'DESC' | 'ASC'} order Nuovo ordine selezionato per la colonna\r\n */\r\n public handleTHOrderChange(id: string, order: 'DESC' | 'ASC') {\r\n let orders = this.est.viewMode ? (this.est.View as AppSearch<any>).orders : this.est.arrayOrders;\r\n let orderToAdd = true;\r\n let orderToRemove: number = null;\r\n\r\n // Se per qualche motivo il costruttore non è passato (cache tarpate o simila) fixo\r\n if (!orders && this.est.viewMode)\r\n (this.est.View as AppSearch<any>).orders = [];\r\n else if (!orders && this.est.arrayMode)\r\n this.est.arrayOrders = [];\r\n\r\n for (let i = 0; i < orders.length; i++) {\r\n let t = orders[i];\r\n if (t.id == id) {\r\n if (order) {\r\n t.order = order;\r\n orderToAdd = false;\r\n }\r\n else\r\n orderToRemove = i;\r\n }\r\n }\r\n\r\n if (orderToRemove != null) {\r\n orders.splice(orderToRemove, 1);\r\n }\r\n else if (orderToAdd) {\r\n if (this.est.MultipleOrderingDirectives)\r\n orders.push(new AppOrdering(id, order));\r\n else {\r\n if (this.est.viewMode)\r\n (this.est.View as AppSearch<any>).orders = [new AppOrdering(id, order)];\r\n else if (this.est.arrayMode)\r\n this.est.arrayOrders = [new AppOrdering(id, order)];\r\n }\r\n }\r\n\r\n this.est.onOrderChanged.emit({ id, order });\r\n\r\n if (this.est.viewMode) {\r\n if (this.est.groupSearchRequestsCache.length > 0)\r\n this.rgH.emitRowGroupingSearches(id, orders);\r\n else\r\n this.est.emitSearchRequest(false);\r\n }\r\n else if (this.est.arrayMode)\r\n this.est.internalWriteValue();\r\n }\r\n\r\n /**\r\n * Partendo dagli **EsThs** estrappolo la lista di **EsTableColumn** che questa tabella dovrà eventualmente gestire per Visibilità e Ordine\r\n *\r\n * Costo: 1 scan EsThs\r\n *\r\n * @param {EsTh[] | EsThDirective[]} ths Colonne della tabella\r\n */\r\n public reviewColumnsList(ths: EsTh[] | EsThDirective[]) {\r\n this.est.TMPColumnsList = [];\r\n if (ths.length == 0)\r\n return;\r\n\r\n // Appena il contentChildren è valorizzato scorro tutti gli header\r\n for (let i = 0; i < ths.length; i++) {\r\n let th = ths[i];\r\n\r\n if (this.utilities.isEsTh(th)) {\r\n // Se non ho un id il th è considerato inerte\r\n if (!th.ID)\r\n continue;\r\n\r\n th.OrderBy = this.est.OrderByColumn;\r\n\r\n // Salvo le informazioni dell'header per far parte della lista da cui scegliere quali colonne visualizzare/nascondere\r\n // Di default la visibilità è quella impostata nel componente\r\n if (this.est.HiddenColumns || th.Visible)\r\n this.est.TMPColumnsList.push(new EsTableColumn(th.ID, th.Description, th.Visible, th.Fixed));\r\n }\r\n else {\r\n let column = th.th;\r\n // Se non ho un id il th è considerato inerte\r\n if (!column)\r\n continue;\r\n\r\n // Salvo le informazioni dell'header per far parte della lista da cui scegliere quali colonne visualizzare/nascondere\r\n // Di default la visibilità è quella impostata nel componente\r\n if ((this.est.HiddenColumns || th.thVisible) && th.thIf) {\r\n let previouslyPinned = !this.est.ColumnsList || this.est.ColumnsList.length == 0 ? null : this.est.ColumnsList.find(t => t.id == column) || null;\r\n let toAdd = new EsTableColumn(column, null, th.thVisible, (th.thFixed || th.thGroup), previouslyPinned == null ? th.thPinned : previouslyPinned.pinned, th.thPinnedWidth, th.Template, th._thParents);\r\n if (previouslyPinned)\r\n toAdd.prev_index = previouslyPinned.prev_index;\r\n this.est.TMPColumnsList.push(toAdd);\r\n }\r\n }\r\n }\r\n this.est.ColumnsList = [];\r\n this.est.TMPColumnsList.forEach(c => { this.est.ColumnsList.push(Object.assign({}, c)); });\r\n }\r\n\r\n /**\r\n * Prende i th e i td in modalità diretive e li ordina in base a se ci sono colonne fixed o meno\r\n */\r\n public moveFixedColumnsAtTheBeginning(ths: EsTh[] | EsThDirective[], tds: EsTd[] | EsTdDirective[]) {\r\n\r\n let thsCache: { [index: string]: any; } = {};\r\n let fixeds = 0, pinneds = 0;\r\n let columnsCache: { [index: string]: EsTableColumn; } = {};\r\n let columnsIndexCache: { [index: string]: number; } = {};\r\n\r\n // Creo la cache delle colonne\r\n for (let coli = 0; coli < this.est.ColumnsList.length; coli++) {\r\n let col = this.est.ColumnsList[coli];\r\n columnsCache[col.id] = col;\r\n\r\n // Anche per le columnslist sposto le pinnate o le fixed all'inizio\r\n if (col.pinned) {\r\n if (coli != pinneds)\r\n this.utilities.arrayMove(this.est.ColumnsList, coli, pinneds);\r\n pinneds++;\r\n }\r\n\r\n // Se una colonna è sia pinnata che fixata la considero unicamente pinnata\r\n if (col.fixed && !col.pinned) {\r\n if (coli != pinneds + fixeds)\r\n this.utilities.arrayMove(ths, coli, pinneds + fixeds);\r\n fixeds++;\r\n }\r\n }\r\n\r\n pinneds = fixeds = 0;\r\n\r\n // Sposto tutti gli header fixed o pinned all'inizio\r\n for (let i = 0; i < ths.length; i++) {\r\n let th = ths[i];\r\n if (this.utilities.isEsTh(th)) {\r\n thsCache[th.ID] = th;\r\n if (th.Fixed) {\r\n if (i != pinneds + fixeds)\r\n this.utilities.arrayMove(ths, i, pinneds + fixeds);\r\n fixeds++;\r\n }\r\n }\r\n else {\r\n\r\n thsCache[th.th] = th;\r\n // Riassegno sempre per ripulire valori di partenza o per aggiornarli in caso di modifiche utente\r\n th.thPinned = (!columnsCache[th.th] && th.thPinned) || (columnsCache[th.th] && columnsCache[th.th].pinned);\r\n if (th.thPinned) {\r\n if (i != pinneds)\r\n this.utilities.arrayMove(ths, i, pinneds);\r\n pinneds++;\r\n }\r\n\r\n //In questo caso sono informazioni statiche invece, non modificabili dall'utente, quindi non mi dò preoccupazioni\r\n if ((th.thFixed || th.thGroup) && !th.thPinned) {\r\n if (i != pinneds + fixeds)\r\n this.utilities.arrayMove(ths, i, pinneds + fixeds);\r\n fixeds++;\r\n }\r\n }\r\n }\r\n\r\n if (this.utilities.isEsTh(ths[0]) || this.utilities.isEsTd(tds[0]))\r\n return;\r\n\r\n // Cache degli indici per riposizionare i td come i th\r\n for (let i = 0; i < ths.length; i++)\r\n columnsIndexCache[(<EsThDirective>ths[i]).th] = i;\r\n\r\n // Riordino le celle per fargli mantenere la stessa struttura dei th\r\n let newTds = new Array(ths.length);\r\n\r\n for (let i = 0; i < tds.length; i++) {\r\n let item = tds[i] as EsTdDirective;\r\n newTds[columnsIndexCache[item.td]] = item;\r\n }\r\n\r\n this.est.HasPinnedColumns = pinneds > 0;\r\n }\r\n\r\n /** In base alla configurazione delle colonne calcola le dimenioni delle colonne pinnate */\r\n public evaluatePinnedColumnsWidth() {\r\n if (!this.est.HasPinnedColumns)\r\n return;\r\n\r\n this.est.PinnedContainerWidth = 0;\r\n for (let i = 0; i < this.est.ColumnsList.length; i++) {\r\n let col = this.est.ColumnsList[i];\r\n if (col.pinned && col.visible)\r\n this.est.PinnedContainerWidth += col.pinnedWidth;\r\n }\r\n this.est.PinnedContainerWidth += this.est.Selection ? 25 : 0;\r\n }\r\n\r\n /**\r\n * Terminato il binding delle colonne da **reviewColumnsList** e della **View** dal **writeValue** questo metodo si occupa\r\n * dell'allineamento delle informazioni fra le colonne calcolate internamente e le informazioni sulle colonne che arrivano dall'AppSearch\r\n *\r\n * @param {AppSearch<any>} view AppSearch da utilizzare per questa operazione\r\n */\r\n public alignColumnsIfLoadedView(view: AppSearch<any>) {\r\n let emitChanged = this.est.viewMode && view.savedstate;\r\n let newColset = [];\r\n\r\n if (!this.est.ColumnsList || this.est.ColumnsList.length == 0)\r\n return;\r\n\r\n let columns = this.est.viewMode ? view.columns : this.est.arrayColumns;\r\n this.est.ColumnsList.forEach(c => {\r\n // Se la colonna è pinnata mi arriva col simoleon, ma anche se è una composizione di più colonne\r\n let exCl = columns.filter(cc => (cc.startsWith('§') ? cc.substring(1) : cc) == c.id);\r\n\r\n // Se la colonna è pinnata aggiorno l'informazione nella view\r\n if (exCl.length == 1)\r\n c.pinned = exCl[0].startsWith('§');\r\n\r\n // Se l'appsearch viene da uno stato precedente, uso le informazioni sulle colonne che ha dentro, altrimenti sovrascrivo tutto **\r\n if (c.visible && columns.length == 0)\r\n newColset.push(c.id);\r\n\r\n // Se ho una colonna lato AppSearch e nella ColumnList non è visibile, allineo all'AppSearch\r\n else if (exCl.length == 1 && !c.visible)\r\n c.visible = true;\r\n\r\n // Allineamento sull'AppSearch per casistiche inverse al di sopra\r\n else if (exCl.length == 0 && c.visible)\r\n c.visible = false;\r\n });\r\n\r\n // Non ho colonne nella appsearch, vuol dire che sono al primo binding\r\n if (columns.length == 0) {\r\n if (this.est.viewMode)\r\n view.columns = newColset;\r\n else\r\n this.est.arrayColumns = newColset;\r\n }\r\n\r\n if ((this.est.viewMode && view.savedstate) && this.est.ColumnsOrdering && view.column_ordering.length > 0) {\r\n // Scorro gli ordinamenti che avevo salvato e ricreo la ColumnsList in base a loro\r\n let newColList = [];\r\n view.column_ordering.forEach(co => {\r\n this.est.ColumnsList.forEach(c => {\r\n if (c.id == co)\r\n newColList.push(c);\r\n });\r\n });\r\n\r\n // Recupero anche campi nuovi che nell'iterazione vecchia non c'erano (serve durante lo sviluppo in modo da non perdersi fra un EDIT + F5 e l'altro)\r\n this.est.ColumnsList.forEach(c => {\r\n if (!newColList.find(t => t == c.id))\r\n newColList.push(c);\r\n });\r\n\r\n this.est.ColumnsList = newColList;\r\n }\r\n\r\n // In ogni caso questo non mi serve più, lo resetto **\r\n if (this.est.viewMode)\r\n view.savedstate = false;\r\n\r\n if (emitChanged)\r\n this.est.changed();\r\n }\r\n\r\n /**\r\n * In base alla visibilità registrata nelle **ColumnsList** questo metodo si occupa di prendere tutti i **EsThs** ed **EsTds** relativi e nasonderli/mostrarli\r\n *\r\n * Costo: 1 scan ColumnsList, 1 scan EsThs, 1 scan EsTds\r\n *\r\n * @param {EsTh[] | EsThDirective[]} ths Header della tabella\r\n * @param {EsTd[] | EsTdDirective[]} tds Celle della tabella\r\n * @param {AppSearch<any>} view AppSearch da utilizzare per questa operazione\r\n */\r\n public refreshColumnsVisibility(ths: EsTh[] | EsThDirective[], tds: EsTd[] | EsTdDirective[], view: AppSearch<any>) {\r\n let newColset = [];\r\n let fixedThs: { [id: string]: boolean; } = {};\r\n let columnsCache: { [index: string]: EsTableColumn; } = {};\r\n for (let coli = 0; coli < this.est.ColumnsList.length; coli++) {\r\n let col = this.est.ColumnsList[coli];\r\n columnsCache[col.id] = col;\r\n if (col.visible)\r\n newColset.push((col.pinned ? \"§\" : \"\") + col.id);\r\n }\r\n if (view)\r\n view.columns = newColset;\r\n\r\n else\r\n this.est.arrayColumns = newColset;\r\n\r\n // Da qui in poi devono essere eseguiti SOLO in fase di writeValue quindi devo assicurarmi di passarli null in tutti i passaggi diversi da quello\r\n if (ths) {\r\n // Definisco se la colonna è visibile in base alla sua rappresentazione locale in ColumnsList\r\n for (let i = 0; i < ths.length; i++) {\r\n let th = ths[i];\r\n\r\n if (this.utilities.isEsTh(th)) {\r\n th.Visible = th.Fixed || (columnsCache[th.ID] ? columnsCache[th.ID].visible : th.Visible);\r\n if (th.Fixed)\r\n fixedThs[th.ID] = true;\r\n }\r\n else {\r\n th.thVisible = th.thFixed || (columnsCache[th.th] ? columnsCache[th.th].visible : th.thVisible);\r\n if (th.thFixed || th.thGroup)\r\n fixedThs[th.th] = true;\r\n }\r\n }\r\n }\r\n\r\n if (tds) {\r\n // Definisco se la cella è visibile in base alla sua rappresentazione locale in ColumnsList\r\n for (let i = 0; i < tds.length; i++) {\r\n let td = tds[i];\r\n\r\n if (this.utilities.isEsTd(td))\r\n td.Visible = fixedThs[td.ID] || (columnsCache[td.ID] ? columnsCache[td.ID].visible : td.Visible);\r\n\r\n else\r\n td.tdVisible = fixedThs[td.td] || (columnsCache[td.td] ? columnsCache[td.td].visible : td.tdVisible);\r\n }\r\n }\r\n\r\n this.est.changed();\r\n }\r\n\r\n /**\r\n * Allinea gli ordinamenti dati fra le **EsThs** e le informazioni all'interno della View bindata\r\n *\r\n * @param {AppSearch<any>} view AppSearch da utilizzare per questa operazione\r\n * @param {EsTh[] | EsThDirective[]} ths Colonne della tabella\r\n */\r\n public alignHeadersOrdering(ths: EsTh[] | EsThDirective[], view: AppSearch<any>) {\r\n let orders = view ? view.orders : this.est.arrayOrders;\r\n for (let i = 0; i < ths.length; i++) {\r\n let th = ths[i];\r\n\r\n if (this.utilities.isEsTh(th)) {\r\n th.Order = null;\r\n\r\n // Assegno tutti gli ordinamenti che mi vengono da AppSearch. Sono i più importanti. Non faccio cache o cose strano perché tanto questa\r\n // variabile sarà sempre massimo 3 elementi\r\n for (let i = 0; i < orders.length; i++) {\r\n let or = orders[i];\r\n if (or.id == th.ID)\r\n th.Order = or.order;\r\n }\r\n }\r\n else {\r\n th.thOrder = null;\r\n for (let i = 0; i < orders.length; i++) {\r\n let or = orders[i];\r\n if (or.id == th.th)\r\n th.thOrder = or.order;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Genera tutte le informazioni che servono per gestire il raggruppamento degli header\r\n *\r\n * @param {EsTh[] | EsThDirective[]} ths Colonne della tabella\r\n *\r\n * @returns {{ leafs: EsTh[] | EsThDirective[], groupingLevel: number, parentsCache: any, thsCache: any }} Oggetto contenente la lista delle foglie (header base), il livello\r\n * massimo di raggruppamento raggiunto, una cache in cui vengono indicati tutti i gruppi che sono \"parent\" (quindi che raggruppano almeno 1 header) e la cache degli header\r\n */\r\n public evaluateHeadersGroupingInfos(ths: EsTh[] | EsThDirective[]): { leafs: EsTh[] | EsThDirective[]; groupingLevel: number; parentsCache: any; thsCache: any; } {\r\n // Pregiro per trovare i parent\r\n let parentsCache: { [index: string]: boolean; } = {};\r\n let thsCache: { [index: string]: EsThDirective; } = {};\r\n for (let i = 0; i < ths.length; i++) {\r\n let th = ths[i];\r\n if (this.utilities.isEsTh(th))\r\n continue;\r\n\r\n thsCache[th.th] = th;\r\n if (th.thParent && !parentsCache[th.thParent])\r\n parentsCache[th.thParent] = true;\r\n }\r\n\r\n // Secondo giro per beccare il livello massimo e la lista di foglie (th senza parent)\r\n let hMaxLevel = 0;\r\n let leafs: any[] = [];\r\n for (let i = 0; i < ths.length; i++) {\r\n let th = ths[i];\r\n if (this.utilities.isEsTh(th)) { leafs.push(th); continue; }\r\n // Se sono una foglia vedo quanti livelli ci sono sopra\r\n if (!parentsCache[th.th]) {\r\n leafs.push(th);\r\n let tmp = this.jumpsToFinalParent(th, thsCache);\r\n hMaxLevel = tmp > hMaxLevel ? tmp : hMaxLevel;\r\n }\r\n }\r\n\r\n return { leafs: leafs, groupingLevel: hMaxLevel, parentsCache: parentsCache, thsCache: thsCache };\r\n }\r\n\r\n /**\r\n * Genera gli header groups da una lista di info sui th all'interno della variabile **TMPRowThGroups**\r\n *\r\n * @param {{ leafs: EsTh[] | EsThDirective[], groupingLevel: number, parentsCache: any, thsCache: any }} infos Informazioni di raggruppamento valutate precedentemente\r\n */\r\n public evaluateHeaderGroups(infos: { leafs: EsTh[] | EsThDirective[]; groupingLevel: number; parentsCache: any; thsCache: any; }) {\r\n if (infos.groupingLevel == 0)\r\n return;\r\n\r\n // Giro 2.5, creo l'output dei raggruppamenti per header in modo da non dovermi preoccupare di celle non inizializzate\r\n let expandedGroups = [];\r\n let visibleUnpinnedLeafs: EsThDirective[] = (<any[]>infos.leafs).filter((t: EsThDirective) => t.thVisible && !t.thPinned);\r\n for (let l = 0; l < infos.groupingLevel; l++) {\r\n expandedGroups.push([]);\r\n for (let i = 0; i < visibleUnpinnedLeafs.length; i++)\r\n expandedGroups[l].push(\"\");\r\n }\r\n\r\n // Ordino le foglie in base agli ordinamenti delle colonne\r\n let orderedLeafs = [];\r\n for (let i = 0; i < this.est.OrderDirectives.length; i++) {\r\n let leaf: EsThDirective = infos.thsCache[this.est.OrderDirectives[i]];\r\n if (leaf.thVisible && !leaf.thPinned)\r\n orderedLeafs.push(leaf);\r\n }\r\n\r\n // Terzo giro per creare l'array group con tutti i riferimenti del caso\r\n let currentParent = \"\";\r\n for (let i = 0; i < orderedLeafs.length; i++) {\r\n let refTh: EsThDirective = orderedLeafs[i];\r\n let prevTh: EsThDirective = i - 1 >= 0 ? orderedLeafs[i - 1] : null;\r\n\r\n // Parent diverso da prima, metto il bordo a sinistra e a destra della cella precedente (se c'è)\r\n // All'ultimo giro metto il bordo a destra. Tutto questo lo rieseguo per ogni cella in modo da ripulire eventuali a cui avevo assegnato tag precedentemente\r\n (<any>refTh)._lbord = refTh.thParent != currentParent;\r\n (<any>refTh)._rbord = visibleUnpinnedLeafs.length == i + 1;\r\n if (prevTh)\r\n (<any>prevTh)._rbord = refTh.thParent != currentParent;\r\n\r\n currentParent = refTh.thParent;\r\n\r\n // Per ogni gruppo srotolo il parent nella matrice dei raggruppamenti\r\n for (let l = 0; l < infos.groupingLevel; l++) {\r\n let parent = refTh.thParent;\r\n if (parent && !refTh.thPinned) {\r\n expandedGroups[l][i] = parent;\r\n refTh = infos.thsCache[parent];\r\n }\r\n }\r\n }\r\n\r\n // Quarto giro per compattarlo nell'elemento finale su cui bindarmi\r\n currentParent = \"\";\r\n let currentSpan = 0;\r\n this.est.TMPRowThGroups = [];\r\n for (let l = 0; l < expandedGroups.length; l++) {\r\n let levelArray: { Span: number; Template: TemplateRef<any>; Pinned?: boolean; Borders?: boolean; }[] = [];\r\n this.est.TMPRowThGroups.push(levelArray);\r\n\r\n if (this.est.Selection || this.est.HasPinnedColumns)\r\n levelArray.push({ Span: 1, Template: null, Pinned: this.est.HasPinnedColumns });\r\n\r\n for (let h = 0; h < expandedGroups[l].length; h++) {\r\n let item = expandedGroups[l][h];\r\n if (item == currentParent)\r\n currentSpan++;\r\n else {\r\n if (currentSpan > 0)\r\n levelArray.push({ Span: currentSpan, Template: (currentParent ? infos.thsCache[currentParent].Template : null), Borders: !!currentParent });\r\n currentSpan = 1;\r\n currentParent = item;\r\n }\r\n }\r\n\r\n // Ultima aggiunta che altrimenti mi rimarrebbe in cache\r\n levelArray.push({ Span: currentSpan, Template: (currentParent ? infos.thsCache[currentParent].Template : null), Borders: !!currentParent });\r\n\r\n if (this.est.Removal)\r\n levelArray.push({ Span: 1, Template: null });\r\n\r\n if (this.est.Export || this.est.HiddenColumns || this.est.ColumnsOrdering || this.est.CornerMenuOptions)\r\n levelArray.push({ Span: 1, Template: null });\r\n\r\n currentSpan = 0;\r\n currentParent = \"\";\r\n }\r\n }\r\n\r\n /**\r\n * Calcola il numero di salti da un header foglia all'ultimo parent della catena\r\n *\r\n * @param {EsThDirective} th Header da cui scorrere i padri per capire quanti livelli ci sono sopra\r\n * @param {{ [index: string]: EsThDirective }} thsCache Cache degli header\r\n */\r\n private jumpsToFinalParent(th: EsThDirective, thsCache: { [index: string]: EsThDirective; }) {\r\n let jumps = 0; let parent = null; let parentsPrepend: TemplateRef<any>[] = [];\r\n let baseThRef = th;\r\n do {\r\n parent = th.thParent;\r\n if (parent) {\r\n th = thsCache[parent];\r\n if (!th.thEmpty)\r\n parentsPrepend.unshift(th.Template);\r\n jumps++;\r\n }\r\n } while (parent);\r\n baseThRef._thParents = parentsPrepend;\r\n return jumps;\r\n }\r\n\r\n /**\r\n * Metodo che genera l'ordine di default delle colonne\r\n *\r\n * @param {AppSearch<any>} view AppSearch da utilizzare per questa operazione\r\n */\r\n public generateDefaultOrder(ths: EsTh[] | EsThDirective[], view: AppSearch<any>) {\r\n if (ths.length == 0)\r\n return;\r\n\r\n let orderings = this.est.viewMode ? view.column_ordering : this.est.arrayColumnOrdering;\r\n // Genero ordinamento di default da 0 fino a dove deve arrivare. Situazione attuale senza hotpotato\r\n if (!orderings || orderings.length == 0) {\r\n for (let i = 0; i < ths.length; i++) {\r\n let th = ths[i];\r\n let order = this.utilities.isEsTh(th) ? th.ID : th.th;\r\n this.est.OrderDirectives.push(order);\r\n }\r\n }\r\n\r\n else\r\n this.est.OrderDirectives = orderings;\r\n }\r\n\r\n /**\r\n * Applica l'ordine specificato alle varie colonne\r\n *\r\n * @param {AppSearch<any>} view AppSearch da utilizzare per questa operazione\r\n * @param {boolean} finalize Se **true** significa che non mi aspetto di dover effettuare altre operazioni e posso renderizzare la situazione in base ai RowContext\r\n * Senza finalize significa che mi aspetto altre operazioni che prima o poi richiameranno questa funzione col finalize.\r\n *\r\n * Ad esempio, una volta selezionato ordinamento fisico/logico delle colonne so che parte un altra ricerca che mi rivalorizzerà da \"writeValue\", che già chiama questa funzione.\r\n * Mettendo solo la chiamata da \"writeValue\" come \"finalizzante\" mi assicuro che smanattamenti a frontend non causino flickering fino a quando non servono\r\n */\r\n public applyOrdering(view: AppSearch<any>, finalize: boolean) {\r\n // Genero ordinamento per gli header\r\n let newHeaders = [];\r\n\r\n // Se devo finalizzare aggancio tutte le variabili di bind\r\n if (finalize) {\r\n this.est.OrderDirectives.forEach(o => {\r\n let heaedrItem = this.est.TMPRowTHs.filter(t => t.ID == o)[0];\r\n if (heaedrItem)\r\n newHeaders.push(heaedrItem);\r\n });\r\n this.est.TMPRowTHs = newHeaders;\r\n\r\n // Genero ordinamento per le celle\r\n for (let i = 0; i < this.est.RowContexts.length; i++) {\r\n let context = this.est.TMPRowTDs[this.est.RowContexts[i]];\r\n let newContext = [];\r\n\r\n this.est.OrderDirectives.forEach(o => {\r\n let contextItem = context.filter(t => t.ID == o)[0];\r\n newContext.push(contextItem);\r\n });\r\n\r\n this.est.TMPRowTDs[this.est.RowContexts[i]] = newContext;\r\n }\r\n }\r\n\r\n if (this.est.viewMode)\r\n view.column_ordering = this.est.OrderDirectives;\r\n\r\n else\r\n this.est.arrayColumnOrdering = this.est.OrderDirectives;\r\n\r\n this.est.changed();\r\n }\r\n\r\n /**\r\n * All'interno della dialog \"Ordinamento e Visibilità Colonne\" mette la colonna specificata prima della colonna precedente\r\n *\r\n * @param {EsTableColumn} columnItem Colonna da spostare\r\n */\r\n public sendUp(columnItem: EsTableColumn) {\r\n let itemIndex = this.est.TMPColumnsList.indexOf(columnItem);\r\n if (this.est.TMPColumnsList[itemIndex - 1].fixed || this.est.TMPColumnsList[itemIndex - 1].pinned)\r\n return;\r\n this.utiExts.swap(this.est.TMPColumnsList, itemIndex, itemIndex - 1);\r\n\r\n // Non posso fare JSON.parse(JSON.stringify(this.ColumnsList)) perché contiene riferimenti a TemplateRef\r\n let tmp = [];\r\n this.est.TMPColumnsList.forEach(c => { tmp.push(Object.assign({}, c)); });\r\n this.est.TMPColumnsList = tmp;\r\n }\r\n\r\n /**\r\n * All'interno della dialog \"Ordinamento e Visibilità Colonne\" mette la colonna specificata dopo la colonna successiva\r\n *\r\n * @param {EsTableColumn} columnItem Colonna da spostare\r\n */\r\n public sendDown(columnItem: EsTableColumn) {\r\n let itemIndex = this.est.TMPColumnsList.indexOf(columnItem);\r\n this.utiExts.swap(this.est.TMPColumnsList, itemIndex, itemIndex + 1);\r\n\r\n // Non posso fare JSON.parse(JSON.stringify(this.ColumnsList)) perché contiene riferimenti a TemplateRef\r\n let tmp = [];\r\n this.est.TMPColumnsList.forEach(c => { tmp.push(Object.assign({}, c)); });\r\n this.est.TMPColumnsList = tmp;\r\n }\r\n\r\n /**\r\n * All'interno della dialog \"Ordinamento e Visibilità Colonne\" pinna la colonna specificata\r\n *\r\n * @param {EsTableColumn} columnItem Colonna da spostare\r\n */\r\n public pinOrUnpinColumn(columnItem: EsTableColumn) {\r\n let itemIndex = this.est.TMPColumnsList.indexOf(columnItem);\r\n if (!columnItem.pinned) {\r\n columnItem.prev_index = itemIndex;\r\n\r\n //Quando pinno devo spostare l'elemento come ultima colonna pinnata o come prima colonna se non ce ne sono di pinnate\r\n for (let i = 0; i < this.est.TMPColumnsList.length; i++) {\r\n if (!this.est.TMPColumnsList[i].pinned) {\r\n this.utilities.arrayMove(this.est.TMPColumnsList, itemIndex, i);\r\n break;\r\n }\r\n }\r\n }\r\n else {\r\n //Quando spinno riporto l'elemento allo stesso indice in cui era prima (se sono stati fatti spostamenti nel mezzo cazzi dell'utente)\r\n if (columnItem.prev_index != null && columnItem.prev_index != undefined)\r\n this.utilities.arrayMove(this.est.TMPColumnsList, itemIndex, columnItem.prev_index);\r\n else {\r\n // Se spinno senza un prev_index vuol dire che la colonna era pinnata da configurazione. La sposto nel primo punto disponibile\r\n for (let i = 0; i < this.est.TMPColumnsList.length; i++) {\r\n if (!this.est.TMPColumnsList[i].pinned && !this.est.TMPColumnsList[i].fixed) {\r\n this.utilities.arrayMove(this.est.TMPColumnsList, itemIndex, i - 1);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n columnItem.pinned = !columnItem.pinned;\r\n }\r\n\r\n /**\r\n * All'interno della dialog \"Ordinamento e Visibilità Colonne\" inverte le impostazioni di visibilità della colonna\r\n *\r\n * @param {EsTableColumn} columnItem Colonna da spostare\r\n */\r\n public columnClicked(item: EsTableColumn) {\r\n this.est.lastSelectedItemID = item.id;\r\n if (!this.est.HiddenColumns || item.fixed)\r\n return;\r\n\r\n item.visible = !item.visible;\r\n this.updateGlobalColVisCheck();\r\n }\r\n\r\n /** All'apertura della dialog \"Ordinamento e Visibilità Colonne\" ricarica le informazioni attuali per permettere la modifica */\r\n public resetColumnVisSelection() {\r\n this.est.TMPColumnsList = [];\r\n // Non posso fare JSON.parse(JSON.stringify(this.ColumnsList)) perché contiene riferimenti a TemplateRef\r\n this.est.TMPColumnsList = [];\r\n this.est.ColumnsList.forEach(c => { this.est.TMPColumnsList.push(Object.assign({}, c)); });\r\n\r\n let reorderedColList = [];\r\n\r\n if (this.est.ColumnsOrdering) {\r\n this.est.OrderDirectives.forEach(o => {\r\n let column = this.est.TMPColumnsList.filter(t => t.id == o)[0];\r\n // Potrei non averne nel caso ci sia il flag HiddenColumns a false, evito di inserire degli undefined\r\n if (column)\r\n reorderedColList.push(column);\r\n });\r\n\r\n this.est.TMPColumnsList = reorderedColList;\r\n }\r\n\r\n this.updateGlobalColVisCheck();\r\n }\r\n\r\n /** Riaggiorna le **OrderDirectives** con le informazioni in **ColumnsList** */\r\n private refreshColumnOrdering() {\r\n this.est.OrderDirectives = [];\r\n\r\n for (let c = 0; c < this.est.ColumnsList.length; c++)\r\n this.est.OrderDirectives.push(this.est.ColumnsList[c].id);\r\n }\r\n\r\n /** Effettua la selezione o meno del check globale (**globalColVisCheck**) di visibilità in base a se tutte le **TMPColumnsList** sono visibili o no */\r\n public updateGlobalColVisCheck() {\r\n // TMPColList viene riempita di undefined nel caso in cui sia disattivata la selezione delle colonne nascoste\r\n this.est.globalColVisCheck = this.est.TMPColumnsList.every(t => t.visible);\r\n }\r\n\r\n /**\r\n * Chiamato quando una colonna viene riordinata all'interno della lista delle visibilità/posizioni colonne\r\n * \r\n * @param {CdkDragDrop<EsTableColumn[]>} event Evento di drop della lista\r\n */\r\n public columnReordered(event: CdkDragDrop<EsTableColumn[]>) {\r\n moveItemInArray(event.container.data, event.previousIndex, event.currentIndex);\r\n }\r\n\r\n /**\r\n * Chiamato quando una colonna viene riordinata all'interno della lista delle visibilità/posizioni colonne\r\n * \r\n * @param {number} index Indice in cui voglio droppare l'elemento draggato\r\n * @param {CdkDrag<EsTableColumn>} item Oggetto che sto draggando\r\n * \r\n * @returns {boolean} **true** se la colonna può essere spostata sull'indice **index**, **false** altrimenti\r\n */\r\n public sortPredicate(index: number, item: CdkDrag<EsTableColumn>): boolean {\r\n let itemAtIndex = this.est.ColumnsList[index];\r\n return !itemAtIndex.fixed && !itemAtIndex.pinned && !item.data.pinned && !item.data.pinned;\r\n }\r\n\r\n /**\r\n * Funzione che effettua la conferma della visibilità e dell'ordine delle colonne.\r\n *\r\n * Questa selezione viene inoltre salvata nelle preferenze (**@esfaenza/preferences**), qualora l'Input **SavePreferences** fosse valorizzato\r\n *\r\n * @returns {boolean} **true** se non ci sono problemi, **false** altrimenti\r\n */\r\n public confirmColumnVisibilitySelection(): boolean {\r\n // Non permetto di non selezionare nulla\r\n if (this.est.TMPColumnsList.every(t => !t.visible))\r\n return false;\r\n\r\n let castedView = this.est.viewMode ? (this.est.MainGroupView || this.est.View as AppSearch<any>) : null;\r\n this.est.ColumnsList = [];\r\n this.est.TMPColumnsList.forEach(c => { this.est.ColumnsList.push(Object.assign({}, c)); });\r\n\r\n this.refreshColumnOrdering();\r\n this.applyOrdering(castedView, false);\r\n\r\n this.refreshColumnsVisibility(null, null, castedView);\r\n\r\n //Salvo le preferences di questa view\r\n //Di default registro ordinamento e visibilità delle colonne nella vista. Solo le cose di UI\r\n if (this.est.SavePreferences) {\r\n if (!this.est.ngControl.name) {\r\n console.error(\"Non posso utilizzare le preference senza avere un 'name' per la tabella\");\r\n return false;\r\n }\r\n\r\n if (!this.prefService) {\r\n console.error(\"Non posso utilizzare le preference senza che il pacchetto @esfaenza/preferences sia installato\");\r\n return false;\r\n }\r\n\r\n let columns = this.est.arrayMode ? this.est.arrayColumns : castedView.columns;\r\n let columnsOrderings = this.est.arrayMode ? this.est.arrayColumnOrdering : castedView.column_ordering;\r\n var toStore = { columns: <string[]>JSON.parse(JSON.stringify(columns)), column_ordering: <string[]>JSON.parse(JSON.stringify(columnsOrderings)) };\r\n this.prefService.store(<string>this.est.ngControl.name, toStore).subscribe();\r\n }\r\n\r\n // Rieseguo l'ultima ricerca bindata alla tabella\r\n // Mi assicuro di farlo dopo l'espansione del changed o rischio che la ricerca mi ridia colonne che in realtà non esistono\r\n if (this.est.viewMode)\r\n setTimeout(() => {\r\n if (this.est.MainGroupView) {\r\n //this.emitSearchRequest(true, this.MainGroupView);\r\n for (let i = 0; i < this.est.groupSearchRequestsCache.length; i++) {\r\n let view = this.est.groupSearchRequestsCache[i].view;\r\n view.columns = this.est.MainGroupView.columns;\r\n view.column_ordering = this.est.MainGroupView.column_ordering;\r\n this.est.emitSearchRequest(true, this.est.groupSearchRequestsCache[i].view);\r\n }\r\n }\r\n\r\n else\r\n this.est.emitSearchRequest(true);\r\n });\r\n else if (this.est.arrayMode)\r\n setTimeout(() => { this.est.internalWriteValue(); });\r\n\r\n // Lo vorrei mettere lato template ma no\r\n this.est.lastSelectedItemID = null;\r\n return true;\r\n }\r\n\r\n /**\r\n * Effettuo l'unpinning di una colonna in maniera programmatica semplicemente eseguendo una per una le operazioni che verrebbero eseguite altrimenti\r\n *\r\n * @param {string} id Codice della colonna da spinnare\r\n */\r\n public unpinColumn(id: string) {\r\n this.resetColumnVisSelection();\r\n this.pinOrUnpinColumn(this.est.TMPColumnsList.find(t => t.id == id));\r\n this.confirmColumnVisibilitySelection();\r\n }\r\n\r\n /** Sul click nella checkbox di selezione globale si scorrono tutte le colonne e si impostano al valore della check globale */\r\n public globalColVisCheckChanged() {\r\n this.est.TMPColumnsList.forEach(t => {\r\n if (!t.fixed)\r\n t.visible = this.est.globalColVisCheck;\r\n });\r\n }\r\n}\r\n","// Componenti\r\nimport { EsTableComponent } from \"../../../components/es-table/es_table.component\"\r\n\r\n// Dominio\r\nimport { EsTableColumnsDefinition, GenericItem } from \"../../../domain\";\r\n\r\n/** Classe contenente le gestioni particolari della modalità dinamica dell'es-table */\r\nexport class DynamicModeHandler {\r\n\r\n /** @ignore Costruttore*/\r\n constructor(private est: EsTableComponent) { }\r\n\r\n /**\r\n * Metodo di supporto alla creazione di un router link parametrizzato all'oggetto corrente utilizzato nella modalità dinamica\r\n *\r\n * @param {string} path Path su cui navigare con eventuali parametri riferiti all'oggetto cotnestuale come {0}, {1}, ecc...\r\n * @param {string[]} parameterProps Lista posizionale delle proprietà a cui bindare i riferimenti del parametro **path**\r\n * Es. Il valore dela proprietà all'indice 0 di questo array verrà sostituita al valore {0} del parametro **path**\r\n * @param {GenericItem} item Oggetto generico collegato a questo contesto\r\n *\r\n * @returns {any} Router link generato in base al parametri\r\n */\r\n public generateRouterLink(path: string, parameterProps: string[], item: GenericItem): any {\r\n if (this.est.DynamicTableRouterLinkCache[item._hash + path]) {\r\n return this.est.DynamicTableRouterLinkCache[item._hash + path];\r\n } else {\r\n let link = this.getRouterLink(path, parameterProps, item);\r\n this.est.DynamicTableRouterLinkCache[item._hash + path] = link;\r\n return link;\r\n }\r\n }\r\n\r\n /**\r\n * Crea un router link\r\n *\r\n * @param {string} path Path su cui navigare con eventuali parametri riferiti all'oggetto cotnestuale come {0}, {1}, ecc...\r\n * @param {string[]} pars Lista posizionale delle proprietà a cui bindare i riferimenti del parametro **path**\r\n * Es. Il valore dela proprietà all'indice 0 di questo array verrà sostituita al valore {0} del parametro **path**\r\n * @param {GenericItem} item Oggetto generico collegato a questo contesto\r\n *\r\n * @returns {any} Router link generato in base al parametri\r\n */\r\n private getRouterLink(path: string, pars: string[], item: GenericItem): any {\r\n\r\n for (let i = 0; i < pars.length; i++)\r\n path = path.replace('{' + i + '}', item.properties[pars[i]]);\r\n\r\n path = path.replace(/'/g, '\"').replace(/ /g, '');\r\n return JSON.parse(path);\r\n }\r\n\r\n /** Se non ho l'Input **DynamicRowColumnsDefinition** in modalità dinamica lo riempio con il default nome della colonna = testo della colonna */\r\n public eventuallyReviewDynamicColumns() {\r\n // Senza oggetti esco\r\n if (!this.est.TMPBoundSource || this.est.TMPBoundSource.length == 0)\r\n return;\r\n\r\n var useGenericItems = !!this.est.TMPBoundSource[0][\"properties\"];\r\n if (!useGenericItems || (!this.est.FirstBind && this.est.DynamicRowColumnsDefinition && this.est.DynamicRowColumnsDefinition.length > 0))\r\n return;\r\n\r\n if ((!this.est.DynamicRowColumnsDefinition || this.est.DynamicRowColumnsDefinition.length == 0)) {\r\n var props = <Record<string, string>>this.est.TMPBoundSource[0][\"properties\"];\r\n this.est.DynamicRowColumnsDefinition = [];\r\n for (let key in props)\r\n this.est.DynamicRowColumnsDefinition.push(new EsTableColumnsDefinition(key, key));\r\n this.est.UserDefinedDynamicCols = false;\r\n }\r\n\r\n else\r\n this.est.UserDefinedDynamicCols = true;\r\n }\r\n\r\n}\r\n","// Librerie\r\nimport { ExportService, MessageService } from \"@esfaenza/extensions\";\r\n\r\n// Componenti\r\nimport { EsTableComponent } from \"../../../components/es-table/es_table.component\"\r\n\r\n/** Classe contenente la gestione delle importazioni */\r\nexport class ExportHandler {\r\n\r\n /** @ignore Costruttore*/\r\n constructor(private est: EsTableComponent, private expExts: ExportService, private msgExts: MessageService) { }\r\n\r\n /**\r\n * Effettua l'esportazione dei dati\r\n *\r\n * @param {string} format Formato di esportazione. Letto solo in modalità Report della tabella\r\n */\r\n public tryExport(format?: string) {\r\n if (!this.est.ExportFunction)\r\n return;\r\n\r\n if (this.est.reportMode)\r\n this.est.ExportFunction(format);\r\n\r\n else\r\n this.est.ExportFunction((data: any[], cancel: boolean = false) => {\r\n if (cancel)\r\n return;\r\n\r\n if (data.length == 0) {\r\n this.msgExts.simpleWarning(this.est.lc.loc(\"Cannot export an empty dataset\"));\r\n return;\r\n }\r\n\r\n this.setupExport(data);\r\n this.est.cdr.detectChanges();\r\n setTimeout(() => { this.est.exportDownloader.nativeElement.click(); });\r\n });\r\n }\r\n\r\n /**\r\n * Metodo che effettivamente genera gli header e i dati per l'esportazione con **ngx-csv**\r\n *\r\n * @param {any[]} items Oggetti da esportare\r\n */\r\n private setupExport(items: any[]) {\r\n let drcd = this.est.DynamicRowColumnsDefinition;\r\n\r\n this.est.headers = drcd && drcd.length > 0 ? this.expExts.setupForGenericExport(items, drcd.map(t => { return { label: t.description, key: t.propertyName, order: t.columnOrder }; })) : this.expExts.setupForExport(items);\r\n this.est.data = items;\r\n }\r\n}\r\n","import { EsTableComponent } from \"../../../components/es-table/es_table.component\"\r\n\r\n/** Classe contenente la gestione della modalità gerarchica */\r\nexport class HierarchyModeHandler {\r\n\r\n /** @ignore Costruttore*/\r\n constructor(private est: EsTableComponent) { }\r\n\r\n /**\r\n * Data una lista di oggetti assegno il livello gerarchico rispetto alla lista di oggetti passata\r\n *\r\n * @param {any[]} objs Lista di oggetti a cui aggiungere l'informazione del livello gerarchico\r\n */\r\n public assignHierarchyLevels(objs: any[]) {\r\n // Casistica input nullo\r\n if (!objs || !objs.length)\r\n return;\r\n\r\n //Se mancano entrambe le info le cerco di valorizzare in automatico coi default \"parentid\" e \"id\" (posto che le props esistano nell'oggetto)\r\n if (!this.est.ParentKey && !this.est.OwnKey) {\r\n if (objs[0]['parentid'] !== undefined)\r\n this.est.ParentKey = 'parentid';\r\n if (objs[0]['id'] !== undefined)\r\n this.est.OwnKey = 'id';\r\n }\r\n\r\n //Check finale per assicurarmi che le props ci siano\r\n if (!this.est.ParentKey || !this.est.OwnKey) {\r\n console.error('Per utilizzare il sistema in modalità gerarchica è obbligatorio specificare sia ParentKey che OwnKey. Fallback a sistema non gerarchico');\r\n return;\r\n }\r\n\r\n // Valorizzazione campi level, expanded, e visible per ogni item\r\n let currentLevel = 1;\r\n let assigned = 0;\r\n do {\r\n assigned = this.assignLevel(objs, currentLevel);\r\n currentLevel++;\r\n } while (assigned > 0);\r\n // butto su lato html e poi me la gioco là con padding = 20 * (level - 1) per far capire il diverso livello\r\n }\r\n\r\n /**\r\n * Per ognuno degli oggetti passati gli assegna un livello di gerarchia in base a **ParentKey** e **OwnKey**\r\n *\r\n * @param {any[]} objs Oggetti a cui assegnare il livello di gerarchia\r\n * @param {number} levelToAssign Livello che sta assegnando attualmente questa iterazione (dato che è ricorsiva)\r\n *\r\n * @returns {number} Numero di oggetti a cui è stato assegnato un livello gerarchico\r\n */\r\n private assignLevel(objs: any[], levelToAssign: number): number {\r\n let assigned = 0;\r\n for (let i = 0; i < objs.length; i++) {\r\n let obj = objs[i];\r\n\r\n // Se la parentKey non è valorizzata, questo è il livello 0 (1... perché gli 0 son perciolosi)\r\n if (!obj[this.est.ParentKey] && levelToAssign == 1) {\r\n obj._level = 1;\r\n obj._visible = true;\r\n obj._expanded = this.est.StartsExpanded;\r\n assigned++;\r\n continue;\r\n }\r\n\r\n // Per i livelli superiore al primo\r\n if (obj[this.est.ParentKey] && levelToAssign > 1) {\r\n // trovo il parent\r\n for (let p = 0; p < objs.length; p++) {\r\n let possibleParent = objs[p];\r\n\r\n // Trovato il parent dell'item, assegno all'item il livello giusto\r\n if (possibleParent[this.est.OwnKey] == obj[this.est.ParentKey] && possibleParent._level == levelToAssign - 1) {\r\n obj._level = levelToAssign;\r\n\r\n // So che questo item ha un parent. Ribadisco che il parent è espanso in base alle impostazione e stessa logica\r\n // per la visibilità del figlio\r\n possibleParent._expanded = this.est.StartsExpanded;\r\n possibleParent.parent = true;\r\n obj._visible = this.est.StartsExpanded;\r\n assigned++;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return assigned;\r\n }\r\n\r\n /**\r\n * Funzione che permette di effettuare l'espansione di un parent quando la tabella funziona in modalità gerarchica\r\n *\r\n * @param {string} key Chiave del parent da espandere\r\n */\r\n public expandParent(key: string) {\r\n for (let i = 0; i < this.est.boundSource.length; i++) {\r\n let obj = this.est.boundSource[i];\r\n\r\n // Trovo il parent con quell'id e lo espando\r\n if (obj[this.est.OwnKey] == key) {\r\n obj._expanded = true;\r\n\r\n for (let ic = 0; ic < this.est.boundSource.length; ic++) {\r\n let child = this.est.boundSource[ic];\r\n\r\n // Trovo tutti i child di quel parent e li rendo visibili\r\n if (child[this.est.ParentKey] == key)\r\n child._visible = true;\r\n }\r\n return;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Funzione che permette di effettuare il collapse di un parent quando la tabella funziona in modalità gerarchica\r\n *\r\n * @param {string} key Chiave del parent da collassare\r\n */\r\n public collapseParent(key: string) {\r\n for (let i = 0; i < this.est.boundSource.length; i++) {\r\n let obj = this.est.boundSource[i];\r\n\r\n // Trovo il parent con quell'id e lo collasso\r\n if (obj[this.est.OwnKey] == key) {\r\n obj._expanded = false;\r\n\r\n // Collasso/nascondo tutti i child del parent\r\n this.collapseChildOfParent(key);\r\n return;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Collassa ricorsivamente tutti i figli di un parent identificato dalla **parentKey**\r\n *\r\n * @param {string} parentKey Chiave del parent di cui collassare i figli\r\n */\r\n private collapseChildOfParent(parentKey: string) {\r\n for (let ic = 0; ic < this.est.boundSource.length; ic++) {\r\n let child = this.est.boundSource[ic];\r\n\r\n // Trovo tutti i child di quel parent e li rendo invisibili. Se il child trovato è a sua volta un parent,\r\n // lo collasso e vado in ricorsione sui figli\r\n if (child[this.est.ParentKey] == parentKey && !child.parent)\r\n child._visible = false;\r\n else if (child[this.est.ParentKey] == parentKey && child.parent) {\r\n child._expanded = false;\r\n child._visible = false;\r\n this.collapseChildOfParent(child[this.est.OwnKey]);\r\n }\r\n }\r\n }\r\n}\r\n","// Componenti\r\nimport { EsTableComponent } from \"../../../components/es-table/es_table.component\"\r\n\r\n// Modelli\r\nimport { AppSearch } from \"../../../domain\";\r\n\r\n// Utilities\r\nimport { UtilitiesHandler } from \"./UtilitiesHandler\";\r\n\r\n/** Classe che si occupa della gestione del recupero degli oggetti, paginazione e tutto ciò in cui gli elementi caricati vengono manipolati direttamente */\r\nexport class ItemsHandler {\r\n\r\n /** @ignore Costruttore */\r\n constructor(private est: EsTableComponent, private utilities: UtilitiesHandler) { }\r\n\r\n /**\r\n * In base alla modalità specificata (ArrayMode, ViewMode, ecc...) questo metodo recupera l'array di oggetti da bindare ad interfaccia\r\n *\r\n * @param {boolean} onlyselected [false] Indica di prendere solo gli oggetti selezionati\r\n * @param {boolean} refreshPaging [false] Indica se aggiornare le informazioni di paginazione o meno\r\n * @param {boolean} allIfPossible [false] Indica se prendere tutti gli oggetti quaora possibile, usato solo in ArrayMode\r\n *\r\n * @returns {any[]} Lista degli oggetti su cui effettuare il bind lato interfaccia\r\n */\r\n public getItemsByMode(onlyselected: boolean = false, refreshPaging: boolean = false, allIfPossible: boolean = false): any[] {\r\n let items: any[] = [];\r\n\r\n if ((this.est.viewMode && this.est.View instanceof AppSearch)) {\r\n items = this.getViewItemsBySource();\r\n }\r\n else if (this.est.arrayMode) {\r\n this.est.View.forEach(itm => { itm._item = true; });\r\n\r\n // Se faccio dei raggruppamenti ignoro la paginazione\r\n if (this.est.UseArrayModePaging && !allIfPossible) {\r\n\r\n // Se sono in modalità array ma la ricerca dipende da una view devo riallineare gli itemperpage\r\n if (this.est.SearchView)\r\n {\r\n this.est.ArraymodeItemsPerPage = this.est.SearchView.itemsperpageoverride;\r\n this.est.arraymodePage = this.est.SearchView.page;\r\n this.est.arraymodePages = this.est.SearchView.pages;\r\n }\r\n // Devo chiamare il refresh page solo se vengo richiamato da un binding esterno\r\n else if (refreshPaging)\r\n this.refreshPaging(this.est.ArraymodeItemsPerPage);\r\n\r\n items = this.adaptViewToPaging();\r\n } else {\r\n items = this.est.View as any[];\r\n }\r\n }\r\n\r\n // Se voglio solo i selezionati filtro\r\n if (onlyselected)\r\n return items.filter(t => t._selected);\r\n\r\n return items;\r\n }\r\n\r\n /**\r\n * Metodo per effettuare il refresh della paginazione sul cambiamento degli oggetti da visualizzare in una singola pagina.\r\n *\r\n * Vale solo per la modalità Array\r\n *\r\n * @param {number} pageSize Dimensione della pagina\r\n */\r\n public refreshPaging(pageSize: number) {\r\n this.est.ArraymodeItemsPerPage = pageSize;\r\n this.est.arraymodePages = Math.ceil((this.est.View as any[]).length / this.est.ArraymodeItemsPerPage);\r\n this.est.arraymodePage = 1;\r\n\r\n // Riforzo il writevalue in modo che il codice passi dalla gestione come se fosse fatta ripartire una ricerca\r\n this.est.internalWriteValue();\r\n }\r\n\r\n /**\r\n * Ottiene gli oggetti in base alla sorgente\r\n */\r\n private getViewItemsBySource(): any[] {\r\n let castedView = this.est.View as AppSearch<any>;\r\n let groupKeys = castedView.groupings ? castedView.groupings.filter(t => !t.aggregation).length : 0;\r\n\r\n //Gruppi intermedi\r\n if ((castedView.requestedgroups?.length != groupKeys || castedView.requestedgroups?.length == 0) && groupKeys > 0) {\r\n let ret = castedView.groups;\r\n ret.forEach(itm => {\r\n\r\n // Setto variabile interna per capire che questo è in realtà un gruppo\r\n (<any>itm)._group = true;\r\n\r\n // Le informazioni passate come lista le metto dentro a una cache per velocizzarne l'accesso quando devo tirare fuori il display della proprietà\r\n this.utilities.cacheAggregations(itm);\r\n });\r\n return ret;\r\n }\r\n else {\r\n let ret = this.est.SecondarySource ? (this.est.View as any).items2 : this.est.TertiarySource ? (this.est.View as any).items3 : (this.est.View as any).items;\r\n if (!ret) ret = [];\r\n // Setto variabile interna per specificare che questo è un elemento normale, non un gruppo o altro\r\n ret.forEach(itm => { (<any>itm)._item = true; });\r\n return ret;\r\n }\r\n }\r\n\r\n /** Genera le informazioni di paginazione e taglia la View in modalità array per mostrare solo gli oggetti della pagina specificata */\r\n private adaptViewToPaging() {\r\n let tmpItems: any[] = [];\r\n\r\n // Se ho una search view l'array pulsanti viene calcolato da lei, non devo prendere quello della modalità array,\r\n // inoltre non ho bisogno di fare ragionamenti su quanti elementi ci sono e sulla pagina, dato che viene tutto gestito esternamente, \r\n // unendo al risultato della view tutti gli oggetti addizionali\r\n if (!this.est.SearchView)\r\n this.est.arrayPulsanti = this.utilities.getPagesArray(6, this.est.arraymodePage, this.est.arraymodePages);\r\n else\r\n return this.est.View as any[];\r\n\r\n // Poi per tutti i valori dopo compresi fra la pagina - 1 e la pagina\r\n for (let i = ((this.est.arraymodePage - 1) * this.est.ArraymodeItemsPerPage); i < this.est.arraymodePage * this.est.ArraymodeItemsPerPage; i++) {\r\n if (i <= (this.est.View as any[]).length - 1)\r\n tmpItems.push((this.est.View as any[])[i]);\r\n }\r\n\r\n return tmpItems;\r\n }\r\n\r\n /**\r\n * Metodo che prende tutti gli oggetti di cui dispone divisi in bucket da 100 elementi\r\n *\r\n * @returns {any[][]} Matrice di array Nx100\r\n */\r\n public getItemSlices(): any[][] {\r\n // Se sono qui di sicuro non ho rowgrouping\r\n let items = this.getItemsByMode();\r\n if (!items)\r\n return [];\r\n\r\n let arrayBy100 = [];\r\n let slices = Math.ceil(items.length / this.est.SliceSize);\r\n for (let i = 0; i < slices; i++) {\r\n let arraySlice = items.slice(i * this.est.SliceSize, i * this.est.SliceSize + this.est.SliceSize);\r\n arrayBy100.push(arraySlice);\r\n }\r\n return arrayBy100;\r\n }\r\n\r\n /** Se in modalità array applica gli ordinamenti ASC-DESC delle colonne */\r\n public arrayModeReviewOrderings() {\r\n if (this.est.arrayOrders.length > 0)\r\n this.est.arrayOrders.forEach(t => { this.est.boundSource = this.est.boundSource.sort((a, b) => (a[t.id] > b[t.id] ? 1 : -1) * (t.order == 'DESC' ? -1 : 1)); });\r\n }\r\n}\r\n","// Handlers\r\nimport { UtilitiesHandler } from \"./UtilitiesHandler\";\r\n\r\n// Componenti\r\nimport { EsTableComponent } from \"../../../components/es-table/es_table.component\"\r\n\r\n// Modelli\r\nimport { ReportColumn, ReportDefinition, ReportOrder } from \"../../../domain\";\r\n\r\n/** Classe che gestisce la modalità Report dell'es-table utilizzata nel Metering */\r\nexport class ReportModeHandler {\r\n\r\n /** @ignore Costruttore */\r\n constructor(private est: EsTableComponent, private utilities: UtilitiesHandler) { }\r\n\r\n /**\r\n * Sul click dell'Header di una colonna questo metodo si occupa di applicare l'ordinamento successivo e di notificare con **emitSearchRequest**\r\n * il bisogno di aggiornare i dati da parte del componente che utilizza la tabella\r\n *\r\n * Utilizzato solo in modalità REport\r\n *\r\n * @param {ReportColumn} clm Colonna del report per cui ordinare\r\n */\r\n public setupNextOrderAndSearch(clm: ReportColumn) {\r\n if (!(this.est.View instanceof ReportDefinition)) {\r\n console.error('View diversa da reportdefinition entrata nel metodo setupNextOrderAndSearch');\r\n return;\r\n }\r\n\r\n let orderNext = { NONE: 'DESC', DESC: 'ASC', ASC: null };\r\n let nextOrder = orderNext[clm.order || 'NONE'];\r\n clm.order = nextOrder;\r\n\r\n let order: ReportOrder;\r\n let clmOrder = this.est.View.orders ? this.est.View.orders.filter(t => t.column == clm.id) : [];\r\n if (clmOrder.length == 0 && clm.order) {\r\n order = new ReportOrder();\r\n order.column = clm.id;\r\n order.order = clm.order;\r\n if (!this.est.View.orders)\r\n this.est.View.orders = [];\r\n\r\n this.est.View.orders.push(order);\r\n }\r\n else if (clmOrder.length == 1) {\r\n // Rimuovo l'ordinamento o aggiorno quello già esistente\r\n if (!clm.order)\r\n clmOrder = [];\r\n\r\n else\r\n clmOrder[0].order = clm.order;\r\n }\r\n\r\n else\r\n console.warn('Impossibile settare ordinamento. Colonna ' + clm.id + ' direttive di ordinamento ' + clmOrder.length + ' ordinamento scelto ' + clm.order);\r\n\r\n // Dopo aver aggiornato l'ordinamento rilancio la ricerca\r\n this.est.emitSearchRequest(false);\r\n }\r\n\r\n /** Metodo che si occupa di gestire la grafica della tabella in base alle informazioni di ordinamento colonne e paginazione contenuti nel modello */\r\n public reviewReportBindings() {\r\n if (!(this.est.View instanceof ReportDefinition)) {\r\n console.error('View diversa da reportdefinition entrata nel metodo reviewReportBindings');\r\n return;\r\n }\r\n\r\n // Allineo le informazioni su eventuali ordinamenti fatti precedentemente\r\n if (this.est.View.orders && this.est.View.orders.length > 0) {\r\n this.est.View.orders.forEach(t => {\r\n this.est.ReportValues.columns.filter(c => c.id == t.column)[0].order = t.order;\r\n });\r\n }\r\n\r\n // Recupero il count precedente se serve\r\n if (this.est.ReportValues.count != -2)\r\n this.est.previousCount = this.est.ReportValues.count;\r\n else if (this.est.ReportValues.count == -2)\r\n this.est.ReportValues.count = this.est.previousCount;\r\n\r\n let ipp = (this.est.View.itemsperpageoverride || 15);\r\n this.est.View.pages = Math.ceil(this.est.ReportValues.count / ipp);\r\n this.est.arrayPulsanti = this.utilities.getPagesArray(6, this.est.View.page, this.est.View.pages);\r\n }\r\n}\r\n","// Librerie\r\nimport { DateService } from \"@esfaenza/extensions\";\r\n\r\n// Direttive / Componenti\r\nimport { EsTh } from \"../../../components/es-th/es_th.component\";\r\nimport { EsThDirective } from \"../../../directives/es_th.directive\";\r\nimport { EsTableComponent } from \"../../../components/es-table/es_table.component\"\r\n\r\n// Modelli\r\nimport { AppOrdering, AppSearch, Group, GroupAggregation, GroupOrAggregation, GroupPager, GroupRouteFragment, ThAggregation } from \"../../../domain\";\r\n\r\n// Utilities\r\nimport { UtilitiesHandler } from \"./UtilitiesHandler\";\r\n\r\n/** Classe che gestisce la modalità Row Grouping dell'es-table */\r\nexport class RowGroupingHandler {\r\n\r\n /** Cache per salvare per ogni chiave di ogni gruppo chi è il gruppo rappresentato */\r\n public rgGroupCache: Map<string, Group> = new Map<string, Group>();\r\n /** Cache per salvare per ogni chiave di ogni gruppo chi sono gli oggetti sottostanti, non dei sottogruppi */\r\n public rgItemCache: Map<string, any[]> = new Map<string, any[]>();\r\n /** Cache per salvare per ogni chiave di ogni gruppo chi sono gli oggetti sottostanti, non dei sottogruppi */\r\n public rgChildGroupsCache: Map<string, Group[]> = new Map<string, Group[]>();\r\n\r\n /** @ignore Costruttore */\r\n constructor(private est: EsTableComponent, private utilities: UtilitiesHandler, private dateExts: DateService) { }\r\n\r\n /**\r\n * In modalità rowgrouping quando mi arriva un nuovo blocco di oggetti devo aggiungerlo alla vista attuale:\r\n *\r\n * 1) Se non viene richiesto il dettaglio di alcun gruppo significa che devo considerare mi siano arrivati tutti i gruppi principali\r\n * 2) Se viene richiesto il dettaglio di un gruppo diverso dall'ultimo devo aggiungere dopo al gruppo cliccato la lista dei sottogruppi\r\n * 2) Se viene richiesto il dettaglio dell'ultimo gruppo devo aggiungere dopo al gruppo cliccato la lista degli oggetti\r\n *\r\n * @param {any} view AppSearch<T> da cui sono arrivati gli oggetti\r\n * @param {number} groupingKeys Livelli di raggruppamento da aspettarsi sui dati\r\n */\r\n public handleNewDataOnRowGrouping(view: AppSearch<any>, groupingKeys: number) {\r\n // 1) Se non viene richiesto il dettaglio di alcun gruppo significa che la chiamata restituisce la lista paginata dei gruppi principali.\r\n // Li tratto come se fosse una qualsiasi altra query paginata su N elementi\r\n if ((view.requestedgroups?.length || 0) == 0) {\r\n this.est.boundSource = this.est.TMPBoundSource;\r\n this.rgGroupCache = new Map<string, Group>();\r\n this.rgItemCache = new Map<string, any[]>();\r\n this.rgChildGroupsCache = new Map<string, Group[]>();\r\n\r\n this.est.TMPBoundSource.forEach(itm => {\r\n itm._thisRoute = itm._group ? [{ column: (<Group>itm).column, value: (<Group>itm).value }] : [];\r\n itm._thisKey = itm._group ? (<Group>itm).value : null;\r\n itm._grouplevel = 0;\r\n\r\n this.rgGroupCache.set(itm._thisKey, itm);\r\n });\r\n\r\n // Resetto la ricerca alla cache di questa \"sessione\"\r\n let firstItem = this.est.TMPBoundSource[0];\r\n this.est.MainGroupView = Object.assign({}, view);\r\n this.est.groupSearchRequestsCache = [{ path: '', route: [{ column: (<Group>firstItem).column, value: (<Group>firstItem).value }], view: this.est.MainGroupView, group_column: (<Group>this.est.TMPBoundSource[0]).column }];\r\n this.est.BaseItemsCount = view.objectcount;\r\n }\r\n else {\r\n // 2) Se viene richiesto il dettaglio di un qualsiasi gruppo diverso dall'ultimo vuol dire che devo aggiungere \r\n // dopo al gruppo che ho cliccato la lista dei gruppi tirata fuori questa volta (intermediateGroup = true)\r\n /*\r\n * GruppoA GruppoA\r\n * GruppoB GruppoB\r\n * GruppoC <- Clicco qui GruppoC\r\n * GruppoD GruppoC1\r\n * GruppoE GruppoC2\r\n * GruppoD\r\n * GruppoE\r\n */\r\n // 3) se i gruppi richiesti dalla view sono uguali ai gruppi presenti vuol dire che sto prendendo gli oggetti veri e propri, sono in \r\n // view.items e quindi in TMPBoundSource, ho inoltre le informazioni di paginazione **per il singolo sottogruppo** (intermediateGroup = false)\r\n /*\r\n * GruppoA GruppoA\r\n * GruppoC1 GruppoC1\r\n * GruppoB GruppoB\r\n * GruppoC GruppoC\r\n * GruppoC1 <-- Clicco qui GruppoC1\r\n * Oggetto1\r\n * Oggetto2\r\n * Oggetto3\r\n * GruppoC2 GruppoC2\r\n * GruppoD GruppoD\r\n * GruppoE GruppoE\r\n */\r\n let intermediateGroup = view.requestedgroups.length != groupingKeys;\r\n\r\n let items = this.est.boundSource;\r\n let insertIndex = 0;\r\n let insertGroup = null;\r\n let groupKey: string = \"\";\r\n let groupRoute: GroupRouteFragment[] = [];\r\n\r\n // Navigo la stuttura dei gruppi ignorando ricorsivamente tutti gli indici fino ai gruppi che mi interessano in modo da non beccare il primo \"GruppoC1\" del caso sopra\r\n for (let i = 0; i < view.requestedgroups.length; i++) {\r\n let rg = view.requestedgroups[i];\r\n groupKey += rg.value;\r\n groupRoute.push({ column: rg.column, value: rg.value });\r\n for (let i = insertIndex; i < items.length; i++) {\r\n let t = items[i];\r\n if (i >= insertIndex && t._group && t.column == rg.column && t.value == rg.value) {\r\n insertIndex = i; insertGroup = t;\r\n // Lo marco expanded dato che questo click sul gruppo potrebbe non essere stato fatto\r\n insertGroup._expanded = true;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n let itemsCacheReference;\r\n let childGroupsCacheReference;\r\n\r\n // Se non è un gruppo intermedio devo ripulire la cache del gruppo su cui ho attualmente cliccato. Gli oggetti saranno riaggiunti dopo\r\n if (!intermediateGroup) {\r\n this.rgItemCache.set(groupKey, []);\r\n itemsCacheReference = this.rgItemCache.get(groupKey);\r\n }\r\n else {\r\n // Se invece è un gruppo intermedio devo ripulire sia tutti i child group ricorsivamente, sia tutti gli item\r\n for (let key of this.rgChildGroupsCache.keys())\r\n if (key.startsWith(groupKey))\r\n this.rgChildGroupsCache.delete(key);\r\n\r\n for (let key of this.rgItemCache.keys())\r\n if (key.startsWith(groupKey))\r\n this.rgItemCache.delete(key);\r\n\r\n this.rgChildGroupsCache.set(groupKey, []);\r\n childGroupsCacheReference = this.rgChildGroupsCache.get(groupKey);\r\n }\r\n\r\n // Assegno un livello ai valori che arrivano da usare per formattare la parte grafica. Il primo gruppo cliccato sarà a livello 1,\r\n // il secondo sarà a livello 2 e così via...\r\n // Li marco inoltre con il parent in modo da poter eliminare i vecchi qualora servisse\r\n this.est.TMPBoundSource.forEach(itm => {\r\n itm._parent = groupKey;\r\n itm._parentRoute = groupRoute;\r\n itm._thisRoute = itm._group ? [...groupRoute, new GroupRouteFragment((<Group>itm).column, (<Group>itm).value)] : [];\r\n itm._thisKey = itm._group ? groupKey + (<Group>itm).value : groupKey;\r\n\r\n // Per le ricerca intermedie metto i gruppi nella cache dei gruppi\r\n if (intermediateGroup) {\r\n itm._grouplevel = view.requestedgroups.length;\r\n this.rgGroupCache.set(itm._thisKey, itm);\r\n childGroupsCacheReference.push(itm);\r\n }\r\n else {\r\n // Metto anche gli oggetti nella cache non ricorsiva\r\n itemsCacheReference.push(itm);\r\n }\r\n });\r\n\r\n // Elimino gli oggetti vecchi \r\n // 1) Ricerca intermedia, stato salvato - Elimino tutti gli item e tutti i gruppi la cui route è più lunga della corrente, tutti gli item relativi alla path corrente, e tutte\r\n // le cache di ricerca effettuate su una path più profonda dell'attuale\r\n // 2) Ricerca finale o ricerca intermedia senza stato salvato - Elimino tutti gli item relativi alla path corrente\r\n // Per \"stato salvato\" si intendono ricerche vecchie salvate per poter essere rieffettuate in caso di ordinamenti su colonne di interesse \r\n if (intermediateGroup && view.savedstate) {\r\n this.est.boundSource = this.est.boundSource.filter(t => !(t._item || t._thisRoute.length > groupRoute.length));\r\n this.est.groupSearchRequestsCache = this.est.groupSearchRequestsCache.filter(t => !(t.route.length > groupRoute.length));\r\n }\r\n\r\n this.est.boundSource = this.est.boundSource.filter(t => !(t._parent == groupKey));\r\n\r\n let thisGroup = this.est.boundSource[insertIndex];\r\n if (intermediateGroup)\r\n thisGroup._groupscount = (<AppSearch<any>>this.est.View)?.groupcount;\r\n\r\n // Li sostituisco coi nuovi di questa ricerca\r\n this.est.boundSource.splice(insertIndex + 1, 0, ...this.est.TMPBoundSource);\r\n\r\n // Aggiungo un separatore alla fine o all'inizio di questi gruppi che dovrà occuparsi di caricare ALTRI gruppi o oggetti (se sono all'ultimo gruppo)\r\n let addLast = false;\r\n this.est.boundSource.splice(insertIndex + 1 + (addLast ? this.est.TMPBoundSource.length : 0), 0, this.getGroupSeparator(view, groupKey, groupRoute, view.requestedgroups.length, intermediateGroup ? 'groups' : 'items'));\r\n\r\n // Aggiungo la ricerca alla cache di questa \"sessione\"\r\n let toAdd = { path: groupKey, route: groupRoute, view: Object.assign({}, view), group_column: intermediateGroup ? (<Group>this.est.TMPBoundSource[0]).column : '' };\r\n let prev = this.est.groupSearchRequestsCache.findIndex(t => t.path == toAdd.path && t.group_column == toAdd.group_column);\r\n if (prev == -1)\r\n this.est.groupSearchRequestsCache.push(toAdd);\r\n\r\n else\r\n this.est.groupSearchRequestsCache.splice(prev, 1, toAdd);\r\n }\r\n }\r\n\r\n /**\r\n * Se in modalità array applica i raggruppamenti definiti lato row-grouping\r\n *\r\n * @param {ths: EsTh[] | EsThDirective[]} ths Header\r\n */\r\n public arrayModeReviewGroupings(ths: EsTh[] | EsThDirective[]) {\r\n if (ths.length == 0)\r\n return;\r\n\r\n if (this.utilities.isEsTh(ths[0]))\r\n return;\r\n\r\n let headerGroups: Group[] = [];\r\n let headerAggregations: GroupOrAggregation[] = [];\r\n\r\n for (let i = 0; i < ths.length; i++) {\r\n let th = ths[i] as EsThDirective;\r\n\r\n if (th.thGroup)\r\n headerGroups.push(new Group(th.th, 0, \"\"));\r\n else if (th.thAggregation)\r\n headerAggregations = [...headerAggregations, ...this.getGroupAggregations(th)];\r\n }\r\n\r\n if (headerGroups.length > 0) {\r\n // Pulizia delle cache\r\n this.rgGroupCache.clear();\r\n this.rgItemCache.clear();\r\n this.rgChildGroupsCache.clear();\r\n\r\n this.est.ArrayGrouping = true;\r\n this.est.boundSource = this.getGroupsRecursive(headerGroups, 0, this.est.boundSource, headerAggregations, null);\r\n }\r\n }\r\n\r\n /**\r\n * Data una direttiva EsTh restituisce la lista delle aggregazioni richiesta per questa colonna o il gruppo che rappresenta\r\n *\r\n * @param {EsThDirective} th Direttiva\r\n *\r\n * @returns {GroupOrAggregation[]} Lista dei gruppi o aggregazioni relativi alla Direttiva passata\r\n */\r\n public getGroupAggregations(th: EsThDirective): GroupOrAggregation[] {\r\n let ret = [];\r\n // Es: '{min:dd/MM/yyyy} - {max:dd/MM/yyyy}'\r\n if (th.thAggregation) {\r\n this.getEsThDirectiveListOfAggregations(th).forEach((agg: ThAggregation) => {\r\n let isdate = agg.format && ['small', 'long', 'verylong'].includes(agg.format);\r\n let isnumber = agg.format && agg.format.startsWith(\"F\") && !Number.isNaN(agg.format.charAt(1)) && agg.format.length == 2;\r\n\r\n if (!isdate && !isnumber && agg.format)\r\n throw \"Le aggergazioni supportate dall'es-table sono solo 'small', 'long', 'verylong' per le date e 'F0-9' per i numeri\";\r\n\r\n ret.push(new GroupOrAggregation(th.th, agg.func, isdate ? 'date' : isnumber ? 'number' : 'string'));\r\n });\r\n }\r\n else if (th.thGroup)\r\n ret.push(new GroupOrAggregation(th.th, null));\r\n\r\n return ret;\r\n }\r\n\r\n\r\n /**\r\n * Data una direttiva con un formato restituisce tutte le coppie Funzione di Aggregazione - Formato\r\n *\r\n * @param {EsThDirective} th Direttiva EsTh di cui calcolare le funzioni di aggregazione usate\r\n *\r\n * @returns {{ func: string, format: string }[]} Lista delle funzioni di aggregazione rilevate\r\n */\r\n private getEsThDirectiveListOfAggregations(th: EsThDirective): ThAggregation[] {\r\n if (!th.thAggregation)\r\n return [];\r\n\r\n // Se ho già effettuato questo calcolo per questo th restituisco la versione in cache\r\n if (th._thAggregations)\r\n return th._thAggregations;\r\n\r\n let ret = [];\r\n let display = th.thAggregation;\r\n var matches = display.match(/{[a-zA-Z0-9\\/:]*}/gi);\r\n if (!matches)\r\n return [];\r\n matches.forEach(m => {\r\n let split = m.split(\":\");\r\n let func = m, format = \"\";\r\n if (split.length > 0) {\r\n // Escludo primo e ultimo carattere (le graffe)\r\n func = split[0].substr(1);\r\n format = split[1].substr(0, split[1].length - 1);\r\n }\r\n\r\n ret.push({ func: <'min' | 'max' | 'sum'>func, format: format, match: m });\r\n });\r\n\r\n th._thAggregations = ret;\r\n return ret;\r\n }\r\n\r\n /**\r\n * Data la definizione dei gruppi da generare da una lista di oggetti, suddivide gli oggetti passati in gruppi e sottogruppi\r\n *\r\n * @param {Group[]} grps Definizione dei gruppi\r\n * @param {number} currentIndex Indice di elaborazione. Al livello 0 ho tutti gli oggetti e devo generare i primi gruppi, a livello 1 ho tutti i gruppi principali e devo\r\n * elaborare i sottogruppi, e così via ricorsivamente...\r\n * @param {any[]} items Oggetti da raggruppare\r\n * @param {GroupOrAggregation[]} aggregations Info di aggregazione\r\n * @param {any} parent Riferimento al gruppo padre\r\n */\r\n private getGroupsRecursive(grps: Group[], currentIndex: number, items: any[], aggregations: GroupOrAggregation[], parent?: any): any[] {\r\n // Se l'indice è 0 devo sicuramente nascondere tutti gli oggetti. Solo i gruppi saranno visualizzati\r\n if (currentIndex == 0)\r\n items.forEach(i => i._visible = false);\r\n\r\n let grp = grps[currentIndex];\r\n let ret: any[] = [];\r\n let last = grps.length == currentIndex + 1;\r\n let groups = this.utilities.groupBy(items, grp.column);\r\n for (let prop in groups) {\r\n let itms = groups[prop];\r\n let gp = new Group(grp.column, itms.length, prop);\r\n gp.aggregations = this.generateAggregations(itms, aggregations);\r\n\r\n let anygp = (<any>gp);\r\n anygp._group = true;\r\n anygp._expanded = false;\r\n if (!parent) {\r\n anygp._thisRoute = [{ column: gp.column, value: gp.value }];\r\n anygp._thisKey = gp.value;\r\n anygp._grouplevel = 0;\r\n }\r\n else {\r\n anygp._parent = parent._thisKey;\r\n anygp._parentRoute = parent._thisRoute;\r\n anygp._thisRoute = [...parent._thisRoute, { column: gp.column, value: gp.value }];\r\n anygp._thisKey = parent._thisKey + gp.value;\r\n anygp._grouplevel = parent._grouplevel + 1;\r\n }\r\n\r\n // Pusho il gruppo, tutti i gruppi del livello sotto, o gli item se io sono l'ultimo gruppo. \r\n // La visibilità è solo per il gruppo a livello 0, tutti gli altri gruppi saranno mostrati o nascosti di conseguenza\r\n if (currentIndex == 0)\r\n anygp._visible = true;\r\n\r\n this.utilities.calculateHash([anygp]);\r\n this.utilities.cacheAggregations(anygp);\r\n\r\n // Aggiungo il gruppo padre\r\n ret.push(anygp);\r\n this.rgGroupCache.set(anygp._thisKey, anygp);\r\n if (!last) {\r\n\r\n //Dal gruppo padre, se non è l'ultimo gruppo della catena, calcolo ricorsivamente tutta la catena sotto\r\n let subGroupsAndItems = this.getGroupsRecursive(grps, currentIndex + 1, itms, aggregations, anygp);\r\n let childgroups = subGroupsAndItems.filter(t => t._group && t._parent == anygp._thisKey);\r\n anygp._groupscount = childgroups.length;\r\n\r\n // Aggiungo la catena del gruppo sotto, aggiungendo alla cache solo i gruppi padre\r\n ret.push(...subGroupsAndItems);\r\n this.rgChildGroupsCache.set(anygp._thisKey, childgroups);\r\n }\r\n else {\r\n // Al gruppo padre, se è l'ultimo assegno tutte le foglie assegnandogli anche la chiave del gruppo\r\n itms.forEach(i => i._thisKey = anygp._thisKey);\r\n\r\n ret.push(...itms);\r\n this.rgItemCache.set(anygp._thisKey, itms);\r\n }\r\n }\r\n return ret;\r\n }\r\n\r\n /**\r\n * Data una lista di oggetti genera le aggregazioni specificate. Si considera di avere tutti gli oggetti\r\n *\r\n * @param {any[]} items Oggetti di cui calcolare le aggregazione\r\n * @param {GroupOrAggregation[]} aggregations Aggergazioni da generare\r\n */\r\n private generateAggregations(items: any[], aggregations: GroupOrAggregation[]): GroupAggregation[] {\r\n let rets: GroupAggregation[] = [];\r\n let aggregationValue = \"\", feField = null, stringAgg = null, dateAgg = null, numberAgg = null;\r\n\r\n for (let i = 0; i < aggregations.length; i++) {\r\n let agg = aggregations[i];\r\n feField = agg.column;\r\n if (!feField)\r\n continue;\r\n\r\n switch (agg.datatype) {\r\n case 'string': stringAgg = items.map(i => i[feField].toString()); break;\r\n case 'date': dateAgg = items.map(i => new Date(i[feField]).getTime()); break;\r\n case 'number': numberAgg = items.map(i => parseFloat(i[feField])); break;\r\n }\r\n\r\n switch (agg.aggregation) {\r\n case 'max':\r\n switch (agg.datatype) {\r\n case 'string': aggregationValue = stringAgg.sort().reverse()[0]; break;\r\n case 'date': aggregationValue = new Date(Math.max(...dateAgg)).toString(); break;\r\n case 'number': aggregationValue = Math.max(...numberAgg).toString(); break;\r\n }\r\n break;\r\n case 'min':\r\n switch (agg.datatype) {\r\n case 'string': aggregationValue = stringAgg.sort()[0]; break;\r\n case 'date': aggregationValue = new Date(Math.min(...dateAgg)).toString(); break;\r\n case 'number': aggregationValue = Math.min(...numberAgg).toString(); break;\r\n }\r\n break;\r\n case 'sum':\r\n switch (agg.datatype) {\r\n case 'string': aggregationValue = stringAgg.join(\", \"); break;\r\n case 'date': aggregationValue = \"\"; break;\r\n case 'number': aggregationValue = numberAgg.reduce((pre, curr) => pre + curr, 0).toString(); break;\r\n }\r\n break;\r\n }\r\n rets.push(new GroupAggregation(agg.column, agg.aggregation, aggregationValue));\r\n }\r\n\r\n return rets;\r\n }\r\n\r\n /**\r\n * Ottiene un elemento di separazione fra Gruppi che serve per paginare le ricerche all'interno di ogni singolo gruppo\r\n *\r\n * @param {AppSearch<any>} view View utilizzata per la ricerca. Me ne salvo i parametri nel separatore attuale dato che ne ho bisogno per caricare altri elementi\r\n * facenti riferimento allo stesso contesto\r\n * @param {string} parent Parent path che rappresenta a quale gruppo è affibbiato questo separatore\r\n * @param {GroupRouteFragment[]} route Route path che rappresenta a quale gruppo è affibbiato questo separatore\r\n * @param {number} level Livello del gruppo di cui questo elemento è separatore, viene usato per applicare la classe \"est-lvl-{{level}}\"\r\n *\r\n * @returns {any} Elemento di separazione contenente tutti i bind per presentare una paginazione sotto questo gruppo lato interfaccia\r\n */\r\n public getGroupSeparator(view: AppSearch<any>, parent: string, route: GroupRouteFragment[], level: number, searches: 'groups' | 'items'): GroupPager {\r\n let item = new GroupPager(level, route, parent, Object.assign({}, view), searches);\r\n item.buttons = this.utilities.getPagesArray(6, view.page, view.pages);\r\n this.utilities.calculateHash([item]);\r\n return item;\r\n }\r\n\r\n\r\n /**\r\n * Data una colonna effettua la riemissione di tutte le ricerche relative.\r\n *\r\n * Es. Ho 2 campi di gruppo e ho espanso fino a vedere i valori fino ad un livello qualsiasi.\r\n * Clicco l'ordinamento sul secondo gruppo.\r\n * Tutte le ricerche relative ai primi gruppi devono essere rieseguite. Quando i risultati arriveranno ci penserà il metodo **bindDisplayToLoadedItemsOrGroups**\r\n * a tagliare via gli oggetti non più visualizzati\r\n *\r\n * @param {string} column Colonna su cui si è effettuata un'operazione di ordinamento\r\n * @param {AppOrdering[]} orderings Direttive di ordinamento da applicare alle varie sottoricerche\r\n */\r\n public emitRowGroupingSearches(column: string, orderings: AppOrdering[]) {\r\n // Per tutte le ricerche intermedie che devo rivalutare le re-emitto in modo da aggiornargli i dati\r\n var meaningfulAppSearches = this.est.groupSearchRequestsCache.filter(t => t.group_column == column).map(t => t.view);\r\n\r\n // Se non ne trovo significa che ho fatto l'ordinamento o sugli item, o su colonne relative a un sottogruppo non caricato\r\n if (!meaningfulAppSearches || meaningfulAppSearches.length == 0)\r\n meaningfulAppSearches = this.est.groupSearchRequestsCache.filter(t => !t.group_column).map(t => t.view);\r\n\r\n // Se non ne trovo qui significa che sto ordinando su colonne relative a un sottogruppo non caricato\r\n if (!meaningfulAppSearches || meaningfulAppSearches.length == 0)\r\n return;\r\n\r\n meaningfulAppSearches.forEach(as => {\r\n // Ovviamente gli oridnamenti devono essere quelli appena generati\r\n as.orders = orderings;\r\n as.savedstate = true;\r\n this.est.emitSearchRequest(false, as);\r\n });\r\n }\r\n\r\n /**\r\n * Helper che calcola il contenuto di una cella relativa a un gruppo riga, tenendo conto del formato delle eventuali aggregazioni\r\n *\r\n * @param {Group} grp Gruppo di cui mostrare le celle\r\n * @param {string} cell Cella attuale di cui calcolare il testo\r\n * @param {EsThDirective} header Header relativo alla cella attuale, utilizzata per identificare le informazioni di aggregazione\r\n *\r\n * @returns {string} Testo finale calcolato per la **cell** corrente, in base alle aggregazioni di **header**\r\n */\r\n public getGroupCellDisplay(grp: Group, cell: string, header: EsThDirective): string {\r\n if ((<any>grp)._sep)\r\n return \"\";\r\n let display = header.thAggregation;\r\n if (grp.column == cell) {\r\n let groupsPart = (<any>grp)._groupscount ? \" - \" + (<any>grp)._groupscount + \" \" + this.est.lc.loc(\"Groups\") : \"\";\r\n return grp.value + \" (\" + grp.count + groupsPart + \")\";\r\n }\r\n else {\r\n\r\n let agg = (<Map<string, Map<string, string>>>(<any>grp)._aggregationsCache).get(cell);\r\n if (!agg)\r\n return \"\";\r\n\r\n this.getEsThDirectiveListOfAggregations(header).forEach((itm: ThAggregation) => {\r\n display = display.replace(itm.match, this.formatAggregationValue(agg.get(itm.func), itm.format));\r\n });\r\n\r\n return display;\r\n }\r\n }\r\n\r\n /**\r\n * Funzione che dato un valore lo formatta in base al tipo\r\n * \r\n * @param {string} value Valore che generalemnte può essere una data o un numero\r\n * @param {string} fromat Formato su cui formattare il valore. Può essere ad esempio \"small\", \"long\" \"verylong\" per le date o F{0-9} per i numeri decimali\r\n * \r\n * @returns {string} Valore dell'aggregazione formattato come si deve\r\n */\r\n private formatAggregationValue(value: string, format?: string): string {\r\n if (!format)\r\n return value;\r\n\r\n let isNumber = !Number.isNaN(value) && (!format || format.startsWith(\"F\"));\r\n\r\n if (isNumber && format.startsWith(\"F\") && !Number.isNaN(format.substr(1)))\r\n return parseFloat(value).toFixed(parseInt(format.substr(1)));\r\n\r\n let date = null;\r\n // Alcune versione di extensions rischiano di crashare con cose non date... è stato risolto dopo quindi questo try - catch in realtà\r\n // torna utile solo con versioni vecchie/deprecate della libreria @esfaenza/extensions\r\n try { date = this.dateExts.getDateConvertion(value); } catch { }\r\n\r\n if (date)\r\n return this.dateExts.getFormatted(date, format == 'small', format == 'verylong');\r\n\r\n // Qui ci finisco sia per input che non sono né date né numeri, sia per formati non riconosciuti\r\n return value;\r\n }\r\n}","// Modelli\r\nimport { AppSearch, CacheTriptic, ItemsSelection } from \"../../../domain\";\r\n\r\n// Componenti\r\nimport { EsTableComponent } from \"../../../components/es-table/es_table.component\"\r\n\r\n// Handlers\r\nimport { RowGroupingHandler } from \"../\";\r\n\r\n/** Classe che gestisce le selezioni degli oggetti */\r\nexport class SelectionHandler {\r\n\r\n /** Cache di selezione Hash - Oggetto per la variabile **items** dell'itemSelector. Facilita le operazioni di lookup via hash*/\r\n private itemsCache: Map<string, any> = new Map();\r\n /** Cache di selezione Hash - Oggetto per la variabile **groups** dell'itemSelector. Facilita le operazioni di lookup via hash */\r\n private groupsCache: Map<string, any> = new Map();\r\n /** Cache di selezione Hash - Oggetto per la variabile **exclusions** dell'itemSelector. Facilita le operazioni di lookup via hash */\r\n private exclusionsCache: Map<string, any> = new Map();\r\n /** Cache di selezione Hash - Oggetto per la variabile **group_exclusions** dell'itemSelector. Facilita le operazioni di lookup via hash */\r\n private group_exclusionsCache: Map<string, any> = new Map();\r\n\r\n /** Cache di selezione Hash - Oggetto per la variabile **items** dell'itemSelector. Facilita le operazioni di lookup via indice*/\r\n private i_itemsCache: Map<string, number> = new Map();\r\n /** Cache di selezione Hash - Oggetto per la variabile **groups** dell'itemSelector. Facilita le operazioni di lookup via indice */\r\n private i_groupsCache: Map<string, number> = new Map();\r\n /** Cache di selezione Hash - Oggetto per la variabile **exclusions** dell'itemSelector. Facilita le operazioni di lookup via indice */\r\n private i_exclusionsCache: Map<string, number> = new Map();\r\n /** Cache di selezione Hash - Oggetto per la variabile **group_exclusions** dell'itemSelector. Facilita le operazioni di lookup via indice */\r\n private i_group_exclusionsCache: Map<string, number> = new Map();\r\n\r\n /** @ignore Costruttore */\r\n constructor(private est: EsTableComponent, private rgHandler: RowGroupingHandler) { }\r\n\r\n /** Ripulisce le cache di selezione */\r\n public clearSelectionCaches() {\r\n this.itemsCache.clear();\r\n this.groupsCache.clear();\r\n this.exclusionsCache.clear();\r\n this.group_exclusionsCache.clear();\r\n\r\n this.i_itemsCache.clear();\r\n this.i_groupsCache.clear();\r\n this.i_exclusionsCache.clear();\r\n this.i_group_exclusionsCache.clear();\r\n }\r\n\r\n /**\r\n * Valuta quali elementi devono essere marcati come selezionati nella vista attuale. Si basa sull'oggetto **selection** interno all'AppSearch\r\n *\r\n * @param {any[]} items Oggetti di cui valutare la selezione\r\n * @param {ItemsSelection<any>} selectionItem Oggetti di selezione derivante dalla view o dall'oggetto per Array\r\n */\r\n public evaluateSelection(items: any[], selectionItem: ItemsSelection<any>) {\r\n if (!selectionItem)\r\n return;\r\n\r\n this.handleSelectionEvaluation(items, selectionItem);\r\n }\r\n\r\n /**\r\n * Implementazione agnostica della valutazione delle selezioni degli oggetti. Richiede gli oggetti della vista attuale e l'itemSelector\r\n *\r\n * @param {any[]} items Oggetti di cui aggiornare lo stato di selezione\r\n * @param {ItemsSelection<any>} selectionItem Oggetto contenente lo stato attuale di selezione\r\n */\r\n private handleSelectionEvaluation(items: any[], selectionItem: ItemsSelection<any>) {\r\n for (let i = 0; i < items.length; i++) {\r\n let itm = items[i];\r\n let hash = itm._hash;\r\n let itemGroup = itm._group ? null : this.getItemGroup(itm);\r\n // Reidrato la cache di selezione coi nuovi oggetti altrimenti non riuscirei a beccare gli indici giusti\r\n // Dopodiché la uso per calcolare istantaneamente se gli oggetti sono selezionati o no\r\n this.rehidrateCache(itm);\r\n\r\n if (itm._item) {\r\n if (selectionItem.all)\r\n itm._selected = !this.exclusionsCache.has(hash) && ((!this.groupsCache.has(itemGroup?._hash) && this.itemsCache.has(hash)) || !this.group_exclusionsCache.has(itemGroup?._hash));\r\n else\r\n itm._selected = !this.exclusionsCache.has(hash) && (this.groupsCache.has(itemGroup?._hash) || this.itemsCache.has(hash) || (this.parentTreeStatus(itemGroup) == 'included' && !this.group_exclusionsCache.has(itemGroup?._hash)));\r\n }\r\n else if (itm._group) {\r\n if (selectionItem.all)\r\n itm._selected = !this.group_exclusionsCache.has(hash) && this.parentTreeStatus(itm) != 'excluded';\r\n else\r\n itm._selected = this.groupsCache.has(hash) || (this.parentTreeStatus(itm) == 'included' && !this.group_exclusionsCache.has(hash));\r\n }\r\n }\r\n\r\n // Se tutti gli oggetti di questa pagina sono solezionati allora posso mettere il global check a true\r\n // Se sono in situazione di all-select anche metto la global checkbox, nonostante ci possano essere delle esclusioni\r\n this.est.globalCheck = this.est.boundSource.length > 0 && this.est.boundSource.filter(t => t._group || t._item).every(t => t._selected);\r\n this.est.canSelectAll = selectionItem.count > 0 && this.est.SelectAll;\r\n\r\n // Potrebbe cambiare qualora qualcuno inserisse dati a manazza in modalità Array e desse il refresh manuale alla tabella\r\n // Comunque costa 0 quindi mi permetto di refreshare\r\n if (this.est.arrayMode) {\r\n let prevSelected = this.est.selectedObjects;\r\n this.finalizeSelectionInformations(selectionItem);\r\n if (this.est.selectedObjects != prevSelected)\r\n this.est.onSelectionChanged.emit(selectionItem);\r\n }\r\n }\r\n\r\n /**\r\n * Dato un oggetto trova la cella di cache in cui è registrato e aggiorna il contenuto\r\n * \r\n * @param {any} item Oggetto da aggiornare\r\n */\r\n private rehidrateCache(item: any) {\r\n let ctx = item._hash;\r\n if (this.itemsCache.has(ctx))\r\n this.itemsCache.set(ctx, item);\r\n\r\n if (this.group_exclusionsCache.has(ctx))\r\n this.group_exclusionsCache.set(ctx, item);\r\n\r\n if (this.groupsCache.has(ctx))\r\n this.groupsCache.set(ctx, item);\r\n\r\n if (this.exclusionsCache.has(ctx))\r\n this.exclusionsCache.set(ctx, item);\r\n }\r\n\r\n /**\r\n * Dato un gruppo controlla ricorsivamente l'albero di cui fa parte se c'è stata una inclusione o esclusione diretta\r\n * \r\n * @param {any} grp Gruppo da controllare\r\n * \r\n * @returns {'none' | 'excluded' | 'included'} \r\n * 'none' se non ci sono informazioni su inclusioni o esclusioni \r\n * 'included' se il gruppo controllato è stato incluso in maniera esplicita dall'albero dei gruppi padri\r\n * 'excluded' se il gruppo controllato è stato escluso in maniera esplicita dall'albero dei gruppi padri\r\n */\r\n private parentTreeStatus(grp: any): 'none' | 'excluded' | 'included' {\r\n if (!grp)\r\n return 'none';\r\n\r\n let parentGroup: any = this.rgHandler.rgGroupCache.get(grp._parent);\r\n\r\n if (!parentGroup)\r\n return 'none';\r\n\r\n if (this.group_exclusionsCache.has(parentGroup._hash))\r\n return 'excluded';\r\n\r\n if (this.groupsCache.has(parentGroup._hash))\r\n return 'included';\r\n\r\n return this.parentTreeStatus(parentGroup);\r\n }\r\n\r\n\r\n /**\r\n * Helper per gestire la selezione di N elementi utilizzando la Cache di selezione ed eventualmente aggiornando il concetto di \"all selection\"\r\n *\r\n * Vunziona sia in modalità Array che in modalità View Semplice o View Avanzata (con le Custom Cells)\r\n *\r\n * @param {any[]} items Oggetti da selezionare o deselezionare\r\n * @param {boolean} forcedVal Valore forzato di check da assegnare agli oggetti\r\n * @param {boolean} globalCheck Valore del check globale\r\n *\r\n * @returns {ItemsSelection<any>} Oggetto di selezione aggiornato con le informazioni sull'ultima operazione effettuata\r\n */\r\n public handleItemsSelection(items: any[], forcedVal: boolean = null, globalCheck: boolean = null): ItemsSelection<any> {\r\n let si = (this.est.View as AppSearch<any>)?.selection || this.est.arraymodeSelection;\r\n\r\n // Se sono in modalità di selezione singola e devo selezionare un'oggetto, per prima cosa devo deselezionare tutti gli altri\r\n if (this.est.SingleSelection && items[0]?._selected && !items[0]?._group) {\r\n if (items.length > 1 && forcedVal == null)\r\n throw \"Tentativo di selezionare o deselezionare più di un elemento con SingleSelection attivo\";\r\n\r\n if (items.length == 1 && forcedVal == null) {\r\n si = this.handleItemsSelection(this.est.boundSource.filter(t => !t._group), false, null);\r\n items[0]._selected = true;\r\n }\r\n }\r\n\r\n for (let i = 0; i < items.length; i++) {\r\n let item = items[i];\r\n let toChange = forcedVal != null ? item._selected != forcedVal : globalCheck != null ? item._selected != this.est.globalCheck : false;\r\n\r\n // Se dev'essere overridato il valore di check effettuo l'override o col valore forzato o col valore globale\r\n if (toChange && !item.locked)\r\n item._selected = forcedVal != null ? forcedVal : this.est.globalCheck;\r\n\r\n // Se il valore non dev'essere variato e vengo da una selezione globale semplicemente evito di effettuare operaizoni inutili. L'item/gruppo è già nello stato giusto\r\n if (!toChange && globalCheck != null)\r\n continue;\r\n\r\n let allSelection = si.all;\r\n let isGroup = item._group;\r\n let isSelection = item._selected;\r\n let itemGroup = null, allItems = null, selectedItems = null, unselectedItems = null, allGroups = null, selectedGroups = null, unselectedGroups = null, parentGroupSelected = null, parentGroupUnselected = null;\r\n\r\n if (isGroup) {\r\n let pts = this.parentTreeStatus(item);\r\n parentGroupSelected = pts == 'included';\r\n parentGroupUnselected = pts == 'excluded';\r\n allItems = this.getGroupItems(si, item, null, true);\r\n selectedItems = this.getGroupItems(si, item, 'selected', true, allItems);\r\n unselectedItems = this.getGroupItems(si, item, 'unselected', true, allItems);\r\n allGroups = this.getGroupChildGroups(si, item, null, true);\r\n selectedGroups = this.getGroupChildGroups(si, item, 'selected', true, allGroups);\r\n unselectedGroups = this.getGroupChildGroups(si, item, 'unselected', true, allGroups);\r\n }\r\n else {\r\n itemGroup = this.getItemGroup(item);\r\n parentGroupSelected = itemGroup == null ? null : itemGroup._selected;\r\n parentGroupUnselected = itemGroup == null ? null : !itemGroup._selected;\r\n }\r\n\r\n if (!this.est.ArrayGrouping)\r\n this.performSelectionOperations(si, item, allSelection, isGroup, isSelection, selectedItems, selectedGroups, unselectedItems, unselectedGroups, allItems, allGroups, parentGroupSelected, parentGroupUnselected);\r\n else\r\n this.performSimpleSelectionOperations(si, item, isGroup, isSelection, itemGroup, selectedItems, unselectedItems, allItems, allGroups);\r\n }\r\n\r\n // Imposto il check globale in base a se tutti gli elementi sono selezionati o meno.\r\n // Evito di fare queste operazioni se la selezione deriva proprio dal global Check\r\n if (globalCheck == null)\r\n this.est.globalCheck = !this.est.boundSource.some(t => !t._selected && !t._sep);\r\n\r\n this.finalizeSelectionInformations(si);\r\n\r\n return si;\r\n }\r\n\r\n /**\r\n * Dato L'oggetto di selezione, l'oggetto da selezionare/deselezionare e tutti i parametri del caso effettua le operazioni che servono.\r\n * \r\n * Logica semplificata rispetto all'originale **performSelectionOperations** per lavorare in una modalità in cui tutti gli elementi sono caricati (**ArrayGrouping** = true)\r\n */\r\n private performSimpleSelectionOperations(base: ItemsSelection<any>, item: any, group: boolean, sel: boolean, itm_group: any, sel_itm: any[], desel_itm: any[], all_itms: any[], all_grps: any[]) {\r\n let tripticItem = this.getTriptic('item', base);\r\n\r\n if (group) {\r\n if (sel) {\r\n all_grps.forEach(gr => { gr._selected = true; });\r\n if (desel_itm)\r\n desel_itm.forEach(el => { el._selected = true; this.addItem(el, tripticItem) });\r\n }\r\n else {\r\n all_grps.forEach(gr => { gr._selected = false; });\r\n if (sel_itm)\r\n sel_itm.forEach(el => { el._selected = false; this.removeItem(el, tripticItem) });\r\n }\r\n }\r\n else {\r\n if (sel) {\r\n this.addItem(item, tripticItem);\r\n if (itm_group && all_itms && all_itms.every(t => t._selected))\r\n this.selectGroup(itm_group);\r\n }\r\n else {\r\n this.removeItem(item, tripticItem);\r\n if (itm_group)\r\n itm_group._selected = false;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Helper per selezionare un gruppo e, ricorsivamente, se tutti i gruppi sottostanti al parent sono selezionati, selezionare i gruppi padri\r\n * \r\n * @param {any} group Gruppo da selezionare\r\n */\r\n private selectGroup(group: any) {\r\n group._selected = true;\r\n let parent = this.getGroupParent(group);\r\n if (parent && this.getGroupChildGroups(null, parent, null, true).every(t => t._selected))\r\n this.selectGroup(parent);\r\n }\r\n\r\n /**\r\n * Dato L'oggetto di selezione, l'oggetto da selezionare/deselezionare e tutti i parametri del caso effettua le operazioni che servono.\r\n * \r\n * La logica di questa funzione è nata essenzialmente da spam di trial & error ed è stata testata solo fino a due livelli di raggruppamento,\r\n * qualsiasi cosa vada oltre non è 100% detto che funzioni...\r\n */\r\n private performSelectionOperations(base: ItemsSelection<any>, item: any, all: boolean, group: boolean, sel: boolean, sel_itm: any[], sel_grp: any[], desel_itm: any[], desel_grp: any[], all_itms: any[], all_grps: any[], parent_incl: boolean, parent_excl: boolean) {\r\n let tripticGroup = this.getTriptic('group', base);\r\n let tripticItem = this.getTriptic('item', base);\r\n let tripticExcl = this.getTriptic('exclusion', base);\r\n let tripticgrpExcl = this.getTriptic('group_exclusion', base);\r\n\r\n if (group) {\r\n if (sel) {\r\n if (all || parent_incl)\r\n this.removeItem(item, tripticgrpExcl);\r\n else\r\n this.addItem(item, tripticGroup);\r\n\r\n if (sel_itm) sel_itm.forEach(el => this.removeItem(el, tripticItem));\r\n if (sel_grp) sel_grp.forEach(gr => this.removeItem(gr, tripticGroup));\r\n if (all_itms) all_itms.forEach(el => { el._selected = true; this.removeItem(el, tripticExcl); });\r\n if (all_grps) all_grps.forEach(gr => { gr._selected = true; this.removeItem(gr, tripticgrpExcl); });\r\n }\r\n else {\r\n if (all || parent_incl)\r\n this.addItem(item, tripticgrpExcl);\r\n else\r\n this.removeItem(item, tripticGroup);\r\n\r\n if (desel_itm) desel_itm.forEach(el => this.removeItem(el, tripticExcl));\r\n if (desel_grp) desel_grp.forEach(gr => this.removeItem(gr, tripticExcl));\r\n if (all_itms) all_itms.forEach(el => { el._selected = false; this.removeItem(el, tripticItem); });\r\n if (all_grps) all_grps.forEach(gr => { gr._selected = false; this.removeItem(gr, tripticGroup); });\r\n }\r\n }\r\n else {\r\n if (sel) {\r\n if ((parent_excl == null && all) || parent_incl)\r\n this.removeItem(item, tripticExcl);\r\n else\r\n this.addItem(item, tripticItem);\r\n }\r\n else {\r\n if (parent_excl || (!all && parent_excl == null))\r\n this.removeItem(item, tripticItem);\r\n else\r\n this.addItem(item, tripticExcl);\r\n }\r\n }\r\n }\r\n\r\n /** Helper per evitare di riscrivere ogni santa volta array.splice(array.indexof(item), 1); */\r\n private removeItem(item: any, triptic?: CacheTriptic) {\r\n let index = triptic.index_cache.get(item._hash);\r\n if (index != null) {\r\n triptic.cache.delete(item._hash);\r\n triptic.index_cache.delete(item._hash);\r\n triptic.array[index] = null;\r\n }\r\n\r\n return !!index;\r\n }\r\n\r\n /** Helper per evitare di riscrivere ogni santa volta array.push(item); e la gestione della */\r\n private addItem(item: any, triptic?: CacheTriptic): boolean {\r\n if (triptic.index_cache.get(item._hash) == null) {\r\n let i = triptic.array.push(item) - 1;\r\n triptic.cache.set(item._hash, item);\r\n triptic.index_cache.set(item._hash, i);\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Ottiene il trittico di selezione, cioè l'array degli oggetti che si vuole manipolare e le due cache collegate ad esso\r\n * \r\n * @param {'group' | 'item' | 'group_exclusion' | 'exclusion'} subject Oggetto logico desiderato su cui effettuare le operazioni successive\r\n * @param {ItemsSelection<any>} base Selettore di base\r\n * \r\n * @returns {CacheTriptic} Trittico di selezione\r\n */\r\n private getTriptic(subject: 'group' | 'item' | 'group_exclusion' | 'exclusion', base: ItemsSelection<any>): CacheTriptic {\r\n switch (subject) {\r\n case 'group':\r\n return new CacheTriptic(this.groupsCache, this.i_groupsCache, base.groups);\r\n case 'item':\r\n return new CacheTriptic(this.itemsCache, this.i_itemsCache, base.items);\r\n case 'group_exclusion':\r\n return new CacheTriptic(this.group_exclusionsCache, this.i_group_exclusionsCache, base.group_exclusions);\r\n case 'exclusion':\r\n return new CacheTriptic(this.exclusionsCache, this.i_exclusionsCache, base.exclusions);\r\n }\r\n }\r\n\r\n /**\r\n * Dato un oggetto restituisce il gruppo di cui fa parte, se esiste\r\n * \r\n * @param {any} item Oggetto di cui trovare il gruppo\r\n */\r\n private getItemGroup(item: any): any {\r\n let parent = this.rgHandler.rgGroupCache.get(item._thisKey)\r\n if (parent)\r\n return parent;\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Data la chiave di un gruppo restituisce tutti gli oggetti con quella chiave\r\n * \r\n * @param {any} group Chiave da cercare\r\n * @param {'selected' | 'unselected'} status Stato degli elementi, selezionati o no\r\n * @param {boolean} recursive Indica se cercare solo gli elementi direttamente collegati o se prendere anche quelli dei gruppi figli\r\n * \r\n * @returns {any[]} Oggetti di tipo **_item** facenti capo alla chiave **groupKey**\r\n */\r\n private getGroupItems(sel: ItemsSelection<any>, group: any, status?: 'selected' | 'unselected', recursive: boolean = false, allbase: any[] = null): any[] {\r\n let items = [];\r\n\r\n if (allbase)\r\n items = allbase;\r\n else {\r\n if (recursive) {\r\n // In modalità ricorsiva prendo gli oggetti di tutte le chiavi simili che trovo\r\n for (let key of this.rgHandler.rgItemCache.keys())\r\n if (key.startsWith(group._thisKey))\r\n items.push(...this.rgHandler.rgItemCache.get(key));\r\n }\r\n else\r\n items = this.rgHandler.rgItemCache.get(group._thisKey);\r\n }\r\n\r\n items = items.filter(t => !status || (t._selected && status == 'selected') || (!t._selected && status == 'unselected'));\r\n\r\n // Non trovo nessun oggetto, però magari di oggetti ne ho all'interno dell'oggetto di selezione. \r\n // Questo può essere vero solo se NON sono in modalità array, in caso contrario gli oggetti li devo per forza avere tutti\r\n if (items.length != 0 || !sel || this.est.arrayMode)\r\n return items;\r\n\r\n if (status == 'unselected')\r\n items = sel.exclusions.filter(t => t != null &&\r\n (!recursive && t._thisKey == group._thisKey) ||\r\n (recursive && t._thisKey.startsWith(group._thisKey)));\r\n else if (status == 'selected')\r\n items = sel.items.filter(t => t != null &&\r\n (!recursive && t._thisKey == group._thisKey) ||\r\n (recursive && t._thisKey.startsWith(group._thisKey)));\r\n\r\n return items;\r\n }\r\n\r\n /**\r\n * Data la chiave di un gruppo restituisce tutti gli oggetti con quella chiave\r\n * \r\n * @param {any} group Gruppo di cui cercare il parent\r\n * \r\n * @returns {any} Oggetto di tipo **_group** rappresentante il parent del **group** attuale\r\n */\r\n private getGroupParent(group: any): any {\r\n let parent = this.rgHandler.rgGroupCache.get(group._parent)\r\n if (parent)\r\n return parent;\r\n\r\n return null;\r\n }\r\n\r\n /**\r\n * Data la chiave di un gruppo restituisce tutti i gruppi figli\r\n * \r\n * @param {string} group Gruppo che rappresenta il padre di cui cercare i figli\r\n * @param {'selected' | 'unselected'} status Stato dei gruppi, selezionati o no\r\n * @param {boolean} recursive Indica se cercare solo i gruppi direttamente collegati o se prendere anche quelli dei gruppi figli\r\n * \r\n * @returns {any[]} Oggetti di tipo **_group** facenti capo alla chiave **groupKey**\r\n */\r\n private getGroupChildGroups(sel: ItemsSelection<any>, group: any, status?: 'selected' | 'unselected', recursive: boolean = false, allbase: any[] = null) {\r\n let thisGroup: any = this.rgHandler.rgGroupCache.get(group._thisKey);\r\n let items = [];\r\n\r\n if (allbase)\r\n items = allbase;\r\n else {\r\n if (recursive) {\r\n // In modalità ricorsiva prendo gli oggetti di tutte le chiavi simili che trovo\r\n for (let key of this.rgHandler.rgChildGroupsCache.keys())\r\n if (key.startsWith(group._thisKey))\r\n items.push(...this.rgHandler.rgChildGroupsCache.get(key));\r\n }\r\n else\r\n items = this.rgHandler.rgChildGroupsCache.get(group._thisKey);\r\n }\r\n\r\n items = items.filter(t => !status || (t._selected && status == 'selected') || (!t._selected && status == 'unselected'));\r\n\r\n // Non trovo nessun oggetto, però magari di oggetti ne ho all'interno dell'oggetto di selezione\r\n if (items.length != 0 || !sel)\r\n return items;\r\n\r\n if (status == 'unselected')\r\n items = sel.group_exclusions.filter((t: any) => t != null && (\r\n (!recursive && t._thisRoute.length == thisGroup._thisRoute.length + 1 && t._thisRoute.startsWith(group._thisKey)) ||\r\n (recursive && t._thisKey.startsWith(group._thisKey))));\r\n else\r\n items = sel.groups.filter((t: any) => t != null && (\r\n (!recursive && t._thisRoute.length == thisGroup._thisRoute.length + 1 && t._thisRoute.startsWith(group._thisKey)) ||\r\n (recursive && t._thisKey.startsWith(group._thisKey))));\r\n\r\n return items;\r\n }\r\n\r\n /** Finalizza le informazioni di selezione del **ItemsSelection** corrente */\r\n private finalizeSelectionInformations(selectionItem: ItemsSelection<any>) {\r\n // Dato che le delete sono logiche dato che tengo la cache degli indici devo renderle fisiche\r\n let tmpGrp = [], tmpItems = [], tmpExcl = [], tmpGrpExcl = [];\r\n let grpRemoved = false, itemsRemoved = false, exclRemoved = false, grpExclRemoved = false;\r\n\r\n for (let i = 0; i < selectionItem.items.length; i++)\r\n if (selectionItem.items[i] != null) tmpItems.push(selectionItem.items[i]);\r\n else itemsRemoved = true;\r\n\r\n for (let i = 0; i < selectionItem.exclusions.length; i++)\r\n if (selectionItem.exclusions[i] != null) tmpExcl.push(selectionItem.exclusions[i]);\r\n else exclRemoved = true;\r\n\r\n // In vecchie versioni dell'AppSearch per cui non vengono deserializzate queste informaizoni potrebbero esserci casini\r\n if (selectionItem.groups) {\r\n for (let i = 0; i < selectionItem.groups.length; i++)\r\n if (selectionItem.groups[i] != null) tmpGrp.push(selectionItem.groups[i]);\r\n else grpRemoved = true;\r\n }\r\n\r\n if (selectionItem.group_exclusions) {\r\n for (let i = 0; i < selectionItem.group_exclusions.length; i++)\r\n if (selectionItem.group_exclusions[i] != null) tmpGrpExcl.push(selectionItem.group_exclusions[i]);\r\n else grpExclRemoved = true;\r\n }\r\n\r\n selectionItem.items = tmpItems;\r\n selectionItem.group_exclusions = tmpGrpExcl;\r\n selectionItem.exclusions = tmpExcl;\r\n selectionItem.groups = tmpGrp;\r\n\r\n // Le cache degli indici potrebbero avere buchi, risolvo\r\n if (grpRemoved)\r\n this.i_groupsCache = this.compactIndexMap(this.i_groupsCache);\r\n if (itemsRemoved)\r\n this.i_itemsCache = this.compactIndexMap(this.i_itemsCache);\r\n if (exclRemoved)\r\n this.i_exclusionsCache = this.compactIndexMap(this.i_exclusionsCache);\r\n if (grpExclRemoved)\r\n this.i_group_exclusionsCache = this.compactIndexMap(this.i_group_exclusionsCache);\r\n\r\n // Poi riprendo a fare tutto in normalità\r\n selectionItem.count = this.evaluateSelected();\r\n\r\n // Se ho fatto selezione \"all\" ma poi mi sono messo a togliere tutti gli elementi fino a rimanerne 0 resetto l'oggetto di selezione\r\n if (selectionItem.count == 0) {\r\n this.est.boundSource.forEach(t => t._selected = false);\r\n selectionItem.all = false;\r\n selectionItem.exclusions = [];\r\n selectionItem.items = [];\r\n selectionItem.groups = [];\r\n selectionItem.group_exclusions = [];\r\n\r\n // Ripulisco la cache altrimenti mi rimane piena di tutte le esclusioni\r\n this.clearSelectionCaches();\r\n }\r\n\r\n // Se la possibilità di fare \"Seleziona tutto\" è abilitata allora la considero appena mi viene selezionato qualcosa\r\n this.est.canSelectAll = selectionItem.count > 0 && this.est.SelectAll;\r\n }\r\n\r\n /** Compatta una cache di indici */\r\n private compactIndexMap(map: Map<string, number>): Map<string, number> {\r\n let index = 0;\r\n let ret = new Map();\r\n for (let key of map.keys())\r\n ret.set(key, index++);\r\n\r\n return ret;\r\n }\r\n\r\n\r\n /**\r\n * Valuta la quantità di oggetti che sono stati selezionati al termine di un evento di selezione\r\n *\r\n * @returns {number} Numero di oggetti selezionati\r\n */\r\n private evaluateSelected(): number {\r\n let si = (this.est.View as AppSearch<any>)?.selection || this.est.arraymodeSelection;\r\n\r\n let excByGroup = si.group_exclusions.reduce((prev, curr) => prev + curr.count, 0);\r\n let incByGroup = si.groups.reduce((prev, curr) => prev + curr.count, 0);\r\n\r\n this.est.selectedObjects = (si.all ? this.est.BaseItemsCount : incByGroup) - excByGroup + si.items.length - si.exclusions.length;\r\n return this.est.selectedObjects;\r\n }\r\n\r\n /** Gestisce il comando di \"Seleziona tutto in tutte le pagine\" o il suo contrario, cioè \"Reimposta selezione\" */\r\n public selectAllOrResetSelection() {\r\n let selectionItem = this.est.View.selection || this.est.arraymodeSelection;\r\n this.clearSelectionCaches();\r\n selectionItem.all = !selectionItem.all;\r\n selectionItem.exclusions = [];\r\n selectionItem.groups = [];\r\n selectionItem.group_exclusions = [];\r\n selectionItem.items = [];\r\n\r\n // Ripulisco gli stati UI di selezione globale se l'ho disattivata\r\n if (!selectionItem.all) {\r\n this.est.canSelectAll = false;\r\n this.est.globalCheck = false;\r\n }\r\n\r\n this.finalizeSelectionInformations(selectionItem);\r\n\r\n this.est.onSelectionChanged.emit(selectionItem);\r\n\r\n // Dopo aver resettato direttamente il solo oggetto this.View.selection devo anche riallineare a tutti gli oggetti bindati\r\n this.evaluateSelection(this.est.boundSource, selectionItem);\r\n }\r\n}","// Angular\r\nimport { Injectable } from \"@angular/core\";\r\n\r\n// Librerie\r\nimport { HashingService } from \"@esfaenza/extensions\";\r\n\r\n// Componenti\r\nimport { EsTd } from \"../../../components/es-td/es_td.component\";\r\nimport { EsTh } from \"../../../components/es-th/es_th.component\";\r\n\r\n/** Classe di utilità per le cose comuni */\r\n@Injectable({ providedIn: 'root' })\r\nexport class UtilitiesHandler {\r\n\r\n /** @ignore Costruttore */\r\n constructor(private hashExts: HashingService) { }\r\n\r\n /**\r\n * Data una lista di oggetti effettua dei raggruppamenti in base alla proprietà **field**, \r\n * restituendo un oggetto del tipo { Gruppo1: oggetti[], Gruppo2: oggetti[], ecc... }\r\n *\r\n * @param {any[]} array Lista degli oggetti da raggruppare\r\n * @param {string} field Campo su cui effettuare i raggruppamenti\r\n *\r\n * @returns {{ [id: string]: any[] }} Dizionario dei gruppi\r\n */\r\n public groupBy(array: any[], field: string): { [id: string]: any[]; } {\r\n let ret = {};\r\n for (let i = 0; i < array.length; i++) {\r\n let x = array[i];\r\n (ret[x[field]] = ret[x[field]] || []).push(x);\r\n }\r\n return ret;\r\n };\r\n\r\n /**\r\n * Helper per effettuare il caching delle aggregazioni. Le sposta da una lista di **GroupAggregation** a una **<Map<string, Map<string, string>>**\r\n *\r\n * @param {any} group Gruppo di cui cachare le aggregazioni\r\n */\r\n public cacheAggregations(group: any) {\r\n (<any>group)._aggregationsCache = new Map();\r\n let castedAgCache = (<Map<string, Map<string, string>>>(<any>group)._aggregationsCache);\r\n for (let i = 0; i < group.aggregations.length; i++) {\r\n let agg = group.aggregations[i];\r\n if (castedAgCache.has(agg.column))\r\n castedAgCache.get(agg.column).set(agg.aggregation, agg.value);\r\n else {\r\n let tmp: Map<string, string> = new Map();\r\n tmp.set(agg.aggregation, agg.value);\r\n castedAgCache.set(agg.column, tmp);\r\n }\r\n }\r\n }\r\n\r\n /** Helper per spostare un oggetto di un array da un indice all'altro, in place */\r\n public arrayMove(array: any[], oldI: number, newI: number) {\r\n if (newI > array.length - 1 || oldI > array.length - 1 || newI < 0 || oldI < 0)\r\n throw \"Gli indici passati non fanno riferimento a una posizione dell'array. Length: \" + array.length + \" Old:\" + oldI + \" New: \" + newI;\r\n\r\n array.splice(newI, 0, array.splice(oldI, 1)[0]);\r\n }\r\n\r\n /**\r\n * Helper che identifica se il td attuale è di tipo **EsTd**. In caso contrario è da considerarsi **EsTdDirective**\r\n *\r\n * @param {any} td Cella da valutare\r\n * @returns {boolean} Restituisce **true** se il **td** è di tipo **EsTd**, **false** se è di tipo **EsTdDirective**\r\n */\r\n public isEsTd(td: any): td is EsTd { return !td._directive; }\r\n\r\n /**\r\n * Helper che identifica se il th attuale è di tipo **EsTh**. In caso contrario è da considerarsi **EsThDirective**\r\n *\r\n * @param {any} td Header da valutare\r\n * @returns {boolean} Restituisce **true** se il **th** è di tipo **EsTh**, **false** se è di tipo **EsThDirective**\r\n */\r\n public isEsTh(th: any): th is EsTh { return !th._directive; }\r\n\r\n /**\r\n * Date le informazioni di paginazione ottiene l'array dei pulsanti\r\n *\r\n * @param {number} maxBtns Numero massimo di pulsanti da visualizzare\r\n * @param {number} page Pagina corrente\r\n * @param {number} lastPage Ultima pagina disponibile\r\n *\r\n * @returns {any[]} Pseudo-array di pulsanti a cui ci si può bindare lato HTML\r\n */\r\n public getPagesArray(maxBtns: number, page: number, lastPage: number, actualCount: number = null, ipp: number = null): any[] {\r\n let result = [];\r\n\r\n // Se sono in modalità \"Numero di pagine ed oggetti sconosciuti\" faccio in modo di mostrare la pagina successiva solo se gli items effettivamente pervenuti\r\n // sono uguali alla paginazione attuale (cioè questa pagina è di sicuro riempita completamente)\r\n if (lastPage == -1 && ((actualCount == null && ipp == null) || (actualCount == ipp)))\r\n lastPage = page + 1;\r\n\r\n // Se sono in modalità \"Numero di pagine ed oggetti sconosciuti\" e mi arrivano 0 oggetti significa che l'ultima pagina è la precedente e non mostro pagine oltre\r\n if (lastPage == -1 && actualCount == 0)\r\n lastPage = page;\r\n\r\n let min, max;\r\n if (lastPage <= maxBtns) {\r\n min = 1;\r\n max = lastPage - 1;\r\n } else {\r\n // tolgo la pagina selected è l'ultima pagina che è quella delle pagine totali\r\n let rangeOutside = (maxBtns - 2) / 2;\r\n\r\n min = page - rangeOutside;\r\n max = page + rangeOutside;\r\n\r\n if (min < 1) {\r\n min = 1;\r\n max = maxBtns - 1;\r\n } else if (max >= lastPage) {\r\n min = lastPage - maxBtns + 1;\r\n max = lastPage - 1;\r\n }\r\n }\r\n\r\n result.push({ val: 1, cssClass: (1 === page ? 'btn-main app-white-text' : 'app-white-button') });\r\n\r\n if (max >= min) {\r\n for (let i = min; i <= max; i++)\r\n if (i !== 1)\r\n result.push({ val: i, cssClass: (i === page ? 'btn-main app-white-text' : 'app-white-button') });\r\n\r\n result.push({\r\n val: lastPage,\r\n cssClass: (lastPage === page ? 'btn-main app-white-text' : 'app-white-button')\r\n });\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Calcola l'hash di un oggetto qualsiasi\r\n *\r\n * @param {any[]} items Oggetti per cui calcolare l'hash\r\n */\r\n public calculateHash(items: any[]) {\r\n if (!items)\r\n return;\r\n\r\n // Supporto a hash duplicati di oggetti uguali\r\n let usedHashesCache: { [index: string]: number; } = {};\r\n for (let i = 0; i < items.length; i++) {\r\n let item = items[i];\r\n\r\n // Prima di calcolare l'hash rimuovo le proprietà interne per evitare che mi scompensino i calcoli successivi\r\n let tmp = Object.assign({}, items[i]);\r\n delete tmp._selected;\r\n delete tmp._visible;\r\n delete tmp._hash;\r\n let hash = this.hashExts.hashObject(tmp);\r\n\r\n usedHashesCache[hash] = usedHashesCache[hash] ? usedHashesCache[hash] + 1 : 1;\r\n item._hash = hash + (usedHashesCache[hash] > 1 ? \"_\" + usedHashesCache[hash] : \"\");\r\n }\r\n }\r\n\r\n /**\r\n * Se l'Input è null (valore non settato) vede se c'è un default con cui valorizzarlo. Se non c'è utilizza il valore di fallback (qualora fornito)\r\n * \r\n * @param {T} inputValue Valore dell'Input\r\n * @param {T} defaultValue Valore di default impostato da configurazione\r\n * @param {T} fallbackValue Valore dell'Input per quando non è stato assegnato dal programmatore e non ha un default\r\n */\r\n public InputOrDefault<T>(inputValue: T, defaultValue: T, fallbackValue?: T) {\r\n\r\n // Input valorizzato dal programmatore\r\n if (inputValue != null && inputValue != undefined)\r\n return inputValue;\r\n\r\n // Input valorizzato da configurazione globale\r\n if (defaultValue != null && defaultValue != undefined)\r\n return defaultValue;\r\n\r\n //Input non valorizzato da niente e da nessuno\r\n if (fallbackValue != null && fallbackValue != undefined)\r\n return fallbackValue;\r\n\r\n // I casi in cui si arriva qui sono i casi di Input che di default va bene che siano nulli e che nessuno si caga\r\n return null;\r\n }\r\n}\r\n","// Angular\r\nimport {\r\n Component, forwardRef, ContentChildren, QueryList, ChangeDetectorRef, ChangeDetectionStrategy, Input,\r\n EventEmitter, Output, ContentChild, OnChanges, SimpleChanges, ViewChild, ElementRef, ViewEncapsulation, Optional, Self, TemplateRef, Inject\r\n} from '@angular/core';\r\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\r\n\r\n// Configurazioni\r\nimport { UtilityService, ExportService, MessageService, DateService } from '@esfaenza/extensions';\r\nimport { LocalizationService } from '@esfaenza/localizations';\r\nimport { PreferencesService } from '@esfaenza/preferences';\r\n\r\n// Plugins\r\nimport { ContextMenuComponent } from '@esfaenza/ngx-contextmenu';\r\n\r\n// Modelli\r\nimport {\r\n AppSearch, AppOrdering, EsTableColumnsDefinition, CornerMenuOption, ReportDefinition, ReportResult,\r\n EsTableOperationDefinition, EsTableColumn, GroupPager, GroupRouteFragment, ThElement\r\n} from '../../domain';\r\n\r\n// Componenti e Localizzazione\r\nimport { EsTd } from '../es-td/es_td.component';\r\nimport { EsTh } from '../es-th/es_th.component';\r\nimport { EsTdDirective } from '../../directives/es_td.directive';\r\nimport { EsThDirective } from '../../directives/es_th.directive';\r\nimport { EsTableLoc } from './es_table.component.loc';\r\nimport { ItemsSelection } from '../../domain/externals/classes/appsearch/ItemsSelection';\r\nimport { GroupOrAggregation } from \"../../domain/externals/classes/appsearch/GroupOrAggregation\";\r\nimport { GroupFilter } from \"../../domain/externals/classes/appsearch/GroupFilter\";\r\nimport { Group } from \"../../domain/externals/classes/appsearch/Group\";\r\nimport { EsTableDefaultable } from '../../domain/configuration/EsTableDefaultable';\r\n\r\nimport { EST_DEFAULTS, EST_LOCALE } from '../../tokens';\r\n\r\nimport { ExportHandler, ColumnMetadataHandler, DynamicModeHandler, HierarchyModeHandler, ItemsHandler, ReportModeHandler, RowGroupingHandler, SelectionHandler, UtilitiesHandler } from '../../core/handlers';\r\n\r\n/** Componente che permette di rappresentare una griglia di valori */\r\n@Component({\r\n selector: 'es-table',\r\n viewProviders: [{ provide: LocalizationService, useClass: EsTableLoc }],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n encapsulation: ViewEncapsulation.None,\r\n styleUrls: ['./es_table.component.scss'],\r\n templateUrl: './es_table.component.html'\r\n})\r\nexport class EsTableComponent implements ControlValueAccessor, OnChanges {\r\n\r\n export_H: ExportHandler;\r\n columnMetadata_H: ColumnMetadataHandler;\r\n dynamicMode_H: DynamicModeHandler;\r\n hierarchyMode_H: HierarchyModeHandler;\r\n items_H: ItemsHandler;\r\n reportMode_H: ReportModeHandler;\r\n rowGrouping_H: RowGroupingHandler\r\n selection_H: SelectionHandler;\r\n\r\n /** @ignore */\r\n constructor(\r\n @Self() @Optional() public ngControl: NgControl, \r\n @Optional() private prefService: PreferencesService, \r\n @Optional() @Inject(EST_DEFAULTS) private deafults: EsTableDefaultable, \r\n @Optional() @Inject(EST_LOCALE) public locale: string, \r\n public lc: LocalizationService,\r\n public cdr: ChangeDetectorRef, \r\n private utilities_H: UtilitiesHandler, \r\n private utiExts: UtilityService, \r\n private expExts: ExportService, \r\n private dateExts: DateService, \r\n private msgExts: MessageService) {\r\n\r\n this.export_H = new ExportHandler(this, this.expExts, this.msgExts);\r\n this.rowGrouping_H = new RowGroupingHandler(this, this.utilities_H, this.dateExts);\r\n this.columnMetadata_H = new ColumnMetadataHandler(this, this.utilities_H, this.utiExts, this.prefService, this.rowGrouping_H);\r\n this.dynamicMode_H = new DynamicModeHandler(this);\r\n this.hierarchyMode_H = new HierarchyModeHandler(this);\r\n this.items_H = new ItemsHandler(this, this.utilities_H);\r\n this.reportMode_H = new ReportModeHandler(this, this.utilities_H);\r\n this.selection_H = new SelectionHandler(this, this.rowGrouping_H);\r\n\r\n if (ngControl)\r\n ngControl.valueAccessor = this;\r\n\r\n // Assegnazione per tutti gli Input di default\r\n this.ColumnsResizable = this.utilities_H.InputOrDefault(this.ColumnsResizable, this.deafults?.ColumnsResizable);\r\n this.AutoUpdate = this.utilities_H.InputOrDefault(this.AutoUpdate, this.deafults?.AutoUpdate);\r\n this.AllSearch = this.utilities_H.InputOrDefault(this.AllSearch, this.deafults?.AllSearch, true);\r\n this.Export = this.utilities_H.InputOrDefault(this.Export, this.deafults?.Export);\r\n this.HidePaging = this.utilities_H.InputOrDefault(this.HidePaging, this.deafults?.HidePaging, false);\r\n this.HidePagingCount = this.utilities_H.InputOrDefault(this.HidePagingCount, this.deafults?.HidePagingCount);\r\n this.HidePagingButtons = this.utilities_H.InputOrDefault(this.HidePagingButtons, this.deafults?.HidePagingButtons);\r\n this.ContainerClass = this.utilities_H.InputOrDefault(this.ContainerClass, this.deafults?.ContainerClass, '');\r\n this.TableClass = this.utilities_H.InputOrDefault(this.TableClass, this.deafults?.TableClass, 'table table-striped table-hover table-sm');\r\n this.Selection = this.utilities_H.InputOrDefault(this.Selection, this.deafults?.Selection);\r\n this.SavePreferences = this.utilities_H.InputOrDefault(this.SavePreferences, this.deafults?.SavePreferences);\r\n this.PagingStyle = this.utilities_H.InputOrDefault(this.PagingStyle, this.deafults?.PagingStyle, 'bottom');\r\n this.RowGroupingPagingStyle = this.utilities_H.InputOrDefault(this.RowGroupingPagingStyle, this.deafults?.RowGroupingPagingStyle, 'left');\r\n this.UseSelectionCache = this.utilities_H.InputOrDefault(this.UseSelectionCache, this.deafults?.UseSelectionCache, true);\r\n this.ShowItemGroupsColumns = this.utilities_H.InputOrDefault(this.ShowItemGroupsColumns, this.deafults?.ShowItemGroupsColumns, false);\r\n this.ArraymodeItemsPerPage = this.utilities_H.InputOrDefault(this.ArraymodeItemsPerPage, this.deafults?.ArraymodeItemsPerPage, 15);\r\n }\r\n\r\n /** View finale su cui bindarsi lato Frontend, il tipo può essere IAppSearch<any> (per la **viewMode**), any[] (per l'**arrayMode**) e ReportDefinition per la **reportMode** */\r\n public View: any = null;\r\n /** Modello da cui l'es-table mostra i pulsanti di paginazione in basso a destra */\r\n public arrayPulsanti: any;\r\n /** Indica se l'es-table deve mostrare il check globale nell'header per fare il \"seleziona tutto\" */\r\n public globalCheck = false;\r\n /** Tiene da conto l'ultimo elemento selezionato in modo da poter effettuare il SHIFT+CLICK */\r\n private lastSelected: any = null;\r\n /** Conteggio interno per il numero di elementi selezionati */\r\n public selectedObjects = 0;\r\n /** Indica se è possibile effettuare una selezione massiva */\r\n public canSelectAll = false;\r\n /** Indica se il componente sta gestendo un IAppSearch<any> */\r\n public viewMode = false;\r\n /** Indica se il componente sta gestendo un any[] */\r\n public arrayMode = false;\r\n /** Indica se il componente sta gestendo un ReportDefinition */\r\n public reportMode = false;\r\n\r\n /**\r\n * Contenitore degli elementi da listare lato interfaccia dopo tutte le elaborazioni del caso,\r\n * generalmente non sono altro che tutti gli oggetti da presentare con in più l'hash calcolato per identificare 1 oggetto con la propria riga\r\n */\r\n public boundSource: any[] = [];\r\n /** Stessa cosa della **boundSource**, utilizzata come appoggio temporaneo interno */\r\n public TMPBoundSource: any[] = [];\r\n /** \"Fetta\" di oggetti utilizzata nell'endless scroll, ogni elemento di questo array è un blocchetto di 100 elementi */\r\n public boundSubSources: any[] = [];\r\n /** Questa funge da indicatore per gli slice inseriti, la lunghezza dovrebbe essere corrispondente a **boundSubSources** */\r\n public addedSlices: number[] = [];\r\n /** Variabile che identifica il valore del \"seleziona Tutto\" nella paginazione */\r\n public defaultAllPageOverride = 999999;\r\n /** Indica se utilizzare il sistema di Endless Scroll */\r\n public UseEndlessscroll: boolean;\r\n /** Valori dell'eventuale report in visualizzazione */\r\n public ReportValues: ReportResult;\r\n /** Serve per tenere in memoria il conteggio precedente e recuperarlo in caso diventi -2 (verificare con Ale perché la logica del -2) */\r\n public previousCount: number;\r\n /** Indica se utilizzare il sistema di autoupdate, cioè un trigger time-izzato in alto a destra della tabella che ripete le ricerche ogni X **seconds** */\r\n public autoUpdate = false;\r\n /** Numero di secondi da fare trascorrere fra una ricerca e l'altra */\r\n public seconds = '10';\r\n /** Riferimento all'Interval che viene generato se **autoUpdate** è impostata a true in modo da poterlo ripulire */\r\n public updateTimer: any;\r\n /** Impostata a true ogni volta che viene avviata una ricerca, e a false ogni volta che un nuovo valore viene ricevuto */\r\n public researchInProgress: boolean = false;\r\n /** Modello rappresentante un singolo td della tabella, generato in base alle configurazioni e agli oggetti ricevuti */\r\n public RowTDs: { [context: string]: EsTd[] } = null;\r\n /** Modello di appoggio temporaneo per i **RowTDs** */\r\n public TMPRowTDs: { [context: string]: EsTd[] } = null;\r\n /** Modello rappresentante un singolo th della tabella, generato in base alle configurazioni e agli oggetti ricevuti */\r\n public RowTHs: ThElement[] = null;\r\n /** Modello di appoggio temporaneo per i **RowTHs** */\r\n public TMPRowTHs: ThElement[] = null;\r\n /** Modello di appoggio temporaneo per i **RowThGroups** */\r\n public TMPRowThGroups: { Span: number, Template: TemplateRef<any> }[][] = null;\r\n /** Modello rappresentante un singolo header group della tabella. Questa lista è già ordinata e pronta per essere utilizzata in ngFor */\r\n public RowThGroups: { Span: number, Template: TemplateRef<any> }[][] = null;\r\n /** Cache per i routerLink generati nelle tabelle dinamiche */\r\n public DynamicTableRouterLinkCache: {} = {};\r\n\r\n /**\r\n * Lista dei contesti. Un contesto non è altro che un hash particolare calcolato su un oggetto che identifica univocamente tale oggetto.\r\n *\r\n * Ognuno di questi contesti rappresenterà a sua volta, univocamente, una riga all'interno della tabella\r\n */\r\n public RowContexts: any[] = [];\r\n /** Direttive di ordinamento delle colonne (non ordinamento dei dati ma delle colonne in se) */\r\n public OrderDirectives: string[] = [];\r\n /** Codice dell'ultimo oggetto solezionato */\r\n public lastSelectedItemID = null;\r\n\r\n /**\r\n * Indica se oltre alle colonne dinamiche specifiche di un tipo di oggetto ci sono anche colonne dinamiche aggiunte dall'utente\r\n *\r\n * Es. una colonna in cui mostrare sempre un iconcina\r\n */\r\n public UserDefinedDynamicCols: boolean = false;\r\n /** Indica che questo è il primo Bind della tabella, viene settato a false non appena il primo bind viene terminato con successo */\r\n public FirstBind: boolean = true;\r\n /** Lista di colonne che si possono visualizzare/ordinare fra di loro */\r\n public ColumnsList: EsTableColumn[] = [];\r\n /** Variabile d'appoggio usata dalla dialog di selezione/nascondimento, per evitare di danneggiare **ColumnsList** in caso di modifiche poi annullate */\r\n public TMPColumnsList: EsTableColumn[] = [];\r\n /** Valore del check globale di visibilità valido per tutte le colonne in **ColumnsList** */\r\n public globalColVisCheck = false;\r\n\r\n /** Query per recuperare tutte le nuove direttive assegnati a direttiva (Per la modalità dinamica dell'es-table) */\r\n @ContentChildren(EsTdDirective) EsTdsDirective: QueryList<EsTdDirective>;\r\n /** Query per recuperare tutti gli es-td assegnati a direttiva (Per la modalità dinamica dell'es-table) */\r\n @ContentChildren(EsThDirective) EsThsDirective: QueryList<EsThDirective>;\r\n /** @deprecated Query per recuperare tutti gli es-th */\r\n @ContentChildren(forwardRef(() => EsTh)) private EsThs: QueryList<EsTh>;\r\n /** @deprecated Query per recuperare tutti gli es-td */\r\n @ContentChildren(forwardRef(() => EsTd)) private EsTds: QueryList<EsTd>;\r\n /** @deprecated Query per recuperare le informazioni del body (punto della tabella dove vengono mostrate le righe) */\r\n @ContentChild('body', { static: false }) public bodyRef: any;\r\n /** @deprecated Query per recuperare le informazioni dell'header (punto della tabella dove vengono mostrate le intestazioni delle righe) */\r\n @ContentChild('header', { static: false }) public headerRef: any;\r\n /** Query per recuperare le informazioni sul raggruppamento degli header */\r\n @ContentChild('headerGroup', { static: false }) public headerGroupRef: any;\r\n /** Query per recuperare le informazioni sul raggruppamento di secondo livello degli header */\r\n @ContentChild('secondaryHeaderGroup', { static: false }) public secondaryHeaderGroupRef: any;\r\n /** Opzioni extra che devono apparire nel Menù contestuale in alto a destra, richiamato dai 3 pallini verticali */\r\n @Input() CornerMenuOptions: CornerMenuOption[] = null;\r\n /** Indica se dev'essere possibile effettuare il resize delle colonne */\r\n @Input() ColumnsResizable: boolean = null;\r\n /** Indica se dev'essere disponibile il sistema di aggiornamento automatico */\r\n @Input() AutoUpdate: boolean = null;\r\n\r\n /** Indica se la tabella (configurata con **UseCustomCells**) deve mettersi in ascolto per i click sulle celle desiderate\r\n * \r\n * @deprecated Utilizzare l'Input **Template** delle es-td e assegnare un template con tutti i binding che si vuole ai click\r\n */\r\n @Input() UseCustomCellActions: boolean = null;\r\n\r\n /**\r\n * Indica le celle desiderate su cui intercettare i click. Attiva solo quando **UseCustomCellActions** è true.\r\n * Ogni cella dev'essere separata dalla successiva dal carattere del Simoleon:\r\n *\r\n * Es, \"MiaCella1§MiaCella2\"\r\n * \r\n * @deprecated Utilizzare l'Input **Template** delle es-td e assegnare un template con tutti i binding che si vuole ai click\r\n */\r\n @Input() CustomCellActionsOn = '';\r\n\r\n /** \r\n * Serve per decidere di lanciare o meno il **event.stopPropagation()** al termine della gestione dell'evento \r\n * \r\n * @deprecated Utilizzare l'Input **Template** delle es-td e assegnare un template con tutti i binding che si vuole ai click\r\n */\r\n @Input() CellActionPropagates = true;\r\n\r\n /**\r\n * Decide se utilizzare o meno le CustomCells. Impostandolo a **true** l'es-table diventa in grado di gestire nativamente:\r\n *\r\n * 1) Ordinamento e visibilità delle colonne\r\n *\r\n * 2) Ordinamento dei dati\r\n *\r\n * 3) Modalità Gerarchica\r\n *\r\n * ecc...\r\n */\r\n @Input() UseCustomCells: boolean = null;\r\n /** Permette di impostare l'altezza massima della tabella. Se null la dimensione si adatta al numero di elementi attualmente in visualizzazione */\r\n @Input() MaxHeight: number = null;\r\n /** Classi da applicare al contenitore della tabella */\r\n @Input() ContainerClass = null;\r\n /** Permette o meno l'export in formato XLSX */\r\n @Input() XLSXExport: boolean = null;\r\n /** Permette o meno l'export in formato CSV */\r\n @Input() CSVExport = true;\r\n /** Permette di visualizzare o meno l'opzione di paginazione \"Tutti\" */\r\n @Input() AllSearch = null;\r\n /** Diminuisce gli spazi fra una cella e l'altra, e internamente il padding del font in modo da presentare molti più dati in un'unica pagina */\r\n @Input() HighCellDensity: boolean = null;\r\n /** Abilita o meno la possibilità di selezionare oggetti */\r\n @Input() Selection: boolean = null;\r\n /** Mostra o meno un messaggio di Loading al primo caricamento della tabella */\r\n @Input() ShowLoadingOnBootstrap: boolean = null;\r\n /** Se impostato a **true** aggiunge una colonna con pulsante di eliminazione per effettuare l'elimina dell'oggetto relativo */\r\n @Input() Removal: boolean = null;\r\n\r\n /**\r\n * Condizione che nasconde l'icona di eliminazione inserita impostando **Removal** a true qualora la condizione non venisse rispettata\r\n *\r\n * Come condizione si considera un semplice campo su cui effettuare un controllo booleano, come ad esempio \"canremove\"\r\n */\r\n @Input() RemovalCondition = '';\r\n /** Indica se abilitare la possibilità di esportare la vista dati attuale */\r\n @Input() Export: boolean = null;\r\n /** Indica se permettere la selezione multipla Windows-like cliccando un oggetto e facendo poi Shift + click su un oggetto successivo */\r\n @Input() ShiftClick: boolean = null;\r\n /** Indica il testo che va a sostituire \"Oggetti Visualizzati\" in caso si stia facendo qualcosa di custom */\r\n @Input() CountLabel: string = null;\r\n /** Indica se nascondere o mostrare il componente di paginazione */\r\n @Input() HidePaging: boolean = null;\r\n /** Indica se nascondere o mostrare il conteggio degli elementi trovati */\r\n @Input() HidePagingCount: boolean = null;\r\n /** Indica se nascondere o mostrare i pulsanti di paginazione */\r\n @Input() HidePagingButtons: boolean = null;\r\n /** Riferimento al ContextMenu (ngx-contextmenu) associato al click destro di uno o più elementi selezionati nella tabella */\r\n @Input() ContextMenu: ContextMenuComponent = null;\r\n /** Nome dell'esportazione generata da questa tabella */\r\n @Input() ExportFileName = 'Export.csv';\r\n /** Classe (HTML) di default della tabella */\r\n @Input() TableClass = null;\r\n\r\n /**\r\n * Funzione da utilizzare in esportazione. Nel formato \"Report\" avrà un unico parametro \"Formato\" e nessun valore di ritorno.\r\n *\r\n * Nel formato \"View\" ha come parametro una callback con i dati completi da esportare (dato che di default la ricerca è paginata)\r\n */\r\n @Input() ExportFunction: any;\r\n /** Indica la presenza di raggruppamenti a livello di header */\r\n @Input() HasHeaderGroup: boolean = null;\r\n /** Indica la presenza di raggruppamenti a livello del raggruppamento precedentemente esistente, chiaramente è insensata senza **HasHeaderGroup** */\r\n @Input() HasSecondaryHeaderGroup: boolean = null;\r\n /** Utilizzato per dividere la sorgente in modalità EndlessScroll */\r\n @Input() SliceSize = 100;\r\n /** Decide se utilizzare la modalità di EndlessScroll */\r\n @Input() EndlessScroll: boolean = null;\r\n /** Qualora **EndlessScroll** fosse true, indica se utilizzare questa modalità solo quando si cerca per \"Tutti\" o in generale */\r\n @Input() EndlessScrollOnlyForAll = true;\r\n /** Indica se nascondere gli Header della tabella */\r\n @Input() HeaderHidden: boolean = null;\r\n /** Indica se nascondere il Body della tabella */\r\n @Input() BodyHidden: boolean = null;\r\n\r\n /**\r\n * Indica se la selezione è temporaneamente disabilitata. Rispetto all'Input **Selection** che visivamente gestisce se ci sono o no gli input di selezione,\r\n * questo Input gestisce se questi input sono abilitati o meno\r\n */\r\n @Input() SelectionDisabled: boolean = null;\r\n\r\n /**\r\n * Indica se forzare il sistema di selezione a gestire un elemento per volta.\r\n * Selezionare un'altra riga con una già selezionata applicherà la selezione alla nuova riga, rimuovendola dall'attuale\r\n */\r\n @Input() SingleSelection: boolean = null;\r\n /** Callback che dato un oggetto resituisce l'eventuale classe da applicare alla riga collegata all'oggetto */\r\n @Input() RowClassAssigner: any = null;\r\n /** Permette di ordinare i dati in maniera discendente o ascendente */\r\n @Input() OrderByColumn: boolean = null;\r\n /** Permette di avere più direttive di ordinamento dei dati */\r\n @Input() MultipleOrderingDirectives = true;\r\n /** Permette di nascondere le colonne in base alle selezioni effettuate dal Menù contestuale in alto a destra */\r\n @Input() HiddenColumns: boolean = null;\r\n /** Permette di riordinare le colonne in base alle impostazioni effettuate dal Menù contestuale in alto a destra */\r\n @Input() ColumnsOrdering: boolean = null;\r\n /** Eventuale supporto alle ricerche applicate alla modalità Array */\r\n @Input() SearchView = null as AppSearch<any>;\r\n /** Abilita o disabilita il sistema che permette di selezionare tutti gli elementi nella vista */\r\n @Input() SelectAll: boolean = null;\r\n /** Simula la paginazione anche per le tabelle che funzionano in modalità Array */\r\n @Input() UseArrayModePaging = true;\r\n /** Definizione di colonne dinamche per la modalità, appunto, dinamica */\r\n @Input() DynamicRowColumnsDefinition: EsTableColumnsDefinition[] = null;\r\n /** Indica operazioni dinamiche generiche che possono essere effettuate per riga. Appaiono come colonne extra sul lato sinistro della tabella */\r\n @Input() DynamicOperations: EsTableOperationDefinition[] = [];\r\n /** Indica se visualizzare i dati in maniera gerarchica */\r\n @Input() Hierarchy: boolean = null;\r\n /** Nome della proprietà che contiene l'ID del padre. Da utilizzare se **Hierarchy** è impostato */\r\n @Input() ParentKey = '';\r\n /** Nome della proprietà che contiene l'ID dell'oggetto attuale. Da utilizzare se **Hierarchy** è impostato */\r\n @Input() OwnKey = '';\r\n /** Indica se partire con un albero espanso. Da utilizzare se **Hierarchy** è impostato */\r\n @Input() StartsExpanded = true;\r\n /** Indica se effettuare il salvataggio delle preferenze di ricerca */\r\n @Input() SavePreferences: boolean = null;\r\n\r\n /** Indica dove visualizzare le informazioni di paginazione, se sopra, sotto o in entrambi */\r\n @Input() PagingStyle: 'both' | 'top' | 'bottom' = null;\r\n /** Indica dove visualizzare le informazioni di paginazione, se sopra, sotto o in entrambi */\r\n @Input() RowGroupingPagingStyle: 'left' | 'right' = null;\r\n\r\n /**\r\n * Sorgente dati secondaria\r\n *\r\n * @deprecated Utilizzato solo per un caso particolare del Metering\r\n */\r\n @Input() SecondarySource: boolean = null;\r\n\r\n /**\r\n * Sorgente dati secondaria\r\n *\r\n * @deprecated Utilizzato solo per un caso particolare del Metering\r\n */\r\n @Input() TertiarySource: boolean = null;\r\n /** Indica se utilizzare la cache di selezione che permette di mantenere gli stati di selezione dei vari oggetti navigando da una pagina all'altra */\r\n @Input() UseSelectionCache = null;\r\n /** Permette di decidere se, in modalità raggruppamento, mostrare o meno il valore delle colonne di gruppo negli oggetti finali. Di default sono nascosti */\r\n @Input() ShowItemGroupsColumns = null;\r\n /** Evento che viene richiamato al cambio di oridnamento di una colonna */\r\n @Output() onOrderChanged: EventEmitter<AppOrdering> = new EventEmitter<AppOrdering>();\r\n\r\n /**\r\n * Evento che viene richiamato quando l'es-table ritiene sia necessario ri-effettuare la ricerca.\r\n * Il booleano dell'evento indica se viene suggerito di resettare la pagina o meno.\r\n * \r\n * Solo in caso venga utilizzata la modalità a raggruppamenti di righe può succedere che l'es-table passi un intero AppSearch come parametro di ricerca,\r\n * in quel caso l'applicazione ricevente dovrà onorare la richiesta spedendo al backand l'oggetto di ricerca AS-IS\r\n * \r\n * il tipo dell'Emitter invece di essere [boolean | AppSearch<any>] è stato impostato a \"any\" per evitare problemi di retrocompatibilità\r\n */\r\n @Output() onSearchRequest: EventEmitter<any> = new EventEmitter<any>();\r\n /** Evento che parte ad ogni modifica di \"checkaggio\" in forma di comodo array. Espone l'oggetto con lo stato di check attuale */\r\n @Output() onSelectionChanged: EventEmitter<ItemsSelection<any>> = new EventEmitter<ItemsSelection<any>>();\r\n /** Evento richiamato all'eliminazione di un oggetto */\r\n @Output() onRemoval: EventEmitter<any> = new EventEmitter<any>();\r\n /** Evento richiamato all'annullamento di un'eliminazione */\r\n @Output() onAbortRemoval: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n /** Evento richiamato al click su una cella quando **UseCustomCellActions** è attivo \r\n * \r\n * @deprecated Utilizzare l'Input **Template** delle es-td e assegnare un template con tutti i binding che si vuole ai click\r\n */\r\n @Output() onCellClick: EventEmitter<{ column: string, model: any }> = new EventEmitter<{ column: string, model: any }>();\r\n /** Evento richiamato quando si clicca su un opzione definita nelle **CornerMenuOptions** */\r\n @Output() onCornerAction: EventEmitter<{ id: string, estable: any }> = new EventEmitter<{ id: string, estable: any }>();\r\n /** Evento richiamato quando si clicca su un opzione definita nelle **DynamicOperations** */\r\n @Output() onDynamicOperation: EventEmitter<{ id: string, item: any }> = new EventEmitter<{ id: string, item: any }>();\r\n\r\n /** Dati esportati da ngx-csv */\r\n public data: any[];\r\n /** Header dei dati esportati da ngx-csv */\r\n public headers: any[];\r\n /** Elemento HTML da cliccare per l'esportazione */\r\n @ViewChild('exportDownloader', { static: false }) public exportDownloader: ElementRef;\r\n /** Placeholder di menù contestuale per quando non ci sono opzioni nel placeholder \"Vero\" */\r\n @ViewChild('emptyMenu', { static: true }) public tableEmptyMenu: ContextMenuComponent;\r\n\r\n /** Subscription sull'apertura del context menu da ripulire al destroy della classe */\r\n private ctxMenuSubscription: any;\r\n\r\n /** Pagina in visualizzazione (durante la paginazione in modalità Array) */\r\n public arraymodePage = 1;\r\n /** Numero di pagine (durante la paginazione in modalità Array) */\r\n public arraymodePages = 1;\r\n /** Oggetti per ogni pagina (durante la paginazione in modalità Array) */\r\n @Input() ArraymodeItemsPerPage = null;\r\n /** Oggetto di selezione per la modalità Array, che deve comportarsi come la controparte in modalità View */\r\n public arraymodeSelection: ItemsSelection<any>;\r\n /** Colonne da visualizzare in modalità array */\r\n public arrayColumns: string[] = [];\r\n /** Ordine delle colonne da visualizzare in modalità array */\r\n public arrayColumnOrdering: string[] = [];\r\n /** Ordinamenti ASC-DESC sulle colonne in modalità array */\r\n public arrayOrders: AppOrdering[] = [];\r\n\r\n /**\r\n * Variabile che serve a gestire il momento in cui l'es-table aggiorna la paginazione (pulsanti ecc).\r\n * Essendo operazioni comunque costose le effettuo solo su binding esterni, non su rewrite generati internamente\r\n */\r\n private internalWriteCall = false;\r\n\r\n /**\r\n * Cache che conterrà tutte le ricerche effettuate su gruppi diversi dal primo e su elementi contenuti nei gruppi.\r\n * In caso di cambi di ordinamento delle colonne diverse dalla prima tutte le chiamate fatte dal secondo livello in poi devono essere rieseguite secondo la seguente logica:\r\n * \r\n * \r\n * **Cambio ordinamento sul primo gruppo**: reload completo, non mi occupo di ripulire gli elementi bindati in alcun modo\r\n * \r\n * **Cambio ordinamento sulla colonna relativa all'N-esimo gruppo**: reload completo del contenuto dei gruppi precedenti, ripulendo precedentemente \r\n * tutti gli elementi con **_grouplevel** = N\r\n * \r\n * **Cambio ordinamento su una colonna non raggruppata**: reload completo per tutti i gruppi finali aperti, devo precedentemente ripulire tutti gli elementi con **_item** = true\r\n * \r\n * Altri eventi non dovrebbero rappresentare problemi:\r\n * - Selezione: non cambia nulla\r\n * - Paginazione: cambia a livello root quindi viene ricaricato tutto comunque, stesso vale per le paginazioni interne\r\n */\r\n public groupSearchRequestsCache: { path: string, route: GroupRouteFragment[], view: AppSearch<any>, group_column: string }[] = [];\r\n\r\n /** Variabile d'appoggio per capire se c'è bisogno di ri-effettuare una ricerca o meno */\r\n private ResearchNeeded: boolean = false;\r\n /** Colonne visibili della vista attuale. Valorizzato di default al numero massimo di colonne supportate dalla tabella per le casistiche in assenza di custom cells */\r\n public Columns: { Visibile: number, VisibleUnpinned: number, Global: number } = { Visibile: 100, VisibleUnpinned: 100, Global: 100 };\r\n /** In caso di Row Grouping qui viene salvata la vista principale dei gruppi base */\r\n public MainGroupView: AppSearch<any> = null;\r\n \r\n /** Conteggio base degli oggetti. In modalità normale viene resettato ad ogni nuova View inserita, in modalità RowGrouping viene resettato solo ad una nuova View di livello \"0\" */\r\n public BaseItemsCount = null;\r\n\r\n /** Indica se ci sono delle colonne pinnate e visibili. Serve per poter settare tutte le colonne prima che arrivino dati a pinned*/\r\n public HasPinnedColumns: boolean\r\n /** Larghezza calcolata del container delle colonne pinnate */\r\n public PinnedContainerWidth: number;\r\n /** Indica se nonostante siamo in modalità array sono stati individuati dei gruppi. In tal caso es-table si comporta da pseudo backend ed effettua le aggregazioni e raggruppamenti completamente lato client */\r\n public ArrayGrouping: boolean = false;\r\n /** Indica che l'es-table è basata sulle direttive (nuova modalità) */\r\n public DirectivesBased: boolean = false;\r\n\r\n /** Opzioni di paginazione */\r\n public PagerOptions: { PagerCount: number, ShowCount: boolean, ShowPaging: boolean, UsesView: boolean, ShowButtons: boolean, ShowPagingOptions: boolean, View: any, Ready: boolean, Searches: 'items' | 'groups' } =\r\n { PagerCount: null, ShowCount: true, ShowPaging: true, ShowButtons: true, ShowPagingOptions: true, UsesView: true, View: null, Ready: false, Searches: 'items' };\r\n\r\n /** @ignore */\r\n public ngOnInit() {\r\n //Per poter cambiare il layout in base al livello gerarchico il componente deva avere il pieno controllo di ogni cella,\r\n //che con solo la proiezione (senza celle cusotm) non è disponibile\r\n if (this.Hierarchy && !this.UseCustomCells)\r\n throw \"Es-table error: Per poter utilizzare l'es-table con [Hierarchy]=\\\"true\\\" è richiesto anche [UseCustomCells]=\\\"true\\\"\";\r\n\r\n // click destro su una riga con selezione attiva: Tiro fuori il context menu e selezione l'elemento corrente\r\n this.ctxMenuSubscription = (this.ContextMenu || this.tableEmptyMenu).open.subscribe(t => {\r\n // Gruppi va bene, oggetti pure, ma separatori fra gruppi proprio no...\r\n if (t.item._sep) return;\r\n\r\n let shouldEmit = !t.item._selected;\r\n\r\n t.item._selected = true;\r\n var itemSelection = this.selection_H.handleItemsSelection([t.item]);\r\n this.changed();\r\n\r\n if (shouldEmit)\r\n this.onSelectionChanged.emit(itemSelection);\r\n });\r\n }\r\n\r\n /** @ignore */\r\n public ngAfterViewInit() {\r\n // Se utilizzo la new spicy mode deduco tutti i parametri di lavoro possibili al caricamento della tabella\r\n // Vengono sovrascritte solo le proprietà non impostate dall'utente\r\n if (this.EsTdsDirective && this.EsTdsDirective.length > 0 && this.EsThsDirective && this.EsThsDirective.length > 0) {\r\n if (this.UseCustomCells == null) this.UseCustomCells = true;\r\n if (this.HiddenColumns == null && this.UseCustomCells) this.HiddenColumns = true;\r\n if (this.ColumnsOrdering == null && this.UseCustomCells) this.ColumnsOrdering = true;\r\n if (this.OrderByColumn == null && this.UseCustomCells) this.OrderByColumn = true;\r\n if (this.SelectAll == null && this.Selection) this.SelectAll = true;\r\n if (this.ShiftClick == null && this.Selection) this.ShiftClick = true;\r\n this.DirectivesBased = true;\r\n }\r\n }\r\n\r\n /** @ignore */\r\n public ngOnDestroy() {\r\n if (this.ctxMenuSubscription)\r\n this.ctxMenuSubscription.unsubscribe();\r\n }\r\n\r\n /** @ignore */\r\n public async ngOnChanges(changes: SimpleChanges) {\r\n let newSearchView = changes['SearchView'];\r\n if (newSearchView && this.SearchView)\r\n this.arrayPulsanti = this.utilities_H.getPagesArray(6, this.SearchView.page, this.SearchView.pages || 1, this.SearchView.items.length, this.SearchView.itemsperpageoverride);\r\n }\r\n\r\n /** @ignore */\r\n public registerOnChange(fn): void { this.propagateChange = fn; }\r\n /** @ignore */\r\n public registerOnTouched(fn): void { }\r\n /** @ignore */\r\n changed() { this.propagateChange(this.View); }\r\n /** @ignore */\r\n propagateChange = (_: any) => { };\r\n\r\n /** @ignore */\r\n public async writeValue(obj) {\r\n this.View = obj ? obj : null;\r\n\r\n // Mi è arrivata l'AppSearch quindi di sicuro non ho una ricerca in progress\r\n this.researchInProgress = false;\r\n\r\n if (!this.View && !this.SearchView) {\r\n // Su view nulla evito di fare pressoché qualsiasi cosa. Se arriva un null devo anche assicurarmi di non mostrare nulla\r\n this.boundSource = this.TMPBoundSource || [];\r\n\r\n // Per essere sicuro che dopo un bind di oggetti la es-table aggiorni la grafica\r\n this.cdr.markForCheck();\r\n return;\r\n }\r\n\r\n // Se per sbaglio l'oggetto che mi arriva non è tipizzato (instanceof AppSearch restituisce false anche se è del tipo giusto)\r\n // lo correggo--------------------------------------------------------------------------------------------------------------\r\n if (this.View && typeof (this.View as any).result != 'undefined' && !(this.View instanceof ReportDefinition)) \r\n (this.View as any).__proto__ = new ReportDefinition();\r\n else if (this.View && typeof (this.View as any).itemsperpageoverride != 'undefined' && !(this.View instanceof AppSearch)) \r\n (this.View as any).__proto__ = new AppSearch();\r\n else if (this.SearchView && typeof (this.SearchView as any).itemsperpageoverride != 'undefined' && !(this.SearchView instanceof AppSearch)) \r\n (this.SearchView as any).__proto__ = new AppSearch();\r\n // -------------------------------------------------------------------------------------------------------------------------\r\n\r\n if (this.View && this.View instanceof ReportDefinition) {\r\n // Se mi arriva una report definition vuol dire che potrei avere dei risultati da visualizzare\r\n this.setMode('report');\r\n\r\n this.ReportValues = this.View.result;\r\n if (this.ReportValues)\r\n this.reportMode_H.reviewReportBindings();\r\n }\r\n else if (this.View && this.View instanceof AppSearch) {\r\n // Se cambia l'oggetto intero significa che ho rimandato la ricerca\r\n this.setMode('view');\r\n\r\n let firstItemGroupOrNoGrouping = (this.View.requestedgroups?.length || 0) == 0;\r\n\r\n // Se vengo da una ricerca interna mantengo lo stato di selezione precedente (quindi su cambio pagina, cambio ipp, ecc...)\r\n // se invece l'utente ha fatto una ricerca lui (quindi cambiando filtri), secco le info di selezione\r\n if (!this.View.selection || (!this.View.internalsearchrequest && firstItemGroupOrNoGrouping) || !this.UseSelectionCache) {\r\n this.selection_H.clearSelectionCaches();\r\n this.View.selection = new ItemsSelection([]);\r\n this.onSelectionChanged.emit(this.View.selection);\r\n }\r\n\r\n this.View.internalsearchrequest = false;\r\n\r\n // Recupero Preference\r\n if (this.SavePreferences) {\r\n if (!this.ngControl.name)\r\n console.error(\"Non posso utilizzare le preference senza avere un 'name' per questa tabella\");\r\n else if (!this.prefService)\r\n console.error(\"Non posso utilizzare le preference senza che il pacchetto @esfaenza/preferences sia installato\");\r\n else {\r\n var prefs = await this.prefService.retrieve<{ columns: string[], column_ordering: string[] }>(<string>this.ngControl.name).toPromise();\r\n this.View.columns = prefs.columns;\r\n this.View.column_ordering = prefs.column_ordering;\r\n }\r\n }\r\n\r\n // La paginazione devo farla solamente quando richiedo o un gruppo principale (se sono in row grouping) o se non richiedo gruppi (in tutti lgi altri casi)\r\n if (firstItemGroupOrNoGrouping)\r\n this.arrayPulsanti = this.utilities_H.getPagesArray(6, this.View.page, this.View.pages || 1, this.View.items.length, this.View.itemsperpageoverride);\r\n }\r\n else if (this.View && (this.View.length != null && this.View.length != undefined)) {\r\n this.setMode('array');\r\n\r\n if (!this.UseSelectionCache || !this.arraymodeSelection) {\r\n this.selection_H.clearSelectionCaches();\r\n this.arraymodeSelection = new ItemsSelection([]);\r\n this.onSelectionChanged.emit(this.arraymodeSelection);\r\n }\r\n\r\n // Recupero Preference\r\n if (this.SavePreferences) {\r\n if (!this.ngControl.name)\r\n console.error(\"Non posso utilizzare le preference senza avere un 'name' per questa tabella\");\r\n else if (!this.prefService)\r\n console.error(\"Non posso utilizzare le preference senza che il pacchetto @esfaenza/preferences sia installato\");\r\n else {\r\n var prefs = await this.prefService.retrieve<{ columns: string[], column_ordering: string[] }>(<string>this.ngControl.name).toPromise();\r\n this.arrayColumns = prefs.columns;\r\n this.arrayColumnOrdering = prefs.column_ordering;\r\n }\r\n }\r\n\r\n if (this.SearchView)\r\n this.arrayPulsanti = this.utilities_H.getPagesArray(6, this.SearchView.page, this.SearchView.pages || 1, this.SearchView.items.length, this.SearchView.itemsperpageoverride);\r\n }\r\n\r\n if (this.View && !(this.View instanceof ReportDefinition))\r\n this.finalizeContext();\r\n\r\n this.postBoundSourceCalculation();\r\n }\r\n\r\n /** Funzione di trackby per il body che dovrebbe evitare il 90% delle change detection */\r\n public bodyTrackBy = (index: number, item: any) => item._hash;\r\n\r\n /**\r\n * Successivamente al bind del nuovo input questa funzione si occupa di finalizzare tutti i parametri di funzionamento dell'es-table \r\n * in base a Input - Modello, e qualsiasi altra cosa possa servire\r\n */\r\n private finalizeContext() {\r\n let viewCasted = this.View as AppSearch<any>;\r\n\r\n /*\r\n *Uso la tecnica di EndlessScroll se la variabile relativa è attiva e se\r\n * 1) Ho un Array, oppure\r\n * 2) Ho un AppSearch che sta cercando con paginazione \"Tutto\", oppure\r\n * 3) Ho un AppSearch che sta cercando con paginazione diversa da \"Tutto\" ma con la variabile EndlessScrollOnlyForAll a false\r\n */\r\n let isAppSearchWithIppMax = this.viewMode && viewCasted.itemsperpageoverride == this.defaultAllPageOverride;\r\n let isAppSearchNoMaxIpp = this.viewMode && viewCasted.itemsperpageoverride != this.defaultAllPageOverride;\r\n this.UseEndlessscroll = this.EndlessScroll && (this.arrayMode || isAppSearchWithIppMax || (isAppSearchNoMaxIpp && !this.EndlessScrollOnlyForAll));\r\n\r\n let hasRowGroups = (viewCasted.groupings && viewCasted.groupings.filter(t => !t.aggregation).length > 0) || (this.arrayMode && this.EsThsDirective.some(t => t.thGroup));\r\n\r\n // Se ho dei gruppi in modalità array devo sistemare un po' di variabili che diventano insensate\r\n if (this.arrayMode && hasRowGroups)\r\n this.UseArrayModePaging = false;\r\n\r\n // Riempimento della TMPBoundSource con gli oggetti che verranno poi mostrati ad interfaccia\r\n if (this.UseEndlessscroll && !hasRowGroups) {\r\n this.addedSlices = [];\r\n this.boundSubSources = this.items_H.getItemSlices();\r\n let firstSub = this.boundSubSources[0];\r\n\r\n this.TMPBoundSource = firstSub ? firstSub : [];\r\n if (firstSub)\r\n this.addedSlices.push(0);\r\n }\r\n else\r\n this.TMPBoundSource = this.items_H.getItemsByMode(false, !this.internalWriteCall);\r\n\r\n // Se ho una gerarchia, assegno i livelli gerarchici alla TMPBoundSource\r\n if (this.Hierarchy && !hasRowGroups)\r\n this.hierarchyMode_H.assignHierarchyLevels(this.TMPBoundSource);\r\n\r\n // L'hashing degli oggetti lo faccio a prescindere\r\n this.utilities_H.calculateHash(this.TMPBoundSource);\r\n\r\n // Assegno a una variabile mia l'eventuale override per la classe della riga\r\n // Se poi sono in modalità gerarchica inietto anche la classe per la configurazione del livello della riga\r\n if ((this.TMPBoundSource && this.RowClassAssigner) || this.Hierarchy) {\r\n for (let i = 0; i < this.TMPBoundSource.length; i++) {\r\n let item = this.TMPBoundSource[i];\r\n item._rowClass = this.RowClassAssigner ? this.RowClassAssigner(item) : \"\";\r\n item._rowClass += this.Hierarchy ? \" est-row-lvl-\" + item._level : \"\";\r\n }\r\n }\r\n }\r\n\r\n /** Genera le informzioni di paginazione per la vista globale dell'es-table */\r\n private setupPagingInformations() {\r\n\r\n // Default che valgono di base, poi eventualmente moddati dalle funzioni sotto\r\n this.PagerOptions.ShowCount = !this.HidePagingCount;\r\n this.PagerOptions.ShowButtons = !this.HidePagingButtons;\r\n this.PagerOptions.ShowPaging = !this.HidePaging\r\n this.PagerOptions.UsesView = true;\r\n\r\n if (this.arrayMode && this.UseArrayModePaging && !this.SearchView) {\r\n this.PagerOptions.PagerCount = (<any[]>this.View).length || 0;\r\n this.PagerOptions.ShowButtons = this.PagerOptions.ShowButtons && this.View.length > 10;\r\n this.PagerOptions.View = this.View;\r\n this.PagerOptions.UsesView = false;\r\n this.PagerOptions.ShowPagingOptions = this.PagerOptions.ShowButtons;\r\n }\r\n else if (this.arrayMode && (!this.UseArrayModePaging || this.SearchView)) {\r\n if (this.SearchView) {\r\n this.PagerOptions.View = this.SearchView\r\n this.PagerOptions.PagerCount = this.SearchView.objectcount || 0;\r\n }\r\n else\r\n this.PagerOptions.PagerCount = (<any[]>this.View).length || 0\r\n\r\n this.PagerOptions.ShowButtons = this.PagerOptions.ShowButtons && (this.View.length > 10 || (this.SearchView?.objectcount || 0) > 10);\r\n this.PagerOptions.ShowCount = this.PagerOptions.ShowCount || (this.View && this.View.length) || (this.SearchView && this.SearchView.objectcount && this.SearchView.objectcount != -1);\r\n this.PagerOptions.ShowPaging = this.PagerOptions.ShowButtons || this.PagerOptions.ShowCount;\r\n this.PagerOptions.ShowPagingOptions = this.PagerOptions.ShowButtons;\r\n }\r\n else if (this.viewMode) {\r\n let tmpView = this.MainGroupView || this.View;\r\n let count = tmpView?.groupcount || tmpView?.objectcount;\r\n this.PagerOptions.Searches = tmpView?.groupcount != null && tmpView?.groupcount != undefined ? 'groups' : 'items';\r\n this.PagerOptions.PagerCount = count || 0;\r\n this.PagerOptions.View = tmpView;\r\n this.PagerOptions.ShowCount = this.PagerOptions.ShowCount || (tmpView && count && count != -1);\r\n }\r\n else if (this.reportMode) {\r\n let rvc = this.ReportValues.count;\r\n this.PagerOptions.View = this.View;\r\n this.PagerOptions.PagerCount = rvc && rvc == -1 ? this.ReportValues.rows.length : rvc && rvc > 0 ? this.ReportValues.count : 0;\r\n this.PagerOptions.ShowCount = this.PagerOptions.ShowCount || (this.View && (<ReportDefinition>this.View).result.count != -1);\r\n this.PagerOptions.ShowButtons = this.PagerOptions.ShowButtons && (this.View.pagingavailable || this.PagerOptions.ShowCount);\r\n this.PagerOptions.ShowPagingOptions = this.PagerOptions.ShowButtons;\r\n }\r\n }\r\n\r\n /**\r\n * Metodo che gestisce l'endless scroll e in base a quanto la tabella è stata scrollata aggiunge degli elementi extra a **TMPBoundSource**\r\n *\r\n * @param {any} e Evento di scroll del browser\r\n */\r\n public onScroll(e: any) {\r\n let tableViewHeight = e.target.offsetHeight;\r\n let tableScrollHeight = e.target.scrollHeight;\r\n let scrollLocation = e.target.scrollTop;\r\n let buffer = 200;\r\n\r\n let limit = tableScrollHeight - tableViewHeight - buffer;\r\n if (scrollLocation > limit) {\r\n let indexToAdd = Math.floor(this.TMPBoundSource.length / 100);\r\n if (this.boundSubSources[indexToAdd] && this.addedSlices.indexOf(indexToAdd) == -1) {\r\n // Devo ricordarmi di fare l'hash del nuovo pezzo\r\n this.utilities_H.calculateHash(this.boundSubSources[indexToAdd]);\r\n this.TMPBoundSource = this.TMPBoundSource.concat(this.boundSubSources[indexToAdd]);\r\n this.addedSlices.push(indexToAdd);\r\n\r\n setTimeout(() => { this.postBoundSourceCalculation(); });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Metodo lanciato dopo che la sorgente dati è stata correttamente bindata, si occupa di ricalcolare tutto ciò che serve\r\n * all'es-table per renderizzare i valori da mostrare\r\n */\r\n private postBoundSourceCalculation() {\r\n // Resetto tutto tranne RowTDs e RowTHs per evitare flickering. RowTDs e RowTHs saranno modificate all'interno del prossimo ciclo di CD\r\n this.RowContexts = [];\r\n this.OrderDirectives = [];\r\n this.lastSelectedItemID = null;\r\n\r\n if (this.EsThsDirective && this.EsThsDirective.length > 0 && this.EsTdsDirective && this.EsTdsDirective.length > 0)\r\n this.internalPostBoundSource();\r\n else {\r\n this.cdr.detectChanges();\r\n setTimeout(() => { this.internalPostBoundSource(); });\r\n }\r\n }\r\n\r\n /** Per poter distinguere le chiamate a questo metodo: Dopo il setTimeout se uso gli EsTd/EsTh vecchi, senza il setTimeout se uso le nuove direttive */\r\n private internalPostBoundSource() {\r\n let View = this.View;\r\n let ths = this.EsThs && this.EsThs.length > 0 ? this.EsThs.toArray() : this.EsThsDirective && this.EsThsDirective.length > 0 ? this.EsThsDirective.toArray() : [];\r\n let tds = this.EsTds && this.EsTds.length > 0 ? this.EsTds.toArray() : this.EsTdsDirective && this.EsTdsDirective.length > 0 ? this.EsTdsDirective.toArray() : [];\r\n\r\n // Se non ho colonne dinamiche ma sono in modalità dinamica (lo capisco perché c'è una view piena di genericitem) metto il default delle colonne\r\n this.dynamicMode_H.eventuallyReviewDynamicColumns();\r\n this.bindDisplayToLoadedItemsOrGroups(View);\r\n\r\n // Questo dev'essere per forza lanciato dopo **bindDisplayToLoadedItemsOrGroups** dato che è lì che alcune cose vengono valorizzate\r\n this.setupPagingInformations();\r\n\r\n // Molte cose sono ovviamente disponibili solo in modalità View\r\n if ((this.viewMode || this.arrayMode) && this.UseCustomCells) {\r\n let view = this.viewMode ? View as AppSearch<any> : null;\r\n let itemsAndGroups = this.viewMode ? [...(view.items || []), ...(view.groups || [])] : View as any[];\r\n let si = this.viewMode ? view.selection : this.arraymodeSelection;\r\n // N.B: Rispettare l'ordine di queste 3 macrocategorie è VITALE\r\n\r\n // ************************************* Sistemazioni di TH, TD, e visibilità varie *************************************\r\n\r\n // Prepassaggio per tirare fuori tutte le info utili sugli headers in modo da non ricacolarseli sempre dopo\r\n let hI = this.columnMetadata_H.evaluateHeadersGroupingInfos(ths); \r\n\r\n if (this.arrayMode) { // In modalità array non ho un backend...\r\n this.items_H.arrayModeReviewOrderings() // ... quindi gli ordinamenti li devo fare lato client, e ...\r\n this.rowGrouping_H.arrayModeReviewGroupings(hI.leafs); // ... i raggruppamenti li devo fare lato client\r\n }\r\n\r\n this.columnMetadata_H.reviewColumnsList(hI.leafs); // Aggiorna la lista delle colonne da mostrare nella dialog per ordinamento ecc\r\n this.columnMetadata_H.alignColumnsIfLoadedView(view); // Se sto caricando una View da hotpotato (quindi con savedstate = true) riallineo la visibilità delle colonne e il loro ordine.\r\n this.columnMetadata_H.moveFixedColumnsAtTheBeginning(hI.leafs, tds); // Sposto tutte le cose fixed all'inizio in modo che la creazione di th e td sia più snella (Utilizza le ColumnsList, quindi dev'essere richiamata PIRMA di reviewColumnsList)\r\n this.columnMetadata_H.alignHeadersOrdering(hI.leafs, view); // Allineo gli ordinamenti agli header\r\n this.columnMetadata_H.refreshColumnsVisibility(hI.leafs, tds, view); // Lavoro sui TH ed eventualmente modifico la visibilità anche dei TD.\r\n this.columnMetadata_H.evaluatePinnedColumnsWidth(); // Se sono presenti colonne pinnate valuta la dimensione del contenitore\r\n this.columnMetadata_H.generateDefaultOrder(hI.leafs, view); // Genero le direttive di ordinamento, che siano default o derivanti dalla AppSearch\r\n this.columnMetadata_H.evaluateHeaderGroups(hI); // Valuto i raggruppamenti degli header se presenti\r\n\r\n // ************************************* Generazione binding per righe e colonne *************************************\r\n\r\n this.evaluateRowThs(hI.leafs); // Raccolgo i TH\r\n this.evaluateRowTds(hI.leafs, tds); // Raccolgo i TD in contesti separati, un contesto per ogni item o gruppo\r\n\r\n // ************************************* Ultimi aggiustmaenti dei binding *************************************\r\n\r\n this.columnMetadata_H.applyOrdering(view, true); // Applico l'ordinamento sulle colonne (non ASC DESC, ma \"prima questa o quella colonna\")\r\n this.MoveTemporaryVariablesToRealOnes(); // Collego TH e TD aggiustati fino ad ora alle variabili di Binding HTML\r\n this.selection_H.evaluateSelection(itemsAndGroups, si); // Riallineo le info di selezione degli elementi della View\r\n\r\n if (this.ResearchNeeded) {\r\n this.changed();\r\n this.emitSearchRequest(false);\r\n this.ResearchNeeded = false;\r\n }\r\n }\r\n else if ((this.viewMode || this.arrayMode) && !this.UseCustomCells) {\r\n // Riallineo le info di selezione degli elementi della View\r\n let items = this.viewMode ? (View as AppSearch<any>).items : View as any[];\r\n let si = this.viewMode ? (View as AppSearch<any>).selection : this.arraymodeSelection;\r\n this.selection_H.evaluateSelection(items, si);\r\n }\r\n\r\n // Per essere sicuro che dopo un bind di oggetti la es-table aggiorni la grafica\r\n this.cdr.markForCheck();\r\n this.FirstBind = false;\r\n }\r\n\r\n /**\r\n * Effettua il binding degli oggetti pervenuti da questa chiamata con gli oggetti effettivamente da graficare\r\n * \r\n * @param {any} view View da cui sono arrivati gli oggetti. Può essere o un array se sono in **arrayMode** o una AppSearch<T> se sono in **viewMode**\r\n */\r\n private bindDisplayToLoadedItemsOrGroups(view: any) {\r\n if (this.TMPBoundSource.length == 0) {\r\n this.BaseItemsCount = 0;\r\n this.boundSource = this.TMPBoundSource;\r\n return;\r\n }\r\n\r\n if (this.arrayMode || !this.UseCustomCells) {\r\n this.boundSource = this.TMPBoundSource;\r\n this.BaseItemsCount = view?.objectcount || view.length;\r\n return;\r\n }\r\n\r\n let groupingKeys = view.groupings?.filter(t => !t.aggregation)?.length || 0;\r\n if (groupingKeys == 0) {\r\n this.boundSource = this.TMPBoundSource;\r\n this.BaseItemsCount = view.objectcount;\r\n return;\r\n }\r\n\r\n this.rowGrouping_H.handleNewDataOnRowGrouping(view, groupingKeys);\r\n }\r\n\r\n /** Metodo richiamato solo quando **TMPRowTDs** e **TMPRowTHs** sono completamente generati ed aggiustati. Serve per collegarli alle variabili usate lato binding HTML */\r\n private MoveTemporaryVariablesToRealOnes() {\r\n this.RowTDs = this.TMPRowTDs;\r\n this.RowTHs = this.TMPRowTHs;\r\n this.RowThGroups = this.TMPRowThGroups ? this.TMPRowThGroups.reverse() : null;\r\n\r\n this.Columns.Visibile = this.RowTHs.filter(t => t.Visible).length;\r\n this.Columns.VisibleUnpinned = this.RowTHs.filter(t => t.Visible && !t.Pinned).length;\r\n this.Columns.Global = this.Columns.VisibleUnpinned + (this.HasPinnedColumns ? 1 : 0) + (this.Selection ? 1 : 0) + (this.Removal ? 1 : 0) + (this.Export || this.HiddenColumns || this.ColumnsOrdering || this.CornerMenuOptions ? 1 : 0)\r\n }\r\n\r\n /**\r\n * Permette di selezionare o deselezionare in maniera arbitraria degli oggetti\r\n * \r\n * @param {any[]} items Oggetti da selezionare o deselezionare\r\n * @param {boolean} select **true** per selezionarli, **false** per non toccarli\r\n */\r\n public setSelectionStatus(items: any[], select: boolean) {\r\n this.selection_H.handleItemsSelection(items, select);\r\n this.cdr.markForCheck();\r\n }\r\n\r\n /**\r\n * Metodo che gestisce il cambio di Ordinamento di una colonna\r\n *\r\n * @param {string} id ID della colonna il cui oridnamento è cambiato\r\n * @param {'DESC' | 'ASC'} order Nuovo ordine selezionato per la colonna\r\n */\r\n public thOrderChanged(id: string, order?: 'DESC' | 'ASC') {\r\n if (!this.viewMode && !this.arrayMode) {\r\n console.warn('Order changed on a table not in viewMode or Array mode. Operation not supported');\r\n return;\r\n }\r\n\r\n if (!this.OrderByColumn)\r\n return;\r\n\r\n this.columnMetadata_H.handleTHOrderChange(id, order);\r\n }\r\n\r\n /**\r\n * Metodo da chiamare ogni volta che si vuole dare evidenza all'esterno del bisogno di rieffettuare la ricerca\r\n * \r\n * @param {boolean} resetsPage Indica al listener che deve resettare il numero di pagina\r\n * @param {AppSearch<any>} viewOverride Override della view da emettere per questa ricerca\r\n */\r\n public emitSearchRequest(resetsPage: boolean, viewOverride?: AppSearch<any>) {\r\n if (this.viewMode && !viewOverride) {\r\n (this.View as AppSearch<any>).internalsearchrequest = true;\r\n this.changed();\r\n }\r\n\r\n if (viewOverride) {\r\n if (resetsPage)\r\n viewOverride.page = 1;\r\n viewOverride.internalsearchrequest = true\r\n }\r\n\r\n this.researchInProgress = true;\r\n this.onSearchRequest.emit(viewOverride ? viewOverride : resetsPage);\r\n }\r\n\r\n /**\r\n * Partendo dagli **EsTds** bindati genera, all'interno del dizionario **TMPRowTDs** tutti i contesti dei vari oggetti.\r\n *\r\n * Vengono esclusi i TD \"Interni\" in quanto vengono generati dagli originali quindi includerli vorrebbe dire rieffettuare le operazioni due volte\r\n *\r\n * Costo: 2 scan EsThs, 1 scan EsTds\r\n *\r\n * @param {EsTh[] | EsThDirective[]} ths Colonne della tabella\r\n * @param {EsTd[] | EsTdDirective[]} tds Celle della tabella\r\n */\r\n private evaluateRowTds(ths: EsTh[] | EsThDirective[], tds: EsTd[] | EsTdDirective[]) {\r\n if (tds.length == 0)\r\n return;\r\n\r\n let thsCache: { [index: string]: EsTh | EsThDirective } = {};\r\n let columnsCache: { [index: string]: EsTableColumn } = {};\r\n\r\n for (let coli = 0; coli < this.ColumnsList.length; coli++) {\r\n let col = this.ColumnsList[coli];\r\n columnsCache[col.id] = col;\r\n }\r\n\r\n for (let i = 0; i < ths.length; i++) {\r\n let th = ths[i];\r\n thsCache[this.utilities_H.isEsTh(th) ? th.ID : th.th] = th;\r\n }\r\n\r\n this.TMPRowTDs = {};\r\n // Variabile d'appoggio per permettermi di inserire tutte le colonne \"Fixed\" davanti\r\n let contextFixeds: { [context: string]: number } = {};\r\n for (let i = 0; i < tds.length; i++) {\r\n let td = tds[i];\r\n\r\n if (this.utilities_H.isEsTd(td)) {\r\n let th = thsCache[td.ID];\r\n if (!!th)\r\n th._referenced = true;\r\n else\r\n throw \"ID dell'oggeto EsTd non compatibile con gli ID dicharati negli EsTh: \" + td.ID;\r\n\r\n let isFixed = (this.utilities_H.isEsTh(th) && th.Fixed) || (!this.utilities_H.isEsTh(th) && (th.thFixed || th.thGroup));\r\n let itemToAdd = <any>{ GroupAggregation: false, GroupHeader: false, Wraps: true, ID: td.ID, Visible: td.Visible, Class: td.Class, Content: td.Content, RouterLink: td.RouterLink, Template: td.Template };\r\n let ctx = td.Context;\r\n if (this.TMPRowTDs[ctx]) {\r\n if (isFixed)\r\n this.TMPRowTDs[ctx].splice(0 + (contextFixeds[ctx]++), 0, itemToAdd);\r\n else\r\n this.TMPRowTDs[ctx].push(itemToAdd);\r\n }\r\n else {\r\n this.RowContexts.push(ctx);\r\n this.TMPRowTDs[ctx] = [itemToAdd];\r\n contextFixeds[ctx] = isFixed ? 1 : 0\r\n }\r\n }\r\n else {\r\n for (let i = 0; i < this.boundSource.length; i++) {\r\n let item = this.boundSource[i];\r\n let ctx = item._hash;\r\n let key = td.td;\r\n let th = thsCache[td.td];\r\n if (!!th)\r\n th._referenced = true;\r\n else\r\n throw \"ID dell'oggeto EsTd non compatibile con gli ID dicharati negli EsTh: \" + td.td;\r\n\r\n if (td.tdIf || (!this.utilities_H.isEsTh(th) && th.thGroup)) {\r\n let thCasted = <EsThDirective>th;\r\n let isFixed = (this.utilities_H.isEsTh(th) && th.Fixed) || (!this.utilities_H.isEsTh(th) && (th.thFixed || th.thGroup || th.thPinned));\r\n let itemToAdd = item._item ?\r\n <any>{ LeftBorder: (<any>thCasted)._lbord, RightBorder: (<any>thCasted)._rbord, ID: key, Pinned: columnsCache[td.td].pinned, PinnedWidth: thCasted.thPinnedWidth, GroupHeader: false, GroupAggregation: false, Visible: columnsCache[td.td].visible, Wraps: false, Class: td.tdClass, Template: thCasted.thGroup && !this.ShowItemGroupsColumns ? null : td.Template } :\r\n <any>{ LeftBorder: (<any>thCasted)._lbord, RightBorder: (<any>thCasted)._rbord, ID: key, Pinned: columnsCache[td.td].pinned, PinnedWidth: thCasted.thPinnedWidth, GroupHeader: thCasted.thGroup, GroupAggregation: !!thCasted.thAggregation, Visible: columnsCache[td.td].visible, Wraps: false, Class: thCasted.thGroupClass || '', Content: this.rowGrouping_H.getGroupCellDisplay(<Group>item, key, <EsThDirective>th) };\r\n\r\n if (this.TMPRowTDs[ctx]) {\r\n this.TMPRowTDs[ctx].push(itemToAdd);\r\n }\r\n else {\r\n this.RowContexts.push(ctx);\r\n this.TMPRowTDs[ctx] = [itemToAdd];\r\n contextFixeds[ctx] = isFixed ? 1 : 0;\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // Se non ho oggetti è inutile che controllo gli errori, dato che gli es-td non esisteranno di certo e di conseguenza gli es-th non saranno referenziati\r\n if (this.TMPBoundSource.length == 0)\r\n return;\r\n\r\n var errs: string[] = [];\r\n for (let i = 0; i < ths.length; i++) {\r\n let th = ths[i];\r\n if (!th._referenced)\r\n errs.push(this.utilities_H.isEsTh(th) ? th.ID : th.th);\r\n }\r\n\r\n if (errs.length > 0) {\r\n var errIds = errs.join(', ');\r\n throw \"L'ID di uno o più EsTh non hanno alcun EsTd associato: \" + errIds;\r\n }\r\n }\r\n\r\n /**\r\n * Partendo dagli **EsThs** bindati genera, all'interno del dizionario **TMPRowTHs** tutti i contesti dei vari oggetti.\r\n *\r\n * Vengono esclusi i TH \"Interni\" in quanto vengono generati dagli originali quindi includerli vorrebbe dire rieffettuare le operazioni due volte\r\n *\r\n * Costo: 1 scan EsThs\r\n *\r\n * @param {EsTh[] | EsThDirective[]} ths Colonne della tabella\r\n */\r\n private evaluateRowThs(ths: EsTh[] | EsThDirective[]) {\r\n if (ths.length == 0)\r\n return;\r\n\r\n let columnsListCache: { [index: string]: EsTableColumn } = {};\r\n let castedView = <AppSearch<any>>this.View;\r\n let groupingsUndefined = this.viewMode && (castedView && !castedView.groupings || castedView.groupings.length == 0);\r\n\r\n for (let i = 0; i < this.ColumnsList.length; i++) {\r\n let itm = this.ColumnsList[i];\r\n columnsListCache[itm.id] = itm\r\n }\r\n\r\n this.TMPRowTHs = [];\r\n let fixed = 0;\r\n for (let i = 0; i < ths.length; i++) {\r\n let th = ths[i];\r\n let toAdd;\r\n\r\n if (this.utilities_H.isEsTh(th)) {\r\n toAdd = { Pinned: false, ID: th.ID, Visible: th.Visible, Class: th.Class, Order: th.Order, Orderable: th.Orderable, Template: null, Content: th.Description, Wrap: th.Wrap };\r\n if (th.Fixed)\r\n this.TMPRowTHs.splice(0 + (fixed++), 0, toAdd);\r\n else\r\n this.TMPRowTHs.push(toAdd);\r\n }\r\n else if (th.thIf || th.thGroup) {\r\n\r\n let thClass = (th.thClass || '') + (th.thGroup ? \" est-col-min\" : \"\");\r\n toAdd = { Pinned: columnsListCache[th.th].pinned, Fixed: th.thFixed, PinnedWidth: th.thPinnedWidth, ID: th.th, Visible: th.thVisible, Class: thClass, Order: th.thOrder, Orderable: th.thOrderable, Template: th.Template, Content: null, Wrap: th.thWrap, LeftBorder: (<any>th)._lbord, RightBorder: (<any>th)._rbord };\r\n this.TMPRowTHs.push(toAdd);\r\n\r\n // Se ho un modello che deve funzionare a rowgrouping ma non è ancora stata effettuata nessuna ricerca sui gruppi principali (groupingsUndefined)\r\n // li genero e mando la prima ricerca che dev'essere spedita al backend per il primo caricamento dei gruppi\r\n if (groupingsUndefined && (th.thAggregation || th.thGroup)) {\r\n let groupAggregations: GroupOrAggregation[] = this.rowGrouping_H.getGroupAggregations(th);\r\n if (!castedView.groupings)\r\n castedView.groupings = groupAggregations;\r\n else\r\n castedView.groupings.push(...groupAggregations);\r\n\r\n this.ResearchNeeded = true;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Sposta la ricerca di una pagina in avanti (o indietro)\r\n *\r\n * @param {number} page Numero di pagine da aggiungere (o sottrarre, se negativo) alla pagina attuale\r\n * @param {any} pager Elemento di separazione su cui è effettuata la ricerca\r\n */\r\n public addToPageGroup(page: number, pager: GroupPager) {\r\n this.goToPageGroup(pager.view.page + page, pager);\r\n }\r\n\r\n /**\r\n * Sposta la ricerca alla pagina specificata\r\n *\r\n * @param {number} page Pagina a cui navigare\r\n * @param {any} pager Elemento di separazione su cui è effettuata la ricerca\r\n */\r\n public goToPageGroup(page: number, pager: GroupPager) {\r\n\r\n let appSearchElement = pager.view;\r\n if (page === 0 || (page > appSearchElement.pages && appSearchElement.pages > 0))\r\n return;\r\n\r\n appSearchElement.page = page;\r\n pager.buttons = this.utilities_H.getPagesArray(6, appSearchElement.page, appSearchElement.pages);\r\n\r\n this.emitSearchRequest(false, appSearchElement);\r\n }\r\n\r\n\r\n /**\r\n * Gestisce i click sulla tabella solo per le righe a gruppo. \r\n * O rimuove gli elementi attualmente presenti o carica il contenuto del gruppo\r\n *\r\n * @param {any} group Gruppo bindato su cui si è effettuato il click\r\n *\r\n * @returns {boolean} **true** se l'operaizone è andata a buon fine, **false** altrimenti\r\n */\r\n public handleGroupClick(group: Group): boolean {\r\n let casted = this.View as AppSearch<any>;\r\n let anyG = (<any>group);\r\n anyG._expanded = !anyG._expanded;\r\n\r\n // Sono in modalità raggruppamento virtuale da array: Espandere significa rendere visibili tutti gli oggetti relativi a questo gruppo, viceversa il contrarre\r\n if (this.ArrayGrouping) {\r\n let allRelatives = this.boundSource.filter(t =>\r\n (t._group && ((anyG._expanded && t._parent == anyG._thisKey) || (!anyG._expanded && t._parent && t._parent.startsWith(anyG._thisKey)))) ||\r\n (t._item && ((anyG._expanded && t._thisKey == anyG._thisKey) || (!anyG._expanded && t._thisKey.startsWith(anyG._thisKey)))))\r\n allRelatives.forEach(t => { t._visible = anyG._expanded; if (t._group) t._expanded = false });\r\n return;\r\n }\r\n\r\n if (anyG._expanded) {\r\n // Resetto ipp\r\n casted.itemsperpageoverride = 15;\r\n if (!casted.requestedgroups)\r\n casted.requestedgroups = [new GroupFilter(group.column, group.value)];\r\n else {\r\n let level = anyG._grouplevel;\r\n // se il gruppo cliccato non ha un livello è il primo gruppo, quindi ordinamento unico\r\n // altrimenti devo rimuovere tutti i filtri su livelli superiori al level cliccato e aggiungere il level cliccato\r\n if (!level)\r\n casted.requestedgroups = [new GroupFilter(group.column, group.value)];\r\n else {\r\n casted.requestedgroups = [];\r\n anyG._parentRoute.forEach((step: GroupRouteFragment) => {\r\n casted.requestedgroups.push(new GroupFilter(step.column, step.value));\r\n });\r\n casted.requestedgroups.push(new GroupFilter(group.column, group.value));\r\n }\r\n }\r\n\r\n this.changed();\r\n this.emitSearchRequest(true);\r\n }\r\n else {\r\n let path = (anyG._parent || '') + group.value;\r\n\r\n // Se ho chiuso un gruppo non mi serve rieffettuare ricerce, mi basta eliminare dagli oggetti bindati tutti gli elementi sottostanti a quel gruppo\r\n this.boundSource = this.boundSource.filter(t => !t._parent || !t._parent.startsWith(path));\r\n\r\n // devo però anche rimuovere eventuali cache relative\r\n this.groupSearchRequestsCache = this.groupSearchRequestsCache.filter(t => t.path != path);\r\n }\r\n\r\n return true;\r\n }\r\n\r\n\r\n /**\r\n * Gestisce la selezione globale degli oggetti, sia per pagina che a livello di **SelectAll**\r\n *\r\n * @param {boolean} forcedVal Valore forzato di check da assegnare agli oggetti\r\n */\r\n public globalCheckChanged(forcedVal: boolean = null) {\r\n\r\n // Prendo tutti gli elementi presenti in questa vista. Se ho gruppi prendo solo i gruppi a livello 0, altrimenti prendo tutti gli oggetti per selezionarli\r\n let items = this.boundSource.find(t => t._group) ? this.boundSource.filter(t => t._group && !t._parent) : this.boundSource;\r\n var itemSelection = this.selection_H.handleItemsSelection(items, forcedVal, this.globalCheck);\r\n this.changed();\r\n\r\n this.onSelectionChanged.emit(itemSelection);\r\n }\r\n\r\n /**\r\n * Gestisce i click sulla tabella, gestendo eventualmente anche gli Shift + Click per selezionare un range di oggetti\r\n *\r\n * @param {any} event Evento nativo HTML del click\r\n * @param {any} item Oggetto bindato su cui si è effettuato il click\r\n *\r\n * @returns {boolean} **true** se l'operaizone è andata a buon fine, **false** altrimenti\r\n */\r\n public handleClick(event: any, item: any): boolean {\r\n // Seleziono del testo ma non ho shift premuto -> ignoro la selezione\r\n if ((event.view.getSelection().type == 'Range' || event.view.getSelection().toString().length > 0) && !event.shiftKey)\r\n return false;\r\n\r\n // Seleziono del testo e ho shift premuto -> annullo la selezione del testo\r\n if ((event.view.getSelection().type == 'Range' || event.view.getSelection().toString().length > 0) && event.shiftKey)\r\n this.utiExts.clearTextSelection();\r\n\r\n let selecteditems: any[] = [];\r\n if (event.shiftKey && this.ShiftClick && !this.SingleSelection) {\r\n let startSelecting = false;\r\n\r\n let items = this.boundSource.filter(t => !t._group && !t._sep);\r\n for (let i = 0; i < items.length; i++) {\r\n let t = items[i];\r\n if (startSelecting) {\r\n t._selected = true;\r\n selecteditems.push(t);\r\n }\r\n if ((t == item || t == this.lastSelected) && !startSelecting) {\r\n startSelecting = true;\r\n t._selected = true;\r\n selecteditems.push(t);\r\n } else if ((t == item || t == this.lastSelected) && startSelecting)\r\n startSelecting = false;\r\n }\r\n } else {\r\n item._selected = !item._selected;\r\n this.lastSelected = item;\r\n selecteditems.push(item);\r\n }\r\n\r\n var itemSelection = this.selection_H.handleItemsSelection(selecteditems);\r\n this.changed();\r\n\r\n this.onSelectionChanged.emit(itemSelection);\r\n return true;\r\n }\r\n\r\n\r\n /**\r\n * Sposta la ricerca di una pagina in avanti (o indeitro)\r\n *\r\n * @param {number} page Numero di pagine da aggiungere (o sottrarre, se negativo) alla pagina attuale\r\n */\r\n public addToPage(page: number) {\r\n let view = this.MainGroupView ? this.MainGroupView : this.View;\r\n\r\n this.goToPage(((this.SearchView || view)?.page || 0) + page);\r\n }\r\n\r\n /**\r\n * Sposta la ricerca alla pagina specificata\r\n *\r\n * @param {number} page Pagina a cui navigare\r\n */\r\n public goToPage(page: number) {\r\n let view = this.MainGroupView ? this.MainGroupView : (this.arrayMode ? this.SearchView : this.View);\r\n if (!view.page || !view.pages)\r\n return;\r\n\r\n let appSearchElement = this.SearchView || view;\r\n if (page === 0 || (page > appSearchElement.pages && appSearchElement.pages > 0))\r\n return;\r\n\r\n appSearchElement.page = page;\r\n let count = this.reportMode ? ((<ReportDefinition>view).result?.count || 0) : (view.items.length || view.groups?.length || 0);\r\n let ipp = this.reportMode ? ((<ReportDefinition>view).itemsperpageoverride || 15) : view.itemsperpageoverride || 15;\r\n this.arrayPulsanti = this.utilities_H.getPagesArray(6, appSearchElement.page, appSearchElement.pages, count, ipp);\r\n\r\n let hasGroupings = !!this.MainGroupView;\r\n this.emitSearchRequest(false, hasGroupings ? view : this.SearchView ? this.SearchView : null);\r\n }\r\n\r\n /**\r\n * Evento richiamato sul cambio della paginazione. Verrà richiamato l'evento **emitSearchRequest**\r\n * per comunicare al componente che utilizza questa tabella che i dati sono da aggiornare\r\n */\r\n public onItemsPerPageChanged(newIpp) {\r\n this.PagerOptions.View.itemsperpageoverride = newIpp;\r\n this.changed();\r\n if (this.MainGroupView)\r\n this.emitSearchRequest(true, this.MainGroupView);\r\n else if (this.SearchView) {\r\n // Questo secondo me si può portare a livello un po' più alto\r\n this.SearchView.page = 1;\r\n this.emitSearchRequest(true, this.SearchView);\r\n }\r\n else\r\n this.emitSearchRequest(true);\r\n }\r\n\r\n /** Evento richiamato sul cambio della paginazione. Verrà richiamato l'evento **emitSearchRequest** con la vista del separatore */\r\n public onGroupItemsPerPageChanged(pager: GroupPager, newIpp: number) {\r\n pager.view.itemsperpageoverride = newIpp;\r\n this.emitSearchRequest(true, pager.view);\r\n }\r\n\r\n\r\n /** Metodo che gestisce la modifica del tempo specificato per l'aggiornamento automatico */\r\n public autoUpdateChanged() {\r\n if (!/^[1-9]\\d*$/.test(this.seconds))\r\n this.seconds = '10';\r\n\r\n let secondsInMs = parseInt(this.seconds, null) * 1000;\r\n\r\n if (this.autoUpdate)\r\n this.updateTimer = setInterval(() => { this.emitSearchRequest(false); }, secondsInMs);\r\n else\r\n clearInterval(this.updateTimer);\r\n }\r\n\r\n /**\r\n * Metodo chiamato dal click su una delle colonne generate dall'Input **DynamicOperations**\r\n *\r\n * @param {any} item L'oggetto su cui va effettuata l'operazione\r\n * @param {string} opid Codice identificativo dell'operazione da effettuarsi\r\n */\r\n public dynamicOperation(item: any, opid: string) {\r\n this.onDynamicOperation.emit({ id: opid, item: item });\r\n }\r\n\r\n /**\r\n * Ottiene il contenuto dell'EsTd da utilizzare per la colonna specificata\r\n * \r\n * @param {string} column Colonna per cui cercare la cella\r\n * \r\n * @returns {TemplateRef<any>} Template da usare per la colonna\r\n */\r\n public findEsTd(column: string): TemplateRef<any> {\r\n var EsTd = this.EsTdsDirective.find((item) => item.td === column);\r\n return EsTd ? EsTd.Template : null;\r\n }\r\n\r\n\r\n /**\r\n * Equivalente del metodo **addToPage** riadattato per la modalità array\r\n *\r\n * @param {number} page Numero di pagine da aggiungere (o sottrarre, se negativo) alla pagina attuale\r\n */\r\n public arrayAddToPage(page: number) {\r\n this.arrayGoToPage(this.arraymodePage + page)\r\n }\r\n\r\n /**\r\n * Equivalente del metodo **goToPage** riadattato per la modalità array\r\n *\r\n * @param {number} page Pagina a cui navigare\r\n */\r\n public arrayGoToPage(page: number) {\r\n if (page === 0 || page > this.arraymodePages)\r\n return;\r\n this.arraymodePage = page;\r\n\r\n // Riforzo il writevalue in modo che il codice passi dalla gestione come se fosse fatta ripartire una ricerca\r\n this.internalWriteValue();\r\n }\r\n\r\n /**\r\n * Gestore dei click sulle celle per le quali era impostata una azione custom da **CustomCellActionsOn**\r\n *\r\n * @param {string} name Nome della cella su cui si è fatto click\r\n * @param {any} model Modello relativo alla cella cliccata\r\n *\r\n * @returns {boolean} **true** se il click è stato fatto su una cella cliccabile, **false** altrimenti\r\n */\r\n public cellClicked(name: string, model: any): boolean {\r\n if (this.UseCustomCellActions && this.CustomCellActionsOn.split('$').indexOf(name) != -1) {\r\n this.onCellClick.emit({ column: name, model: model });\r\n return true;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n /**\r\n * Gestione dei click sulle opzioni del menù contestuale in alto a destra generato dall'Input **CornerMenuOptions**\r\n *\r\n * @param {string} cornerid Codice dell'operazione selezionata\r\n */\r\n public cornerActionClicked(cornerid: string) {\r\n this.onCornerAction.emit({ id: cornerid, estable: this });\r\n }\r\n\r\n /** \r\n * Impostazione modalità dell'EsTable \r\n * \r\n * @param {'array' | 'view' | 'report'} mode Modalità da impostare\r\n **/\r\n private setMode(mode: 'array' | 'view' | 'report') {\r\n this.viewMode = mode == 'view';\r\n this.arrayMode = mode == 'array';\r\n this.reportMode = mode == 'report';\r\n\r\n if (this.reportMode) {\r\n // In modalità report ho di sicuro queste due\r\n this.XLSXExport = true;\r\n this.CSVExport = false;\r\n }\r\n }\r\n\r\n /**\r\n * Helper per effettuare chiamate interne di allineamento alla funzione **writeValue**, \r\n * impostando prima **internalWriteCall** in modo da non effettuare operazioni inutili\r\n */\r\n public internalWriteValue() {\r\n this.internalWriteCall = true;\r\n this.writeValue(this.View);\r\n this.internalWriteCall = false;\r\n }\r\n\r\n /**\r\n * Metodo eventualmente richiamabile anche dal componente esterno che permette di forzare un refresh della tabella\r\n */\r\n public forceRefresh() {\r\n\r\n // Se sono in modalità View viene mantenuto in automatico il numero di pagina, ma per la modalità array devo prendere le info di paginazione prima e riapplicarle dopo\r\n let arrayPage: number;\r\n let arrayIpp: number;\r\n if (this.arrayMode) {\r\n arrayPage = this.arraymodePage;\r\n arrayIpp = this.ArraymodeItemsPerPage;\r\n }\r\n\r\n this.writeValue(this.View);\r\n this.cdr.detectChanges();\r\n\r\n if (this.arrayMode) {\r\n this.ArraymodeItemsPerPage = arrayIpp;\r\n this.arrayGoToPage(arrayPage);\r\n }\r\n }\r\n}","import { EsTableDefaultable } from \"./EsTableDefaultable\";\r\n\r\n/** Modello di configurazione per L'EsTable */\r\nexport class EsTableModuleConfig {\r\n\r\n /** Locale da utilizzare per i messaggi, supportati \"it-IT\" ed \"en-US\" */\r\n public locale?: string;\r\n /** Indica se scrivere messaggi di log a console */\r\n public debugMode?: boolean;\r\n /** Eventuali proprietà di default per l'EsTable */\r\n public EsTableDefaults?: EsTableDefaultable;\r\n}","import { Injectable, Inject, Optional } from \"@angular/core\";\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { EST_LOCALE } from '../../tokens';\r\n\r\n/** Classe di localizzazione per il componente **TablePagerComponent** */\r\n@Injectable()\r\nexport class TablePagerLoc extends LocalizationService {\r\n\r\n /** @ignore */\r\n constructor(@Optional() @Inject(EST_LOCALE) LOC_LOCALE: string) {\r\n super(LOC_LOCALE ?? 'it-IT');\r\n super.set(\"en->it\", \"All\", [\"Tutto\"]);\r\n super.set(\"en->it\", \"Shown Elements\", [\"Elementi visualizzati\"]);\r\n super.set(\"en->it\", \"Shown Groups\", [\"Gruppi visualizzati\"]);\r\n super.set(\"en->it\", \"Are you sure you want to retrieve all results?\", [\"Si è sicuri di voler caricare tutti i risultati?\"]);\r\n super.set(\"en->it\", \"This might slow down the page and possibly crash the entire application\", [\"L'operazione potrebbe rallentare la pagina fino al crash dell'applicazione\"]);\r\n }\r\n}","// Angular\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, EventEmitter, Inject, Input, Optional, Output, SimpleChanges, ViewEncapsulation } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { MessageService } from \"@esfaenza/extensions\";\r\n\r\n// Applicazione\r\nimport { TablePagerLoc } from \"./table_pager.component.loc\";\r\nimport { EST_LOCALE } from \"../../tokens\";\r\n\r\n/** Componente che si occupa della paginazione di una tabella */\r\n@Component({\r\n selector: \"app-paging\",\r\n viewProviders: [{ provide: LocalizationService, useClass: TablePagerLoc }],\r\n styleUrls: ['./table_pager.component.scss'],\r\n templateUrl: \"./table_pager.component.html\",\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class TablePagerComponent {\r\n\r\n /** Dimensione di pagina attuale */\r\n @Input() CurrentPageSize: any;\r\n\r\n /** View gestita, che può essere un IAppSearch o una ReportView */\r\n @Input() View: any;\r\n\r\n /** Indica se deve mostrare un warning quando si cercano di solezionare come elementi da visualizzare \"Tutti\" */\r\n @Input() WarnOnAll: boolean = true;\r\n\r\n /** Indica se dare la possibilità o meno di selezionare \"Tutti\" nelle opzioni di paginazione */\r\n @Input() AllSearch: boolean = true;\r\n \r\n /** Placeholder che identifica il \"Tutti\" */\r\n @Input() DefaultAll = 999999;\r\n \r\n /** Indica se attivare la modalità gruppo con stili più snelli per apparire sotto ai raggruppamenti */\r\n @Input() GroupMode = false;\r\n\r\n /** Indica se utilizzare il conteggio dei gruppi o degli oggetti */\r\n @Input() GroupCount = false;\r\n\r\n /** Indica il testo che va a sostituire \"Oggetti Visualizzati\" in caso si stia facendo qualcosa di custom, Ignorato in caso di gruppi */\r\n @Input() CountLabel: string = null;\r\n\r\n /** Indica se visualizzare il numero totale di oggeti presenti */\r\n @Input() ShowCount: boolean = true;\r\n\r\n /** Indica se visualizzare il numero totale di oggeti presenti */\r\n @Input() ShowPaging: boolean = true;\r\n\r\n /** Indica il numero totale di oggeti presenti */\r\n @Input() PagerCount: number;\r\n\r\n /** Indica se mostrare o meno il contenuto @deprecated usata solo da MatrixValuesComponent nella lib relativa */\r\n @Input() Hidden: boolean;\r\n\r\n /** Output invocato quando il numero di elementi per pagina viene modificato da un click utente */\r\n @Output() pagingSelected = new EventEmitter<number>();\r\n\r\n /** @ignore */\r\n constructor(private msgExts: MessageService, public lc: LocalizationService, public cdr: ChangeDetectorRef, @Optional() @Inject(EST_LOCALE) public locale: string) { }\r\n\r\n /** Modello su cui la select effettua operazioni di selezione */\r\n public Model: number;\r\n\r\n /** Opzioni di paginazione */\r\n public PagingOptions: number[] = [10, 15, 30, 45, 100 ];\r\n\r\n /** @ignore */\r\n ngOnInit() {\r\n this.Model = this.View ? (this.View.itemsperpageoverride || 15) : this.CurrentPageSize;\r\n if (this.AllSearch)\r\n this.PagingOptions.push(this.DefaultAll);\r\n }\r\n\r\n /** @ignore */\r\n ngOnChanges(changes: SimpleChanges) {\r\n let newView = changes['View'];\r\n let newCPS = changes['CurrentPageSize'];\r\n\r\n if ((newView && !newView.firstChange) || (newCPS && !newCPS.firstChange))\r\n this.Model = newView?.currentValue ? (newView.currentValue.itemsperpageoverride || 15) : newCPS?.currentValue ? newCPS.currentValue : null;\r\n }\r\n\r\n /**\r\n * Funzione richiamata dal template quando un utente clicca su un numero di paginazione.\r\n * \r\n * Cliccare 2 volte sullo stesso numero causa comunque un refresh dei dati\r\n * \r\n * @param {number} pageSize Dimensione selezionata lato UI\r\n */\r\n public choice(pageSize: number) {\r\n if (pageSize == this.DefaultAll && this.WarnOnAll) {\r\n this.msgExts.simpleWarningWithChoice(\r\n this.lc.loc(\"Are you sure you want to retrieve all results?\"),\r\n this.lc.loc(\"This might slow down the page and possibly crash the entire application\"),\r\n () => { this.pagingSelected.emit(pageSize); this.Model = pageSize; },\r\n () => {\r\n // Dio solo sa perché mi tocca fare sta roba... qui dentro per qualche motivo la CD non prende\r\n let prevModel = this.Model;\r\n this.Model = null;\r\n this.cdr.detectChanges();\r\n this.Model = prevModel;\r\n this.cdr.detectChanges();\r\n });\r\n }\r\n else {\r\n this.pagingSelected.emit(pageSize);\r\n this.Model = pageSize;\r\n }\r\n }\r\n}","import { CommonModule } from '@angular/common';\r\nimport { NgModule, ModuleWithProviders } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { RouterModule } from '@angular/router';\r\n\r\nimport { MatSelectModule } from \"@angular/material/select\";\r\nimport { MatInputModule } from \"@angular/material/input\";\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\n\r\nimport { UtilityService, ExportService, HashingService, MessageService } from '@esfaenza/extensions';\r\nimport { LocalizationModule } from '@esfaenza/localizations';\r\n\r\nimport { EST_LOCALE, EST_DEBUG } from './tokens';\r\nimport { EsTableModuleConfig } from './domain/configuration/EsTableModuleConfig';\r\n\r\nimport { TablePagerComponent } from './components/pager/table_pager.component';\r\nimport { EsTableComponent } from './components/es-table/es_table.component';\r\nimport { EsTh } from './components/es-th/es_th.component';\r\nimport { EsTd } from './components/es-td/es_td.component';\r\nimport { EsTdDirective } from './directives/es_td.directive';\r\nimport { EsThDirective } from './directives/es_th.directive';\r\n\r\nimport { ModalModule } from \"ngx-bootstrap/modal\";\r\nimport { BsDropdownModule } from \"ngx-bootstrap/dropdown\";\r\nimport { CsvModule } from \"@ctrl/ngx-csv\";\r\nimport { ContextMenuModule } from \"@esfaenza/ngx-contextmenu\";\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n RouterModule,\r\n LocalizationModule,\r\n ModalModule,\r\n BsDropdownModule,\r\n CsvModule,\r\n ContextMenuModule,\r\n MatSelectModule,\r\n MatInputModule,\r\n DragDropModule\r\n ],\r\n declarations: [EsTh, EsTd, EsTableComponent, EsTdDirective, EsThDirective, TablePagerComponent],\r\n providers: [UtilityService, ExportService, HashingService, MessageService],\r\n exports: [EsTh, EsTd, EsTableComponent, EsTdDirective, EsThDirective, TablePagerComponent]\r\n})\r\nexport class EsTableModule {\r\n static forRoot(config?: EsTableModuleConfig): ModuleWithProviders<EsTableModule> {\r\n return {\r\n ngModule: EsTableModule,\r\n providers: [\r\n { provide: EST_LOCALE, useValue: config?.locale || 'it-IT' },\r\n { provide: EST_DEBUG, useValue: config?.debugMode || false }\r\n ]\r\n };\r\n }\r\n}","/*\r\n * Public API Surface of es-table\r\n */\r\n\r\nexport * from './lib/components/es-table/es_table.component';\r\nexport * from './lib/components/es-th/es_th.component';\r\nexport * from './lib/components/es-td/es_td.component';\r\nexport * from './lib/domain/configuration/EsTableModuleConfig';\r\nexport * from './lib/domain/configuration/EsTableDefaultable';\r\nexport * from './lib/es-table.module';\r\nexport * from './lib/domain/externals';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n\nexport {EsTableLoc as ɵa} from './lib/components/es-table/es_table.component.loc';\nexport {TablePagerComponent as ɵh} from './lib/components/pager/table_pager.component';\nexport {TablePagerLoc as ɵi} from './lib/components/pager/table_pager.component.loc';\nexport {UtilitiesHandler as ɵe} from './lib/core/handlers';\nexport {EsTdDirective as ɵf} from './lib/directives/es_td.directive';\nexport {EsThDirective as ɵg} from './lib/directives/es_th.directive';\nexport {EST_DEBUG as ɵc,EST_DEFAULTS as ɵd,EST_LOCALE as ɵb} from './lib/tokens';"],"names":["Component","ChangeDetectionStrategy","ElementRef","Renderer2","ViewContainerRef","DomSanitizer","Input","EventEmitter","Output","ViewChild","HostListener","Directive","TemplateRef","InjectionToken","LocalizationService","Injectable","Optional","Inject","moveItemInArray","HashingService","ViewEncapsulation","NgControl","Self","PreferencesService","ChangeDetectorRef","UtilityService","ExportService","DateService","MessageService","ContentChildren","forwardRef","ContentChild","NgModule","CommonModule","FormsModule","RouterModule","LocalizationModule","ModalModule","BsDropdownModule","CsvModule","ContextMenuModule","MatSelectModule","MatInputModule","DragDropModule"],"mappings":"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"}