@mediusinc/mng-commons 7.0.0-rc.0 → 7.0.0-rc.2
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.
- package/core/index.d.ts +31 -11
- package/fesm2022/mediusinc-mng-commons-core.mjs +109 -77
- package/fesm2022/mediusinc-mng-commons-core.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-filter.mjs +36 -0
- package/fesm2022/mediusinc-mng-commons-filter.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-form-api.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-form.mjs +475 -35
- package/fesm2022/mediusinc-mng-commons-form.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-model-class.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-model.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-table-api-class.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-table-api.mjs +0 -2
- package/fesm2022/mediusinc-mng-commons-table-api.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-table-column-toggle.component-BQ99oqWO.mjs +30 -0
- package/fesm2022/mediusinc-mng-commons-table-column-toggle.component-BQ99oqWO.mjs.map +1 -0
- package/fesm2022/mediusinc-mng-commons-table-mediusinc-mng-commons-table-BLuM5Kpu.mjs +2700 -0
- package/fesm2022/mediusinc-mng-commons-table-mediusinc-mng-commons-table-BLuM5Kpu.mjs.map +1 -0
- package/fesm2022/mediusinc-mng-commons-table.mjs +1 -1
- package/fesm2022/mediusinc-mng-commons-tableview-api-class.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-tableview-api.mjs +47 -6
- package/fesm2022/mediusinc-mng-commons-tableview-api.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-tableview.mjs +189 -161
- package/fesm2022/mediusinc-mng-commons-tableview.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons.mjs.map +1 -1
- package/filter/index.d.ts +29 -3
- package/form/index.d.ts +143 -14
- package/i18n/en.json +17 -3
- package/i18n/sl.json +17 -3
- package/package.json +24 -24
- package/table/api/index.d.ts +4 -4
- package/table/index.d.ts +248 -145
- package/tableview/api/index.d.ts +18 -5
- package/tableview/index.d.ts +31 -34
- package/version-info.json +6 -6
- package/fesm2022/mediusinc-mng-commons-table-column-toggle.component-Dvenjj9n.mjs +0 -30
- package/fesm2022/mediusinc-mng-commons-table-column-toggle.component-Dvenjj9n.mjs.map +0 -1
- package/fesm2022/mediusinc-mng-commons-table-mediusinc-mng-commons-table-DFcdSUCN.mjs +0 -2142
- package/fesm2022/mediusinc-mng-commons-table-mediusinc-mng-commons-table-DFcdSUCN.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mediusinc-mng-commons-table-mediusinc-mng-commons-table-DFcdSUCN.mjs","sources":["../tmp-esm2022/table/helpers/filters.js","../tmp-esm2022/table/helpers/table.js","../tmp-esm2022/table/services/table-feature-config.token.js","../tmp-esm2022/table/services/table-metadata.service.js","../tmp-esm2022/table/services/table-data.service.js","../tmp-esm2022/table/components/column-filter/column-filter.component.js","../tmp-esm2022/table/components/column-value/column-value.component.js","../tmp-esm2022/table/pipes/filter-value.pipe.js","../tmp-esm2022/table/components/filter/filter-active-tag/filter-active-tag.component.js","../tmp-esm2022/table/components/filter/filter-form/filter-form.component.js","../tmp-esm2022/table/components/filter/filter-overlay-with-tag/filter-overlay-with-tag.component.js","../tmp-esm2022/table/helpers/notification.js","../tmp-esm2022/table/pipes/locale-default-row-class.pipe.js","../tmp-esm2022/table/pipes/table-column-filter-class.pipe.js","../tmp-esm2022/table/helpers/table-layout-prefs.js","../tmp-esm2022/table/services/table-preferences.service.js","../tmp-esm2022/table/components/table/table.component.js","../tmp-esm2022/table/provide.js","../tmp-esm2022/table/index.js","../tmp-esm2022/table/mediusinc-mng-commons-table.js"],"sourcesContent":["import { FilterMatchMode, angularDateFormatHasSeconds, angularDateFormatHasTime, dateToIsoString, fromAngularDateFormatToPrime, fromAngularNumberFormatToFractions } from '@mediusinc/mng-commons/core';\nimport { FilterDescriptor, FilterTypeEnum } from '@mediusinc/mng-commons/filter';\nexport function filterGenerateMatchModeOptions(primeConfig, descriptor, cmpSerCfg) {\n let options = undefined;\n if (descriptor == null || descriptor.filterType === FilterTypeEnum.String) {\n options = [\n { value: FilterMatchMode.Contains, label: primeConfig.getTranslation(FilterMatchMode.Contains) },\n { value: FilterMatchMode.NotContains, label: primeConfig.getTranslation(FilterMatchMode.NotContains) },\n { value: FilterMatchMode.Equals, label: primeConfig.getTranslation(FilterMatchMode.Equals) },\n { value: FilterMatchMode.NotEquals, label: primeConfig.getTranslation(FilterMatchMode.NotEquals) },\n { value: FilterMatchMode.StartsWith, label: primeConfig.getTranslation(FilterMatchMode.StartsWith) },\n { value: FilterMatchMode.EndsWith, label: primeConfig.getTranslation(FilterMatchMode.EndsWith) }\n ];\n }\n else if (descriptor.filterType === FilterTypeEnum.Boolean) {\n options = [{ value: FilterMatchMode.Equals, label: primeConfig.getTranslation(FilterMatchMode.Equals) }];\n }\n else if (descriptor.filterType === FilterTypeEnum.Number) {\n options = [\n { value: FilterMatchMode.Equals, label: primeConfig.getTranslation(FilterMatchMode.Equals) },\n { value: FilterMatchMode.NotEquals, label: primeConfig.getTranslation(FilterMatchMode.NotEquals) },\n { value: FilterMatchMode.LessThan, label: primeConfig.getTranslation(FilterMatchMode.LessThan) },\n { value: FilterMatchMode.LessThanOrEqualTo, label: primeConfig.getTranslation(FilterMatchMode.LessThanOrEqualTo) },\n { value: FilterMatchMode.GreaterThan, label: primeConfig.getTranslation(FilterMatchMode.GreaterThan) },\n { value: FilterMatchMode.GreaterThanOrEqualTo, label: primeConfig.getTranslation(FilterMatchMode.GreaterThanOrEqualTo) },\n { value: FilterMatchMode.Between, label: primeConfig.getTranslation(FilterMatchMode.Between) }\n ];\n }\n else if (descriptor.filterType === FilterTypeEnum.Lookup || descriptor.filterType === FilterTypeEnum.LookupEnum) {\n options = [\n { value: FilterMatchMode.Equals, label: primeConfig.getTranslation(FilterMatchMode.Equals) },\n { value: FilterMatchMode.NotEquals, label: primeConfig.getTranslation(FilterMatchMode.NotEquals) },\n { value: FilterMatchMode.In, label: primeConfig.getTranslation(FilterMatchMode.In) },\n { value: FilterMatchMode.NotIn, label: primeConfig.getTranslation(FilterMatchMode.NotIn) }\n ];\n }\n else if (descriptor.filterType === FilterTypeEnum.Date) {\n if (!descriptor.datePickerShowTime && !descriptor.dateValueNoTime && !cmpSerCfg?.filtersDateOnlyDisabled) {\n options = [\n { value: FilterMatchMode.Equals, label: primeConfig.getTranslation(FilterMatchMode.Equals) },\n { value: FilterMatchMode.NotEquals, label: primeConfig.getTranslation(FilterMatchMode.NotEquals) },\n { value: FilterMatchMode.LessThanOrEqualTo, label: primeConfig.getTranslation(FilterMatchMode.LessThanOrEqualTo) },\n { value: FilterMatchMode.GreaterThanOrEqualTo, label: primeConfig.getTranslation(FilterMatchMode.GreaterThanOrEqualTo) },\n { value: FilterMatchMode.Between, label: primeConfig.getTranslation(FilterMatchMode.Between) }\n ];\n }\n else {\n options = [\n { value: FilterMatchMode.Equals, label: primeConfig.getTranslation(FilterMatchMode.Equals) },\n { value: FilterMatchMode.LessThanOrEqualTo, label: primeConfig.getTranslation(FilterMatchMode.LessThanOrEqualTo) },\n { value: FilterMatchMode.GreaterThanOrEqualTo, label: primeConfig.getTranslation(FilterMatchMode.GreaterThanOrEqualTo) },\n { value: FilterMatchMode.Between, label: primeConfig.getTranslation(FilterMatchMode.Between) }\n ];\n }\n }\n options?.push({ value: FilterMatchMode.Exists, label: primeConfig.getTranslation(FilterMatchMode.Exists) }, { value: FilterMatchMode.DoesNotExist, label: primeConfig.getTranslation(FilterMatchMode.DoesNotExist) });\n if (descriptor?.matchModes) {\n options = descriptor.matchModes.map(mm => ({ value: mm, label: primeConfig.getTranslation(mm) }));\n }\n return options || [];\n}\n/**\n * Gets the default match mode for a filter.\n *\n * @param {FilterDescriptor<any, any>} [descriptor] - The filter descriptor.\n * @param {SelectItem[]} [matchModes=[]] - The available match modes options.\n *\n * @return {FilterMatchModeExtendedType} The default match mode for the filter.\n */\nexport function filterGetDefaultMatchMode(descriptor, matchModes = []) {\n let defaultMatchMode = FilterMatchMode.Equals;\n if (descriptor?.filterType === FilterTypeEnum.String)\n defaultMatchMode = FilterMatchMode.StartsWith;\n // overwrite type default set in descriptor\n if (descriptor?.defaultMatchMode) {\n defaultMatchMode = descriptor.defaultMatchMode;\n }\n // check if default mode exists!\n if (matchModes.length > 0 && !matchModes.some(m => m.value === defaultMatchMode)) {\n defaultMatchMode = matchModes[0].value;\n }\n return defaultMatchMode;\n}\nexport function filterSetMetadataOnChange(filter, matchMode, value, filterType, filterDateCfg) {\n let displayValue = filter?.displayValue ?? value;\n let displayMatchMode = filter?.displayMatchMode ?? matchMode;\n // when equals is used on dates with time, the actual filter will be between, but displayed as equals\n if (filterType === FilterTypeEnum.Date && !filterDateCfg?.valueNoTime) {\n if (matchMode === FilterMatchMode.Between &&\n Array.isArray(value) &&\n value.length === 2 &&\n value.every(v => v instanceof Date || typeof v === 'string' || typeof v === 'number')) {\n if (filterAreDatesEqual(value[0], value[1], filterDateCfg)) {\n displayMatchMode = FilterMatchMode.Equals;\n displayValue = new Date(value[0]);\n }\n }\n else if (matchMode === FilterMatchMode.Equals && !value) {\n matchMode = FilterMatchMode.Between;\n }\n }\n if (filterType === FilterTypeEnum.Date && displayValue) {\n // display value for calendar cannot be string, convert to date\n displayValue = Array.isArray(displayValue)\n ? displayValue.map(v => (!(v instanceof Date) ? new Date(v) : v))\n : displayValue instanceof Date\n ? displayValue\n : new Date(displayValue);\n }\n if (filterType === FilterTypeEnum.Boolean && displayValue != null && typeof displayValue !== 'boolean') {\n displayValue = (typeof displayValue === 'string' && displayValue.toLowerCase() === 'true') || displayValue === 1;\n }\n if (filterType === FilterTypeEnum.Number && displayValue != null && typeof displayValue !== 'number') {\n const numValue = +displayValue;\n if (!isNaN(numValue)) {\n displayValue = numValue;\n }\n }\n return {\n ...filter,\n matchMode,\n value: value,\n displayMatchMode,\n displayValue\n };\n}\nexport function filterSetMetadataOnDisplayChange(filter, displayMatchMode, displayValue, filterType, filterDateCfg) {\n let matchMode = displayMatchMode;\n let value = displayValue;\n if (filterType === FilterTypeEnum.Date) {\n if (!filterDateCfg?.valueNoTime && displayValue !== null) {\n if (displayMatchMode === FilterMatchMode.Equals) {\n if (value instanceof Date || typeof value === 'string' || typeof value === 'number') {\n const fromDate = new Date(value);\n const toDate = new Date(value);\n if (filterDateCfg?.showTime) {\n if (filterDateCfg?.showSeconds) {\n fromDate.setMilliseconds(0);\n toDate.setMilliseconds(999);\n }\n else {\n fromDate.setSeconds(0, 0);\n toDate.setSeconds(59, 999);\n }\n }\n else {\n fromDate.setHours(0, 0, 0, 0);\n toDate.setHours(23, 59, 59, 999);\n }\n value = [fromDate, toDate];\n matchMode = FilterMatchMode.Between;\n }\n else {\n value = null;\n }\n }\n else if (displayMatchMode === FilterMatchMode.Between) {\n if (Array.isArray(value) && value.length === 2 && value.every(i => i instanceof Date || typeof i === 'string' || typeof i === 'number')) {\n const fromDate = new Date(value[0]);\n let toDate = new Date(value[1]);\n if (filterAreDatesEqual(fromDate, toDate, filterDateCfg)) {\n toDate = new Date(fromDate);\n if (filterDateCfg?.showTime) {\n if (filterDateCfg?.showSeconds) {\n toDate.setSeconds(toDate.getSeconds() + 1);\n }\n else {\n toDate.setMinutes(toDate.getMinutes() + 1);\n }\n }\n else {\n toDate.setDate(toDate.getDate() + 1);\n }\n value = [fromDate, toDate];\n matchMode = FilterMatchMode.Between;\n }\n }\n else {\n value = null;\n }\n }\n }\n const convertDateType = filterDateCfg?.valueNoTime ? 'date' : 'date-time';\n const convertDateTimeOpts = {\n utc: filterDateCfg?.valueUtc,\n noMillis: filterDateCfg?.valueNoMillis,\n noTimezone: filterDateCfg?.valueNoTimezone\n };\n value =\n value == null\n ? value\n : Array.isArray(value)\n ? value.filter(i => i != null).map(i => dateToIsoString(i, convertDateType, convertDateTimeOpts))\n : dateToIsoString(value, convertDateType, convertDateTimeOpts);\n }\n if (matchMode === FilterMatchMode.Exists || matchMode === FilterMatchMode.DoesNotExist) {\n value = null;\n }\n return {\n ...filter,\n displayMatchMode: displayMatchMode,\n matchMode: matchMode,\n displayValue: displayValue,\n value: value,\n caseSensitive: filterType === FilterTypeEnum.String ? filter?.caseSensitive : undefined\n };\n}\nexport function filterAreDatesEqual(fromDate, toDate, filterDateCfg) {\n const startDate = dateToIsoString(fromDate);\n const endDate = dateToIsoString(toDate);\n // 2020-11-02T11:12:12.000\n const cmpLength = filterDateCfg?.showTime ? (filterDateCfg?.showSeconds ? 19 : 16) : 10;\n return startDate.substring(0, cmpLength) === endDate.substring(0, cmpLength);\n}\nexport function filterApplySerializationConfigToCmp(config, cmpSerCfg) {\n // set default\n cmpSerCfg.dateTimeInUtc = false;\n cmpSerCfg.dateTimeWithTimezone = true;\n cmpSerCfg.dateTimeWithMillis = true;\n cmpSerCfg.filtersDateOnlyDisabled = false;\n // set customizations\n if (config?.serialization) {\n if (config.serialization.dateTimeInUtc !== undefined)\n cmpSerCfg.dateTimeInUtc = config.serialization.dateTimeInUtc;\n if (config.serialization.dateTimeWithTimezone !== undefined)\n cmpSerCfg.dateTimeWithTimezone = config.serialization.dateTimeWithTimezone;\n if (config.serialization.dateTimeWithMillis !== undefined)\n cmpSerCfg.dateTimeWithMillis = config.serialization.dateTimeWithMillis;\n if (config.serialization.filtersDateOnlyDisabled !== undefined)\n cmpSerCfg.filtersDateOnlyDisabled = config.serialization.filtersDateOnlyDisabled;\n }\n}\nexport function filterAdjustDisplayValueOnMatchModeChange(matchMode, value) {\n if (matchMode == null || matchMode === FilterMatchMode.Exists || matchMode === FilterMatchMode.DoesNotExist) {\n return value; // never change, only change later if something else changes here\n }\n if (matchMode === FilterMatchMode.Between) {\n if (!Array.isArray(value)) {\n return value != null ? [value, value] : [];\n }\n else if (value.length === 0 || value.length === 2) {\n return value;\n }\n else if (value.length === 1) {\n return [value[0], value[0]];\n }\n else {\n return [value[0], value[1]];\n }\n }\n if (matchMode === FilterMatchMode.In || matchMode === FilterMatchMode.NotIn) {\n return Array.isArray(value) ? value : value == null ? [] : [value];\n }\n return Array.isArray(value) && value.length > 0 ? value[0] : value;\n}\nexport function filterGetDateConfig(descriptor, serCfg) {\n if (!descriptor || descriptor.filterType !== FilterTypeEnum.Date) {\n return undefined;\n }\n const showTime = descriptor.datePickerShowTime ?? (descriptor.displayFormatApplyToField && descriptor.displayFormat ? angularDateFormatHasTime(descriptor.displayFormat) : false);\n return {\n valueNoTime: descriptor.dateValueNoTime || (!serCfg?.filtersDateOnlyDisabled && !showTime),\n valueUtc: descriptor.dateValueUtc ?? serCfg?.dateTimeInUtc,\n valueNoTimezone: descriptor.dateValueNoTimezone ?? !serCfg?.dateTimeWithTimezone,\n valueNoMillis: !serCfg?.dateTimeWithMillis,\n format: descriptor.datePickerFormat ?? (descriptor.displayFormatApplyToField && descriptor.displayFormat ? fromAngularDateFormatToPrime(descriptor.displayFormat) : undefined),\n showTime: showTime,\n showSeconds: showTime &&\n (descriptor.datePickerShowSeconds ?? (descriptor.displayFormatApplyToField && descriptor.displayFormat ? angularDateFormatHasSeconds(descriptor.displayFormat) : false))\n };\n}\nexport function filterGetNumberConfig(descriptor) {\n if (!descriptor || descriptor.filterType !== FilterTypeEnum.Number) {\n return undefined;\n }\n const displayCfg = descriptor.displayFormatApplyToField && descriptor.displayFormat ? fromAngularNumberFormatToFractions(descriptor.displayFormat) : undefined;\n return {\n fractionsMin: descriptor.numberMinFractionDigits ?? displayCfg?.fractionsMin,\n fractionsMax: descriptor.numberMaxFractionDigits ?? displayCfg?.fractionsMax\n };\n}\n/**\n * Creates an array of filter descriptors from an array of generic filter properties.\n *\n * @param {FilterGenericProperty[]} properties - The array of filterable properties, their types and options.\n * @param {LookupDataProviderInst<string, any, any, 'field'>} [valueLookup] - The lookup data provider for value suggestions.\n */\nexport function createFilterDescriptorsFromGeneric(properties, valueLookup) {\n return properties.reduce((createdFilterDescriptors, genericFilter) => {\n // when no generic value lookup is provided, lookup enum filters are treated as string filters\n const filterType = genericFilter.type === FilterTypeEnum.LookupEnum && valueLookup === undefined ? FilterTypeEnum.String : genericFilter.type;\n const filterDescriptor = new FilterDescriptor(genericFilter.property).asFilterType(filterType).asGenericFilter();\n if ((genericFilter.type === FilterTypeEnum.String || genericFilter.type === FilterTypeEnum.LookupEnum) && valueLookup) {\n filterDescriptor.withGenericValueProvider(valueLookup);\n }\n if (filterDescriptor && genericFilter.opts !== undefined) {\n switch (genericFilter.type) {\n case FilterTypeEnum.Number:\n filterDescriptor.asNumber(genericFilter.opts);\n break;\n case FilterTypeEnum.Date:\n filterDescriptor.asDate(genericFilter.opts);\n break;\n }\n }\n if (filterDescriptor) {\n createdFilterDescriptors.push(filterDescriptor);\n }\n return createdFilterDescriptors;\n }, []);\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RhYmxlL3NyYy9oZWxwZXJzL2ZpbHRlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsT0FBTyxFQUlILGVBQWUsRUFJZiwyQkFBMkIsRUFDM0Isd0JBQXdCLEVBQ3hCLGVBQWUsRUFDZiw0QkFBNEIsRUFDNUIsa0NBQWtDLEVBQ3JDLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFDLGdCQUFnQixFQUF5QixjQUFjLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQztBQUt0RyxNQUFNLFVBQVUsOEJBQThCLENBQUMsV0FBb0IsRUFBRSxVQUFrRCxFQUFFLFNBQXNDO0lBQzNKLElBQUksT0FBTyxHQUE2QixTQUFTLENBQUM7SUFDbEQsSUFBSSxVQUFVLElBQUksSUFBSSxJQUFJLFVBQVUsQ0FBQyxVQUFVLEtBQUssY0FBYyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3hFLE9BQU8sR0FBRztZQUNOLEVBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFDO1lBQzlGLEVBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxFQUFDO1lBQ3BHLEVBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxFQUFDO1lBQzFGLEVBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxFQUFFLFdBQVcsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLFNBQVMsQ0FBQyxFQUFDO1lBQ2hHLEVBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxVQUFVLEVBQUUsS0FBSyxFQUFF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QUksYUFBYSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUN2RCxRQUFRLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDekIsS0FBSyxjQUFjLENBQUMsTUFBTTtvQkFDdEIsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDOUMsTUFBTTtnQkFDVixLQUFLLGNBQWMsQ0FBQyxJQUFJO29CQUNwQixnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUM1QyxNQUFNO1lBQ2QsQ0FBQztRQUNMLENBQUM7UUFFRCxJQUFJLGdCQUFnQixFQUFFLENBQUM7WUFDbkIsd0JBQXdCLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUNELE9BQU8sd0JBQXdCLENBQUM7SUFDcEMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ1gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U2VsZWN0SXRlbX0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtQcmltZU5HfSBmcm9tICdwcmltZW5nL2NvbmZpZyc7XG5cbmltcG9ydCB7XG4gICAgQ29tbW9uc0ZpbHRlck1ldGFkYXRhLFxuICAgIENvbW1vbnNNb2R1bGVDb25maWcsXG4gICAgQ29tbW9uc1NlcmlhbGl6YXRpb25Db25maWcsXG4gICAgRmlsdGVyTWF0Y2hNb2RlLFxuICAgIEZpbHRlck1hdGNoTW9kZUV4dGVuZGVkVHlwZSxcbiAgICBOdWxsYWJsZSxcbiAgICBTaW5nbGVPckFycmF5VHlwZSxcbiAgICBhbmd1bGFyRGF0ZUZvcm1hdEhhc1NlY29uZHMsXG4gICAgYW5ndWxhckRhdGVGb3JtYXRIYXNUaW1lLFxuICAgIGRhdGVUb0lzb1N0cmluZyxcbiAgICBmcm9tQW5ndWxhckRhdGVGb3JtYXRUb1ByaW1lLFxuICAgIGZyb21Bbmd1bGFyTnVtYmVyRm9ybWF0VG9GcmFjdGlvbnNcbn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcbmltcG9ydCB7RmlsdGVyRGVzY3JpcHRvciwgRmlsdGVyR2VuZXJpY1Byb3BlcnR5LCBGaWx0ZXJUeXBlRW51bX0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9maWx0ZXInO1xuaW1wb3J0IHtMb29rdXBEYXRhUHJvdmlkZXJJbnN0fSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2Zvcm0vYXBpJztcblxuaW1wb3J0IHtGaWx0ZXJEYXRlQ29uZmlnLCBGaWx0ZXJOdW1iZXJDb25maWd9IGZyb20gJy4uL21vZGVscy9maWx0ZXIubW9kZWwnO1xuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyR2VuZXJhdGVNYXRjaE1vZGVPcHRpb25zKHByaW1lQ29uZmlnOiBQcmltZU5HLCBkZXNjcmlwdG9yOiBGaWx0ZXJEZXNjcmlwdG9yPGFueSwgYW55PiB8IHVuZGVmaW5lZCwgY21wU2VyQ2ZnPzogQ29tbW9uc1NlcmlhbGl6YXRpb25Db25maWcpOiBTZWxlY3RJdGVtW10ge1xuICAgIGxldCBvcHRpb25zOiBTZWxlY3RJdGVtW10gfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ7XG4gICAgaWYgKGRlc2NyaXB0b3IgPT0gbnVsbCB8fCBkZXNjcmlwdG9yLmZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLlN0cmluZykge1xuICAgICAgICBvcHRpb25zID0gW1xuICAgICAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuQ29udGFpbnMsIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihGaWx0ZXJNYXRjaE1vZGUuQ29udGFpbnMpfSxcbiAgICAgICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLk5vdENvbnRhaW5zLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLk5vdENvbnRhaW5zKX0sXG4gICAgICAgICAgICB7dmFsdWU6IEZpbHRlck1hdGNoTW9kZS5FcXVhbHMsIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihGaWx0ZXJNYXRjaE1vZGUuRXF1YWxzKX0sXG4gICAgICAgICAgICB7dmFsdWU6IEZpbHRlck1hdGNoTW9kZS5Ob3RFcXVhbHMsIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihGaWx0ZXJNYXRjaE1vZGUuTm90RXF1YWxzKX0sXG4gICAgICAgICAgICB7dmFsdWU6IEZpbHRlck1hdGNoTW9kZS5TdGFydHNXaXRoLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLlN0YXJ0c1dpdGgpfSxcbiAgICAgICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLkVuZHNXaXRoLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLkVuZHNXaXRoKX1cbiAgICAgICAgXTtcbiAgICB9IGVsc2UgaWYgKGRlc2NyaXB0b3IuZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uQm9vbGVhbikge1xuICAgICAgICBvcHRpb25zID0gW3t2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLkVxdWFscywgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5FcXVhbHMpfV07XG4gICAgfSBlbHNlIGlmIChkZXNjcmlwdG9yLmZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLk51bWJlcikge1xuICAgICAgICBvcHRpb25zID0gW1xuICAgICAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuRXF1YWxzLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLkVxdWFscyl9LFxuICAgICAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuTm90RXF1YWxzLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLk5vdEVxdWFscyl9LFxuICAgICAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuTGVzc1RoYW4sIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihGaWx0ZXJNYXRjaE1vZGUuTGVzc1RoYW4pfSxcbiAgICAgICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLkxlc3NUaGFuT3JFcXVhbFRvLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLkxlc3NUaGFuT3JFcXVhbFRvKX0sXG4gICAgICAgICAgICB7dmFsdWU6IEZpbHRlck1hdGNoTW9kZS5HcmVhdGVyVGhhbiwgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5HcmVhdGVyVGhhbil9LFxuICAgICAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuR3JlYXRlclRoYW5PckVxdWFsVG8sIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihGaWx0ZXJNYXRjaE1vZGUuR3JlYXRlclRoYW5PckVxdWFsVG8pfSxcbiAgICAgICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLkJldHdlZW4sIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihGaWx0ZXJNYXRjaE1vZGUuQmV0d2Vlbil9XG4gICAgICAgIF07XG4gICAgfSBlbHNlIGlmIChkZXNjcmlwdG9yLmZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLkxvb2t1cCB8fCBkZXNjcmlwdG9yLmZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLkxvb2t1cEVudW0pIHtcbiAgICAgICAgb3B0aW9ucyA9IFtcbiAgICAgICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLkVxdWFscywgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5FcXVhbHMpfSxcbiAgICAgICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLk5vdEVxdWFscywgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5Ob3RFcXVhbHMpfSxcbiAgICAgICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLkluLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLkluKX0sXG4gICAgICAgICAgICB7dmFsdWU6IEZpbHRlck1hdGNoTW9kZS5Ob3RJbiwgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5Ob3RJbil9XG4gICAgICAgIF07XG4gICAgfSBlbHNlIGlmIChkZXNjcmlwdG9yLmZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLkRhdGUpIHtcbiAgICAgICAgaWYgKCFkZXNjcmlwdG9yLmRhdGVQaWNrZXJTaG93VGltZSAmJiAhZGVzY3JpcHRvci5kYXRlVmFsdWVOb1RpbWUgJiYgIWNtcFNlckNmZz8uZmlsdGVyc0RhdGVPbmx5RGlzYWJsZWQpIHtcbiAgICAgICAgICAgIG9wdGlvbnMgPSBbXG4gICAgICAgICAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuRXF1YWxzLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLkVxdWFscyl9LFxuICAgICAgICAgICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLk5vdEVxdWFscywgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5Ob3RFcXVhbHMpfSxcbiAgICAgICAgICAgICAgICB7dmFsdWU6IEZpbHRlck1hdGNoTW9kZS5MZXNzVGhhbk9yRXF1YWxUbywgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5MZXNzVGhhbk9yRXF1YWxUbyl9LFxuICAgICAgICAgICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLkdyZWF0ZXJUaGFuT3JFcXVhbFRvLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLkdyZWF0ZXJUaGFuT3JFcXVhbFRvKX0sXG4gICAgICAgICAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuQmV0d2VlbiwgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5CZXR3ZWVuKX1cbiAgICAgICAgICAgIF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvcHRpb25zID0gW1xuICAgICAgICAgICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLkVxdWFscywgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5FcXVhbHMpfSxcbiAgICAgICAgICAgICAgICB7dmFsdWU6IEZpbHRlck1hdGNoTW9kZS5MZXNzVGhhbk9yRXF1YWxUbywgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5MZXNzVGhhbk9yRXF1YWxUbyl9LFxuICAgICAgICAgICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLkdyZWF0ZXJUaGFuT3JFcXVhbFRvLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24oRmlsdGVyTWF0Y2hNb2RlLkdyZWF0ZXJUaGFuT3JFcXVhbFRvKX0sXG4gICAgICAgICAgICAgICAge3ZhbHVlOiBGaWx0ZXJNYXRjaE1vZGUuQmV0d2VlbiwgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5CZXR3ZWVuKX1cbiAgICAgICAgICAgIF07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvcHRpb25zPy5wdXNoKFxuICAgICAgICB7dmFsdWU6IEZpbHRlck1hdGNoTW9kZS5FeGlzdHMsIGxhYmVsOiBwcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihGaWx0ZXJNYXRjaE1vZGUuRXhpc3RzKX0sXG4gICAgICAgIHt2YWx1ZTogRmlsdGVyTWF0Y2hNb2RlLkRvZXNOb3RFeGlzdCwgbGFiZWw6IHByaW1lQ29uZmlnLmdldFRyYW5zbGF0aW9uKEZpbHRlck1hdGNoTW9kZS5Eb2VzTm90RXhpc3QpfVxuICAgICk7XG5cbiAgICBpZiAoZGVzY3JpcHRvcj8ubWF0Y2hNb2Rlcykge1xuICAgICAgICBvcHRpb25zID0gZGVzY3JpcHRvci5tYXRjaE1vZGVzLm1hcChtbSA9PiA8U2VsZWN0SXRlbT57dmFsdWU6IG1tLCBsYWJlbDogcHJpbWVDb25maWcuZ2V0VHJhbnNsYXRpb24obW0pfSk7XG4gICAgfVxuICAgIHJldHVybiBvcHRpb25zIHx8IFtdO1xufVxuXG4vKipcbiAqIEdldHMgdGhlIGRlZmF1bHQgbWF0Y2ggbW9kZSBmb3IgYSBmaWx0ZXIuXG4gKlxuICogQHBhcmFtIHtGaWx0ZXJEZXNjcmlwdG9yPGFueSwgYW55Pn0gW2Rlc2NyaXB0b3JdIC0gVGhlIGZpbHRlciBkZXNjcmlwdG9yLlxuICogQHBhcmFtIHtTZWxlY3RJdGVtW119IFttYXRjaE1vZGVzPVtdXSAtIFRoZSBhdmFpbGFibGUgbWF0Y2ggbW9kZXMgb3B0aW9ucy5cbiAqXG4gKiBAcmV0dXJuIHtGaWx0ZXJNYXRjaE1vZGVFeHRlbmRlZFR5cGV9IFRoZSBkZWZhdWx0IG1hdGNoIG1vZGUgZm9yIHRoZSBmaWx0ZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJHZXREZWZhdWx0TWF0Y2hNb2RlKGRlc2NyaXB0b3I/OiBGaWx0ZXJEZXNjcmlwdG9yPGFueSwgYW55PiwgbWF0Y2hNb2RlczogU2VsZWN0SXRlbVtdID0gW10pOiBGaWx0ZXJNYXRjaE1vZGVFeHRlbmRlZFR5cGUge1xuICAgIGxldCBkZWZhdWx0TWF0Y2hNb2RlOiBGaWx0ZXJNYXRjaE1vZGVFeHRlbmRlZFR5cGUgPSBGaWx0ZXJNYXRjaE1vZGUuRXF1YWxzO1xuICAgIGlmIChkZXNjcmlwdG9yPy5maWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlRW51bS5TdHJpbmcpIGRlZmF1bHRNYXRjaE1vZGUgPSBGaWx0ZXJNYXRjaE1vZGUuU3RhcnRzV2l0aDtcblxuICAgIC8vIG92ZXJ3cml0ZSB0eXBlIGRlZmF1bHQgc2V0IGluIGRlc2NyaXB0b3JcbiAgICBpZiAoZGVzY3JpcHRvcj8uZGVmYXVsdE1hdGNoTW9kZSkge1xuICAgICAgICBkZWZhdWx0TWF0Y2hNb2RlID0gZGVzY3JpcHRvci5kZWZhdWx0TWF0Y2hNb2RlO1xuICAgIH1cblxuICAgIC8vIGNoZWNrIGlmIGRlZmF1bHQgbW9kZSBleGlzdHMhXG4gICAgaWYgKG1hdGNoTW9kZXMubGVuZ3RoID4gMCAmJiAhbWF0Y2hNb2Rlcy5zb21lKG0gPT4gbS52YWx1ZSA9PT0gZGVmYXVsdE1hdGNoTW9kZSkpIHtcbiAgICAgICAgZGVmYXVsdE1hdGNoTW9kZSA9IG1hdGNoTW9kZXNbMF0udmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRlZmF1bHRNYXRjaE1vZGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJTZXRNZXRhZGF0YU9uQ2hhbmdlKFxuICAgIGZpbHRlcjogQ29tbW9uc0ZpbHRlck1ldGFkYXRhLFxuICAgIG1hdGNoTW9kZT86IEZpbHRlck1hdGNoTW9kZUV4dGVuZGVkVHlwZSxcbiAgICB2YWx1ZT86IGFueSxcbiAgICBmaWx0ZXJUeXBlPzogRmlsdGVyVHlwZUVudW0sXG4gICAgZmlsdGVyRGF0ZUNmZz86IEZpbHRlckRhdGVDb25maWdcbik6IENvbW1vbnNGaWx0ZXJNZXRhZGF0YSB7XG4gICAgbGV0IGRpc3BsYXlWYWx1ZSA9IGZpbHRlcj8uZGlzcGxheVZhbHVlID8/IHZhbHVlO1xuICAgIGxldCBkaXNwbGF5TWF0Y2hNb2RlID0gZmlsdGVyPy5kaXNwbGF5TWF0Y2hNb2RlID8/IG1hdGNoTW9kZTtcblxuICAgIC8vIHdoZW4gZXF1YWxzIGlzIHVzZWQgb24gZGF0ZXMgd2l0aCB0aW1lLCB0aGUgYWN0dWFsIGZpbHRlciB3aWxsIGJlIGJldHdlZW4sIGJ1dCBkaXNwbGF5ZWQgYXMgZXF1YWxzXG4gICAgaWYgKGZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLkRhdGUgJiYgIWZpbHRlckRhdGVDZmc/LnZhbHVlTm9UaW1lKSB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIG1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkJldHdlZW4gJiZcbiAgICAgICAgICAgIEFycmF5LmlzQXJyYXkodmFsdWUpICYmXG4gICAgICAgICAgICB2YWx1ZS5sZW5ndGggPT09IDIgJiZcbiAgICAgICAgICAgIHZhbHVlLmV2ZXJ5KHYgPT4gdiBpbnN0YW5jZW9mIERhdGUgfHwgdHlwZW9mIHYgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2ID09PSAnbnVtYmVyJylcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBpZiAoZmlsdGVyQXJlRGF0ZXNFcXVhbCh2YWx1ZVswXSwgdmFsdWVbMV0sIGZpbHRlckRhdGVDZmcpKSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheU1hdGNoTW9kZSA9IEZpbHRlck1hdGNoTW9kZS5FcXVhbHM7XG4gICAgICAgICAgICAgICAgZGlzcGxheVZhbHVlID0gbmV3IERhdGUodmFsdWVbMF0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkVxdWFscyAmJiAhdmFsdWUpIHtcbiAgICAgICAgICAgIG1hdGNoTW9kZSA9IEZpbHRlck1hdGNoTW9kZS5CZXR3ZWVuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLkRhdGUgJiYgZGlzcGxheVZhbHVlKSB7XG4gICAgICAgIC8vIGRpc3BsYXkgdmFsdWUgZm9yIGNhbGVuZGFyIGNhbm5vdCBiZSBzdHJpbmcsIGNvbnZlcnQgdG8gZGF0ZVxuICAgICAgICBkaXNwbGF5VmFsdWUgPSBBcnJheS5pc0FycmF5KGRpc3BsYXlWYWx1ZSlcbiAgICAgICAgICAgID8gZGlzcGxheVZhbHVlLm1hcCh2ID0+ICghKHYgaW5zdGFuY2VvZiBEYXRlKSA/IG5ldyBEYXRlKHYpIDogdikpXG4gICAgICAgICAgICA6IGRpc3BsYXlWYWx1ZSBpbnN0YW5jZW9mIERhdGVcbiAgICAgICAgICAgICAgPyBkaXNwbGF5VmFsdWVcbiAgICAgICAgICAgICAgOiBuZXcgRGF0ZShkaXNwbGF5VmFsdWUpO1xuICAgIH1cbiAgICBpZiAoZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uQm9vbGVhbiAmJiBkaXNwbGF5VmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgZGlzcGxheVZhbHVlICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgZGlzcGxheVZhbHVlID0gKHR5cGVvZiBkaXNwbGF5VmFsdWUgPT09ICdzdHJpbmcnICYmIGRpc3BsYXlWYWx1ZS50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScpIHx8IGRpc3BsYXlWYWx1ZSA9PT0gMTtcbiAgICB9XG4gICAgaWYgKGZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLk51bWJlciAmJiBkaXNwbGF5VmFsdWUgIT0gbnVsbCAmJiB0eXBlb2YgZGlzcGxheVZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgICAgICBjb25zdCBudW1WYWx1ZSA9ICtkaXNwbGF5VmFsdWU7XG4gICAgICAgIGlmICghaXNOYU4obnVtVmFsdWUpKSB7XG4gICAgICAgICAgICBkaXNwbGF5VmFsdWUgPSBudW1WYWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgbWF0Y2hNb2RlLFxuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGRpc3BsYXlNYXRjaE1vZGUsXG4gICAgICAgIGRpc3BsYXlWYWx1ZVxuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJTZXRNZXRhZGF0YU9uRGlzcGxheUNoYW5nZShcbiAgICBmaWx0ZXI6IENvbW1vbnNGaWx0ZXJNZXRhZGF0YSB8IHVuZGVmaW5lZCxcbiAgICBkaXNwbGF5TWF0Y2hNb2RlOiBGaWx0ZXJNYXRjaE1vZGVFeHRlbmRlZFR5cGUsXG4gICAgZGlzcGxheVZhbHVlOiBhbnksXG4gICAgZmlsdGVyVHlwZT86IEZpbHRlclR5cGVFbnVtLFxuICAgIGZpbHRlckRhdGVDZmc/OiBGaWx0ZXJEYXRlQ29uZmlnXG4pIHtcbiAgICBsZXQgbWF0Y2hNb2RlID0gZGlzcGxheU1hdGNoTW9kZTtcbiAgICBsZXQgdmFsdWU6IFNpbmdsZU9yQXJyYXlUeXBlPE51bGxhYmxlPERhdGUgfCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPj4gPSBkaXNwbGF5VmFsdWU7XG5cbiAgICBpZiAoZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uRGF0ZSkge1xuICAgICAgICBpZiAoIWZpbHRlckRhdGVDZmc/LnZhbHVlTm9UaW1lICYmIGRpc3BsYXlWYWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKGRpc3BsYXlNYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5FcXVhbHMpIHtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmcm9tRGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG9EYXRlID0gbmV3IERhdGUodmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJEYXRlQ2ZnPy5zaG93VGltZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlckRhdGVDZmc/LnNob3dTZWNvbmRzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbURhdGUuc2V0TWlsbGlzZWNvbmRzKDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvRGF0ZS5zZXRNaWxsaXNlY29uZHMoOTk5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbURhdGUuc2V0U2Vjb25kcygwLCAwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b0RhdGUuc2V0U2Vjb25kcyg1OSwgOTk5KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb21EYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9EYXRlLnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSk7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IFtmcm9tRGF0ZSwgdG9EYXRlXTtcbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hNb2RlID0gRmlsdGVyTWF0Y2hNb2RlLkJldHdlZW47XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGlzcGxheU1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkJldHdlZW4pIHtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgdmFsdWUubGVuZ3RoID09PSAyICYmIHZhbHVlLmV2ZXJ5KGkgPT4gaSBpbnN0YW5jZW9mIERhdGUgfHwgdHlwZW9mIGkgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBpID09PSAnbnVtYmVyJykpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZnJvbURhdGUgPSBuZXcgRGF0ZSh2YWx1ZVswXSBhcyBEYXRlIHwgc3RyaW5nIHwgbnVtYmVyKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRvRGF0ZSA9IG5ldyBEYXRlKHZhbHVlWzFdIGFzIERhdGUgfCBzdHJpbmcgfCBudW1iZXIpO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJBcmVEYXRlc0VxdWFsKGZyb21EYXRlLCB0b0RhdGUsIGZpbHRlckRhdGVDZmcpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b0RhdGUgPSBuZXcgRGF0ZShmcm9tRGF0ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyRGF0ZUNmZz8uc2hvd1RpbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyRGF0ZUNmZz8uc2hvd1NlY29uZHMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9EYXRlLnNldFNlY29uZHModG9EYXRlLmdldFNlY29uZHMoKSArIDEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvRGF0ZS5zZXRNaW51dGVzKHRvRGF0ZS5nZXRNaW51dGVzKCkgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvRGF0ZS5zZXREYXRlKHRvRGF0ZS5nZXREYXRlKCkgKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBbZnJvbURhdGUsIHRvRGF0ZV07XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXRjaE1vZGUgPSBGaWx0ZXJNYXRjaE1vZGUuQmV0d2VlbjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjb252ZXJ0RGF0ZVR5cGUgPSBmaWx0ZXJEYXRlQ2ZnPy52YWx1ZU5vVGltZSA/ICdkYXRlJyA6ICdkYXRlLXRpbWUnO1xuICAgICAgICBjb25zdCBjb252ZXJ0RGF0ZVRpbWVPcHRzID0ge1xuICAgICAgICAgICAgdXRjOiBmaWx0ZXJEYXRlQ2ZnPy52YWx1ZVV0YyxcbiAgICAgICAgICAgIG5vTWlsbGlzOiBmaWx0ZXJEYXRlQ2ZnPy52YWx1ZU5vTWlsbGlzLFxuICAgICAgICAgICAgbm9UaW1lem9uZTogZmlsdGVyRGF0ZUNmZz8udmFsdWVOb1RpbWV6b25lXG4gICAgICAgIH07XG5cbiAgICAgICAgdmFsdWUgPVxuICAgICAgICAgICAgdmFsdWUgPT0gbnVsbFxuICAgICAgICAgICAgICAgID8gdmFsdWVcbiAgICAgICAgICAgICAgICA6IEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgICAgICAgICAgICAgICA/IHZhbHVlLmZpbHRlcihpID0+IGkgIT0gbnVsbCkubWFwKGkgPT4gZGF0ZVRvSXNvU3RyaW5nKGksIGNvbnZlcnREYXRlVHlwZSwgY29udmVydERhdGVUaW1lT3B0cykpXG4gICAgICAgICAgICAgICAgICA6IGRhdGVUb0lzb1N0cmluZyh2YWx1ZSwgY29udmVydERhdGVUeXBlLCBjb252ZXJ0RGF0ZVRpbWVPcHRzKTtcbiAgICB9XG4gICAgaWYgKG1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkV4aXN0cyB8fCBtYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5Eb2VzTm90RXhpc3QpIHtcbiAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIC4uLmZpbHRlcixcbiAgICAgICAgZGlzcGxheU1hdGNoTW9kZTogZGlzcGxheU1hdGNoTW9kZSxcbiAgICAgICAgbWF0Y2hNb2RlOiBtYXRjaE1vZGUsXG4gICAgICAgIGRpc3BsYXlWYWx1ZTogZGlzcGxheVZhbHVlLFxuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIGNhc2VTZW5zaXRpdmU6IGZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLlN0cmluZyA/IGZpbHRlcj8uY2FzZVNlbnNpdGl2ZSA6IHVuZGVmaW5lZFxuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJBcmVEYXRlc0VxdWFsKGZyb21EYXRlOiBEYXRlIHwgc3RyaW5nIHwgbnVtYmVyLCB0b0RhdGU6IERhdGUgfCBzdHJpbmcgfCBudW1iZXIsIGZpbHRlckRhdGVDZmc/OiBGaWx0ZXJEYXRlQ29uZmlnKSB7XG4gICAgY29uc3Qgc3RhcnREYXRlID0gZGF0ZVRvSXNvU3RyaW5nKGZyb21EYXRlKTtcbiAgICBjb25zdCBlbmREYXRlID0gZGF0ZVRvSXNvU3RyaW5nKHRvRGF0ZSk7XG5cbiAgICAvLyAyMDIwLTExLTAyVDExOjEyOjEyLjAwMFxuICAgIGNvbnN0IGNtcExlbmd0aCA9IGZpbHRlckRhdGVDZmc/LnNob3dUaW1lID8gKGZpbHRlckRhdGVDZmc/LnNob3dTZWNvbmRzID8gMTkgOiAxNikgOiAxMDtcblxuICAgIHJldHVybiBzdGFydERhdGUuc3Vic3RyaW5nKDAsIGNtcExlbmd0aCkgPT09IGVuZERhdGUuc3Vic3RyaW5nKDAsIGNtcExlbmd0aCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJBcHBseVNlcmlhbGl6YXRpb25Db25maWdUb0NtcChjb25maWc6IENvbW1vbnNNb2R1bGVDb25maWcgfCBudWxsLCBjbXBTZXJDZmc6IENvbW1vbnNTZXJpYWxpemF0aW9uQ29uZmlnKSB7XG4gICAgLy8gc2V0IGRlZmF1bHRcbiAgICBjbXBTZXJDZmcuZGF0ZVRpbWVJblV0YyA9IGZhbHNlO1xuICAgIGNtcFNlckNmZy5kYXRlVGltZVdpdGhUaW1lem9uZSA9IHRydWU7XG4gICAgY21wU2VyQ2ZnLmRhdGVUaW1lV2l0aE1pbGxpcyA9IHRydWU7XG4gICAgY21wU2VyQ2ZnLmZpbHRlcnNEYXRlT25seURpc2FibGVkID0gZmFsc2U7XG4gICAgLy8gc2V0IGN1c3RvbWl6YXRpb25zXG4gICAgaWYgKGNvbmZpZz8uc2VyaWFsaXphdGlvbikge1xuICAgICAgICBpZiAoY29uZmlnLnNlcmlhbGl6YXRpb24uZGF0ZVRpbWVJblV0YyAhPT0gdW5kZWZpbmVkKSBjbXBTZXJDZmcuZGF0ZVRpbWVJblV0YyA9IGNvbmZpZy5zZXJpYWxpemF0aW9uLmRhdGVUaW1lSW5VdGM7XG4gICAgICAgIGlmIChjb25maWcuc2VyaWFsaXphdGlvbi5kYXRlVGltZVdpdGhUaW1lem9uZSAhPT0gdW5kZWZpbmVkKSBjbXBTZXJDZmcuZGF0ZVRpbWVXaXRoVGltZXpvbmUgPSBjb25maWcuc2VyaWFsaXphdGlvbi5kYXRlVGltZVdpdGhUaW1lem9uZTtcbiAgICAgICAgaWYgKGNvbmZpZy5zZXJpYWxpemF0aW9uLmRhdGVUaW1lV2l0aE1pbGxpcyAhPT0gdW5kZWZpbmVkKSBjbXBTZXJDZmcuZGF0ZVRpbWVXaXRoTWlsbGlzID0gY29uZmlnLnNlcmlhbGl6YXRpb24uZGF0ZVRpbWVXaXRoTWlsbGlzO1xuICAgICAgICBpZiAoY29uZmlnLnNlcmlhbGl6YXRpb24uZmlsdGVyc0RhdGVPbmx5RGlzYWJsZWQgIT09IHVuZGVmaW5lZCkgY21wU2VyQ2ZnLmZpbHRlcnNEYXRlT25seURpc2FibGVkID0gY29uZmlnLnNlcmlhbGl6YXRpb24uZmlsdGVyc0RhdGVPbmx5RGlzYWJsZWQ7XG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyQWRqdXN0RGlzcGxheVZhbHVlT25NYXRjaE1vZGVDaGFuZ2UobWF0Y2hNb2RlPzogRmlsdGVyTWF0Y2hNb2RlRXh0ZW5kZWRUeXBlLCB2YWx1ZT86IGFueSk6IGFueSB7XG4gICAgaWYgKG1hdGNoTW9kZSA9PSBudWxsIHx8IG1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkV4aXN0cyB8fCBtYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5Eb2VzTm90RXhpc3QpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlOyAvLyBuZXZlciBjaGFuZ2UsIG9ubHkgY2hhbmdlIGxhdGVyIGlmIHNvbWV0aGluZyBlbHNlIGNoYW5nZXMgaGVyZVxuICAgIH1cbiAgICBpZiAobWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuQmV0d2Vlbikge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWUgIT0gbnVsbCA/IFt2YWx1ZSwgdmFsdWVdIDogW107XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUubGVuZ3RoID09PSAwIHx8IHZhbHVlLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIFt2YWx1ZVswXSwgdmFsdWVbMF1dO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFt2YWx1ZVswXSwgdmFsdWVbMV1dO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChtYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5JbiB8fCBtYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5Ob3RJbikge1xuICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZSA6IHZhbHVlID09IG51bGwgPyBbXSA6IFt2YWx1ZV07XG4gICAgfVxuICAgIHJldHVybiBBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPiAwID8gdmFsdWVbMF0gOiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlckdldERhdGVDb25maWcoZGVzY3JpcHRvcj86IEZpbHRlckRlc2NyaXB0b3I8YW55LCBhbnk+LCBzZXJDZmc/OiBDb21tb25zU2VyaWFsaXphdGlvbkNvbmZpZyk6IEZpbHRlckRhdGVDb25maWcgfCB1bmRlZmluZWQge1xuICAgIGlmICghZGVzY3JpcHRvciB8fCBkZXNjcmlwdG9yLmZpbHRlclR5cGUgIT09IEZpbHRlclR5cGVFbnVtLkRhdGUpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBzaG93VGltZSA9XG4gICAgICAgIGRlc2NyaXB0b3IuZGF0ZVBpY2tlclNob3dUaW1lID8/IChkZXNjcmlwdG9yLmRpc3BsYXlGb3JtYXRBcHBseVRvRmllbGQgJiYgZGVzY3JpcHRvci5kaXNwbGF5Rm9ybWF0ID8gYW5ndWxhckRhdGVGb3JtYXRIYXNUaW1lKGRlc2NyaXB0b3IuZGlzcGxheUZvcm1hdCkgOiBmYWxzZSk7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgdmFsdWVOb1RpbWU6IGRlc2NyaXB0b3IuZGF0ZVZhbHVlTm9UaW1lIHx8ICghc2VyQ2ZnPy5maWx0ZXJzRGF0ZU9ubHlEaXNhYmxlZCAmJiAhc2hvd1RpbWUpLFxuICAgICAgICB2YWx1ZVV0YzogZGVzY3JpcHRvci5kYXRlVmFsdWVVdGMgPz8gc2VyQ2ZnPy5kYXRlVGltZUluVXRjLFxuICAgICAgICB2YWx1ZU5vVGltZXpvbmU6IGRlc2NyaXB0b3IuZGF0ZVZhbHVlTm9UaW1lem9uZSA/PyAhc2VyQ2ZnPy5kYXRlVGltZVdpdGhUaW1lem9uZSxcbiAgICAgICAgdmFsdWVOb01pbGxpczogIXNlckNmZz8uZGF0ZVRpbWVXaXRoTWlsbGlzLFxuICAgICAgICBmb3JtYXQ6XG4gICAgICAgICAgICBkZXNjcmlwdG9yLmRhdGVQaWNrZXJGb3JtYXQgPz8gKGRlc2NyaXB0b3IuZGlzcGxheUZvcm1hdEFwcGx5VG9GaWVsZCAmJiBkZXNjcmlwdG9yLmRpc3BsYXlGb3JtYXQgPyBmcm9tQW5ndWxhckRhdGVGb3JtYXRUb1ByaW1lKGRlc2NyaXB0b3IuZGlzcGxheUZvcm1hdCkgOiB1bmRlZmluZWQpLFxuICAgICAgICBzaG93VGltZTogc2hvd1RpbWUsXG4gICAgICAgIHNob3dTZWNvbmRzOlxuICAgICAgICAgICAgc2hvd1RpbWUgJiZcbiAgICAgICAgICAgIChkZXNjcmlwdG9yLmRhdGVQaWNrZXJTaG93U2Vjb25kcyA/PyAoZGVzY3JpcHRvci5kaXNwbGF5Rm9ybWF0QXBwbHlUb0ZpZWxkICYmIGRlc2NyaXB0b3IuZGlzcGxheUZvcm1hdCA/IGFuZ3VsYXJEYXRlRm9ybWF0SGFzU2Vjb25kcyhkZXNjcmlwdG9yLmRpc3BsYXlGb3JtYXQpIDogZmFsc2UpKVxuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJHZXROdW1iZXJDb25maWcoZGVzY3JpcHRvcj86IEZpbHRlckRlc2NyaXB0b3I8YW55LCBhbnk+KTogRmlsdGVyTnVtYmVyQ29uZmlnIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIWRlc2NyaXB0b3IgfHwgZGVzY3JpcHRvci5maWx0ZXJUeXBlICE9PSBGaWx0ZXJUeXBlRW51bS5OdW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBkaXNwbGF5Q2ZnID0gZGVzY3JpcHRvci5kaXNwbGF5Rm9ybWF0QXBwbHlUb0ZpZWxkICYmIGRlc2NyaXB0b3IuZGlzcGxheUZvcm1hdCA/IGZyb21Bbmd1bGFyTnVtYmVyRm9ybWF0VG9GcmFjdGlvbnMoZGVzY3JpcHRvci5kaXNwbGF5Rm9ybWF0KSA6IHVuZGVmaW5lZDtcbiAgICByZXR1cm4ge1xuICAgICAgICBmcmFjdGlvbnNNaW46IGRlc2NyaXB0b3IubnVtYmVyTWluRnJhY3Rpb25EaWdpdHMgPz8gZGlzcGxheUNmZz8uZnJhY3Rpb25zTWluLFxuICAgICAgICBmcmFjdGlvbnNNYXg6IGRlc2NyaXB0b3IubnVtYmVyTWF4RnJhY3Rpb25EaWdpdHMgPz8gZGlzcGxheUNmZz8uZnJhY3Rpb25zTWF4XG4gICAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IG9mIGZpbHRlciBkZXNjcmlwdG9ycyBmcm9tIGFuIGFycmF5IG9mIGdlbmVyaWMgZmlsdGVyIHByb3BlcnRpZXMuXG4gKlxuICogQHBhcmFtIHtGaWx0ZXJHZW5lcmljUHJvcGVydHlbXX0gcHJvcGVydGllcyAtIFRoZSBhcnJheSBvZiBmaWx0ZXJhYmxlIHByb3BlcnRpZXMsIHRoZWlyIHR5cGVzIGFuZCBvcHRpb25zLlxuICogQHBhcmFtIHtMb29rdXBEYXRhUHJvdmlkZXJJbnN0PHN0cmluZywgYW55LCBhbnksICdmaWVsZCc+fSBbdmFsdWVMb29rdXBdIC0gVGhlIGxvb2t1cCBkYXRhIHByb3ZpZGVyIGZvciB2YWx1ZSBzdWdnZXN0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUZpbHRlckRlc2NyaXB0b3JzRnJvbUdlbmVyaWMoXG4gICAgcHJvcGVydGllczogRmlsdGVyR2VuZXJpY1Byb3BlcnR5W10sXG4gICAgdmFsdWVMb29rdXA/OiBMb29rdXBEYXRhUHJvdmlkZXJJbnN0PHN0cmluZywgYW55LCBhbnksICdmaWVsZCc+XG4pOiBGaWx0ZXJEZXNjcmlwdG9yPGFueSwgYW55PltdIHwgW10ge1xuICAgIHJldHVybiBwcm9wZXJ0aWVzLnJlZHVjZTxGaWx0ZXJEZXNjcmlwdG9yPGFueSwgYW55PltdPigoY3JlYXRlZEZpbHRlckRlc2NyaXB0b3JzLCBnZW5lcmljRmlsdGVyKSA9PiB7XG4gICAgICAgIC8vIHdoZW4gbm8gZ2VuZXJpYyB2YWx1ZSBsb29rdXAgaXMgcHJvdmlkZWQsIGxvb2t1cCBlbnVtIGZpbHRlcnMgYXJlIHRyZWF0ZWQgYXMgc3RyaW5nIGZpbHRlcnNcbiAgICAgICAgY29uc3QgZmlsdGVyVHlwZSA9IGdlbmVyaWNGaWx0ZXIudHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uTG9va3VwRW51bSAmJiB2YWx1ZUxvb2t1cCA9PT0gdW5kZWZpbmVkID8gRmlsdGVyVHlwZUVudW0uU3RyaW5nIDogZ2VuZXJpY0ZpbHRlci50eXBlO1xuICAgICAgICBjb25zdCBmaWx0ZXJEZXNjcmlwdG9yID0gbmV3IEZpbHRlckRlc2NyaXB0b3IoZ2VuZXJpY0ZpbHRlci5wcm9wZXJ0eSkuYXNGaWx0ZXJUeXBlKGZpbHRlclR5cGUpLmFzR2VuZXJpY0ZpbHRlcigpO1xuICAgICAgICBpZiAoKGdlbmVyaWNGaWx0ZXIudHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uU3RyaW5nIHx8IGdlbmVyaWNGaWx0ZXIudHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uTG9va3VwRW51bSkgJiYgdmFsdWVMb29rdXApIHtcbiAgICAgICAgICAgIGZpbHRlckRlc2NyaXB0b3Iud2l0aEdlbmVyaWNWYWx1ZVByb3ZpZGVyKHZhbHVlTG9va3VwKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZmlsdGVyRGVzY3JpcHRvciAmJiBnZW5lcmljRmlsdGVyLm9wdHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgc3dpdGNoIChnZW5lcmljRmlsdGVyLnR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclR5cGVFbnVtLk51bWJlcjpcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyRGVzY3JpcHRvci5hc051bWJlcihnZW5lcmljRmlsdGVyLm9wdHMpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEZpbHRlclR5cGVFbnVtLkRhdGU6XG4gICAgICAgICAgICAgICAgICAgIGZpbHRlckRlc2NyaXB0b3IuYXNEYXRlKGdlbmVyaWNGaWx0ZXIub3B0cyk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGZpbHRlckRlc2NyaXB0b3IpIHtcbiAgICAgICAgICAgIGNyZWF0ZWRGaWx0ZXJEZXNjcmlwdG9ycy5wdXNoKGZpbHRlckRlc2NyaXB0b3IpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGVkRmlsdGVyRGVzY3JpcHRvcnM7XG4gICAgfSwgW10pO1xufVxuIl19","export function tableCreateFilterMeta(paramsWithDefaults) {\n const primeFilterMeta = {};\n // if any filter is present, no default filters should be applied!\n if (paramsWithDefaults?.filters) {\n Object.entries(paramsWithDefaults.filters).forEach(([key, value]) => {\n primeFilterMeta[key] = {\n value: value?.value,\n matchMode: value?.matchMode,\n caseSensitive: value?.caseSensitive\n };\n });\n }\n return primeFilterMeta;\n}\nexport function tableCreateSortMeta(paramsWithDefaults) {\n if (paramsWithDefaults?.sort !== undefined && Array.isArray(paramsWithDefaults?.sort) && paramsWithDefaults?.sort.length > 0) {\n return paramsWithDefaults?.sort.map(s => ({\n field: s.property,\n order: s.ascending ? 1 : -1\n }));\n }\n return undefined;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90YWJsZS9zcmMvaGVscGVycy90YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFJQSxNQUFNLFVBQVUscUJBQXFCLENBQUMsa0JBQW1DO0lBQ3JFLE1BQU0sZUFBZSxHQUF5QyxFQUFFLENBQUM7SUFDakUsa0VBQWtFO0lBQ2xFLElBQUksa0JBQWtCLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDOUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ2hFLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRztnQkFDbkIsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLO2dCQUNuQixTQUFTLEVBQUUsS0FBSyxFQUFFLFNBQVM7Z0JBQzNCLGFBQWEsRUFBRSxLQUFLLEVBQUUsYUFBYTthQUN0QyxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBQ0QsT0FBTyxlQUFlLENBQUM7QUFDM0IsQ0FBQztBQUVELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxrQkFBbUM7SUFDbkUsSUFBSSxrQkFBa0IsRUFBRSxJQUFJLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLElBQUksa0JBQWtCLEVBQUUsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUMzSCxPQUFPLGtCQUFrQixFQUFFLElBQUksQ0FBQyxHQUFHLENBQy9CLENBQUMsQ0FBQyxFQUFFLENBQ0EsQ0FBVTtZQUNOLEtBQUssRUFBRSxDQUFDLENBQUMsUUFBUTtZQUNqQixLQUFLLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDOUIsQ0FBQSxDQUNSLENBQUM7SUFDTixDQUFDO0lBRUQsT0FBTyxTQUFTLENBQUM7QUFDckIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U29ydE1ldGF9IGZyb20gJ3ByaW1lbmcvYXBpJztcblxuaW1wb3J0IHtDb21tb25zRmlsdGVyTWV0YWRhdGEsIERhdGFMaXN0UGFyYW1zfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuXG5leHBvcnQgZnVuY3Rpb24gdGFibGVDcmVhdGVGaWx0ZXJNZXRhKHBhcmFtc1dpdGhEZWZhdWx0cz86IERhdGFMaXN0UGFyYW1zKSB7XG4gICAgY29uc3QgcHJpbWVGaWx0ZXJNZXRhOiB7W3M6IHN0cmluZ106IENvbW1vbnNGaWx0ZXJNZXRhZGF0YX0gPSB7fTtcbiAgICAvLyBpZiBhbnkgZmlsdGVyIGlzIHByZXNlbnQsIG5vIGRlZmF1bHQgZmlsdGVycyBzaG91bGQgYmUgYXBwbGllZCFcbiAgICBpZiAocGFyYW1zV2l0aERlZmF1bHRzPy5maWx0ZXJzKSB7XG4gICAgICAgIE9iamVjdC5lbnRyaWVzKHBhcmFtc1dpdGhEZWZhdWx0cy5maWx0ZXJzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgICAgIHByaW1lRmlsdGVyTWV0YVtrZXldID0ge1xuICAgICAgICAgICAgICAgIHZhbHVlOiB2YWx1ZT8udmFsdWUsXG4gICAgICAgICAgICAgICAgbWF0Y2hNb2RlOiB2YWx1ZT8ubWF0Y2hNb2RlLFxuICAgICAgICAgICAgICAgIGNhc2VTZW5zaXRpdmU6IHZhbHVlPy5jYXNlU2Vuc2l0aXZlXG4gICAgICAgICAgICB9O1xuICAgICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHByaW1lRmlsdGVyTWV0YTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHRhYmxlQ3JlYXRlU29ydE1ldGEocGFyYW1zV2l0aERlZmF1bHRzPzogRGF0YUxpc3RQYXJhbXMpOiBTb3J0TWV0YVtdIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAocGFyYW1zV2l0aERlZmF1bHRzPy5zb3J0ICE9PSB1bmRlZmluZWQgJiYgQXJyYXkuaXNBcnJheShwYXJhbXNXaXRoRGVmYXVsdHM/LnNvcnQpICYmIHBhcmFtc1dpdGhEZWZhdWx0cz8uc29ydC5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBwYXJhbXNXaXRoRGVmYXVsdHM/LnNvcnQubWFwKFxuICAgICAgICAgICAgcyA9PlxuICAgICAgICAgICAgICAgIDxTb3J0TWV0YT57XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkOiBzLnByb3BlcnR5LFxuICAgICAgICAgICAgICAgICAgICBvcmRlcjogcy5hc2NlbmRpbmcgPyAxIDogLTFcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cbiJdfQ==","import { InjectionToken } from '@angular/core';\nexport const COMMONS_TABLE_FEATURE_CONFIG_IT = new InjectionToken('COMMONS_TABLE_FEATURE_CONFIG');\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZmVhdHVyZS1jb25maWcudG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90YWJsZS9zcmMvc2VydmljZXMvdGFibGUtZmVhdHVyZS1jb25maWcudG9rZW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQVM3QyxNQUFNLENBQUMsTUFBTSwrQkFBK0IsR0FBRyxJQUFJLGNBQWMsQ0FBcUIsOEJBQThCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0aW9uVG9rZW59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge0ZpbHRlckRpc3BsYXlUeXBlRW51bX0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9maWx0ZXInO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlRmVhdHVyZUNvbmZpZyB7XG4gICAgZmlsdGVyRGlzcGxheVR5cGU/OiBGaWx0ZXJEaXNwbGF5VHlwZUVudW07XG4gICAgc2VhcmNoTGltaXRNYXhXb3Jkcz86IG51bWJlciB8IG51bGw7XG59XG5cbmV4cG9ydCBjb25zdCBDT01NT05TX1RBQkxFX0ZFQVRVUkVfQ09ORklHX0lUID0gbmV3IEluamVjdGlvblRva2VuPFRhYmxlRmVhdHVyZUNvbmZpZz4oJ0NPTU1PTlNfVEFCTEVfRkVBVFVSRV9DT05GSUcnKTtcbiJdfQ==","import { Injectable, Injector, computed, inject, signal } from '@angular/core';\nimport { takeUntilDestroyed, toObservable, toSignal } from '@angular/core/rxjs-interop';\nimport { PrimeNG } from 'primeng/config';\nimport { combineLatest, of, switchMap } from 'rxjs';\nimport { COMMONS_MODULE_CONFIG_IT, toObservable as commonsToObservable, effectWithDeps } from '@mediusinc/mng-commons/core';\nimport { FilterDisplayTypeEnum } from '@mediusinc/mng-commons/filter';\nimport { TableDynamicDescriptorInst, tableDescriptor } from '@mediusinc/mng-commons/table/api';\nimport { createFilterDescriptorsFromGeneric, filterApplySerializationConfigToCmp, filterGenerateMatchModeOptions, filterGetDateConfig, filterGetDefaultMatchMode, filterGetNumberConfig } from '../helpers/filters';\nimport { COMMONS_TABLE_FEATURE_CONFIG_IT } from './table-feature-config.token';\nimport * as i0 from \"@angular/core\";\nexport class TableMetadataService {\n static { this.cmpTypeName = 'TableComponent'; }\n #injector;\n #translationObserver;\n // signal sources\n #signalSources;\n #descriptor;\n #updateDescriptorFromSourceEffect;\n #genericFilters;\n // search\n #searchFieldsFromSignalSource;\n #searchFields;\n #searchFieldsEffect;\n constructor() {\n this.#injector = inject(Injector);\n this.primeConfig = inject(PrimeNG);\n this.moduleConfig = inject(COMMONS_MODULE_CONFIG_IT, { optional: true });\n this.tableModuleConfig = inject(COMMONS_TABLE_FEATURE_CONFIG_IT, { optional: true });\n this.serializationCfg = {};\n this.#translationObserver = toSignal(this.primeConfig.translationObserver);\n this.defaultFilterDisplayType = this.tableModuleConfig?.filterDisplayType ?? FilterDisplayTypeEnum.Column;\n // signal sources\n this.#signalSources = signal({}, ...(ngDevMode ? [{ debugName: \"#signalSources\" }] : []));\n // descriptors\n this.descriptorFromSource = computed(() => this.#signalSources().descriptor?.(), ...(ngDevMode ? [{ debugName: \"descriptorFromSource\" }] : []));\n this.#descriptor = signal(tableDescriptor(), ...(ngDevMode ? [{ debugName: \"#descriptor\" }] : []));\n this.descriptor = this.#descriptor.asReadonly();\n this.#updateDescriptorFromSourceEffect = effectWithDeps([this.descriptorFromSource], ([d]) => {\n if (d != null) {\n this.#descriptor.set(d);\n }\n });\n // pagination\n this.rowsPerPageOptions = computed(() => {\n const descriptor = this.descriptor();\n if (Array.isArray(descriptor.rowsPerPageOptions) && descriptor.rowsPerPageOptions.length > 0) {\n return descriptor.rowsPerPageOptions;\n }\n else {\n return [25, 50, 100];\n }\n }, ...(ngDevMode ? [{ debugName: \"rowsPerPageOptions\" }] : []));\n // filters\n this.filterDescriptors = computed(() => this.descriptor().filters, ...(ngDevMode ? [{ debugName: \"filterDescriptors\" }] : []));\n this.filters = computed(() => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const observer = this.#translationObserver(); // need this one to track language changes\n return this.filterDescriptors().map(d => this.mapDescriptorToMetadata(d));\n }, ...(ngDevMode ? [{ debugName: \"filters\" }] : []));\n this.genericFilterDescriptor = computed(() => this.descriptor().genericFilter, ...(ngDevMode ? [{ debugName: \"genericFilterDescriptor\" }] : []));\n this.#genericFilters = signal([], ...(ngDevMode ? [{ debugName: \"#genericFilters\" }] : []));\n this.genericFilters = this.#genericFilters.asReadonly();\n // search\n this.#searchFieldsFromSignalSource = computed(() => this.#signalSources().searchFields?.(), ...(ngDevMode ? [{ debugName: \"#searchFieldsFromSignalSource\" }] : []));\n this.#searchFields = signal([], ...(ngDevMode ? [{ debugName: \"#searchFields\" }] : []));\n this.searchFields = this.#searchFields.asReadonly();\n this.#searchFieldsEffect = effectWithDeps([this.descriptor, this.#searchFieldsFromSignalSource], ([descriptor, searchFieldsFromSignalSource]) => {\n this.#searchFields.set(searchFieldsFromSignalSource ?? (descriptor.search && descriptor.searchFields ? descriptor.searchFields : this.descriptor().columns.map(c => c.property)));\n });\n // params\n this.defaultParams = computed(() => {\n const params = {\n offset: 0,\n limit: this.rowsPerPageOptions()[0],\n sort: this.descriptor()\n .sorts.filter(s => s.defaultIsEnabled)\n .sort((s1, s2) => (s1.defaultOrder ?? 1000) - (s2.defaultOrder ?? 1000))\n .map(s => ({\n property: s.property,\n ascending: s.defaultIsAscending\n })),\n filters: {}\n };\n this.filters()\n .filter(f => f.descriptor.hasDefaultValue)\n .forEach(f => {\n params.filters[f.descriptor.property] = {\n value: f.descriptor.defaultValue,\n matchMode: f.defaultMatchMode\n };\n });\n return params;\n }, ...(ngDevMode ? [{ debugName: \"defaultParams\" }] : []));\n filterApplySerializationConfigToCmp(this.moduleConfig, this.serializationCfg);\n combineLatest([toObservable(this.genericFilterDescriptor), toObservable(this.#translationObserver)])\n .pipe(switchMap(([genericFilterDescriptor]) => {\n if (genericFilterDescriptor) {\n const dataProvider = this.genericFilterDescriptor()?.propertyLookup;\n const genericFilterService = dataProvider?.serviceType ? this.#injector.get(dataProvider.serviceType) : null;\n // fetch filterable properties\n return commonsToObservable(genericFilterDescriptor.propertyLookup.lookup({}, genericFilterService));\n }\n return of([]);\n }), takeUntilDestroyed())\n .subscribe({\n next: genericFilters => {\n // set descriptors from generic filter data\n this.#genericFilters.set(createFilterDescriptorsFromGeneric(genericFilters, this.genericFilterDescriptor()?.valueLookup).map(d => this.mapDescriptorToMetadata(d)));\n }\n });\n }\n setSignalSources(descriptor, searchFields) {\n this.#signalSources.set({ descriptor, searchFields });\n }\n setDescriptor(descriptor) {\n if (this.descriptorFromSource() instanceof TableDynamicDescriptorInst) {\n this.#descriptor.set(descriptor);\n }\n }\n mapDescriptorToMetadata(descriptor) {\n const matchModes = filterGenerateMatchModeOptions(this.primeConfig, descriptor, this.serializationCfg);\n return {\n descriptor: descriptor,\n matchModes: matchModes,\n defaultMatchMode: filterGetDefaultMatchMode(descriptor, matchModes),\n dateConfig: filterGetDateConfig(descriptor, this.serializationCfg),\n numberConfig: filterGetNumberConfig(descriptor)\n };\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableMetadataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableMetadataService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableMetadataService, decorators: [{\n type: Injectable\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtbWV0YWRhdGEuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RhYmxlL3NyYy9zZXJ2aWNlcy90YWJsZS1tZXRhZGF0YS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsUUFBUSxFQUFVLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3JGLE9BQU8sRUFBQyxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFFdEYsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3ZDLE9BQU8sRUFBQyxhQUFhLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUVsRCxPQUFPLEVBQUMsd0JBQXdCLEVBQThDLFlBQVksSUFBSSxtQkFBbUIsRUFBRSxjQUFjLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUN0SyxPQUFPLEVBQW1CLHFCQUFxQixFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFDdEYsT0FBTyxFQUFzQiwwQkFBMEIsRUFBRSxlQUFlLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQUVsSCxPQUFPLEVBQ0gsa0NBQWtDLEVBQ2xDLG1DQUFtQyxFQUNuQyw4QkFBOEIsRUFDOUIsbUJBQW1CLEVBQ25CLHlCQUF5QixFQUN6QixxQkFBcUIsRUFDeEIsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QixPQUFPLEVBQUMsK0JBQStCLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQzs7QUFRN0UsTUFBTSxPQUFPLG9CQUFvQjthQUNiLGdCQUFXLEdBQUcsZ0JBQWdCLEFBQW5CLENBQW9CO0lBRXRDLFNBQVMsQ0FBb0I7SUFNN0Isb0JBQW9CLENBQWtEO0lBRy9FLGlCQUFpQjtJQUNSLGNBQWMsQ0FBNkI7SUFJM0MsV0FBVyxDQUF5RjtJQUU3RyxpQ0FBaUMsQ0FJ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LEVBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDdkcsT0FBTztZQUNILFVBQVUsRUFBRSxVQUFVO1lBQ3RCLFVBQVUsRUFBRSxVQUFVO1lBQ3RCLGdCQUFnQixFQUFFLHlCQUF5QixDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUM7WUFDbkUsVUFBVSxFQUFFLG1CQUFtQixDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUM7WUFDbEUsWUFBWSxFQUFFLHFCQUFxQixDQUFDLFVBQVUsQ0FBQztTQUNsRCxDQUFDO0lBQ04sQ0FBQzs4R0FqSVEsb0JBQW9CO2tIQUFwQixvQkFBb0I7OzJGQUFwQixvQkFBb0I7a0JBRGhDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIEluamVjdG9yLCBTaWduYWwsIGNvbXB1dGVkLCBpbmplY3QsIHNpZ25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge3Rha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuXG5pbXBvcnQge1ByaW1lTkd9IGZyb20gJ3ByaW1lbmcvY29uZmlnJztcbmltcG9ydCB7Y29tYmluZUxhdGVzdCwgb2YsIHN3aXRjaE1hcH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7Q09NTU9OU19NT0RVTEVfQ09ORklHX0lULCBDb21tb25zU2VyaWFsaXphdGlvbkNvbmZpZywgRGF0YUxpc3RQYXJhbXMsIHRvT2JzZXJ2YWJsZSBhcyBjb21tb25zVG9PYnNlcnZhYmxlLCBlZmZlY3RXaXRoRGVwc30gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcbmltcG9ydCB7RmlsdGVyRGVzY3JpcHRvciwgRmlsdGVyRGlzcGxheVR5cGVFbnVtfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2ZpbHRlcic7XG5pbXBvcnQge1RhYmxlRGVzY3JpcHRvckluc3QsIFRhYmxlRHluYW1pY0Rlc2NyaXB0b3JJbnN0LCB0YWJsZURlc2NyaXB0b3J9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvdGFibGUvYXBpJztcblxuaW1wb3J0IHtcbiAgICBjcmVhdGVGaWx0ZXJEZXNjcmlwdG9yc0Zyb21HZW5lcmljLFxuICAgIGZpbHRlckFwcGx5U2VyaWFsaXphdGlvbkNvbmZpZ1RvQ21wLFxuICAgIGZpbHRlckdlbmVyYXRlTWF0Y2hNb2RlT3B0aW9ucyxcbiAgICBmaWx0ZXJHZXREYXRlQ29uZmlnLFxuICAgIGZpbHRlckdldERlZmF1bHRNYXRjaE1vZGUsXG4gICAgZmlsdGVyR2V0TnVtYmVyQ29uZmlnXG59IGZyb20gJy4uL2hlbHBlcnMvZmlsdGVycyc7XG5pbXBvcnQge0ZpbHRlck1ldGFkYXRhfSBmcm9tICcuLi9tb2RlbHMvZmlsdGVyLm1vZGVsJztcbmltcG9ydCB7Q09NTU9OU19UQUJMRV9GRUFUVVJFX0NPTkZJR19JVH0gZnJvbSAnLi90YWJsZS1mZWF0dXJlLWNvbmZpZy50b2tlbic7XG5cbmludGVyZmFjZSBTaWduYWxTb3VyY2VzPEl0ZW0gPSBhbnk+IHtcbiAgICBkZXNjcmlwdG9yPzogU2lnbmFsPFRhYmxlRGVzY3JpcHRvckluc3Q8SXRlbSwgYW55LCBhbnk+PjtcbiAgICBzZWFyY2hGaWVsZHM/OiBTaWduYWw8c3RyaW5nW10gfCB1bmRlZmluZWQ+O1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVGFibGVNZXRhZGF0YVNlcnZpY2Uge1xuICAgIHN0YXRpYyByZWFkb25seSBjbXBUeXBlTmFtZSA9ICdUYWJsZUNvbXBvbmVudCc7XG5cbiAgICByZWFkb25seSAjaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICAgIHJlYWRvbmx5IHByaW1lQ29uZmlnID0gaW5qZWN0KFByaW1lTkcpO1xuICAgIHJlYWRvbmx5IG1vZHVsZUNvbmZpZyA9IGluamVjdChDT01NT05TX01PRFVMRV9DT05GSUdfSVQsIHtvcHRpb25hbDogdHJ1ZX0pO1xuICAgIHJlYWRvbmx5IHRhYmxlTW9kdWxlQ29uZmlnID0gaW5qZWN0KENPTU1PTlNfVEFCTEVfRkVBVFVSRV9DT05GSUdfSVQsIHtvcHRpb25hbDogdHJ1ZX0pO1xuXG4gICAgcmVhZG9ubHkgc2VyaWFsaXphdGlvbkNmZzogQ29tbW9uc1NlcmlhbGl6YXRpb25Db25maWcgPSB7fTtcbiAgICByZWFkb25seSAjdHJhbnNsYXRpb25PYnNlcnZlciA9IHRvU2lnbmFsKHRoaXMucHJpbWVDb25maWcudHJhbnNsYXRpb25PYnNlcnZlcik7XG4gICAgcmVhZG9ubHkgZGVmYXVsdEZpbHRlckRpc3BsYXlUeXBlOiBGaWx0ZXJEaXNwbGF5VHlwZUVudW0gPSB0aGlzLnRhYmxlTW9kdWxlQ29uZmlnPy5maWx0ZXJEaXNwbGF5VHlwZSA/PyBGaWx0ZXJEaXNwbGF5VHlwZUVudW0uQ29sdW1uO1xuXG4gICAgLy8gc2lnbmFsIHNvdXJjZXNcbiAgICByZWFkb25seSAjc2lnbmFsU291cmNlcyA9IHNpZ25hbDxTaWduYWxTb3VyY2VzPih7fSk7XG5cbiAgICAvLyBkZXNjcmlwdG9yc1xuICAgIHJlYWRvbmx5IGRlc2NyaXB0b3JGcm9tU291cmNlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy4jc2lnbmFsU291cmNlcygpLmRlc2NyaXB0b3I/LigpKTtcbiAgICByZWFkb25seSAjZGVzY3JpcHRvciA9IHNpZ25hbDxUYWJsZURlc2NyaXB0b3JJbnN0PGFueSwgYW55LCBhbnk+Pih0YWJsZURlc2NyaXB0b3I8c3RyaW5nLCBzdHJpbmcsIHN0cmluZz4oKSk7XG4gICAgcmVhZG9ubHkgZGVzY3JpcHRvciA9IHRoaXMuI2Rlc2NyaXB0b3IuYXNSZWFkb25seSgpO1xuICAgICN1cGRhdGVEZXNjcmlwdG9yRnJvbVNvdXJjZUVmZmVjdCA9IGVmZmVjdFdpdGhEZXBzKFt0aGlzLmRlc2NyaXB0b3JGcm9tU291cmNlXSwgKFtkXSkgPT4ge1xuICAgICAgICBpZiAoZCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLiNkZXNjcmlwdG9yLnNldChkKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gcGFnaW5hdGlvblxuICAgIHJvd3NQZXJQYWdlT3B0aW9ucyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IHRoaXMuZGVzY3JpcHRvcigpO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkZXNjcmlwdG9yLnJvd3NQZXJQYWdlT3B0aW9ucykgJiYgZGVzY3JpcHRvci5yb3dzUGVyUGFnZU9wdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3Iucm93c1BlclBhZ2VPcHRpb25zO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFsyNSwgNTAsIDEwMF07XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIGZpbHRlcnNcbiAgICByZWFkb25seSBmaWx0ZXJEZXNjcmlwdG9ycyA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZGVzY3JpcHRvcigpLmZpbHRlcnMpO1xuICAgIHJlYWRvbmx5IGZpbHRlcnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgY29uc3Qgb2JzZXJ2ZXIgPSB0aGlzLiN0cmFuc2xhdGlvbk9ic2VydmVyKCk7IC8vIG5lZWQgdGhpcyBvbmUgdG8gdHJhY2sgbGFuZ3VhZ2UgY2hhbmdlc1xuICAgICAgICByZXR1cm4gdGhpcy5maWx0ZXJEZXNjcmlwdG9ycygpLm1hcChkID0+IHRoaXMubWFwRGVzY3JpcHRvclRvTWV0YWRhdGEoZCkpO1xuICAgIH0pO1xuICAgIHJlYWRvbmx5IGdlbmVyaWNGaWx0ZXJEZXNjcmlwdG9yID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5kZXNjcmlwdG9yKCkuZ2VuZXJpY0ZpbHRlcik7XG4gICAgcmVhZG9ubHkgI2dlbmVyaWNGaWx0ZXJzID0gc2lnbmFsPEZpbHRlck1ldGFkYXRhW10+KFtdKTtcbiAgICByZWFkb25seSBnZW5lcmljRmlsdGVycyA9IHRoaXMuI2dlbmVyaWNGaWx0ZXJzLmFzUmVhZG9ubHkoKTtcblxuICAgIC8vIHNlYXJjaFxuICAgIHJlYWRvbmx5ICNzZWFyY2hGaWVsZHNGcm9tU2lnbmFsU291cmNlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy4jc2lnbmFsU291cmNlcygpLnNlYXJjaEZpZWxkcz8uKCkpO1xuICAgIHJlYWRvbmx5ICNzZWFyY2hGaWVsZHMgPSBzaWduYWw8c3RyaW5nW10+KFtdKTtcbiAgICByZWFkb25seSBzZWFyY2hGaWVsZHMgPSB0aGlzLiNzZWFyY2hGaWVsZHMuYXNSZWFkb25seSgpO1xuICAgICNzZWFyY2hGaWVsZHNFZmZlY3QgPSBlZmZlY3RXaXRoRGVwcyhbdGhpcy5kZXNjcmlwdG9yLCB0aGlzLiNzZWFyY2hGaWVsZHNGcm9tU2lnbmFsU291cmNlXSwgKFtkZXNjcmlwdG9yLCBzZWFyY2hGaWVsZHNGcm9tU2lnbmFsU291cmNlXSkgPT4ge1xuICAgICAgICB0aGlzLiNzZWFyY2hGaWVsZHMuc2V0KFxuICAgICAgICAgICAgc2VhcmNoRmllbGRzRnJvbVNpZ25hbFNvdXJjZSA/PyAoZGVzY3JpcHRvci5zZWFyY2ggJiYgZGVzY3JpcHRvci5zZWFyY2hGaWVsZHMgPyBkZXNjcmlwdG9yLnNlYXJjaEZpZWxkcyA6IHRoaXMuZGVzY3JpcHRvcigpLmNvbHVtbnMubWFwKGMgPT4gYy5wcm9wZXJ0eSkpXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICAvLyBwYXJhbXNcbiAgICByZWFkb25seSBkZWZhdWx0UGFyYW1zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBwYXJhbXM6IERhdGFMaXN0UGFyYW1zID0ge1xuICAgICAgICAgICAgb2Zmc2V0OiAwLFxuICAgICAgICAgICAgbGltaXQ6IHRoaXMucm93c1BlclBhZ2VPcHRpb25zKClbMF0sXG4gICAgICAgICAgICBzb3J0OiB0aGlzLmRlc2NyaXB0b3IoKVxuICAgICAgICAgICAgICAgIC5zb3J0cy5maWx0ZXIocyA9PiBzLmRlZmF1bHRJc0VuYWJsZWQpXG4gICAgICAgICAgICAgICAgLnNvcnQoKHMxLCBzMikgPT4gKHMxLmRlZmF1bHRPcmRlciA/PyAxMDAwKSAtIChzMi5kZWZhdWx0T3JkZXIgPz8gMTAwMCkpXG4gICAgICAgICAgICAgICAgLm1hcChzID0+ICh7XG4gICAgICAgICAgICAgICAgICAgIHByb3BlcnR5OiBzLnByb3BlcnR5LFxuICAgICAgICAgICAgICAgICAgICBhc2NlbmRpbmc6IHMuZGVmYXVsdElzQXNjZW5kaW5nXG4gICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgZmlsdGVyczoge31cbiAgICAgICAgfTtcblxuICAgICAgICB0aGlzLmZpbHRlcnMoKVxuICAgICAgICAgICAgLmZpbHRlcihmID0+IGYuZGVzY3JpcHRvci5oYXNEZWZhdWx0VmFsdWUpXG4gICAgICAgICAgICAuZm9yRWFjaChmID0+IHtcbiAgICAgICAgICAgICAgICBwYXJhbXMuZmlsdGVycyFbZi5kZXNjcmlwdG9yLnByb3BlcnR5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGYuZGVzY3JpcHRvci5kZWZhdWx0VmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIG1hdGNoTW9kZTogZi5kZWZhdWx0TWF0Y2hNb2RlXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBwYXJhbXM7XG4gICAgfSk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgZmlsdGVyQXBwbHlTZXJpYWxpemF0aW9uQ29uZmlnVG9DbXAodGhpcy5tb2R1bGVDb25maWcsIHRoaXMuc2VyaWFsaXphdGlvbkNmZyk7XG5cbiAgICAgICAgY29tYmluZUxhdGVzdChbdG9PYnNlcnZhYmxlKHRoaXMuZ2VuZXJpY0ZpbHRlckRlc2NyaXB0b3IpLCB0b09ic2VydmFibGUodGhpcy4jdHJhbnNsYXRpb25PYnNlcnZlcildKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKChbZ2VuZXJpY0ZpbHRlckRlc2NyaXB0b3JdKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChnZW5lcmljRmlsdGVyRGVzY3JpcHRvcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0YVByb3ZpZGVyID0gdGhpcy5nZW5lcmljRmlsdGVyRGVzY3JpcHRvcigpPy5wcm9wZXJ0eUxvb2t1cDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGdlbmVyaWNGaWx0ZXJTZXJ2aWNlID0gZGF0YVByb3ZpZGVyPy5zZXJ2aWNlVHlwZSA/IHRoaXMuI2luamVjdG9yLmdldDxhbnk+KGRhdGFQcm92aWRlci5zZXJ2aWNlVHlwZSkgOiBudWxsO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBmZXRjaCBmaWx0ZXJhYmxlIHByb3BlcnRpZXNcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjb21tb25zVG9PYnNlcnZhYmxlKGdlbmVyaWNGaWx0ZXJEZXNjcmlwdG9yLnByb3BlcnR5TG9va3VwLmxvb2t1cCh7fSwgZ2VuZXJpY0ZpbHRlclNlcnZpY2UpKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoW10pO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiBnZW5lcmljRmlsdGVycyA9PiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHNldCBkZXNjcmlwdG9ycyBmcm9tIGdlbmVyaWMgZmlsdGVyIGRhdGFcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jZ2VuZXJpY0ZpbHRlcnMuc2V0KFxuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlRmlsdGVyRGVzY3JpcHRvcnNGcm9tR2VuZXJpYyhnZW5lcmljRmlsdGVycywgdGhpcy5nZW5lcmljRmlsdGVyRGVzY3JpcHRvcigpPy52YWx1ZUxvb2t1cCkubWFwKGQgPT4gdGhpcy5tYXBEZXNjcmlwdG9yVG9NZXRhZGF0YShkKSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2V0U2lnbmFsU291cmNlcyhkZXNjcmlwdG9yOiBTaWduYWw8VGFibGVEZXNjcmlwdG9ySW5zdDxhbnksIGFueT4+LCBzZWFyY2hGaWVsZHM6IFNpZ25hbDxzdHJpbmdbXSB8IHVuZGVmaW5lZD4pIHtcbiAgICAgICAgdGhpcy4jc2lnbmFsU291cmNlcy5zZXQoe2Rlc2NyaXB0b3IsIHNlYXJjaEZpZWxkc30pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXREZXNjcmlwdG9yKGRlc2NyaXB0b3I6IFRhYmxlRGVzY3JpcHRvckluc3Q8YW55LCBhbnksIGFueT4pIHtcbiAgICAgICAgaWYgKHRoaXMuZGVzY3JpcHRvckZyb21Tb3VyY2UoKSBpbnN0YW5jZW9mIFRhYmxlRHluYW1pY0Rlc2NyaXB0b3JJbnN0KSB7XG4gICAgICAgICAgICB0aGlzLiNkZXNjcmlwdG9yLnNldChkZXNjcmlwdG9yKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgbWFwRGVzY3JpcHRvclRvTWV0YWRhdGEoZGVzY3JpcHRvcjogRmlsdGVyRGVzY3JpcHRvcjxhbnksIGFueT4pOiBGaWx0ZXJNZXRhZGF0YSB7XG4gICAgICAgIGNvbnN0IG1hdGNoTW9kZXMgPSBmaWx0ZXJHZW5lcmF0ZU1hdGNoTW9kZU9wdGlvbnModGhpcy5wcmltZUNvbmZpZywgZGVzY3JpcHRvciwgdGhpcy5zZXJpYWxpemF0aW9uQ2ZnKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRlc2NyaXB0b3I6IGRlc2NyaXB0b3IsXG4gICAgICAgICAgICBtYXRjaE1vZGVzOiBtYXRjaE1vZGVzLFxuICAgICAgICAgICAgZGVmYXVsdE1hdGNoTW9kZTogZmlsdGVyR2V0RGVmYXVsdE1hdGNoTW9kZShkZXNjcmlwdG9yLCBtYXRjaE1vZGVzKSxcbiAgICAgICAgICAgIGRhdGVDb25maWc6IGZpbHRlckdldERhdGVDb25maWcoZGVzY3JpcHRvciwgdGhpcy5zZXJpYWxpemF0aW9uQ2ZnKSxcbiAgICAgICAgICAgIG51bWJlckNvbmZpZzogZmlsdGVyR2V0TnVtYmVyQ29uZmlnKGRlc2NyaXB0b3IpXG4gICAgICAgIH07XG4gICAgfVxufVxuIl19","import { Injectable, Injector, computed, inject, signal } from '@angular/core';\nimport { CommonsService, toObservable as commonsToObservable, effectWithDeps } from '@mediusinc/mng-commons/core';\nimport { TableDynamicDescriptorInst, TablePaginationModeEnum } from '@mediusinc/mng-commons/table/api';\nimport { tableCreateFilterMeta, tableCreateSortMeta } from '../helpers/table';\nimport { TableMetadataService } from './table-metadata.service';\nimport * as i0 from \"@angular/core\";\nexport class TableDataService {\n constructor() {\n this.#injector = inject(Injector);\n this.#commons = inject(CommonsService);\n this.#metadata = inject(TableMetadataService);\n // signal sources\n this.#dataSources = signal({}, ...(ngDevMode ? [{ debugName: \"#dataSources\" }] : []));\n // data sources\n this.#manualLoading = computed(() => this.#dataSources()?.manualLoading?.(), ...(ngDevMode ? [{ debugName: \"#manualLoading\" }] : []));\n // results that are set directly via input and are not result of a asynchronous operation (aka data provider)\n this.#synchronousResult = computed(() => {\n const dataSources = this.#dataSources();\n if (dataSources?.dataProvider?.() !== undefined) {\n return undefined;\n }\n if (dataSources?.dataListResult?.() !== undefined) {\n return dataSources?.dataListResult();\n }\n if (dataSources?.arrayItems?.() !== undefined) {\n return { data: dataSources.arrayItems(), totalCount: dataSources.arrayItems()?.length ?? 0 };\n }\n return undefined;\n }, ...(ngDevMode ? [{ debugName: \"#synchronousResult\" }] : []));\n this.#dataProvider = computed(() => this.#dataSources()?.dataProvider?.(), ...(ngDevMode ? [{ debugName: \"#dataProvider\" }] : []));\n this.#dataProviderService = computed(() => {\n const dataProvider = this.#dataProvider();\n return dataProvider?.serviceType ? this.#injector.get(dataProvider.serviceType) : null;\n }, ...(ngDevMode ? [{ debugName: \"#dataProviderService\" }] : []));\n this.#synchronousResultEffect = effectWithDeps([this.#synchronousResult], ([res]) => {\n if (res != null) {\n this.#setData(res.data ?? [], res.totalCount);\n }\n });\n this.#synchronousLoadingEffect = effectWithDeps([this.#synchronousResult, this.#manualLoading], ([res, manualLoading]) => {\n if (res != null && manualLoading == null) {\n this.#loading.set(false);\n }\n });\n this.#manualLoadingEffect = effectWithDeps([this.#manualLoading], ([manualLoading]) => {\n if (manualLoading != null) {\n this.#loading.set(manualLoading);\n }\n });\n // pagination\n this.#params = signal(undefined, ...(ngDevMode ? [{ debugName: \"#params\" }] : []));\n this.params = this.#params.asReadonly();\n this.#sortMeta = signal(undefined, ...(ngDevMode ? [{ debugName: \"#sortMeta\" }] : []));\n this.sortMeta = this.#sortMeta.asReadonly();\n this.#filterMeta = signal({}, ...(ngDevMode ? [{ debugName: \"#filterMeta\" }] : []));\n this.filterMeta = this.#filterMeta.asReadonly();\n this.#isSortAndFilterMetaInitialized = signal(false, ...(ngDevMode ? [{ debugName: \"#isSortAndFilterMetaInitialized\" }] : []));\n this.#defaultParamsEffect = effectWithDeps([this.#metadata.defaultParams], ([defaultParams]) => {\n this.#sortMeta.set(tableCreateSortMeta(defaultParams));\n this.#filterMeta.set(tableCreateFilterMeta(defaultParams));\n this.#isSortAndFilterMetaInitialized.set(true);\n }, { firstOnly: true });\n this.#isSearchMetaInitialized = signal(false, ...(ngDevMode ? [{ debugName: \"#isSearchMetaInitialized\" }] : []));\n this.#searchMeta = signal(undefined, ...(ngDevMode ? [{ debugName: \"#searchMeta\" }] : []));\n this.searchMeta = this.#searchMeta.asReadonly();\n this.isAllPaginationMetaInitialized = computed(() => this.#isSortAndFilterMetaInitialized() && this.#isSortAndFilterMetaInitialized(), ...(ngDevMode ? [{ debugName: \"isAllPaginationMetaInitialized\" }] : []));\n this.paginationMode = computed(() => {\n const descriptor = this.#metadata.descriptor();\n if (descriptor.paginationMode != null) {\n // descriptor choice is the strongest - if defined, use this value\n return descriptor.paginationMode;\n }\n else if (this.#dataProvider() != null) {\n // when data provider is used, use pagination\n return TablePaginationModeEnum.Pagination;\n }\n else {\n return TablePaginationModeEnum.None;\n }\n }, ...(ngDevMode ? [{ debugName: \"paginationMode\" }] : []));\n this.offset = computed(() => this.params()?.offset ?? 0, ...(ngDevMode ? [{ debugName: \"offset\" }] : []));\n this.rows = computed(() => {\n if (this.params()?.limit) {\n return this.params()?.limit;\n }\n const descriptor = this.#metadata.descriptor();\n const rowsPerPageOptions = this.#metadata.rowsPerPageOptions();\n if (descriptor.defaultNumRows && rowsPerPageOptions.includes(descriptor.defaultNumRows)) {\n return descriptor.defaultNumRows;\n }\n return rowsPerPageOptions[0];\n }, ...(ngDevMode ? [{ debugName: \"rows\" }] : []));\n // data\n this.#data = signal([], ...(ngDevMode ? [{ debugName: \"#data\" }] : []));\n this.data = this.#data.asReadonly();\n this.#count = signal(0, ...(ngDevMode ? [{ debugName: \"#count\" }] : []));\n this.count = this.#count.asReadonly();\n this.#loading = signal(true, ...(ngDevMode ? [{ debugName: \"#loading\" }] : []));\n this.loading = this.#loading.asReadonly();\n this.selectedItems = signal([], ...(ngDevMode ? [{ debugName: \"selectedItems\" }] : []));\n }\n #injector;\n #commons;\n #metadata;\n // signal sources\n #dataSources;\n // data sources\n #manualLoading;\n // results that are set directly via input and are not result of a asynchronous operation (aka data provider)\n #synchronousResult;\n #dataProvider;\n #dataProviderService;\n #synchronousResultEffect;\n #synchronousLoadingEffect;\n #manualLoadingEffect;\n #dataProviderSubscription;\n // pagination\n #params;\n #sortMeta;\n #filterMeta;\n #isSortAndFilterMetaInitialized;\n #defaultParamsEffect;\n #isSearchMetaInitialized;\n #searchMeta;\n // data\n #data;\n #count;\n #loading;\n setDataSources(arrayItems, dataListResult, dataProvider, manualLoading) {\n this.#dataSources.set({ arrayItems, dataListResult, dataProvider, manualLoading });\n }\n fetchWithDataProvider(params, onErrorFn) {\n const dataProvider = this.#dataProvider();\n if (!dataProvider || params.limit === 0) {\n return false;\n }\n this.#dataProviderSubscription?.unsubscribe();\n this.#loading.set(true);\n this.#dataProviderSubscription = commonsToObservable(dataProvider.getAll(params, this.#dataProviderService(), this.#metadata.descriptor().isLocalized ? (this.#commons.appDataLocale() ?? undefined) : undefined)).subscribe({\n next: res => {\n const descriptorInput = this.#metadata.descriptorFromSource();\n if (descriptorInput instanceof TableDynamicDescriptorInst) {\n this.#metadata.setDescriptor(descriptorInput.toTableDescriptorFromData(res));\n }\n this.#setData(res?.data ?? [], res?.totalCount);\n this.#loading.set(false);\n },\n error: err => {\n onErrorFn(err);\n this.#setData([]);\n this.#loading.set(false);\n }\n });\n return true;\n }\n setParams(params, fromQueryParams = false) {\n if (!fromQueryParams && this.compareWithCurrentParams(params)) {\n return;\n }\n this.#params.set(params);\n this.#sortMeta.set(tableCreateSortMeta(params));\n this.#filterMeta.set(tableCreateFilterMeta(params));\n this.#isSortAndFilterMetaInitialized.set(true);\n if (fromQueryParams && !this.#isSearchMetaInitialized() && params?.search) {\n this.#searchMeta.set({ value: params.search, caseSensitive: params.filters?.['global']?.caseSensitive ?? false });\n }\n this.#isSearchMetaInitialized.set(true);\n }\n /**\n * Compare the given params with the stored params in the DataListService.\n *\n * @param {DataListParams} params - The params to compare with the stored params.\n *\n * @return {boolean} - True if the given params match the stored params, otherwise false.\n */\n compareWithCurrentParams(params) {\n return (params.offset === this.offset() &&\n params.limit === this.rows() &&\n JSON.stringify(tableCreateSortMeta(params)) === JSON.stringify(this.#sortMeta()) &&\n JSON.stringify(tableCreateFilterMeta(params)) === JSON.stringify(this.#filterMeta()));\n }\n #setData(data, count) {\n this.#data.set([...data]);\n this.#count.set(count ?? data.length);\n }\n ngOnDestroy() {\n this.#dataProviderSubscription?.unsubscribe();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableDataService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableDataService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableDataService, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtZGF0YS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGFibGUvc3JjL3NlcnZpY2VzL3RhYmxlLWRhdGEuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFFLFFBQVEsRUFBcUIsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFLaEcsT0FBTyxFQUF3QixjQUFjLEVBQWtDLFlBQVksSUFBSSxtQkFBbUIsRUFBRSxjQUFjLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUN2SyxPQUFPLEVBQXFCLDBCQUEwQixFQUFFLHVCQUF1QixFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFFekgsT0FBTyxFQUFDLHFCQUFxQixFQUFFLG1CQUFtQixFQUFDLE1BQU0sa0JBQWtCLENBQUM7QUFDNUUsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sMEJBQTBCLENBQUM7O0FBVTlELE1BQU0sT0FBTyxnQkFBZ0I7SUFEN0I7UUFFYSxjQUFTLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzdCLGFBQVEsR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbEMsY0FBUyxHQUFHLE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBRWxELGlCQUFpQjtRQUNSLGlCQUFZLEdBQUcsTUFBTSxDQUFvQixFQUFFLHdEQUFDLENBQUM7UUFFdEQsZUFBZTtRQUNOLG1CQUFjLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsRUFBRSxhQUFhLEVBQUUsRUFBRSwwREFBQyxDQUFDO1FBQ2pGLDZHQUE2RztRQUNwRyx1QkFBa0IsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQ3hDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUN4QyxJQUFJLFdBQVcsRUFBRSxZ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O0lBQ04sQ0FBQztJQUVELFFBQVEsQ0FBQyxJQUFZLEVBQUUsS0FBYztRQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRCxXQUFXO1FBQ1AsSUFBSSxDQUFDLHlCQUF5QixFQUFFLFdBQVcsRUFBRSxDQUFDO0lBQ2xELENBQUM7OEdBeExRLGdCQUFnQjtrSEFBaEIsZ0JBQWdCOzsyRkFBaEIsZ0JBQWdCO2tCQUQ1QixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBJbmplY3RvciwgT25EZXN0cm95LCBTaWduYWwsIGNvbXB1dGVkLCBpbmplY3QsIHNpZ25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7U29ydE1ldGF9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtDb21tb25zRmlsdGVyTWV0YWRhdGEsIENvbW1vbnNTZXJ2aWNlLCBEYXRhTGlzdFBhcmFtcywgRGF0YUxpc3RSZXN1bHQsIHRvT2JzZXJ2YWJsZSBhcyBjb21tb25zVG9PYnNlcnZhYmxlLCBlZmZlY3RXaXRoRGVwc30gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcbmltcG9ydCB7SVRhYmxlRGF0YVByb3ZpZGVyLCBUYWJsZUR5bmFtaWNEZXNjcmlwdG9ySW5zdCwgVGFibGVQYWdpbmF0aW9uTW9kZUVudW19IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvdGFibGUvYXBpJztcblxuaW1wb3J0IHt0YWJsZUNyZWF0ZUZpbHRlck1ldGEsIHRhYmxlQ3JlYXRlU29ydE1ldGF9IGZyb20gJy4uL2hlbHBlcnMvdGFibGUnO1xuaW1wb3J0IHtUYWJsZU1ldGFkYXRhU2VydmljZX0gZnJvbSAnLi90YWJsZS1tZXRhZGF0YS5zZXJ2aWNlJztcblxuaW50ZXJmYWNlIERhdGFTb3VyY2VzPEl0ZW0gPSBhbnk+IHtcbiAgICBhcnJheUl0ZW1zPzogU2lnbmFsPEl0ZW1bXSB8IHVuZGVmaW5lZD47XG4gICAgZGF0YUxpc3RSZXN1bHQ/OiBTaWduYWw8RGF0YUxpc3RSZXN1bHQ8SXRlbT4gfCB1bmRlZmluZWQ+O1xuICAgIGRhdGFQcm92aWRlcj86IFNpZ25hbDxJVGFibGVEYXRhUHJvdmlkZXI8SXRlbT4gfCB1bmRlZmluZWQ+O1xuICAgIG1hbnVhbExvYWRpbmc/OiBTaWduYWw8Ym9vbGVhbiB8IHVuZGVmaW5lZD47XG59XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUYWJsZURhdGFTZXJ2aWNlPEl0ZW0+IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICByZWFkb25seSAjaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuICAgIHJlYWRvbmx5ICNjb21tb25zID0gaW5qZWN0KENvbW1vbnNTZXJ2aWNlKTtcbiAgICByZWFkb25seSAjbWV0YWRhdGEgPSBpbmplY3QoVGFibGVNZXRhZGF0YVNlcnZpY2UpO1xuXG4gICAgLy8gc2lnbmFsIHNvdXJjZXNcbiAgICByZWFkb25seSAjZGF0YVNvdXJjZXMgPSBzaWduYWw8RGF0YVNvdXJjZXM8SXRlbT4+KHt9KTtcblxuICAgIC8vIGRhdGEgc291cmNlc1xuICAgIHJlYWRvbmx5ICNtYW51YWxMb2FkaW5nID0gY29tcHV0ZWQoKCkgPT4gdGhpcy4jZGF0YVNvdXJjZXMoKT8ubWFudWFsTG9hZGluZz8uKCkpO1xuICAgIC8vIHJlc3VsdHMgdGhhdCBhcmUgc2V0IGRpcmVjdGx5IHZpYSBpbnB1dCBhbmQgYXJlIG5vdCByZXN1bHQgb2YgYSBhc3luY2hyb25vdXMgb3BlcmF0aW9uIChha2EgZGF0YSBwcm92aWRlcilcbiAgICByZWFkb25seSAjc3luY2hyb25vdXNSZXN1bHQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRhdGFTb3VyY2VzID0gdGhpcy4jZGF0YVNvdXJjZXMoKTtcbiAgICAgICAgaWYgKGRhdGFTb3VyY2VzPy5kYXRhUHJvdmlkZXI/LigpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRhdGFTb3VyY2VzPy5kYXRhTGlzdFJlc3VsdD8uKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIGRhdGFTb3VyY2VzPy5kYXRhTGlzdFJlc3VsdCgpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChkYXRhU291cmNlcz8uYXJyYXlJdGVtcz8uKCkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIDxEYXRhTGlzdFJlc3VsdD57ZGF0YTogZGF0YVNvdXJjZXMuYXJyYXlJdGVtcygpLCB0b3RhbENvdW50OiBkYXRhU291cmNlcy5hcnJheUl0ZW1zKCk/Lmxlbmd0aCA/PyAwfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH0pO1xuICAgIHJlYWRvbmx5ICNkYXRhUHJvdmlkZXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLiNkYXRhU291cmNlcygpPy5kYXRhUHJvdmlkZXI/LigpKTtcbiAgICByZWFkb25seSAjZGF0YVByb3ZpZGVyU2VydmljZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgZGF0YVByb3ZpZGVyID0gdGhpcy4jZGF0YVByb3ZpZGVyKCk7XG4gICAgICAgIHJldHVybiBkYXRhUHJvdmlkZXI/LnNlcnZpY2VUeXBlID8gdGhpcy4jaW5qZWN0b3IuZ2V0PGFueT4oZGF0YVByb3ZpZGVyLnNlcnZpY2VUeXBlKSA6IG51bGw7XG4gICAgfSk7XG4gICAgcmVhZG9ubHkgI3N5bmNocm9ub3VzUmVzdWx0RWZmZWN0ID0gZWZmZWN0V2l0aERlcHMoW3RoaXMuI3N5bmNocm9ub3VzUmVzdWx0XSwgKFtyZXNdKSA9PiB7XG4gICAgICAgIGlmIChyZXMgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy4jc2V0RGF0YShyZXMuZGF0YSA/PyBbXSwgcmVzLnRvdGFsQ291bnQpO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmVhZG9ubHkgI3N5bmNocm9ub3VzTG9hZGluZ0VmZmVjdCA9IGVmZmVjdFdpdGhEZXBzKFt0aGlzLiNzeW5jaHJvbm91c1Jlc3VsdCwgdGhpcy4jbWFudWFsTG9hZGluZ10sIChbcmVzLCBtYW51YWxMb2FkaW5nXSkgPT4ge1xuICAgICAgICBpZiAocmVzICE9IG51bGwgJiYgbWFudWFsTG9hZGluZyA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLiNsb2FkaW5nLnNldChmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICByZWFkb25seSAjbWFudWFsTG9hZGluZ0VmZmVjdCA9IGVmZmVjdFdpdGhEZXBzKFt0aGlzLiNtYW51YWxMb2FkaW5nXSwgKFttYW51YWxMb2FkaW5nXSkgPT4ge1xuICAgICAgICBpZiAobWFudWFsTG9hZGluZyAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLiNsb2FkaW5nLnNldChtYW51YWxMb2FkaW5nKTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgICNkYXRhUHJvdmlkZXJTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG5cbiAgICAvLyBwYWdpbmF0aW9uXG4gICAgcmVhZG9ubHkgI3BhcmFtcyA9IHNpZ25hbDxEYXRhTGlzdFBhcmFtcyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgICByZWFkb25seSBwYXJhbXMgPSB0aGlzLiNwYXJhbXMuYXNSZWFkb25seSgpO1xuICAgIHJlYWRvbmx5ICNzb3J0TWV0YSA9IHNpZ25hbDxTb3J0TWV0YVtdIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgIHJlYWRvbmx5IHNvcnRNZXRhID0gdGhpcy4jc29ydE1ldGEuYXNSZWFkb25seSgpO1xuICAgIHJlYWRvbmx5ICNmaWx0ZXJNZXRhID0gc2lnbmFsPFJlY29yZDxzdHJpbmcsIENvbW1vbnNGaWx0ZXJNZXRhZGF0YT4+KHt9KTtcbiAgICByZWFkb25seSBmaWx0ZXJNZXRhID0gdGhpcy4jZmlsdGVyTWV0YS5hc1JlYWRvbmx5KCk7XG4gICAgcmVhZG9ubHkgI2lzU29ydEFuZEZpbHRlck1ldGFJbml0aWFsaXplZCA9IHNpZ25hbChmYWxzZSk7XG4gICAgcmVhZG9ubHkgI2RlZmF1bHRQYXJhbXNFZmZlY3QgPSBlZmZlY3RXaXRoRGVwcyhcbiAgICAgICAgW3RoaXMuI21ldGFkYXRhLmRlZmF1bHRQYXJhbXNdLFxuICAgICAgICAoW2RlZmF1bHRQYXJhbXNdKSA9PiB7XG4gICAgICAgICAgICB0aGlzLiNzb3J0TWV0YS5zZXQodGFibGVDcmVhdGVTb3J0TWV0YShkZWZhdWx0UGFyYW1zKSk7XG4gICAgICAgICAgICB0aGlzLiNmaWx0ZXJNZXRhLnNldCh0YWJsZUNyZWF0ZUZpbHRlck1ldGEoZGVmYXVsdFBhcmFtcykpO1xuICAgICAgICAgICAgdGhpcy4jaXNTb3J0QW5kRmlsdGVyTWV0YUluaXRpYWxpemVkLnNldCh0cnVlKTtcbiAgICAgICAgfSxcbiAgICAgICAge2ZpcnN0T25seTogdHJ1ZX1cbiAgICApO1xuICAgIHJlYWRvbmx5ICNpc1NlYXJjaE1ldGFJbml0aWFsaXplZCA9IHNpZ25hbChmYWxzZSk7XG4gICAgcmVhZG9ubHkgI3NlYXJjaE1ldGEgPSBzaWduYWw8e3ZhbHVlOiBzdHJpbmc7IGNhc2VTZW5zaXRpdmU6IGJvb2xlYW59IHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuICAgIHJlYWRvbmx5IHNlYXJjaE1ldGEgPSB0aGlzLiNzZWFyY2hNZXRhLmFzUmVhZG9ubHkoKTtcbiAgICByZWFkb25seSBpc0FsbFBhZ2luYXRpb25NZXRhSW5pdGlhbGl6ZWQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLiNpc1NvcnRBbmRGaWx0ZXJNZXRhSW5pdGlhbGl6ZWQoKSAmJiB0aGlzLiNpc1NvcnRBbmRGaWx0ZXJNZXRhSW5pdGlhbGl6ZWQoKSk7XG4gICAgcmVhZG9ubHkgcGFnaW5hdGlvbk1vZGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSB0aGlzLiNtZXRhZGF0YS5kZXNjcmlwdG9yKCk7XG4gICAgICAgIGlmIChkZXNjcmlwdG9yLnBhZ2luYXRpb25Nb2RlICE9IG51bGwpIHtcbiAgICAgICAgICAgIC8vIGRlc2NyaXB0b3IgY2hvaWNlIGlzIHRoZSBzdHJvbmdlc3QgLSBpZiBkZWZpbmVkLCB1c2UgdGhpcyB2YWx1ZVxuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3IucGFnaW5hdGlvbk1vZGU7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4jZGF0YVByb3ZpZGVyKCkgIT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gd2hlbiBkYXRhIHByb3ZpZGVyIGlzIHVzZWQsIHVzZSBwYWdpbmF0aW9uXG4gICAgICAgICAgICByZXR1cm4gVGFibGVQYWdpbmF0aW9uTW9kZUVudW0uUGFnaW5hdGlvbjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBUYWJsZVBhZ2luYXRpb25Nb2RlRW51bS5Ob25lO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmVhZG9ubHkgb2Zmc2V0ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5wYXJhbXMoKT8ub2Zmc2V0ID8/IDApO1xuICAgIHJlYWRvbmx5IHJvd3MgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnBhcmFtcygpPy5saW1pdCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFyYW1zKCk/LmxpbWl0O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IHRoaXMuI21ldGFkYXRhLmRlc2NyaXB0b3IoKTtcbiAgICAgICAgY29uc3Qgcm93c1BlclBhZ2VPcHRpb25zID0gdGhpcy4jbWV0YWRhdGEucm93c1BlclBhZ2VPcHRpb25zKCk7XG4gICAgICAgIGlmIChkZXNjcmlwdG9yLmRlZmF1bHROdW1Sb3dzICYmIHJvd3NQZXJQYWdlT3B0aW9ucy5pbmNsdWRlcyhkZXNjcmlwdG9yLmRlZmF1bHROdW1Sb3dzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGRlc2NyaXB0b3IuZGVmYXVsdE51bVJvd3M7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcm93c1BlclBhZ2VPcHRpb25zWzBdO1xuICAgIH0pO1xuXG4gICAgLy8gZGF0YVxuICAgIHJlYWRvbmx5ICNkYXRhID0gc2lnbmFsPEl0ZW1bXT4oW10pO1xuICAgIHJlYWRvbmx5IGRhdGEgPSB0aGlzLiNkYXRhLmFzUmVhZG9ubHkoKTtcbiAgICByZWFkb25seSAjY291bnQgPSBzaWduYWwoMCk7XG4gICAgcmVhZG9ubHkgY291bnQgPSB0aGlzLiNjb3VudC5hc1JlYWRvbmx5KCk7XG4gICAgcmVhZG9ubHkgI2xvYWRpbmcgPSBzaWduYWwodHJ1ZSk7XG4gICAgcmVhZG9ubHkgbG9hZGluZyA9IHRoaXMuI2xvYWRpbmcuYXNSZWFkb25seSgpO1xuICAgIHJlYWRvbmx5IHNlbGVjdGVkSXRlbXMgPSBzaWduYWw8SXRlbVtdPihbXSk7XG5cbiAgICBzZXREYXRhU291cmNlcyhcbiAgICAgICAgYXJyYXlJdGVtczogU2lnbmFsPEl0ZW1bXSB8IHVuZGVmaW5lZD4sXG4gICAgICAgIGRhdGFMaXN0UmVzdWx0OiBTaWduYWw8RGF0YUxpc3RSZXN1bHQ8SXRlbT4gfCB1bmRlZmluZWQ+LFxuICAgICAgICBkYXRhUHJvdmlkZXI6IFNpZ25hbDxJVGFibGVEYXRhUHJvdmlkZXI8SXRlbSwgYW55LCBhbnksIGFueT4gfCB1bmRlZmluZWQ+LFxuICAgICAgICBtYW51YWxMb2FkaW5nOiBTaWduYWw8Ym9vbGVhbiB8IHVuZGVmaW5lZD5cbiAgICApIHtcbiAgICAgICAgdGhpcy4jZGF0YVNvdXJjZXMuc2V0KHthcnJheUl0ZW1zLCBkYXRhTGlzdFJlc3VsdCwgZGF0YVByb3ZpZGVyLCBtYW51YWxMb2FkaW5nfSk7XG4gICAgfVxuXG4gICAgZmV0Y2hXaXRoRGF0YVByb3ZpZGVyKHBhcmFtczogRGF0YUxpc3RQYXJhbXMsIG9uRXJyb3JGbjogKGVycm9yOiBFcnJvcikgPT4gdm9pZCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBkYXRhUHJvdmlkZXIgPSB0aGlzLiNkYXRhUHJvdmlkZXIoKTtcbiAgICAgICAgaWYgKCFkYXRhUHJvdmlkZXIgfHwgcGFyYW1zLmxpbWl0ID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLiNkYXRhUHJvdmlkZXJTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIHRoaXMuI2xvYWRpbmcuc2V0KHRydWUpO1xuXG4gICAgICAgIHRoaXMuI2RhdGFQcm92aWRlclN1YnNjcmlwdGlvbiA9IGNvbW1vbnNUb09ic2VydmFibGUoXG4gICAgICAgICAgICBkYXRhUHJvdmlkZXIuZ2V0QWxsKFxuICAgICAgICAgICAgICAgIHBhcmFtcyBhcyBEYXRhTGlzdFBhcmFtczxhbnksIGFueT4sXG4gICAgICAgICAgICAgICAgdGhpcy4jZGF0YVByb3ZpZGVyU2VydmljZSgpLFxuICAgICAgICAgICAgICAgIHRoaXMuI21ldGFkYXRhLmRlc2NyaXB0b3IoKS5pc0xvY2FsaXplZCA/ICh0aGlzLiNjb21tb25zLmFwcERhdGFMb2NhbGUoKSA/PyB1bmRlZmluZWQpIDogdW5kZWZpbmVkXG4gICAgICAgICAgICApXG4gICAgICAgICkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IHJlcyA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGVzY3JpcHRvcklucHV0ID0gdGhpcy4jbWV0YWRhdGEuZGVzY3JpcHRvckZyb21Tb3VyY2UoKTtcbiAgICAgICAgICAgICAgICBpZiAoZGVzY3JpcHRvcklucHV0IGluc3RhbmNlb2YgVGFibGVEeW5hbWljRGVzY3JpcHRvckluc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy4jbWV0YWRhdGEuc2V0RGVzY3JpcHRvcihkZXNjcmlwdG9ySW5wdXQudG9UYWJsZURlc2NyaXB0b3JGcm9tRGF0YShyZXMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy4jc2V0RGF0YShyZXM/LmRhdGEgPz8gW10sIHJlcz8udG90YWxDb3VudCk7XG4gICAgICAgICAgICAgICAgdGhpcy4jbG9hZGluZy5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGVycm9yOiBlcnIgPT4ge1xuICAgICAgICAgICAgICAgIG9uRXJyb3JGbihlcnIpO1xuICAgICAgICAgICAgICAgIHRoaXMuI3NldERhdGEoW10pO1xuICAgICAgICAgICAgICAgIHRoaXMuI2xvYWRpbmcuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgc2V0UGFyYW1zKHBhcmFtczogRGF0YUxpc3RQYXJhbXMsIGZyb21RdWVyeVBhcmFtcyA9IGZhbHNlKSB7XG4gICAgICAgIGlmICghZnJvbVF1ZXJ5UGFyYW1zICYmIHRoaXMuY29tcGFyZVdpdGhDdXJyZW50UGFyYW1zKHBhcmFtcykpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuI3BhcmFtcy5zZXQocGFyYW1zKTtcbiAgICAgICAgdGhpcy4jc29ydE1ldGEuc2V0KHRhYmxlQ3JlYXRlU29ydE1ldGEocGFyYW1zKSk7XG4gICAgICAgIHRoaXMuI2ZpbHRlck1ldGEuc2V0KHRhYmxlQ3JlYXRlRmlsdGVyTWV0YShwYXJhbXMpKTtcbiAgICAgICAgdGhpcy4jaXNTb3J0QW5kRmlsdGVyTWV0YUluaXRpYWxpemVkLnNldCh0cnVlKTtcbiAgICAgICAgaWYgKGZyb21RdWVyeVBhcmFtcyAmJiAhdGhpcy4jaXNTZWFyY2hNZXRhSW5pdGlhbGl6ZWQoKSAmJiBwYXJhbXM/LnNlYXJjaCkge1xuICAgICAgICAgICAgdGhpcy4jc2VhcmNoTWV0YS5zZXQoe3ZhbHVlOiBwYXJhbXMuc2VhcmNoLCBjYXNlU2Vuc2l0aXZlOiBwYXJhbXMuZmlsdGVycz8uWydnbG9iYWwnXT8uY2FzZVNlbnNpdGl2ZSA/PyBmYWxzZX0pO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuI2lzU2VhcmNoTWV0YUluaXRpYWxpemVkLnNldCh0cnVlKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBDb21wYXJlIHRoZSBnaXZlbiBwYXJhbXMgd2l0aCB0aGUgc3RvcmVkIHBhcmFtcyBpbiB0aGUgRGF0YUxpc3RTZXJ2aWNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtEYXRhTGlzdFBhcmFtc30gcGFyYW1zIC0gVGhlIHBhcmFtcyB0byBjb21wYXJlIHdpdGggdGhlIHN0b3JlZCBwYXJhbXMuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSAtIFRydWUgaWYgdGhlIGdpdmVuIHBhcmFtcyBtYXRjaCB0aGUgc3RvcmVkIHBhcmFtcywgb3RoZXJ3aXNlIGZhbHNlLlxuICAgICAqL1xuICAgIHByaXZhdGUgY29tcGFyZVdpdGhDdXJyZW50UGFyYW1zKHBhcmFtczogRGF0YUxpc3RQYXJhbXMpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHBhcmFtcy5vZmZzZXQgPT09IHRoaXMub2Zmc2V0KCkgJiZcbiAgICAgICAgICAgIHBhcmFtcy5saW1pdCA9PT0gdGhpcy5yb3dzKCkgJiZcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRhYmxlQ3JlYXRlU29ydE1ldGEocGFyYW1zKSkgPT09IEpTT04uc3RyaW5naWZ5KHRoaXMuI3NvcnRNZXRhKCkpICYmXG4gICAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0YWJsZUNyZWF0ZUZpbHRlck1ldGEocGFyYW1zKSkgPT09IEpTT04uc3RyaW5naWZ5KHRoaXMuI2ZpbHRlck1ldGEoKSlcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAjc2V0RGF0YShkYXRhOiBJdGVtW10sIGNvdW50PzogbnVtYmVyKSB7XG4gICAgICAgIHRoaXMuI2RhdGEuc2V0KFsuLi5kYXRhXSk7XG4gICAgICAgIHRoaXMuI2NvdW50LnNldChjb3VudCA/PyBkYXRhLmxlbmd0aCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIHRoaXMuI2RhdGFQcm92aWRlclN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB9XG59XG4iXX0=","import { animate, style, transition, trigger } from '@angular/animations';\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, ElementRef, Renderer2, ViewEncapsulation, computed, inject, input, signal, untracked, viewChild } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { OverlayService, TranslationKeys } from 'primeng/api';\nimport { ButtonDirective } from 'primeng/button';\nimport { Checkbox } from 'primeng/checkbox';\nimport { DatePicker } from 'primeng/datepicker';\nimport { ConnectedOverlayScrollHandler, DomHandler } from 'primeng/dom';\nimport { InputNumber } from 'primeng/inputnumber';\nimport { InputText } from 'primeng/inputtext';\nimport { Table, TableModule } from 'primeng/table';\nimport { ZIndexUtils } from 'primeng/utils';\nimport { Subject, debounceTime, distinctUntilChanged } from 'rxjs';\nimport { FilterMatchMode, RerenderDirective, effectWithDeps } from '@mediusinc/mng-commons/core';\nimport { FilterLookupDescriptor, FilterLookupTypeEnum, FilterTypeEnum } from '@mediusinc/mng-commons/filter';\nimport { AutocompleteComponent, DateRangeComponent, DropdownComponent, InputTrimDirective, NumberRangeComponent } from '@mediusinc/mng-commons/form';\nimport { filterAdjustDisplayValueOnMatchModeChange, filterSetMetadataOnChange, filterSetMetadataOnDisplayChange } from '../../helpers/filters';\nimport { TableDataService } from '../../services/table-data.service';\nimport { TableMetadataService } from '../../services/table-metadata.service';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/forms\";\n/**\n * Cannot be on push change detection strategy because of filter updates triggered from route which causes to force update values in force metadata\n * and these must be propagated through to this component and beyond to primeNG.\n */\nexport class TableColumnFilterComponent {\n constructor() {\n this.lookupTypeDropdown = FilterLookupTypeEnum.Dropdown;\n this.lookupTypeAutocomplete = FilterLookupTypeEnum.Autocomplete;\n this.FilterTypeEnum = FilterTypeEnum;\n this.FilterMatchMode = FilterMatchMode;\n this.el = inject(ElementRef);\n this.primeTable = inject(Table);\n this.renderer = inject(Renderer2);\n this.overlayService = inject(OverlayService);\n this.cd = inject(ChangeDetectorRef);\n this.destroyRef = inject(DestroyRef);\n this.tableData = inject((TableDataService));\n this.tableMetadata = inject(TableMetadataService);\n this.document = window.document;\n this.metadata = input.required(...(ngDevMode ? [{ debugName: \"metadata\" }] : []));\n this.descriptorAsLookup = computed(() => this.metadata().descriptor instanceof FilterLookupDescriptor ? this.metadata().descriptor : undefined, ...(ngDevMode ? [{ debugName: \"descriptorAsLookup\" }] : []));\n this.icon = viewChild('icon', ...(ngDevMode ? [{ debugName: \"icon\" }] : []));\n this.matchModes = computed(() => this.metadata().matchModes, ...(ngDevMode ? [{ debugName: \"matchModes\" }] : []));\n this.filterConstraint = signal(undefined, ...(ngDevMode ? [{ debugName: \"filterConstraint\" }] : []));\n this.isFilterSet = computed(() => this.filterConstraint()?.matchMode === FilterMatchMode.Exists ||\n this.filterConstraint()?.matchMode === FilterMatchMode.DoesNotExist ||\n !this.primeTable.isFilterBlank(this.filterConstraint()?.value), ...(ngDevMode ? [{ debugName: \"isFilterSet\" }] : []));\n this.isInputDisabled = computed(() => this.filterConstraint()?.matchMode === FilterMatchMode.Exists || this.filterConstraint()?.matchMode === FilterMatchMode.DoesNotExist, ...(ngDevMode ? [{ debugName: \"isInputDisabled\" }] : []));\n this.overlayVisible = signal(false, ...(ngDevMode ? [{ debugName: \"overlayVisible\" }] : []));\n // display configs\n this.isMultiselect = computed(() => {\n const ft = this.filterConstraint();\n const matchMode = ft?.displayMatchMode ?? this.metadata().defaultMatchMode;\n return (matchMode === FilterMatchMode.In || matchMode === FilterMatchMode.NotIn) && (ft?.displayValue == null || Array.isArray(ft.displayValue));\n }, ...(ngDevMode ? [{ debugName: \"isMultiselect\" }] : []));\n this.window = this.document.defaultView;\n this.numericValueFromModelChange = null;\n this.dateDebounceSubject = new Subject();\n this.dateDebounceSubject.pipe(debounceTime(500), distinctUntilChanged(), takeUntilDestroyed()).subscribe(v => this.updateFilterOnDisplayValueChange(v));\n effectWithDeps([this.metadata, this.filterConstraint], ([metadata]) => {\n const fieldFilterMeta = this.tableData.filterMeta()?.[metadata.descriptor.property];\n const filterConstraint = this.filterConstraint();\n if (fieldFilterMeta && (!filterConstraint || filterConstraint.value !== fieldFilterMeta.value || filterConstraint.matchMode !== fieldFilterMeta.matchMode)) {\n this.setFilterConstraint(filterSetMetadataOnChange(fieldFilterMeta, fieldFilterMeta.matchMode, fieldFilterMeta.value, untracked(() => this.metadata().descriptor.filterType), untracked(() => this.metadata().dateConfig)));\n }\n });\n }\n ngOnDestroy() {\n if (this.overlay) {\n this.renderer.appendChild(this.el.nativeElement, this.overlay);\n ZIndexUtils.clear(this.overlay);\n this.onOverlayHide();\n }\n this.resetSubscription?.unsubscribe();\n this.overlaySubscription?.unsubscribe();\n }\n onTextModelChange(event) {\n const value = event.target.value;\n if (value === '') {\n this.updateFilterOnDisplayValueChange(value);\n }\n }\n onTextInputEnterKeyDown(event) {\n const value = event.target.value;\n this.updateFilterOnDisplayValueChange(value);\n event.preventDefault();\n }\n onNumericModelChange(value) {\n this.numericValueFromModelChange = value;\n if (value === null) {\n this.updateFilterOnDisplayValueChange(value);\n }\n }\n onNumericInputKeyDown(event) {\n if (event.key === 'Enter') {\n if (this.filterConstraint()?.displayMatchMode === FilterMatchMode.Between && Array.isArray(this.numericValueFromModelChange)) {\n const numberValues = this.numericValueFromModelChange.filter(v => typeof v === 'number');\n if (numberValues.length !== 2) {\n return;\n }\n }\n this.updateFilterOnDisplayValueChange(this.numericValueFromModelChange);\n event.preventDefault();\n }\n }\n onCheckboxModelChange(value) {\n this.updateFilterOnDisplayValueChange(value);\n }\n onDateFilterModelChange(value) {\n if (this.filterConstraint()?.displayMatchMode === FilterMatchMode.Between && Array.isArray(value)) {\n const dateValues = value.filter(v => v instanceof Date);\n if (dateValues.length !== 2) {\n return;\n }\n }\n this.dateDebounceSubject.next(value);\n }\n autocompleteFilter(value) {\n this.updateFilterOnDisplayValueChange(value);\n }\n dropdownFilter(value) {\n this.updateFilterOnDisplayValueChange(value);\n }\n onMatchModeChange(displayMatchMode) {\n if (this.filterConstraint()?.displayMatchMode === displayMatchMode) {\n return;\n }\n this.setFilterConstraint(filterSetMetadataOnDisplayChange(this.filterConstraint(), displayMatchMode, filterAdjustDisplayValueOnMatchModeChange(displayMatchMode, this.filterConstraint()?.displayValue), this.metadata().descriptor.filterType, this.metadata().dateConfig));\n this.hideOverlay();\n }\n onMatchModeKeyDown(event) {\n const item = event.target;\n switch (event.key) {\n case 'ArrowDown':\n // eslint-disable-next-line no-case-declarations\n const nextItem = this.findNextMenuModeItem(item);\n if (nextItem) {\n item.removeAttribute('tabindex');\n nextItem.tabIndex = '0';\n nextItem.focus();\n }\n event.preventDefault();\n break;\n case 'ArrowUp':\n // eslint-disable-next-line no-case-declarations\n const prevItem = this.findPrevMenuModeItem(item);\n if (prevItem) {\n item.removeAttribute('tabindex');\n prevItem.tabIndex = '0';\n prevItem.focus();\n }\n event.preventDefault();\n break;\n }\n }\n onRowClearItemClick() {\n this.clearFilter();\n this.hideOverlay();\n }\n toggleMenu(event) {\n this.overlayVisible.set(!this.overlayVisible());\n event.stopPropagation();\n }\n onToggleButtonKeyDown(event) {\n switch (event.key) {\n case 'Escape':\n case 'Tab':\n this.overlayVisible.set(false);\n break;\n case 'ArrowDown':\n if (this.overlayVisible()) {\n const focusable = DomHandler.getFocusableElements(this.overlay);\n if (focusable) {\n focusable[0].focus();\n }\n event.preventDefault();\n }\n else if (event.altKey) {\n this.overlayVisible.set(true);\n event.preventDefault();\n }\n break;\n }\n }\n onEscape() {\n this.overlayVisible.set(false);\n }\n onContentClick() {\n this.selfClick = true;\n }\n // onOverlayAnimationStart(event: AnimationEvent) {\n onOverlayAnimationStart(event) {\n switch (event.toState) {\n case 'visible':\n this.overlay = event.element;\n this.renderer.appendChild(this.document.body, this.overlay);\n ZIndexUtils.set('overlay', this.overlay, this.tableMetadata.primeConfig.zIndex.overlay);\n DomHandler.absolutePosition(this.overlay, this.icon()?.nativeElement);\n this.bindDocumentClickListener();\n this.bindDocumentResizeListener();\n this.bindScrollListener();\n this.overlayEventListener = (e) => {\n if (this.overlay && this.overlay.contains(e.target)) {\n this.selfClick = true;\n }\n };\n this.overlaySubscription = this.overlayService.clickObservable.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(this.overlayEventListener);\n break;\n case 'void':\n this.onOverlayHide();\n this.overlaySubscription?.unsubscribe();\n break;\n }\n }\n // onOverlayAnimationEnd(event: AnimationEvent) {\n onOverlayAnimationEnd(event) {\n switch (event.toState) {\n case 'void':\n ZIndexUtils.clear(event.element);\n break;\n }\n }\n get noFilterLabel() {\n return this.tableMetadata.primeConfig.getTranslation(TranslationKeys.NO_FILTER);\n }\n clearFilter() {\n this.initFilterConstraint(true);\n this.primeTable._filter();\n this.hideOverlay();\n }\n findNextMenuModeItem(item) {\n const nextItem = item.nextElementSibling;\n if (nextItem)\n return DomHandler.hasClass(nextItem, 'p-column-filter-separator') ? this.findNextMenuModeItem(nextItem) : nextItem;\n else\n return item.parentElement?.firstElementChild;\n }\n findPrevMenuModeItem(item) {\n const prevItem = item.previousElementSibling;\n if (prevItem)\n return DomHandler.hasClass(prevItem, 'p-column-filter-separator') ? this.findPrevMenuModeItem(prevItem) : prevItem;\n else\n return item.parentElement?.lastElementChild;\n }\n isOutsideClicked(event) {\n return !(this.overlay?.isSameNode(event.target) ||\n this.overlay?.contains(event.target) ||\n this.icon()?.nativeElement.isSameNode(event.target) ||\n this.icon()?.nativeElement.contains(event.target) ||\n DomHandler.hasClass(event.target, 'p-column-filter-add-button') ||\n DomHandler.hasClass(event.target.parentElement, 'p-column-filter-add-button') ||\n DomHandler.hasClass(event.target, 'p-column-filter-remove-button') ||\n DomHandler.hasClass(event.target.parentElement, 'p-column-filter-remove-button'));\n }\n bindDocumentClickListener() {\n if (!this.documentClickListener) {\n const documentTarget = this.el ? this.el.nativeElement.ownerDocument : 'document';\n this.documentClickListener = this.renderer.listen(documentTarget, 'click', event => {\n if (this.overlayVisible() && !this.selfClick && this.isOutsideClicked(event)) {\n this.hideOverlay();\n }\n this.selfClick = false;\n });\n }\n }\n unbindDocumentClickListener() {\n if (this.documentClickListener) {\n this.documentClickListener();\n this.documentClickListener = null;\n this.selfClick = false;\n }\n }\n bindDocumentResizeListener() {\n if (!this.documentResizeListener) {\n this.documentResizeListener = this.renderer.listen(this.window, 'resize', () => {\n if (this.overlayVisible() && !DomHandler.isTouchDevice()) {\n this.hideOverlay();\n }\n });\n }\n }\n unbindDocumentResizeListener() {\n if (this.documentResizeListener) {\n this.documentResizeListener();\n this.documentResizeListener = null;\n }\n }\n bindScrollListener() {\n if (!this.scrollHandler) {\n this.scrollHandler = new ConnectedOverlayScrollHandler(this.icon()?.nativeElement, () => {\n if (this.overlayVisible()) {\n this.hideOverlay();\n }\n });\n }\n this.scrollHandler.bindScrollListener();\n }\n unbindScrollListener() {\n if (this.scrollHandler) {\n this.scrollHandler.unbindScrollListener();\n }\n }\n hideOverlay() {\n this.overlayVisible.set(false);\n this.cd.markForCheck();\n }\n onOverlayHide() {\n this.unbindDocumentClickListener();\n this.unbindDocumentResizeListener();\n this.unbindScrollListener();\n this.overlay = null;\n }\n updateFilterOnDisplayValueChange(displayValue) {\n this.setFilterConstraint(filterSetMetadataOnDisplayChange(this.filterConstraint(), this.filterConstraint()?.displayMatchMode ?? this.metadata().defaultMatchMode, displayValue, this.metadata().descriptor.filterType, this.metadata().dateConfig));\n }\n initFilterConstraint(reset = false) {\n if (reset) {\n this.primeTable.filters[this.metadata().descriptor.property] = { value: null, matchMode: this.metadata().defaultMatchMode };\n }\n // set internal filter constraint\n let metadata = this.primeTable.filters[this.metadata().descriptor.property];\n if (Array.isArray(metadata)) {\n metadata = metadata[0];\n }\n this.setFilterConstraint(filterSetMetadataOnChange(metadata, metadata?.matchMode, metadata?.value, this.metadata().descriptor.filterType, this.metadata().dateConfig));\n }\n setFilterConstraint(metadata) {\n if (metadata && !metadata.displayMatchMode)\n metadata.displayMatchMode = metadata.matchMode;\n if (metadata && !metadata.displayValue)\n metadata.displayValue = metadata.value;\n this.filterConstraint.set(metadata);\n this.primeTable.filters[this.metadata().descriptor.property] = this.filterConstraint();\n this.primeTable._filter();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableColumnFilterComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.7\", type: TableColumnFilterComponent, isStandalone: true, selector: \"mng-table-column-filter\", inputs: { metadata: { classPropertyName: \"metadata\", publicName: \"metadata\", isSignal: true, isRequired: true, transformFunction: null } }, viewQueries: [{ propertyName: \"icon\", first: true, predicate: [\"icon\"], descendants: true, isSignal: true }], ngImport: i0, template: \"<div class=\\\"flex items-center\\\">\\n @switch (metadata().descriptor.filterType) {\\n @case (FilterTypeEnum.Number) {\\n @if (filterConstraint()?.displayMatchMode === 'between') {\\n <mng-number-range\\n vertical=\\\"true\\\"\\n className=\\\"mng-column-filter-number-input\\\"\\n [ngModel]=\\\"filterConstraint()?.displayValue\\\"\\n (ngModelChange)=\\\"onNumericModelChange($event)\\\"\\n (keyDown)=\\\"onNumericInputKeyDown($event)\\\"\\n [placeholder]=\\\"metadata().descriptor.placeholder ?? 'mngTable.typeToFilter' | translate\\\"\\n [useGrouping]=\\\"metadata().descriptor.numberUseGrouping\\\"\\n [minFractionDigits]=\\\"metadata().numberConfig?.fractionsMin\\\"\\n [maxFractionDigits]=\\\"metadata().numberConfig?.fractionsMax\\\"\\n [disabled]=\\\"isInputDisabled()\\\" />\\n } @else {\\n <p-inputNumber\\n inputStyleClass=\\\"mng-column-filter-number-input\\\"\\n [ngModel]=\\\"filterConstraint()?.displayValue\\\"\\n (ngModelChange)=\\\"onNumericModelChange($event)\\\"\\n (onKeyDown)=\\\"onNumericInputKeyDown($event)\\\"\\n [placeholder]=\\\"metadata().descriptor.placeholder ?? 'mngTable.typeToFilter' | translate\\\"\\n [useGrouping]=\\\"metadata().descriptor.numberUseGrouping\\\"\\n [minFractionDigits]=\\\"metadata().numberConfig?.fractionsMin\\\"\\n [maxFractionDigits]=\\\"metadata().numberConfig?.fractionsMax\\\"\\n [disabled]=\\\"isInputDisabled()\\\" />\\n }\\n }\\n\\n @case (FilterTypeEnum.Boolean) {\\n <p-checkbox [ngModel]=\\\"filterConstraint()?.displayValue\\\" binary=\\\"true\\\" (ngModelChange)=\\\"onCheckboxModelChange($event)\\\"></p-checkbox>\\n }\\n @case (FilterTypeEnum.Date) {\\n @if (filterConstraint()?.displayMatchMode === FilterMatchMode.Between) {\\n <mng-date-range\\n vertical=\\\"true\\\"\\n [ngModel]=\\\"filterConstraint()?.displayValue\\\"\\n (ngModelChange)=\\\"onDateFilterModelChange($event)\\\"\\n [showTime]=\\\"metadata().dateConfig?.showTime ?? false\\\"\\n [showSeconds]=\\\"metadata().dateConfig?.showSeconds ?? false\\\"\\n [dateFormat]=\\\"metadata().dateConfig?.format\\\"\\n [placeholder]=\\\"metadata().descriptor.placeholder ?? 'mngTable.typeToFilter' | translate\\\"\\n [disabled]=\\\"isInputDisabled()\\\"></mng-date-range>\\n } @else {\\n <p-date-picker\\n appendTo=\\\"body\\\"\\n [ngModel]=\\\"filterConstraint()?.displayValue\\\"\\n (ngModelChange)=\\\"onDateFilterModelChange($event)\\\"\\n [placeholder]=\\\"metadata().descriptor.placeholder ?? 'mngTable.typeToFilter' | translate\\\"\\n [showIcon]=\\\"true\\\"\\n [showTime]=\\\"metadata().dateConfig?.showTime ?? false\\\"\\n [showSeconds]=\\\"metadata().dateConfig?.showSeconds ?? false\\\"\\n [dateFormat]=\\\"metadata().dateConfig?.format\\\"\\n [firstDayOfWeek]=\\\"1\\\">\\n </p-date-picker>\\n }\\n }\\n @case (FilterTypeEnum.Lookup) {\\n <ng-container *ngTemplateOutlet=\\\"lookupFilter\\\" />\\n }\\n @case (FilterTypeEnum.LookupEnum) {\\n <ng-container *ngTemplateOutlet=\\\"lookupFilter\\\" />\\n }\\n @default {\\n <input\\n type=\\\"text\\\"\\n pInputText\\n class=\\\"mng-column-filter-string-input\\\"\\n [value]=\\\"filterConstraint()?.displayValue\\\"\\n [disabled]=\\\"isInputDisabled()\\\"\\n (input)=\\\"onTextModelChange($event)\\\"\\n (keydown.enter)=\\\"onTextInputEnterKeyDown($event)\\\"\\n [attr.placeholder]=\\\"metadata().descriptor.placeholder ?? 'mngTable.typeToFilter' | translate\\\"\\n [mngInputTrim]=\\\"metadata().descriptor.trimOption\\\" />\\n }\\n }\\n\\n <ng-template #lookupFilter>\\n @if (descriptorAsLookup(); as lookup) {\\n @switch (lookup.lookupType) {\\n @case (lookupTypeAutocomplete) {\\n <mng-autocomplete\\n *mngRerender=\\\"isMultiselect()\\\"\\n [ngModel]=\\\"filterConstraint()?.displayValue\\\"\\n [dataProvider]=\\\"lookup.dataProvider\\\"\\n [optionsTrackProperty]=\\\"lookup.optionsValueProperty\\\"\\n [optionsValueProperty]=\\\"lookup.optionsValueProperty\\\"\\n [optionsLabelProperty]=\\\"lookup.optionsLabelProperty\\\"\\n [optionsLabelTranslate]=\\\"lookup.optionsLabelTranslate\\\"\\n [multiselect]=\\\"isMultiselect()\\\"\\n [autoClear]=\\\"lookup.autocompleteAutoClear ?? false\\\"\\n [openOnFocus]=\\\"lookup.autocompleteAutoClear ?? true\\\"\\n [inlineSearch]=\\\"lookup.autocompleteInlineSearch ?? false\\\"\\n [placeholder]=\\\"metadata().descriptor.placeholder ?? 'mngTable.searchToFilter' | translate\\\"\\n [className]=\\\"lookup.className\\\"\\n [dropdownClassName]=\\\"lookup.dropdownClassName\\\"\\n [disabled]=\\\"isInputDisabled()\\\"\\n (valueChange)=\\\"autocompleteFilter($event)\\\"\\n [searchTrim]=\\\"metadata().descriptor.trimOption\\\">\\n </mng-autocomplete>\\n }\\n @case (lookupTypeDropdown) {\\n <mng-dropdown\\n *mngRerender=\\\"isMultiselect()\\\"\\n [ngModel]=\\\"filterConstraint()?.displayValue\\\"\\n [dataProvider]=\\\"lookup.dataProvider\\\"\\n [optionsValueProperty]=\\\"lookup.optionsValueProperty\\\"\\n [optionsLabelProperty]=\\\"lookup.optionsLabelProperty\\\"\\n [optionsLabelTranslate]=\\\"lookup.optionsLabelTranslate\\\"\\n [multiselect]=\\\"isMultiselect()\\\"\\n [placeholder]=\\\"metadata().descriptor.placeholder ?? 'mngTable.selectToFilter' | translate\\\"\\n [className]=\\\"lookup.className\\\"\\n [dropdownClassName]=\\\"lookup.dropdownClassName\\\"\\n [showClear]=\\\"false\\\"\\n [changeValueOnBlur]=\\\"isMultiselect()\\\"\\n [disabled]=\\\"isInputDisabled()\\\"\\n (valueChange)=\\\"dropdownFilter($event)\\\">\\n </mng-dropdown>\\n }\\n }\\n }\\n </ng-template>\\n\\n @if (matchModes().length > 1) {\\n <button\\n #icon\\n pButton\\n type=\\\"button\\\"\\n class=\\\"mng-button-xs mx-1\\\"\\n [class.hidden!]=\\\"!isFilterSet()\\\"\\n icon=\\\"pi pi-filter\\\"\\n rounded=\\\"true\\\"\\n severity=\\\"primary\\\"\\n (click)=\\\"toggleMenu($event)\\\"\\n (keydown)=\\\"onToggleButtonKeyDown($event)\\\"></button>\\n }\\n @if (overlayVisible()) {\\n <div\\n class=\\\"p-datatable-filter-overlay\\\"\\n (click)=\\\"onContentClick()\\\"\\n [@overlayAnimation]=\\\"'visible'\\\"\\n (@overlayAnimation.start)=\\\"onOverlayAnimationStart($event)\\\"\\n (@overlayAnimation.done)=\\\"onOverlayAnimationEnd($event)\\\"\\n (keydown.escape)=\\\"onEscape()\\\">\\n <ul class=\\\"p-datatable-filter-constraint-list\\\">\\n @for (matchMode of matchModes(); track matchMode; let i = $index) {\\n <li\\n class=\\\"p-datatable-filter-constraint\\\"\\n [class.p-datatable-filter-constraint-selected]=\\\"matchMode.value === filterConstraint()?.displayMatchMode\\\"\\n (click)=\\\"onMatchModeChange(matchMode.value)\\\"\\n (keydown)=\\\"onMatchModeKeyDown($event)\\\"\\n (keydown.enter)=\\\"this.onMatchModeChange(matchMode.value)\\\"\\n [attr.tabindex]=\\\"i === 0 ? '0' : null\\\">\\n {{ matchMode.label }}\\n </li>\\n }\\n <li class=\\\"p-datatable-filter-constraint-separator\\\"></li>\\n <li class=\\\"p-datatable-filter-constraint\\\" (click)=\\\"onRowClearItemClick()\\\" (keydown)=\\\"onMatchModeKeyDown($event)\\\" (keydown.enter)=\\\"onRowClearItemClick()\\\">\\n {{ noFilterLabel }}\\n </li>\\n </ul>\\n </div>\\n }\\n</div>\\n\", styles: [\".mng-column-filter-string{min-width:135px}.mng-column-filter-number{min-width:165px}.mng-column-filter-date{min-width:170px}.mng-column-filter-boolean{min-width:80px}.mng-column-filter-lookup,.mng-column-filter-lookupenum{min-width:180px}\\n\"], dependencies: [{ kind: \"ngmodule\", type: TableModule }, { kind: \"component\", type: DateRangeComponent, selector: \"mng-date-range\", inputs: [\"placeholder\", \"showTime\", \"showSeconds\", \"dateFormat\", \"className\", \"required\", \"disabled\", \"vertical\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: AutocompleteComponent, selector: \"mng-autocomplete\", inputs: [\"dataProvider\", \"optionsTrackProperty\", \"optionsValueProperty\", \"optionsLabelProperty\", \"optionsLabelTranslate\", \"inlineSearch\", \"openOnFocus\", \"multiselect\", \"placeholder\", \"className\", \"dropdownClassName\", \"showClear\", \"autoClear\", \"selectFirst\", \"searchTrim\", \"disabled\"], outputs: [\"valueChange\", \"blur\"] }, { kind: \"component\", type: DropdownComponent, selector: \"mng-dropdown\", inputs: [\"dataProvider\", \"options\", \"optionsTrackProperty\", \"optionsLabelProperty\", \"optionsLabelTranslate\", \"optionsValueProperty\", \"optionsDisabledProperty\", \"multiselect\", \"placeholder\", \"showClear\", \"selectFirstItem\", \"className\", \"dropdownClassName\", \"changeValueOnBlur\", \"loading\", \"disabled\", \"allowInput\", \"appendTo\", \"inlineSearch\", \"searchTrim\"], outputs: [\"valueChange\", \"blur\"] }, { kind: \"component\", type: InputNumber, selector: \"p-inputNumber, p-inputnumber, p-input-number\", inputs: [\"showButtons\", \"format\", \"buttonLayout\", \"inputId\", \"styleClass\", \"placeholder\", \"tabindex\", \"title\", \"ariaLabelledBy\", \"ariaDescribedBy\", \"ariaLabel\", \"ariaRequired\", \"autocomplete\", \"incrementButtonClass\", \"decrementButtonClass\", \"incrementButtonIcon\", \"decrementButtonIcon\", \"readonly\", \"allowEmpty\", \"locale\", \"localeMatcher\", \"mode\", \"currency\", \"currencyDisplay\", \"useGrouping\", \"minFractionDigits\", \"maxFractionDigits\", \"prefix\", \"suffix\", \"inputStyle\", \"inputStyleClass\", \"showClear\", \"autofocus\"], outputs: [\"onInput\", \"onFocus\", \"onBlur\", \"onKeyDown\", \"onClear\"] }, { kind: \"directive\", type: InputText, selector: \"[pInputText]\", inputs: [\"pSize\", \"variant\", \"fluid\", \"invalid\"] }, { kind: \"directive\", type: InputTrimDirective, selector: \"[mngInputTrim]\", inputs: [\"mngInputTrim\"] }, { kind: \"component\", type: NumberRangeComponent, selector: \"mng-number-range\", inputs: [\"placeholder\", \"useGrouping\", \"minFractionDigits\", \"maxFractionDigits\", \"required\", \"disabled\", \"vertical\"], outputs: [\"keyDown\"] }, { kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: Checkbox, selector: \"p-checkbox, p-checkBox, p-check-box\", inputs: [\"value\", \"binary\", \"ariaLabelledBy\", \"ariaLabel\", \"tabindex\", \"inputId\", \"inputStyle\", \"styleClass\", \"inputClass\", \"indeterminate\", \"formControl\", \"checkboxIcon\", \"readonly\", \"autofocus\", \"trueValue\", \"falseValue\", \"variant\", \"size\"], outputs: [\"onChange\", \"onFocus\", \"onBlur\"] }, { kind: \"directive\", type: RerenderDirective, selector: \"[mngRerender]\", inputs: [\"mngRerender\"] }, { kind: \"component\", type: DatePicker, selector: \"p-datePicker, p-datepicker, p-date-picker\", inputs: [\"iconDisplay\", \"styleClass\", \"inputStyle\", \"inputId\", \"inputStyleClass\", \"placeholder\", \"ariaLabelledBy\", \"ariaLabel\", \"iconAriaLabel\", \"dateFormat\", \"multipleSeparator\", \"rangeSeparator\", \"inline\", \"showOtherMonths\", \"selectOtherMonths\", \"showIcon\", \"icon\", \"readonlyInput\", \"shortYearCutoff\", \"hourFormat\", \"timeOnly\", \"stepHour\", \"stepMinute\", \"stepSecond\", \"showSeconds\", \"showOnFocus\", \"showWeek\", \"startWeekFromFirstDayOfYear\", \"showClear\", \"dataType\", \"selectionMode\", \"maxDateCount\", \"showButtonBar\", \"todayButtonStyleClass\", \"clearButtonStyleClass\", \"autofocus\", \"autoZIndex\", \"baseZIndex\", \"panelStyleClass\", \"panelStyle\", \"keepInvalid\", \"hideOnDateTimeSelect\", \"touchUI\", \"timeSeparator\", \"focusTrap\", \"showTransitionOptions\", \"hideTransitionOptions\", \"tabindex\", \"minDate\", \"maxDate\", \"disabledDates\", \"disabledDays\", \"showTime\", \"responsiveOptions\", \"numberOfMonths\", \"firstDayOfWeek\", \"view\", \"defaultDate\", \"appendTo\"], outputs: [\"onFocus\", \"onBlur\", \"onClose\", \"onSelect\", \"onClear\", \"onInput\", \"onTodayClick\", \"onClearClick\", \"onMonthChange\", \"onYearChange\", \"onClickOutside\", \"onShow\"] }, { kind: \"directive\", type: ButtonDirective, selector: \"[pButton]\", inputs: [\"iconPos\", \"loadingIcon\", \"loading\", \"severity\", \"raised\", \"rounded\", \"text\", \"outlined\", \"size\", \"plain\", \"fluid\", \"label\", \"icon\", \"buttonProps\"] }, { kind: \"pipe\", type: TranslatePipe, name: \"translate\" }], animations: [\n trigger('overlayAnimation', [\n transition(':enter', [style({ opacity: 0, transform: 'scaleY(0.8)' }), animate('.12s cubic-bezier(0, 0, 0.2, 1)')]),\n transition(':leave', [animate('.1s linear', style({ opacity: 0 }))])\n ])\n ], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableColumnFilterComponent, decorators: [{\n type: Component,\n args: [{ selector: 'mng-table-column-filter', imports: [\n TableModule,\n TranslatePipe,\n DateRangeComponent,\n FormsModule,\n AutocompleteComponent,\n DropdownComponent,\n InputNumber,\n InputText,\n InputTrimDirective,\n NumberRangeComponent,\n NgTemplateOutlet,\n Checkbox,\n RerenderDirective,\n DatePicker,\n ButtonDirective\n ], animations: [\n trigger('overlayAnimation', [\n transition(':enter', [style({ opacity: 0, transform: 'scaleY(0.8)' }), animate('.12s cubic-bezier(0, 0, 0.2, 1)')]),\n transition(':leave', [animate('.1s linear', style({ opacity: 0 }))])\n ])\n ], encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: \"<div class=\\\"flex items-center\\\">\\n @switch (metadata().descriptor.filterType) {\\n @case (FilterTypeEnum.Number) {\\n @if (filterConstraint()?.displayMatchMode === 'between') {\\n <mng-number-range\\n vertical=\\\"true\\\"\\n className=\\\"mng-column-filter-number-input\\\"\\n [ngModel]=\\\"filterConstraint()?.displayValue\\\"\\n (ngModelChange)=\\\"onNumericModelChange($event)\\\"\\n (keyDown)=\\\"onNumericInputKeyDown($event)\\\"\\n [placeholder]=\\\"metadata().descriptor.placeholder ?? 'mngTable.typeToFilter' | translate\\\"\\n [useGrouping]=\\\"metadata().descriptor.numberUseGrouping\\\"\\n [minFractionDigits]=\\\"metadata().numberConfig?.fractionsMin\\\"\\n [maxFractionDigits]=\\\"metadata().numberConfig?.fractionsMax\\\"\\n [disabled]=\\\"isInputDisabled()\\\" />\\n } @else {\\n <p-inputNumber\\n inputStyleClass=\\\"mng-column-filter-number-input\\\"\\n [ngModel]=\\\"filterConstraint()?.displayValue\\\"\\n (ngModelChange)=\\\"onNumericModelChange($event)\\\"\\n (onKeyDown)=\\\"onNumericInputKeyDown($event)\\\"\\n [placeholder]=\\\"metadata().descriptor.placeholder ?? 'mngTable.typeToFilter' | translate\\\"\\n [useGrouping]=\\\"metadata().descriptor.numberUseGrouping\\\"\\n [minFractionDigits]=\\\"metadata().numberConfig?.fractionsMin\\\"\\n [maxFractionDigits]=\\\"metadata().numberConfig?.fractionsMax\\\"\\n [disabled]=\\\"isInputDisabled()\\\" />\\n }\\n }\\n\\n @case (FilterTypeEnum.Boolean) {\\n <p-checkbox [ngModel]=\\\"filterConstraint()?.displayValue\\\" binary=\\\"true\\\" (ngModelChange)=\\\"onCheckboxModelChange($event)\\\"></p-checkbox>\\n }\\n @case (FilterTypeEnum.Date) {\\n @if (filterConstraint()?.displayMatchMode === FilterMatchMode.Between) {\\n <mng-date-range\\n vertical=\\\"true\\\"\\n [ngModel]=\\\"filterConstraint()?.displayValue\\\"\\n (ngModelChange)=\\\"onDateFilterModelChange($event)\\\"\\n [showTime]=\\\"metadata().dateConfig?.showTime ?? false\\\"\\n [showSeconds]=\\\"metadata().dateConfig?.showSeconds ?? false\\\"\\n [dateFormat]=\\\"metadata().dateConfig?.format\\\"\\n [placeholder]=\\\"metadata().descriptor.placeholder ?? 'mngTable.typeToFilter' | translate\\\"\\n [disabled]=\\\"isInputDisabled()\\\"></mng-date-range>\\n } @else {\\n <p-date-picker\\n appendTo=\\\"body\\\"\\n [ngModel]=\\\"filterConstraint()?.displayValue\\\"\\n (ngModelChange)=\\\"onDateFilterModelChange($event)\\\"\\n [placeholder]=\\\"metadata().descriptor.placeholder ?? 'mngTable.typeToFilter' | translate\\\"\\n [showIcon]=\\\"true\\\"\\n [showTime]=\\\"metadata().dateConfig?.showTime ?? false\\\"\\n [showSeconds]=\\\"metadata().dateConfig?.showSeconds ?? false\\\"\\n [dateFormat]=\\\"metadata().dateConfig?.format\\\"\\n [firstDayOfWeek]=\\\"1\\\">\\n </p-date-picker>\\n }\\n }\\n @case (FilterTypeEnum.Lookup) {\\n <ng-container *ngTemplateOutlet=\\\"lookupFilter\\\" />\\n }\\n @case (FilterTypeEnum.LookupEnum) {\\n <ng-container *ngTemplateOutlet=\\\"lookupFilter\\\" />\\n }\\n @default {\\n <input\\n type=\\\"text\\\"\\n pInputText\\n class=\\\"mng-column-filter-string-input\\\"\\n [value]=\\\"filterConstraint()?.displayValue\\\"\\n [disabled]=\\\"isInputDisabled()\\\"\\n (input)=\\\"onTextModelChange($event)\\\"\\n (keydown.enter)=\\\"onTextInputEnterKeyDown($event)\\\"\\n [attr.placeholder]=\\\"metadata().descriptor.placeholder ?? 'mngTable.typeToFilter' | translate\\\"\\n [mngInputTrim]=\\\"metadata().descriptor.trimOption\\\" />\\n }\\n }\\n\\n <ng-template #lookupFilter>\\n @if (descriptorAsLookup(); as lookup) {\\n @switch (lookup.lookupType) {\\n @case (lookupTypeAutocomplete) {\\n <mng-autocomplete\\n *mngRerender=\\\"isMultiselect()\\\"\\n [ngModel]=\\\"filterConstraint()?.displayValue\\\"\\n [dataProvider]=\\\"lookup.dataProvider\\\"\\n [optionsTrackProperty]=\\\"lookup.optionsValueProperty\\\"\\n [optionsValueProperty]=\\\"lookup.optionsValueProperty\\\"\\n [optionsLabelProperty]=\\\"lookup.optionsLabelProperty\\\"\\n [optionsLabelTranslate]=\\\"lookup.optionsLabelTranslate\\\"\\n [multiselect]=\\\"isMultiselect()\\\"\\n [autoClear]=\\\"lookup.autocompleteAutoClear ?? false\\\"\\n [openOnFocus]=\\\"lookup.autocompleteAutoClear ?? true\\\"\\n [inlineSearch]=\\\"lookup.autocompleteInlineSearch ?? false\\\"\\n [placeholder]=\\\"metadata().descriptor.placeholder ?? 'mngTable.searchToFilter' | translate\\\"\\n [className]=\\\"lookup.className\\\"\\n [dropdownClassName]=\\\"lookup.dropdownClassName\\\"\\n [disabled]=\\\"isInputDisabled()\\\"\\n (valueChange)=\\\"autocompleteFilter($event)\\\"\\n [searchTrim]=\\\"metadata().descriptor.trimOption\\\">\\n </mng-autocomplete>\\n }\\n @case (lookupTypeDropdown) {\\n <mng-dropdown\\n *mngRerender=\\\"isMultiselect()\\\"\\n [ngModel]=\\\"filterConstraint()?.displayValue\\\"\\n [dataProvider]=\\\"lookup.dataProvider\\\"\\n [optionsValueProperty]=\\\"lookup.optionsValueProperty\\\"\\n [optionsLabelProperty]=\\\"lookup.optionsLabelProperty\\\"\\n [optionsLabelTranslate]=\\\"lookup.optionsLabelTranslate\\\"\\n [multiselect]=\\\"isMultiselect()\\\"\\n [placeholder]=\\\"metadata().descriptor.placeholder ?? 'mngTable.selectToFilter' | translate\\\"\\n [className]=\\\"lookup.className\\\"\\n [dropdownClassName]=\\\"lookup.dropdownClassName\\\"\\n [showClear]=\\\"false\\\"\\n [changeValueOnBlur]=\\\"isMultiselect()\\\"\\n [disabled]=\\\"isInputDisabled()\\\"\\n (valueChange)=\\\"dropdownFilter($event)\\\">\\n </mng-dropdown>\\n }\\n }\\n }\\n </ng-template>\\n\\n @if (matchModes().length > 1) {\\n <button\\n #icon\\n pButton\\n type=\\\"button\\\"\\n class=\\\"mng-button-xs mx-1\\\"\\n [class.hidden!]=\\\"!isFilterSet()\\\"\\n icon=\\\"pi pi-filter\\\"\\n rounded=\\\"true\\\"\\n severity=\\\"primary\\\"\\n (click)=\\\"toggleMenu($event)\\\"\\n (keydown)=\\\"onToggleButtonKeyDown($event)\\\"></button>\\n }\\n @if (overlayVisible()) {\\n <div\\n class=\\\"p-datatable-filter-overlay\\\"\\n (click)=\\\"onContentClick()\\\"\\n [@overlayAnimation]=\\\"'visible'\\\"\\n (@overlayAnimation.start)=\\\"onOverlayAnimationStart($event)\\\"\\n (@overlayAnimation.done)=\\\"onOverlayAnimationEnd($event)\\\"\\n (keydown.escape)=\\\"onEscape()\\\">\\n <ul class=\\\"p-datatable-filter-constraint-list\\\">\\n @for (matchMode of matchModes(); track matchMode; let i = $index) {\\n <li\\n class=\\\"p-datatable-filter-constraint\\\"\\n [class.p-datatable-filter-constraint-selected]=\\\"matchMode.value === filterConstraint()?.displayMatchMode\\\"\\n (click)=\\\"onMatchModeChange(matchMode.value)\\\"\\n (keydown)=\\\"onMatchModeKeyDown($event)\\\"\\n (keydown.enter)=\\\"this.onMatchModeChange(matchMode.value)\\\"\\n [attr.tabindex]=\\\"i === 0 ? '0' : null\\\">\\n {{ matchMode.label }}\\n </li>\\n }\\n <li class=\\\"p-datatable-filter-constraint-separator\\\"></li>\\n <li class=\\\"p-datatable-filter-constraint\\\" (click)=\\\"onRowClearItemClick()\\\" (keydown)=\\\"onMatchModeKeyDown($event)\\\" (keydown.enter)=\\\"onRowClearItemClick()\\\">\\n {{ noFilterLabel }}\\n </li>\\n </ul>\\n </div>\\n }\\n</div>\\n\", styles: [\".mng-column-filter-string{min-width:135px}.mng-column-filter-number{min-width:165px}.mng-column-filter-date{min-width:170px}.mng-column-filter-boolean{min-width:80px}.mng-column-filter-lookup,.mng-column-filter-lookupenum{min-width:180px}\\n\"] }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLWZpbHRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi90YWJsZS9zcmMvY29tcG9uZW50cy9jb2x1bW4tZmlsdGVyL2NvbHVtbi1maWx0ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vdGFibGUvc3JjL2NvbXBvbmVudHMvY29sdW1uLWZpbHRlci9jb2x1bW4tZmlsdGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFFVixTQUFTLEVBQ1QsaUJBQWlCLEVBQ2pCLFFBQVEsRUFDUixNQUFNLEVBQ04sS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzQyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFDLGNBQWMsRUFBRSxlQUFlLEVBQUMsTUFBTSxhQUFhLENBQUM7QUFDNUQsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQy9DLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQyxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDOUMsT0FBTyxFQUFDLDZCQUE2QixFQUFFLFVBQVUsRUFBQyxNQUFN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Q3JCLGlCQUFpQjt3QkFDakIsV0FBVzt3QkFDWCxTQUFTO3dCQUNULGtCQUFrQjt3QkFDbEIsb0JBQW9CO3dCQUNwQixnQkFBZ0I7d0JBQ2hCLFFBQVE7d0JBQ1IsaUJBQWlCO3dCQUNqQixVQUFVO3dCQUNWLGVBQWU7cUJBQ2xCLGNBR1c7d0JBQ1IsT0FBTyxDQUFDLGtCQUFrQixFQUFFOzRCQUN4QixVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUMsT0FBTyxFQUFFLENBQUMsRUFBRSxTQUFTLEVBQUUsYUFBYSxFQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsaUNBQWlDLENBQUMsQ0FBQyxDQUFDOzRCQUNqSCxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsRUFBQyxPQUFPLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7eUJBQ3JFLENBQUM7cUJBQ0wsaUJBQ2MsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7YW5pbWF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXJ9IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHtOZ1RlbXBsYXRlT3V0bGV0fSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBDb21wb25lbnQsXG4gICAgRGVzdHJveVJlZixcbiAgICBFbGVtZW50UmVmLFxuICAgIE9uRGVzdHJveSxcbiAgICBSZW5kZXJlcjIsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG4gICAgY29tcHV0ZWQsXG4gICAgaW5qZWN0LFxuICAgIGlucHV0LFxuICAgIHNpZ25hbCxcbiAgICB1bnRyYWNrZWQsXG4gICAgdmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtUcmFuc2xhdGVQaXBlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7T3ZlcmxheVNlcnZpY2UsIFRyYW5zbGF0aW9uS2V5c30gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtCdXR0b25EaXJlY3RpdmV9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcbmltcG9ydCB7Q2hlY2tib3h9IGZyb20gJ3ByaW1lbmcvY2hlY2tib3gnO1xuaW1wb3J0IHtEYXRlUGlja2VyfSBmcm9tICdwcmltZW5nL2RhdGVwaWNrZXInO1xuaW1wb3J0IHtDb25uZWN0ZWRPdmVybGF5U2Nyb2xsSGFuZGxlciwgRG9tSGFuZGxlcn0gZnJvbSAncHJpbWVuZy9kb20nO1xuaW1wb3J0IHtJbnB1dE51bWJlcn0gZnJvbSAncHJpbWVuZy9pbnB1dG51bWJlcic7XG5pbXBvcnQge0lucHV0VGV4dH0gZnJvbSAncHJpbWVuZy9pbnB1dHRleHQnO1xuaW1wb3J0IHtUYWJsZSwgVGFibGVNb2R1bGV9IGZyb20gJ3ByaW1lbmcvdGFibGUnO1xuaW1wb3J0IHtOdWxsYWJsZSwgVm9pZExpc3RlbmVyfSBmcm9tICdwcmltZW5nL3RzLWhlbHBlcnMnO1xuaW1wb3J0IHtaSW5kZXhVdGlsc30gZnJvbSAncHJpbWVuZy91dGlscyc7XG5pbXBvcnQge1N1YmplY3QsIFN1YnNjcmlwdGlvbiwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7Q29tbW9uc0ZpbHRlck1ldGFkYXRhLCBGaWx0ZXJNYXRjaE1vZGUsIEZpbHRlck1hdGNoTW9kZUV4dGVuZGVkVHlwZSwgUmVyZW5kZXJEaXJlY3RpdmUsIGVmZmVjdFdpdGhEZXBzfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtGaWx0ZXJMb29rdXBEZXNjcmlwdG9yLCBGaWx0ZXJMb29rdXBUeXBlRW51bSwgRmlsdGVyVHlwZUVudW19IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvZmlsdGVyJztcbmltcG9ydCB7QXV0b2NvbXBsZXRlQ29tcG9uZW50LCBEYXRlUmFuZ2VDb21wb25lbnQsIERyb3Bkb3duQ29tcG9uZW50LCBJbnB1dFRyaW1EaXJlY3RpdmUsIE51bWJlclJhbmdlQ29tcG9uZW50fSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2Zvcm0nO1xuXG5pbXBvcnQge2ZpbHRlckFkanVzdERpc3BsYXlWYWx1ZU9uTWF0Y2hNb2RlQ2hhbmdlLCBmaWx0ZXJTZXRNZXRhZGF0YU9uQ2hhbmdlLCBmaWx0ZXJTZXRNZXRhZGF0YU9uRGlzcGxheUNoYW5nZX0gZnJvbSAnLi4vLi4vaGVscGVycy9maWx0ZXJzJztcbmltcG9ydCB7RmlsdGVyTWV0YWRhdGF9IGZyb20gJy4uLy4uL21vZGVscy9maWx0ZXIubW9kZWwnO1xuaW1wb3J0IHtUYWJsZURhdGFTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90YWJsZS1kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHtUYWJsZU1ldGFkYXRhU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGFibGUtbWV0YWRhdGEuc2VydmljZSc7XG5cbi8qKlxuICogQ2Fubm90IGJlIG9uIHB1c2ggY2hhbmdlIGRldGVjdGlvbiBzdHJhdGVneSBiZWNhdXNlIG9mIGZpbHRlciB1cGRhdGVzIHRyaWdnZXJlZCBmcm9tIHJvdXRlIHdoaWNoIGNhdXNlcyB0byBmb3JjZSB1cGRhdGUgdmFsdWVzIGluIGZvcmNlIG1ldGFkYXRhXG4gKiBhbmQgdGhlc2UgbXVzdCBiZSBwcm9wYWdhdGVkIHRocm91Z2ggdG8gdGhpcyBjb21wb25lbnQgYW5kIGJleW9uZCB0byBwcmltZU5HLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ21uZy10YWJsZS1jb2x1bW4tZmlsdGVyJyxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIFRhYmxlTW9kdWxlLFxuICAgICAgICBUcmFuc2xhdGVQaXBlLFxuICAgICAgICBEYXRlUmFuZ2VDb21wb25lbnQsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBBdXRvY29tcGxldGVDb21wb25lbnQsXG4gICAgICAgIERyb3Bkb3duQ29tcG9uZW50LFxuICAgICAgICBJbnB1dE51bWJlcixcbiAgICAgICAgSW5wdXRUZXh0LFxuICAgICAgICBJbnB1dFRyaW1EaXJlY3RpdmUsXG4gICAgICAgIE51bWJlclJhbmdlQ29tcG9uZW50LFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBDaGVja2JveCxcbiAgICAgICAgUmVyZW5kZXJEaXJlY3RpdmUsXG4gICAgICAgIERhdGVQaWNrZXIsXG4gICAgICAgIEJ1dHRvbkRpcmVjdGl2ZVxuICAgIF0sXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvbHVtbi1maWx0ZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NvbHVtbi1maWx0ZXIuY29tcG9uZW50LmNzcyddLFxuICAgIGFuaW1hdGlvbnM6IFtcbiAgICAgICAgdHJpZ2dlcignb3ZlcmxheUFuaW1hdGlvbicsIFtcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJzplbnRlcicsIFtzdHlsZSh7b3BhY2l0eTogMCwgdHJhbnNmb3JtOiAnc2NhbGVZKDAuOCknfSksIGFuaW1hdGUoJy4xMnMgY3ViaWMtYmV6aWVyKDAsIDAsIDAuMiwgMSknKV0pLFxuICAgICAgICAgICAgdHJhbnNpdGlvbignOmxlYXZlJywgW2FuaW1hdGUoJy4xcyBsaW5lYXInLCBzdHlsZSh7b3BhY2l0eTogMH0pKV0pXG4gICAgICAgIF0pXG4gICAgXSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29sdW1uRmlsdGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgbG9va3VwVHlwZURyb3Bkb3duOiBGaWx0ZXJMb29rdXBUeXBlRW51bSA9IEZpbHRlckxvb2t1cFR5cGVFbnVtLkRyb3Bkb3duO1xuICAgIHB1YmxpYyByZWFkb25seSBsb29rdXBUeXBlQXV0b2NvbXBsZXRlOiBGaWx0ZXJMb29rdXBUeXBlRW51bSA9IEZpbHRlckxvb2t1cFR5cGVFbnVtLkF1dG9jb21wbGV0ZTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgRmlsdGVyVHlwZUVudW0gPSBGaWx0ZXJUeXBlRW51bTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgRmlsdGVyTWF0Y2hNb2RlID0gRmlsdGVyTWF0Y2hNb2RlO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbCA9IGluamVjdChFbGVtZW50UmVmKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHByaW1lVGFibGUgPSBpbmplY3QoVGFibGUpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVuZGVyZXIgPSBpbmplY3QoUmVuZGVyZXIyKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IG92ZXJsYXlTZXJ2aWNlID0gaW5qZWN0KE92ZXJsYXlTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSB0YWJsZURhdGEgPSBpbmplY3QoVGFibGVEYXRhU2VydmljZTxhbnk+KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRhYmxlTWV0YWRhdGEgPSBpbmplY3QoVGFibGVNZXRhZGF0YVNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQ6IERvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuXG4gICAgcHVibGljIG1ldGFkYXRhID0gaW5wdXQucmVxdWlyZWQ8RmlsdGVyTWV0YWRhdGE+KCk7XG4gICAgcHVibGljIGRlc2NyaXB0b3JBc0xvb2t1cCA9IGNvbXB1dGVkKCgpID0+XG4gICAgICAgIHRoaXMubWV0YWRhdGEoKS5kZXNjcmlwdG9yIGluc3RhbmNlb2YgRmlsdGVyTG9va3VwRGVzY3JpcHRvciA/ICh0aGlzLm1ldGFkYXRhKCkuZGVzY3JpcHRvciBhcyBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yPGFueSwgYW55PikgOiB1bmRlZmluZWRcbiAgICApO1xuICAgIHByaXZhdGUgaWNvbiA9IHZpZXdDaGlsZDxOdWxsYWJsZTxFbGVtZW50UmVmPj4oJ2ljb24nKTtcblxuICAgIHB1YmxpYyBtYXRjaE1vZGVzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5tZXRhZGF0YSgpLm1hdGNoTW9kZXMpO1xuICAgIHB1YmxpYyBmaWx0ZXJDb25zdHJhaW50ID0gc2lnbmFsPENvbW1vbnNGaWx0ZXJNZXRhZGF0YSB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgICBwdWJsaWMgaXNGaWx0ZXJTZXQgPSBjb21wdXRlZChcbiAgICAgICAgKCkgPT5cbiAgICAgICAgICAgIHRoaXMuZmlsdGVyQ29uc3RyYWludCgpPy5tYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5FeGlzdHMgfHxcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyQ29uc3RyYWludCgpPy5tYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5Eb2VzTm90RXhpc3QgfHxcbiAgICAgICAgICAgICF0aGlzLnByaW1lVGFibGUuaXNGaWx0ZXJCbGFuayh0aGlzLmZpbHRlckNvbnN0cmFpbnQoKT8udmFsdWUpXG4gICAgKTtcbiAgICBwdWJsaWMgaXNJbnB1dERpc2FibGVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5maWx0ZXJDb25zdHJhaW50KCk/Lm1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkV4aXN0cyB8fCB0aGlzLmZpbHRlckNvbnN0cmFpbnQoKT8ubWF0Y2hNb2RlID09PSBGaWx0ZXJNYXRjaE1vZGUuRG9lc05vdEV4aXN0KTtcbiAgICBwdWJsaWMgb3ZlcmxheVZpc2libGUgPSBzaWduYWwoZmFsc2UpO1xuXG4gICAgLy8gZGlzcGxheSBjb25maWdzXG4gICAgcHVibGljIGlzTXVsdGlzZWxlY3QgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZ0ID0gdGhpcy5maWx0ZXJDb25zdHJhaW50KCk7XG4gICAgICAgIGNvbnN0IG1hdGNoTW9kZSA9IGZ0Py5kaXNwbGF5TWF0Y2hNb2RlID8/IHRoaXMubWV0YWRhdGEoKS5kZWZhdWx0TWF0Y2hNb2RlO1xuICAgICAgICByZXR1cm4gKG1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkluIHx8IG1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLk5vdEluKSAmJiAoZnQ/LmRpc3BsYXlWYWx1ZSA9PSBudWxsIHx8IEFycmF5LmlzQXJyYXkoZnQuZGlzcGxheVZhbHVlKSk7XG4gICAgfSk7XG5cbiAgICBwcml2YXRlIG92ZXJsYXlTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb247XG4gICAgcHJpdmF0ZSBvdmVybGF5OiBIVE1MRWxlbWVudCB8IHVuZGVmaW5lZCB8IG51bGw7XG4gICAgcHJpdmF0ZSBzY3JvbGxIYW5kbGVyPzogQ29ubmVjdGVkT3ZlcmxheVNjcm9sbEhhbmRsZXIgfCBudWxsO1xuICAgIHByaXZhdGUgZG9jdW1lbnRDbGlja0xpc3RlbmVyOiBWb2lkTGlzdGVuZXI7XG4gICAgcHJpdmF0ZSBkb2N1bWVudFJlc2l6ZUxpc3RlbmVyOiBWb2lkTGlzdGVuZXI7XG4gICAgcHJpdmF0ZSByZXNldFN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgICBwcml2YXRlIHNlbGZDbGljaz86IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBvdmVybGF5RXZlbnRMaXN0ZW5lcjogYW55O1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSB3aW5kb3cgPSB0aGlzLmRvY3VtZW50LmRlZmF1bHRWaWV3IGFzIFdpbmRvdztcblxuICAgIHByaXZhdGUgbnVtZXJpY1ZhbHVlRnJvbU1vZGVsQ2hhbmdlOiBudW1iZXIgfCBudW1iZXJbXSB8IG51bGwgPSBudWxsO1xuXG4gICAgcHJpdmF0ZSBkYXRlRGVib3VuY2VTdWJqZWN0ID0gbmV3IFN1YmplY3Q8RGF0ZSB8IERhdGVbXSB8IG51bGw+KCk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5kYXRlRGVib3VuY2VTdWJqZWN0LnBpcGUoZGVib3VuY2VUaW1lKDUwMCksIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHRha2VVbnRpbERlc3Ryb3llZCgpKS5zdWJzY3JpYmUodiA9PiB0aGlzLnVwZGF0ZUZpbHRlck9uRGlzcGxheVZhbHVlQ2hhbmdlKHYpKTtcblxuICAgICAgICBlZmZlY3RXaXRoRGVwcyhbdGhpcy5tZXRhZGF0YSwgdGhpcy5maWx0ZXJDb25zdHJhaW50XSwgKFttZXRhZGF0YV0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkRmlsdGVyTWV0YSA9IHRoaXMudGFibGVEYXRhLmZpbHRlck1ldGEoKT8uW21ldGFkYXRhLmRlc2NyaXB0b3IucHJvcGVydHldO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyQ29uc3RyYWludCA9IHRoaXMuZmlsdGVyQ29uc3RyYWludCgpO1xuICAgICAgICAgICAgaWYgKGZpZWxkRmlsdGVyTWV0YSAmJiAoIWZpbHRlckNvbnN0cmFpbnQgfHwgZmlsdGVyQ29uc3RyYWludC52YWx1ZSAhPT0gZmllbGRGaWx0ZXJNZXRhLnZhbHVlIHx8IGZpbHRlckNvbnN0cmFpbnQubWF0Y2hNb2RlICE9PSBmaWVsZEZpbHRlck1ldGEubWF0Y2hNb2RlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0RmlsdGVyQ29uc3RyYWludChcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyU2V0TWV0YWRhdGFPbkNoYW5nZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkRmlsdGVyTWV0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkRmlsdGVyTWV0YS5tYXRjaE1vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZEZpbHRlck1ldGEudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB1bnRyYWNrZWQoKCkgPT4gdGhpcy5tZXRhZGF0YSgpLmRlc2NyaXB0b3IuZmlsdGVyVHlwZSksXG4gICAgICAgICAgICAgICAgICAgICAgICB1bnRyYWNrZWQoKCkgPT4gdGhpcy5tZXRhZGF0YSgpLmRhdGVDb25maWcpXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgaWYgKHRoaXMub3ZlcmxheSkge1xuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZCh0aGlzLmVsLm5hdGl2ZUVsZW1lbnQsIHRoaXMub3ZlcmxheSk7XG4gICAgICAgICAgICBaSW5kZXhVdGlscy5jbGVhcih0aGlzLm92ZXJsYXkpO1xuICAgICAgICAgICAgdGhpcy5vbk92ZXJsYXlIaWRlKCk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlc2V0U3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICB0aGlzLm92ZXJsYXlTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgb25UZXh0TW9kZWxDaGFuZ2UoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gKGV2ZW50LnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcbiAgICAgICAgaWYgKHZhbHVlID09PSAnJykge1xuICAgICAgICAgICAgdGhpcy51cGRhdGVGaWx0ZXJPbkRpc3BsYXlWYWx1ZUNoYW5nZSh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblRleHRJbnB1dEVudGVyS2V5RG93bihldmVudDogRXZlbnQpIHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSAoZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlO1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbHRlck9uRGlzcGxheVZhbHVlQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICB9XG5cbiAgICBvbk51bWVyaWNNb2RlbENoYW5nZSh2YWx1ZTogbnVtYmVyIHwgbnVsbCkge1xuICAgICAgICB0aGlzLm51bWVyaWNWYWx1ZUZyb21Nb2RlbENoYW5nZSA9IHZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRmlsdGVyT25EaXNwbGF5VmFsdWVDaGFuZ2UodmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25OdW1lcmljSW5wdXRLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGlmIChldmVudC5rZXkgPT09ICdFbnRlcicpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlckNvbnN0cmFpbnQoKT8uZGlzcGxheU1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkJldHdlZW4gJiYgQXJyYXkuaXNBcnJheSh0aGlzLm51bWVyaWNWYWx1ZUZyb21Nb2RlbENoYW5nZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBudW1iZXJWYWx1ZXMgPSB0aGlzLm51bWVyaWNWYWx1ZUZyb21Nb2RlbENoYW5nZS5maWx0ZXIodiA9PiB0eXBlb2YgdiA9PT0gJ251bWJlcicpO1xuICAgICAgICAgICAgICAgIGlmIChudW1iZXJWYWx1ZXMubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUZpbHRlck9uRGlzcGxheVZhbHVlQ2hhbmdlKHRoaXMubnVtZXJpY1ZhbHVlRnJvbU1vZGVsQ2hhbmdlKTtcbiAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvbkNoZWNrYm94TW9kZWxDaGFuZ2UodmFsdWU6IGJvb2xlYW4gfCBudWxsKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRmlsdGVyT25EaXNwbGF5VmFsdWVDaGFuZ2UodmFsdWUpO1xuICAgIH1cblxuICAgIG9uRGF0ZUZpbHRlck1vZGVsQ2hhbmdlKHZhbHVlOiBEYXRlIHwgRGF0ZVtdIHwgbnVsbCkge1xuICAgICAgICBpZiAodGhpcy5maWx0ZXJDb25zdHJhaW50KCk/LmRpc3BsYXlNYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5CZXR3ZWVuICYmIEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRlVmFsdWVzID0gdmFsdWUuZmlsdGVyKHYgPT4gdiBpbnN0YW5jZW9mIERhdGUpO1xuICAgICAgICAgICAgaWYgKGRhdGVWYWx1ZXMubGVuZ3RoICE9PSAyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGF0ZURlYm91bmNlU3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICB9XG5cbiAgICBhdXRvY29tcGxldGVGaWx0ZXIodmFsdWU6IGFueSkge1xuICAgICAgICB0aGlzLnVwZGF0ZUZpbHRlck9uRGlzcGxheVZhbHVlQ2hhbmdlKHZhbHVlKTtcbiAgICB9XG5cbiAgICBkcm9wZG93bkZpbHRlcih2YWx1ZTogYW55KSB7XG4gICAgICAgIHRoaXMudXBkYXRlRmlsdGVyT25EaXNwbGF5VmFsdWVDaGFuZ2UodmFsdWUpO1xuICAgIH1cblxuICAgIG9uTWF0Y2hNb2RlQ2hhbmdlKGRpc3BsYXlNYXRjaE1vZGU6IEZpbHRlck1hdGNoTW9kZUV4dGVuZGVkVHlwZSkge1xuICAgICAgICBpZiAodGhpcy5maWx0ZXJDb25zdHJhaW50KCk/LmRpc3BsYXlNYXRjaE1vZGUgPT09IGRpc3BsYXlNYXRjaE1vZGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0RmlsdGVyQ29uc3RyYWludChcbiAgICAgICAgICAgIGZpbHRlclNldE1ldGFkYXRhT25EaXNwbGF5Q2hhbmdlKFxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyQ29uc3RyYWludCgpLFxuICAgICAgICAgICAgICAgIGRpc3BsYXlNYXRjaE1vZGUsXG4gICAgICAgICAgICAgICAgZmlsdGVyQWRqdXN0RGlzcGxheVZhbHVlT25NYXRjaE1vZGVDaGFuZ2UoZGlzcGxheU1hdGNoTW9kZSwgdGhpcy5maWx0ZXJDb25zdHJhaW50KCk/LmRpc3BsYXlWYWx1ZSksXG4gICAgICAgICAgICAgICAgdGhpcy5tZXRhZGF0YSgpLmRlc2NyaXB0b3IuZmlsdGVyVHlwZSxcbiAgICAgICAgICAgICAgICB0aGlzLm1ldGFkYXRhKCkuZGF0ZUNvbmZpZ1xuICAgICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmhpZGVPdmVybGF5KCk7XG4gICAgfVxuXG4gICAgb25NYXRjaE1vZGVLZXlEb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSA8SFRNTExJRWxlbWVudD5ldmVudC50YXJnZXQ7XG5cbiAgICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ0Fycm93RG93bic6XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNhc2UtZGVjbGFyYXRpb25zXG4gICAgICAgICAgICAgICAgY29uc3QgbmV4dEl0ZW0gPSB0aGlzLmZpbmROZXh0TWVudU1vZGVJdGVtKGl0ZW0pO1xuICAgICAgICAgICAgICAgIGlmIChuZXh0SXRlbSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLnJlbW92ZUF0dHJpYnV0ZSgndGFiaW5kZXgnKTtcbiAgICAgICAgICAgICAgICAgICAgbmV4dEl0ZW0udGFiSW5kZXggPSAnMCc7XG4gICAgICAgICAgICAgICAgICAgIG5leHRJdGVtLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnQXJyb3dVcCc6XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNhc2UtZGVjbGFyYXRpb25zXG4gICAgICAgICAgICAgICAgY29uc3QgcHJldkl0ZW0gPSB0aGlzLmZpbmRQcmV2TWVudU1vZGVJdGVtKGl0ZW0pO1xuICAgICAgICAgICAgICAgIGlmIChwcmV2SXRlbSkge1xuICAgICAgICAgICAgICAgICAgICBpdGVtLnJlbW92ZUF0dHJpYnV0ZSgndGFiaW5kZXgnKTtcbiAgICAgICAgICAgICAgICAgICAgcHJldkl0ZW0udGFiSW5kZXggPSAnMCc7XG4gICAgICAgICAgICAgICAgICAgIHByZXZJdGVtLmZvY3VzKCk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUm93Q2xlYXJJdGVtQ2xpY2soKSB7XG4gICAgICAgIHRoaXMuY2xlYXJGaWx0ZXIoKTtcbiAgICAgICAgdGhpcy5oaWRlT3ZlcmxheSgpO1xuICAgIH1cblxuICAgIHRvZ2dsZU1lbnUoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIHRoaXMub3ZlcmxheVZpc2libGUuc2V0KCF0aGlzLm92ZXJsYXlWaXNpYmxlKCkpO1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBvblRvZ2dsZUJ1dHRvbktleURvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAgICAgc3dpdGNoIChldmVudC5rZXkpIHtcbiAgICAgICAgICAgIGNhc2UgJ0VzY2FwZSc6XG4gICAgICAgICAgICBjYXNlICdUYWInOlxuICAgICAgICAgICAgICAgIHRoaXMub3ZlcmxheVZpc2libGUuc2V0KGZhbHNlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAnQXJyb3dEb3duJzpcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vdmVybGF5VmlzaWJsZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZvY3VzYWJsZSA9IERvbUhhbmRsZXIuZ2V0Rm9jdXNhYmxlRWxlbWVudHMoPEhUTUxFbGVtZW50PnRoaXMub3ZlcmxheSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmb2N1c2FibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzYWJsZVswXS5mb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5hbHRLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5vdmVybGF5VmlzaWJsZS5zZXQodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Fc2NhcGUoKSB7XG4gICAgICAgIHRoaXMub3ZlcmxheVZpc2libGUuc2V0KGZhbHNlKTtcbiAgICB9XG5cbiAgICBvbkNvbnRlbnRDbGljaygpIHtcbiAgICAgICAgdGhpcy5zZWxmQ2xpY2sgPSB0cnVlO1xuICAgIH1cblxuICAgIC8vIG9uT3ZlcmxheUFuaW1hdGlvblN0YXJ0KGV2ZW50OiBBbmltYXRpb25FdmVudCkge1xuICAgIG9uT3ZlcmxheUFuaW1hdGlvblN0YXJ0KGV2ZW50OiBhbnkpIHtcbiAgICAgICAgc3dpdGNoIChldmVudC50b1N0YXRlKSB7XG4gICAgICAgICAgICBjYXNlICd2aXNpYmxlJzpcbiAgICAgICAgICAgICAgICB0aGlzLm92ZXJsYXkgPSBldmVudC5lbGVtZW50O1xuICAgICAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuYXBwZW5kQ2hpbGQodGhpcy5kb2N1bWVudC5ib2R5LCB0aGlzLm92ZXJsYXkpO1xuICAgICAgICAgICAgICAgIFpJbmRleFV0aWxzLnNldCgnb3ZlcmxheScsIHRoaXMub3ZlcmxheSwgdGhpcy50YWJsZU1ldGFkYXRhLnByaW1lQ29uZmlnLnpJbmRleC5vdmVybGF5KTtcbiAgICAgICAgICAgICAgICBEb21IYW5kbGVyLmFic29sdXRlUG9zaXRpb24odGhpcy5vdmVybGF5LCB0aGlzLmljb24oKT8ubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kRG9jdW1lbnRDbGlja0xpc3RlbmVyKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5iaW5kRG9jdW1lbnRSZXNpemVMaXN0ZW5lcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuYmluZFNjcm9sbExpc3RlbmVyKCk7XG5cbiAgICAgICAgICAgICAgICB0aGlzLm92ZXJsYXlFdmVudExpc3RlbmVyID0gKGU6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5vdmVybGF5ICYmIHRoaXMub3ZlcmxheS5jb250YWlucyhlLnRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZkNsaWNrID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGlzLm92ZXJsYXlTdWJzY3JpcHRpb24gPSB0aGlzLm92ZXJsYXlTZXJ2aWNlLmNsaWNrT2JzZXJ2YWJsZS5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKS5zdWJzY3JpYmUodGhpcy5vdmVybGF5RXZlbnRMaXN0ZW5lcik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ3ZvaWQnOlxuICAgICAgICAgICAgICAgIHRoaXMub25PdmVybGF5SGlkZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMub3ZlcmxheVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIG9uT3ZlcmxheUFuaW1hdGlvbkVuZChldmVudDogQW5pbWF0aW9uRXZlbnQpIHtcbiAgICBvbk92ZXJsYXlBbmltYXRpb25FbmQoZXZlbnQ6IGFueSkge1xuICAgICAgICBzd2l0Y2ggKGV2ZW50LnRvU3RhdGUpIHtcbiAgICAgICAgICAgIGNhc2UgJ3ZvaWQnOlxuICAgICAgICAgICAgICAgIFpJbmRleFV0aWxzLmNsZWFyKGV2ZW50LmVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZ2V0IG5vRmlsdGVyTGFiZWwoKTogc3RyaW5nIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFibGVNZXRhZGF0YS5wcmltZUNvbmZpZy5nZXRUcmFuc2xhdGlvbihUcmFuc2xhdGlvbktleXMuTk9fRklMVEVSKTtcbiAgICB9XG5cbiAgICBjbGVhckZpbHRlcigpIHtcbiAgICAgICAgdGhpcy5pbml0RmlsdGVyQ29uc3RyYWludCh0cnVlKTtcbiAgICAgICAgdGhpcy5wcmltZVRhYmxlLl9maWx0ZXIoKTtcbiAgICAgICAgdGhpcy5oaWRlT3ZlcmxheSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZmluZE5leHRNZW51TW9kZUl0ZW0oaXRlbTogSFRNTExJRWxlbWVudCk6IGFueSB7XG4gICAgICAgIGNvbnN0IG5leHRJdGVtID0gPEhUTUxMSUVsZW1lbnQ+aXRlbS5uZXh0RWxlbWVudFNpYmxpbmc7XG5cbiAgICAgICAgaWYgKG5leHRJdGVtKSByZXR1cm4gRG9tSGFuZGxlci5oYXNDbGFzcyhuZXh0SXRlbSwgJ3AtY29sdW1uLWZpbHRlci1zZXBhcmF0b3InKSA/IHRoaXMuZmluZE5leHRNZW51TW9kZUl0ZW0obmV4dEl0ZW0pIDogbmV4dEl0ZW07XG4gICAgICAgIGVsc2UgcmV0dXJuIGl0ZW0ucGFyZW50RWxlbWVudD8uZmlyc3RFbGVtZW50Q2hpbGQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaW5kUHJldk1lbnVNb2RlSXRlbShpdGVtOiBIVE1MTElFbGVtZW50KTogYW55IHtcbiAgICAgICAgY29uc3QgcHJldkl0ZW0gPSA8SFRNTExJRWxlbWVudD5pdGVtLnByZXZpb3VzRWxlbWVudFNpYmxpbmc7XG5cbiAgICAgICAgaWYgKHByZXZJdGVtKSByZXR1cm4gRG9tSGFuZGxlci5oYXNDbGFzcyhwcmV2SXRlbSwgJ3AtY29sdW1uLWZpbHRlci1zZXBhcmF0b3InKSA/IHRoaXMuZmluZFByZXZNZW51TW9kZUl0ZW0ocHJldkl0ZW0pIDogcHJldkl0ZW07XG4gICAgICAgIGVsc2UgcmV0dXJuIGl0ZW0ucGFyZW50RWxlbWVudD8ubGFzdEVsZW1lbnRDaGlsZDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzT3V0c2lkZUNsaWNrZWQoZXZlbnQ6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gIShcbiAgICAgICAgICAgIHRoaXMub3ZlcmxheT8uaXNTYW1lTm9kZShldmVudC50YXJnZXQpIHx8XG4gICAgICAgICAgICB0aGlzLm92ZXJsYXk/LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgfHxcbiAgICAgICAgICAgIHRoaXMuaWNvbigpPy5uYXRpdmVFbGVtZW50LmlzU2FtZU5vZGUoZXZlbnQudGFyZ2V0KSB8fFxuICAgICAgICAgICAgdGhpcy5pY29uKCk/Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSB8fFxuICAgICAgICAgICAgRG9tSGFuZGxlci5oYXNDbGFzcyhldmVudC50YXJnZXQsICdwLWNvbHVtbi1maWx0ZXItYWRkLWJ1dHRvbicpIHx8XG4gICAgICAgICAgICBEb21IYW5kbGVyLmhhc0NsYXNzKGV2ZW50LnRhcmdldC5wYXJlbnRFbGVtZW50LCAncC1jb2x1bW4tZmlsdGVyLWFkZC1idXR0b24nKSB8fFxuICAgICAgICAgICAgRG9tSGFuZGxlci5oYXNDbGFzcyhldmVudC50YXJnZXQsICdwLWNvbHVtbi1maWx0ZXItcmVtb3ZlLWJ1dHRvbicpIHx8XG4gICAgICAgICAgICBEb21IYW5kbGVyLmhhc0NsYXNzKGV2ZW50LnRhcmdldC5wYXJlbnRFbGVtZW50LCAncC1jb2x1bW4tZmlsdGVyLXJlbW92ZS1idXR0b24nKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgYmluZERvY3VtZW50Q2xpY2tMaXN0ZW5lcigpIHtcbiAgICAgICAgaWYgKCF0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lcikge1xuICAgICAgICAgICAgY29uc3QgZG9jdW1lbnRUYXJnZXQ6IGFueSA9IHRoaXMuZWwgPyB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQub3duZXJEb2N1bWVudCA6ICdkb2N1bWVudCc7XG5cbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRDbGlja0xpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oZG9jdW1lbnRUYXJnZXQsICdjbGljaycsIGV2ZW50ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vdmVybGF5VmlzaWJsZSgpICYmICF0aGlzLnNlbGZDbGljayAmJiB0aGlzLmlzT3V0c2lkZUNsaWNrZWQoZXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGlkZU92ZXJsYXkoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB0aGlzLnNlbGZDbGljayA9IGZhbHNlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVuYmluZERvY3VtZW50Q2xpY2tMaXN0ZW5lcigpIHtcbiAgICAgICAgaWYgKHRoaXMuZG9jdW1lbnRDbGlja0xpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50Q2xpY2tMaXN0ZW5lcigpO1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudENsaWNrTGlzdGVuZXIgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5zZWxmQ2xpY2sgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYmluZERvY3VtZW50UmVzaXplTGlzdGVuZXIoKSB7XG4gICAgICAgIGlmICghdGhpcy5kb2N1bWVudFJlc2l6ZUxpc3RlbmVyKSB7XG4gICAgICAgICAgICB0aGlzLmRvY3VtZW50UmVzaXplTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbih0aGlzLndpbmRvdywgJ3Jlc2l6ZScsICgpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vdmVybGF5VmlzaWJsZSgpICYmICFEb21IYW5kbGVyLmlzVG91Y2hEZXZpY2UoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGVPdmVybGF5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHVuYmluZERvY3VtZW50UmVzaXplTGlzdGVuZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLmRvY3VtZW50UmVzaXplTGlzdGVuZXIpIHtcbiAgICAgICAgICAgIHRoaXMuZG9jdW1lbnRSZXNpemVMaXN0ZW5lcigpO1xuICAgICAgICAgICAgdGhpcy5kb2N1bWVudFJlc2l6ZUxpc3RlbmVyID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYmluZFNjcm9sbExpc3RlbmVyKCkge1xuICAgICAgICBpZiAoIXRoaXMuc2Nyb2xsSGFuZGxlcikge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxIYW5kbGVyID0gbmV3IENvbm5lY3RlZE92ZXJsYXlTY3JvbGxIYW5kbGVyKHRoaXMuaWNvbigpPy5uYXRpdmVFbGVtZW50LCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMub3ZlcmxheVZpc2libGUoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhpZGVPdmVybGF5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNjcm9sbEhhbmRsZXIuYmluZFNjcm9sbExpc3RlbmVyKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1bmJpbmRTY3JvbGxMaXN0ZW5lcigpIHtcbiAgICAgICAgaWYgKHRoaXMuc2Nyb2xsSGFuZGxlcikge1xuICAgICAgICAgICAgdGhpcy5zY3JvbGxIYW5kbGVyLnVuYmluZFNjcm9sbExpc3RlbmVyKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGhpZGVPdmVybGF5KCkge1xuICAgICAgICB0aGlzLm92ZXJsYXlWaXNpYmxlLnNldChmYWxzZSk7XG4gICAgICAgIHRoaXMuY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvbk92ZXJsYXlIaWRlKCkge1xuICAgICAgICB0aGlzLnVuYmluZERvY3VtZW50Q2xpY2tMaXN0ZW5lcigpO1xuICAgICAgICB0aGlzLnVuYmluZERvY3VtZW50UmVzaXplTGlzdGVuZXIoKTtcbiAgICAgICAgdGhpcy51bmJpbmRTY3JvbGxMaXN0ZW5lcigpO1xuICAgICAgICB0aGlzLm92ZXJsYXkgPSBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlRmlsdGVyT25EaXNwbGF5VmFsdWVDaGFuZ2UoZGlzcGxheVZhbHVlOiBhbnkpIHtcbiAgICAgICAgdGhpcy5zZXRGaWx0ZXJDb25zdHJhaW50KFxuICAgICAgICAgICAgZmlsdGVyU2V0TWV0YWRhdGFPbkRpc3BsYXlDaGFuZ2UoXG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJDb25zdHJhaW50KCksXG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJDb25zdHJhaW50KCk/LmRpc3BsYXlNYXRjaE1vZGUgPz8gdGhpcy5tZXRhZGF0YSgpLmRlZmF1bHRNYXRjaE1vZGUsXG4gICAgICAgICAgICAgICAgZGlzcGxheVZhbHVlLFxuICAgICAgICAgICAgICAgIHRoaXMubWV0YWRhdGEoKS5kZXNjcmlwdG9yLmZpbHRlclR5cGUsXG4gICAgICAgICAgICAgICAgdGhpcy5tZXRhZGF0YSgpLmRhdGVDb25maWdcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGluaXRGaWx0ZXJDb25zdHJhaW50KHJlc2V0ID0gZmFsc2UpIHtcbiAgICAgICAgaWYgKHJlc2V0KSB7XG4gICAgICAgICAgICB0aGlzLnByaW1lVGFibGUuZmlsdGVyc1t0aGlzLm1ldGFkYXRhKCkuZGVzY3JpcHRvci5wcm9wZXJ0eV0gPSB7dmFsdWU6IG51bGwsIG1hdGNoTW9kZTogdGhpcy5tZXRhZGF0YSgpLmRlZmF1bHRNYXRjaE1vZGV9O1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gc2V0IGludGVybmFsIGZpbHRlciBjb25zdHJhaW50XG4gICAgICAgIGxldCBtZXRhZGF0YSA9IHRoaXMucHJpbWVUYWJsZS5maWx0ZXJzW3RoaXMubWV0YWRhdGEoKS5kZXNjcmlwdG9yLnByb3BlcnR5XTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkobWV0YWRhdGEpKSB7XG4gICAgICAgICAgICBtZXRhZGF0YSA9IG1ldGFkYXRhWzBdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0RmlsdGVyQ29uc3RyYWludChmaWx0ZXJTZXRNZXRhZGF0YU9uQ2hhbmdlKG1ldGFkYXRhLCBtZXRhZGF0YT8ubWF0Y2hNb2RlLCBtZXRhZGF0YT8udmFsdWUsIHRoaXMubWV0YWRhdGEoKS5kZXNjcmlwdG9yLmZpbHRlclR5cGUsIHRoaXMubWV0YWRhdGEoKS5kYXRlQ29uZmlnKSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRGaWx0ZXJDb25zdHJhaW50KG1ldGFkYXRhPzogQ29tbW9uc0ZpbHRlck1ldGFkYXRhKSB7XG4gICAgICAgIGlmIChtZXRhZGF0YSAmJiAhbWV0YWRhdGEuZGlzcGxheU1hdGNoTW9kZSkgbWV0YWRhdGEuZGlzcGxheU1hdGNoTW9kZSA9IG1ldGFkYXRhLm1hdGNoTW9kZTtcbiAgICAgICAgaWYgKG1ldGFkYXRhICYmICFtZXRhZGF0YS5kaXNwbGF5VmFsdWUpIG1ldGFkYXRhLmRpc3BsYXlWYWx1ZSA9IG1ldGFkYXRhLnZhbHVlO1xuICAgICAgICB0aGlzLmZpbHRlckNvbnN0cmFpbnQuc2V0KG1ldGFkYXRhKTtcbiAgICAgICAgdGhpcy5wcmltZVRhYmxlLmZpbHRlcnNbdGhpcy5tZXRhZGF0YSgpLmRlc2NyaXB0b3IucHJvcGVydHldID0gdGhpcy5maWx0ZXJDb25zdHJhaW50KCkhO1xuICAgICAgICB0aGlzLnByaW1lVGFibGUuX2ZpbHRlcigpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgIEBzd2l0Y2ggKG1ldGFkYXRhKCkuZGVzY3JpcHRvci5maWx0ZXJUeXBlKSB7XG4gICAgICAgIEBjYXNlIChGaWx0ZXJUeXBlRW51bS5OdW1iZXIpIHtcbiAgICAgICAgICAgIEBpZiAoZmlsdGVyQ29uc3RyYWludCgpPy5kaXNwbGF5TWF0Y2hNb2RlID09PSAnYmV0d2VlbicpIHtcbiAgICAgICAgICAgICAgICA8bW5nLW51bWJlci1yYW5nZVxuICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbD1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtbmctY29sdW1uLWZpbHRlci1udW1iZXItaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXJDb25zdHJhaW50KCk/LmRpc3BsYXlWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uTnVtZXJpY01vZGVsQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAoa2V5RG93bik9XCJvbk51bWVyaWNJbnB1dEtleURvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJtZXRhZGF0YSgpLmRlc2NyaXB0b3IucGxhY2Vob2xkZXIgPz8gJ21uZ1RhYmxlLnR5cGVUb0ZpbHRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbdXNlR3JvdXBpbmddPVwibWV0YWRhdGEoKS5kZXNjcmlwdG9yLm51bWJlclVzZUdyb3VwaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgW21pbkZyYWN0aW9uRGlnaXRzXT1cIm1ldGFkYXRhKCkubnVtYmVyQ29uZmlnPy5mcmFjdGlvbnNNaW5cIlxuICAgICAgICAgICAgICAgICAgICBbbWF4RnJhY3Rpb25EaWdpdHNdPVwibWV0YWRhdGEoKS5udW1iZXJDb25maWc/LmZyYWN0aW9uc01heFwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0lucHV0RGlzYWJsZWQoKVwiIC8+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8cC1pbnB1dE51bWJlclxuICAgICAgICAgICAgICAgICAgICBpbnB1dFN0eWxlQ2xhc3M9XCJtbmctY29sdW1uLWZpbHRlci1udW1iZXItaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXJDb25zdHJhaW50KCk/LmRpc3BsYXlWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm9uTnVtZXJpY01vZGVsQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAob25LZXlEb3duKT1cIm9uTnVtZXJpY0lucHV0S2V5RG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIm1ldGFkYXRhKCkuZGVzY3JpcHRvci5wbGFjZWhvbGRlciA/PyAnbW5nVGFibGUudHlwZVRvRmlsdGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFt1c2VHcm91cGluZ109XCJtZXRhZGF0YSgpLmRlc2NyaXB0b3IubnVtYmVyVXNlR3JvdXBpbmdcIlxuICAgICAgICAgICAgICAgICAgICBbbWluRnJhY3Rpb25EaWdpdHNdPVwibWV0YWRhdGEoKS5udW1iZXJDb25maWc/LmZyYWN0aW9uc01pblwiXG4gICAgICAgICAgICAgICAgICAgIFttYXhGcmFjdGlvbkRpZ2l0c109XCJtZXRhZGF0YSgpLm51bWJlckNvbmZpZz8uZnJhY3Rpb25zTWF4XCJcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzSW5wdXREaXNhYmxlZCgpXCIgLz5cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIEBjYXNlIChGaWx0ZXJUeXBlRW51bS5Cb29sZWFuKSB7XG4gICAgICAgICAgICA8cC1jaGVja2JveCBbbmdNb2RlbF09XCJmaWx0ZXJDb25zdHJhaW50KCk/LmRpc3BsYXlWYWx1ZVwiIGJpbmFyeT1cInRydWVcIiAobmdNb2RlbENoYW5nZSk9XCJvbkNoZWNrYm94TW9kZWxDaGFuZ2UoJGV2ZW50KVwiPjwvcC1jaGVja2JveD5cbiAgICAgICAgfVxuICAgICAgICBAY2FzZSAoRmlsdGVyVHlwZUVudW0uRGF0ZSkge1xuICAgICAgICAgICAgQGlmIChmaWx0ZXJDb25zdHJhaW50KCk/LmRpc3BsYXlNYXRjaE1vZGUgPT09IEZpbHRlck1hdGNoTW9kZS5CZXR3ZWVuKSB7XG4gICAgICAgICAgICAgICAgPG1uZy1kYXRlLXJhbmdlXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImZpbHRlckNvbnN0cmFpbnQoKT8uZGlzcGxheVZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25EYXRlRmlsdGVyTW9kZWxDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIFtzaG93VGltZV09XCJtZXRhZGF0YSgpLmRhdGVDb25maWc/LnNob3dUaW1lID8/IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dTZWNvbmRzXT1cIm1ldGFkYXRhKCkuZGF0ZUNvbmZpZz8uc2hvd1NlY29uZHMgPz8gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICBbZGF0ZUZvcm1hdF09XCJtZXRhZGF0YSgpLmRhdGVDb25maWc/LmZvcm1hdFwiXG4gICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJtZXRhZGF0YSgpLmRlc2NyaXB0b3IucGxhY2Vob2xkZXIgPz8gJ21uZ1RhYmxlLnR5cGVUb0ZpbHRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNJbnB1dERpc2FibGVkKClcIj48L21uZy1kYXRlLXJhbmdlPlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPHAtZGF0ZS1waWNrZXJcbiAgICAgICAgICAgICAgICAgICAgYXBwZW5kVG89XCJib2R5XCJcbiAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZmlsdGVyQ29uc3RyYWludCgpPy5kaXNwbGF5VmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvbkRhdGVGaWx0ZXJNb2RlbENoYW5nZSgkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIm1ldGFkYXRhKCkuZGVzY3JpcHRvci5wbGFjZWhvbGRlciA/PyAnbW5nVGFibGUudHlwZVRvRmlsdGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgIFtzaG93SWNvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW3Nob3dUaW1lXT1cIm1ldGFkYXRhKCkuZGF0ZUNvbmZpZz8uc2hvd1RpbWUgPz8gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICBbc2hvd1NlY29uZHNdPVwibWV0YWRhdGEoKS5kYXRlQ29uZmlnPy5zaG93U2Vjb25kcyA/PyBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgIFtkYXRlRm9ybWF0XT1cIm1ldGFkYXRhKCkuZGF0ZUNvbmZpZz8uZm9ybWF0XCJcbiAgICAgICAgICAgICAgICAgICAgW2ZpcnN0RGF5T2ZXZWVrXT1cIjFcIj5cbiAgICAgICAgICAgICAgICA8L3AtZGF0ZS1waWNrZXI+XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgQGNhc2UgKEZpbHRlclR5cGVFbnVtLkxvb2t1cCkge1xuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvb2t1cEZpbHRlclwiIC8+XG4gICAgICAgIH1cbiAgICAgICAgQGNhc2UgKEZpbHRlclR5cGVFbnVtLkxvb2t1cEVudW0pIHtcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJsb29rdXBGaWx0ZXJcIiAvPlxuICAgICAgICB9XG4gICAgICAgIEBkZWZhdWx0IHtcbiAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICBwSW5wdXRUZXh0XG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtbmctY29sdW1uLWZpbHRlci1zdHJpbmctaW5wdXRcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJmaWx0ZXJDb25zdHJhaW50KCk/LmRpc3BsYXlWYWx1ZVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzSW5wdXREaXNhYmxlZCgpXCJcbiAgICAgICAgICAgICAgICAoaW5wdXQpPVwib25UZXh0TW9kZWxDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwib25UZXh0SW5wdXRFbnRlcktleURvd24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgW2F0dHIucGxhY2Vob2xkZXJdPVwibWV0YWRhdGEoKS5kZXNjcmlwdG9yLnBsYWNlaG9sZGVyID8/ICdtbmdUYWJsZS50eXBlVG9GaWx0ZXInIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICBbbW5nSW5wdXRUcmltXT1cIm1ldGFkYXRhKCkuZGVzY3JpcHRvci50cmltT3B0aW9uXCIgLz5cbiAgICAgICAgfVxuICAgIH1cblxuICAgIDxuZy10ZW1wbGF0ZSAjbG9va3VwRmlsdGVyPlxuICAgICAgICBAaWYgKGRlc2NyaXB0b3JBc0xvb2t1cCgpOyBhcyBsb29rdXApIHtcbiAgICAgICAgICAgIEBzd2l0Y2ggKGxvb2t1cC5sb29rdXBUeXBlKSB7XG4gICAgICAgICAgICAgICAgQGNhc2UgKGxvb2t1cFR5cGVBdXRvY29tcGxldGUpIHtcbiAgICAgICAgICAgICAgICAgICAgPG1uZy1hdXRvY29tcGxldGVcbiAgICAgICAgICAgICAgICAgICAgICAgICptbmdSZXJlbmRlcj1cImlzTXVsdGlzZWxlY3QoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJmaWx0ZXJDb25zdHJhaW50KCk/LmRpc3BsYXlWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGF0YVByb3ZpZGVyXT1cImxvb2t1cC5kYXRhUHJvdmlkZXJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNUcmFja1Byb3BlcnR5XT1cImxvb2t1cC5vcHRpb25zVmFsdWVQcm9wZXJ0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc1ZhbHVlUHJvcGVydHldPVwibG9va3VwLm9wdGlvbnNWYWx1ZVByb3BlcnR5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zTGFiZWxQcm9wZXJ0eV09XCJsb29rdXAub3B0aW9uc0xhYmVsUHJvcGVydHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNMYWJlbFRyYW5zbGF0ZV09XCJsb29rdXAub3B0aW9uc0xhYmVsVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFttdWx0aXNlbGVjdF09XCJpc011bHRpc2VsZWN0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9DbGVhcl09XCJsb29rdXAuYXV0b2NvbXBsZXRlQXV0b0NsZWFyID8/IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcGVuT25Gb2N1c109XCJsb29rdXAuYXV0b2NvbXBsZXRlQXV0b0NsZWFyID8/IHRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2lubGluZVNlYXJjaF09XCJsb29rdXAuYXV0b2NvbXBsZXRlSW5saW5lU2VhcmNoID8/IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCJtZXRhZGF0YSgpLmRlc2NyaXB0b3IucGxhY2Vob2xkZXIgPz8gJ21uZ1RhYmxlLnNlYXJjaFRvRmlsdGVyJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NOYW1lXT1cImxvb2t1cC5jbGFzc05hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2Ryb3Bkb3duQ2xhc3NOYW1lXT1cImxvb2t1cC5kcm9wZG93bkNsYXNzTmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiaXNJbnB1dERpc2FibGVkKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cImF1dG9jb21wbGV0ZUZpbHRlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hUcmltXT1cIm1ldGFkYXRhKCkuZGVzY3JpcHRvci50cmltT3B0aW9uXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvbW5nLWF1dG9jb21wbGV0ZT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgQGNhc2UgKGxvb2t1cFR5cGVEcm9wZG93bikge1xuICAgICAgICAgICAgICAgICAgICA8bW5nLWRyb3Bkb3duXG4gICAgICAgICAgICAgICAgICAgICAgICAqbW5nUmVyZW5kZXI9XCJpc011bHRpc2VsZWN0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZmlsdGVyQ29uc3RyYWludCgpPy5kaXNwbGF5VmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFQcm92aWRlcl09XCJsb29rdXAuZGF0YVByb3ZpZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zVmFsdWVQcm9wZXJ0eV09XCJsb29rdXAub3B0aW9uc1ZhbHVlUHJvcGVydHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW29wdGlvbnNMYWJlbFByb3BlcnR5XT1cImxvb2t1cC5vcHRpb25zTGFiZWxQcm9wZXJ0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc0xhYmVsVHJhbnNsYXRlXT1cImxvb2t1cC5vcHRpb25zTGFiZWxUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpc2VsZWN0XT1cImlzTXVsdGlzZWxlY3QoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwibWV0YWRhdGEoKS5kZXNjcmlwdG9yLnBsYWNlaG9sZGVyID8/ICdtbmdUYWJsZS5zZWxlY3RUb0ZpbHRlcicgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzTmFtZV09XCJsb29rdXAuY2xhc3NOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkcm9wZG93bkNsYXNzTmFtZV09XCJsb29rdXAuZHJvcGRvd25DbGFzc05hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dDbGVhcl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hhbmdlVmFsdWVPbkJsdXJdPVwiaXNNdWx0aXNlbGVjdCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0lucHV0RGlzYWJsZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwiZHJvcGRvd25GaWx0ZXIoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICA8L21uZy1kcm9wZG93bj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICA8L25nLXRlbXBsYXRlPlxuXG4gICAgQGlmIChtYXRjaE1vZGVzKCkubGVuZ3RoID4gMSkge1xuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAjaWNvblxuICAgICAgICAgICAgcEJ1dHRvblxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICBjbGFzcz1cIm1uZy1idXR0b24teHMgbXgtMVwiXG4gICAgICAgICAgICBbY2xhc3MuaGlkZGVuIV09XCIhaXNGaWx0ZXJTZXQoKVwiXG4gICAgICAgICAgICBpY29uPVwicGkgcGktZmlsdGVyXCJcbiAgICAgICAgICAgIHJvdW5kZWQ9XCJ0cnVlXCJcbiAgICAgICAgICAgIHNldmVyaXR5PVwicHJpbWFyeVwiXG4gICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlTWVudSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChrZXlkb3duKT1cIm9uVG9nZ2xlQnV0dG9uS2V5RG93bigkZXZlbnQpXCI+PC9idXR0b24+XG4gICAgfVxuICAgIEBpZiAob3ZlcmxheVZpc2libGUoKSkge1xuICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzcz1cInAtZGF0YXRhYmxlLWZpbHRlci1vdmVybGF5XCJcbiAgICAgICAgICAgIChjbGljayk9XCJvbkNvbnRlbnRDbGljaygpXCJcbiAgICAgICAgICAgIFtAb3ZlcmxheUFuaW1hdGlvbl09XCIndmlzaWJsZSdcIlxuICAgICAgICAgICAgKEBvdmVybGF5QW5pbWF0aW9uLnN0YXJ0KT1cIm9uT3ZlcmxheUFuaW1hdGlvblN0YXJ0KCRldmVudClcIlxuICAgICAgICAgICAgKEBvdmVybGF5QW5pbWF0aW9uLmRvbmUpPVwib25PdmVybGF5QW5pbWF0aW9uRW5kKCRldmVudClcIlxuICAgICAgICAgICAgKGtleWRvd24uZXNjYXBlKT1cIm9uRXNjYXBlKClcIj5cbiAgICAgICAgICAgIDx1bCBjbGFzcz1cInAtZGF0YXRhYmxlLWZpbHRlci1jb25zdHJhaW50LWxpc3RcIj5cbiAgICAgICAgICAgICAgICBAZm9yIChtYXRjaE1vZGUgb2YgbWF0Y2hNb2RlcygpOyB0cmFjayBtYXRjaE1vZGU7IGxldCBpID0gJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgIDxsaVxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJwLWRhdGF0YWJsZS1maWx0ZXItY29uc3RyYWludFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MucC1kYXRhdGFibGUtZmlsdGVyLWNvbnN0cmFpbnQtc2VsZWN0ZWRdPVwibWF0Y2hNb2RlLnZhbHVlID09PSBmaWx0ZXJDb25zdHJhaW50KCk/LmRpc3BsYXlNYXRjaE1vZGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uTWF0Y2hNb2RlQ2hhbmdlKG1hdGNoTW9kZS52YWx1ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24pPVwib25NYXRjaE1vZGVLZXlEb3duKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwidGhpcy5vbk1hdGNoTW9kZUNoYW5nZShtYXRjaE1vZGUudmFsdWUpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnRhYmluZGV4XT1cImkgPT09IDAgPyAnMCcgOiBudWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBtYXRjaE1vZGUubGFiZWwgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicC1kYXRhdGFibGUtZmlsdGVyLWNvbnN0cmFpbnQtc2VwYXJhdG9yXCI+PC9saT5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwLWRhdGF0YWJsZS1maWx0ZXItY29uc3RyYWludFwiIChjbGljayk9XCJvblJvd0NsZWFySXRlbUNsaWNrKClcIiAoa2V5ZG93bik9XCJvbk1hdGNoTW9kZUtleURvd24oJGV2ZW50KVwiIChrZXlkb3duLmVudGVyKT1cIm9uUm93Q2xlYXJJdGVtQ2xpY2soKVwiPlxuICAgICAgICAgICAgICAgICAgICB7eyBub0ZpbHRlckxhYmVsIH19XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZGl2PlxuICAgIH1cbjwvZGl2PlxuIl19","import { CurrencyPipe, DatePipe, DecimalPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ElementRef, computed, inject, input } from '@angular/core';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { MessageService } from 'primeng/api';\nimport { ButtonDirective } from 'primeng/button';\nimport { Tooltip } from 'primeng/tooltip';\nimport { BooleanPipe, ComponentDirective, EnumPipe, GetterPipe, JsonPathPipe, TemplatePipe } from '@mediusinc/mng-commons/core';\nimport { ColumnDisplayTypeEnum } from '@mediusinc/mng-commons/table/api';\nimport * as i0 from \"@angular/core\";\nexport class TableColumnValueComponent {\n constructor() {\n this.columnDisplayTypeString = ColumnDisplayTypeEnum.String;\n this.columnDisplayTypeNumber = ColumnDisplayTypeEnum.Number;\n this.columnDisplayTypeCurrency = ColumnDisplayTypeEnum.Currency;\n this.columnDisplayTypeBoolean = ColumnDisplayTypeEnum.Boolean;\n this.columnDisplayTypeDate = ColumnDisplayTypeEnum.Date;\n this.columnDisplayTypeEnum = ColumnDisplayTypeEnum.Enum;\n this.columnDisplayTypeComponent = ColumnDisplayTypeEnum.Component;\n this.columnDisplayTypeHtml = ColumnDisplayTypeEnum.Html;\n this.elementRef = inject(ElementRef);\n this.messageService = inject(MessageService);\n this.translate = inject(TranslateService);\n this.getterPipe = new GetterPipe();\n this.templatePipe = new TemplatePipe();\n this.jsonPathPipe = new JsonPathPipe();\n this.descriptor = input.required(...(ngDevMode ? [{ debugName: \"descriptor\" }] : []));\n this.item = input.required(...(ngDevMode ? [{ debugName: \"item\" }] : []));\n this.styleMaxWidth = computed(() => this.descriptor().maxWidth ?? null, ...(ngDevMode ? [{ debugName: \"styleMaxWidth\" }] : []));\n this.className = computed(() => {\n let className = 'nowrap';\n if (this.descriptor().columnDisplayType === ColumnDisplayTypeEnum.String && this.descriptor().isMultiline) {\n className += ' multiline';\n }\n return className;\n }, ...(ngDevMode ? [{ debugName: \"className\" }] : []));\n this.value = computed(() => {\n let value = this.jsonPathPipe.transform(this.item(), `$.${this.descriptor().property}`);\n if (typeof this.descriptor().getter === 'function') {\n value = this.getterPipe.transform(value, this.descriptor().getter, this.item());\n }\n if (this.descriptor().template) {\n value = this.templatePipe.transform(value, this.descriptor().template);\n }\n return value;\n }, ...(ngDevMode ? [{ debugName: \"value\" }] : []));\n this.currency = computed(() => {\n if (this.descriptor().columnDisplayType === ColumnDisplayTypeEnum.Currency) {\n return this.descriptor().currencyProperty ? this.item()[this.descriptor().currencyProperty] : (this.descriptor().currencyCode ?? 'EUR');\n }\n return;\n }, ...(ngDevMode ? [{ debugName: \"currency\" }] : []));\n this.hasCopyToClipboard = computed(() => this.descriptor().hasCopyToClipboard && this.value() != null, ...(ngDevMode ? [{ debugName: \"hasCopyToClipboard\" }] : []));\n this.componentInputs = computed(() => {\n const inputs = {\n value: this.value(),\n item: this.item(),\n descriptor: this.descriptor()\n };\n if (this.descriptor().customComponentInputs) {\n return { ...inputs, ...this.descriptor().customComponentInputs };\n }\n return inputs;\n }, ...(ngDevMode ? [{ debugName: \"componentInputs\" }] : []));\n }\n copyToClipboard(event) {\n event.stopPropagation();\n let value = this.elementRef.nativeElement.innerText.trim();\n const clipboardValueGetter = this.descriptor().clipboardValueGetter;\n if (clipboardValueGetter) {\n value = clipboardValueGetter(this.value(), this.item());\n }\n navigator.clipboard.writeText(value);\n const title = this.translate.instant('mngTable.copyNotificationTitle');\n const message = this.translate.instant('mngTable.copyNotificationMessage', { value });\n this.messageService.add({ severity: 'info', summary: title, detail: message });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableColumnValueComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.7\", type: TableColumnValueComponent, isStandalone: true, selector: \"mng-table-column-value\", inputs: { descriptor: { classPropertyName: \"descriptor\", publicName: \"descriptor\", isSignal: true, isRequired: true, transformFunction: null }, item: { classPropertyName: \"item\", publicName: \"item\", isSignal: true, isRequired: true, transformFunction: null } }, host: { properties: { \"class\": \"className()\", \"style.max-width.px\": \"styleMaxWidth()\" } }, ngImport: i0, template: \"@if (descriptor().localizationExistsProperty && !item()[descriptor().localizationExistsProperty!]) {\\n <i class=\\\"pi pi-exclamation-circle\\\" [pTooltip]=\\\"'mngTable.translationMissing' | translate\\\"></i>\\n}\\n@switch (descriptor().columnDisplayType) {\\n @case (columnDisplayTypeString) {\\n @if (descriptor().hasValueAsTooltip) {\\n <span [pTooltip]=\\\"value()\\\" tooltipPosition=\\\"left\\\">{{ value() }}</span>\\n } @else {\\n {{ value() }}\\n }\\n }\\n @case (columnDisplayTypeHtml) {\\n <span [innerHTML]=\\\"value()\\\"></span>\\n }\\n @case (columnDisplayTypeNumber) {\\n {{ value() | number: descriptor().displayFormat : descriptor().locale }}\\n }\\n @case (columnDisplayTypeCurrency) {\\n {{ value() | currency: currency() : descriptor().currencyDisplay : descriptor().displayFormat : descriptor().locale }}\\n }\\n @case (columnDisplayTypeDate) {\\n {{ value() | date: descriptor().displayFormat }}\\n }\\n @case (columnDisplayTypeBoolean) {\\n @if (descriptor().booleanAsIcon) {\\n <i [class]=\\\"value() | mngBoolean: descriptor().booleanYes : descriptor().booleanNo : true\\\"></i>\\n } @else {\\n {{ value() | mngBoolean: descriptor().booleanYes : descriptor().booleanNo | translate }}\\n }\\n }\\n @case (columnDisplayTypeEnum) {\\n {{ value() | mngEnum: descriptor().enum | translate }}\\n }\\n @case (columnDisplayTypeComponent) {\\n <ng-container [mngComponent]=\\\"descriptor().customComponentType!\\\" [inputs]=\\\"componentInputs()\\\"></ng-container>\\n }\\n}\\n@if (hasCopyToClipboard()) {\\n <div class=\\\"help-buttons\\\">\\n <button pButton type=\\\"button\\\" icon=\\\"pi pi-copy\\\" class=\\\"p-button-rounded p-button-info p-button-sm\\\" (click)=\\\"copyToClipboard($event)\\\"></button>\\n </div>\\n}\\n\", styles: [\":host{display:inline-block;overflow:hidden}:host.nowrap{white-space:nowrap;text-overflow:ellipsis}:host.multiline{white-space:pre-wrap;word-wrap:break-word}.help-buttons{display:none;position:absolute;right:0;top:50%;transform:translateY(-50%)}.help-buttons .p-button{height:1.9rem;width:1.9rem;padding:0}\\n\"], dependencies: [{ kind: \"directive\", type: ComponentDirective, selector: \"[mngComponent]\", inputs: [\"mngComponent\", \"injectionToken\", \"inputs\", \"attachToHost\", \"parentInjector\"], outputs: [\"instanceCreated\"] }, { kind: \"directive\", type: ButtonDirective, selector: \"[pButton]\", inputs: [\"iconPos\", \"loadingIcon\", \"loading\", \"severity\", \"raised\", \"rounded\", \"text\", \"outlined\", \"size\", \"plain\", \"fluid\", \"label\", \"icon\", \"buttonProps\"] }, { kind: \"directive\", type: Tooltip, selector: \"[pTooltip]\", inputs: [\"tooltipPosition\", \"tooltipEvent\", \"positionStyle\", \"tooltipStyleClass\", \"tooltipZIndex\", \"escape\", \"showDelay\", \"hideDelay\", \"life\", \"positionTop\", \"positionLeft\", \"autoHide\", \"fitContent\", \"hideOnEscape\", \"pTooltip\", \"tooltipDisabled\", \"tooltipOptions\", \"appendTo\"] }, { kind: \"pipe\", type: TranslatePipe, name: \"translate\" }, { kind: \"pipe\", type: BooleanPipe, name: \"mngBoolean\" }, { kind: \"pipe\", type: EnumPipe, name: \"mngEnum\" }, { kind: \"pipe\", type: DecimalPipe, name: \"number\" }, { kind: \"pipe\", type: CurrencyPipe, name: \"currency\" }, { kind: \"pipe\", type: DatePipe, name: \"date\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableColumnValueComponent, decorators: [{\n type: Component,\n args: [{ selector: 'mng-table-column-value', imports: [TranslatePipe, BooleanPipe, EnumPipe, ComponentDirective, DecimalPipe, CurrencyPipe, DatePipe, ButtonDirective, Tooltip], changeDetection: ChangeDetectionStrategy.OnPush, host: { '[class]': 'className()', '[style.max-width.px]': 'styleMaxWidth()' }, template: \"@if (descriptor().localizationExistsProperty && !item()[descriptor().localizationExistsProperty!]) {\\n <i class=\\\"pi pi-exclamation-circle\\\" [pTooltip]=\\\"'mngTable.translationMissing' | translate\\\"></i>\\n}\\n@switch (descriptor().columnDisplayType) {\\n @case (columnDisplayTypeString) {\\n @if (descriptor().hasValueAsTooltip) {\\n <span [pTooltip]=\\\"value()\\\" tooltipPosition=\\\"left\\\">{{ value() }}</span>\\n } @else {\\n {{ value() }}\\n }\\n }\\n @case (columnDisplayTypeHtml) {\\n <span [innerHTML]=\\\"value()\\\"></span>\\n }\\n @case (columnDisplayTypeNumber) {\\n {{ value() | number: descriptor().displayFormat : descriptor().locale }}\\n }\\n @case (columnDisplayTypeCurrency) {\\n {{ value() | currency: currency() : descriptor().currencyDisplay : descriptor().displayFormat : descriptor().locale }}\\n }\\n @case (columnDisplayTypeDate) {\\n {{ value() | date: descriptor().displayFormat }}\\n }\\n @case (columnDisplayTypeBoolean) {\\n @if (descriptor().booleanAsIcon) {\\n <i [class]=\\\"value() | mngBoolean: descriptor().booleanYes : descriptor().booleanNo : true\\\"></i>\\n } @else {\\n {{ value() | mngBoolean: descriptor().booleanYes : descriptor().booleanNo | translate }}\\n }\\n }\\n @case (columnDisplayTypeEnum) {\\n {{ value() | mngEnum: descriptor().enum | translate }}\\n }\\n @case (columnDisplayTypeComponent) {\\n <ng-container [mngComponent]=\\\"descriptor().customComponentType!\\\" [inputs]=\\\"componentInputs()\\\"></ng-container>\\n }\\n}\\n@if (hasCopyToClipboard()) {\\n <div class=\\\"help-buttons\\\">\\n <button pButton type=\\\"button\\\" icon=\\\"pi pi-copy\\\" class=\\\"p-button-rounded p-button-info p-button-sm\\\" (click)=\\\"copyToClipboard($event)\\\"></button>\\n </div>\\n}\\n\", styles: [\":host{display:inline-block;overflow:hidden}:host.nowrap{white-space:nowrap;text-overflow:ellipsis}:host.multiline{white-space:pre-wrap;word-wrap:break-word}.help-buttons{display:none;position:absolute;right:0;top:50%;transform:translateY(-50%)}.help-buttons .p-button{height:1.9rem;width:1.9rem;padding:0}\\n\"] }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLXZhbHVlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3RhYmxlL3NyYy9jb21wb25lbnRzL2NvbHVtbi12YWx1ZS9jb2x1bW4tdmFsdWUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vdGFibGUvc3JjL2NvbXBvbmVudHMvY29sdW1uLXZhbHVlL2NvbHVtbi12YWx1ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsWUFBWSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNwRSxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV0RyxPQUFPLEVBQUMsYUFBYSxFQUFFLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDcEUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMzQyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0MsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBRXhDLE9BQU8sRUFBQyxXQUFXLEVBQUUsa0JBQWtCLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDOUgsT0FBTyxFQUFtQixxQkFBcUIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDOztBQVV6RixNQUFNLE9BQU8seUJBQXlCO0lBUnRDO1FBU29CLDRCQUF1QixHQUEwQixxQkFBcUIsQ0FBQyxNQUFNLENBQUM7UUFDOUUsNEJBQXVCLEdBQTBCLHFCQUFxQixDQUFDLE1BQU0sQ0FBQztRQUM5RSw4QkFBeUIsR0FBMEIscUJBQXFCLENBQUMsUUFBUSxDQUFDO1FBQ2xGLDZCQUF3QixH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RyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxrQ0FBa0MsRUFBRSxFQUFDLEtBQUssRUFBQyxDQUFDLENBQUM7UUFDcEYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsRUFBQyxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUM7SUFDakYsQ0FBQzs4R0EzRVEseUJBQXlCO2tHQUF6Qix5QkFBeUIsbWJDbkJ0Qyx3ekRBMENBLDZXRDNCb0Qsa0JBQWtCLGlMQUF1QyxlQUFlLG9OQUFFLE9BQU8sd1VBQXZILGFBQWEsNkNBQUUsV0FBVyw4Q0FBRSxRQUFRLDJDQUFzQixXQUFXLDBDQUFFLFlBQVksNENBQUUsUUFBUTs7MkZBSTlGLHlCQUF5QjtrQkFSckMsU0FBUzsrQkFDSSx3QkFBd0IsV0FHekIsQ0FBQyxhQUFhLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLFFBQVEsRUFBRSxlQUFlLEVBQUUsT0FBTyxDQUFDLG1CQUNqSCx1QkFBdUIsQ0FBQyxNQUFNLFFBQ3pDLEVBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxzQkFBc0IsRUFBRSxpQkFBaUIsRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q3VycmVuY3lQaXBlLCBEYXRlUGlwZSwgRGVjaW1hbFBpcGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIGNvbXB1dGVkLCBpbmplY3QsIGlucHV0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtUcmFuc2xhdGVQaXBlLCBUcmFuc2xhdGVTZXJ2aWNlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7TWVzc2FnZVNlcnZpY2V9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7QnV0dG9uRGlyZWN0aXZlfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XG5pbXBvcnQge1Rvb2x0aXB9IGZyb20gJ3ByaW1lbmcvdG9vbHRpcCc7XG5cbmltcG9ydCB7Qm9vbGVhblBpcGUsIENvbXBvbmVudERpcmVjdGl2ZSwgRW51bVBpcGUsIEdldHRlclBpcGUsIEpzb25QYXRoUGlwZSwgVGVtcGxhdGVQaXBlfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtDb2x1bW5EZXNjcmlwdG9yLCBDb2x1bW5EaXNwbGF5VHlwZUVudW19IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvdGFibGUvYXBpJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdtbmctdGFibGUtY29sdW1uLXZhbHVlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vY29sdW1uLXZhbHVlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9jb2x1bW4tdmFsdWUuY29tcG9uZW50LmNzcyddLFxuICAgIGltcG9ydHM6IFtUcmFuc2xhdGVQaXBlLCBCb29sZWFuUGlwZSwgRW51bVBpcGUsIENvbXBvbmVudERpcmVjdGl2ZSwgRGVjaW1hbFBpcGUsIEN1cnJlbmN5UGlwZSwgRGF0ZVBpcGUsIEJ1dHRvbkRpcmVjdGl2ZSwgVG9vbHRpcF0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaG9zdDogeydbY2xhc3NdJzogJ2NsYXNzTmFtZSgpJywgJ1tzdHlsZS5tYXgtd2lkdGgucHhdJzogJ3N0eWxlTWF4V2lkdGgoKSd9XG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29sdW1uVmFsdWVDb21wb25lbnQ8VCwgVFQ+IHtcbiAgICBwdWJsaWMgcmVhZG9ubHkgY29sdW1uRGlzcGxheVR5cGVTdHJpbmc6IENvbHVtbkRpc3BsYXlUeXBlRW51bSA9IENvbHVtbkRpc3BsYXlUeXBlRW51bS5TdHJpbmc7XG4gICAgcHVibGljIHJlYWRvbmx5IGNvbHVtbkRpc3BsYXlUeXBlTnVtYmVyOiBDb2x1bW5EaXNwbGF5VHlwZUVudW0gPSBDb2x1bW5EaXNwbGF5VHlwZUVudW0uTnVtYmVyO1xuICAgIHB1YmxpYyByZWFkb25seSBjb2x1bW5EaXNwbGF5VHlwZUN1cnJlbmN5OiBDb2x1bW5EaXNwbGF5VHlwZUVudW0gPSBDb2x1bW5EaXNwbGF5VHlwZUVudW0uQ3VycmVuY3k7XG4gICAgcHVibGljIHJlYWRvbmx5IGNvbHVtbkRpc3BsYXlUeXBlQm9vbGVhbjogQ29sdW1uRGlzcGxheVR5cGVFbnVtID0gQ29sdW1uRGlzcGxheVR5cGVFbnVtLkJvb2xlYW47XG4gICAgcHVibGljIHJlYWRvbmx5IGNvbHVtbkRpc3BsYXlUeXBlRGF0ZTogQ29sdW1uRGlzcGxheVR5cGVFbnVtID0gQ29sdW1uRGlzcGxheVR5cGVFbnVtLkRhdGU7XG4gICAgcHVibGljIHJlYWRvbmx5IGNvbHVtbkRpc3BsYXlUeXBlRW51bTogQ29sdW1uRGlzcGxheVR5cGVFbnVtID0gQ29sdW1uRGlzcGxheVR5cGVFbnVtLkVudW07XG4gICAgcHVibGljIHJlYWRvbmx5IGNvbHVtbkRpc3BsYXlUeXBlQ29tcG9uZW50OiBDb2x1bW5EaXNwbGF5VHlwZUVudW0gPSBDb2x1bW5EaXNwbGF5VHlwZUVudW0uQ29tcG9uZW50O1xuICAgIHB1YmxpYyByZWFkb25seSBjb2x1bW5EaXNwbGF5VHlwZUh0bWw6IENvbHVtbkRpc3BsYXlUeXBlRW51bSA9IENvbHVtbkRpc3BsYXlUeXBlRW51bS5IdG1sO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbGVtZW50UmVmID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZVNlcnZpY2UgPSBpbmplY3QoTWVzc2FnZVNlcnZpY2UpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlID0gaW5qZWN0KFRyYW5zbGF0ZVNlcnZpY2UpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBnZXR0ZXJQaXBlID0gbmV3IEdldHRlclBpcGUoKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRlbXBsYXRlUGlwZSA9IG5ldyBUZW1wbGF0ZVBpcGUoKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGpzb25QYXRoUGlwZSA9IG5ldyBKc29uUGF0aFBpcGUoKTtcblxuICAgIHB1YmxpYyBkZXNjcmlwdG9yID0gaW5wdXQucmVxdWlyZWQ8Q29sdW1uRGVzY3JpcHRvcjxULCBUVD4+KCk7XG4gICAgcHVibGljIGl0ZW0gPSBpbnB1dC5yZXF1aXJlZDxhbnk+KCk7XG5cbiAgICBwdWJsaWMgc3R5bGVNYXhXaWR0aCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZGVzY3JpcHRvcigpLm1heFdpZHRoID8/IG51bGwpO1xuICAgIHB1YmxpYyBjbGFzc05hbWUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGxldCBjbGFzc05hbWUgPSAnbm93cmFwJztcbiAgICAgICAgaWYgKHRoaXMuZGVzY3JpcHRvcigpLmNvbHVtbkRpc3BsYXlUeXBlID09PSBDb2x1bW5EaXNwbGF5VHlwZUVudW0uU3RyaW5nICYmIHRoaXMuZGVzY3JpcHRvcigpLmlzTXVsdGlsaW5lKSB7XG4gICAgICAgICAgICBjbGFzc05hbWUgKz0gJyBtdWx0aWxpbmUnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbGFzc05hbWU7XG4gICAgfSk7XG5cbiAgICBwdWJsaWMgdmFsdWUgPSBjb21wdXRlZDxhbnk+KCgpID0+IHtcbiAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5qc29uUGF0aFBpcGUudHJhbnNmb3JtKHRoaXMuaXRlbSgpLCBgJC4ke3RoaXMuZGVzY3JpcHRvcigpLnByb3BlcnR5fWApO1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuZGVzY3JpcHRvcigpLmdldHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmdldHRlclBpcGUudHJhbnNmb3JtKHZhbHVlLCB0aGlzLmRlc2NyaXB0b3IoKS5nZXR0ZXIsIHRoaXMuaXRlbSgpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kZXNjcmlwdG9yKCkudGVtcGxhdGUpIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy50ZW1wbGF0ZVBpcGUudHJhbnNmb3JtKHZhbHVlLCB0aGlzLmRlc2NyaXB0b3IoKS50ZW1wbGF0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH0pO1xuXG4gICAgcHVibGljIGN1cnJlbmN5ID0gY29tcHV0ZWQ8c3RyaW5nIHwgdW5kZWZpbmVkPigoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmRlc2NyaXB0b3IoKS5jb2x1bW5EaXNwbGF5VHlwZSA9PT0gQ29sdW1uRGlzcGxheVR5cGVFbnVtLkN1cnJlbmN5KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZXNjcmlwdG9yKCkuY3VycmVuY3lQcm9wZXJ0eSA/IHRoaXMuaXRlbSgpW3RoaXMuZGVzY3JpcHRvcigpLmN1cnJlbmN5UHJvcGVydHkhXSA6ICh0aGlzLmRlc2NyaXB0b3IoKS5jdXJyZW5jeUNvZGUgPz8gJ0VVUicpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybjtcbiAgICB9KTtcblxuICAgIHB1YmxpYyBoYXNDb3B5VG9DbGlwYm9hcmQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmRlc2NyaXB0b3IoKS5oYXNDb3B5VG9DbGlwYm9hcmQgJiYgdGhpcy52YWx1ZSgpICE9IG51bGwpO1xuXG4gICAgcHVibGljIGNvbXBvbmVudElucHV0cyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXRzID0ge1xuICAgICAgICAgICAgdmFsdWU6IHRoaXMudmFsdWUoKSxcbiAgICAgICAgICAgIGl0ZW06IHRoaXMuaXRlbSgpLFxuICAgICAgICAgICAgZGVzY3JpcHRvcjogdGhpcy5kZXNjcmlwdG9yKClcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodGhpcy5kZXNjcmlwdG9yKCkuY3VzdG9tQ29tcG9uZW50SW5wdXRzKSB7XG4gICAgICAgICAgICByZXR1cm4gey4uLmlucHV0cywgLi4udGhpcy5kZXNjcmlwdG9yKCkuY3VzdG9tQ29tcG9uZW50SW5wdXRzfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBpbnB1dHM7XG4gICAgfSk7XG5cbiAgICBwdWJsaWMgY29weVRvQ2xpcGJvYXJkKGV2ZW50OiBFdmVudCkge1xuICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgbGV0IHZhbHVlID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuaW5uZXJUZXh0LnRyaW0oKTtcbiAgICAgICAgY29uc3QgY2xpcGJvYXJkVmFsdWVHZXR0ZXIgPSB0aGlzLmRlc2NyaXB0b3IoKS5jbGlwYm9hcmRWYWx1ZUdldHRlcjtcbiAgICAgICAgaWYgKGNsaXBib2FyZFZhbHVlR2V0dGVyKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IGNsaXBib2FyZFZhbHVlR2V0dGVyKHRoaXMudmFsdWUoKSwgdGhpcy5pdGVtKCkpO1xuICAgICAgICB9XG4gICAgICAgIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHZhbHVlKTtcbiAgICAgICAgY29uc3QgdGl0bGUgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdtbmdUYWJsZS5jb3B5Tm90aWZpY2F0aW9uVGl0bGUnKTtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoJ21uZ1RhYmxlLmNvcHlOb3RpZmljYXRpb25NZXNzYWdlJywge3ZhbHVlfSk7XG4gICAgICAgIHRoaXMubWVzc2FnZVNlcnZpY2UuYWRkKHtzZXZlcml0eTogJ2luZm8nLCBzdW1tYXJ5OiB0aXRsZSwgZGV0YWlsOiBtZXNzYWdlfSk7XG4gICAgfVxufVxuIiwiQGlmIChkZXNjcmlwdG9yKCkubG9jYWxpemF0aW9uRXhpc3RzUHJvcGVydHkgJiYgIWl0ZW0oKVtkZXNjcmlwdG9yKCkubG9jYWxpemF0aW9uRXhpc3RzUHJvcGVydHkhXSkge1xuICAgIDxpIGNsYXNzPVwicGkgcGktZXhjbGFtYXRpb24tY2lyY2xlXCIgW3BUb29sdGlwXT1cIidtbmdUYWJsZS50cmFuc2xhdGlvbk1pc3NpbmcnIHwgdHJhbnNsYXRlXCI+PC9pPlxufVxuQHN3aXRjaCAoZGVzY3JpcHRvcigpLmNvbHVtbkRpc3BsYXlUeXBlKSB7XG4gICAgQGNhc2UgKGNvbHVtbkRpc3BsYXlUeXBlU3RyaW5nKSB7XG4gICAgICAgIEBpZiAoZGVzY3JpcHRvcigpLmhhc1ZhbHVlQXNUb29sdGlwKSB7XG4gICAgICAgICAgICA8c3BhbiBbcFRvb2x0aXBdPVwidmFsdWUoKVwiIHRvb2x0aXBQb3NpdGlvbj1cImxlZnRcIj57eyB2YWx1ZSgpIH19PC9zcGFuPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIHt7IHZhbHVlKCkgfX1cbiAgICAgICAgfVxuICAgIH1cbiAgICBAY2FzZSAoY29sdW1uRGlzcGxheVR5cGVIdG1sKSB7XG4gICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwidmFsdWUoKVwiPjwvc3Bhbj5cbiAgICB9XG4gICAgQGNhc2UgKGNvbHVtbkRpc3BsYXlUeXBlTnVtYmVyKSB7XG4gICAgICAgIHt7IHZhbHVlKCkgfCBudW1iZXI6IGRlc2NyaXB0b3IoKS5kaXNwbGF5Rm9ybWF0IDogZGVzY3JpcHRvcigpLmxvY2FsZSB9fVxuICAgIH1cbiAgICBAY2FzZSAoY29sdW1uRGlzcGxheVR5cGVDdXJyZW5jeSkge1xuICAgICAgICB7eyB2YWx1ZSgpIHwgY3VycmVuY3k6IGN1cnJlbmN5KCkgOiBkZXNjcmlwdG9yKCkuY3VycmVuY3lEaXNwbGF5IDogZGVzY3JpcHRvcigpLmRpc3BsYXlGb3JtYXQgOiBkZXNjcmlwdG9yKCkubG9jYWxlIH19XG4gICAgfVxuICAgIEBjYXNlIChjb2x1bW5EaXNwbGF5VHlwZURhdGUpIHtcbiAgICAgICAge3sgdmFsdWUoKSB8IGRhdGU6IGRlc2NyaXB0b3IoKS5kaXNwbGF5Rm9ybWF0IH19XG4gICAgfVxuICAgIEBjYXNlIChjb2x1bW5EaXNwbGF5VHlwZUJvb2xlYW4pIHtcbiAgICAgICAgQGlmIChkZXNjcmlwdG9yKCkuYm9vbGVhbkFzSWNvbikge1xuICAgICAgICAgICAgPGkgW2NsYXNzXT1cInZhbHVlKCkgfCBtbmdCb29sZWFuOiBkZXNjcmlwdG9yKCkuYm9vbGVhblllcyA6IGRlc2NyaXB0b3IoKS5ib29sZWFuTm8gOiB0cnVlXCI+PC9pPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIHt7IHZhbHVlKCkgfCBtbmdCb29sZWFuOiBkZXNjcmlwdG9yKCkuYm9vbGVhblllcyA6IGRlc2NyaXB0b3IoKS5ib29sZWFuTm8gfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgfVxuICAgIH1cbiAgICBAY2FzZSAoY29sdW1uRGlzcGxheVR5cGVFbnVtKSB7XG4gICAgICAgIHt7IHZhbHVlKCkgfCBtbmdFbnVtOiBkZXNjcmlwdG9yKCkuZW51bSB8IHRyYW5zbGF0ZSB9fVxuICAgIH1cbiAgICBAY2FzZSAoY29sdW1uRGlzcGxheVR5cGVDb21wb25lbnQpIHtcbiAgICAgICAgPG5nLWNvbnRhaW5lciBbbW5nQ29tcG9uZW50XT1cImRlc2NyaXB0b3IoKS5jdXN0b21Db21wb25lbnRUeXBlIVwiIFtpbnB1dHNdPVwiY29tcG9uZW50SW5wdXRzKClcIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG59XG5AaWYgKGhhc0NvcHlUb0NsaXBib2FyZCgpKSB7XG4gICAgPGRpdiBjbGFzcz1cImhlbHAtYnV0dG9uc1wiPlxuICAgICAgICA8YnV0dG9uIHBCdXR0b24gdHlwZT1cImJ1dHRvblwiIGljb249XCJwaSBwaS1jb3B5XCIgY2xhc3M9XCJwLWJ1dHRvbi1yb3VuZGVkIHAtYnV0dG9uLWluZm8gcC1idXR0b24tc21cIiAoY2xpY2spPVwiY29weVRvQ2xpcGJvYXJkKCRldmVudClcIj48L2J1dHRvbj5cbiAgICA8L2Rpdj5cbn1cbiJdfQ==","import { DatePipe, DecimalPipe } from '@angular/common';\nimport { LOCALE_ID, Pipe, inject } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { ReplaySubject } from 'rxjs';\nimport { BooleanPipe, EnumPipe } from '@mediusinc/mng-commons/core';\nimport { FilterTypeEnum } from '@mediusinc/mng-commons/filter';\nimport * as i0 from \"@angular/core\";\nexport class FilterValuePipe {\n constructor() {\n this.locale = inject(LOCALE_ID);\n this.translate = inject(TranslateService);\n this.enumPipe = new EnumPipe();\n this.subject = new ReplaySubject(1);\n }\n transform(value, descriptor) {\n const valTransform = this.prepareValueTransform(value, descriptor);\n this.subscription?.unsubscribe();\n if (valTransform.translate) {\n this.subscription = this.translate.stream(valTransform.valueArr).subscribe((i18n) => {\n this.subject.next(valTransform.valueArr.map(k => i18n[k]).join(', '));\n });\n }\n else {\n this.subject.next(valTransform.valueArr.join(', '));\n }\n return this.subject.asObservable();\n }\n /**\n * If returns a string, this represents i18n key that must go through translation. If translation is not needed, undefined is returned.\n */\n prepareValueTransform(value, descriptor) {\n const result = {\n translate: false,\n valueArr: Array.isArray(value) ? value : [value]\n };\n switch (descriptor?.filterType) {\n case FilterTypeEnum.Date:\n // eslint-disable-next-line no-case-declarations\n const datePipe = new DatePipe(this.locale);\n result.valueArr = result.valueArr.map(v => datePipe.transform(v, descriptor.displayFormat, descriptor.locale));\n break;\n case FilterTypeEnum.Number:\n // eslint-disable-next-line no-case-declarations\n const decimalPipe = new DecimalPipe(this.locale);\n result.valueArr = result.valueArr.map(v => decimalPipe.transform(v, descriptor.displayFormat, descriptor.locale));\n break;\n case FilterTypeEnum.Boolean:\n // eslint-disable-next-line no-case-declarations\n const booleanPipe = new BooleanPipe();\n result.valueArr = result.valueArr.map(v => booleanPipe.transform(v));\n result.translate = true;\n break;\n case FilterTypeEnum.LookupEnum:\n // eslint-disable-next-line no-case-declarations\n const enumPipe = new EnumPipe();\n result.valueArr = result.valueArr.map(v => enumPipe.transform(v, descriptor.enum));\n result.translate = true;\n break;\n }\n return result;\n }\n ngOnDestroy() {\n this.subscription?.unsubscribe();\n this.subject.complete();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: FilterValuePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.1.7\", ngImport: i0, type: FilterValuePipe, isStandalone: true, name: \"mngFilterValue\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: FilterValuePipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'mngFilterValue',\n pure: true\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLXZhbHVlLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90YWJsZS9zcmMvcGlwZXMvZmlsdGVyLXZhbHVlLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBRSxXQUFXLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUN0RCxPQUFPLEVBQUMsU0FBUyxFQUFhLElBQUksRUFBaUIsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBRWhGLE9BQU8sRUFBQyxnQkFBZ0IsRUFBb0IsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RSxPQUFPLEVBQWEsYUFBYSxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBRTdELE9BQU8sRUFBQyxXQUFXLEVBQUUsUUFBUSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDbEUsT0FBTyxFQUErQyxjQUFjLEVBQUMsTUFBTSwrQkFBK0IsQ0FBQzs7QUFNM0csTUFBTSxPQUFPLGVBQWU7SUFKNUI7UUFLcUIsV0FBTSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUMzQixjQUFTLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDckMsYUFBUSxHQUFHLElBQUksUUFBUSxFQUFFLENBQUM7UUFHM0MsWUFBTyxHQUFHLElBQUksYUFBYSxDQUFNLENBQUMsQ0FBQyxDQUFDO0tBeUR2QztJQXZERyxTQUFTLENBQUMsS0FBYyxFQUFFLFVBQXVDO1FBQzdELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFbkUsSUFBSSxDQUFDLFlBQVksRUFBRSxXQUFXLEVBQUUsQ0FBQztRQUNqQyxJQUFJLFlBQVksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUF1QixFQUFFLEVBQUU7Z0JBQ25HLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDMUUsQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO2FBQU0sQ0FBQztZQUNKLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDeEQsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7O09BRUc7SUFDSyxxQkFBcUIsQ0FBQyxLQUFjLEVBQUUsVUFBdUM7UUFDakYsTUFBTSxNQUFNLEdBQUc7WUFDWCxTQUFTLEVBQUUsS0FBSztZQUNoQixRQUFRLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztTQUNuRCxDQUFDO1FBQ0YsUUFBUSxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQUM7WUFDN0IsS0FBSyxjQUFjLENBQUMsSUFBSTtnQkFDcEIsZ0RBQWdEO2dCQUNoRCxNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQzNDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQVMsRUFBRSxVQUFVLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUN2SCxNQUFNO1lBQ1YsS0FBSyxjQUFjLENBQUMsTUFBTTtnQkFDdEIsZ0RBQWdEO2dCQUNoRCxNQUFNLFdBQVcsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ2pELE1BQU0sQ0FBQyxRQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLENBQVcsRUFBRSxVQUFVLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUM1SCxNQUFNO1lBQ1YsS0FBSyxjQUFjLENBQUMsT0FBTztnQkFDdkIsZ0RBQWdEO2dCQUNoRCxNQUFNLFdBQVcsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO2dCQUN0QyxNQUFNLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNyRSxNQUFNLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztnQkFDeEIsTUFBTTtZQUNWLEtBQUssY0FBYyxDQUFDLFVBQVU7Z0JBQzFCLGdEQUFnRDtnQkFDaEQsTUFBTSxRQUFRLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDaEMsTUFBTSxDQUFDLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFHLFVBQW1ELENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDN0gsTUFBTSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7Z0JBQ3hCLE1BQU07UUFDZCxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLENBQUMsWUFBWSxFQUFFLFdBQVcsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDNUIsQ0FBQzs4R0E5RFEsZUFBZTs0R0FBZixlQUFlOzsyRkFBZixlQUFlO2tCQUozQixJQUFJO21CQUFDO29CQUNGLElBQUksRUFBRSxnQkFBZ0I7b0JBQ3RCLElBQUksRUFBRSxJQUFJO2lCQUNiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEYXRlUGlwZSwgRGVjaW1hbFBpcGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0xPQ0FMRV9JRCwgT25EZXN0cm95LCBQaXBlLCBQaXBlVHJhbnNmb3JtLCBpbmplY3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2UsIFRyYW5zbGF0aW9uT2JqZWN0fSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgUmVwbGF5U3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtCb29sZWFuUGlwZSwgRW51bVBpcGV9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge0ZpbHRlckRlc2NyaXB0b3IsIEZpbHRlckxvb2t1cEVudW1EZXNjcmlwdG9yLCBGaWx0ZXJUeXBlRW51bX0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9maWx0ZXInO1xuXG5AUGlwZSh7XG4gICAgbmFtZTogJ21uZ0ZpbHRlclZhbHVlJyxcbiAgICBwdXJlOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIEZpbHRlclZhbHVlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0sIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBsb2NhbGUgPSBpbmplY3QoTE9DQUxFX0lEKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZSA9IGluamVjdChUcmFuc2xhdGVTZXJ2aWNlKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVudW1QaXBlID0gbmV3IEVudW1QaXBlKCk7XG5cbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbj86IFN1YnNjcmlwdGlvbjtcbiAgICBzdWJqZWN0ID0gbmV3IFJlcGxheVN1YmplY3Q8YW55PigxKTtcblxuICAgIHRyYW5zZm9ybSh2YWx1ZTogdW5rbm93biwgZGVzY3JpcHRvcj86IEZpbHRlckRlc2NyaXB0b3I8YW55LCBhbnk+KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICAgICAgY29uc3QgdmFsVHJhbnNmb3JtID0gdGhpcy5wcmVwYXJlVmFsdWVUcmFuc2Zvcm0odmFsdWUsIGRlc2NyaXB0b3IpO1xuXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpO1xuICAgICAgICBpZiAodmFsVHJhbnNmb3JtLnRyYW5zbGF0ZSkge1xuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb24gPSB0aGlzLnRyYW5zbGF0ZS5zdHJlYW0odmFsVHJhbnNmb3JtLnZhbHVlQXJyKS5zdWJzY3JpYmUoKGkxOG46IFRyYW5zbGF0aW9uT2JqZWN0KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJqZWN0Lm5leHQodmFsVHJhbnNmb3JtLnZhbHVlQXJyLm1hcChrID0+IGkxOG5ba10pLmpvaW4oJywgJykpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN1YmplY3QubmV4dCh2YWxUcmFuc2Zvcm0udmFsdWVBcnIuam9pbignLCAnKSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5zdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIElmIHJldHVybnMgYSBzdHJpbmcsIHRoaXMgcmVwcmVzZW50cyBpMThuIGtleSB0aGF0IG11c3QgZ28gdGhyb3VnaCB0cmFuc2xhdGlvbi4gSWYgdHJhbnNsYXRpb24gaXMgbm90IG5lZWRlZCwgdW5kZWZpbmVkIGlzIHJldHVybmVkLlxuICAgICAqL1xuICAgIHByaXZhdGUgcHJlcGFyZVZhbHVlVHJhbnNmb3JtKHZhbHVlOiB1bmtub3duLCBkZXNjcmlwdG9yPzogRmlsdGVyRGVzY3JpcHRvcjxhbnksIGFueT4pOiB7dHJhbnNsYXRlOiBib29sZWFuOyB2YWx1ZUFycjogYW55W119IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0ge1xuICAgICAgICAgICAgdHJhbnNsYXRlOiBmYWxzZSxcbiAgICAgICAgICAgIHZhbHVlQXJyOiBBcnJheS5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXVxuICAgICAgICB9O1xuICAgICAgICBzd2l0Y2ggKGRlc2NyaXB0b3I/LmZpbHRlclR5cGUpIHtcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyVHlwZUVudW0uRGF0ZTpcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY2FzZS1kZWNsYXJhdGlvbnNcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlUGlwZSA9IG5ldyBEYXRlUGlwZSh0aGlzLmxvY2FsZSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnZhbHVlQXJyID0gcmVzdWx0LnZhbHVlQXJyLm1hcCh2ID0+IGRhdGVQaXBlLnRyYW5zZm9ybSh2IGFzIERhdGUsIGRlc2NyaXB0b3IuZGlzcGxheUZvcm1hdCwgZGVzY3JpcHRvci5sb2NhbGUpKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyVHlwZUVudW0uTnVtYmVyOlxuICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jYXNlLWRlY2xhcmF0aW9uc1xuICAgICAgICAgICAgICAgIGNvbnN0IGRlY2ltYWxQaXBlID0gbmV3IERlY2ltYWxQaXBlKHRoaXMubG9jYWxlKTtcbiAgICAgICAgICAgICAgICByZXN1bHQudmFsdWVBcnIgPSByZXN1bHQudmFsdWVBcnIubWFwKHYgPT4gZGVjaW1hbFBpcGUudHJhbnNmb3JtKHYgYXMgbnVtYmVyLCBkZXNjcmlwdG9yLmRpc3BsYXlGb3JtYXQsIGRlc2NyaXB0b3IubG9jYWxlKSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIEZpbHRlclR5cGVFbnVtLkJvb2xlYW46XG4gICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNhc2UtZGVjbGFyYXRpb25zXG4gICAgICAgICAgICAgICAgY29uc3QgYm9vbGVhblBpcGUgPSBuZXcgQm9vbGVhblBpcGUoKTtcbiAgICAgICAgICAgICAgICByZXN1bHQudmFsdWVBcnIgPSByZXN1bHQudmFsdWVBcnIubWFwKHYgPT4gYm9vbGVhblBpcGUudHJhbnNmb3JtKHYpKTtcbiAgICAgICAgICAgICAgICByZXN1bHQudHJhbnNsYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRmlsdGVyVHlwZUVudW0uTG9va3VwRW51bTpcbiAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY2FzZS1kZWNsYXJhdGlvbnNcbiAgICAgICAgICAgICAgICBjb25zdCBlbnVtUGlwZSA9IG5ldyBFbnVtUGlwZSgpO1xuICAgICAgICAgICAgICAgIHJlc3VsdC52YWx1ZUFyciA9IHJlc3VsdC52YWx1ZUFyci5tYXAodiA9PiBlbnVtUGlwZS50cmFuc2Zvcm0odiwgKGRlc2NyaXB0b3IgYXMgRmlsdGVyTG9va3VwRW51bURlc2NyaXB0b3I8YW55LCBhbnk+KS5lbnVtKSk7XG4gICAgICAgICAgICAgICAgcmVzdWx0LnRyYW5zbGF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgdGhpcy5zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfVxufVxuIl19","import { AsyncPipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, computed, input, output } from '@angular/core';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { Tag } from 'primeng/tag';\nimport { FilterMatchMode, getI18nTypePropertyKey } from '@mediusinc/mng-commons/core';\nimport { FilterValuePipe } from '../../../pipes/filter-value.pipe';\nimport * as i0 from \"@angular/core\";\nexport class TableFilterActiveTagComponent {\n constructor() {\n this.FilterMatchMode = FilterMatchMode;\n this.model = input.required(...(ngDevMode ? [{ debugName: \"model\" }] : []));\n this.filter = input.required(...(ngDevMode ? [{ debugName: \"filter\" }] : []));\n this.edit = output();\n this.remove = output();\n this.label = computed(() => this.getPropertyLabelKey(this.filter().metadata.descriptor), ...(ngDevMode ? [{ debugName: \"label\" }] : []));\n this.matchMode = computed(() => this.filter().displayMatchMode, ...(ngDevMode ? [{ debugName: \"matchMode\" }] : []));\n this.matchModeSymbol = computed(() => `mngFilterActiveTag.matchMode.${this.matchMode()}`, ...(ngDevMode ? [{ debugName: \"matchModeSymbol\" }] : []));\n this.value = computed(() => this.filter().displayValue, ...(ngDevMode ? [{ debugName: \"value\" }] : []));\n }\n onRemove(event) {\n event.stopPropagation();\n this.remove.emit({\n filter: this.filter(),\n event: event\n });\n }\n onEdit(event) {\n this.edit.emit({\n filter: this.filter(),\n event: event\n });\n }\n getPropertyLabelKey(filterDescriptor) {\n if (filterDescriptor.isGenericFilter) {\n return filterDescriptor.property;\n }\n let labelKey;\n if (filterDescriptor.title !== undefined && !filterDescriptor.titleUseModelBase) {\n labelKey = filterDescriptor.title;\n }\n else {\n labelKey = getI18nTypePropertyKey(this.model().i18nBaseKey, filterDescriptor.title ?? filterDescriptor.property);\n }\n return labelKey;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableFilterActiveTagComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.7\", type: TableFilterActiveTagComponent, isStandalone: true, selector: \"mng-table-filter-active-tag\", inputs: { model: { classPropertyName: \"model\", publicName: \"model\", isSignal: true, isRequired: true, transformFunction: null }, filter: { classPropertyName: \"filter\", publicName: \"filter\", isSignal: true, isRequired: true, transformFunction: null } }, outputs: { edit: \"edit\", remove: \"remove\" }, ngImport: i0, template: \"<p-tag severity=\\\"secondary\\\" styleClass=\\\"mr-1 mng-tag-outlined\\\">\\n <div class=\\\"flex items-center gap-2 p-1 cursor-pointer\\\" (click)=\\\"onEdit($event)\\\">\\n <span>{{ label() | translate }}</span>\\n @if (matchMode() === FilterMatchMode.Between) {\\n <span class=\\\"font-semibold\\\">{{ value()?.[0] | mngFilterValue: filter().metadata.descriptor | async }}</span>\\n <span class=\\\"text-primary\\\">{{ matchModeSymbol() | translate }}</span>\\n <span class=\\\"font-semibold\\\">{{ value()?.[1] | mngFilterValue: filter().metadata.descriptor | async }}</span>\\n } @else {\\n <span class=\\\"text-primary\\\">{{ matchModeSymbol() | translate }}</span>\\n <span class=\\\"font-semibold\\\">{{ value() | mngFilterValue: filter().metadata.descriptor | async }}</span>\\n @if (filter().caseSensitive) {\\n <small class=\\\"border-solid border rounded px-1 text-primary-400\\\">Aa</small>\\n }\\n }\\n <span class=\\\"pi pi-times text-xs\\\" (click)=\\\"onRemove($event)\\\"></span>\\n </div>\\n</p-tag>\\n\", styles: [\"mng-table-filter-active-tag.p-tag.p-tag-secondary.mng-tag-outlined{background-color:unset;border:1px solid var(--mng-tag-secondary-outlined-border)}\\n\"], dependencies: [{ kind: \"component\", type: Tag, selector: \"p-tag\", inputs: [\"styleClass\", \"severity\", \"value\", \"icon\", \"rounded\"] }, { kind: \"pipe\", type: TranslatePipe, name: \"translate\" }, { kind: \"pipe\", type: FilterValuePipe, name: \"mngFilterValue\" }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableFilterActiveTagComponent, decorators: [{\n type: Component,\n args: [{ selector: 'mng-table-filter-active-tag', imports: [TranslatePipe, FilterValuePipe, AsyncPipe, Tag], changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: \"<p-tag severity=\\\"secondary\\\" styleClass=\\\"mr-1 mng-tag-outlined\\\">\\n <div class=\\\"flex items-center gap-2 p-1 cursor-pointer\\\" (click)=\\\"onEdit($event)\\\">\\n <span>{{ label() | translate }}</span>\\n @if (matchMode() === FilterMatchMode.Between) {\\n <span class=\\\"font-semibold\\\">{{ value()?.[0] | mngFilterValue: filter().metadata.descriptor | async }}</span>\\n <span class=\\\"text-primary\\\">{{ matchModeSymbol() | translate }}</span>\\n <span class=\\\"font-semibold\\\">{{ value()?.[1] | mngFilterValue: filter().metadata.descriptor | async }}</span>\\n } @else {\\n <span class=\\\"text-primary\\\">{{ matchModeSymbol() | translate }}</span>\\n <span class=\\\"font-semibold\\\">{{ value() | mngFilterValue: filter().metadata.descriptor | async }}</span>\\n @if (filter().caseSensitive) {\\n <small class=\\\"border-solid border rounded px-1 text-primary-400\\\">Aa</small>\\n }\\n }\\n <span class=\\\"pi pi-times text-xs\\\" (click)=\\\"onRemove($event)\\\"></span>\\n </div>\\n</p-tag>\\n\", styles: [\"mng-table-filter-active-tag.p-tag.p-tag-secondary.mng-tag-outlined{background-color:unset;border:1px solid var(--mng-tag-secondary-outlined-border)}\\n\"] }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWFjdGl2ZS10YWcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGFibGUvc3JjL2NvbXBvbmVudHMvZmlsdGVyL2ZpbHRlci1hY3RpdmUtdGFnL2ZpbHRlci1hY3RpdmUtdGFnLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3RhYmxlL3NyYy9jb21wb25lbnRzL2ZpbHRlci9maWx0ZXItYWN0aXZlLXRhZy9maWx0ZXItYWN0aXZlLXRhZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUU3RyxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDbEQsT0FBTyxFQUFDLEdBQUcsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUVoQyxPQUFPLEVBQUMsZUFBZSxFQUFFLHNCQUFzQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFLcEYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLGtDQUFrQyxDQUFDOztBQVVqRSxNQUFNLE9BQU8sNkJBQTZCO0lBUjFDO1FBU29CLG9CQUFlLEdBQUcsZUFBZSxDQUFDO1FBRTNDLFVBQUssR0FBRyxLQUFLLENBQUMsUUFBUSxnREFBd0IsQ0FBQztRQUMvQyxXQUFNLEdBQUcsS0FBSyxDQUFDLFFBQVEsaURBQWUsQ0FBQztRQUV2QyxTQUFJLEdBQUcsTUFBTSxFQUF3QixDQUFDO1FBQ3RDLFdBQU0sR0FBRyxNQUFNLEVBQXdCLENBQUM7UUFFeEMsVUFBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsaURBQUMsQ0FBQztRQUNwRixjQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxnQkFBZ0IscURBQUMsQ0FBQztRQUMzRCxvQkFBZSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxnQ0FBZ0MsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLDJEQUFDLENBQUM7UUFDckYsVUFBSyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsWUFBWSxpREFBQyxDQUFDO0tBOEI3RDtJQTVCRyxRQUFRLENBQUMsS0FBWTtRQUNqQixLQUFLLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDeEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDYixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNyQixLQUFLLEVBQUUsS0FBSztTQUNmLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxNQUFNLENBQUMsS0FBWTtRQUNmLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO1lBQ1gsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDckIsS0FBSyxFQUFFLEtBQUs7U0FDZixDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sbUJBQW1CLENBQUMsZ0JBQTRDO1FBQ3BFLElBQUksZ0JBQWdCLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDbkMsT0FBTyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUM7UUFDckMsQ0FBQztRQUVELElBQUksUUFBZ0IsQ0FBQztRQUNyQixJQUFJLGdCQUFnQixDQUFDLEtBQUssS0FBSyxTQUFTLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzlFLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7UUFDdEMsQ0FBQzthQUFNLENBQUM7WUFDSixRQUFRLEdBQUcsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLElBQUksZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckgsQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7OEdBekNRLDZCQUE2QjtrR0FBN0IsNkJBQTZCLGlZQ3JCMUMsb2tDQWlCQSxnTkRBeUQsR0FBRyw2R0FBOUMsYUFBYSw2Q0FBRSxlQUFlLGtEQUFFLFNBQVM7OzJGQUkxQyw2QkFBNkI7a0JBUnpDLFNBQVM7K0JBQ0ksNkJBQTZCLFdBRzlCLENBQUMsYUFBYSxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsR0FBRyxDQUFDLG1CQUN4Qyx1QkFBdUIsQ0FBQyxNQUFNLGlCQUNoQyxpQkFBaUIsQ0FBQyxJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBc3luY1BpcGV9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge0NoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIFZpZXdFbmNhcHN1bGF0aW9uLCBjb21wdXRlZCwgaW5wdXQsIG91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7VHJhbnNsYXRlUGlwZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge1RhZ30gZnJvbSAncHJpbWVuZy90YWcnO1xuXG5pbXBvcnQge0ZpbHRlck1hdGNoTW9kZSwgZ2V0STE4blR5cGVQcm9wZXJ0eUtleX0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9jb3JlJztcbmltcG9ydCB7RmlsdGVyRGVzY3JpcHRvcn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9maWx0ZXInO1xuaW1wb3J0IHtNb2RlbERlc2NyaXB0b3J9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvbW9kZWwnO1xuXG5pbXBvcnQge0ZpbHRlckFjdGl2ZVRhZ0V2ZW50LCBGaWx0ZXJTdGF0ZX0gZnJvbSAnLi4vLi4vLi4vbW9kZWxzL2ZpbHRlci5tb2RlbCc7XG5pbXBvcnQge0ZpbHRlclZhbHVlUGlwZX0gZnJvbSAnLi4vLi4vLi4vcGlwZXMvZmlsdGVyLXZhbHVlLnBpcGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ21uZy10YWJsZS1maWx0ZXItYWN0aXZlLXRhZycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZpbHRlci1hY3RpdmUtdGFnLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vZmlsdGVyLWFjdGl2ZS10YWcuY29tcG9uZW50LmNzcycsXG4gICAgaW1wb3J0czogW1RyYW5zbGF0ZVBpcGUsIEZpbHRlclZhbHVlUGlwZSwgQXN5bmNQaXBlLCBUYWddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVGaWx0ZXJBY3RpdmVUYWdDb21wb25lbnQge1xuICAgIHB1YmxpYyByZWFkb25seSBGaWx0ZXJNYXRjaE1vZGUgPSBGaWx0ZXJNYXRjaE1vZGU7XG5cbiAgICBwdWJsaWMgbW9kZWwgPSBpbnB1dC5yZXF1aXJlZDxNb2RlbERlc2NyaXB0b3I8YW55Pj4oKTtcbiAgICBwdWJsaWMgZmlsdGVyID0gaW5wdXQucmVxdWlyZWQ8RmlsdGVyU3RhdGU+KCk7XG5cbiAgICBwdWJsaWMgZWRpdCA9IG91dHB1dDxGaWx0ZXJBY3RpdmVUYWdFdmVudD4oKTtcbiAgICBwdWJsaWMgcmVtb3ZlID0gb3V0cHV0PEZpbHRlckFjdGl2ZVRhZ0V2ZW50PigpO1xuXG4gICAgcHVibGljIGxhYmVsID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5nZXRQcm9wZXJ0eUxhYmVsS2V5KHRoaXMuZmlsdGVyKCkubWV0YWRhdGEuZGVzY3JpcHRvcikpO1xuICAgIHB1YmxpYyBtYXRjaE1vZGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmZpbHRlcigpLmRpc3BsYXlNYXRjaE1vZGUpO1xuICAgIHB1YmxpYyBtYXRjaE1vZGVTeW1ib2wgPSBjb21wdXRlZCgoKSA9PiBgbW5nRmlsdGVyQWN0aXZlVGFnLm1hdGNoTW9kZS4ke3RoaXMubWF0Y2hNb2RlKCl9YCk7XG4gICAgcHVibGljIHZhbHVlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5maWx0ZXIoKS5kaXNwbGF5VmFsdWUpO1xuXG4gICAgb25SZW1vdmUoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICB0aGlzLnJlbW92ZS5lbWl0KHtcbiAgICAgICAgICAgIGZpbHRlcjogdGhpcy5maWx0ZXIoKSxcbiAgICAgICAgICAgIGV2ZW50OiBldmVudFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkVkaXQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIHRoaXMuZWRpdC5lbWl0KHtcbiAgICAgICAgICAgIGZpbHRlcjogdGhpcy5maWx0ZXIoKSxcbiAgICAgICAgICAgIGV2ZW50OiBldmVudFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFByb3BlcnR5TGFiZWxLZXkoZmlsdGVyRGVzY3JpcHRvcjogRmlsdGVyRGVzY3JpcHRvcjxhbnksIGFueT4pIHtcbiAgICAgICAgaWYgKGZpbHRlckRlc2NyaXB0b3IuaXNHZW5lcmljRmlsdGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyRGVzY3JpcHRvci5wcm9wZXJ0eTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBsYWJlbEtleTogc3RyaW5nO1xuICAgICAgICBpZiAoZmlsdGVyRGVzY3JpcHRvci50aXRsZSAhPT0gdW5kZWZpbmVkICYmICFmaWx0ZXJEZXNjcmlwdG9yLnRpdGxlVXNlTW9kZWxCYXNlKSB7XG4gICAgICAgICAgICBsYWJlbEtleSA9IGZpbHRlckRlc2NyaXB0b3IudGl0bGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsYWJlbEtleSA9IGdldEkxOG5UeXBlUHJvcGVydHlLZXkodGhpcy5tb2RlbCgpLmkxOG5CYXNlS2V5LCBmaWx0ZXJEZXNjcmlwdG9yLnRpdGxlID8/IGZpbHRlckRlc2NyaXB0b3IucHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsYWJlbEtleTtcbiAgICB9XG59XG4iLCI8cC10YWcgc2V2ZXJpdHk9XCJzZWNvbmRhcnlcIiBzdHlsZUNsYXNzPVwibXItMSBtbmctdGFnLW91dGxpbmVkXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0yIHAtMSBjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJvbkVkaXQoJGV2ZW50KVwiPlxuICAgICAgICA8c3Bhbj57eyBsYWJlbCgpIHwgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICBAaWYgKG1hdGNoTW9kZSgpID09PSBGaWx0ZXJNYXRjaE1vZGUuQmV0d2Vlbikge1xuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmb250LXNlbWlib2xkXCI+e3sgdmFsdWUoKT8uWzBdIHwgbW5nRmlsdGVyVmFsdWU6IGZpbHRlcigpLm1ldGFkYXRhLmRlc2NyaXB0b3IgfCBhc3luYyB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1wcmltYXJ5XCI+e3sgbWF0Y2hNb2RlU3ltYm9sKCkgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtc2VtaWJvbGRcIj57eyB2YWx1ZSgpPy5bMV0gfCBtbmdGaWx0ZXJWYWx1ZTogZmlsdGVyKCkubWV0YWRhdGEuZGVzY3JpcHRvciB8IGFzeW5jIH19PC9zcGFuPlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1wcmltYXJ5XCI+e3sgbWF0Y2hNb2RlU3ltYm9sKCkgfCB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZvbnQtc2VtaWJvbGRcIj57eyB2YWx1ZSgpIHwgbW5nRmlsdGVyVmFsdWU6IGZpbHRlcigpLm1ldGFkYXRhLmRlc2NyaXB0b3IgfCBhc3luYyB9fTwvc3Bhbj5cbiAgICAgICAgICAgIEBpZiAoZmlsdGVyKCkuY2FzZVNlbnNpdGl2ZSkge1xuICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cImJvcmRlci1zb2xpZCBib3JkZXIgcm91bmRlZCBweC0xIHRleHQtcHJpbWFyeS00MDBcIj5BYTwvc21hbGw+XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJwaSBwaS10aW1lcyB0ZXh0LXhzXCIgKGNsaWNrKT1cIm9uUmVtb3ZlKCRldmVudClcIj48L3NwYW4+XG4gICAgPC9kaXY+XG48L3AtdGFnPlxuIl19","import { NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ElementRef, booleanAttribute, computed, inject, input, output, signal, viewChild } from '@angular/core';\nimport { takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { ButtonDirective } from 'primeng/button';\nimport { Checkbox } from 'primeng/checkbox';\nimport { DatePicker } from 'primeng/datepicker';\nimport { InputNumber } from 'primeng/inputnumber';\nimport { InputText } from 'primeng/inputtext';\nimport { Message } from 'primeng/message';\nimport { ToggleButton } from 'primeng/togglebutton';\nimport { NEVER, switchMap } from 'rxjs';\nimport { FilterMatchMode, effectWithDeps, getI18nTypePropertyKey } from '@mediusinc/mng-commons/core';\nimport { FilterLookupTypeEnum, FilterTypeEnum } from '@mediusinc/mng-commons/filter';\nimport { AutocompleteComponent, DateRangeComponent, DropdownComponent, InputTrimDirective, NumberRangeComponent } from '@mediusinc/mng-commons/form';\nimport { lookupDataProvider } from '@mediusinc/mng-commons/form/api';\nimport { filterAdjustDisplayValueOnMatchModeChange, filterGetDefaultMatchMode } from '../../../helpers/filters';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/forms\";\nexport class TableFilterFormComponent {\n constructor() {\n this.lookupTypeDropdown = FilterLookupTypeEnum.Dropdown;\n this.lookupTypeAutocomplete = FilterLookupTypeEnum.Autocomplete;\n this.FilterTypeEnum = FilterTypeEnum;\n this.FilterMatchMode = FilterMatchMode;\n this.elementRef = inject(ElementRef);\n this.translate = inject(TranslateService);\n this.title = input(...(ngDevMode ? [undefined, { debugName: \"title\" }] : []));\n this.metadata = input.required(...(ngDevMode ? [{ debugName: \"metadata\" }] : []));\n this.genericDescriptor = input(...(ngDevMode ? [undefined, { debugName: \"genericDescriptor\" }] : []));\n this.model = input.required(...(ngDevMode ? [{ debugName: \"model\" }] : []));\n this.filter = input(...(ngDevMode ? [undefined, { debugName: \"filter\" }] : []));\n this.overlay = input(...(ngDevMode ? [undefined, { debugName: \"overlay\" }] : []));\n this.disabledProperties = input([], ...(ngDevMode ? [{ debugName: \"disabledProperties\" }] : []));\n this.enableCaseSensitive = input(true, ...(ngDevMode ? [{ debugName: \"enableCaseSensitive\" }] : []));\n this.propertySearch = input(false, ...(ngDevMode ? [{ debugName: \"propertySearch\", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));\n this.apply = output();\n this.propertyOptionsWithTranslations = computed(() => {\n const disabledProperties = this.disabledProperties();\n const filter = this.filter();\n return (this.metadata()?.map(d => {\n return {\n property: d.descriptor.property,\n label: d.descriptor.isGenericFilter ? d.descriptor.property : this.getPropertyLabelKey(d.descriptor),\n disabled: !filter && disabledProperties.includes(d.descriptor.property)\n };\n }) ?? []);\n }, ...(ngDevMode ? [{ debugName: \"propertyOptionsWithTranslations\" }] : []));\n this.selectedFilterMetadata = computed(() => {\n const property = this.propertyModel();\n return this.metadata().find(d => d.descriptor.property === property);\n }, ...(ngDevMode ? [{ debugName: \"selectedFilterMetadata\" }] : []));\n // change value lookup function to include the property name of the generic filter\n this.genericValueDataProvider = computed(() => {\n const genericValueProvider = this.genericDescriptor()?.valueLookup;\n if (genericValueProvider && genericValueProvider.serviceType) {\n const lookupFn = genericValueProvider.lookup;\n return lookupDataProvider({ service: genericValueProvider.serviceType }).withLookup((params, service, search) => {\n params = {\n ...params,\n filters: {\n ...params?.filters,\n field: {\n value: this.selectedFilterMetadata()?.descriptor.property,\n matchMode: this.selectedFilterMetadata()?.descriptor.filterType === FilterTypeEnum.LookupEnum ? FilterMatchMode.In : FilterMatchMode.StartsWith\n }\n }\n };\n return lookupFn(params, service, search);\n });\n }\n return;\n }, ...(ngDevMode ? [{ debugName: \"genericValueDataProvider\" }] : []));\n this.selectedDescriptorAsLookup = computed(() => {\n const filterDescriptor = this.selectedFilterMetadata()?.descriptor;\n return filterDescriptor !== undefined &&\n !filterDescriptor.isGenericFilter &&\n (filterDescriptor.filterType === FilterTypeEnum.Lookup || filterDescriptor.filterType === FilterTypeEnum.LookupEnum)\n ? filterDescriptor\n : undefined;\n }, ...(ngDevMode ? [{ debugName: \"selectedDescriptorAsLookup\" }] : []));\n this.isEdit = computed(() => this.filter() != null, ...(ngDevMode ? [{ debugName: \"isEdit\" }] : []));\n this.formSubmitted = signal(false, ...(ngDevMode ? [{ debugName: \"formSubmitted\" }] : []));\n this.formErrorMessage = signal([], ...(ngDevMode ? [{ debugName: \"formErrorMessage\" }] : []));\n // UI utilities\n this.filterForm = viewChild.required('filterForm');\n // Filter form model and form utilities\n this.propertyModel = signal(null, ...(ngDevMode ? [{ debugName: \"propertyModel\" }] : []));\n this.matchModeModel = signal(null, ...(ngDevMode ? [{ debugName: \"matchModeModel\" }] : []));\n this.valueModel = signal(null, ...(ngDevMode ? [{ debugName: \"valueModel\" }] : []));\n this.caseSensitiveModel = signal(false, ...(ngDevMode ? [{ debugName: \"caseSensitiveModel\" }] : []));\n this.isMultiselect = computed(() => this.matchModeModel() === FilterMatchMode.In || this.matchModeModel() === FilterMatchMode.NotIn, ...(ngDevMode ? [{ debugName: \"isMultiselect\" }] : []));\n effectWithDeps([this.filter], ([edit]) => {\n if (edit) {\n this.resetForm({\n property: edit.metadata.descriptor.property,\n matchMode: edit.displayMatchMode ?? edit.matchMode ?? null,\n value: edit.displayValue ?? edit.value,\n caseSensitive: edit.caseSensitive ?? false\n });\n }\n else {\n this.resetForm();\n }\n });\n effectWithDeps([this.selectedFilterMetadata], ([selectedFilterMetadata]) => {\n const descriptor = selectedFilterMetadata?.descriptor;\n const value = this.valueModel();\n if (value != null) {\n // reset value if filter type and value type mismatch\n if ((descriptor?.filterType === FilterTypeEnum.String && (value === true || value === false || value === 'true' || value === 'false' || value instanceof Date)) ||\n (descriptor?.filterType === FilterTypeEnum.Number && typeof value !== 'number' && isNaN(+value)) ||\n (descriptor?.filterType === FilterTypeEnum.Date && !(value instanceof Date))) {\n this.valueModel.set(null);\n }\n else if (descriptor?.filterType === FilterTypeEnum.Boolean && typeof value !== 'boolean') {\n this.valueModel.set(false);\n }\n }\n const matchModeOptions = selectedFilterMetadata?.matchModes ?? [];\n const matchMode = this.matchModeModel();\n const filterForm = this.filterForm();\n const isEdit = this.isEdit();\n if (matchModeOptions.length > 0 &&\n (!matchMode ||\n (!isEdit && (filterForm.controls['matchMode']?.pristine || filterForm.controls['matchMode']?.untouched)) ||\n !matchModeOptions.find(o => o.value === matchMode))) {\n // reset match mode is needed\n this.matchModeModel.set(filterGetDefaultMatchMode(this.selectedFilterMetadata()?.descriptor, matchModeOptions));\n }\n });\n effectWithDeps([this.matchModeModel], ([matchModeModel]) => this.valueModel.set(filterAdjustDisplayValueOnMatchModeChange(matchModeModel ?? undefined, this.valueModel())));\n toObservable(this.overlay)\n .pipe(switchMap(o => (o ? o.onShow : NEVER)), takeUntilDestroyed())\n .subscribe(() => {\n const formFields = this.elementRef.nativeElement.querySelectorAll('input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [role=\"combobox\"]:not([disabled])');\n const activeEl = document.activeElement;\n const activeInputIdx = activeEl ? [...formFields].findIndex(el => activeEl.isEqualNode(el)) : 0;\n if (activeInputIdx <= 0) {\n formFields[0].focus();\n }\n });\n }\n onFormSubmit(form) {\n this.formSubmitted.set(true);\n // mark all as dirty\n for (const key in form.controls) {\n form.controls[key].markAsDirty();\n }\n const property = this.propertyModel();\n const matchMode = this.matchModeModel();\n if (form.invalid || !property || !matchMode) {\n this.formErrorMessage.set([\n {\n severity: 'warn',\n summary: this.translate.instant('mngFilter.messages.invalidFormTitle'),\n detail: this.translate.instant('mngFilter.messages.invalidFormMessage')\n }\n ]);\n return;\n }\n this.apply.emit({\n property: property,\n matchMode: matchMode,\n value: this.valueModel(),\n caseSensitive: this.caseSensitiveModel()\n });\n // resetting the form is done from the parent component (filter-overlay-with-tag) for smoother animations\n }\n resetForm(value) {\n this.filterForm().resetForm(value);\n // somehow have to set case sensitivity manually\n this.caseSensitiveModel.set(value?.caseSensitive ?? false);\n this.formSubmitted.set(false);\n }\n getPropertyLabelKey(filterDescriptor) {\n let labelKey;\n if (filterDescriptor.title !== undefined && !filterDescriptor.titleUseModelBase) {\n labelKey = filterDescriptor.title;\n }\n else {\n labelKey = getI18nTypePropertyKey(this.model().i18nBaseKey, filterDescriptor.title ?? filterDescriptor.property);\n }\n return labelKey;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableFilterFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.7\", type: TableFilterFormComponent, isStandalone: true, selector: \"mng-table-filter-form\", inputs: { title: { classPropertyName: \"title\", publicName: \"title\", isSignal: true, isRequired: false, transformFunction: null }, metadata: { classPropertyName: \"metadata\", publicName: \"metadata\", isSignal: true, isRequired: true, transformFunction: null }, genericDescriptor: { classPropertyName: \"genericDescriptor\", publicName: \"genericDescriptor\", isSignal: true, isRequired: false, transformFunction: null }, model: { classPropertyName: \"model\", publicName: \"model\", isSignal: true, isRequired: true, transformFunction: null }, filter: { classPropertyName: \"filter\", publicName: \"filter\", isSignal: true, isRequired: false, transformFunction: null }, overlay: { classPropertyName: \"overlay\", publicName: \"overlay\", isSignal: true, isRequired: false, transformFunction: null }, disabledProperties: { classPropertyName: \"disabledProperties\", publicName: \"disabledProperties\", isSignal: true, isRequired: false, transformFunction: null }, enableCaseSensitive: { classPropertyName: \"enableCaseSensitive\", publicName: \"enableCaseSensitive\", isSignal: true, isRequired: false, transformFunction: null }, propertySearch: { classPropertyName: \"propertySearch\", publicName: \"propertySearch\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { apply: \"apply\" }, host: { classAttribute: \"flex grow\" }, viewQueries: [{ propertyName: \"filterForm\", first: true, predicate: [\"filterForm\"], descendants: true, isSignal: true }], ngImport: i0, template: \"<div>\\n <div>\\n <h5>{{ filter() ? ('mngFilter.titleEdit' | translate) : ('mngFilter.titleAdd' | translate) }}</h5>\\n </div>\\n <form #filterForm=\\\"ngForm\\\" (ngSubmit)=\\\"onFormSubmit(filterForm)\\\" class=\\\"flex flex-col items-center lg:flex-row gap-4\\\">\\n <div class=\\\"w-full lg:w-auto\\\">\\n <mng-dropdown\\n name=\\\"property\\\"\\n id=\\\"property\\\"\\n tabindex=\\\"1\\\"\\n #propertyControl=\\\"ngModel\\\"\\n [(ngModel)]=\\\"propertyModel\\\"\\n [options]=\\\"propertyOptionsWithTranslations()\\\"\\n optionsValueProperty=\\\"property\\\"\\n optionsDisabledProperty=\\\"disabled\\\"\\n optionsLabelProperty=\\\"label\\\"\\n [placeholder]=\\\"'mngFilter.property' | translate\\\"\\n [optionsLabelTranslate]=\\\"!propertySearch()\\\"\\n [inlineSearch]=\\\"propertySearch()\\\"\\n required=\\\"true\\\"\\n className=\\\"w-full\\\"\\n [disabled]=\\\"isEdit()\\\"\\n [appendTo]=\\\"null\\\" />\\n </div>\\n <div class=\\\"w-full lg:w-auto\\\">\\n <mng-dropdown\\n name=\\\"matchMode\\\"\\n id=\\\"matchMode\\\"\\n [(ngModel)]=\\\"matchModeModel\\\"\\n className=\\\"w-full\\\"\\n [options]=\\\"selectedFilterMetadata()?.matchModes ?? []\\\"\\n [placeholder]=\\\"'mngFilter.matchMode' | translate\\\"\\n [disabled]=\\\"!propertyControl.value\\\"\\n class=\\\"self-end\\\"\\n required=\\\"true\\\"\\n [appendTo]=\\\"null\\\" />\\n </div>\\n @if (!(matchModeModel() === FilterMatchMode.Exists || matchModeModel() === FilterMatchMode.DoesNotExist)) {\\n <div class=\\\"w-full lg:w-auto flex flex-col\\\">\\n @switch (selectedFilterMetadata()?.descriptor?.filterType) {\\n @case (FilterTypeEnum.Number) {\\n @if (matchModeModel() === FilterMatchMode.Between) {\\n <mng-number-range\\n className=\\\"mng-column-filter-number-input\\\"\\n name=\\\"value\\\"\\n [(ngModel)]=\\\"valueModel\\\"\\n [placeholder]=\\\"'mngFilter.value' | translate\\\"\\n [useGrouping]=\\\"selectedFilterMetadata()?.descriptor?.numberUseGrouping ?? false\\\"\\n [minFractionDigits]=\\\"selectedFilterMetadata()?.numberConfig?.fractionsMin\\\"\\n [maxFractionDigits]=\\\"selectedFilterMetadata()?.numberConfig?.fractionsMax\\\"\\n required=\\\"true\\\" />\\n } @else {\\n <p-inputNumber\\n inputStyleClass=\\\"mng-column-filter-number-input\\\"\\n name=\\\"value\\\"\\n [(ngModel)]=\\\"valueModel\\\"\\n [styleClass]=\\\"'w-full'\\\"\\n [placeholder]=\\\"'mngFilter.value' | translate\\\"\\n [useGrouping]=\\\"selectedFilterMetadata()?.descriptor?.numberUseGrouping\\\"\\n [minFractionDigits]=\\\"selectedFilterMetadata()?.numberConfig?.fractionsMin\\\"\\n [maxFractionDigits]=\\\"selectedFilterMetadata()?.numberConfig?.fractionsMax\\\"\\n [disabled]=\\\"!matchModeModel()\\\"\\n required=\\\"true\\\" />\\n }\\n }\\n\\n @case (FilterTypeEnum.Boolean) {\\n <p-checkbox [(ngModel)]=\\\"valueModel\\\" [disabled]=\\\"!matchModeModel()\\\" name=\\\"value\\\" binary=\\\"true\\\" required=\\\"true\\\" />\\n }\\n @case (FilterTypeEnum.Date) {\\n @if (matchModeModel() === FilterMatchMode.Between) {\\n <mng-date-range\\n [(ngModel)]=\\\"valueModel\\\"\\n name=\\\"value\\\"\\n [showTime]=\\\"selectedFilterMetadata()?.dateConfig?.showTime ?? false\\\"\\n [showSeconds]=\\\"selectedFilterMetadata()?.dateConfig?.showSeconds ?? false\\\"\\n [dateFormat]=\\\"selectedFilterMetadata()?.dateConfig?.format\\\"\\n [placeholder]=\\\"'mngFilter.value' | translate\\\"\\n required=\\\"true\\\"></mng-date-range>\\n } @else {\\n <p-date-picker\\n appendTo=\\\"body\\\"\\n name=\\\"value\\\"\\n [(ngModel)]=\\\"valueModel\\\"\\n [styleClass]=\\\"'w-full'\\\"\\n [placeholder]=\\\"'mngFilter.value' | translate\\\"\\n [showIcon]=\\\"true\\\"\\n [showTime]=\\\"selectedFilterMetadata()?.dateConfig?.showTime ?? false\\\"\\n [showSeconds]=\\\"selectedFilterMetadata()?.dateConfig?.showSeconds ?? false\\\"\\n [dateFormat]=\\\"selectedFilterMetadata()?.dateConfig?.format\\\"\\n [firstDayOfWeek]=\\\"1\\\"\\n [disabled]=\\\"!matchModeModel()\\\"\\n required=\\\"true\\\">\\n </p-date-picker>\\n }\\n }\\n @case (FilterTypeEnum.Lookup) {\\n <ng-container *ngTemplateOutlet=\\\"lookupFilter\\\"></ng-container>\\n }\\n @case (FilterTypeEnum.LookupEnum) {\\n <ng-container *ngTemplateOutlet=\\\"lookupFilter\\\"></ng-container>\\n }\\n @default {\\n @if (selectedFilterMetadata()?.descriptor?.genericValueProvider && genericValueDataProvider()) {\\n <div class=\\\"flex\\\">\\n <mng-dropdown\\n [(ngModel)]=\\\"valueModel\\\"\\n name=\\\"value\\\"\\n [dataProvider]=\\\"genericValueDataProvider()\\\"\\n [className]=\\\"selectedFilterMetadata()?.descriptor?.className + ' ' + (enableCaseSensitive() ? 'rounded-r-none!' : '')\\\"\\n [dropdownClassName]=\\\"selectedFilterMetadata()?.descriptor?.dropdownClassName\\\"\\n [placeholder]=\\\"valueModel() ? undefined : ('mngFilter.value' | translate)\\\"\\n allowInput=\\\"true\\\"\\n [disabled]=\\\"!matchModeModel()\\\"\\n [appendTo]=\\\"null\\\"\\n required=\\\"true\\\" />\\n @if (enableCaseSensitive()) {\\n <p-toggle-button\\n [(ngModel)]=\\\"caseSensitiveModel\\\"\\n [disabled]=\\\"!matchModeModel()\\\"\\n name=\\\"caseSensitive\\\"\\n styleClass=\\\"mng-button-xs mng-toggle-button-addon-right\\\"\\n onLabel=\\\"Aa\\\"\\n offLabel=\\\"Aa\\\" />\\n }\\n </div>\\n } @else {\\n <div class=\\\"flex\\\">\\n <input\\n [(ngModel)]=\\\"valueModel\\\"\\n name=\\\"value\\\"\\n type=\\\"text\\\"\\n pInputText\\n class=\\\"mng-column-filter-string-input w-full\\\"\\n [class.rounded-r-none!]=\\\"enableCaseSensitive()\\\"\\n [attr.placeholder]=\\\"'mngFilter.value' | translate\\\"\\n [mngInputTrim]=\\\"selectedFilterMetadata()?.descriptor?.trimOption\\\"\\n [disabled]=\\\"!matchModeModel()\\\"\\n [placeholder]=\\\"'mngFilter.value' | translate\\\"\\n required=\\\"true\\\" />\\n @if (enableCaseSensitive()) {\\n <p-toggle-button\\n [(ngModel)]=\\\"caseSensitiveModel\\\"\\n [disabled]=\\\"!matchModeModel()\\\"\\n name=\\\"caseSensitive\\\"\\n styleClass=\\\"mng-button-xs mng-toggle-button-addon-right\\\"\\n onLabel=\\\"Aa\\\"\\n offLabel=\\\"Aa\\\" />\\n }\\n </div>\\n }\\n }\\n }\\n <ng-template #lookupFilter>\\n @if (selectedDescriptorAsLookup(); as lookupFilterDescriptor) {\\n @switch (lookupFilterDescriptor.lookupType) {\\n @case (lookupTypeAutocomplete) {\\n <mng-autocomplete\\n [(ngModel)]=\\\"valueModel\\\"\\n name=\\\"value\\\"\\n [dataProvider]=\\\"lookupFilterDescriptor.dataProvider\\\"\\n [optionsTrackProperty]=\\\"lookupFilterDescriptor.optionsValueProperty\\\"\\n [optionsValueProperty]=\\\"lookupFilterDescriptor.optionsValueProperty\\\"\\n [optionsLabelProperty]=\\\"lookupFilterDescriptor.optionsLabelProperty\\\"\\n [optionsLabelTranslate]=\\\"lookupFilterDescriptor.optionsLabelTranslate\\\"\\n [multiselect]=\\\"isMultiselect()\\\"\\n [autoClear]=\\\"lookupFilterDescriptor.autocompleteAutoClear ?? false\\\"\\n [openOnFocus]=\\\"lookupFilterDescriptor.autocompleteAutoClear ?? true\\\"\\n [inlineSearch]=\\\"lookupFilterDescriptor.autocompleteInlineSearch ?? false\\\"\\n [placeholder]=\\\"'mngFilter.value' | translate\\\"\\n [className]=\\\"lookupFilterDescriptor.className\\\"\\n [dropdownClassName]=\\\"lookupFilterDescriptor.dropdownClassName\\\"\\n [searchTrim]=\\\"selectedFilterMetadata()?.descriptor?.trimOption\\\"\\n [disabled]=\\\"!matchModeModel()\\\"\\n required=\\\"true\\\">\\n </mng-autocomplete>\\n }\\n @case (lookupTypeDropdown) {\\n <mng-dropdown\\n [(ngModel)]=\\\"valueModel\\\"\\n name=\\\"value\\\"\\n [dataProvider]=\\\"lookupFilterDescriptor.dataProvider\\\"\\n [optionsValueProperty]=\\\"lookupFilterDescriptor.optionsValueProperty\\\"\\n [optionsLabelProperty]=\\\"lookupFilterDescriptor.optionsLabelProperty\\\"\\n [optionsLabelTranslate]=\\\"lookupFilterDescriptor.optionsLabelTranslate\\\"\\n [multiselect]=\\\"isMultiselect()\\\"\\n [placeholder]=\\\"'mngFilter.value' | translate\\\"\\n [className]=\\\"lookupFilterDescriptor.className + ' w-full'\\\"\\n [dropdownClassName]=\\\"lookupFilterDescriptor.dropdownClassName\\\"\\n showClear=\\\"false\\\"\\n [disabled]=\\\"!matchModeModel()\\\"\\n [appendTo]=\\\"null\\\"\\n required=\\\"true\\\">\\n </mng-dropdown>\\n }\\n }\\n } @else if (selectedFilterMetadata()?.descriptor?.isGenericFilter && genericValueDataProvider()) {\\n <mng-dropdown\\n [(ngModel)]=\\\"valueModel\\\"\\n name=\\\"value\\\"\\n [dataProvider]=\\\"genericValueDataProvider()\\\"\\n [placeholder]=\\\"'mngFilter.value' | translate\\\"\\n showClear=\\\"false\\\"\\n [disabled]=\\\"!matchModeModel()\\\"\\n [appendTo]=\\\"null\\\"\\n required=\\\"true\\\">\\n </mng-dropdown>\\n }\\n </ng-template>\\n </div>\\n }\\n <div class=\\\"flex justify-end\\\">\\n <button pButton type=\\\"submit\\\" class=\\\"self-end\\\">\\n {{ (filter() ? 'general.apply' : 'general.add') | translate }}\\n </button>\\n </div>\\n </form>\\n @if (formSubmitted() && filterForm.invalid) {\\n @for (message of formErrorMessage(); track message) {\\n <p-message [severity]=\\\"message.severity\\\" [text]=\\\"message.detail\\\" [icon]=\\\"message.icon\\\" styleClass=\\\"mt-2\\\" />\\n }\\n }\\n</div>\\n\", styles: [\":is() .mng-toggle-button-addon-right button,:is() .mng-toggle-button-addon-right button.p-togglebutton-checked{border-color:var(--p-select-border-color)!important;border-left:none!important;border-top-left-radius:0!important;border-bottom-left-radius:0!important}\\n\"], dependencies: [{ kind: \"component\", type: DropdownComponent, selector: \"mng-dropdown\", inputs: [\"dataProvider\", \"options\", \"optionsTrackProperty\", \"optionsLabelProperty\", \"optionsLabelTranslate\", \"optionsValueProperty\", \"optionsDisabledProperty\", \"multiselect\", \"placeholder\", \"showClear\", \"selectFirstItem\", \"className\", \"dropdownClassName\", \"changeValueOnBlur\", \"loading\", \"disabled\", \"allowInput\", \"appendTo\", \"inlineSearch\", \"searchTrim\"], outputs: [\"valueChange\", \"blur\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i1.ɵNgNoValidate, selector: \"form:not([ngNoForm]):not([ngNativeValidate])\" }, { kind: \"directive\", type: i1.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i1.NgControlStatusGroup, selector: \"[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]\" }, { kind: \"directive\", type: i1.RequiredValidator, selector: \":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]\", inputs: [\"required\"] }, { kind: \"directive\", type: i1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"directive\", type: i1.NgForm, selector: \"form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]\", inputs: [\"ngFormOptions\"], outputs: [\"ngSubmit\"], exportAs: [\"ngForm\"] }, { kind: \"directive\", type: InputTrimDirective, selector: \"[mngInputTrim]\", inputs: [\"mngInputTrim\"] }, { kind: \"component\", type: NumberRangeComponent, selector: \"mng-number-range\", inputs: [\"placeholder\", \"useGrouping\", \"minFractionDigits\", \"maxFractionDigits\", \"required\", \"disabled\", \"vertical\"], outputs: [\"keyDown\"] }, { kind: \"component\", type: InputNumber, selector: \"p-inputNumber, p-inputnumber, p-input-number\", inputs: [\"showButtons\", \"format\", \"buttonLayout\", \"inputId\", \"styleClass\", \"placeholder\", \"tabindex\", \"title\", \"ariaLabelledBy\", \"ariaDescribedBy\", \"ariaLabel\", \"ariaRequired\", \"autocomplete\", \"incrementButtonClass\", \"decrementButtonClass\", \"incrementButtonIcon\", \"decrementButtonIcon\", \"readonly\", \"allowEmpty\", \"locale\", \"localeMatcher\", \"mode\", \"currency\", \"currencyDisplay\", \"useGrouping\", \"minFractionDigits\", \"maxFractionDigits\", \"prefix\", \"suffix\", \"inputStyle\", \"inputStyleClass\", \"showClear\", \"autofocus\"], outputs: [\"onInput\", \"onFocus\", \"onBlur\", \"onKeyDown\", \"onClear\"] }, { kind: \"component\", type: DateRangeComponent, selector: \"mng-date-range\", inputs: [\"placeholder\", \"showTime\", \"showSeconds\", \"dateFormat\", \"className\", \"required\", \"disabled\", \"vertical\"] }, { kind: \"component\", type: AutocompleteComponent, selector: \"mng-autocomplete\", inputs: [\"dataProvider\", \"optionsTrackProperty\", \"optionsValueProperty\", \"optionsLabelProperty\", \"optionsLabelTranslate\", \"inlineSearch\", \"openOnFocus\", \"multiselect\", \"placeholder\", \"className\", \"dropdownClassName\", \"showClear\", \"autoClear\", \"selectFirst\", \"searchTrim\", \"disabled\"], outputs: [\"valueChange\", \"blur\"] }, { kind: \"component\", type: Checkbox, selector: \"p-checkbox, p-checkBox, p-check-box\", inputs: [\"value\", \"binary\", \"ariaLabelledBy\", \"ariaLabel\", \"tabindex\", \"inputId\", \"inputStyle\", \"styleClass\", \"inputClass\", \"indeterminate\", \"formControl\", \"checkboxIcon\", \"readonly\", \"autofocus\", \"trueValue\", \"falseValue\", \"variant\", \"size\"], outputs: [\"onChange\", \"onFocus\", \"onBlur\"] }, { kind: \"component\", type: Message, selector: \"p-message\", inputs: [\"severity\", \"text\", \"escape\", \"style\", \"styleClass\", \"closable\", \"icon\", \"closeIcon\", \"life\", \"showTransitionOptions\", \"hideTransitionOptions\", \"size\", \"variant\"], outputs: [\"onClose\"] }, { kind: \"directive\", type: InputText, selector: \"[pInputText]\", inputs: [\"pSize\", \"variant\", \"fluid\", \"invalid\"] }, { kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: ToggleButton, selector: \"p-toggleButton, p-togglebutton, p-toggle-button\", inputs: [\"onLabel\", \"offLabel\", \"onIcon\", \"offIcon\", \"ariaLabel\", \"ariaLabelledBy\", \"styleClass\", \"inputId\", \"tabindex\", \"iconPos\", \"autofocus\", \"size\", \"allowEmpty\", \"fluid\"], outputs: [\"onChange\"] }, { kind: \"component\", type: DatePicker, selector: \"p-datePicker, p-datepicker, p-date-picker\", inputs: [\"iconDisplay\", \"styleClass\", \"inputStyle\", \"inputId\", \"inputStyleClass\", \"placeholder\", \"ariaLabelledBy\", \"ariaLabel\", \"iconAriaLabel\", \"dateFormat\", \"multipleSeparator\", \"rangeSeparator\", \"inline\", \"showOtherMonths\", \"selectOtherMonths\", \"showIcon\", \"icon\", \"readonlyInput\", \"shortYearCutoff\", \"hourFormat\", \"timeOnly\", \"stepHour\", \"stepMinute\", \"stepSecond\", \"showSeconds\", \"showOnFocus\", \"showWeek\", \"startWeekFromFirstDayOfYear\", \"showClear\", \"dataType\", \"selectionMode\", \"maxDateCount\", \"showButtonBar\", \"todayButtonStyleClass\", \"clearButtonStyleClass\", \"autofocus\", \"autoZIndex\", \"baseZIndex\", \"panelStyleClass\", \"panelStyle\", \"keepInvalid\", \"hideOnDateTimeSelect\", \"touchUI\", \"timeSeparator\", \"focusTrap\", \"showTransitionOptions\", \"hideTransitionOptions\", \"tabindex\", \"minDate\", \"maxDate\", \"disabledDates\", \"disabledDays\", \"showTime\", \"responsiveOptions\", \"numberOfMonths\", \"firstDayOfWeek\", \"view\", \"defaultDate\", \"appendTo\"], outputs: [\"onFocus\", \"onBlur\", \"onClose\", \"onSelect\", \"onClear\", \"onInput\", \"onTodayClick\", \"onClearClick\", \"onMonthChange\", \"onYearChange\", \"onClickOutside\", \"onShow\"] }, { kind: \"directive\", type: ButtonDirective, selector: \"[pButton]\", inputs: [\"iconPos\", \"loadingIcon\", \"loading\", \"severity\", \"raised\", \"rounded\", \"text\", \"outlined\", \"size\", \"plain\", \"fluid\", \"label\", \"icon\", \"buttonProps\"] }, { kind: \"pipe\", type: TranslatePipe, name: \"translate\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableFilterFormComponent, decorators: [{\n type: Component,\n args: [{ selector: 'mng-table-filter-form', imports: [\n DropdownComponent,\n FormsModule,\n TranslatePipe,\n InputTrimDirective,\n NumberRangeComponent,\n InputNumber,\n DateRangeComponent,\n AutocompleteComponent,\n Checkbox,\n Message,\n InputText,\n NgTemplateOutlet,\n ToggleButton,\n DatePicker,\n ButtonDirective\n ], changeDetection: ChangeDetectionStrategy.OnPush, host: {\n class: 'flex grow'\n }, template: \"<div>\\n <div>\\n <h5>{{ filter() ? ('mngFilter.titleEdit' | translate) : ('mngFilter.titleAdd' | translate) }}</h5>\\n </div>\\n <form #filterForm=\\\"ngForm\\\" (ngSubmit)=\\\"onFormSubmit(filterForm)\\\" class=\\\"flex flex-col items-center lg:flex-row gap-4\\\">\\n <div class=\\\"w-full lg:w-auto\\\">\\n <mng-dropdown\\n name=\\\"property\\\"\\n id=\\\"property\\\"\\n tabindex=\\\"1\\\"\\n #propertyControl=\\\"ngModel\\\"\\n [(ngModel)]=\\\"propertyModel\\\"\\n [options]=\\\"propertyOptionsWithTranslations()\\\"\\n optionsValueProperty=\\\"property\\\"\\n optionsDisabledProperty=\\\"disabled\\\"\\n optionsLabelProperty=\\\"label\\\"\\n [placeholder]=\\\"'mngFilter.property' | translate\\\"\\n [optionsLabelTranslate]=\\\"!propertySearch()\\\"\\n [inlineSearch]=\\\"propertySearch()\\\"\\n required=\\\"true\\\"\\n className=\\\"w-full\\\"\\n [disabled]=\\\"isEdit()\\\"\\n [appendTo]=\\\"null\\\" />\\n </div>\\n <div class=\\\"w-full lg:w-auto\\\">\\n <mng-dropdown\\n name=\\\"matchMode\\\"\\n id=\\\"matchMode\\\"\\n [(ngModel)]=\\\"matchModeModel\\\"\\n className=\\\"w-full\\\"\\n [options]=\\\"selectedFilterMetadata()?.matchModes ?? []\\\"\\n [placeholder]=\\\"'mngFilter.matchMode' | translate\\\"\\n [disabled]=\\\"!propertyControl.value\\\"\\n class=\\\"self-end\\\"\\n required=\\\"true\\\"\\n [appendTo]=\\\"null\\\" />\\n </div>\\n @if (!(matchModeModel() === FilterMatchMode.Exists || matchModeModel() === FilterMatchMode.DoesNotExist)) {\\n <div class=\\\"w-full lg:w-auto flex flex-col\\\">\\n @switch (selectedFilterMetadata()?.descriptor?.filterType) {\\n @case (FilterTypeEnum.Number) {\\n @if (matchModeModel() === FilterMatchMode.Between) {\\n <mng-number-range\\n className=\\\"mng-column-filter-number-input\\\"\\n name=\\\"value\\\"\\n [(ngModel)]=\\\"valueModel\\\"\\n [placeholder]=\\\"'mngFilter.value' | translate\\\"\\n [useGrouping]=\\\"selectedFilterMetadata()?.descriptor?.numberUseGrouping ?? false\\\"\\n [minFractionDigits]=\\\"selectedFilterMetadata()?.numberConfig?.fractionsMin\\\"\\n [maxFractionDigits]=\\\"selectedFilterMetadata()?.numberConfig?.fractionsMax\\\"\\n required=\\\"true\\\" />\\n } @else {\\n <p-inputNumber\\n inputStyleClass=\\\"mng-column-filter-number-input\\\"\\n name=\\\"value\\\"\\n [(ngModel)]=\\\"valueModel\\\"\\n [styleClass]=\\\"'w-full'\\\"\\n [placeholder]=\\\"'mngFilter.value' | translate\\\"\\n [useGrouping]=\\\"selectedFilterMetadata()?.descriptor?.numberUseGrouping\\\"\\n [minFractionDigits]=\\\"selectedFilterMetadata()?.numberConfig?.fractionsMin\\\"\\n [maxFractionDigits]=\\\"selectedFilterMetadata()?.numberConfig?.fractionsMax\\\"\\n [disabled]=\\\"!matchModeModel()\\\"\\n required=\\\"true\\\" />\\n }\\n }\\n\\n @case (FilterTypeEnum.Boolean) {\\n <p-checkbox [(ngModel)]=\\\"valueModel\\\" [disabled]=\\\"!matchModeModel()\\\" name=\\\"value\\\" binary=\\\"true\\\" required=\\\"true\\\" />\\n }\\n @case (FilterTypeEnum.Date) {\\n @if (matchModeModel() === FilterMatchMode.Between) {\\n <mng-date-range\\n [(ngModel)]=\\\"valueModel\\\"\\n name=\\\"value\\\"\\n [showTime]=\\\"selectedFilterMetadata()?.dateConfig?.showTime ?? false\\\"\\n [showSeconds]=\\\"selectedFilterMetadata()?.dateConfig?.showSeconds ?? false\\\"\\n [dateFormat]=\\\"selectedFilterMetadata()?.dateConfig?.format\\\"\\n [placeholder]=\\\"'mngFilter.value' | translate\\\"\\n required=\\\"true\\\"></mng-date-range>\\n } @else {\\n <p-date-picker\\n appendTo=\\\"body\\\"\\n name=\\\"value\\\"\\n [(ngModel)]=\\\"valueModel\\\"\\n [styleClass]=\\\"'w-full'\\\"\\n [placeholder]=\\\"'mngFilter.value' | translate\\\"\\n [showIcon]=\\\"true\\\"\\n [showTime]=\\\"selectedFilterMetadata()?.dateConfig?.showTime ?? false\\\"\\n [showSeconds]=\\\"selectedFilterMetadata()?.dateConfig?.showSeconds ?? false\\\"\\n [dateFormat]=\\\"selectedFilterMetadata()?.dateConfig?.format\\\"\\n [firstDayOfWeek]=\\\"1\\\"\\n [disabled]=\\\"!matchModeModel()\\\"\\n required=\\\"true\\\">\\n </p-date-picker>\\n }\\n }\\n @case (FilterTypeEnum.Lookup) {\\n <ng-container *ngTemplateOutlet=\\\"lookupFilter\\\"></ng-container>\\n }\\n @case (FilterTypeEnum.LookupEnum) {\\n <ng-container *ngTemplateOutlet=\\\"lookupFilter\\\"></ng-container>\\n }\\n @default {\\n @if (selectedFilterMetadata()?.descriptor?.genericValueProvider && genericValueDataProvider()) {\\n <div class=\\\"flex\\\">\\n <mng-dropdown\\n [(ngModel)]=\\\"valueModel\\\"\\n name=\\\"value\\\"\\n [dataProvider]=\\\"genericValueDataProvider()\\\"\\n [className]=\\\"selectedFilterMetadata()?.descriptor?.className + ' ' + (enableCaseSensitive() ? 'rounded-r-none!' : '')\\\"\\n [dropdownClassName]=\\\"selectedFilterMetadata()?.descriptor?.dropdownClassName\\\"\\n [placeholder]=\\\"valueModel() ? undefined : ('mngFilter.value' | translate)\\\"\\n allowInput=\\\"true\\\"\\n [disabled]=\\\"!matchModeModel()\\\"\\n [appendTo]=\\\"null\\\"\\n required=\\\"true\\\" />\\n @if (enableCaseSensitive()) {\\n <p-toggle-button\\n [(ngModel)]=\\\"caseSensitiveModel\\\"\\n [disabled]=\\\"!matchModeModel()\\\"\\n name=\\\"caseSensitive\\\"\\n styleClass=\\\"mng-button-xs mng-toggle-button-addon-right\\\"\\n onLabel=\\\"Aa\\\"\\n offLabel=\\\"Aa\\\" />\\n }\\n </div>\\n } @else {\\n <div class=\\\"flex\\\">\\n <input\\n [(ngModel)]=\\\"valueModel\\\"\\n name=\\\"value\\\"\\n type=\\\"text\\\"\\n pInputText\\n class=\\\"mng-column-filter-string-input w-full\\\"\\n [class.rounded-r-none!]=\\\"enableCaseSensitive()\\\"\\n [attr.placeholder]=\\\"'mngFilter.value' | translate\\\"\\n [mngInputTrim]=\\\"selectedFilterMetadata()?.descriptor?.trimOption\\\"\\n [disabled]=\\\"!matchModeModel()\\\"\\n [placeholder]=\\\"'mngFilter.value' | translate\\\"\\n required=\\\"true\\\" />\\n @if (enableCaseSensitive()) {\\n <p-toggle-button\\n [(ngModel)]=\\\"caseSensitiveModel\\\"\\n [disabled]=\\\"!matchModeModel()\\\"\\n name=\\\"caseSensitive\\\"\\n styleClass=\\\"mng-button-xs mng-toggle-button-addon-right\\\"\\n onLabel=\\\"Aa\\\"\\n offLabel=\\\"Aa\\\" />\\n }\\n </div>\\n }\\n }\\n }\\n <ng-template #lookupFilter>\\n @if (selectedDescriptorAsLookup(); as lookupFilterDescriptor) {\\n @switch (lookupFilterDescriptor.lookupType) {\\n @case (lookupTypeAutocomplete) {\\n <mng-autocomplete\\n [(ngModel)]=\\\"valueModel\\\"\\n name=\\\"value\\\"\\n [dataProvider]=\\\"lookupFilterDescriptor.dataProvider\\\"\\n [optionsTrackProperty]=\\\"lookupFilterDescriptor.optionsValueProperty\\\"\\n [optionsValueProperty]=\\\"lookupFilterDescriptor.optionsValueProperty\\\"\\n [optionsLabelProperty]=\\\"lookupFilterDescriptor.optionsLabelProperty\\\"\\n [optionsLabelTranslate]=\\\"lookupFilterDescriptor.optionsLabelTranslate\\\"\\n [multiselect]=\\\"isMultiselect()\\\"\\n [autoClear]=\\\"lookupFilterDescriptor.autocompleteAutoClear ?? false\\\"\\n [openOnFocus]=\\\"lookupFilterDescriptor.autocompleteAutoClear ?? true\\\"\\n [inlineSearch]=\\\"lookupFilterDescriptor.autocompleteInlineSearch ?? false\\\"\\n [placeholder]=\\\"'mngFilter.value' | translate\\\"\\n [className]=\\\"lookupFilterDescriptor.className\\\"\\n [dropdownClassName]=\\\"lookupFilterDescriptor.dropdownClassName\\\"\\n [searchTrim]=\\\"selectedFilterMetadata()?.descriptor?.trimOption\\\"\\n [disabled]=\\\"!matchModeModel()\\\"\\n required=\\\"true\\\">\\n </mng-autocomplete>\\n }\\n @case (lookupTypeDropdown) {\\n <mng-dropdown\\n [(ngModel)]=\\\"valueModel\\\"\\n name=\\\"value\\\"\\n [dataProvider]=\\\"lookupFilterDescriptor.dataProvider\\\"\\n [optionsValueProperty]=\\\"lookupFilterDescriptor.optionsValueProperty\\\"\\n [optionsLabelProperty]=\\\"lookupFilterDescriptor.optionsLabelProperty\\\"\\n [optionsLabelTranslate]=\\\"lookupFilterDescriptor.optionsLabelTranslate\\\"\\n [multiselect]=\\\"isMultiselect()\\\"\\n [placeholder]=\\\"'mngFilter.value' | translate\\\"\\n [className]=\\\"lookupFilterDescriptor.className + ' w-full'\\\"\\n [dropdownClassName]=\\\"lookupFilterDescriptor.dropdownClassName\\\"\\n showClear=\\\"false\\\"\\n [disabled]=\\\"!matchModeModel()\\\"\\n [appendTo]=\\\"null\\\"\\n required=\\\"true\\\">\\n </mng-dropdown>\\n }\\n }\\n } @else if (selectedFilterMetadata()?.descriptor?.isGenericFilter && genericValueDataProvider()) {\\n <mng-dropdown\\n [(ngModel)]=\\\"valueModel\\\"\\n name=\\\"value\\\"\\n [dataProvider]=\\\"genericValueDataProvider()\\\"\\n [placeholder]=\\\"'mngFilter.value' | translate\\\"\\n showClear=\\\"false\\\"\\n [disabled]=\\\"!matchModeModel()\\\"\\n [appendTo]=\\\"null\\\"\\n required=\\\"true\\\">\\n </mng-dropdown>\\n }\\n </ng-template>\\n </div>\\n }\\n <div class=\\\"flex justify-end\\\">\\n <button pButton type=\\\"submit\\\" class=\\\"self-end\\\">\\n {{ (filter() ? 'general.apply' : 'general.add') | translate }}\\n </button>\\n </div>\\n </form>\\n @if (formSubmitted() && filterForm.invalid) {\\n @for (message of formErrorMessage(); track message) {\\n <p-message [severity]=\\\"message.severity\\\" [text]=\\\"message.detail\\\" [icon]=\\\"message.icon\\\" styleClass=\\\"mt-2\\\" />\\n }\\n }\\n</div>\\n\", styles: [\":is() .mng-toggle-button-addon-right button,:is() .mng-toggle-button-addon-right button.p-togglebutton-checked{border-color:var(--p-select-border-color)!important;border-left:none!important;border-top-left-radius:0!important;border-bottom-left-radius:0!important}\\n\"] }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLWZvcm0uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGFibGUvc3JjL2NvbXBvbmVudHMvZmlsdGVyL2ZpbHRlci1mb3JtL2ZpbHRlci1mb3JtLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3RhYmxlL3NyYy9jb21wb25lbnRzL2ZpbHRlci9maWx0ZXItZm9ybS9maWx0ZXItZm9ybS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUMsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNuSixPQUFPLEVBQUMsa0JBQWtCLEVBQUUsWUFBWSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDNUUsT0FBTyxFQUFDLFdBQVcsRUFBUyxNQUFNLGdCQUFnQixDQUFDO0FBRW5ELE9BQU8sRUFBQyxhQUFhLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNwRSxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0MsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzFDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxPQUFPLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUV4QyxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sc0JBQXNCLENB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LElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzlFLFFBQVEsR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUM7UUFDdEMsQ0FBQzthQUFNLENBQUM7WUFDSixRQUFRLEdBQUcsc0JBQXNCLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxLQUFLLElBQUksZ0JBQWdCLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckgsQ0FBQztRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7OEdBdE1RLHdCQUF3QjtrR0FBeEIsd0JBQXdCLG0vQ0NuRHJDLGsvYUErTkEsbVVEak1RLGlCQUFpQiwrYkFDakIsV0FBVyxxd0NBRVgsa0JBQWtCLHFGQUNsQixvQkFBb0IseU1BQ3BCLFdBQVcsZ3FCQUNYLGtCQUFrQiw4S0FDbEIscUJBQXFCLDRYQUNyQixRQUFRLGdYQUNSLE9BQU8seVBBQ1AsU0FBUywyR0FDVCxnQkFBZ0Isb0pBQ2hCLFlBQVksb1NBQ1osVUFBVSxnckNBQ1YsZUFBZSwrTUFaZixhQUFhOzsyRkFtQlIsd0JBQXdCO2tCQTFCcEMsU0FBUzsrQkFDSSx1QkFBdUIsV0FHeEI7d0JBQ0wsaUJBQWlCO3dCQUNqQixXQUFXO3dCQUNYLGFBQWE7d0JBQ2Isa0JBQWtCO3dCQUNsQixvQkFBb0I7d0JBQ3BCLFdBQVc7d0JBQ1gsa0JBQWtCO3dCQUNsQixxQkFBcUI7d0JBQ3JCLFFBQVE7d0JBQ1IsT0FBTzt3QkFDUCxTQUFTO3dCQUNULGdCQUFnQjt3QkFDaEIsWUFBWTt3QkFDWixVQUFVO3dCQUNWLGVBQWU7cUJBQ2xCLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNLFFBQ3pDO3dCQUNGLEtBQUssRUFBRSxXQUFXO3FCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdUZW1wbGF0ZU91dGxldH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRWxlbWVudFJlZiwgYm9vbGVhbkF0dHJpYnV0ZSwgY29tcHV0ZWQsIGluamVjdCwgaW5wdXQsIG91dHB1dCwgc2lnbmFsLCB2aWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWQsIHRvT2JzZXJ2YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtGb3Jtc01vZHVsZSwgTmdGb3JtfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7VHJhbnNsYXRlUGlwZSwgVHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge0J1dHRvbkRpcmVjdGl2ZX0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xuaW1wb3J0IHtDaGVja2JveH0gZnJvbSAncHJpbWVuZy9jaGVja2JveCc7XG5pbXBvcnQge0RhdGVQaWNrZXJ9IGZyb20gJ3ByaW1lbmcvZGF0ZXBpY2tlcic7XG5pbXBvcnQge0lucHV0TnVtYmVyfSBmcm9tICdwcmltZW5nL2lucHV0bnVtYmVyJztcbmltcG9ydCB7SW5wdXRUZXh0fSBmcm9tICdwcmltZW5nL2lucHV0dGV4dCc7XG5pbXBvcnQge01lc3NhZ2V9IGZyb20gJ3ByaW1lbmcvbWVzc2FnZSc7XG5pbXBvcnQge1BvcG92ZXJ9IGZyb20gJ3ByaW1lbmcvcG9wb3Zlcic7XG5pbXBvcnQge1RvZ2dsZUJ1dHRvbn0gZnJvbSAncHJpbWVuZy90b2dnbGVidXR0b24nO1xuaW1wb3J0IHtORVZFUiwgc3dpdGNoTWFwfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtGaWx0ZXJNYXRjaE1vZGUsIEZpbHRlck1hdGNoTW9kZUV4dGVuZGVkVHlwZSwgSUxvb2t1cERhdGFQcm92aWRlciwgZWZmZWN0V2l0aERlcHMsIGdldEkxOG5UeXBlUHJvcGVydHlLZXl9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge0ZpbHRlckRlc2NyaXB0b3IsIEZpbHRlckdlbmVyaWNEZXNjcmlwdG9yLCBGaWx0ZXJMb29rdXBEZXNjcmlwdG9yLCBGaWx0ZXJMb29rdXBUeXBlRW51bSwgRmlsdGVyVHlwZUVudW19IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvZmlsdGVyJztcbmltcG9ydCB7QXV0b2NvbXBsZXRlQ29tcG9uZW50LCBEYXRlUmFuZ2VDb21wb25lbnQsIERyb3Bkb3duQ29tcG9uZW50LCBJbnB1dFRyaW1EaXJlY3RpdmUsIE51bWJlclJhbmdlQ29tcG9uZW50fSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2Zvcm0nO1xuaW1wb3J0IHtsb29rdXBEYXRhUHJvdmlkZXJ9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvZm9ybS9hcGknO1xuaW1wb3J0IHtNb2RlbERlc2NyaXB0b3J9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvbW9kZWwnO1xuXG5pbXBvcnQge2ZpbHRlckFkanVzdERpc3BsYXlWYWx1ZU9uTWF0Y2hNb2RlQ2hhbmdlLCBmaWx0ZXJHZXREZWZhdWx0TWF0Y2hNb2RlfSBmcm9tICcuLi8uLi8uLi9oZWxwZXJzL2ZpbHRlcnMnO1xuaW1wb3J0IHtGaWx0ZXJGb3JtRW1pdEV2ZW50LCBGaWx0ZXJNZXRhZGF0YSwgRmlsdGVyU3RhdGV9IGZyb20gJy4uLy4uLy4uL21vZGVscy9maWx0ZXIubW9kZWwnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ21uZy10YWJsZS1maWx0ZXItZm9ybScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZpbHRlci1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vZmlsdGVyLWZvcm0uY29tcG9uZW50LmNzcycsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBEcm9wZG93bkNvbXBvbmVudCxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFRyYW5zbGF0ZVBpcGUsXG4gICAgICAgIElucHV0VHJpbURpcmVjdGl2ZSxcbiAgICAgICAgTnVtYmVyUmFuZ2VDb21wb25lbnQsXG4gICAgICAgIElucHV0TnVtYmVyLFxuICAgICAgICBEYXRlUmFuZ2VDb21wb25lbnQsXG4gICAgICAgIEF1dG9jb21wbGV0ZUNvbXBvbmVudCxcbiAgICAgICAgQ2hlY2tib3gsXG4gICAgICAgIE1lc3NhZ2UsXG4gICAgICAgIElucHV0VGV4dCxcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgVG9nZ2xlQnV0dG9uLFxuICAgICAgICBEYXRlUGlja2VyLFxuICAgICAgICBCdXR0b25EaXJlY3RpdmVcbiAgICBdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdmbGV4IGdyb3cnXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUZpbHRlckZvcm1Db21wb25lbnQge1xuICAgIHB1YmxpYyByZWFkb25seSBsb29rdXBUeXBlRHJvcGRvd246IEZpbHRlckxvb2t1cFR5cGVFbnVtID0gRmlsdGVyTG9va3VwVHlwZUVudW0uRHJvcGRvd247XG4gICAgcHVibGljIHJlYWRvbmx5IGxvb2t1cFR5cGVBdXRvY29tcGxldGU6IEZpbHRlckxvb2t1cFR5cGVFbnVtID0gRmlsdGVyTG9va3VwVHlwZUVudW0uQXV0b2NvbXBsZXRlO1xuICAgIHB1YmxpYyByZWFkb25seSBGaWx0ZXJUeXBlRW51bSA9IEZpbHRlclR5cGVFbnVtO1xuICAgIHB1YmxpYyByZWFkb25seSBGaWx0ZXJNYXRjaE1vZGUgPSBGaWx0ZXJNYXRjaE1vZGU7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG5cbiAgICBwdWJsaWMgdGl0bGUgPSBpbnB1dDxzdHJpbmc+KCk7XG4gICAgcHVibGljIG1ldGFkYXRhID0gaW5wdXQucmVxdWlyZWQ8RmlsdGVyTWV0YWRhdGFbXT4oKTtcbiAgICBwdWJsaWMgZ2VuZXJpY0Rlc2NyaXB0b3IgPSBpbnB1dDxGaWx0ZXJHZW5lcmljRGVzY3JpcHRvcj4oKTtcbiAgICBwdWJsaWMgbW9kZWwgPSBpbnB1dC5yZXF1aXJlZDxNb2RlbERlc2NyaXB0b3I8YW55Pj4oKTtcbiAgICBwdWJsaWMgZmlsdGVyID0gaW5wdXQ8RmlsdGVyU3RhdGU+KCk7XG4gICAgcHVibGljIG92ZXJsYXkgPSBpbnB1dDxQb3BvdmVyPigpO1xuICAgIHB1YmxpYyBkaXNhYmxlZFByb3BlcnRpZXMgPSBpbnB1dDxzdHJpbmdbXT4oW10pO1xuICAgIHB1YmxpYyBlbmFibGVDYXNlU2Vuc2l0aXZlID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG4gICAgcHVibGljIHByb3BlcnR5U2VhcmNoID0gaW5wdXQoZmFsc2UsIHt0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGV9KTtcblxuICAgIHB1YmxpYyBhcHBseSA9IG91dHB1dDxGaWx0ZXJGb3JtRW1pdEV2ZW50PigpO1xuXG4gICAgcHVibGljIHByb3BlcnR5T3B0aW9uc1dpdGhUcmFuc2xhdGlvbnMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRpc2FibGVkUHJvcGVydGllcyA9IHRoaXMuZGlzYWJsZWRQcm9wZXJ0aWVzKCk7XG4gICAgICAgIGNvbnN0IGZpbHRlciA9IHRoaXMuZmlsdGVyKCk7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICB0aGlzLm1ldGFkYXRhKCk/Lm1hcChkID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gPFByb3BlcnR5TW9kZWw+e1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogZC5kZXNjcmlwdG9yLnByb3BlcnR5LFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogZC5kZXNjcmlwdG9yLmlzR2VuZXJpY0ZpbHRlciA/IGQuZGVzY3JpcHRvci5wcm9wZXJ0eSA6IHRoaXMuZ2V0UHJvcGVydHlMYWJlbEtleShkLmRlc2NyaXB0b3IpLFxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZDogIWZpbHRlciAmJiBkaXNhYmxlZFByb3BlcnRpZXMuaW5jbHVkZXMoZC5kZXNjcmlwdG9yLnByb3BlcnR5KVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KSA/PyBbXVxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgcHVibGljIHNlbGVjdGVkRmlsdGVyTWV0YWRhdGEgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb3BlcnR5ID0gdGhpcy5wcm9wZXJ0eU1vZGVsKCk7XG4gICAgICAgIHJldHVybiB0aGlzLm1ldGFkYXRhKCkuZmluZChkID0+IGQuZGVzY3JpcHRvci5wcm9wZXJ0eSA9PT0gcHJvcGVydHkpO1xuICAgIH0pO1xuXG4gICAgLy8gY2hhbmdlIHZhbHVlIGxvb2t1cCBmdW5jdGlvbiB0byBpbmNsdWRlIHRoZSBwcm9wZXJ0eSBuYW1lIG9mIHRoZSBnZW5lcmljIGZpbHRlclxuICAgIHB1YmxpYyBnZW5lcmljVmFsdWVEYXRhUHJvdmlkZXIgPSBjb21wdXRlZDxJTG9va3VwRGF0YVByb3ZpZGVyPHN0cmluZywgYW55LCBhbnksICdmaWVsZCc+IHwgdW5kZWZpbmVkPigoKSA9PiB7XG4gICAgICAgIGNvbnN0IGdlbmVyaWNWYWx1ZVByb3ZpZGVyID0gdGhpcy5nZW5lcmljRGVzY3JpcHRvcigpPy52YWx1ZUxvb2t1cDtcblxuICAgICAgICBpZiAoZ2VuZXJpY1ZhbHVlUHJvdmlkZXIgJiYgZ2VuZXJpY1ZhbHVlUHJvdmlkZXIuc2VydmljZVR5cGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGxvb2t1cEZuID0gZ2VuZXJpY1ZhbHVlUHJvdmlkZXIubG9va3VwO1xuICAgICAgICAgICAgcmV0dXJuIGxvb2t1cERhdGFQcm92aWRlcjxzdHJpbmcsIGFueSwgYW55LCAnZmllbGQnPih7c2VydmljZTogZ2VuZXJpY1ZhbHVlUHJvdmlkZXIuc2VydmljZVR5cGV9KS53aXRoTG9va3VwKChwYXJhbXMsIHNlcnZpY2UsIHNlYXJjaCkgPT4ge1xuICAgICAgICAgICAgICAgIHBhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4ucGFyYW1zLFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5wYXJhbXM/LmZpbHRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnNlbGVjdGVkRmlsdGVyTWV0YWRhdGEoKT8uZGVzY3JpcHRvci5wcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaE1vZGU6IHRoaXMuc2VsZWN0ZWRGaWx0ZXJNZXRhZGF0YSgpPy5kZXNjcmlwdG9yLmZpbHRlclR5cGUgPT09IEZpbHRlclR5cGVFbnVtLkxvb2t1cEVudW0gPyBGaWx0ZXJNYXRjaE1vZGUuSW4gOiBGaWx0ZXJNYXRjaE1vZGUuU3RhcnRzV2l0aFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICByZXR1cm4gbG9va3VwRm4ocGFyYW1zLCBzZXJ2aWNlLCBzZWFyY2gpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgIH0pO1xuXG4gICAgcHVibGljIHNlbGVjdGVkRGVzY3JpcHRvckFzTG9va3VwID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBmaWx0ZXJEZXNjcmlwdG9yID0gdGhpcy5zZWxlY3RlZEZpbHRlck1ldGFkYXRhKCk/LmRlc2NyaXB0b3I7XG4gICAgICAgIHJldHVybiBmaWx0ZXJEZXNjcmlwdG9yICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICFmaWx0ZXJEZXNjcmlwdG9yLmlzR2VuZXJpY0ZpbHRlciAmJlxuICAgICAgICAgICAgKGZpbHRlckRlc2NyaXB0b3IuZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uTG9va3VwIHx8IGZpbHRlckRlc2NyaXB0b3IuZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uTG9va3VwRW51bSlcbiAgICAgICAgICAgID8gKGZpbHRlckRlc2NyaXB0b3IgYXMgRmlsdGVyTG9va3VwRGVzY3JpcHRvcjxhbnksIGFueT4pXG4gICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICB9KTtcblxuICAgIHB1YmxpYyBpc0VkaXQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmZpbHRlcigpICE9IG51bGwpO1xuICAgIHB1YmxpYyBmb3JtU3VibWl0dGVkID0gc2lnbmFsKGZhbHNlKTtcbiAgICBwdWJsaWMgZm9ybUVycm9yTWVzc2FnZSA9IHNpZ25hbDxhbnk+KFtdKTtcblxuICAgIC8vIFVJIHV0aWxpdGllc1xuICAgIHByaXZhdGUgZmlsdGVyRm9ybSA9IHZpZXdDaGlsZC5yZXF1aXJlZDxOZ0Zvcm0+KCdmaWx0ZXJGb3JtJyk7XG5cbiAgICAvLyBGaWx0ZXIgZm9ybSBtb2RlbCBhbmQgZm9ybSB1dGlsaXRpZXNcbiAgICBwdWJsaWMgcHJvcGVydHlNb2RlbCA9IHNpZ25hbDxzdHJpbmcgfCBudWxsPihudWxsKTtcbiAgICBwdWJsaWMgbWF0Y2hNb2RlTW9kZWwgPSBzaWduYWw8RmlsdGVyTWF0Y2hNb2RlRXh0ZW5kZWRUeXBlIHwgbnVsbD4obnVsbCk7XG4gICAgcHVibGljIHZhbHVlTW9kZWwgPSBzaWduYWw8YW55IHwgYW55W10gfCBudWxsPihudWxsKTtcbiAgICBwdWJsaWMgY2FzZVNlbnNpdGl2ZU1vZGVsID0gc2lnbmFsPGJvb2xlYW4+KGZhbHNlKTtcblxuICAgIHB1YmxpYyBpc011bHRpc2VsZWN0ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5tYXRjaE1vZGVNb2RlbCgpID09PSBGaWx0ZXJNYXRjaE1vZGUuSW4gfHwgdGhpcy5tYXRjaE1vZGVNb2RlbCgpID09PSBGaWx0ZXJNYXRjaE1vZGUuTm90SW4pO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGVmZmVjdFdpdGhEZXBzKFt0aGlzLmZpbHRlcl0sIChbZWRpdF0pID0+IHtcbiAgICAgICAgICAgIGlmIChlZGl0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldEZvcm0oe1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eTogZWRpdC5tZXRhZGF0YS5kZXNjcmlwdG9yLnByb3BlcnR5LFxuICAgICAgICAgICAgICAgICAgICBtYXRjaE1vZGU6IGVkaXQuZGlzcGxheU1hdGNoTW9kZSA/PyBlZGl0Lm1hdGNoTW9kZSA/PyBudWxsLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZWRpdC5kaXNwbGF5VmFsdWUgPz8gZWRpdC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2FzZVNlbnNpdGl2ZTogZWRpdC5jYXNlU2Vuc2l0aXZlID8/IGZhbHNlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRGb3JtKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGVmZmVjdFdpdGhEZXBzKFt0aGlzLnNlbGVjdGVkRmlsdGVyTWV0YWRhdGFdLCAoW3NlbGVjdGVkRmlsdGVyTWV0YWRhdGFdKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gc2VsZWN0ZWRGaWx0ZXJNZXRhZGF0YT8uZGVzY3JpcHRvcjtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy52YWx1ZU1vZGVsKCk7XG5cbiAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgLy8gcmVzZXQgdmFsdWUgaWYgZmlsdGVyIHR5cGUgYW5kIHZhbHVlIHR5cGUgbWlzbWF0Y2hcbiAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgIChkZXNjcmlwdG9yPy5maWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlRW51bS5TdHJpbmcgJiYgKHZhbHVlID09PSB0cnVlIHx8IHZhbHVlID09PSBmYWxzZSB8fCB2YWx1ZSA9PT0gJ3RydWUnIHx8IHZhbHVlID09PSAnZmFsc2UnIHx8IHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkpIHx8XG4gICAgICAgICAgICAgICAgICAgIChkZXNjcmlwdG9yPy5maWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlRW51bS5OdW1iZXIgJiYgdHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJyAmJiBpc05hTigrdmFsdWUpKSB8fFxuICAgICAgICAgICAgICAgICAgICAoZGVzY3JpcHRvcj8uZmlsdGVyVHlwZSA9PT0gRmlsdGVyVHlwZUVudW0uRGF0ZSAmJiAhKHZhbHVlIGluc3RhbmNlb2YgRGF0ZSkpXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVNb2RlbC5zZXQobnVsbCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkZXNjcmlwdG9yPy5maWx0ZXJUeXBlID09PSBGaWx0ZXJUeXBlRW51bS5Cb29sZWFuICYmIHR5cGVvZiB2YWx1ZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmFsdWVNb2RlbC5zZXQoZmFsc2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbWF0Y2hNb2RlT3B0aW9ucyA9IHNlbGVjdGVkRmlsdGVyTWV0YWRhdGE/Lm1hdGNoTW9kZXMgPz8gW107XG4gICAgICAgICAgICBjb25zdCBtYXRjaE1vZGUgPSB0aGlzLm1hdGNoTW9kZU1vZGVsKCk7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJGb3JtID0gdGhpcy5maWx0ZXJGb3JtKCk7XG4gICAgICAgICAgICBjb25zdCBpc0VkaXQgPSB0aGlzLmlzRWRpdCgpO1xuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIG1hdGNoTW9kZU9wdGlvbnMubGVuZ3RoID4gMCAmJlxuICAgICAgICAgICAgICAgICghbWF0Y2hNb2RlIHx8XG4gICAgICAgICAgICAgICAgICAgICghaXNFZGl0ICYmIChmaWx0ZXJGb3JtLmNvbnRyb2xzWydtYXRjaE1vZGUnXT8ucHJpc3RpbmUgfHwgZmlsdGVyRm9ybS5jb250cm9sc1snbWF0Y2hNb2RlJ10/LnVudG91Y2hlZCkpIHx8XG4gICAgICAgICAgICAgICAgICAgICFtYXRjaE1vZGVPcHRpb25zLmZpbmQobyA9PiBvLnZhbHVlID09PSBtYXRjaE1vZGUpKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gcmVzZXQgbWF0Y2ggbW9kZSBpcyBuZWVkZWRcbiAgICAgICAgICAgICAgICB0aGlzLm1hdGNoTW9kZU1vZGVsLnNldChmaWx0ZXJHZXREZWZhdWx0TWF0Y2hNb2RlKHRoaXMuc2VsZWN0ZWRGaWx0ZXJNZXRhZGF0YSgpPy5kZXNjcmlwdG9yLCBtYXRjaE1vZGVPcHRpb25zKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGVmZmVjdFdpdGhEZXBzKFt0aGlzLm1hdGNoTW9kZU1vZGVsXSwgKFttYXRjaE1vZGVNb2RlbF0pID0+IHRoaXMudmFsdWVNb2RlbC5zZXQoZmlsdGVyQWRqdXN0RGlzcGxheVZhbHVlT25NYXRjaE1vZGVDaGFuZ2UobWF0Y2hNb2RlTW9kZWwgPz8gdW5kZWZpbmVkLCB0aGlzLnZhbHVlTW9kZWwoKSkpKTtcblxuICAgICAgICB0b09ic2VydmFibGUodGhpcy5vdmVybGF5KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgc3dpdGNoTWFwKG8gPT4gKG8gPyBvLm9uU2hvdyA6IE5FVkVSKSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZvcm1GaWVsZHMgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKFxuICAgICAgICAgICAgICAgICAgICAnaW5wdXQ6bm90KFtkaXNhYmxlZF0pLCBzZWxlY3Q6bm90KFtkaXNhYmxlZF0pLCB0ZXh0YXJlYTpub3QoW2Rpc2FibGVkXSksIFtyb2xlPVwiY29tYm9ib3hcIl06bm90KFtkaXNhYmxlZF0pJ1xuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgY29uc3QgYWN0aXZlRWwgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgICAgICAgICAgICAgIGNvbnN0IGFjdGl2ZUlucHV0SWR4ID0gYWN0aXZlRWwgPyBbLi4uZm9ybUZpZWxkc10uZmluZEluZGV4KGVsID0+IGFjdGl2ZUVsLmlzRXF1YWxOb2RlKGVsKSkgOiAwO1xuICAgICAgICAgICAgICAgIGlmIChhY3RpdmVJbnB1dElkeCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZHNbMF0uZm9jdXMoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkZvcm1TdWJtaXQoZm9ybTogTmdGb3JtKSB7XG4gICAgICAgIHRoaXMuZm9ybVN1Ym1pdHRlZC5zZXQodHJ1ZSk7XG5cbiAgICAgICAgLy8gbWFyayBhbGwgYXMgZGlydHlcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gZm9ybS5jb250cm9scykge1xuICAgICAgICAgICAgZm9ybS5jb250cm9sc1trZXldLm1hcmtBc0RpcnR5KCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm9wZXJ0eSA9IHRoaXMucHJvcGVydHlNb2RlbCgpO1xuICAgICAgICBjb25zdCBtYXRjaE1vZGUgPSB0aGlzLm1hdGNoTW9kZU1vZGVsKCk7XG4gICAgICAgIGlmIChmb3JtLmludmFsaWQgfHwgIXByb3BlcnR5IHx8ICFtYXRjaE1vZGUpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybUVycm9yTWVzc2FnZS5zZXQoW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgc2V2ZXJpdHk6ICd3YXJuJyxcbiAgICAgICAgICAgICAgICAgICAgc3VtbWFyeTogdGhpcy50cmFuc2xhdGUuaW5zdGFudCgnbW5nRmlsdGVyLm1lc3NhZ2VzLmludmFsaWRGb3JtVGl0bGUnKSxcbiAgICAgICAgICAgICAgICAgICAgZGV0YWlsOiB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KCdtbmdGaWx0ZXIubWVzc2FnZXMuaW52YWxpZEZvcm1NZXNzYWdlJylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYXBwbHkuZW1pdCh7XG4gICAgICAgICAgICBwcm9wZXJ0eTogcHJvcGVydHksXG4gICAgICAgICAgICBtYXRjaE1vZGU6IG1hdGNoTW9kZSxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLnZhbHVlTW9kZWwoKSxcbiAgICAgICAgICAgIGNhc2VTZW5zaXRpdmU6IHRoaXMuY2FzZVNlbnNpdGl2ZU1vZGVsKClcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy8gcmVzZXR0aW5nIHRoZSBmb3JtIGlzIGRvbmUgZnJvbSB0aGUgcGFyZW50IGNvbXBvbmVudCAoZmlsdGVyLW92ZXJsYXktd2l0aC10YWcpIGZvciBzbW9vdGhlciBhbmltYXRpb25zXG4gICAgfVxuXG4gICAgcHVibGljIHJlc2V0Rm9ybSh2YWx1ZT86IEZpbHRlckZvcm1Nb2RlbCkge1xuICAgICAgICB0aGlzLmZpbHRlckZvcm0oKS5yZXNldEZvcm0odmFsdWUpO1xuICAgICAgICAvLyBzb21laG93IGhhdmUgdG8gc2V0IGNhc2Ugc2Vuc2l0aXZpdHkgbWFudWFsbHlcbiAgICAgICAgdGhpcy5jYXNlU2Vuc2l0aXZlTW9kZWwuc2V0KHZhbHVlPy5jYXNlU2Vuc2l0aXZlID8/IGZhbHNlKTtcbiAgICAgICAgdGhpcy5mb3JtU3VibWl0dGVkLnNldChmYWxzZSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQcm9wZXJ0eUxhYmVsS2V5KGZpbHRlckRlc2NyaXB0b3I6IEZpbHRlckRlc2NyaXB0b3I8YW55LCBhbnk+KSB7XG4gICAgICAgIGxldCBsYWJlbEtleTogc3RyaW5nO1xuICAgICAgICBpZiAoZmlsdGVyRGVzY3JpcHRvci50aXRsZSAhPT0gdW5kZWZpbmVkICYmICFmaWx0ZXJEZXNjcmlwdG9yLnRpdGxlVXNlTW9kZWxCYXNlKSB7XG4gICAgICAgICAgICBsYWJlbEtleSA9IGZpbHRlckRlc2NyaXB0b3IudGl0bGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsYWJlbEtleSA9IGdldEkxOG5UeXBlUHJvcGVydHlLZXkodGhpcy5tb2RlbCgpLmkxOG5CYXNlS2V5LCBmaWx0ZXJEZXNjcmlwdG9yLnRpdGxlID8/IGZpbHRlckRlc2NyaXB0b3IucHJvcGVydHkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBsYWJlbEtleTtcbiAgICB9XG59XG5cbmludGVyZmFjZSBGaWx0ZXJGb3JtTW9kZWwge1xuICAgIHByb3BlcnR5OiBzdHJpbmcgfCBudWxsO1xuICAgIG1hdGNoTW9kZTogRmlsdGVyTWF0Y2hNb2RlRXh0ZW5kZWRUeXBlIHwgbnVsbDtcbiAgICB2YWx1ZTogYW55IHwgbnVsbDtcbiAgICBjYXNlU2Vuc2l0aXZlOiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgUHJvcGVydHlNb2RlbCB7XG4gICAgcHJvcGVydHk6IHN0cmluZztcbiAgICBsYWJlbDogc3RyaW5nO1xuICAgIGRpc2FibGVkOiBib29sZWFuO1xufVxuIiwiPGRpdj5cbiAgICA8ZGl2PlxuICAgICAgICA8aDU+e3sgZmlsdGVyKCkgPyAoJ21uZ0ZpbHRlci50aXRsZUVkaXQnIHwgdHJhbnNsYXRlKSA6ICgnbW5nRmlsdGVyLnRpdGxlQWRkJyB8IHRyYW5zbGF0ZSkgfX08L2g1PlxuICAgIDwvZGl2PlxuICAgIDxmb3JtICNmaWx0ZXJGb3JtPVwibmdGb3JtXCIgKG5nU3VibWl0KT1cIm9uRm9ybVN1Ym1pdChmaWx0ZXJGb3JtKVwiIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1jZW50ZXIgbGc6ZmxleC1yb3cgZ2FwLTRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBsZzp3LWF1dG9cIj5cbiAgICAgICAgICAgIDxtbmctZHJvcGRvd25cbiAgICAgICAgICAgICAgICBuYW1lPVwicHJvcGVydHlcIlxuICAgICAgICAgICAgICAgIGlkPVwicHJvcGVydHlcIlxuICAgICAgICAgICAgICAgIHRhYmluZGV4PVwiMVwiXG4gICAgICAgICAgICAgICAgI3Byb3BlcnR5Q29udHJvbD1cIm5nTW9kZWxcIlxuICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwicHJvcGVydHlNb2RlbFwiXG4gICAgICAgICAgICAgICAgW29wdGlvbnNdPVwicHJvcGVydHlPcHRpb25zV2l0aFRyYW5zbGF0aW9ucygpXCJcbiAgICAgICAgICAgICAgICBvcHRpb25zVmFsdWVQcm9wZXJ0eT1cInByb3BlcnR5XCJcbiAgICAgICAgICAgICAgICBvcHRpb25zRGlzYWJsZWRQcm9wZXJ0eT1cImRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICBvcHRpb25zTGFiZWxQcm9wZXJ0eT1cImxhYmVsXCJcbiAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ21uZ0ZpbHRlci5wcm9wZXJ0eScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFtvcHRpb25zTGFiZWxUcmFuc2xhdGVdPVwiIXByb3BlcnR5U2VhcmNoKClcIlxuICAgICAgICAgICAgICAgIFtpbmxpbmVTZWFyY2hdPVwicHJvcGVydHlTZWFyY2goKVwiXG4gICAgICAgICAgICAgICAgcmVxdWlyZWQ9XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJ3LWZ1bGxcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0VkaXQoKVwiXG4gICAgICAgICAgICAgICAgW2FwcGVuZFRvXT1cIm51bGxcIiAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBsZzp3LWF1dG9cIj5cbiAgICAgICAgICAgIDxtbmctZHJvcGRvd25cbiAgICAgICAgICAgICAgICBuYW1lPVwibWF0Y2hNb2RlXCJcbiAgICAgICAgICAgICAgICBpZD1cIm1hdGNoTW9kZVwiXG4gICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJtYXRjaE1vZGVNb2RlbFwiXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwidy1mdWxsXCJcbiAgICAgICAgICAgICAgICBbb3B0aW9uc109XCJzZWxlY3RlZEZpbHRlck1ldGFkYXRhKCk/Lm1hdGNoTW9kZXMgPz8gW11cIlxuICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInbW5nRmlsdGVyLm1hdGNoTW9kZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhcHJvcGVydHlDb250cm9sLnZhbHVlXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNlbGYtZW5kXCJcbiAgICAgICAgICAgICAgICByZXF1aXJlZD1cInRydWVcIlxuICAgICAgICAgICAgICAgIFthcHBlbmRUb109XCJudWxsXCIgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIEBpZiAoIShtYXRjaE1vZGVNb2RlbCgpID09PSBGaWx0ZXJNYXRjaE1vZGUuRXhpc3RzIHx8IG1hdGNoTW9kZU1vZGVsKCkgPT09IEZpbHRlck1hdGNoTW9kZS5Eb2VzTm90RXhpc3QpKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIGxnOnctYXV0byBmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgICAgICAgICAgQHN3aXRjaCAoc2VsZWN0ZWRGaWx0ZXJNZXRhZGF0YSgpPy5kZXNjcmlwdG9yPy5maWx0ZXJUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgIEBjYXNlIChGaWx0ZXJUeXBlRW51bS5OdW1iZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAobWF0Y2hNb2RlTW9kZWwoKSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkJldHdlZW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bW5nLW51bWJlci1yYW5nZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9XCJtbmctY29sdW1uLWZpbHRlci1udW1iZXItaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInZhbHVlTW9kZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ21uZ0ZpbHRlci52YWx1ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdXNlR3JvdXBpbmddPVwic2VsZWN0ZWRGaWx0ZXJNZXRhZGF0YSgpPy5kZXNjcmlwdG9yPy5udW1iZXJVc2VHcm91cGluZyA/PyBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttaW5GcmFjdGlvbkRpZ2l0c109XCJzZWxlY3RlZEZpbHRlck1ldGFkYXRhKCk/Lm51bWJlckNvbmZpZz8uZnJhY3Rpb25zTWluXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21heEZyYWN0aW9uRGlnaXRzXT1cInNlbGVjdGVkRmlsdGVyTWV0YWRhdGEoKT8ubnVtYmVyQ29uZmlnPy5mcmFjdGlvbnNNYXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZD1cInRydWVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtaW5wdXROdW1iZXJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRTdHlsZUNsYXNzPVwibW5nLWNvbHVtbi1maWx0ZXItbnVtYmVyLWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ2YWx1ZU1vZGVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlQ2xhc3NdPVwiJ3ctZnVsbCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ21uZ0ZpbHRlci52YWx1ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdXNlR3JvdXBpbmddPVwic2VsZWN0ZWRGaWx0ZXJNZXRhZGF0YSgpPy5kZXNjcmlwdG9yPy5udW1iZXJVc2VHcm91cGluZ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttaW5GcmFjdGlvbkRpZ2l0c109XCJzZWxlY3RlZEZpbHRlck1ldGFkYXRhKCk/Lm51bWJlckNvbmZpZz8uZnJhY3Rpb25zTWluXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21heEZyYWN0aW9uRGlnaXRzXT1cInNlbGVjdGVkRmlsdGVyTWV0YWRhdGEoKT8ubnVtYmVyQ29uZmlnPy5mcmFjdGlvbnNNYXhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIW1hdGNoTW9kZU1vZGVsKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZD1cInRydWVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgQGNhc2UgKEZpbHRlclR5cGVFbnVtLkJvb2xlYW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxwLWNoZWNrYm94IFsobmdNb2RlbCldPVwidmFsdWVNb2RlbFwiIFtkaXNhYmxlZF09XCIhbWF0Y2hNb2RlTW9kZWwoKVwiIG5hbWU9XCJ2YWx1ZVwiIGJpbmFyeT1cInRydWVcIiByZXF1aXJlZD1cInRydWVcIiAvPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBjYXNlIChGaWx0ZXJUeXBlRW51bS5EYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKG1hdGNoTW9kZU1vZGVsKCkgPT09IEZpbHRlck1hdGNoTW9kZS5CZXR3ZWVuKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1uZy1kYXRlLXJhbmdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidmFsdWVNb2RlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93VGltZV09XCJzZWxlY3RlZEZpbHRlck1ldGFkYXRhKCk/LmRhdGVDb25maWc/LnNob3dUaW1lID8/IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dTZWNvbmRzXT1cInNlbGVjdGVkRmlsdGVyTWV0YWRhdGEoKT8uZGF0ZUNvbmZpZz8uc2hvd1NlY29uZHMgPz8gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0ZUZvcm1hdF09XCJzZWxlY3RlZEZpbHRlck1ldGFkYXRhKCk/LmRhdGVDb25maWc/LmZvcm1hdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInbW5nRmlsdGVyLnZhbHVlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPVwidHJ1ZVwiPjwvbW5nLWRhdGUtcmFuZ2U+XG4gICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC1kYXRlLXBpY2tlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRUbz1cImJvZHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cInZhbHVlTW9kZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGVDbGFzc109XCIndy1mdWxsJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInbW5nRmlsdGVyLnZhbHVlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzaG93SWNvbl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Nob3dUaW1lXT1cInNlbGVjdGVkRmlsdGVyTWV0YWRhdGEoKT8uZGF0ZUNvbmZpZz8uc2hvd1RpbWUgPz8gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc2hvd1NlY29uZHNdPVwic2VsZWN0ZWRGaWx0ZXJNZXRhZGF0YSgpPy5kYXRlQ29uZmlnPy5zaG93U2Vjb25kcyA/PyBmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRlRm9ybWF0XT1cInNlbGVjdGVkRmlsdGVyTWV0YWRhdGEoKT8uZGF0ZUNvbmZpZz8uZm9ybWF0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ZpcnN0RGF5T2ZXZWVrXT1cIjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIW1hdGNoTW9kZU1vZGVsKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZD1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3AtZGF0ZS1waWNrZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGNhc2UgKEZpbHRlclR5cGVFbnVtLkxvb2t1cCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImxvb2t1cEZpbHRlclwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBjYXNlIChGaWx0ZXJUeXBlRW51bS5Mb29rdXBFbnVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwibG9va3VwRmlsdGVyXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGRlZmF1bHQge1xuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChzZWxlY3RlZEZpbHRlck1ldGFkYXRhKCk/LmRlc2NyaXB0b3I/LmdlbmVyaWNWYWx1ZVByb3ZpZGVyICYmIGdlbmVyaWNWYWx1ZURhdGFQcm92aWRlcigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1uZy1kcm9wZG93blxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ2YWx1ZU1vZGVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YVByb3ZpZGVyXT1cImdlbmVyaWNWYWx1ZURhdGFQcm92aWRlcigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc05hbWVdPVwic2VsZWN0ZWRGaWx0ZXJNZXRhZGF0YSgpPy5kZXNjcmlwdG9yPy5jbGFzc05hbWUgKyAnICcgKyAoZW5hYmxlQ2FzZVNlbnNpdGl2ZSgpID8gJ3JvdW5kZWQtci1ub25lIScgOiAnJylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Ryb3Bkb3duQ2xhc3NOYW1lXT1cInNlbGVjdGVkRmlsdGVyTWV0YWRhdGEoKT8uZGVzY3JpcHRvcj8uZHJvcGRvd25DbGFzc05hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cInZhbHVlTW9kZWwoKSA/IHVuZGVmaW5lZCA6ICgnbW5nRmlsdGVyLnZhbHVlJyB8IHRyYW5zbGF0ZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dJbnB1dD1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFtYXRjaE1vZGVNb2RlbCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcHBlbmRUb109XCJudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZW5hYmxlQ2FzZVNlbnNpdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC10b2dnbGUtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjYXNlU2Vuc2l0aXZlTW9kZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhbWF0Y2hNb2RlTW9kZWwoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cImNhc2VTZW5zaXRpdmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJtbmctYnV0dG9uLXhzIG1uZy10b2dnbGUtYnV0dG9uLWFkZG9uLXJpZ2h0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbkxhYmVsPVwiQWFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZkxhYmVsPVwiQWFcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidmFsdWVNb2RlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcElucHV0VGV4dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtbmctY29sdW1uLWZpbHRlci1zdHJpbmctaW5wdXQgdy1mdWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5yb3VuZGVkLXItbm9uZSFdPVwiZW5hYmxlQ2FzZVNlbnNpdGl2ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnBsYWNlaG9sZGVyXT1cIidtbmdGaWx0ZXIudmFsdWUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttbmdJbnB1dFRyaW1dPVwic2VsZWN0ZWRGaWx0ZXJNZXRhZGF0YSgpPy5kZXNjcmlwdG9yPy50cmltT3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhbWF0Y2hNb2RlTW9kZWwoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxhY2Vob2xkZXJdPVwiJ21uZ0ZpbHRlci52YWx1ZScgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWlyZWQ9XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChlbmFibGVDYXNlU2Vuc2l0aXZlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLXRvZ2dsZS1idXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNhc2VTZW5zaXRpdmVNb2RlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFtYXRjaE1vZGVNb2RlbCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiY2FzZVNlbnNpdGl2ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGVDbGFzcz1cIm1uZy1idXR0b24teHMgbW5nLXRvZ2dsZS1idXR0b24tYWRkb24tcmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uTGFiZWw9XCJBYVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZmTGFiZWw9XCJBYVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xvb2t1cEZpbHRlcj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChzZWxlY3RlZERlc2NyaXB0b3JBc0xvb2t1cCgpOyBhcyBsb29rdXBGaWx0ZXJEZXNjcmlwdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAc3dpdGNoIChsb29rdXBGaWx0ZXJEZXNjcmlwdG9yLmxvb2t1cFR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAobG9va3VwVHlwZUF1dG9jb21wbGV0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bW5nLWF1dG9jb21wbGV0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ2YWx1ZU1vZGVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGF0YVByb3ZpZGVyXT1cImxvb2t1cEZpbHRlckRlc2NyaXB0b3IuZGF0YVByb3ZpZGVyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zVHJhY2tQcm9wZXJ0eV09XCJsb29rdXBGaWx0ZXJEZXNjcmlwdG9yLm9wdGlvbnNWYWx1ZVByb3BlcnR5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zVmFsdWVQcm9wZXJ0eV09XCJsb29rdXBGaWx0ZXJEZXNjcmlwdG9yLm9wdGlvbnNWYWx1ZVByb3BlcnR5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zTGFiZWxQcm9wZXJ0eV09XCJsb29rdXBGaWx0ZXJEZXNjcmlwdG9yLm9wdGlvbnNMYWJlbFByb3BlcnR5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zTGFiZWxUcmFuc2xhdGVdPVwibG9va3VwRmlsdGVyRGVzY3JpcHRvci5vcHRpb25zTGFiZWxUcmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW211bHRpc2VsZWN0XT1cImlzTXVsdGlzZWxlY3QoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b0NsZWFyXT1cImxvb2t1cEZpbHRlckRlc2NyaXB0b3IuYXV0b2NvbXBsZXRlQXV0b0NsZWFyID8/IGZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtvcGVuT25Gb2N1c109XCJsb29rdXBGaWx0ZXJEZXNjcmlwdG9yLmF1dG9jb21wbGV0ZUF1dG9DbGVhciA/PyB0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpbmxpbmVTZWFyY2hdPVwibG9va3VwRmlsdGVyRGVzY3JpcHRvci5hdXRvY29tcGxldGVJbmxpbmVTZWFyY2ggPz8gZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidtbmdGaWx0ZXIudmFsdWUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc05hbWVdPVwibG9va3VwRmlsdGVyRGVzY3JpcHRvci5jbGFzc05hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Ryb3Bkb3duQ2xhc3NOYW1lXT1cImxvb2t1cEZpbHRlckRlc2NyaXB0b3IuZHJvcGRvd25DbGFzc05hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaFRyaW1dPVwic2VsZWN0ZWRGaWx0ZXJNZXRhZGF0YSgpPy5kZXNjcmlwdG9yPy50cmltT3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhbWF0Y2hNb2RlTW9kZWwoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlZD1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tbmctYXV0b2NvbXBsZXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY2FzZSAobG9va3VwVHlwZURyb3Bkb3duKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtbmctZHJvcGRvd25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwidmFsdWVNb2RlbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2RhdGFQcm92aWRlcl09XCJsb29rdXBGaWx0ZXJEZXNjcmlwdG9yLmRhdGFQcm92aWRlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc1ZhbHVlUHJvcGVydHldPVwibG9va3VwRmlsdGVyRGVzY3JpcHRvci5vcHRpb25zVmFsdWVQcm9wZXJ0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc0xhYmVsUHJvcGVydHldPVwibG9va3VwRmlsdGVyRGVzY3JpcHRvci5vcHRpb25zTGFiZWxQcm9wZXJ0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbb3B0aW9uc0xhYmVsVHJhbnNsYXRlXT1cImxvb2t1cEZpbHRlckRlc2NyaXB0b3Iub3B0aW9uc0xhYmVsVHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttdWx0aXNlbGVjdF09XCJpc011bHRpc2VsZWN0KClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidtbmdGaWx0ZXIudmFsdWUnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc05hbWVdPVwibG9va3VwRmlsdGVyRGVzY3JpcHRvci5jbGFzc05hbWUgKyAnIHctZnVsbCdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Ryb3Bkb3duQ2xhc3NOYW1lXT1cImxvb2t1cEZpbHRlckRlc2NyaXB0b3IuZHJvcGRvd25DbGFzc05hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0NsZWFyPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFtYXRjaE1vZGVNb2RlbCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthcHBlbmRUb109XCJudWxsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21uZy1kcm9wZG93bj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gQGVsc2UgaWYgKHNlbGVjdGVkRmlsdGVyTWV0YWRhdGEoKT8uZGVzY3JpcHRvcj8uaXNHZW5lcmljRmlsdGVyICYmIGdlbmVyaWNWYWx1ZURhdGFQcm92aWRlcigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8bW5nLWRyb3Bkb3duXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJ2YWx1ZU1vZGVsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkYXRhUHJvdmlkZXJdPVwiZ2VuZXJpY1ZhbHVlRGF0YVByb3ZpZGVyKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInbW5nRmlsdGVyLnZhbHVlJyB8IHRyYW5zbGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0NsZWFyPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhbWF0Y2hNb2RlTW9kZWwoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2FwcGVuZFRvXT1cIm51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVpcmVkPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9tbmctZHJvcGRvd24+XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmRcIj5cbiAgICAgICAgICAgIDxidXR0b24gcEJ1dHRvbiB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJzZWxmLWVuZFwiPlxuICAgICAgICAgICAgICAgIHt7IChmaWx0ZXIoKSA/ICdnZW5lcmFsLmFwcGx5JyA6ICdnZW5lcmFsLmFkZCcpIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9mb3JtPlxuICAgIEBpZiAoZm9ybVN1Ym1pdHRlZCgpICYmIGZpbHRlckZvcm0uaW52YWxpZCkge1xuICAgICAgICBAZm9yIChtZXNzYWdlIG9mIGZvcm1FcnJvck1lc3NhZ2UoKTsgdHJhY2sgbWVzc2FnZSkge1xuICAgICAgICAgICAgPHAtbWVzc2FnZSBbc2V2ZXJpdHldPVwibWVzc2FnZS5zZXZlcml0eVwiIFt0ZXh0XT1cIm1lc3NhZ2UuZGV0YWlsXCIgW2ljb25dPVwibWVzc2FnZS5pY29uXCIgc3R5bGVDbGFzcz1cIm10LTJcIiAvPlxuICAgICAgICB9XG4gICAgfVxuPC9kaXY+XG4iXX0=","import { NgClass, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, booleanAttribute, computed, contentChildren, inject, input, signal, viewChild } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { TranslatePipe } from '@ngx-translate/core';\nimport { Button } from 'primeng/button';\nimport { IconField } from 'primeng/iconfield';\nimport { InputIcon } from 'primeng/inputicon';\nimport { InputText } from 'primeng/inputtext';\nimport { Popover } from 'primeng/popover';\nimport { Table } from 'primeng/table';\nimport { TagModule } from 'primeng/tag';\nimport { ToggleButton } from 'primeng/togglebutton';\nimport { BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, skip } from 'rxjs';\nimport { FilterMatchMode, TemplateDirective, findTemplateByName } from '@mediusinc/mng-commons/core';\nimport { filterSetMetadataOnChange, filterSetMetadataOnDisplayChange } from '../../../helpers/filters';\nimport { TableDataService } from '../../../services/table-data.service';\nimport { COMMONS_TABLE_FEATURE_CONFIG_IT } from '../../../services/table-feature-config.token';\nimport { TableFilterActiveTagComponent } from '../filter-active-tag/filter-active-tag.component';\nimport { TableFilterFormComponent } from '../filter-form/filter-form.component';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/forms\";\nexport class TableFilterOverlayWithTagComponent {\n static { this.SEARCH_WORD_LIMIT_MAX = 4; }\n constructor() {\n this.primeTable = inject(Table);\n this.tableData = inject((TableDataService));\n this.tableConfig = inject(COMMONS_TABLE_FEATURE_CONFIG_IT, { optional: true });\n this.metadata = input.required(...(ngDevMode ? [{ debugName: \"metadata\" }] : []));\n this.genericFilterDescriptor = input(...(ngDevMode ? [undefined, { debugName: \"genericFilterDescriptor\" }] : []));\n this.model = input.required(...(ngDevMode ? [{ debugName: \"model\" }] : []));\n this.enableSearch = input(false, ...(ngDevMode ? [{ debugName: \"enableSearch\", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));\n this.search = input(...(ngDevMode ? [undefined, { debugName: \"search\" }] : []));\n this.searchLimitWordMax = input(undefined, ...(ngDevMode ? [{ debugName: \"searchLimitWordMax\" }] : []));\n this.enableCaseSensitive = input(true, ...(ngDevMode ? [{ debugName: \"enableCaseSensitive\", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));\n this.filterOverlay = viewChild.required(Popover);\n this.filterFormComponent = viewChild(TableFilterFormComponent, ...(ngDevMode ? [{ debugName: \"filterFormComponent\" }] : []));\n this.templates = contentChildren(TemplateDirective, ...(ngDevMode ? [{ debugName: \"templates\" }] : []));\n this.titleTemplate = computed(() => findTemplateByName([...this.templates()], 'title'), ...(ngDevMode ? [{ debugName: \"titleTemplate\" }] : []));\n this.filters = computed(() => {\n return this.getInitialFilters(this.tableData.filterMeta(), this.metadata());\n }, ...(ngDevMode ? [{ debugName: \"filters\" }] : []));\n this.showFilterButton = computed(() => this.metadata().length > 0, ...(ngDevMode ? [{ debugName: \"showFilterButton\" }] : []));\n this.activeFilters = computed(() => {\n const filterEntry = this.filters();\n return this.metadata()\n .filter(d => {\n const filter = filterEntry[d.descriptor.property];\n return (filter &&\n filter.matchMode !== undefined &&\n filter.displayMatchMode !== undefined &&\n (filter.matchMode === FilterMatchMode.Exists ||\n filter.matchMode === FilterMatchMode.DoesNotExist ||\n (filter.value !== undefined && filter.displayValue !== undefined)));\n })\n .map(d => filterEntry[d.descriptor.property]);\n }, ...(ngDevMode ? [{ debugName: \"activeFilters\" }] : []));\n this.activeFilterProperties = computed(() => this.activeFilters().map(f => f.metadata.descriptor.property), ...(ngDevMode ? [{ debugName: \"activeFilterProperties\" }] : []));\n this.filterEdit = signal(undefined, ...(ngDevMode ? [{ debugName: \"filterEdit\" }] : []));\n // global search model\n this.searchValue = computed(() => this.search()?.value, ...(ngDevMode ? [{ debugName: \"searchValue\" }] : []));\n this.searchCaseSensitive = computed(() => this.search()?.caseSensitive, ...(ngDevMode ? [{ debugName: \"searchCaseSensitive\" }] : []));\n this.searchWordLimitMaxError = signal(false, ...(ngDevMode ? [{ debugName: \"searchWordLimitMaxError\" }] : []));\n this.searchWordLimitMaxCmp = computed(() => {\n const inputLimit = this.searchLimitWordMax();\n if (inputLimit !== undefined) {\n return inputLimit;\n }\n return this.tableConfig?.searchLimitMaxWords !== undefined ? this.tableConfig?.searchLimitMaxWords : TableFilterOverlayWithTagComponent.SEARCH_WORD_LIMIT_MAX;\n }, ...(ngDevMode ? [{ debugName: \"searchWordLimitMaxCmp\" }] : []));\n this.searchValueSubject = new BehaviorSubject(undefined);\n this.searchCaseSensitiveSubject = new BehaviorSubject(undefined);\n // UI utilities\n this.clickedOnFilterEvent = undefined;\n combineLatest([this.searchValueSubject.pipe(debounceTime(500), distinctUntilChanged()), this.searchCaseSensitiveSubject])\n // NOTE: skip is used to ignore propagating the initial value of the subjects\n .pipe(skip(1), takeUntilDestroyed())\n .subscribe(([value, caseSensitive]) => {\n this.updatePrimeTableGlobalFilter(value == null ? (this.search()?.value ?? '') : value, caseSensitive == null ? (this.search()?.caseSensitive ?? undefined) : caseSensitive);\n });\n }\n onFilterFormApply(event) {\n const filterMetadata = this.metadata().find(d => d.descriptor.property === event.property);\n if (!filterMetadata) {\n return;\n }\n const filterData = {\n ...filterSetMetadataOnDisplayChange({ caseSensitive: event.caseSensitive }, event.matchMode, event.value, filterMetadata.descriptor.filterType, filterMetadata.dateConfig),\n metadata: filterMetadata\n };\n this.updatePrimeTableFilter(filterData);\n // this keeps the UI updated properly before closing the overlay\n this.filterEdit.set(filterData);\n // Resetting the form is done in the onOverlayHide callback because resetting the\n // values here renders empty inputs for a split second before closing the overlay\n this.filterOverlay().hide();\n }\n onFilterRemove(event) {\n this.updatePrimeTableFilter({\n ...this.filters()[event.filter.metadata.descriptor.property],\n matchMode: undefined,\n displayMatchMode: undefined,\n value: undefined,\n displayValue: undefined\n });\n }\n onFilterEdit(event) {\n this.onFilterAddOrEdit(event.filter, event.event);\n }\n onFilterAdd(event) {\n this.onFilterAddOrEdit(undefined, event);\n }\n onSearchChange(value) {\n const searchWordLimitMax = this.searchWordLimitMaxCmp();\n if (searchWordLimitMax !== null) {\n const wordCount = value.split(/\\s+/).filter(word => word.length > 0).length;\n this.searchWordLimitMaxError.set(wordCount > searchWordLimitMax);\n }\n else {\n this.searchWordLimitMaxError.set(false);\n }\n if (!this.searchWordLimitMaxError()) {\n this.searchValueSubject.next(value);\n }\n }\n onSearchCaseSensitiveChange(value) {\n this.searchCaseSensitiveSubject.next(value);\n }\n onOverlayHide() {\n // resetting the form is done here for a smoother animation\n if (this.filterFormComponent !== undefined) {\n this.filterFormComponent()?.resetForm();\n }\n if (this.clickedOnFilterEvent) {\n // show the overlay again if the user clicked another filter\n setTimeout(() => {\n this.filterEdit.set(this.clickedOnFilterEvent?.filter);\n this.filterOverlay().show(this.clickedOnFilterEvent?.event);\n this.clickedOnFilterEvent = undefined;\n }, 0);\n return;\n }\n else {\n // clean state\n this.filterEdit.set(undefined);\n }\n }\n onFilterAddOrEdit(filter, event) {\n // If user clicks on the same filter or add that is already open, close the overlay\n if (this.filterOverlay().overlayVisible && this.filterEdit()?.metadata.descriptor.property === filter?.metadata.descriptor.property) {\n this.filterOverlay().hide();\n return;\n }\n if (this.filterOverlay().overlayVisible) {\n // In case the user clicks another filter, 're-showing' the overlay in\n // the new position is done in the onOverlayHide callback\n this.clickedOnFilterEvent = { event, filter };\n this.filterOverlay().hide();\n }\n else {\n this.filterEdit.set(filter);\n this.filterOverlay().show(event);\n }\n }\n getInitialFilters(filtersInit, metadata) {\n const filtersResult = {};\n if (filtersInit) {\n for (const property in filtersInit) {\n const filterInit = filtersInit[property];\n const filterMetadata = metadata.find(m => m.descriptor.property === property);\n if (!filterMetadata) {\n continue;\n }\n filtersResult[property] = {\n ...filterSetMetadataOnChange(filterInit, filterInit.matchMode, filterInit.value, filterMetadata.descriptor.filterType, filterMetadata.dateConfig),\n metadata: filterMetadata\n };\n }\n }\n return filtersResult;\n }\n updatePrimeTableFilter(filter) {\n this.primeTable.filters[filter.metadata.descriptor.property] = { ...filter };\n this.primeTable._filter();\n }\n updatePrimeTableGlobalFilter(searchQuery, caseSensitive = false) {\n // match mode needs to be set for inline search\n this.primeTable.filters['global'] = { ...{ value: searchQuery, matchMode: 'contains', caseSensitive: caseSensitive } };\n this.primeTable._filter();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableFilterOverlayWithTagComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.7\", type: TableFilterOverlayWithTagComponent, isStandalone: true, selector: \"mng-table-filter-overlay-with-tag\", inputs: { metadata: { classPropertyName: \"metadata\", publicName: \"metadata\", isSignal: true, isRequired: true, transformFunction: null }, genericFilterDescriptor: { classPropertyName: \"genericFilterDescriptor\", publicName: \"genericFilterDescriptor\", isSignal: true, isRequired: false, transformFunction: null }, model: { classPropertyName: \"model\", publicName: \"model\", isSignal: true, isRequired: true, transformFunction: null }, enableSearch: { classPropertyName: \"enableSearch\", publicName: \"enableSearch\", isSignal: true, isRequired: false, transformFunction: null }, search: { classPropertyName: \"search\", publicName: \"search\", isSignal: true, isRequired: false, transformFunction: null }, searchLimitWordMax: { classPropertyName: \"searchLimitWordMax\", publicName: \"searchLimitWordMax\", isSignal: true, isRequired: false, transformFunction: null }, enableCaseSensitive: { classPropertyName: \"enableCaseSensitive\", publicName: \"enableCaseSensitive\", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: \"templates\", predicate: TemplateDirective, isSignal: true }], viewQueries: [{ propertyName: \"filterOverlay\", first: true, predicate: Popover, descendants: true, isSignal: true }, { propertyName: \"filterFormComponent\", first: true, predicate: TableFilterFormComponent, descendants: true, isSignal: true }], ngImport: i0, template: \"<div class=\\\"flex items-center grow\\\">\\n @if (titleTemplate()) {\\n <ng-container *ngTemplateOutlet=\\\"titleTemplate()\\\"></ng-container>\\n }\\n @if (showFilterButton()) {\\n <p-button\\n icon=\\\"pi pi-filter\\\"\\n rounded=\\\"true\\\"\\n [severity]=\\\"activeFilters().length > 0 ? 'primary' : 'secondary'\\\"\\n size=\\\"small\\\"\\n (click)=\\\"onFilterAdd($event)\\\"\\n [styleClass]=\\\"'my-1 mr-2' + (titleTemplate() ? ' ml-3' : '')\\\">\\n </p-button>\\n }\\n @if (enableSearch()) {\\n <div class=\\\"col-span-4\\\" [ngClass]=\\\"{'ml-3': !showFilterButton() && titleTemplate()}\\\">\\n <span class=\\\"p-input-icon-left w-full\\\">\\n <p-iconfield>\\n <p-inputicon class=\\\"pi pi-search\\\" />\\n <input\\n [ngModel]=\\\"searchValue()\\\"\\n (ngModelChange)=\\\"onSearchChange($event)\\\"\\n name=\\\"globalSearch\\\"\\n type=\\\"text\\\"\\n pInputText\\n class=\\\"search-input w-full\\\"\\n [ngClass]=\\\"{'ng-invalid': searchWordLimitMaxError()}\\\"\\n [attr.placeholder]=\\\"'mngFilter.search.input' | translate\\\"\\n [placeholder]=\\\"'mngFilter.search.input' | translate\\\" />\\n </p-iconfield>\\n @if (enableCaseSensitive()) {\\n <span class=\\\"toggle-button-input\\\">\\n <p-toggleButton\\n styleClass=\\\"ml-1 p-1 p-button-sm\\\"\\n [ngModel]=\\\"searchCaseSensitive()\\\"\\n (ngModelChange)=\\\"onSearchCaseSensitiveChange($event)\\\"\\n onLabel=\\\"Aa\\\"\\n offLabel=\\\"Aa\\\" />\\n </span>\\n }\\n </span>\\n @if (searchWordLimitMaxError()) {\\n <small class=\\\"p-error block\\\">\\n {{ 'mngFilter.search.maxWordsExceededMessage' | translate }}\\n </small>\\n }\\n </div>\\n }\\n</div>\\n@if (activeFilters().length > 0) {\\n <div class=\\\"flex items-center flex-wrap mt-2\\\">\\n @for (filter of activeFilters(); track filter.metadata.descriptor.property) {\\n <mng-table-filter-active-tag [model]=\\\"model()\\\" [filter]=\\\"filter\\\" (edit)=\\\"onFilterEdit($event)\\\" (remove)=\\\"onFilterRemove($event)\\\" />\\n }\\n </div>\\n}\\n<p-popover #op showCloseIcon=\\\"true\\\" (onHide)=\\\"onOverlayHide()\\\" appendTo=\\\"body\\\">\\n <mng-table-filter-form\\n [model]=\\\"model()\\\"\\n [metadata]=\\\"metadata()\\\"\\n [genericDescriptor]=\\\"genericFilterDescriptor()\\\"\\n [filter]=\\\"filterEdit()\\\"\\n [disabledProperties]=\\\"activeFilterProperties()\\\"\\n [propertySearch]=\\\"genericFilterDescriptor()?.propertySearch\\\"\\n [overlay]=\\\"op\\\"\\n [enableCaseSensitive]=\\\"enableCaseSensitive()\\\"\\n (apply)=\\\"onFilterFormApply($event)\\\" />\\n</p-popover>\\n\", styles: [\".toggle-button-input{position:absolute;right:.35rem;top:50%;transform:translateY(-50%)}\\n\"], dependencies: [{ kind: \"ngmodule\", type: TagModule }, { kind: \"component\", type: TableFilterFormComponent, selector: \"mng-table-filter-form\", inputs: [\"title\", \"metadata\", \"genericDescriptor\", \"model\", \"filter\", \"overlay\", \"disabledProperties\", \"enableCaseSensitive\", \"propertySearch\"], outputs: [\"apply\"] }, { kind: \"component\", type: Button, selector: \"p-button\", inputs: [\"type\", \"iconPos\", \"icon\", \"badge\", \"label\", \"disabled\", \"loading\", \"loadingIcon\", \"raised\", \"rounded\", \"text\", \"plain\", \"severity\", \"outlined\", \"link\", \"tabindex\", \"size\", \"variant\", \"style\", \"styleClass\", \"badgeClass\", \"badgeSeverity\", \"ariaLabel\", \"buttonProps\", \"autofocus\", \"fluid\"], outputs: [\"onClick\", \"onFocus\", \"onBlur\"] }, { kind: \"component\", type: TableFilterActiveTagComponent, selector: \"mng-table-filter-active-tag\", inputs: [\"model\", \"filter\"], outputs: [\"edit\", \"remove\"] }, { kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"directive\", type: InputText, selector: \"[pInputText]\", inputs: [\"pSize\", \"variant\", \"fluid\", \"invalid\"] }, { kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"component\", type: ToggleButton, selector: \"p-toggleButton, p-togglebutton, p-toggle-button\", inputs: [\"onLabel\", \"offLabel\", \"onIcon\", \"offIcon\", \"ariaLabel\", \"ariaLabelledBy\", \"styleClass\", \"inputId\", \"tabindex\", \"iconPos\", \"autofocus\", \"size\", \"allowEmpty\", \"fluid\"], outputs: [\"onChange\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i1.DefaultValueAccessor, selector: \"input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]\" }, { kind: \"directive\", type: i1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"component\", type: IconField, selector: \"p-iconfield, p-iconField, p-icon-field\", inputs: [\"iconPosition\", \"styleClass\"] }, { kind: \"component\", type: InputIcon, selector: \"p-inputicon, p-inputIcon\", inputs: [\"styleClass\"] }, { kind: \"component\", type: Popover, selector: \"p-popover\", inputs: [\"ariaLabel\", \"ariaLabelledBy\", \"dismissable\", \"style\", \"styleClass\", \"appendTo\", \"autoZIndex\", \"ariaCloseLabel\", \"baseZIndex\", \"focusOnShow\", \"showTransitionOptions\", \"hideTransitionOptions\"], outputs: [\"onShow\", \"onHide\"] }, { kind: \"pipe\", type: TranslatePipe, name: \"translate\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableFilterOverlayWithTagComponent, decorators: [{\n type: Component,\n args: [{ selector: 'mng-table-filter-overlay-with-tag', imports: [\n TranslatePipe,\n TagModule,\n TableFilterFormComponent,\n Button,\n TableFilterActiveTagComponent,\n NgTemplateOutlet,\n InputText,\n NgClass,\n ToggleButton,\n FormsModule,\n IconField,\n InputIcon,\n Popover\n ], changeDetection: ChangeDetectionStrategy.OnPush, template: \"<div class=\\\"flex items-center grow\\\">\\n @if (titleTemplate()) {\\n <ng-container *ngTemplateOutlet=\\\"titleTemplate()\\\"></ng-container>\\n }\\n @if (showFilterButton()) {\\n <p-button\\n icon=\\\"pi pi-filter\\\"\\n rounded=\\\"true\\\"\\n [severity]=\\\"activeFilters().length > 0 ? 'primary' : 'secondary'\\\"\\n size=\\\"small\\\"\\n (click)=\\\"onFilterAdd($event)\\\"\\n [styleClass]=\\\"'my-1 mr-2' + (titleTemplate() ? ' ml-3' : '')\\\">\\n </p-button>\\n }\\n @if (enableSearch()) {\\n <div class=\\\"col-span-4\\\" [ngClass]=\\\"{'ml-3': !showFilterButton() && titleTemplate()}\\\">\\n <span class=\\\"p-input-icon-left w-full\\\">\\n <p-iconfield>\\n <p-inputicon class=\\\"pi pi-search\\\" />\\n <input\\n [ngModel]=\\\"searchValue()\\\"\\n (ngModelChange)=\\\"onSearchChange($event)\\\"\\n name=\\\"globalSearch\\\"\\n type=\\\"text\\\"\\n pInputText\\n class=\\\"search-input w-full\\\"\\n [ngClass]=\\\"{'ng-invalid': searchWordLimitMaxError()}\\\"\\n [attr.placeholder]=\\\"'mngFilter.search.input' | translate\\\"\\n [placeholder]=\\\"'mngFilter.search.input' | translate\\\" />\\n </p-iconfield>\\n @if (enableCaseSensitive()) {\\n <span class=\\\"toggle-button-input\\\">\\n <p-toggleButton\\n styleClass=\\\"ml-1 p-1 p-button-sm\\\"\\n [ngModel]=\\\"searchCaseSensitive()\\\"\\n (ngModelChange)=\\\"onSearchCaseSensitiveChange($event)\\\"\\n onLabel=\\\"Aa\\\"\\n offLabel=\\\"Aa\\\" />\\n </span>\\n }\\n </span>\\n @if (searchWordLimitMaxError()) {\\n <small class=\\\"p-error block\\\">\\n {{ 'mngFilter.search.maxWordsExceededMessage' | translate }}\\n </small>\\n }\\n </div>\\n }\\n</div>\\n@if (activeFilters().length > 0) {\\n <div class=\\\"flex items-center flex-wrap mt-2\\\">\\n @for (filter of activeFilters(); track filter.metadata.descriptor.property) {\\n <mng-table-filter-active-tag [model]=\\\"model()\\\" [filter]=\\\"filter\\\" (edit)=\\\"onFilterEdit($event)\\\" (remove)=\\\"onFilterRemove($event)\\\" />\\n }\\n </div>\\n}\\n<p-popover #op showCloseIcon=\\\"true\\\" (onHide)=\\\"onOverlayHide()\\\" appendTo=\\\"body\\\">\\n <mng-table-filter-form\\n [model]=\\\"model()\\\"\\n [metadata]=\\\"metadata()\\\"\\n [genericDescriptor]=\\\"genericFilterDescriptor()\\\"\\n [filter]=\\\"filterEdit()\\\"\\n [disabledProperties]=\\\"activeFilterProperties()\\\"\\n [propertySearch]=\\\"genericFilterDescriptor()?.propertySearch\\\"\\n [overlay]=\\\"op\\\"\\n [enableCaseSensitive]=\\\"enableCaseSensitive()\\\"\\n (apply)=\\\"onFilterFormApply($event)\\\" />\\n</p-popover>\\n\", styles: [\".toggle-button-input{position:absolute;right:.35rem;top:50%;transform:translateY(-50%)}\\n\"] }]\n }], ctorParameters: () => [] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLW92ZXJsYXktd2l0aC10YWcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGFibGUvc3JjL2NvbXBvbmVudHMvZmlsdGVyL2ZpbHRlci1vdmVybGF5LXdpdGgtdGFnL2ZpbHRlci1vdmVybGF5LXdpdGgtdGFnLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3RhYmxlL3NyYy9jb21wb25lbnRzL2ZpbHRlci9maWx0ZXItb3ZlcmxheS13aXRoLXRhZy9maWx0ZXItb3ZlcmxheS13aXRoLXRhZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsT0FBTyxFQUFFLGdCQUFnQixFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDMUQsT0FBTyxFQUFDLHVCQUF1QixFQUFFLFNBQVMsRUFBdUIsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDckssT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBRTNDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUNsRCxPQUFPLEVBQUMsTUFBTSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxTQUFTLEVBQUMsTUFBTSxtQkFBbUIsQ0FBQztBQUM1QyxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDNUMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ3hDLE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFD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Q0FBQyxRQUFRLENBQUMsR0FBRyxFQUFDLEdBQUcsRUFBQyxLQUFLLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBQyxFQUFDLENBQUM7UUFDbkgsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUM5QixDQUFDOzhHQS9NUSxrQ0FBa0M7a0dBQWxDLGtDQUFrQyxpbkNBa0JSLGlCQUFpQiw0RkFIVCxPQUFPLHNHQUNWLHdCQUF3QixnRUNoRXBFLGtoR0FvRUEsa0pEbkNRLFNBQVMsK0JBQ1Qsd0JBQXdCLHVPQUN4QixNQUFNLDBZQUNOLDZCQUE2QixrSUFDN0IsZ0JBQWdCLG9KQUNoQixTQUFTLDJHQUNULE9BQU8sb0ZBQ1AsWUFBWSxtU0FDWixXQUFXLCttQkFDWCxTQUFTLDJIQUNULFNBQVMsNkZBQ1QsT0FBTywwUkFaUCxhQUFhOzsyRkFnQlIsa0NBQWtDO2tCQXJCOUMsU0FBUzsrQkFDSSxtQ0FBbUMsV0FHcEM7d0JBQ0wsYUFBYTt3QkFDYixTQUFTO3dCQUNULHdCQUF3Qjt3QkFDeEIsTUFBTTt3QkFDTiw2QkFBNkI7d0JBQzdCLGdCQUFnQjt3QkFDaEIsU0FBUzt3QkFDVCxPQUFPO3dCQUNQLFlBQVk7d0JBQ1osV0FBVzt3QkFDWCxTQUFTO3dCQUNULFNBQVM7d0JBQ1QsT0FBTztxQkFDVixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TmdDbGFzcywgTmdUZW1wbGF0ZU91dGxldH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgU2lnbmFsLCBUZW1wbGF0ZVJlZiwgYm9vbGVhbkF0dHJpYnV0ZSwgY29tcHV0ZWQsIGNvbnRlbnRDaGlsZHJlbiwgaW5qZWN0LCBpbnB1dCwgc2lnbmFsLCB2aWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHt0YWtlVW50aWxEZXN0cm95ZWR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7Rm9ybXNNb2R1bGV9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHtUcmFuc2xhdGVQaXBlfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7QnV0dG9ufSBmcm9tICdwcmltZW5nL2J1dHRvbic7XG5pbXBvcnQge0ljb25GaWVsZH0gZnJvbSAncHJpbWVuZy9pY29uZmllbGQnO1xuaW1wb3J0IHtJbnB1dEljb259IGZyb20gJ3ByaW1lbmcvaW5wdXRpY29uJztcbmltcG9ydCB7SW5wdXRUZXh0fSBmcm9tICdwcmltZW5nL2lucHV0dGV4dCc7XG5pbXBvcnQge1BvcG92ZXJ9IGZyb20gJ3ByaW1lbmcvcG9wb3Zlcic7XG5pbXBvcnQge1RhYmxlfSBmcm9tICdwcmltZW5nL3RhYmxlJztcbmltcG9ydCB7VGFnTW9kdWxlfSBmcm9tICdwcmltZW5nL3RhZyc7XG5pbXBvcnQge1RvZ2dsZUJ1dHRvbn0gZnJvbSAncHJpbWVuZy90b2dnbGVidXR0b24nO1xuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIGNvbWJpbmVMYXRlc3QsIGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIHNraXB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge0NvbW1vbnNGaWx0ZXJNZXRhZGF0YSwgRmlsdGVyTWF0Y2hNb2RlLCBUZW1wbGF0ZURpcmVjdGl2ZSwgZmluZFRlbXBsYXRlQnlOYW1lfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtGaWx0ZXJHZW5lcmljRGVzY3JpcHRvcn0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9maWx0ZXInO1xuaW1wb3J0IHtNb2RlbERlc2NyaXB0b3J9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvbW9kZWwnO1xuXG5pbXBvcnQge2ZpbHRlclNldE1ldGFkYXRhT25DaGFuZ2UsIGZpbHRlclNldE1ldGFkYXRhT25EaXNwbGF5Q2hhbmdlfSBmcm9tICcuLi8uLi8uLi9oZWxwZXJzL2ZpbHRlcnMnO1xuaW1wb3J0IHtGaWx0ZXJBY3RpdmVUYWdFdmVudCwgRmlsdGVyRm9ybUVtaXRFdmVudCwgRmlsdGVyTWV0YWRhdGEsIEZpbHRlclN0YXRlfSBmcm9tICcuLi8uLi8uLi9tb2RlbHMvZmlsdGVyLm1vZGVsJztcbmltcG9ydCB7VGFibGVEYXRhU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdGFibGUtZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7Q09NTU9OU19UQUJMRV9GRUFUVVJFX0NPTkZJR19JVH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvdGFibGUtZmVhdHVyZS1jb25maWcudG9rZW4nO1xuaW1wb3J0IHtUYWJsZUZpbHRlckFjdGl2ZVRhZ0NvbXBvbmVudH0gZnJvbSAnLi4vZmlsdGVyLWFjdGl2ZS10YWcvZmlsdGVyLWFjdGl2ZS10YWcuY29tcG9uZW50JztcbmltcG9ydCB7VGFibGVGaWx0ZXJGb3JtQ29tcG9uZW50fSBmcm9tICcuLi9maWx0ZXItZm9ybS9maWx0ZXItZm9ybS5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ21uZy10YWJsZS1maWx0ZXItb3ZlcmxheS13aXRoLXRhZycsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2ZpbHRlci1vdmVybGF5LXdpdGgtdGFnLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9maWx0ZXItb3ZlcmxheS13aXRoLXRhZy5jb21wb25lbnQuY3NzJ10sXG4gICAgaW1wb3J0czogW1xuICAgICAgICBUcmFuc2xhdGVQaXBlLFxuICAgICAgICBUYWdNb2R1bGUsXG4gICAgICAgIFRhYmxlRmlsdGVyRm9ybUNvbXBvbmVudCxcbiAgICAgICAgQnV0dG9uLFxuICAgICAgICBUYWJsZUZpbHRlckFjdGl2ZVRhZ0NvbXBvbmVudCxcbiAgICAgICAgTmdUZW1wbGF0ZU91dGxldCxcbiAgICAgICAgSW5wdXRUZXh0LFxuICAgICAgICBOZ0NsYXNzLFxuICAgICAgICBUb2dnbGVCdXR0b24sXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBJY29uRmllbGQsXG4gICAgICAgIElucHV0SWNvbixcbiAgICAgICAgUG9wb3ZlclxuICAgIF0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVGaWx0ZXJPdmVybGF5V2l0aFRhZ0NvbXBvbmVudCB7XG4gICAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgU0VBUkNIX1dPUkRfTElNSVRfTUFYID0gNDtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgcHJpbWVUYWJsZSA9IGluamVjdChUYWJsZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSB0YWJsZURhdGEgPSBpbmplY3QoVGFibGVEYXRhU2VydmljZTxhbnk+KTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRhYmxlQ29uZmlnID0gaW5qZWN0KENPTU1PTlNfVEFCTEVfRkVBVFVSRV9DT05GSUdfSVQsIHtvcHRpb25hbDogdHJ1ZX0pO1xuXG4gICAgcHVibGljIG1ldGFkYXRhID0gaW5wdXQucmVxdWlyZWQ8RmlsdGVyTWV0YWRhdGFbXT4oKTtcbiAgICBwdWJsaWMgZ2VuZXJpY0ZpbHRlckRlc2NyaXB0b3IgPSBpbnB1dDxGaWx0ZXJHZW5lcmljRGVzY3JpcHRvcj4oKTtcbiAgICBwdWJsaWMgbW9kZWwgPSBpbnB1dC5yZXF1aXJlZDxNb2RlbERlc2NyaXB0b3I8YW55Pj4oKTtcbiAgICBwdWJsaWMgZW5hYmxlU2VhcmNoID0gaW5wdXQoZmFsc2UsIHt0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGV9KTtcbiAgICBwdWJsaWMgc2VhcmNoID0gaW5wdXQ8e3ZhbHVlOiBzdHJpbmc7IGNhc2VTZW5zaXRpdmU6IGJvb2xlYW59IHwgdW5kZWZpbmVkPigpO1xuICAgIHB1YmxpYyBzZWFyY2hMaW1pdFdvcmRNYXggPSBpbnB1dDxudW1iZXIgfCB1bmRlZmluZWQgfCBudWxsPih1bmRlZmluZWQpO1xuICAgIHB1YmxpYyBlbmFibGVDYXNlU2Vuc2l0aXZlID0gaW5wdXQodHJ1ZSwge3RyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZX0pO1xuXG4gICAgcHJpdmF0ZSBmaWx0ZXJPdmVybGF5ID0gdmlld0NoaWxkLnJlcXVpcmVkKFBvcG92ZXIpO1xuICAgIHByaXZhdGUgZmlsdGVyRm9ybUNvbXBvbmVudCA9IHZpZXdDaGlsZChUYWJsZUZpbHRlckZvcm1Db21wb25lbnQpO1xuXG4gICAgcHVibGljIHRlbXBsYXRlcyA9IGNvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZURpcmVjdGl2ZSk7XG4gICAgcHVibGljIHRpdGxlVGVtcGxhdGU6IFNpZ25hbDxUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbD4gPSBjb21wdXRlZCgoKSA9PiBmaW5kVGVtcGxhdGVCeU5hbWUoWy4uLnRoaXMudGVtcGxhdGVzKCldLCAndGl0bGUnKSk7XG5cbiAgICBwdWJsaWMgZmlsdGVycyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0SW5pdGlhbEZpbHRlcnModGhpcy50YWJsZURhdGEuZmlsdGVyTWV0YSgpLCB0aGlzLm1ldGFkYXRhKCkpO1xuICAgIH0pO1xuXG4gICAgcHVibGljIHNob3dGaWx0ZXJCdXR0b24gPSBjb21wdXRlZCgoKSA9PiB0aGlzLm1ldGFkYXRhKCkubGVuZ3RoID4gMCk7XG5cbiAgICBwdWJsaWMgYWN0aXZlRmlsdGVycyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgZmlsdGVyRW50cnkgPSB0aGlzLmZpbHRlcnMoKTtcbiAgICAgICAgcmV0dXJuIHRoaXMubWV0YWRhdGEoKVxuICAgICAgICAgICAgLmZpbHRlcihkID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBmaWx0ZXJFbnRyeVtkLmRlc2NyaXB0b3IucHJvcGVydHldO1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlciAmJlxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIubWF0Y2hNb2RlICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmRpc3BsYXlNYXRjaE1vZGUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgICAgICAgICAoZmlsdGVyLm1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkV4aXN0cyB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyLm1hdGNoTW9kZSA9PT0gRmlsdGVyTWF0Y2hNb2RlLkRvZXNOb3RFeGlzdCB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgKGZpbHRlci52YWx1ZSAhPT0gdW5kZWZpbmVkICYmIGZpbHRlci5kaXNwbGF5VmFsdWUgIT09IHVuZGVmaW5lZCkpXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAubWFwKGQgPT4gZmlsdGVyRW50cnlbZC5kZXNjcmlwdG9yLnByb3BlcnR5XSEpO1xuICAgIH0pO1xuICAgIHB1YmxpYyBhY3RpdmVGaWx0ZXJQcm9wZXJ0aWVzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5hY3RpdmVGaWx0ZXJzKCkubWFwKGYgPT4gZi5tZXRhZGF0YS5kZXNjcmlwdG9yLnByb3BlcnR5KSk7XG4gICAgcHVibGljIGZpbHRlckVkaXQgPSBzaWduYWw8RmlsdGVyU3RhdGUgfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCk7XG5cbiAgICAvLyBnbG9iYWwgc2VhcmNoIG1vZGVsXG4gICAgcHVibGljIHNlYXJjaFZhbHVlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zZWFyY2goKT8udmFsdWUpO1xuICAgIHB1YmxpYyBzZWFyY2hDYXNlU2Vuc2l0aXZlID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zZWFyY2goKT8uY2FzZVNlbnNpdGl2ZSk7XG4gICAgcHVibGljIHNlYXJjaFdvcmRMaW1pdE1heEVycm9yID0gc2lnbmFsKGZhbHNlKTtcbiAgICBwcml2YXRlIHNlYXJjaFdvcmRMaW1pdE1heENtcCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgaW5wdXRMaW1pdCA9IHRoaXMuc2VhcmNoTGltaXRXb3JkTWF4KCk7XG4gICAgICAgIGlmIChpbnB1dExpbWl0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBpbnB1dExpbWl0O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnRhYmxlQ29uZmlnPy5zZWFyY2hMaW1pdE1heFdvcmRzICE9PSB1bmRlZmluZWQgPyB0aGlzLnRhYmxlQ29uZmlnPy5zZWFyY2hMaW1pdE1heFdvcmRzIDogVGFibGVGaWx0ZXJPdmVybGF5V2l0aFRhZ0NvbXBvbmVudC5TRUFSQ0hfV09SRF9MSU1JVF9NQVg7XG4gICAgfSk7XG4gICAgcHJpdmF0ZSBzZWFyY2hWYWx1ZVN1YmplY3QgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZyB8IHVuZGVmaW5lZD4odW5kZWZpbmVkKTtcbiAgICBwcml2YXRlIHNlYXJjaENhc2VTZW5zaXRpdmVTdWJqZWN0ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuIHwgdW5kZWZpbmVkPih1bmRlZmluZWQpO1xuXG4gICAgLy8gVUkgdXRpbGl0aWVzXG4gICAgcHJpdmF0ZSBjbGlja2VkT25GaWx0ZXJFdmVudDoge2V2ZW50PzogRXZlbnQ7IGZpbHRlcj86IEZpbHRlclN0YXRlfSB8IHVuZGVmaW5lZCA9IHVuZGVmaW5lZDtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBjb21iaW5lTGF0ZXN0KFt0aGlzLnNlYXJjaFZhbHVlU3ViamVjdC5waXBlKGRlYm91bmNlVGltZSg1MDApLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpKSwgdGhpcy5zZWFyY2hDYXNlU2Vuc2l0aXZlU3ViamVjdF0pXG4gICAgICAgICAgICAvLyBOT1RFOiBza2lwIGlzIHVzZWQgdG8gaWdub3JlIHByb3BhZ2F0aW5nIHRoZSBpbml0aWFsIHZhbHVlIG9mIHRoZSBzdWJqZWN0c1xuICAgICAgICAgICAgLnBpcGUoc2tpcCgxKSwgdGFrZVVudGlsRGVzdHJveWVkKCkpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChbdmFsdWUsIGNhc2VTZW5zaXRpdmVdKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVQcmltZVRhYmxlR2xvYmFsRmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9PSBudWxsID8gKHRoaXMuc2VhcmNoKCk/LnZhbHVlID8/ICcnKSA6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBjYXNlU2Vuc2l0aXZlID09IG51bGwgPyAodGhpcy5zZWFyY2goKT8uY2FzZVNlbnNpdGl2ZSA/PyB1bmRlZmluZWQpIDogY2FzZVNlbnNpdGl2ZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkZpbHRlckZvcm1BcHBseShldmVudDogRmlsdGVyRm9ybUVtaXRFdmVudCkge1xuICAgICAgICBjb25zdCBmaWx0ZXJNZXRhZGF0YSA9IHRoaXMubWV0YWRhdGEoKS5maW5kKGQgPT4gZC5kZXNjcmlwdG9yLnByb3BlcnR5ID09PSBldmVudC5wcm9wZXJ0eSk7XG4gICAgICAgIGlmICghZmlsdGVyTWV0YWRhdGEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpbHRlckRhdGE6IEZpbHRlclN0YXRlID0ge1xuICAgICAgICAgICAgLi4uZmlsdGVyU2V0TWV0YWRhdGFPbkRpc3BsYXlDaGFuZ2UoXG4gICAgICAgICAgICAgICAge2Nhc2VTZW5zaXRpdmU6IGV2ZW50LmNhc2VTZW5zaXRpdmV9LFxuICAgICAgICAgICAgICAgIGV2ZW50Lm1hdGNoTW9kZSxcbiAgICAgICAgICAgICAgICBldmVudC52YWx1ZSxcbiAgICAgICAgICAgICAgICBmaWx0ZXJNZXRhZGF0YS5kZXNjcmlwdG9yLmZpbHRlclR5cGUsXG4gICAgICAgICAgICAgICAgZmlsdGVyTWV0YWRhdGEuZGF0ZUNvbmZpZ1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIG1ldGFkYXRhOiBmaWx0ZXJNZXRhZGF0YVxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMudXBkYXRlUHJpbWVUYWJsZUZpbHRlcihmaWx0ZXJEYXRhKTtcblxuICAgICAgICAvLyB0aGlzIGtlZXBzIHRoZSBVSSB1cGRhdGVkIHByb3Blcmx5IGJlZm9yZSBjbG9zaW5nIHRoZSBvdmVybGF5XG4gICAgICAgIHRoaXMuZmlsdGVyRWRpdC5zZXQoZmlsdGVyRGF0YSk7XG5cbiAgICAgICAgLy8gUmVzZXR0aW5nIHRoZSBmb3JtIGlzIGRvbmUgaW4gdGhlIG9uT3ZlcmxheUhpZGUgY2FsbGJhY2sgYmVjYXVzZSByZXNldHRpbmcgdGhlXG4gICAgICAgIC8vIHZhbHVlcyBoZXJlIHJlbmRlcnMgZW1wdHkgaW5wdXRzIGZvciBhIHNwbGl0IHNlY29uZCBiZWZvcmUgY2xvc2luZyB0aGUgb3ZlcmxheVxuICAgICAgICB0aGlzLmZpbHRlck92ZXJsYXkoKS5oaWRlKCk7XG4gICAgfVxuXG4gICAgb25GaWx0ZXJSZW1vdmUoZXZlbnQ6IEZpbHRlckFjdGl2ZVRhZ0V2ZW50KSB7XG4gICAgICAgIHRoaXMudXBkYXRlUHJpbWVUYWJsZUZpbHRlcih7XG4gICAgICAgICAgICAuLi50aGlzLmZpbHRlcnMoKVtldmVudC5maWx0ZXIubWV0YWRhdGEuZGVzY3JpcHRvci5wcm9wZXJ0eV0sXG4gICAgICAgICAgICBtYXRjaE1vZGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGRpc3BsYXlNYXRjaE1vZGU6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBkaXNwbGF5VmFsdWU6IHVuZGVmaW5lZFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBvbkZpbHRlckVkaXQoZXZlbnQ6IEZpbHRlckFjdGl2ZVRhZ0V2ZW50KSB7XG4gICAgICAgIHRoaXMub25GaWx0ZXJBZGRPckVkaXQoZXZlbnQuZmlsdGVyLCBldmVudC5ldmVudCk7XG4gICAgfVxuXG4gICAgb25GaWx0ZXJBZGQoZXZlbnQ6IEV2ZW50KSB7XG4gICAgICAgIHRoaXMub25GaWx0ZXJBZGRPckVkaXQodW5kZWZpbmVkLCBldmVudCk7XG4gICAgfVxuXG4gICAgb25TZWFyY2hDaGFuZ2UodmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgICAgICBjb25zdCBzZWFyY2hXb3JkTGltaXRNYXggPSB0aGlzLnNlYXJjaFdvcmRMaW1pdE1heENtcCgpO1xuICAgICAgICBpZiAoc2VhcmNoV29yZExpbWl0TWF4ICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCB3b3JkQ291bnQgPSB2YWx1ZS5zcGxpdCgvXFxzKy8pLmZpbHRlcih3b3JkID0+IHdvcmQubGVuZ3RoID4gMCkubGVuZ3RoO1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hXb3JkTGltaXRNYXhFcnJvci5zZXQod29yZENvdW50ID4gc2VhcmNoV29yZExpbWl0TWF4KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoV29yZExpbWl0TWF4RXJyb3Iuc2V0KGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5zZWFyY2hXb3JkTGltaXRNYXhFcnJvcigpKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaFZhbHVlU3ViamVjdC5uZXh0KHZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uU2VhcmNoQ2FzZVNlbnNpdGl2ZUNoYW5nZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgICB0aGlzLnNlYXJjaENhc2VTZW5zaXRpdmVTdWJqZWN0Lm5leHQodmFsdWUpO1xuICAgIH1cblxuICAgIG9uT3ZlcmxheUhpZGUoKSB7XG4gICAgICAgIC8vIHJlc2V0dGluZyB0aGUgZm9ybSBpcyBkb25lIGhlcmUgZm9yIGEgc21vb3RoZXIgYW5pbWF0aW9uXG4gICAgICAgIGlmICh0aGlzLmZpbHRlckZvcm1Db21wb25lbnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJGb3JtQ29tcG9uZW50KCk/LnJlc2V0Rm9ybSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY2xpY2tlZE9uRmlsdGVyRXZlbnQpIHtcbiAgICAgICAgICAgIC8vIHNob3cgdGhlIG92ZXJsYXkgYWdhaW4gaWYgdGhlIHVzZXIgY2xpY2tlZCBhbm90aGVyIGZpbHRlclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJFZGl0LnNldCh0aGlzLmNsaWNrZWRPbkZpbHRlckV2ZW50Py5maWx0ZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyT3ZlcmxheSgpLnNob3codGhpcy5jbGlja2VkT25GaWx0ZXJFdmVudD8uZXZlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuY2xpY2tlZE9uRmlsdGVyRXZlbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGNsZWFuIHN0YXRlXG4gICAgICAgICAgICB0aGlzLmZpbHRlckVkaXQuc2V0KHVuZGVmaW5lZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIG9uRmlsdGVyQWRkT3JFZGl0KGZpbHRlcj86IEZpbHRlclN0YXRlLCBldmVudD86IEV2ZW50KSB7XG4gICAgICAgIC8vIElmIHVzZXIgY2xpY2tzIG9uIHRoZSBzYW1lIGZpbHRlciBvciBhZGQgdGhhdCBpcyBhbHJlYWR5IG9wZW4sIGNsb3NlIHRoZSBvdmVybGF5XG4gICAgICAgIGlmICh0aGlzLmZpbHRlck92ZXJsYXkoKS5vdmVybGF5VmlzaWJsZSAmJiB0aGlzLmZpbHRlckVkaXQoKT8ubWV0YWRhdGEuZGVzY3JpcHRvci5wcm9wZXJ0eSA9PT0gZmlsdGVyPy5tZXRhZGF0YS5kZXNjcmlwdG9yLnByb3BlcnR5KSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlck92ZXJsYXkoKS5oaWRlKCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5maWx0ZXJPdmVybGF5KCkub3ZlcmxheVZpc2libGUpIHtcbiAgICAgICAgICAgIC8vIEluIGNhc2UgdGhlIHVzZXIgY2xpY2tzIGFub3RoZXIgZmlsdGVyLCAncmUtc2hvd2luZycgdGhlIG92ZXJsYXkgaW5cbiAgICAgICAgICAgIC8vIHRoZSBuZXcgcG9zaXRpb24gaXMgZG9uZSBpbiB0aGUgb25PdmVybGF5SGlkZSBjYWxsYmFja1xuICAgICAgICAgICAgdGhpcy5jbGlja2VkT25GaWx0ZXJFdmVudCA9IHtldmVudCwgZmlsdGVyfTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyT3ZlcmxheSgpLmhpZGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyRWRpdC5zZXQoZmlsdGVyKTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyT3ZlcmxheSgpLnNob3coZXZlbnQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRJbml0aWFsRmlsdGVycyhmaWx0ZXJzSW5pdDogUmVjb3JkPHN0cmluZywgQ29tbW9uc0ZpbHRlck1ldGFkYXRhPiB8IHVuZGVmaW5lZCwgbWV0YWRhdGE6IEZpbHRlck1ldGFkYXRhW10pIHtcbiAgICAgICAgY29uc3QgZmlsdGVyc1Jlc3VsdDoge1twOiBzdHJpbmddOiBGaWx0ZXJTdGF0ZX0gPSB7fTtcblxuICAgICAgICBpZiAoZmlsdGVyc0luaXQpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgcHJvcGVydHkgaW4gZmlsdGVyc0luaXQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJJbml0ID0gZmlsdGVyc0luaXRbcHJvcGVydHldO1xuXG4gICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyTWV0YWRhdGEgPSBtZXRhZGF0YS5maW5kKG0gPT4gbS5kZXNjcmlwdG9yLnByb3BlcnR5ID09PSBwcm9wZXJ0eSk7XG4gICAgICAgICAgICAgICAgaWYgKCFmaWx0ZXJNZXRhZGF0YSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBmaWx0ZXJzUmVzdWx0W3Byb3BlcnR5XSA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uZmlsdGVyU2V0TWV0YWRhdGFPbkNoYW5nZShmaWx0ZXJJbml0LCBmaWx0ZXJJbml0Lm1hdGNoTW9kZSwgZmlsdGVySW5pdC52YWx1ZSwgZmlsdGVyTWV0YWRhdGEuZGVzY3JpcHRvci5maWx0ZXJUeXBlLCBmaWx0ZXJNZXRhZGF0YS5kYXRlQ29uZmlnKSxcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IGZpbHRlck1ldGFkYXRhXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmaWx0ZXJzUmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlUHJpbWVUYWJsZUZpbHRlcihmaWx0ZXI6IEZpbHRlclN0YXRlKSB7XG4gICAgICAgIHRoaXMucHJpbWVUYWJsZS5maWx0ZXJzW2ZpbHRlci5tZXRhZGF0YS5kZXNjcmlwdG9yLnByb3BlcnR5XSA9IHsuLi5maWx0ZXJ9O1xuICAgICAgICB0aGlzLnByaW1lVGFibGUuX2ZpbHRlcigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlUHJpbWVUYWJsZUdsb2JhbEZpbHRlcihzZWFyY2hRdWVyeTogc3RyaW5nIHwgbnVsbCwgY2FzZVNlbnNpdGl2ZSA9IGZhbHNlKSB7XG4gICAgICAgIC8vIG1hdGNoIG1vZGUgbmVlZHMgdG8gYmUgc2V0IGZvciBpbmxpbmUgc2VhcmNoXG4gICAgICAgIHRoaXMucHJpbWVUYWJsZS5maWx0ZXJzWydnbG9iYWwnXSA9IHsuLi57dmFsdWU6IHNlYXJjaFF1ZXJ5LCBtYXRjaE1vZGU6ICdjb250YWlucycsIGNhc2VTZW5zaXRpdmU6IGNhc2VTZW5zaXRpdmV9fTtcbiAgICAgICAgdGhpcy5wcmltZVRhYmxlLl9maWx0ZXIoKTtcbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ3Jvd1wiPlxuICAgIEBpZiAodGl0bGVUZW1wbGF0ZSgpKSB7XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0aXRsZVRlbXBsYXRlKClcIj48L25nLWNvbnRhaW5lcj5cbiAgICB9XG4gICAgQGlmIChzaG93RmlsdGVyQnV0dG9uKCkpIHtcbiAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICBpY29uPVwicGkgcGktZmlsdGVyXCJcbiAgICAgICAgICAgIHJvdW5kZWQ9XCJ0cnVlXCJcbiAgICAgICAgICAgIFtzZXZlcml0eV09XCJhY3RpdmVGaWx0ZXJzKCkubGVuZ3RoID4gMCA/ICdwcmltYXJ5JyA6ICdzZWNvbmRhcnknXCJcbiAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25GaWx0ZXJBZGQoJGV2ZW50KVwiXG4gICAgICAgICAgICBbc3R5bGVDbGFzc109XCInbXktMSBtci0yJyArICh0aXRsZVRlbXBsYXRlKCkgPyAnIG1sLTMnIDogJycpXCI+XG4gICAgICAgIDwvcC1idXR0b24+XG4gICAgfVxuICAgIEBpZiAoZW5hYmxlU2VhcmNoKCkpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImNvbC1zcGFuLTRcIiBbbmdDbGFzc109XCJ7J21sLTMnOiAhc2hvd0ZpbHRlckJ1dHRvbigpICYmIHRpdGxlVGVtcGxhdGUoKX1cIj5cbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicC1pbnB1dC1pY29uLWxlZnQgdy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPHAtaWNvbmZpZWxkPlxuICAgICAgICAgICAgICAgICAgICA8cC1pbnB1dGljb24gY2xhc3M9XCJwaSBwaS1zZWFyY2hcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cInNlYXJjaFZhbHVlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwib25TZWFyY2hDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwiZ2xvYmFsU2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBJbnB1dFRleHRcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwic2VhcmNoLWlucHV0IHctZnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J25nLWludmFsaWQnOiBzZWFyY2hXb3JkTGltaXRNYXhFcnJvcigpfVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5wbGFjZWhvbGRlcl09XCInbW5nRmlsdGVyLnNlYXJjaC5pbnB1dCcgfCB0cmFuc2xhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidtbmdGaWx0ZXIuc2VhcmNoLmlucHV0JyB8IHRyYW5zbGF0ZVwiIC8+XG4gICAgICAgICAgICAgICAgPC9wLWljb25maWVsZD5cbiAgICAgICAgICAgICAgICBAaWYgKGVuYWJsZUNhc2VTZW5zaXRpdmUoKSkge1xuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRvZ2dsZS1idXR0b24taW5wdXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwLXRvZ2dsZUJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0eWxlQ2xhc3M9XCJtbC0xIHAtMSBwLWJ1dHRvbi1zbVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwic2VhcmNoQ2FzZVNlbnNpdGl2ZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJvblNlYXJjaENhc2VTZW5zaXRpdmVDaGFuZ2UoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb25MYWJlbD1cIkFhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZMYWJlbD1cIkFhXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgIEBpZiAoc2VhcmNoV29yZExpbWl0TWF4RXJyb3IoKSkge1xuICAgICAgICAgICAgICAgIDxzbWFsbCBjbGFzcz1cInAtZXJyb3IgYmxvY2tcIj5cbiAgICAgICAgICAgICAgICAgICAge3sgJ21uZ0ZpbHRlci5zZWFyY2gubWF4V29yZHNFeGNlZWRlZE1lc3NhZ2UnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9zbWFsbD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuPC9kaXY+XG5AaWYgKGFjdGl2ZUZpbHRlcnMoKS5sZW5ndGggPiAwKSB7XG4gICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGZsZXgtd3JhcCBtdC0yXCI+XG4gICAgICAgIEBmb3IgKGZpbHRlciBvZiBhY3RpdmVGaWx0ZXJzKCk7IHRyYWNrIGZpbHRlci5tZXRhZGF0YS5kZXNjcmlwdG9yLnByb3BlcnR5KSB7XG4gICAgICAgICAgICA8bW5nLXRhYmxlLWZpbHRlci1hY3RpdmUtdGFnIFttb2RlbF09XCJtb2RlbCgpXCIgW2ZpbHRlcl09XCJmaWx0ZXJcIiAoZWRpdCk9XCJvbkZpbHRlckVkaXQoJGV2ZW50KVwiIChyZW1vdmUpPVwib25GaWx0ZXJSZW1vdmUoJGV2ZW50KVwiIC8+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbn1cbjxwLXBvcG92ZXIgI29wIHNob3dDbG9zZUljb249XCJ0cnVlXCIgKG9uSGlkZSk9XCJvbk92ZXJsYXlIaWRlKClcIiBhcHBlbmRUbz1cImJvZHlcIj5cbiAgICA8bW5nLXRhYmxlLWZpbHRlci1mb3JtXG4gICAgICAgIFttb2RlbF09XCJtb2RlbCgpXCJcbiAgICAgICAgW21ldGFkYXRhXT1cIm1ldGFkYXRhKClcIlxuICAgICAgICBbZ2VuZXJpY0Rlc2NyaXB0b3JdPVwiZ2VuZXJpY0ZpbHRlckRlc2NyaXB0b3IoKVwiXG4gICAgICAgIFtmaWx0ZXJdPVwiZmlsdGVyRWRpdCgpXCJcbiAgICAgICAgW2Rpc2FibGVkUHJvcGVydGllc109XCJhY3RpdmVGaWx0ZXJQcm9wZXJ0aWVzKClcIlxuICAgICAgICBbcHJvcGVydHlTZWFyY2hdPVwiZ2VuZXJpY0ZpbHRlckRlc2NyaXB0b3IoKT8ucHJvcGVydHlTZWFyY2hcIlxuICAgICAgICBbb3ZlcmxheV09XCJvcFwiXG4gICAgICAgIFtlbmFibGVDYXNlU2Vuc2l0aXZlXT1cImVuYWJsZUNhc2VTZW5zaXRpdmUoKVwiXG4gICAgICAgIChhcHBseSk9XCJvbkZpbHRlckZvcm1BcHBseSgkZXZlbnQpXCIgLz5cbjwvcC1wb3BvdmVyPlxuIl19","import { getI18nErrorParams, getI18nForError, toastMessage } from '@mediusinc/mng-commons/core';\nimport { getI18nForModel } from '@mediusinc/mng-commons/model';\n/**\n * Generates and displays a notification for a table-related error with localized error messages and details.\n *\n * @param {TranslateService} translate - The service used to handle localization and translations.\n * @param {MessageService} messageService - The service used to manage and display messages.\n * @param {TableDescriptorInst<any>} table - The table descriptor containing table-specific information and model data.\n * @param {Error} error - The error object providing details about the error that occurred.\n * @return {Message | null} The generated message object for the error notification or null if no notification was created.\n */\nexport function tableNotificationError(translate, messageService, table, error) {\n const params = {\n errorMessage: getI18nForError(translate, error) ?? error.message,\n ...getI18nErrorParams(error)\n };\n const tableErrorTitle = getI18nForModel(translate, table.model, 'table.error.title', { fallbackKey: 'general.error', params }) ?? undefined;\n const tableErrorMessage = getI18nForModel(translate, table.model, 'table.error.message', { fallbackKey: 'general.errorMessage', params }) ?? undefined;\n return toastMessage(tableErrorMessage ?? error.message, 'error', { messageService: messageService, title: tableErrorTitle, icon: 'pi-exclamation-triangle' });\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm90aWZpY2F0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGFibGUvc3JjL2hlbHBlcnMvbm90aWZpY2F0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBLE9BQU8sRUFBQyxrQkFBa0IsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFDOUYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBRzdEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBTSxVQUFVLHNCQUFzQixDQUFDLFNBQTJCLEVBQUUsY0FBOEIsRUFBRSxLQUErQixFQUFFLEtBQVk7SUFDN0ksTUFBTSxNQUFNLEdBQUc7UUFDWCxZQUFZLEVBQUUsZUFBZSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsT0FBTztRQUNoRSxHQUFHLGtCQUFrQixDQUFDLEtBQUssQ0FBQztLQUMvQixDQUFDO0lBQ0YsTUFBTSxlQUFlLEdBQUcsZUFBZSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLG1CQUFtQixFQUFFLEVBQUMsV0FBVyxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQztJQUMxSSxNQUFNLGlCQUFpQixHQUFHLGVBQWUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLEtBQUssRUFBRSxxQkFBcUIsRUFBRSxFQUFDLFdBQVcsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLEVBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQztJQUNySixPQUFPLFlBQVksQ0FBQyxpQkFBaUIsSUFBSSxLQUFLLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFDLGNBQWMsRUFBRSxjQUFjLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUseUJBQXlCLEVBQUMsQ0FBQyxDQUFDO0FBQ2hLLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1RyYW5zbGF0ZVNlcnZpY2V9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHtNZXNzYWdlU2VydmljZSwgVG9hc3RNZXNzYWdlT3B0aW9uc30gZnJvbSAncHJpbWVuZy9hcGknO1xuXG5pbXBvcnQge2dldEkxOG5FcnJvclBhcmFtcywgZ2V0STE4bkZvckVycm9yLCB0b2FzdE1lc3NhZ2V9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge2dldEkxOG5Gb3JNb2RlbH0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9tb2RlbCc7XG5pbXBvcnQge1RhYmxlRGVzY3JpcHRvckluc3R9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvdGFibGUvYXBpJztcblxuLyoqXG4gKiBHZW5lcmF0ZXMgYW5kIGRpc3BsYXlzIGEgbm90aWZpY2F0aW9uIGZvciBhIHRhYmxlLXJlbGF0ZWQgZXJyb3Igd2l0aCBsb2NhbGl6ZWQgZXJyb3IgbWVzc2FnZXMgYW5kIGRldGFpbHMuXG4gKlxuICogQHBhcmFtIHtUcmFuc2xhdGVTZXJ2aWNlfSB0cmFuc2xhdGUgLSBUaGUgc2VydmljZSB1c2VkIHRvIGhhbmRsZSBsb2NhbGl6YXRpb24gYW5kIHRyYW5zbGF0aW9ucy5cbiAqIEBwYXJhbSB7TWVzc2FnZVNlcnZpY2V9IG1lc3NhZ2VTZXJ2aWNlIC0gVGhlIHNlcnZpY2UgdXNlZCB0byBtYW5hZ2UgYW5kIGRpc3BsYXkgbWVzc2FnZXMuXG4gKiBAcGFyYW0ge1RhYmxlRGVzY3JpcHRvckluc3Q8YW55Pn0gdGFibGUgLSBUaGUgdGFibGUgZGVzY3JpcHRvciBjb250YWluaW5nIHRhYmxlLXNwZWNpZmljIGluZm9ybWF0aW9uIGFuZCBtb2RlbCBkYXRhLlxuICogQHBhcmFtIHtFcnJvcn0gZXJyb3IgLSBUaGUgZXJyb3Igb2JqZWN0IHByb3ZpZGluZyBkZXRhaWxzIGFib3V0IHRoZSBlcnJvciB0aGF0IG9jY3VycmVkLlxuICogQHJldHVybiB7TWVzc2FnZSB8IG51bGx9IFRoZSBnZW5lcmF0ZWQgbWVzc2FnZSBvYmplY3QgZm9yIHRoZSBlcnJvciBub3RpZmljYXRpb24gb3IgbnVsbCBpZiBubyBub3RpZmljYXRpb24gd2FzIGNyZWF0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0YWJsZU5vdGlmaWNhdGlvbkVycm9yKHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSwgbWVzc2FnZVNlcnZpY2U6IE1lc3NhZ2VTZXJ2aWNlLCB0YWJsZTogVGFibGVEZXNjcmlwdG9ySW5zdDxhbnk+LCBlcnJvcjogRXJyb3IpOiBUb2FzdE1lc3NhZ2VPcHRpb25zIHwgbnVsbCB7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgICBlcnJvck1lc3NhZ2U6IGdldEkxOG5Gb3JFcnJvcih0cmFuc2xhdGUsIGVycm9yKSA/PyBlcnJvci5tZXNzYWdlLFxuICAgICAgICAuLi5nZXRJMThuRXJyb3JQYXJhbXMoZXJyb3IpXG4gICAgfTtcbiAgICBjb25zdCB0YWJsZUVycm9yVGl0bGUgPSBnZXRJMThuRm9yTW9kZWwodHJhbnNsYXRlLCB0YWJsZS5tb2RlbCwgJ3RhYmxlLmVycm9yLnRpdGxlJywge2ZhbGxiYWNrS2V5OiAnZ2VuZXJhbC5lcnJvcicsIHBhcmFtc30pID8/IHVuZGVmaW5lZDtcbiAgICBjb25zdCB0YWJsZUVycm9yTWVzc2FnZSA9IGdldEkxOG5Gb3JNb2RlbCh0cmFuc2xhdGUsIHRhYmxlLm1vZGVsLCAndGFibGUuZXJyb3IubWVzc2FnZScsIHtmYWxsYmFja0tleTogJ2dlbmVyYWwuZXJyb3JNZXNzYWdlJywgcGFyYW1zfSkgPz8gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0b2FzdE1lc3NhZ2UodGFibGVFcnJvck1lc3NhZ2UgPz8gZXJyb3IubWVzc2FnZSwgJ2Vycm9yJywge21lc3NhZ2VTZXJ2aWNlOiBtZXNzYWdlU2VydmljZSwgdGl0bGU6IHRhYmxlRXJyb3JUaXRsZSwgaWNvbjogJ3BpLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlJ30pO1xufVxuIl19","import { Injector, Pipe, inject } from '@angular/core';\nimport { CommonsService } from '@mediusinc/mng-commons/core';\nimport * as i0 from \"@angular/core\";\nexport class LocaleDefaultRowClassPipe {\n constructor() {\n this.injector = inject(Injector);\n }\n transform(value, descriptor, item) {\n if (descriptor?.isLocalized) {\n if (item[descriptor.localizationLocaleProperty] === this.injector.get(CommonsService).getDefaultLocale()) {\n return value + ' mng-table-row-localization-default-locale';\n }\n }\n return value ?? '';\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: LocaleDefaultRowClassPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.1.7\", ngImport: i0, type: LocaleDefaultRowClassPipe, isStandalone: true, name: \"mngLocaleDefaultRowClass\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: LocaleDefaultRowClassPipe, decorators: [{\n type: Pipe,\n args: [{\n name: 'mngLocaleDefaultRowClass',\n pure: true\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxlLWRlZmF1bHQtcm93LWNsYXNzLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90YWJsZS9zcmMvcGlwZXMvbG9jYWxlLWRlZmF1bHQtcm93LWNsYXNzLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFFBQVEsRUFBRSxJQUFJLEVBQWlCLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVwRSxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sNkJBQTZCLENBQUM7O0FBTzNELE1BQU0sT0FBTyx5QkFBeUI7SUFKdEM7UUFLcUIsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztLQVVoRDtJQVJHLFNBQVMsQ0FBQyxLQUFXLEVBQUUsVUFBbUMsRUFBRSxJQUFRO1FBQ2hFLElBQUksVUFBVSxFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQzFCLElBQUssSUFBWSxDQUFDLFVBQVUsQ0FBQywwQkFBMkIsQ0FBQyxLQUFLLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLEVBQUUsQ0FBQztnQkFDakgsT0FBTyxLQUFLLEdBQUcsNENBQTRDLENBQUM7WUFDaEUsQ0FBQztRQUNMLENBQUM7UUFDRCxPQUFPLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDdkIsQ0FBQzs4R0FWUSx5QkFBeUI7NEdBQXpCLHlCQUF5Qjs7MkZBQXpCLHlCQUF5QjtrQkFKckMsSUFBSTttQkFBQztvQkFDRixJQUFJLEVBQUUsMEJBQTBCO29CQUNoQyxJQUFJLEVBQUUsSUFBSTtpQkFDYiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0b3IsIFBpcGUsIFBpcGVUcmFuc2Zvcm0sIGluamVjdH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7Q29tbW9uc1NlcnZpY2V9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge1RhYmxlRGVzY3JpcHRvckluc3R9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvdGFibGUvYXBpJztcblxuQFBpcGUoe1xuICAgIG5hbWU6ICdtbmdMb2NhbGVEZWZhdWx0Um93Q2xhc3MnLFxuICAgIHB1cmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgTG9jYWxlRGVmYXVsdFJvd0NsYXNzUGlwZTxUPiBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG4gICAgdHJhbnNmb3JtKHZhbHVlPzogYW55LCBkZXNjcmlwdG9yPzogVGFibGVEZXNjcmlwdG9ySW5zdDxUPiwgaXRlbT86IFQpOiBzdHJpbmcge1xuICAgICAgICBpZiAoZGVzY3JpcHRvcj8uaXNMb2NhbGl6ZWQpIHtcbiAgICAgICAgICAgIGlmICgoaXRlbSBhcyBhbnkpW2Rlc2NyaXB0b3IubG9jYWxpemF0aW9uTG9jYWxlUHJvcGVydHkhXSA9PT0gdGhpcy5pbmplY3Rvci5nZXQoQ29tbW9uc1NlcnZpY2UpLmdldERlZmF1bHRMb2NhbGUoKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSArICcgbW5nLXRhYmxlLXJvdy1sb2NhbGl6YXRpb24tZGVmYXVsdC1sb2NhbGUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZSA/PyAnJztcbiAgICB9XG59XG4iXX0=","import { Pipe } from '@angular/core';\nimport { FilterTypeEnum } from '@mediusinc/mng-commons/filter';\nimport * as i0 from \"@angular/core\";\nexport class TableColumnFilterClassPipe {\n transform(value, filter, isEnabled) {\n const strValue = typeof value === 'string' ? value : '';\n if (isEnabled && filter?.filterType !== undefined) {\n return `${strValue} mng-column-filter-${FilterTypeEnum[filter.filterType].toLowerCase()}`;\n }\n else {\n return strValue;\n }\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableColumnFilterClassPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }\n static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: \"14.0.0\", version: \"20.1.7\", ngImport: i0, type: TableColumnFilterClassPipe, isStandalone: true, name: \"mngTableColumnFilterClass\" }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableColumnFilterClassPipe, decorators: [{\n type: Pipe,\n args: [{\n pure: true,\n name: 'mngTableColumnFilterClass'\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29sdW1uLWZpbHRlci1jbGFzcy5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGFibGUvc3JjL3BpcGVzL3RhYmxlLWNvbHVtbi1maWx0ZXItY2xhc3MucGlwZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsSUFBSSxFQUFnQixNQUFNLGVBQWUsQ0FBQztBQUVsRCxPQUFPLEVBQW1CLGNBQWMsRUFBQyxNQUFNLCtCQUErQixDQUFDOztBQU0vRSxNQUFNLE9BQU8sMEJBQTBCO0lBQ25DLFNBQVMsQ0FBQyxLQUFjLEVBQUUsTUFBOEMsRUFBRSxTQUFrQjtRQUN4RixNQUFNLFFBQVEsR0FBRyxPQUFPLEtBQUssS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3hELElBQUksU0FBUyxJQUFJLE1BQU0sRUFBRSxVQUFVLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDaEQsT0FBTyxHQUFHLFFBQVEsc0JBQXNCLGNBQWMsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztRQUM5RixDQUFDO2FBQU0sQ0FBQztZQUNKLE9BQU8sUUFBUSxDQUFDO1FBQ3BCLENBQUM7SUFDTCxDQUFDOzhHQVJRLDBCQUEwQjs0R0FBMUIsMEJBQTBCOzsyRkFBMUIsMEJBQTBCO2tCQUp0QyxJQUFJO21CQUFDO29CQUNGLElBQUksRUFBRSxJQUFJO29CQUNWLElBQUksRUFBRSwyQkFBMkI7aUJBQ3BDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQaXBlLCBQaXBlVHJhbnNmb3JtfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtGaWx0ZXJEZXNjcmlwdG9yLCBGaWx0ZXJUeXBlRW51bX0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9maWx0ZXInO1xuXG5AUGlwZSh7XG4gICAgcHVyZTogdHJ1ZSxcbiAgICBuYW1lOiAnbW5nVGFibGVDb2x1bW5GaWx0ZXJDbGFzcydcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb2x1bW5GaWx0ZXJDbGFzc1BpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcbiAgICB0cmFuc2Zvcm0odmFsdWU6IHVua25vd24sIGZpbHRlcjogRmlsdGVyRGVzY3JpcHRvcjxhbnksIGFueT4gfCB1bmRlZmluZWQsIGlzRW5hYmxlZDogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IHN0clZhbHVlID0gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyA/IHZhbHVlIDogJyc7XG4gICAgICAgIGlmIChpc0VuYWJsZWQgJiYgZmlsdGVyPy5maWx0ZXJUeXBlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHtzdHJWYWx1ZX0gbW5nLWNvbHVtbi1maWx0ZXItJHtGaWx0ZXJUeXBlRW51bVtmaWx0ZXIuZmlsdGVyVHlwZV0udG9Mb3dlckNhc2UoKX1gO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHN0clZhbHVlO1xuICAgICAgICB9XG4gICAgfVxufVxuIl19","/**\n * generates table layout preferences key used when saving preferences to localstorage\n * @param typeName string, required\n * @param url string, required\n * @param trackProperty string, not required\n */\nexport function generateTableLayoutPrefsKey(typeName, url, trackProperty) {\n return `commonsTableLayoutPrefs~~${typeName}~~${trackProperty ?? url.split('?')[0].split('#')[0]}`;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtbGF5b3V0LXByZWZzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdGFibGUvc3JjL2hlbHBlcnMvdGFibGUtbGF5b3V0LXByZWZzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLDJCQUEyQixDQUFDLFFBQWdCLEVBQUUsR0FBVyxFQUFFLGFBQXNCO0lBQzdGLE9BQU8sNEJBQTRCLFFBQVEsS0FBSyxhQUFhLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUN2RyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBnZW5lcmF0ZXMgdGFibGUgbGF5b3V0IHByZWZlcmVuY2VzIGtleSB1c2VkIHdoZW4gc2F2aW5nIHByZWZlcmVuY2VzIHRvIGxvY2Fsc3RvcmFnZVxuICogQHBhcmFtIHR5cGVOYW1lIHN0cmluZywgcmVxdWlyZWRcbiAqIEBwYXJhbSB1cmwgc3RyaW5nLCByZXF1aXJlZFxuICogQHBhcmFtIHRyYWNrUHJvcGVydHkgc3RyaW5nLCBub3QgcmVxdWlyZWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlVGFibGVMYXlvdXRQcmVmc0tleSh0eXBlTmFtZTogc3RyaW5nLCB1cmw6IHN0cmluZywgdHJhY2tQcm9wZXJ0eT86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBjb21tb25zVGFibGVMYXlvdXRQcmVmc35+JHt0eXBlTmFtZX1+fiR7dHJhY2tQcm9wZXJ0eSA/PyB1cmwuc3BsaXQoJz8nKVswXS5zcGxpdCgnIycpWzBdfWA7XG59XG4iXX0=","import { Injectable, computed, inject, signal } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { CommonsStorageService } from '@mediusinc/mng-commons/core';\nimport { FilterDisplayTypeEnum } from '@mediusinc/mng-commons/filter';\nimport { generateTableLayoutPrefsKey } from '../helpers/table-layout-prefs';\nimport { TableMetadataService } from './table-metadata.service';\nimport * as i0 from \"@angular/core\";\nexport class TablePreferencesService {\n constructor() {\n this.#router = inject(Router);\n this.#storageService = inject(CommonsStorageService);\n this.#metadata = inject(TableMetadataService);\n this.localstorageKey = computed(() => {\n const descriptor = this.#metadata.descriptor();\n return descriptor.model.i18nBaseKey ? generateTableLayoutPrefsKey(descriptor.model.i18nBaseKey, this.#router.url, descriptor.identifier) : null;\n }, ...(ngDevMode ? [{ debugName: \"localstorageKey\" }] : []));\n this.#layoutPrefsSaveCnt = signal(0, ...(ngDevMode ? [{ debugName: \"#layoutPrefsSaveCnt\" }] : []));\n this.layoutPreferences = computed(() => {\n const lsKey = this.localstorageKey();\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const cnt = this.#layoutPrefsSaveCnt(); // needed to force updates on user changes\n const layoutPrefs = lsKey ? this.#storageService.getItem(TableMetadataService.cmpTypeName, lsKey) : undefined;\n return layoutPrefs ?? { columnWidths: {} };\n }, ...(ngDevMode ? [{ debugName: \"layoutPreferences\" }] : []));\n // columns\n this.columnsWithPrefs = computed(() => this.#computeColumnsWithLayout(), ...(ngDevMode ? [{ debugName: \"columnsWithPrefs\" }] : []));\n }\n #router;\n #storageService;\n #metadata;\n #layoutPrefsSaveCnt;\n /**\n * Method is called on column resize\n * @param element event's element\n */\n onColumnResize({ element }) {\n const fieldId = element.id;\n const width = element.offsetWidth;\n const layoutPrefs = this.layoutPreferences();\n const col = this.columnsWithPrefs().find(el => el.descriptor.property === fieldId);\n if (col)\n col.width = width;\n if (!layoutPrefs.columnWidths)\n layoutPrefs.columnWidths = {};\n layoutPrefs.columnWidths[fieldId] = width;\n this.#saveLayoutPreferences(layoutPrefs);\n }\n onColumnToggle(event) {\n const layoutPrefs = this.layoutPreferences();\n const selectedColumns = event.value.map(v => v.descriptor.property);\n layoutPrefs.columnHidden = this.columnsWithPrefs()\n .filter(c => selectedColumns.indexOf(c.descriptor.property) < 0)\n .map(c => c.descriptor.property);\n this.#saveLayoutPreferences(layoutPrefs, true);\n }\n onColumnToggleAll() {\n const layoutPrefs = this.layoutPreferences();\n const columns = [...this.columnsWithPrefs()];\n const isVisible = !this.columnsWithPrefs().some(c => c.isVisible);\n for (const col of columns) {\n if (isVisible !== col.isVisible) {\n col.isVisible = isVisible;\n }\n }\n layoutPrefs.columnHidden = columns.filter(c => !c.isVisible).map(c => c.descriptor.property);\n this.#saveLayoutPreferences(layoutPrefs, true);\n }\n onColumnReorder(event) {\n if (event.dropIndex !== undefined && event.dropIndex >= 0 && event.dragIndex !== undefined && event.dragIndex >= 0 && event.dropIndex !== event.dragIndex) {\n const eventDropIndex = event.dropIndex;\n const eventDragIndex = event.dragIndex;\n const prevVisibleColumns = this.columnsWithPrefs().filter(c => c.isVisible);\n const colAtDrop = prevVisibleColumns[eventDropIndex];\n const colAtDrag = prevVisibleColumns[eventDragIndex];\n const colAtDropIndex = this.columnsWithPrefs().findIndex(el => el.id === colAtDrop.id);\n const colAtDragIndex = this.columnsWithPrefs().findIndex(el => el.id === colAtDrag.id);\n if (colAtDropIndex > -1 && colAtDragIndex > -1) {\n let columns = [...this.columnsWithPrefs()];\n columns.splice(colAtDragIndex, 1);\n const dropIndex = columns.findIndex(el => el.id === colAtDrop.id) + (eventDropIndex > eventDragIndex ? 1 : 0);\n columns = [...columns.slice(0, dropIndex), colAtDrag, ...columns.slice(dropIndex)];\n const layoutPrefs = this.layoutPreferences();\n layoutPrefs.columnOrder = columns.map(el => el.descriptor.property);\n this.#saveLayoutPreferences(layoutPrefs);\n }\n }\n }\n /**\n * Reset column order and column visibility to default settings\n */\n clearLayoutPreferences() {\n const key = this.localstorageKey();\n if (key) {\n this.#storageService.removeItem(TableMetadataService.cmpTypeName, key);\n this.#layoutPrefsSaveCnt.update(v => v + 1);\n }\n }\n #saveLayoutPreferences(layoutPrefs, forceUpdate = false) {\n const key = this.localstorageKey();\n if (key) {\n this.#storageService.setItem(TableMetadataService.cmpTypeName, key, layoutPrefs);\n if (forceUpdate) {\n this.#layoutPrefsSaveCnt.update(v => v + 1);\n }\n }\n }\n #computeColumnsWithLayout() {\n const descriptor = this.#metadata.descriptor();\n const layoutPrefs = this.layoutPreferences();\n // initialize columns with additional properties\n const timestamp = new Date().getTime();\n const columns = descriptor.columns.map(col => ({\n id: `${col.property}-${timestamp}`,\n descriptor: col,\n filter: this.#metadata\n .filters()\n .find(f => f.descriptor.showOnColumn === col.property &&\n ((f.descriptor.displayType == null && this.#metadata.defaultFilterDisplayType === FilterDisplayTypeEnum.Column) ||\n f.descriptor.displayType === FilterDisplayTypeEnum.Column)),\n sort: descriptor.sorts.find(f => f.showOnColumn === col.property),\n disabled: !col.isToggleable,\n isVisible: layoutPrefs.columnHidden ? !layoutPrefs.columnHidden.includes(col.property) : col.isVisible,\n width: layoutPrefs.columnWidths?.[col.property]\n }));\n if (layoutPrefs.columnOrder) {\n for (let i = 0; i < layoutPrefs.columnOrder.length; i++) {\n const colName = layoutPrefs.columnOrder[i];\n const colWithPrefs = columns.find(el => el.descriptor.property === colName);\n if (colWithPrefs) {\n colWithPrefs.orderIdx = i;\n }\n }\n }\n return columns.sort((a, b) => (a.orderIdx !== undefined && b.orderIdx !== undefined ? a.orderIdx - b.orderIdx : 0));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TablePreferencesService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TablePreferencesService }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TablePreferencesService, decorators: [{\n type: Injectable\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtcHJlZmVyZW5jZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RhYmxlL3NyYy9zZXJ2aWNlcy90YWJsZS1wcmVmZXJlbmNlcy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBS3ZDLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLDZCQUE2QixDQUFDO0FBQ2xFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBR3BFLE9BQU8sRUFBQywyQkFBMkIsRUFBQyxNQUFNLCtCQUErQixDQUFDO0FBRTFFLE9BQU8sRUFBQyxvQkFBb0IsRUFBQyxNQUFNLDBCQUEwQixDQUFDOztBQUc5RCxNQUFNLE9BQU8sdUJBQXVCO0lBRHBDO1FBRWEsWUFBTyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN6QixvQkFBZSxHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBQ2hELGNBQVMsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUV6QyxvQkFBZSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDckMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMvQyxPQUFPLFVBQVUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQywyQkFBMkIsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztRQUNwSixDQUFDLDJEQUFDLENBQUM7UUFD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LENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsS0FBSyxPQUFPLENBQUMsQ0FBQztnQkFDNUUsSUFBSSxZQUFZLEVBQUUsQ0FBQztvQkFDZixZQUFZLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztnQkFDOUIsQ0FBQztZQUNMLENBQUM7UUFDTCxDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hILENBQUM7OEdBeklRLHVCQUF1QjtrSEFBdkIsdUJBQXVCOzsyRkFBdkIsdUJBQXVCO2tCQURuQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBjb21wdXRlZCwgaW5qZWN0LCBzaWduYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7TXVsdGlTZWxlY3RDaGFuZ2VFdmVudH0gZnJvbSAncHJpbWVuZy9tdWx0aXNlbGVjdCc7XG5pbXBvcnQge1RhYmxlQ29sdW1uUmVvcmRlckV2ZW50fSBmcm9tICdwcmltZW5nL3RhYmxlJztcblxuaW1wb3J0IHtDb21tb25zU3RvcmFnZVNlcnZpY2V9IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5pbXBvcnQge0ZpbHRlckRpc3BsYXlUeXBlRW51bX0gZnJvbSAnQG1lZGl1c2luYy9tbmctY29tbW9ucy9maWx0ZXInO1xuaW1wb3J0IHtUYWJsZUxheW91dFByZWZlcmVuY2VzfSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL3RhYmxlL2FwaSc7XG5cbmltcG9ydCB7Z2VuZXJhdGVUYWJsZUxheW91dFByZWZzS2V5fSBmcm9tICcuLi9oZWxwZXJzL3RhYmxlLWxheW91dC1wcmVmcyc7XG5pbXBvcnQge0NvbHVtbldpdGhQcmVmZXJlbmNlc30gZnJvbSAnLi4vbW9kZWxzL2NvbHVtbi1wcmVmZXJlbmNlcy5tb2RlbCc7XG5pbXBvcnQge1RhYmxlTWV0YWRhdGFTZXJ2aWNlfSBmcm9tICcuL3RhYmxlLW1ldGFkYXRhLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVGFibGVQcmVmZXJlbmNlc1NlcnZpY2Uge1xuICAgIHJlYWRvbmx5ICNyb3V0ZXIgPSBpbmplY3QoUm91dGVyKTtcbiAgICByZWFkb25seSAjc3RvcmFnZVNlcnZpY2UgPSBpbmplY3QoQ29tbW9uc1N0b3JhZ2VTZXJ2aWNlKTtcbiAgICByZWFkb25seSAjbWV0YWRhdGEgPSBpbmplY3QoVGFibGVNZXRhZGF0YVNlcnZpY2UpO1xuXG4gICAgcmVhZG9ubHkgbG9jYWxzdG9yYWdlS2V5ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdG9yID0gdGhpcy4jbWV0YWRhdGEuZGVzY3JpcHRvcigpO1xuICAgICAgICByZXR1cm4gZGVzY3JpcHRvci5tb2RlbC5pMThuQmFzZUtleSA/IGdlbmVyYXRlVGFibGVMYXlvdXRQcmVmc0tleShkZXNjcmlwdG9yLm1vZGVsLmkxOG5CYXNlS2V5LCB0aGlzLiNyb3V0ZXIudXJsLCBkZXNjcmlwdG9yLmlkZW50aWZpZXIpIDogbnVsbDtcbiAgICB9KTtcbiAgICByZWFkb25seSAjbGF5b3V0UHJlZnNTYXZlQ250ID0gc2lnbmFsKDApO1xuICAgIHJlYWRvbmx5IGxheW91dFByZWZlcmVuY2VzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBsc0tleSA9IHRoaXMubG9jYWxzdG9yYWdlS2V5KCk7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgY29uc3QgY250ID0gdGhpcy4jbGF5b3V0UHJlZnNTYXZlQ250KCk7IC8vIG5lZWRlZCB0byBmb3JjZSB1cGRhdGVzIG9uIHVzZXIgY2hhbmdlc1xuICAgICAgICBjb25zdCBsYXlvdXRQcmVmcyA9IGxzS2V5ID8gdGhpcy4jc3RvcmFnZVNlcnZpY2UuZ2V0SXRlbTxUYWJsZUxheW91dFByZWZlcmVuY2VzPihUYWJsZU1ldGFkYXRhU2VydmljZS5jbXBUeXBlTmFtZSwgbHNLZXkpIDogdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gbGF5b3V0UHJlZnMgPz8ge2NvbHVtbldpZHRoczoge319O1xuICAgIH0pO1xuXG4gICAgLy8gY29sdW1uc1xuICAgIGNvbHVtbnNXaXRoUHJlZnMgPSBjb21wdXRlZDxDb2x1bW5XaXRoUHJlZmVyZW5jZXNbXT4oKCkgPT4gdGhpcy4jY29tcHV0ZUNvbHVtbnNXaXRoTGF5b3V0KCkpO1xuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIGlzIGNhbGxlZCBvbiBjb2x1bW4gcmVzaXplXG4gICAgICogQHBhcmFtIGVsZW1lbnQgZXZlbnQncyBlbGVtZW50XG4gICAgICovXG4gICAgcHVibGljIG9uQ29sdW1uUmVzaXplKHtlbGVtZW50fTogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGZpZWxkSWQ6IHN0cmluZyA9IGVsZW1lbnQuaWQ7XG4gICAgICAgIGNvbnN0IHdpZHRoOiBudW1iZXIgPSBlbGVtZW50Lm9mZnNldFdpZHRoO1xuXG4gICAgICAgIGNvbnN0IGxheW91dFByZWZzID0gdGhpcy5sYXlvdXRQcmVmZXJlbmNlcygpO1xuICAgICAgICBjb25zdCBjb2wgPSB0aGlzLmNvbHVtbnNXaXRoUHJlZnMoKS5maW5kKGVsID0+IGVsLmRlc2NyaXB0b3IucHJvcGVydHkgPT09IGZpZWxkSWQpO1xuICAgICAgICBpZiAoY29sKSBjb2wud2lkdGggPSB3aWR0aDtcbiAgICAgICAgaWYgKCFsYXlvdXRQcmVmcy5jb2x1bW5XaWR0aHMpIGxheW91dFByZWZzLmNvbHVtbldpZHRocyA9IHt9O1xuXG4gICAgICAgIGxheW91dFByZWZzLmNvbHVtbldpZHRoc1tmaWVsZElkXSA9IHdpZHRoO1xuICAgICAgICB0aGlzLiNzYXZlTGF5b3V0UHJlZmVyZW5jZXMobGF5b3V0UHJlZnMpO1xuICAgIH1cblxuICAgIG9uQ29sdW1uVG9nZ2xlKGV2ZW50OiBNdWx0aVNlbGVjdENoYW5nZUV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGxheW91dFByZWZzID0gdGhpcy5sYXlvdXRQcmVmZXJlbmNlcygpO1xuICAgICAgICBjb25zdCBzZWxlY3RlZENvbHVtbnMgPSAoZXZlbnQudmFsdWUgYXMgQ29sdW1uV2l0aFByZWZlcmVuY2VzW10pLm1hcCh2ID0+IHYuZGVzY3JpcHRvci5wcm9wZXJ0eSk7XG4gICAgICAgIGxheW91dFByZWZzLmNvbHVtbkhpZGRlbiA9IHRoaXMuY29sdW1uc1dpdGhQcmVmcygpXG4gICAgICAgICAgICAuZmlsdGVyKGMgPT4gc2VsZWN0ZWRDb2x1bW5zLmluZGV4T2YoYy5kZXNjcmlwdG9yLnByb3BlcnR5KSA8IDApXG4gICAgICAgICAgICAubWFwKGMgPT4gYy5kZXNjcmlwdG9yLnByb3BlcnR5KTtcbiAgICAgICAgdGhpcy4jc2F2ZUxheW91dFByZWZlcmVuY2VzKGxheW91dFByZWZzLCB0cnVlKTtcbiAgICB9XG5cbiAgICBvbkNvbHVtblRvZ2dsZUFsbCgpIHtcbiAgICAgICAgY29uc3QgbGF5b3V0UHJlZnMgPSB0aGlzLmxheW91dFByZWZlcmVuY2VzKCk7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSBbLi4udGhpcy5jb2x1bW5zV2l0aFByZWZzKCldO1xuICAgICAgICBjb25zdCBpc1Zpc2libGUgPSAhdGhpcy5jb2x1bW5zV2l0aFByZWZzKCkuc29tZShjID0+IGMuaXNWaXNpYmxlKTtcbiAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgY29sdW1ucykge1xuICAgICAgICAgICAgaWYgKGlzVmlzaWJsZSAhPT0gY29sLmlzVmlzaWJsZSkge1xuICAgICAgICAgICAgICAgIGNvbC5pc1Zpc2libGUgPSBpc1Zpc2libGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbGF5b3V0UHJlZnMuY29sdW1uSGlkZGVuID0gY29sdW1ucy5maWx0ZXIoYyA9PiAhYy5pc1Zpc2libGUpLm1hcChjID0+IGMuZGVzY3JpcHRvci5wcm9wZXJ0eSk7XG4gICAgICAgIHRoaXMuI3NhdmVMYXlvdXRQcmVmZXJlbmNlcyhsYXlvdXRQcmVmcywgdHJ1ZSk7XG4gICAgfVxuXG4gICAgb25Db2x1bW5SZW9yZGVyKGV2ZW50OiBUYWJsZUNvbHVtblJlb3JkZXJFdmVudCkge1xuICAgICAgICBpZiAoZXZlbnQuZHJvcEluZGV4ICE9PSB1bmRlZmluZWQgJiYgZXZlbnQuZHJvcEluZGV4ID49IDAgJiYgZXZlbnQuZHJhZ0luZGV4ICE9PSB1bmRlZmluZWQgJiYgZXZlbnQuZHJhZ0luZGV4ID49IDAgJiYgZXZlbnQuZHJvcEluZGV4ICE9PSBldmVudC5kcmFnSW5kZXgpIHtcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50RHJvcEluZGV4ID0gZXZlbnQuZHJvcEluZGV4O1xuICAgICAgICAgICAgY29uc3QgZXZlbnREcmFnSW5kZXggPSBldmVudC5kcmFnSW5kZXg7XG4gICAgICAgICAgICBjb25zdCBwcmV2VmlzaWJsZUNvbHVtbnMgPSB0aGlzLmNvbHVtbnNXaXRoUHJlZnMoKS5maWx0ZXIoYyA9PiBjLmlzVmlzaWJsZSk7XG4gICAgICAgICAgICBjb25zdCBjb2xBdERyb3AgPSBwcmV2VmlzaWJsZUNvbHVtbnNbZXZlbnREcm9wSW5kZXhdO1xuICAgICAgICAgICAgY29uc3QgY29sQXREcmFnID0gcHJldlZpc2libGVDb2x1bW5zW2V2ZW50RHJhZ0luZGV4XTtcbiAgICAgICAgICAgIGNvbnN0IGNvbEF0RHJvcEluZGV4ID0gdGhpcy5jb2x1bW5zV2l0aFByZWZzKCkuZmluZEluZGV4KGVsID0+IGVsLmlkID09PSBjb2xBdERyb3AuaWQpO1xuICAgICAgICAgICAgY29uc3QgY29sQXREcmFnSW5kZXggPSB0aGlzLmNvbHVtbnNXaXRoUHJlZnMoKS5maW5kSW5kZXgoZWwgPT4gZWwuaWQgPT09IGNvbEF0RHJhZy5pZCk7XG5cbiAgICAgICAgICAgIGlmIChjb2xBdERyb3BJbmRleCA+IC0xICYmIGNvbEF0RHJhZ0luZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBsZXQgY29sdW1ucyA9IFsuLi50aGlzLmNvbHVtbnNXaXRoUHJlZnMoKV07XG4gICAgICAgICAgICAgICAgY29sdW1ucy5zcGxpY2UoY29sQXREcmFnSW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGRyb3BJbmRleCA9IGNvbHVtbnMuZmluZEluZGV4KGVsID0+IGVsLmlkID09PSBjb2xBdERyb3AuaWQpICsgKGV2ZW50RHJvcEluZGV4ID4gZXZlbnREcmFnSW5kZXggPyAxIDogMCk7XG4gICAgICAgICAgICAgICAgY29sdW1ucyA9IFsuLi5jb2x1bW5zLnNsaWNlKDAsIGRyb3BJbmRleCksIGNvbEF0RHJhZywgLi4uY29sdW1ucy5zbGljZShkcm9wSW5kZXgpXTtcbiAgICAgICAgICAgICAgICBjb25zdCBsYXlvdXRQcmVmcyA9IHRoaXMubGF5b3V0UHJlZmVyZW5jZXMoKTtcbiAgICAgICAgICAgICAgICBsYXlvdXRQcmVmcy5jb2x1bW5PcmRlciA9IGNvbHVtbnMubWFwKGVsID0+IGVsLmRlc2NyaXB0b3IucHJvcGVydHkpO1xuICAgICAgICAgICAgICAgIHRoaXMuI3NhdmVMYXlvdXRQcmVmZXJlbmNlcyhsYXlvdXRQcmVmcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXNldCBjb2x1bW4gb3JkZXIgYW5kIGNvbHVtbiB2aXNpYmlsaXR5IHRvIGRlZmF1bHQgc2V0dGluZ3NcbiAgICAgKi9cbiAgICBjbGVhckxheW91dFByZWZlcmVuY2VzKCkge1xuICAgICAgICBjb25zdCBrZXkgPSB0aGlzLmxvY2Fsc3RvcmFnZUtleSgpO1xuICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICB0aGlzLiNzdG9yYWdlU2VydmljZS5yZW1vdmVJdGVtKFRhYmxlTWV0YWRhdGFTZXJ2aWNlLmNtcFR5cGVOYW1lLCBrZXkpO1xuICAgICAgICAgICAgdGhpcy4jbGF5b3V0UHJlZnNTYXZlQ250LnVwZGF0ZSh2ID0+IHYgKyAxKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgICNzYXZlTGF5b3V0UHJlZmVyZW5jZXMobGF5b3V0UHJlZnM6IFRhYmxlTGF5b3V0UHJlZmVyZW5jZXMsIGZvcmNlVXBkYXRlID0gZmFsc2UpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5sb2NhbHN0b3JhZ2VLZXkoKTtcbiAgICAgICAgaWYgKGtleSkge1xuICAgICAgICAgICAgdGhpcy4jc3RvcmFnZVNlcnZpY2Uuc2V0SXRlbShUYWJsZU1ldGFkYXRhU2VydmljZS5jbXBUeXBlTmFtZSwga2V5LCBsYXlvdXRQcmVmcyk7XG4gICAgICAgICAgICBpZiAoZm9yY2VVcGRhdGUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLiNsYXlvdXRQcmVmc1NhdmVDbnQudXBkYXRlKHYgPT4gdiArIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgI2NvbXB1dGVDb2x1bW5zV2l0aExheW91dCgpIHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRvciA9IHRoaXMuI21ldGFkYXRhLmRlc2NyaXB0b3IoKTtcbiAgICAgICAgY29uc3QgbGF5b3V0UHJlZnMgPSB0aGlzLmxheW91dFByZWZlcmVuY2VzKCk7XG5cbiAgICAgICAgLy8gaW5pdGlhbGl6ZSBjb2x1bW5zIHdpdGggYWRkaXRpb25hbCBwcm9wZXJ0aWVzXG4gICAgICAgIGNvbnN0IHRpbWVzdGFtcCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuICAgICAgICBjb25zdCBjb2x1bW5zOiBDb2x1bW5XaXRoUHJlZmVyZW5jZXNbXSA9IGRlc2NyaXB0b3IuY29sdW1ucy5tYXAoY29sID0+ICh7XG4gICAgICAgICAgICBpZDogYCR7Y29sLnByb3BlcnR5fS0ke3RpbWVzdGFtcH1gLFxuICAgICAgICAgICAgZGVzY3JpcHRvcjogY29sLFxuICAgICAgICAgICAgZmlsdGVyOiB0aGlzLiNtZXRhZGF0YVxuICAgICAgICAgICAgICAgIC5maWx0ZXJzKClcbiAgICAgICAgICAgICAgICAuZmluZChcbiAgICAgICAgICAgICAgICAgICAgZiA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgZi5kZXNjcmlwdG9yLnNob3dPbkNvbHVtbiA9PT0gY29sLnByb3BlcnR5ICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAoKGYuZGVzY3JpcHRvci5kaXNwbGF5VHlwZSA9PSBudWxsICYmIHRoaXMuI21ldGFkYXRhLmRlZmF1bHRGaWx0ZXJEaXNwbGF5VHlwZSA9PT0gRmlsdGVyRGlzcGxheVR5cGVFbnVtLkNvbHVtbikgfHxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmLmRlc2NyaXB0b3IuZGlzcGxheVR5cGUgPT09IEZpbHRlckRpc3BsYXlUeXBlRW51bS5Db2x1bW4pXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHNvcnQ6IGRlc2NyaXB0b3Iuc29ydHMuZmluZChmID0+IGYuc2hvd09uQ29sdW1uID09PSBjb2wucHJvcGVydHkpLFxuICAgICAgICAgICAgZGlzYWJsZWQ6ICFjb2wuaXNUb2dnbGVhYmxlLFxuICAgICAgICAgICAgaXNWaXNpYmxlOiBsYXlvdXRQcmVmcy5jb2x1bW5IaWRkZW4gPyAhbGF5b3V0UHJlZnMuY29sdW1uSGlkZGVuLmluY2x1ZGVzKGNvbC5wcm9wZXJ0eSkgOiBjb2wuaXNWaXNpYmxlLFxuICAgICAgICAgICAgd2lkdGg6IGxheW91dFByZWZzLmNvbHVtbldpZHRocz8uW2NvbC5wcm9wZXJ0eV1cbiAgICAgICAgfSkpO1xuXG4gICAgICAgIGlmIChsYXlvdXRQcmVmcy5jb2x1bW5PcmRlcikge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsYXlvdXRQcmVmcy5jb2x1bW5PcmRlci5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbE5hbWUgPSBsYXlvdXRQcmVmcy5jb2x1bW5PcmRlcltpXTtcbiAgICAgICAgICAgICAgICBjb25zdCBjb2xXaXRoUHJlZnMgPSBjb2x1bW5zLmZpbmQoZWwgPT4gZWwuZGVzY3JpcHRvci5wcm9wZXJ0eSA9PT0gY29sTmFtZSk7XG4gICAgICAgICAgICAgICAgaWYgKGNvbFdpdGhQcmVmcykge1xuICAgICAgICAgICAgICAgICAgICBjb2xXaXRoUHJlZnMub3JkZXJJZHggPSBpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb2x1bW5zLnNvcnQoKGEsIGIpID0+IChhLm9yZGVySWR4ICE9PSB1bmRlZmluZWQgJiYgYi5vcmRlcklkeCAhPT0gdW5kZWZpbmVkID8gYS5vcmRlcklkeCAtIGIub3JkZXJJZHggOiAwKSk7XG4gICAgfVxufVxuIl19","import { NgClass, NgStyle, NgTemplateOutlet } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, ViewEncapsulation, afterNextRender, booleanAttribute, computed, contentChildren, inject, input, output, signal, viewChild, viewChildren } from '@angular/core';\nimport { outputFromObservable, takeUntilDestroyed, toObservable } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { ActivatedRoute, NavigationCancel, NavigationEnd, NavigationError, NavigationStart, Router } from '@angular/router';\nimport { TranslatePipe, TranslateService } from '@ngx-translate/core';\nimport { MessageService } from 'primeng/api';\nimport { ButtonDirective } from 'primeng/button';\nimport { Skeleton } from 'primeng/skeleton';\nimport { Table, TableModule } from 'primeng/table';\nimport { NEVER, Subject, filter, of, switchMap } from 'rxjs';\nimport { ClassMapPipe, ComponentDirective, I18nPropertyPipe, LoggerService, TemplateDirective, booleanOrUndefinedAttribute, dataListParamsToUrlQuery, effectWithDeps, findTemplateByName, fromSubscribeError, fromTableLoadToDataListParams, fromUrlQueryToDataListParams, getErrorLogLevel, mergeDataListParamsWithDefaults } from '@mediusinc/mng-commons/core';\nimport { FilterDisplayTypeEnum } from '@mediusinc/mng-commons/filter';\nimport { TablePaginationModeEnum, TableSizeEnum } from '@mediusinc/mng-commons/table/api';\nimport { tableNotificationError } from '../../helpers/notification';\nimport { LocaleDefaultRowClassPipe } from '../../pipes/locale-default-row-class.pipe';\nimport { TableColumnFilterClassPipe } from '../../pipes/table-column-filter-class.pipe';\nimport { TableDataService } from '../../services/table-data.service';\nimport { TableMetadataService } from '../../services/table-metadata.service';\nimport { TablePreferencesService } from '../../services/table-preferences.service';\nimport { TableColumnValueComponent } from '../column-value/column-value.component';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"primeng/table\";\nexport class TableComponent {\n // subscriptions and refs\n #previousDataProvider;\n #dataProviderEagerFirstLoad;\n #dataProviderReloadSubscription;\n #routeQueryParamsSubscription;\n #routerEventsSubscription;\n #afterNextRenderRef;\n constructor() {\n this.filterKeyPrepend = 'f_';\n this.logger = inject(LoggerService).create(TableMetadataService.cmpTypeName);\n this.router = inject(Router);\n this.route = inject(ActivatedRoute);\n this.translate = inject(TranslateService);\n this.messageService = inject(MessageService);\n this.metadata = inject(TableMetadataService);\n this.prefs = inject(TablePreferencesService);\n this.data = inject((TableDataService));\n // descriptor\n this.descriptorInput = input.required(...(ngDevMode ? [{ debugName: \"descriptorInput\", alias: 'descriptor' }] : [{ alias: 'descriptor' }]));\n // data source inputs\n this.items = input(...(ngDevMode ? [undefined, { debugName: \"items\" }] : []));\n this.result = input(...(ngDevMode ? [undefined, { debugName: \"result\" }] : []));\n this.loadingInput = input(undefined, ...(ngDevMode ? [{ debugName: \"loadingInput\", alias: 'loading', transform: booleanOrUndefinedAttribute }] : [{ alias: 'loading', transform: booleanOrUndefinedAttribute }]));\n this.dataProvider = input(...(ngDevMode ? [undefined, { debugName: \"dataProvider\" }] : []));\n // extra features input\n this.useQueryParams = input(false, ...(ngDevMode ? [{ debugName: \"useQueryParams\", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));\n this.cellClickEnabled = input(true, ...(ngDevMode ? [{ debugName: \"cellClickEnabled\", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));\n this.selectionMode = input('multiple', ...(ngDevMode ? [{ debugName: \"selectionMode\" }] : []));\n this.selectionEnabled = input(false, ...(ngDevMode ? [{ debugName: \"selectionEnabled\", transform: booleanAttribute }] : [{ transform: booleanAttribute }]));\n this.rowReorderEnabledInput = input(true, ...(ngDevMode ? [{ debugName: \"rowReorderEnabledInput\", alias: 'rowReorderEnabled', transform: booleanAttribute }] : [{ alias: 'rowReorderEnabled', transform: booleanAttribute }]));\n this.rowReorderEnabled = computed(() => this.rowReorderEnabledInput() && this.metadata.descriptor().rowReorderable, ...(ngDevMode ? [{ debugName: \"rowReorderEnabled\" }] : []));\n this.expandedRowKeys = computed(() => {\n const descriptor = this.metadata.descriptor();\n if (typeof descriptor.isRowExpanded === 'string') {\n return this.data.data()?.reduce((acc, item) => {\n acc[item[descriptor.trackProperty]] = !!item[descriptor.isRowExpanded];\n return acc;\n }, {});\n }\n else if (typeof descriptor.isRowExpanded === 'function') {\n return this.data.data()?.reduce((acc, item) => {\n acc[item[descriptor.trackProperty]] = descriptor.isRowExpanded(item);\n return acc;\n }, {});\n }\n return {};\n }, ...(ngDevMode ? [{ debugName: \"expandedRowKeys\" }] : []));\n // styling\n this.columnLastMinWidth = input(...(ngDevMode ? [undefined, { debugName: \"columnLastMinWidth\" }] : []));\n this.columnsColspan = computed(() => this.visibleColumns().length + (this.hasLastColumn() ? 1 : 0) + (this.selectionEnabled() ? 1 : 0) + (this.rowReorderEnabled() ? 1 : 0), ...(ngDevMode ? [{ debugName: \"columnsColspan\" }] : []));\n this.hasTitleDisplay = computed(() => this.captionTemplate() || this.captionComponent() || this.metadata.descriptor().title, ...(ngDevMode ? [{ debugName: \"hasTitleDisplay\" }] : []));\n this.isCaptionVisible = computed(() => this.hasTitleDisplay() || this.overlayWithTagFilters().length > 0 || this.metadata.descriptor().search, ...(ngDevMode ? [{ debugName: \"isCaptionVisible\" }] : []));\n // component inputs\n this.captionComponent = input(...(ngDevMode ? [undefined, { debugName: \"captionComponent\" }] : []));\n this.columnCustomLastComponent = input(...(ngDevMode ? [undefined, { debugName: \"columnCustomLastComponent\" }] : []));\n this.globalFilterFieldsInput = input(undefined, ...(ngDevMode ? [{ debugName: \"globalFilterFieldsInput\", alias: 'globalFilterFields' }] : [{ alias: 'globalFilterFields' }]));\n // cell click\n this.cellClickSubject = new Subject();\n this.isCellClickObserved = signal(this.cellClickSubject.observed, ...(ngDevMode ? [{ debugName: \"isCellClickObserved\" }] : []));\n this.isCellClickEnabled = computed(() => this.cellClickEnabled() && this.isCellClickObserved(), ...(ngDevMode ? [{ debugName: \"isCellClickEnabled\" }] : []));\n // event outputs\n this.tableLoad = output();\n this.cellClick = outputFromObservable(this.cellClickSubject);\n this.selectionChange = output();\n this.captionComponentInstance = output();\n this.columnCustomLastComponentInstance = output();\n this.rowReorder = output();\n // content and view queries\n this.templates = contentChildren(TemplateDirective, ...(ngDevMode ? [{ debugName: \"templates\" }] : []));\n this.components = viewChildren((ComponentDirective), ...(ngDevMode ? [{ debugName: \"components\" }] : []));\n this.primeTable = viewChild(Table, ...(ngDevMode ? [{ debugName: \"primeTable\" }] : []));\n // templates\n this.captionTemplate = computed(() => findTemplateByName([...this.templates()], 'caption'), ...(ngDevMode ? [{ debugName: \"captionTemplate\" }] : []));\n this.columnCustomLastTemplate = computed(() => findTemplateByName([...this.templates()], 'columnCustomLast'), ...(ngDevMode ? [{ debugName: \"columnCustomLastTemplate\" }] : []));\n this.footerTemplate = computed(() => findTemplateByName([...this.templates()], 'footer'), ...(ngDevMode ? [{ debugName: \"footerTemplate\" }] : []));\n this.rowExpandTemplate = computed(() => findTemplateByName([...this.templates()], 'rowExpandContent'), ...(ngDevMode ? [{ debugName: \"rowExpandTemplate\" }] : []));\n // data provider and items\n this.isLazy = computed(() => this.dataProvider()?.isLazy === true, ...(ngDevMode ? [{ debugName: \"isLazy\" }] : []));\n this.isPagination = computed(() => this.data.paginationMode() === TablePaginationModeEnum.Pagination, ...(ngDevMode ? [{ debugName: \"isPagination\" }] : []));\n this.useQueryParamsInitialized = signal(false, ...(ngDevMode ? [{ debugName: \"useQueryParamsInitialized\" }] : []));\n // visual\n this.className = computed(() => {\n let className = this.metadata.descriptor().className ?? '';\n switch (this.metadata.descriptor().size) {\n case TableSizeEnum.Small:\n className += ' p-datatable-sm';\n break;\n case TableSizeEnum.Large:\n className += ' p-datatable-lg';\n break;\n }\n if (this.metadata.descriptor().hasGridlines) {\n className += ' p-datatable-gridlines';\n }\n return className;\n }, ...(ngDevMode ? [{ debugName: \"className\" }] : []));\n // columns\n this.visibleColumns = computed(() => this.prefs.columnsWithPrefs().filter(col => col.isVisible), ...(ngDevMode ? [{ debugName: \"visibleColumns\" }] : []));\n this.areColumnsReorderable = computed(() => this.prefs.columnsWithPrefs().some(col => col.descriptor.isReorderable), ...(ngDevMode ? [{ debugName: \"areColumnsReorderable\" }] : []));\n this.areColumnsToggleable = computed(() => this.prefs.columnsWithPrefs().some(col => col.descriptor.isToggleable), ...(ngDevMode ? [{ debugName: \"areColumnsToggleable\" }] : []));\n // filter, sort\n this.hasColumnFilters = computed(() => (this.metadata.defaultFilterDisplayType === FilterDisplayTypeEnum.OverlayWithTag &&\n this.metadata.filterDescriptors().some(d => d.displayType === FilterDisplayTypeEnum.Column)) ||\n (this.metadata.defaultFilterDisplayType === FilterDisplayTypeEnum.Column && this.metadata.filterDescriptors().some(d => d.displayType == null)), ...(ngDevMode ? [{ debugName: \"hasColumnFilters\" }] : []));\n this.overlayWithTagFilters = computed(() => {\n // statically defined filters AND generic filters\n const filters = this.metadata\n .filters()\n .filter(d => (d.descriptor.displayType == null && this.metadata.defaultFilterDisplayType === FilterDisplayTypeEnum.OverlayWithTag) ||\n d.descriptor.displayType === FilterDisplayTypeEnum.OverlayWithTag);\n return filters.concat(this.metadata.genericFilters());\n }, ...(ngDevMode ? [{ debugName: \"overlayWithTagFilters\" }] : []));\n this.hasCustomLastColumn = computed(() => this.columnCustomLastComponent() || this.columnCustomLastTemplate(), ...(ngDevMode ? [{ debugName: \"hasCustomLastColumn\" }] : []));\n this.hasLastColumn = computed(() => this.hasCustomLastColumn() || this.areColumnsToggleable() || this.areColumnsReorderable(), ...(ngDevMode ? [{ debugName: \"hasLastColumn\" }] : []));\n // other\n this.navigationOutOfTableInProgress = false;\n this.navigationInTableInProgress = false;\n this.#dataProviderEagerFirstLoad = effectWithDeps([this.dataProvider], ([dataProvider]) => {\n if (dataProvider?.isLazy === false) {\n this.loadTableWithDataProvider(this.metadata.defaultParams());\n }\n else if (this.#previousDataProvider && dataProvider) {\n this.reload();\n }\n this.#previousDataProvider = dataProvider;\n });\n this.#dataProviderReloadSubscription = toObservable(this.dataProvider)\n .pipe(switchMap(dp => dp?.tableReload$ ?? of({})), takeUntilDestroyed())\n .subscribe({\n next: e => {\n this.reload(e);\n }\n });\n this.#routeQueryParamsSubscription = toObservable(this.useQueryParams)\n .pipe(switchMap(useQp => (useQp ? this.route.queryParams : NEVER)), takeUntilDestroyed())\n .subscribe(qp => {\n this.loadTableFromRouteUpdate(qp);\n });\n this.#routerEventsSubscription = toObservable(this.useQueryParams)\n .pipe(switchMap(useQp => (useQp ? this.router.events : NEVER)), filter(e => (e instanceof NavigationStart && e.url.split('?')[0].split('#')[0] !== this.router.url.split('?')[0].split('#')[0]) ||\n e instanceof NavigationEnd ||\n e instanceof NavigationCancel ||\n e instanceof NavigationError), takeUntilDestroyed())\n .subscribe(e => {\n this.navigationOutOfTableInProgress = e instanceof NavigationStart;\n });\n this.#afterNextRenderRef = afterNextRender(() => {\n this.isCellClickObserved.set(this.cellClickSubject.observed);\n });\n this.metadata.setSignalSources(this.descriptorInput, this.globalFilterFieldsInput);\n this.data.setDataSources(this.items, this.result, this.dataProvider, this.loadingInput);\n }\n reload(emitEvent) {\n const params = emitEvent?.params ? emitEvent?.params : emitEvent?.resetParams ? undefined : this.lastParamsWithDefaults;\n const reloadParams = mergeDataListParamsWithDefaults(params ?? {}, this.metadata.defaultParams());\n this.loadTableWithDataProvider(reloadParams, emitEvent?.emitEvent ?? false);\n }\n onTableLazyLoad(event) {\n this.lastLazyLoadEvent = event;\n const params = fromTableLoadToDataListParams(event);\n if (this.useQueryParams()) {\n if (!this.navigationOutOfTableInProgress && !this.navigationInTableInProgress) {\n // this check is necessary: from some reason, primeNG commits one last lazy load event whenever any angular router navigation occurs\n this.navigationInTableInProgress = true;\n const newParams = dataListParamsToUrlQuery(params, this.metadata.defaultParams(), { prependFilterName: this.filterKeyPrepend, skipPresetDefaultsLimit: true });\n const newParamsWithParamsToRemove = { ...newParams };\n const currentQp = this.route.snapshot.queryParams;\n if (currentQp) {\n Object.keys(currentQp)\n .filter(k => (k.startsWith(this.filterKeyPrepend) || ['offset', 'limit', 'sort', 'q'].indexOf(k) >= 0) && newParams[k] === undefined)\n .forEach(k => (newParamsWithParamsToRemove[k] = null));\n }\n this.router\n .navigate([], {\n relativeTo: this.route,\n replaceUrl: true,\n queryParams: newParamsWithParamsToRemove,\n queryParamsHandling: 'merge'\n })\n .then(() => {\n this.navigationInTableInProgress = false;\n });\n }\n }\n else {\n const paramsWithDefaults = mergeDataListParamsWithDefaults(params, this.metadata.defaultParams());\n this.data.setParams(paramsWithDefaults);\n this.loadTableWithDataProvider(paramsWithDefaults);\n }\n }\n onTableFilter(event) {\n if (this.useQueryParams()) {\n return;\n }\n const params = fromTableLoadToDataListParams({ filters: event.filters });\n const paramsWithDefaults = mergeDataListParamsWithDefaults(params, this.metadata.defaultParams());\n // if table doesn't use lazy loading, filter params need to be set here\n // because the onTableLazyLoad event is not emitted\n if (!this.isLazy()) {\n this.data.setParams(paramsWithDefaults);\n }\n }\n onCellClick(event, col, item, idx) {\n if (!this.isCellClickEnabled()) {\n return;\n }\n const tableEvent = {\n column: col,\n rowItem: item,\n rowIndex: idx,\n event: event\n };\n this.cellClickSubject.next(tableEvent);\n }\n onSelectionChange(event) {\n this.data.selectedItems.set(event);\n this.selectionChange.emit(event);\n }\n onRowReorder(event) {\n this.rowReorder.emit(event);\n }\n loadTableWithDataProvider(paramsWithDefaults, emitEvent = true) {\n const isFetched = this.data.fetchWithDataProvider(paramsWithDefaults, error => {\n tableNotificationError(this.translate, this.messageService, this.metadata.descriptor(), error);\n const commonsError = fromSubscribeError(error, 'TableComponentError', {\n params: paramsWithDefaults\n });\n this.logger.log(commonsError, getErrorLogLevel(commonsError));\n });\n if (isFetched) {\n this.lastParamsWithDefaults = paramsWithDefaults;\n if (emitEvent) {\n const tableEvent = {\n originalEvent: this.lastLazyLoadEvent,\n params: paramsWithDefaults\n };\n this.tableLoad.emit(tableEvent);\n }\n }\n }\n loadTableFromRouteUpdate(urlParams) {\n const paramsWithDefaults = mergeDataListParamsWithDefaults(fromUrlQueryToDataListParams(urlParams, {\n prependFilterName: this.filterKeyPrepend,\n searchAsGlobal: true\n }), this.metadata.defaultParams());\n this.data.setParams(paramsWithDefaults, true);\n this.loadTableWithDataProvider(paramsWithDefaults);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.1.7\", ngImport: i0, type: TableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.1.7\", type: TableComponent, isStandalone: true, selector: \"mng-table\", inputs: { descriptorInput: { classPropertyName: \"descriptorInput\", publicName: \"descriptor\", isSignal: true, isRequired: true, transformFunction: null }, items: { classPropertyName: \"items\", publicName: \"items\", isSignal: true, isRequired: false, transformFunction: null }, result: { classPropertyName: \"result\", publicName: \"result\", isSignal: true, isRequired: false, transformFunction: null }, loadingInput: { classPropertyName: \"loadingInput\", publicName: \"loading\", isSignal: true, isRequired: false, transformFunction: null }, dataProvider: { classPropertyName: \"dataProvider\", publicName: \"dataProvider\", isSignal: true, isRequired: false, transformFunction: null }, useQueryParams: { classPropertyName: \"useQueryParams\", publicName: \"useQueryParams\", isSignal: true, isRequired: false, transformFunction: null }, cellClickEnabled: { classPropertyName: \"cellClickEnabled\", publicName: \"cellClickEnabled\", isSignal: true, isRequired: false, transformFunction: null }, selectionMode: { classPropertyName: \"selectionMode\", publicName: \"selectionMode\", isSignal: true, isRequired: false, transformFunction: null }, selectionEnabled: { classPropertyName: \"selectionEnabled\", publicName: \"selectionEnabled\", isSignal: true, isRequired: false, transformFunction: null }, rowReorderEnabledInput: { classPropertyName: \"rowReorderEnabledInput\", publicName: \"rowReorderEnabled\", isSignal: true, isRequired: false, transformFunction: null }, columnLastMinWidth: { classPropertyName: \"columnLastMinWidth\", publicName: \"columnLastMinWidth\", isSignal: true, isRequired: false, transformFunction: null }, captionComponent: { classPropertyName: \"captionComponent\", publicName: \"captionComponent\", isSignal: true, isRequired: false, transformFunction: null }, columnCustomLastComponent: { classPropertyName: \"columnCustomLastComponent\", publicName: \"columnCustomLastComponent\", isSignal: true, isRequired: false, transformFunction: null }, globalFilterFieldsInput: { classPropertyName: \"globalFilterFieldsInput\", publicName: \"globalFilterFields\", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { tableLoad: \"tableLoad\", cellClick: \"cellClick\", selectionChange: \"selectionChange\", captionComponentInstance: \"captionComponentInstance\", columnCustomLastComponentInstance: \"columnCustomLastComponentInstance\", rowReorder: \"rowReorder\" }, host: { properties: { \"class.mng-table-no-header\": \"!isCaptionVisible()\" } }, providers: [TableMetadataService, TableDataService, TablePreferencesService], queries: [{ propertyName: \"templates\", predicate: TemplateDirective, isSignal: true }], viewQueries: [{ propertyName: \"components\", predicate: (ComponentDirective), descendants: true, isSignal: true }, { propertyName: \"primeTable\", first: true, predicate: Table, descendants: true, isSignal: true }], ngImport: i0, template: \"<div>\\n <!-- MUST NOT use observable for value when using virtual scroll - does not work for some reason -->\\n @if (data.isAllPaginationMetaInitialized()) {\\n <p-table\\n [value]=\\\"data.data()\\\"\\n [dataKey]=\\\"metadata.descriptor().trackProperty\\\"\\n [lazy]=\\\"isLazy()\\\"\\n [loading]=\\\"data.loading()\\\"\\n [paginator]=\\\"isPagination()\\\"\\n [rows]=\\\"data.rows()\\\"\\n [first]=\\\"data.offset()\\\"\\n [totalRecords]=\\\"data.count()\\\"\\n [rowsPerPageOptions]=\\\"metadata.rowsPerPageOptions()\\\"\\n [showCurrentPageReport]=\\\"true\\\"\\n [currentPageReportTemplate]=\\\"'mngTable.paginationMsg' | translate\\\"\\n [multiSortMeta]=\\\"data.sortMeta()\\\"\\n [filters]=\\\"data.filterMeta()\\\"\\n [globalFilterFields]=\\\"metadata.searchFields()\\\"\\n sortMode=\\\"multiple\\\"\\n [selection]=\\\"[]\\\"\\n (selectionChange)=\\\"onSelectionChange($event)\\\"\\n [selectionMode]=\\\"selectionEnabled() ? selectionMode() : null\\\"\\n [scrollable]=\\\"true\\\"\\n scrollHeight=\\\"flex\\\"\\n [rowHover]=\\\"metadata.descriptor().hasHover\\\"\\n [styleClass]=\\\"className()\\\"\\n [resizableColumns]=\\\"metadata.descriptor().hasResizableColumns\\\"\\n [columnResizeMode]=\\\"metadata.descriptor().columnResizeMode ?? 'expand'\\\"\\n [reorderableColumns]=\\\"areColumnsReorderable()\\\"\\n paginatorDropdownAppendTo=\\\"body\\\"\\n [columns]=\\\"visibleColumns()\\\"\\n [expandedRowKeys]=\\\"expandedRowKeys()\\\"\\n (onColResize)=\\\"prefs.onColumnResize($event)\\\"\\n (onColReorder)=\\\"prefs.onColumnReorder($event)\\\"\\n (onLazyLoad)=\\\"onTableLazyLoad($event)\\\"\\n (onFilter)=\\\"onTableFilter($event)\\\"\\n (onRowReorder)=\\\"onRowReorder($event)\\\">\\n <ng-template #caption>\\n @if (isCaptionVisible()) {\\n <div class=\\\"table-header\\\">\\n @if (overlayWithTagFilters().length > 0 || metadata.descriptor().search) {\\n @defer (on idle) {\\n <mng-table-filter-overlay-with-tag\\n [title]=\\\"metadata.descriptor().title\\\"\\n [metadata]=\\\"overlayWithTagFilters()\\\"\\n [genericFilterDescriptor]=\\\"metadata.genericFilterDescriptor()\\\"\\n [model]=\\\"metadata.descriptor().model\\\"\\n [enableSearch]=\\\"metadata.descriptor().search\\\"\\n [search]=\\\"data.searchMeta()\\\"\\n [searchLimitWordMax]=\\\"metadata.descriptor().searchLimitMaxWords\\\"\\n [enableCaseSensitive]=\\\"isLazy()\\\">\\n @if (hasTitleDisplay()) {\\n <ng-template mngTemplate=\\\"title\\\">\\n <ng-container *ngTemplateOutlet=\\\"captionTemplateOrComponentOrTitle\\\"></ng-container>\\n </ng-template>\\n }\\n </mng-table-filter-overlay-with-tag>\\n }\\n } @else {\\n <ng-container *ngTemplateOutlet=\\\"captionTemplateOrComponentOrTitle\\\"></ng-container>\\n }\\n <ng-template #captionTemplateOrComponentOrTitle>\\n @if (captionTemplate()) {\\n <ng-container *ngTemplateOutlet=\\\"captionTemplate()\\\"></ng-container>\\n } @else if (captionComponent()) {\\n <ng-container [mngComponent]=\\\"captionComponent()\\\" (instanceCreated)=\\\"captionComponentInstance.emit($event)\\\"></ng-container>\\n } @else if (metadata.descriptor().title) {\\n <h5 class=\\\"p-0 m-0\\\">{{ metadata.descriptor().title! | translate }}</h5>\\n }\\n </ng-template>\\n </div>\\n }\\n </ng-template>\\n <ng-template #header>\\n @if (!metadata.descriptor().hideHeader) {\\n <tr class=\\\"mng-table-header\\\" [class]=\\\"metadata.descriptor().headerClassName\\\">\\n @if (selectionEnabled()) {\\n @if (selectionMode() === 'multiple') {\\n <th style=\\\"min-width: 36px\\\" pFrozenColumn [frozen]=\\\"metadata.descriptor().selectionColumnFrozen ?? true\\\">\\n <p-tableHeaderCheckbox />\\n </th>\\n } @else {\\n <!-- We need the line below, because otherwise p-tableRadioButton shifts the rest of the columns in table -->\\n <th style=\\\"min-width: 36px\\\" pFrozenColumn [frozen]=\\\"metadata.descriptor().selectionColumnFrozen ?? true\\\"></th>\\n }\\n }\\n @if (metadata.descriptor().rowExpandable) {\\n <th scope=\\\"col\\\" pFrozenColumn [frozen]=\\\"true\\\"></th>\\n }\\n @if (rowReorderEnabled()) {\\n <th scope=\\\"col\\\"></th>\\n }\\n @for (col of visibleColumns(); track col.id) {\\n <ng-template #sortableColumnTHTemplate>\\n <div class=\\\"flex justify-between items-center\\\">\\n {{\\n (col.descriptor.title && !col.descriptor.titleUseModelBase\\n ? col.descriptor.title\\n : (col.descriptor.title ?? col.descriptor.property | mngI18nProperty: metadata.descriptor().model)\\n ) | translate\\n }}\\n <p-sortIcon [field]=\\\"col.sort?.property\\\" class=\\\"flex\\\"></p-sortIcon>\\n </div>\\n </ng-template>\\n <ng-template #nonSortableColumnTHTemplate>\\n {{\\n (col.descriptor.title && !col.descriptor.titleUseModelBase\\n ? col.descriptor.title\\n : (col.descriptor.title ?? col.descriptor.property | mngI18nProperty: metadata.descriptor().model)\\n ) | translate\\n }}\\n </ng-template>\\n @if (col.descriptor.isReorderable) {\\n <th\\n pResizableColumn\\n pReorderableColumn\\n [id]=\\\"col.descriptor.property\\\"\\n [pSortableColumn]=\\\"col.sort?.property\\\"\\n [pSortableColumnDisabled]=\\\"!col.sort\\\"\\n [style.width]=\\\"col.width ? col.width + 'px' : col.descriptor.width + '%'\\\"\\n [style.min-width.px]=\\\"col.width ? null : col.descriptor.minWidth\\\"\\n [style.max-width.px]=\\\"col.width ?? col.descriptor.maxWidth\\\"\\n [class]=\\\"col.descriptor.headerClassName | mngTableColumnFilterClass: col.filter?.descriptor : hasColumnFilters() && !col.width\\\">\\n <ng-container *ngTemplateOutlet=\\\"col.sort ? sortableColumnTHTemplate : nonSortableColumnTHTemplate\\\"></ng-container>\\n </th>\\n } @else {\\n <th\\n pResizableColumn\\n [id]=\\\"col.descriptor.property\\\"\\n [pSortableColumn]=\\\"col.sort?.property\\\"\\n [pSortableColumnDisabled]=\\\"!col.sort\\\"\\n [style.width]=\\\"col.width ? col.width + 'px' : col.descriptor.width + '%'\\\"\\n [style.min-width.px]=\\\"col.width ? null : col.descriptor.minWidth\\\"\\n [style.max-width.px]=\\\"col.width ?? col.descriptor.maxWidth\\\"\\n [class]=\\\"col.descriptor.headerClassName | mngTableColumnFilterClass: col.filter?.descriptor : hasColumnFilters() && !col.width\\\">\\n <ng-container *ngTemplateOutlet=\\\"col.sort ? sortableColumnTHTemplate : nonSortableColumnTHTemplate\\\"></ng-container>\\n </th>\\n }\\n }\\n @if (hasLastColumn()) {\\n <th\\n [style.min-width.px]=\\\"columnLastMinWidth()\\\"\\n pFrozenColumn\\n [frozen]=\\\"metadata.descriptor().actionColumnFrozen ?? areColumnsToggleable()\\\"\\n alignFrozen=\\\"right\\\"\\n class=\\\"mng-table-column-custom-last text-right!\\\">\\n @if (areColumnsToggleable()) {\\n @defer (on idle) {\\n <mng-table-column-toggle [columns]=\\\"visibleColumns()\\\" />\\n }\\n }\\n </th>\\n }\\n </tr>\\n }\\n @if (hasColumnFilters()) {\\n <tr class=\\\"mng-column-filter-row\\\">\\n <!-- We need the line below, because otherwise p-tableRadioButton shifts the rest of the columns in table -->\\n @if (selectionEnabled()) {\\n <th style=\\\"min-width: 36px\\\" pFrozenColumn [frozen]=\\\"metadata.descriptor().selectionColumnFrozen ?? true\\\"></th>\\n }\\n @if (rowReorderEnabled()) {\\n <th scope=\\\"col\\\"></th>\\n }\\n @if (metadata.descriptor().rowExpandable) {\\n <th scope=\\\"col\\\"></th>\\n }\\n @for (col of visibleColumns(); track col.id) {\\n <th\\n [class]=\\\"'px-1! ' + col.filter?.descriptor?.columnClassName | mngTableColumnFilterClass: col.filter?.descriptor : hasColumnFilters() && !col.width\\\"\\n [style.width.px]=\\\"col.width\\\"\\n [style.width.%]=\\\"col.width ? null : (col.filter?.descriptor?.columnWidth ?? col.descriptor.width ?? null)\\\"\\n [style.min-width.px]=\\\"col.width ? null : (col.filter?.descriptor?.columnMinWidth ?? col.descriptor.minWidth)\\\"\\n [style.max-width.px]=\\\"col.width ?? col.descriptor.maxWidth\\\">\\n @if (col.filter) {\\n @defer (on idle) {\\n <mng-table-column-filter [metadata]=\\\"col.filter\\\"></mng-table-column-filter>\\n }\\n }\\n </th>\\n }\\n @if (hasLastColumn()) {\\n <th pFrozenColumn alignFrozen=\\\"right\\\" class=\\\"mng-table-column-custom-last\\\" [style.min-width.px]=\\\"columnLastMinWidth()\\\"></th>\\n }\\n </tr>\\n }\\n </ng-template>\\n <ng-template #body let-item let-idx=\\\"rowIndex\\\" let-expanded=\\\"expanded\\\">\\n <tr\\n [pReorderableRow]=\\\"idx\\\"\\n [ngClass]=\\\"\\n metadata.descriptor().rowClassName | mngClassMap: metadata.descriptor().rowClassNameMapFn : item | mngLocaleDefaultRowClass: metadata.descriptor() : item\\n \\\">\\n @if (selectionEnabled()) {\\n @if (selectionMode() === 'multiple') {\\n <td style=\\\"min-width: 36px\\\" pFrozenColumn [frozen]=\\\"metadata.descriptor().selectionColumnFrozen ?? true\\\">\\n <p-tableCheckbox [value]=\\\"item\\\"></p-tableCheckbox>\\n </td>\\n } @else {\\n <td style=\\\"min-width: 36px\\\" pFrozenColumn [frozen]=\\\"metadata.descriptor().selectionColumnFrozen ?? true\\\">\\n <p-tableRadioButton [value]=\\\"item\\\"></p-tableRadioButton>\\n </td>\\n }\\n }\\n @if (metadata.descriptor().rowExpandable) {\\n <td>\\n @let expandProp = metadata.descriptor().rowExpandableProperty;\\n @if (!expandProp || item[expandProp]) {\\n <button\\n pButton\\n type=\\\"button\\\"\\n [pRowToggler]=\\\"item\\\"\\n rounded=\\\"true\\\"\\n text=\\\"true\\\"\\n class=\\\"mng-button-sm\\\"\\n [icon]=\\\"expanded ? 'pi pi-chevron-down' : 'pi pi-chevron-right'\\\"></button>\\n }\\n </td>\\n }\\n @if (rowReorderEnabled()) {\\n <td>\\n <span class=\\\"pi pi-bars\\\" pReorderableRowHandle></span>\\n </td>\\n }\\n @for (col of visibleColumns(); track col.id) {\\n <td\\n (click)=\\\"onCellClick($event, col.descriptor, item, idx)\\\"\\n [class]=\\\"\\n col.descriptor.className\\n | mngClassMap: col.descriptor.classNameMapFn : item\\n | mngTableColumnFilterClass: col.filter?.descriptor : hasColumnFilters() && !col.width\\n \\\"\\n [class.clickable]=\\\"isCellClickEnabled()\\\"\\n [style.width]=\\\"col.width ? col.width + 'px' : col.descriptor.width + '%'\\\"\\n [style.min-width.px]=\\\"col.width ? null : col.descriptor.minWidth\\\"\\n [style.max-width.px]=\\\"col.width ?? col.descriptor.maxWidth\\\">\\n <mng-table-column-value [descriptor]=\\\"col.descriptor\\\" [item]=\\\"item\\\"></mng-table-column-value>\\n </td>\\n }\\n @if (hasLastColumn()) {\\n <td\\n class=\\\"mng-table-column-custom-last justify-end text-right!\\\"\\n [style.min-width.px]=\\\"columnLastMinWidth()\\\"\\n pFrozenColumn\\n alignFrozen=\\\"right\\\"\\n [frozen]=\\\"metadata.descriptor().actionColumnFrozen ?? true\\\">\\n @if (columnCustomLastTemplate()) {\\n <ng-container *ngTemplateOutlet=\\\"columnCustomLastTemplate(); context: {rowItem: item, rowIndex: idx}\\\"></ng-container>\\n } @else if (columnCustomLastComponent()) {\\n <div [mngComponent]=\\\"columnCustomLastComponent()\\\" (instanceCreated)=\\\"columnCustomLastComponentInstance.emit($event)\\\"></div>\\n }\\n </td>\\n }\\n </tr>\\n </ng-template>\\n <ng-template #expandedrow let-item>\\n @if (metadata.descriptor().rowExpandable) {\\n <tr>\\n <td></td>\\n <td [colSpan]=\\\"metadata.descriptor().rowExpandableColSpan\\\">\\n @if (metadata.descriptor().rowExpandableComponentType !== undefined) {\\n <ng-container [mngComponent]=\\\"metadata.descriptor().rowExpandableComponentType\\\" [inputs]=\\\"{item}\\\"> </ng-container>\\n } @else {\\n <ng-container *ngTemplateOutlet=\\\"rowExpandTemplate(); context: {rowItem: item}\\\"></ng-container>\\n }\\n </td>\\n </tr>\\n }\\n </ng-template>\\n <ng-template #loadingicon>\\n <div class=\\\"flex flex-col items-center\\\">\\n @if (metadata.descriptor().loadingIcon) {\\n <i [class]=\\\"'text-white text-4xl pi-spin ' + metadata.descriptor().loadingIcon\\\"></i>\\n }\\n @if (metadata.descriptor().loadingText) {\\n <div class=\\\"text text-white text-lg font-semibold\\\" [ngClass]=\\\"{'mt-3': metadata.descriptor().loadingIcon}\\\">\\n {{ metadata.descriptor().loadingText ?? '' | translate }}\\n </div>\\n }\\n </div>\\n </ng-template>\\n <ng-template #loadingbody>\\n <tr>\\n <td [attr.colspan]=\\\"columnsColspan()\\\">\\n <div class=\\\"loading-text\\\"></div>\\n <p-skeleton [ngStyle]=\\\"{width: '100%'}\\\"></p-skeleton>\\n </td>\\n </tr>\\n </ng-template>\\n <ng-template #emptymessage>\\n <tr>\\n <td [attr.colspan]=\\\"columnsColspan()\\\">\\n {{ 'mngTable.noItems' | translate }}\\n </td>\\n </tr>\\n </ng-template>\\n @if (footerTemplate()) {\\n <ng-template #summary>\\n <ng-container *ngTemplateOutlet=\\\"footerTemplate(); context: {data: data.data(), totalCount: data.count()}\\\"></ng-container>\\n </ng-template>\\n }\\n </p-table>\\n }\\n</div>\\n\", styles: [\"mng-table .p-datatable .p-datatable-header{border-top:0}mng-table .p-datatable:not(.p-datatable-gridlines) .p-datatable-tbody>tr>td{cursor:auto}mng-table .p-datatable:not(.p-datatable-gridlines) .p-datatable-tbody>tr>td.clickable{cursor:pointer}:is(mng-table .p-datatable .p-datatable-thead>tr>th,mng-table .p-datatable .p-datatable-tbody>tr>td):hover mng-table-column-value .help-buttons{display:block}mng-table .p-datatable .p-datatable-thead>tr>th.mng-table-column-custom-last{padding:var(--mng-table-column-head-custom-last, .1rem 1rem)}mng-table .p-datatable .p-datatable-tbody>tr>td{position:relative}mng-table .p-datatable .p-datatable-tbody>tr>td.mng-table-column-custom-last{padding-top:.1rem;padding-bottom:.1rem}mng-table .p-datatable .p-datatable-tbody>tr>td.p-datatable-frozen-column{position:sticky;z-index:1;background:transparent}mng-table .p-datatable.p-datatable-lg .p-datatable-tbody>tr>td.mng-table-column-custom-last{padding:var(--mng-table-column-body-custom-last, .15rem 1rem)}mng-table .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td.mng-table-column-custom-last{padding:var(--mng-table-sm-column-body-custom-last, .05rem 1rem)}mng-table .p-datatable.p-datatable-flex-scrollable .p-datatable-thead>tr>th{overflow:hidden;text-overflow:ellipsis}mng-table .p-datatable.p-datatable-flex-scrollable .p-datatable-tbody>tr>td{overflow:hidden}mng-table .p-datatable .mng-table-row-localization-default-locale{background:var(--p-surface-100)!important}mng-table .mng-table-header>th:not(:first-child):not(:last-child){border-radius:0!important}mng-table .mng-table-header>th:first-child{border-top-right-radius:0!important;border-bottom-right-radius:0!important}mng-table .mng-table-header>th:last-child{border-radius:0!important}mng-table .mng-table-header .mng-table-columns-multiselect{width:36px}mng-table .mng-table-header .mng-table-columns-multiselect .p-multiselect-label-container{width:0}mng-table.mng-table-no-header p-datatable .p-datatable-header{display:none}mng-table.mng-table-header-compact .p-datatable-header{padding:var(--mng-table-header-compact-padding, 0 0 .5rem 0)}\\n\"], dependencies: [{ kind: \"directive\", type: ComponentDirective, selector: \"[mngComponent]\", inputs: [\"mngComponent\", \"injectionToken\", \"inputs\", \"attachToHost\", \"parentInjector\"], outputs: [\"instanceCreated\"] }, { kind: \"directive\", type: NgClass, selector: \"[ngClass]\", inputs: [\"class\", \"ngClass\"] }, { kind: \"directive\", type: NgStyle, selector: \"[ngStyle]\", inputs: [\"ngStyle\"] }, { kind: \"directive\", type: NgTemplateOutlet, selector: \"[ngTemplateOutlet]\", inputs: [\"ngTemplateOutletContext\", \"ngTemplateOutlet\", \"ngTemplateOutletInjector\"] }, { kind: \"component\", type: TableColumnValueComponent, selector: \"mng-table-column-value\", inputs: [\"descriptor\", \"item\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"ngmodule\", type: TableModule }, { kind: \"component\", type: i1.Table, selector: \"p-table\", inputs: [\"frozenColumns\", \"frozenValue\", \"styleClass\", \"tableStyle\", \"tableStyleClass\", \"paginator\", \"pageLinks\", \"rowsPerPageOptions\", \"alwaysShowPaginator\", \"paginatorPosition\", \"paginatorStyleClass\", \"paginatorDropdownAppendTo\", \"paginatorDropdownScrollHeight\", \"currentPageReportTemplate\", \"showCurrentPageReport\", \"showJumpToPageDropdown\", \"showJumpToPageInput\", \"showFirstLastIcon\", \"showPageLinks\", \"defaultSortOrder\", \"sortMode\", \"resetPageOnSort\", \"selectionMode\", \"selectionPageOnly\", \"contextMenuSelection\", \"contextMenuSelectionMode\", \"dataKey\", \"metaKeySelection\", \"rowSelectable\", \"rowTrackBy\", \"lazy\", \"lazyLoadOnInit\", \"compareSelectionBy\", \"csvSeparator\", \"exportFilename\", \"filters\", \"globalFilterFields\", \"filterDelay\", \"filterLocale\", \"expandedRowKeys\", \"editingRowKeys\", \"rowExpandMode\", \"scrollable\", \"rowGroupMode\", \"scrollHeight\", \"virtualScroll\", \"virtualScrollItemSize\", \"virtualScrollOptions\", \"virtualScrollDelay\", \"frozenWidth\", \"contextMenu\", \"resizableColumns\", \"columnResizeMode\", \"reorderableColumns\", \"loading\", \"loadingIcon\", \"showLoader\", \"rowHover\", \"customSort\", \"showInitialSortBadge\", \"exportFunction\", \"exportHeader\", \"stateKey\", \"stateStorage\", \"editMode\", \"groupRowsBy\", \"size\", \"showGridlines\", \"stripedRows\", \"groupRowsByOrder\", \"responsiveLayout\", \"breakpoint\", \"paginatorLocale\", \"value\", \"columns\", \"first\", \"rows\", \"totalRecords\", \"sortField\", \"sortOrder\", \"multiSortMeta\", \"selection\", \"selectAll\"], outputs: [\"contextMenuSelectionChange\", \"selectAllChange\", \"selectionChange\", \"onRowSelect\", \"onRowUnselect\", \"onPage\", \"onSort\", \"onFilter\", \"onLazyLoad\", \"onRowExpand\", \"onRowCollapse\", \"onContextMenuSelect\", \"onColResize\", \"onColReorder\", \"onRowReorder\", \"onEditInit\", \"onEditComplete\", \"onEditCancel\", \"onHeaderCheckboxToggle\", \"sortFunction\", \"firstChange\", \"rowsChange\", \"onStateSave\", \"onStateRestore\"] }, { kind: \"directive\", type: i1.SortableColumn, selector: \"[pSortableColumn]\", inputs: [\"pSortableColumn\", \"pSortableColumnDisabled\"] }, { kind: \"directive\", type: i1.FrozenColumn, selector: \"[pFrozenColumn]\", inputs: [\"frozen\", \"alignFrozen\"] }, { kind: \"directive\", type: i1.RowToggler, selector: \"[pRowToggler]\", inputs: [\"pRowToggler\", \"pRowTogglerDisabled\"] }, { kind: \"directive\", type: i1.ResizableColumn, selector: \"[pResizableColumn]\", inputs: [\"pResizableColumnDisabled\"] }, { kind: \"directive\", type: i1.ReorderableColumn, selector: \"[pReorderableColumn]\", inputs: [\"pReorderableColumnDisabled\"] }, { kind: \"component\", type: i1.SortIcon, selector: \"p-sortIcon\", inputs: [\"field\"] }, { kind: \"component\", type: i1.TableRadioButton, selector: \"p-tableRadioButton\", inputs: [\"value\", \"disabled\", \"index\", \"inputId\", \"name\", \"ariaLabel\"] }, { kind: \"component\", type: i1.TableCheckbox, selector: \"p-tableCheckbox\", inputs: [\"value\", \"disabled\", \"required\", \"index\", \"inputId\", \"name\", \"ariaLabel\"] }, { kind: \"component\", type: i1.TableHeaderCheckbox, selector: \"p-tableHeaderCheckbox\", inputs: [\"disabled\", \"inputId\", \"name\", \"ariaLabel\"] }, { kind: \"directive\", type: i1.ReorderableRowHandle, selector: \"[pReorderableRowHandle]\" }, { kind: \"directive\", type: i1.ReorderableRow, selector: \"[pReorderableRow]\", inputs: [\"pReorderableRow\", \"pReorderableRowDisabled\"] }, { kind: \"component\", type: Skeleton, selector: \"p-skeleton\", inputs: [\"styleClass\", \"shape\", \"animation\", \"borderRadius\", \"size\", \"width\", \"height\"] }, { kind: \"directive\", type: ButtonDirective, selector: \"[pButton]\", inputs: [\"iconPos\", \"loadingIcon\", \"loading\", \"severity\", \"raised\", \"rounded\", \"text\", \"outlined\", \"size\", \"plain\", \"fluid\", \"label\", \"icon\", \"buttonProps\"] }, { kind: \"pipe\", type: I18nPropertyPipe, name: \"mngI18nProperty\" }, { kind: \"pipe\", type: TranslatePipe, name: \"translate\" }, { kind: \"pipe\", type: ClassMapPipe, name: \"mngClassMap\" }, { kind: \"pipe\", type: LocaleDefaultRowClassPipe, name: \"mngLocaleDefaultRowClass\" }, { kind: \"pipe\", type: TableColumnFilterClassPipe, name: \"mngTableColumnFilterClass\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None, deferBlockDependencies: [() => [NgTemplateOutlet, import(\"../filter/filter-overlay-with-tag/filter-overlay-with-tag.component\").then(m => m.TableFilterOverlayWithTagComponent), TemplateDirective], () => [import(\"../column-toggle/column-toggle.component\").then(m => m.TableColumnToggleComponent)], () => [import(\"../column-filter/column-filter.component\").then(m => m.TableColumnFilterComponent)]] }); }\n}\ni0.ɵɵngDeclareClassMetadataAsync({ minVersion: \"18.0.0\", version: \"20.1.7\", ngImport: i0, type: TableComponent, resolveDeferredDeps: () => [import(\"../filter/filter-overlay-with-tag/filter-overlay-with-tag.component\").then(m => m.TableFilterOverlayWithTagComponent), import(\"../column-toggle/column-toggle.component\").then(m => m.TableColumnToggleComponent), import(\"../column-filter/column-filter.component\").then(m => m.TableColumnFilterComponent)], resolveMetadata: (TableFilterOverlayWithTagComponent, TableColumnToggleComponent, TableColumnFilterComponent) => ({ decorators: [{\n type: Component,\n args: [{ selector: 'mng-table', imports: [\n ComponentDirective,\n I18nPropertyPipe,\n TranslatePipe,\n NgClass,\n NgStyle,\n NgTemplateOutlet,\n TableColumnValueComponent,\n ClassMapPipe,\n LocaleDefaultRowClassPipe,\n TableColumnFilterComponent,\n TableColumnFilterClassPipe,\n TableFilterOverlayWithTagComponent,\n FormsModule,\n TemplateDirective,\n TableModule,\n Skeleton,\n TableColumnToggleComponent,\n ButtonDirective\n ], providers: [TableMetadataService, TableDataService, TablePreferencesService], host: {\n '[class.mng-table-no-header]': '!isCaptionVisible()'\n }, changeDetection: ChangeDetectionStrategy.OnPush, encapsulation: ViewEncapsulation.None, template: \"<div>\\n <!-- MUST NOT use observable for value when using virtual scroll - does not work for some reason -->\\n @if (data.isAllPaginationMetaInitialized()) {\\n <p-table\\n [value]=\\\"data.data()\\\"\\n [dataKey]=\\\"metadata.descriptor().trackProperty\\\"\\n [lazy]=\\\"isLazy()\\\"\\n [loading]=\\\"data.loading()\\\"\\n [paginator]=\\\"isPagination()\\\"\\n [rows]=\\\"data.rows()\\\"\\n [first]=\\\"data.offset()\\\"\\n [totalRecords]=\\\"data.count()\\\"\\n [rowsPerPageOptions]=\\\"metadata.rowsPerPageOptions()\\\"\\n [showCurrentPageReport]=\\\"true\\\"\\n [currentPageReportTemplate]=\\\"'mngTable.paginationMsg' | translate\\\"\\n [multiSortMeta]=\\\"data.sortMeta()\\\"\\n [filters]=\\\"data.filterMeta()\\\"\\n [globalFilterFields]=\\\"metadata.searchFields()\\\"\\n sortMode=\\\"multiple\\\"\\n [selection]=\\\"[]\\\"\\n (selectionChange)=\\\"onSelectionChange($event)\\\"\\n [selectionMode]=\\\"selectionEnabled() ? selectionMode() : null\\\"\\n [scrollable]=\\\"true\\\"\\n scrollHeight=\\\"flex\\\"\\n [rowHover]=\\\"metadata.descriptor().hasHover\\\"\\n [styleClass]=\\\"className()\\\"\\n [resizableColumns]=\\\"metadata.descriptor().hasResizableColumns\\\"\\n [columnResizeMode]=\\\"metadata.descriptor().columnResizeMode ?? 'expand'\\\"\\n [reorderableColumns]=\\\"areColumnsReorderable()\\\"\\n paginatorDropdownAppendTo=\\\"body\\\"\\n [columns]=\\\"visibleColumns()\\\"\\n [expandedRowKeys]=\\\"expandedRowKeys()\\\"\\n (onColResize)=\\\"prefs.onColumnResize($event)\\\"\\n (onColReorder)=\\\"prefs.onColumnReorder($event)\\\"\\n (onLazyLoad)=\\\"onTableLazyLoad($event)\\\"\\n (onFilter)=\\\"onTableFilter($event)\\\"\\n (onRowReorder)=\\\"onRowReorder($event)\\\">\\n <ng-template #caption>\\n @if (isCaptionVisible()) {\\n <div class=\\\"table-header\\\">\\n @if (overlayWithTagFilters().length > 0 || metadata.descriptor().search) {\\n @defer (on idle) {\\n <mng-table-filter-overlay-with-tag\\n [title]=\\\"metadata.descriptor().title\\\"\\n [metadata]=\\\"overlayWithTagFilters()\\\"\\n [genericFilterDescriptor]=\\\"metadata.genericFilterDescriptor()\\\"\\n [model]=\\\"metadata.descriptor().model\\\"\\n [enableSearch]=\\\"metadata.descriptor().search\\\"\\n [search]=\\\"data.searchMeta()\\\"\\n [searchLimitWordMax]=\\\"metadata.descriptor().searchLimitMaxWords\\\"\\n [enableCaseSensitive]=\\\"isLazy()\\\">\\n @if (hasTitleDisplay()) {\\n <ng-template mngTemplate=\\\"title\\\">\\n <ng-container *ngTemplateOutlet=\\\"captionTemplateOrComponentOrTitle\\\"></ng-container>\\n </ng-template>\\n }\\n </mng-table-filter-overlay-with-tag>\\n }\\n } @else {\\n <ng-container *ngTemplateOutlet=\\\"captionTemplateOrComponentOrTitle\\\"></ng-container>\\n }\\n <ng-template #captionTemplateOrComponentOrTitle>\\n @if (captionTemplate()) {\\n <ng-container *ngTemplateOutlet=\\\"captionTemplate()\\\"></ng-container>\\n } @else if (captionComponent()) {\\n <ng-container [mngComponent]=\\\"captionComponent()\\\" (instanceCreated)=\\\"captionComponentInstance.emit($event)\\\"></ng-container>\\n } @else if (metadata.descriptor().title) {\\n <h5 class=\\\"p-0 m-0\\\">{{ metadata.descriptor().title! | translate }}</h5>\\n }\\n </ng-template>\\n </div>\\n }\\n </ng-template>\\n <ng-template #header>\\n @if (!metadata.descriptor().hideHeader) {\\n <tr class=\\\"mng-table-header\\\" [class]=\\\"metadata.descriptor().headerClassName\\\">\\n @if (selectionEnabled()) {\\n @if (selectionMode() === 'multiple') {\\n <th style=\\\"min-width: 36px\\\" pFrozenColumn [frozen]=\\\"metadata.descriptor().selectionColumnFrozen ?? true\\\">\\n <p-tableHeaderCheckbox />\\n </th>\\n } @else {\\n <!-- We need the line below, because otherwise p-tableRadioButton shifts the rest of the columns in table -->\\n <th style=\\\"min-width: 36px\\\" pFrozenColumn [frozen]=\\\"metadata.descriptor().selectionColumnFrozen ?? true\\\"></th>\\n }\\n }\\n @if (metadata.descriptor().rowExpandable) {\\n <th scope=\\\"col\\\" pFrozenColumn [frozen]=\\\"true\\\"></th>\\n }\\n @if (rowReorderEnabled()) {\\n <th scope=\\\"col\\\"></th>\\n }\\n @for (col of visibleColumns(); track col.id) {\\n <ng-template #sortableColumnTHTemplate>\\n <div class=\\\"flex justify-between items-center\\\">\\n {{\\n (col.descriptor.title && !col.descriptor.titleUseModelBase\\n ? col.descriptor.title\\n : (col.descriptor.title ?? col.descriptor.property | mngI18nProperty: metadata.descriptor().model)\\n ) | translate\\n }}\\n <p-sortIcon [field]=\\\"col.sort?.property\\\" class=\\\"flex\\\"></p-sortIcon>\\n </div>\\n </ng-template>\\n <ng-template #nonSortableColumnTHTemplate>\\n {{\\n (col.descriptor.title && !col.descriptor.titleUseModelBase\\n ? col.descriptor.title\\n : (col.descriptor.title ?? col.descriptor.property | mngI18nProperty: metadata.descriptor().model)\\n ) | translate\\n }}\\n </ng-template>\\n @if (col.descriptor.isReorderable) {\\n <th\\n pResizableColumn\\n pReorderableColumn\\n [id]=\\\"col.descriptor.property\\\"\\n [pSortableColumn]=\\\"col.sort?.property\\\"\\n [pSortableColumnDisabled]=\\\"!col.sort\\\"\\n [style.width]=\\\"col.width ? col.width + 'px' : col.descriptor.width + '%'\\\"\\n [style.min-width.px]=\\\"col.width ? null : col.descriptor.minWidth\\\"\\n [style.max-width.px]=\\\"col.width ?? col.descriptor.maxWidth\\\"\\n [class]=\\\"col.descriptor.headerClassName | mngTableColumnFilterClass: col.filter?.descriptor : hasColumnFilters() && !col.width\\\">\\n <ng-container *ngTemplateOutlet=\\\"col.sort ? sortableColumnTHTemplate : nonSortableColumnTHTemplate\\\"></ng-container>\\n </th>\\n } @else {\\n <th\\n pResizableColumn\\n [id]=\\\"col.descriptor.property\\\"\\n [pSortableColumn]=\\\"col.sort?.property\\\"\\n [pSortableColumnDisabled]=\\\"!col.sort\\\"\\n [style.width]=\\\"col.width ? col.width + 'px' : col.descriptor.width + '%'\\\"\\n [style.min-width.px]=\\\"col.width ? null : col.descriptor.minWidth\\\"\\n [style.max-width.px]=\\\"col.width ?? col.descriptor.maxWidth\\\"\\n [class]=\\\"col.descriptor.headerClassName | mngTableColumnFilterClass: col.filter?.descriptor : hasColumnFilters() && !col.width\\\">\\n <ng-container *ngTemplateOutlet=\\\"col.sort ? sortableColumnTHTemplate : nonSortableColumnTHTemplate\\\"></ng-container>\\n </th>\\n }\\n }\\n @if (hasLastColumn()) {\\n <th\\n [style.min-width.px]=\\\"columnLastMinWidth()\\\"\\n pFrozenColumn\\n [frozen]=\\\"metadata.descriptor().actionColumnFrozen ?? areColumnsToggleable()\\\"\\n alignFrozen=\\\"right\\\"\\n class=\\\"mng-table-column-custom-last text-right!\\\">\\n @if (areColumnsToggleable()) {\\n @defer (on idle) {\\n <mng-table-column-toggle [columns]=\\\"visibleColumns()\\\" />\\n }\\n }\\n </th>\\n }\\n </tr>\\n }\\n @if (hasColumnFilters()) {\\n <tr class=\\\"mng-column-filter-row\\\">\\n <!-- We need the line below, because otherwise p-tableRadioButton shifts the rest of the columns in table -->\\n @if (selectionEnabled()) {\\n <th style=\\\"min-width: 36px\\\" pFrozenColumn [frozen]=\\\"metadata.descriptor().selectionColumnFrozen ?? true\\\"></th>\\n }\\n @if (rowReorderEnabled()) {\\n <th scope=\\\"col\\\"></th>\\n }\\n @if (metadata.descriptor().rowExpandable) {\\n <th scope=\\\"col\\\"></th>\\n }\\n @for (col of visibleColumns(); track col.id) {\\n <th\\n [class]=\\\"'px-1! ' + col.filter?.descriptor?.columnClassName | mngTableColumnFilterClass: col.filter?.descriptor : hasColumnFilters() && !col.width\\\"\\n [style.width.px]=\\\"col.width\\\"\\n [style.width.%]=\\\"col.width ? null : (col.filter?.descriptor?.columnWidth ?? col.descriptor.width ?? null)\\\"\\n [style.min-width.px]=\\\"col.width ? null : (col.filter?.descriptor?.columnMinWidth ?? col.descriptor.minWidth)\\\"\\n [style.max-width.px]=\\\"col.width ?? col.descriptor.maxWidth\\\">\\n @if (col.filter) {\\n @defer (on idle) {\\n <mng-table-column-filter [metadata]=\\\"col.filter\\\"></mng-table-column-filter>\\n }\\n }\\n </th>\\n }\\n @if (hasLastColumn()) {\\n <th pFrozenColumn alignFrozen=\\\"right\\\" class=\\\"mng-table-column-custom-last\\\" [style.min-width.px]=\\\"columnLastMinWidth()\\\"></th>\\n }\\n </tr>\\n }\\n </ng-template>\\n <ng-template #body let-item let-idx=\\\"rowIndex\\\" let-expanded=\\\"expanded\\\">\\n <tr\\n [pReorderableRow]=\\\"idx\\\"\\n [ngClass]=\\\"\\n metadata.descriptor().rowClassName | mngClassMap: metadata.descriptor().rowClassNameMapFn : item | mngLocaleDefaultRowClass: metadata.descriptor() : item\\n \\\">\\n @if (selectionEnabled()) {\\n @if (selectionMode() === 'multiple') {\\n <td style=\\\"min-width: 36px\\\" pFrozenColumn [frozen]=\\\"metadata.descriptor().selectionColumnFrozen ?? true\\\">\\n <p-tableCheckbox [value]=\\\"item\\\"></p-tableCheckbox>\\n </td>\\n } @else {\\n <td style=\\\"min-width: 36px\\\" pFrozenColumn [frozen]=\\\"metadata.descriptor().selectionColumnFrozen ?? true\\\">\\n <p-tableRadioButton [value]=\\\"item\\\"></p-tableRadioButton>\\n </td>\\n }\\n }\\n @if (metadata.descriptor().rowExpandable) {\\n <td>\\n @let expandProp = metadata.descriptor().rowExpandableProperty;\\n @if (!expandProp || item[expandProp]) {\\n <button\\n pButton\\n type=\\\"button\\\"\\n [pRowToggler]=\\\"item\\\"\\n rounded=\\\"true\\\"\\n text=\\\"true\\\"\\n class=\\\"mng-button-sm\\\"\\n [icon]=\\\"expanded ? 'pi pi-chevron-down' : 'pi pi-chevron-right'\\\"></button>\\n }\\n </td>\\n }\\n @if (rowReorderEnabled()) {\\n <td>\\n <span class=\\\"pi pi-bars\\\" pReorderableRowHandle></span>\\n </td>\\n }\\n @for (col of visibleColumns(); track col.id) {\\n <td\\n (click)=\\\"onCellClick($event, col.descriptor, item, idx)\\\"\\n [class]=\\\"\\n col.descriptor.className\\n | mngClassMap: col.descriptor.classNameMapFn : item\\n | mngTableColumnFilterClass: col.filter?.descriptor : hasColumnFilters() && !col.width\\n \\\"\\n [class.clickable]=\\\"isCellClickEnabled()\\\"\\n [style.width]=\\\"col.width ? col.width + 'px' : col.descriptor.width + '%'\\\"\\n [style.min-width.px]=\\\"col.width ? null : col.descriptor.minWidth\\\"\\n [style.max-width.px]=\\\"col.width ?? col.descriptor.maxWidth\\\">\\n <mng-table-column-value [descriptor]=\\\"col.descriptor\\\" [item]=\\\"item\\\"></mng-table-column-value>\\n </td>\\n }\\n @if (hasLastColumn()) {\\n <td\\n class=\\\"mng-table-column-custom-last justify-end text-right!\\\"\\n [style.min-width.px]=\\\"columnLastMinWidth()\\\"\\n pFrozenColumn\\n alignFrozen=\\\"right\\\"\\n [frozen]=\\\"metadata.descriptor().actionColumnFrozen ?? true\\\">\\n @if (columnCustomLastTemplate()) {\\n <ng-container *ngTemplateOutlet=\\\"columnCustomLastTemplate(); context: {rowItem: item, rowIndex: idx}\\\"></ng-container>\\n } @else if (columnCustomLastComponent()) {\\n <div [mngComponent]=\\\"columnCustomLastComponent()\\\" (instanceCreated)=\\\"columnCustomLastComponentInstance.emit($event)\\\"></div>\\n }\\n </td>\\n }\\n </tr>\\n </ng-template>\\n <ng-template #expandedrow let-item>\\n @if (metadata.descriptor().rowExpandable) {\\n <tr>\\n <td></td>\\n <td [colSpan]=\\\"metadata.descriptor().rowExpandableColSpan\\\">\\n @if (metadata.descriptor().rowExpandableComponentType !== undefined) {\\n <ng-container [mngComponent]=\\\"metadata.descriptor().rowExpandableComponentType\\\" [inputs]=\\\"{item}\\\"> </ng-container>\\n } @else {\\n <ng-container *ngTemplateOutlet=\\\"rowExpandTemplate(); context: {rowItem: item}\\\"></ng-container>\\n }\\n </td>\\n </tr>\\n }\\n </ng-template>\\n <ng-template #loadingicon>\\n <div class=\\\"flex flex-col items-center\\\">\\n @if (metadata.descriptor().loadingIcon) {\\n <i [class]=\\\"'text-white text-4xl pi-spin ' + metadata.descriptor().loadingIcon\\\"></i>\\n }\\n @if (metadata.descriptor().loadingText) {\\n <div class=\\\"text text-white text-lg font-semibold\\\" [ngClass]=\\\"{'mt-3': metadata.descriptor().loadingIcon}\\\">\\n {{ metadata.descriptor().loadingText ?? '' | translate }}\\n </div>\\n }\\n </div>\\n </ng-template>\\n <ng-template #loadingbody>\\n <tr>\\n <td [attr.colspan]=\\\"columnsColspan()\\\">\\n <div class=\\\"loading-text\\\"></div>\\n <p-skeleton [ngStyle]=\\\"{width: '100%'}\\\"></p-skeleton>\\n </td>\\n </tr>\\n </ng-template>\\n <ng-template #emptymessage>\\n <tr>\\n <td [attr.colspan]=\\\"columnsColspan()\\\">\\n {{ 'mngTable.noItems' | translate }}\\n </td>\\n </tr>\\n </ng-template>\\n @if (footerTemplate()) {\\n <ng-template #summary>\\n <ng-container *ngTemplateOutlet=\\\"footerTemplate(); context: {data: data.data(), totalCount: data.count()}\\\"></ng-container>\\n </ng-template>\\n }\\n </p-table>\\n }\\n</div>\\n\", styles: [\"mng-table .p-datatable .p-datatable-header{border-top:0}mng-table .p-datatable:not(.p-datatable-gridlines) .p-datatable-tbody>tr>td{cursor:auto}mng-table .p-datatable:not(.p-datatable-gridlines) .p-datatable-tbody>tr>td.clickable{cursor:pointer}:is(mng-table .p-datatable .p-datatable-thead>tr>th,mng-table .p-datatable .p-datatable-tbody>tr>td):hover mng-table-column-value .help-buttons{display:block}mng-table .p-datatable .p-datatable-thead>tr>th.mng-table-column-custom-last{padding:var(--mng-table-column-head-custom-last, .1rem 1rem)}mng-table .p-datatable .p-datatable-tbody>tr>td{position:relative}mng-table .p-datatable .p-datatable-tbody>tr>td.mng-table-column-custom-last{padding-top:.1rem;padding-bottom:.1rem}mng-table .p-datatable .p-datatable-tbody>tr>td.p-datatable-frozen-column{position:sticky;z-index:1;background:transparent}mng-table .p-datatable.p-datatable-lg .p-datatable-tbody>tr>td.mng-table-column-custom-last{padding:var(--mng-table-column-body-custom-last, .15rem 1rem)}mng-table .p-datatable.p-datatable-sm .p-datatable-tbody>tr>td.mng-table-column-custom-last{padding:var(--mng-table-sm-column-body-custom-last, .05rem 1rem)}mng-table .p-datatable.p-datatable-flex-scrollable .p-datatable-thead>tr>th{overflow:hidden;text-overflow:ellipsis}mng-table .p-datatable.p-datatable-flex-scrollable .p-datatable-tbody>tr>td{overflow:hidden}mng-table .p-datatable .mng-table-row-localization-default-locale{background:var(--p-surface-100)!important}mng-table .mng-table-header>th:not(:first-child):not(:last-child){border-radius:0!important}mng-table .mng-table-header>th:first-child{border-top-right-radius:0!important;border-bottom-right-radius:0!important}mng-table .mng-table-header>th:last-child{border-radius:0!important}mng-table .mng-table-header .mng-table-columns-multiselect{width:36px}mng-table .mng-table-header .mng-table-columns-multiselect .p-multiselect-label-container{width:0}mng-table.mng-table-no-header p-datatable .p-datatable-header{display:none}mng-table.mng-table-header-compact .p-datatable-header{padding:var(--mng-table-header-compact-padding, 0 0 .5rem 0)}\\n\"] }]\n }], ctorParameters: () => [], propDecorators: null }) });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vdGFibGUvc3JjL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vdGFibGUvc3JjL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRSxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFJVCxpQkFBaUIsRUFDakIsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixRQUFRLEVBQ1IsZUFBZSxFQUNmLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLE1BQU0sRUFDTixTQUFTLEVBQ1QsWUFBWSxFQUNmLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQztBQUNsRyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFDLGNBQWMsRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsZUFBZSxFQUFFLGVBQWUsRUFBVSxNQUFNLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUVsSSxPQUFPLEVBQUMsYUFBYSxFQUFFLGdCQUFnQixFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDcEUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMzQyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0MsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQzFDLE9BQU8sRUFBQyxLQUFLLEVBQXdDLFdBQVcsRUFBdUIsTUFBTSxlQUFlLENBQUM7QUFDN0cs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dGVudCI6WyJpbXBvcnQge05nQ2xhc3MsIE5nU3R5bGUsIE5nVGVtcGxhdGVPdXRsZXR9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBTaWduYWwsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVHlwZSxcbiAgICBWaWV3RW5jYXBzdWxhdGlvbixcbiAgICBhZnRlck5leHRSZW5kZXIsXG4gICAgYm9vbGVhbkF0dHJpYnV0ZSxcbiAgICBjb21wdXRlZCxcbiAgICBjb250ZW50Q2hpbGRyZW4sXG4gICAgaW5qZWN0LFxuICAgIGlucHV0LFxuICAgIG91dHB1dCxcbiAgICBzaWduYWwsXG4gICAgdmlld0NoaWxkLFxuICAgIHZpZXdDaGlsZHJlblxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7b3V0cHV0RnJvbU9ic2VydmFibGUsIHRha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge0Zvcm1zTW9kdWxlfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge0FjdGl2YXRlZFJvdXRlLCBOYXZpZ2F0aW9uQ2FuY2VsLCBOYXZpZ2F0aW9uRW5kLCBOYXZpZ2F0aW9uRXJyb3IsIE5hdmlnYXRpb25TdGFydCwgUGFyYW1zLCBSb3V0ZXJ9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmltcG9ydCB7VHJhbnNsYXRlUGlwZSwgVHJhbnNsYXRlU2VydmljZX0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQge01lc3NhZ2VTZXJ2aWNlfSBmcm9tICdwcmltZW5nL2FwaSc7XG5pbXBvcnQge0J1dHRvbkRpcmVjdGl2ZX0gZnJvbSAncHJpbWVuZy9idXR0b24nO1xuaW1wb3J0IHtTa2VsZXRvbn0gZnJvbSAncHJpbWVuZy9za2VsZXRvbic7XG5pbXBvcnQge1RhYmxlLCBUYWJsZUZpbHRlckV2ZW50LCBUYWJsZUxhenlMb2FkRXZlbnQsIFRhYmxlTW9kdWxlLCBUYWJsZVJvd1Jlb3JkZXJFdmVudH0gZnJvbSAncHJpbWVuZy90YWJsZSc7XG5pbXBvcnQge05FVkVSLCBTdWJqZWN0LCBmaWx0ZXIsIG9mLCBzd2l0Y2hNYXB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICAgIENsYXNzTWFwUGlwZSxcbiAgICBDb21wb25lbnREaXJlY3RpdmUsXG4gICAgRGF0YUxpc3RQYXJhbXMsXG4gICAgRGF0YUxpc3RSZXN1bHQsXG4gICAgSTE4blByb3BlcnR5UGlwZSxcbiAgICBMb2dnZXJTZXJ2aWNlLFxuICAgIFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgIGJvb2xlYW5PclVuZGVmaW5lZEF0dHJpYnV0ZSxcbiAgICBkYXRhTGlzdFBhcmFtc1RvVXJsUXVlcnksXG4gICAgZWZmZWN0V2l0aERlcHMsXG4gICAgZmluZFRlbXBsYXRlQnlOYW1lLFxuICAgIGZyb21TdWJzY3JpYmVFcnJvcixcbiAgICBmcm9tVGFibGVMb2FkVG9EYXRhTGlzdFBhcmFtcyxcbiAgICBmcm9tVXJsUXVlcnlUb0RhdGFMaXN0UGFyYW1zLFxuICAgIGdldEVycm9yTG9nTGV2ZWwsXG4gICAgbWVyZ2VEYXRhTGlzdFBhcmFtc1dpdGhEZWZhdWx0c1xufSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL2NvcmUnO1xuaW1wb3J0IHtGaWx0ZXJEaXNwbGF5VHlwZUVudW19IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvZmlsdGVyJztcbmltcG9ydCB7XG4gICAgQ29sdW1uRGVzY3JpcHRvcixcbiAgICBJVGFibGVEYXRhUHJvdmlkZXIsXG4gICAgVGFibGVDZWxsQ2xpY2tFdmVudCxcbiAgICBUYWJsZURlc2NyaXB0b3JJbnN0LFxuICAgIFRhYmxlTG9hZEV2ZW50LFxuICAgIFRhYmxlUGFnaW5hdGlvbk1vZGVFbnVtLFxuICAgIFRhYmxlUmVsb2FkRXZlbnQsXG4gICAgVGFibGVTaXplRW51bVxufSBmcm9tICdAbWVkaXVzaW5jL21uZy1jb21tb25zL3RhYmxlL2FwaSc7XG5cbmltcG9ydCB7dGFibGVOb3RpZmljYXRpb25FcnJvcn0gZnJvbSAnLi4vLi4vaGVscGVycy9ub3RpZmljYXRpb24nO1xuaW1wb3J0IHtMb2NhbGVEZWZhdWx0Um93Q2xhc3NQaXBlfSBmcm9tICcuLi8uLi9waXBlcy9sb2NhbGUtZGVmYXVsdC1yb3ctY2xhc3MucGlwZSc7XG5pbXBvcnQge1RhYmxlQ29sdW1uRmlsdGVyQ2xhc3NQaXBlfSBmcm9tICcuLi8uLi9waXBlcy90YWJsZS1jb2x1bW4tZmlsdGVyLWNsYXNzLnBpcGUnO1xuaW1wb3J0IHtUYWJsZURhdGFTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90YWJsZS1kYXRhLnNlcnZpY2UnO1xuaW1wb3J0IHtUYWJsZU1ldGFkYXRhU2VydmljZX0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGFibGUtbWV0YWRhdGEuc2VydmljZSc7XG5pbXBvcnQge1RhYmxlUHJlZmVyZW5jZXNTZXJ2aWNlfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90YWJsZS1wcmVmZXJlbmNlcy5zZXJ2aWNlJztcbmltcG9ydCB7VGFibGVDb2x1bW5GaWx0ZXJDb21wb25lbnR9IGZyb20gJy4uL2NvbHVtbi1maWx0ZXIvY29sdW1uLWZpbHRlci5jb21wb25lbnQnO1xuaW1wb3J0IHtUYWJsZUNvbHVtblRvZ2dsZUNvbXBvbmVudH0gZnJvbSAnLi4vY29sdW1uLXRvZ2dsZS9jb2x1bW4tdG9nZ2xlLmNvbXBvbmVudCc7XG5pbXBvcnQge1RhYmxlQ29sdW1uVmFsdWVDb21wb25lbnR9IGZyb20gJy4uL2NvbHVtbi12YWx1ZS9jb2x1bW4tdmFsdWUuY29tcG9uZW50JztcbmltcG9ydCB7VGFibGVGaWx0ZXJPdmVybGF5V2l0aFRhZ0NvbXBvbmVudH0gZnJvbSAnLi4vZmlsdGVyL2ZpbHRlci1vdmVybGF5LXdpdGgtdGFnL2ZpbHRlci1vdmVybGF5LXdpdGgtdGFnLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbW5nLXRhYmxlJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tcG9uZW50RGlyZWN0aXZlLFxuICAgICAgICBJMThuUHJvcGVydHlQaXBlLFxuICAgICAgICBUcmFuc2xhdGVQaXBlLFxuICAgICAgICBOZ0NsYXNzLFxuICAgICAgICBOZ1N0eWxlLFxuICAgICAgICBOZ1RlbXBsYXRlT3V0bGV0LFxuICAgICAgICBUYWJsZUNvbHVtblZhbHVlQ29tcG9uZW50LFxuICAgICAgICBDbGFzc01hcFBpcGUsXG4gICAgICAgIExvY2FsZURlZmF1bHRSb3dDbGFzc1BpcGUsXG4gICAgICAgIFRhYmxlQ29sdW1uRmlsdGVyQ29tcG9uZW50LFxuICAgICAgICBUYWJsZUNvbHVtbkZpbHRlckNsYXNzUGlwZSxcbiAgICAgICAgVGFibGVGaWx0ZXJPdmVybGF5V2l0aFRhZ0NvbXBvbmVudCxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFRlbXBsYXRlRGlyZWN0aXZlLFxuICAgICAgICBUYWJsZU1vZHVsZSxcbiAgICAgICAgU2tlbGV0b24sXG4gICAgICAgIFRhYmxlQ29sdW1uVG9nZ2xlQ29tcG9uZW50LFxuICAgICAgICBCdXR0b25EaXJlY3RpdmVcbiAgICBdLFxuICAgIHN0eWxlVXJsczogWycuL3RhYmxlLmNvbXBvbmVudC5jc3MnXSxcbiAgICBwcm92aWRlcnM6IFtUYWJsZU1ldGFkYXRhU2VydmljZSwgVGFibGVEYXRhU2VydmljZSwgVGFibGVQcmVmZXJlbmNlc1NlcnZpY2VdLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgJ1tjbGFzcy5tbmctdGFibGUtbm8taGVhZGVyXSc6ICchaXNDYXB0aW9uVmlzaWJsZSgpJ1xuICAgIH0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudDxJdGVtID0gYW55LCBTZXJ2aWNlID0gdW5kZWZpbmVkLCBTb3J0cyA9IGFueSwgRmlsdGVycyBleHRlbmRzIGtleW9mIGFueSA9IGFueT4ge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZmlsdGVyS2V5UHJlcGVuZCA9ICdmXyc7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlciA9IGluamVjdChMb2dnZXJTZXJ2aWNlKS5jcmVhdGUoVGFibGVNZXRhZGF0YVNlcnZpY2UuY21wVHlwZU5hbWUpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcm91dGVyID0gaW5qZWN0KFJvdXRlcik7XG4gICAgcHJpdmF0ZSByZWFkb25seSByb3V0ZSA9IGluamVjdChBY3RpdmF0ZWRSb3V0ZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGUgPSBpbmplY3QoVHJhbnNsYXRlU2VydmljZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBtZXNzYWdlU2VydmljZSA9IGluamVjdChNZXNzYWdlU2VydmljZSk7XG4gICAgcHVibGljIHJlYWRvbmx5IG1ldGFkYXRhID0gaW5qZWN0KFRhYmxlTWV0YWRhdGFTZXJ2aWNlKTtcbiAgICBwdWJsaWMgcmVhZG9ubHkgcHJlZnMgPSBpbmplY3QoVGFibGVQcmVmZXJlbmNlc1NlcnZpY2UpO1xuICAgIHB1YmxpYyByZWFkb25seSBkYXRhID0gaW5qZWN0KFRhYmxlRGF0YVNlcnZpY2U8SXRlbT4pO1xuXG4gICAgLy8gZGVzY3JpcHRvclxuICAgIHB1YmxpYyBkZXNjcmlwdG9ySW5wdXQgPSBpbnB1dC5yZXF1aXJlZDxUYWJsZURlc2NyaXB0b3JJbnN0PEl0ZW0sIFNvcnRzLCBGaWx0ZXJzPj4oe2FsaWFzOiAnZGVzY3JpcHRvcid9KTtcblxuICAgIC8vIGRhdGEgc291cmNlIGlucHV0c1xuICAgIHB1YmxpYyBpdGVtcyA9IGlucHV0PEl0ZW1bXT4oKTtcbiAgICBwdWJsaWMgcmVzdWx0ID0gaW5wdXQ8RGF0YUxpc3RSZXN1bHQ8SXRlbT4+KCk7XG4gICAgcHVibGljIGxvYWRpbmdJbnB1dCA9IGlucHV0KHVuZGVmaW5lZCwge2FsaWFzOiAnbG9hZGluZycsIHRyYW5zZm9ybTogYm9vbGVhbk9yVW5kZWZpbmVkQXR0cmlidXRlfSk7XG4gICAgcHVibGljIGRhdGFQcm92aWRlciA9IGlucHV0PElUYWJsZURhdGFQcm92aWRlcjxJdGVtLCBTZXJ2aWNlLCBTb3J0cywgRmlsdGVycz4+KCk7XG5cbiAgICAvLyBleHRyYSBmZWF0dXJlcyBpbnB1dFxuICAgIHB1YmxpYyB1c2VRdWVyeVBhcmFtcyA9IGlucHV0KGZhbHNlLCB7dHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlfSk7XG4gICAgcHVibGljIGNlbGxDbGlja0VuYWJsZWQgPSBpbnB1dCh0cnVlLCB7dHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlfSk7XG4gICAgcHVibGljIHNlbGVjdGlvbk1vZGUgPSBpbnB1dDwnc2luZ2xlJyB8ICdtdWx0aXBsZSc+KCdtdWx0aXBsZScpO1xuICAgIHB1YmxpYyBzZWxlY3Rpb25FbmFibGVkID0gaW5wdXQoZmFsc2UsIHt0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGV9KTtcbiAgICBwdWJsaWMgcm93UmVvcmRlckVuYWJsZWRJbnB1dCA9IGlucHV0KHRydWUsIHthbGlhczogJ3Jvd1Jlb3JkZXJFbmFibGVkJywgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlfSk7XG4gICAgcHVibGljIHJvd1Jlb3JkZXJFbmFibGVkID0gY29tcHV0ZWQ8Ym9vbGVhbj4oKCkgPT4gdGhpcy5yb3dSZW9yZGVyRW5hYmxlZElucHV0KCkgJiYgdGhpcy5tZXRhZGF0YS5kZXNjcmlwdG9yKCkucm93UmVvcmRlcmFibGUpO1xuICAgIHB1YmxpYyBleHBhbmRlZFJvd0tleXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0b3IgPSB0aGlzLm1ldGFkYXRhLmRlc2NyaXB0b3IoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBkZXNjcmlwdG9yLmlzUm93RXhwYW5kZWQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmRhdGEoKT8ucmVkdWNlKChhY2M6IHtba2V5OiBzdHJpbmddOiBib29sZWFufSwgaXRlbTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgYWNjW2l0ZW1bZGVzY3JpcHRvci50cmFja1Byb3BlcnR5IV1dID0gISFpdGVtW2Rlc2NyaXB0b3IuaXNSb3dFeHBhbmRlZCBhcyBzdHJpbmddO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlc2NyaXB0b3IuaXNSb3dFeHBhbmRlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5kYXRhKCk/LnJlZHVjZSgoYWNjOiB7W2tleTogc3RyaW5nXTogYm9vbGVhbn0sIGl0ZW06IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIGFjY1tpdGVtW2Rlc2NyaXB0b3IudHJhY2tQcm9wZXJ0eSFdXSA9IChkZXNjcmlwdG9yLmlzUm93RXhwYW5kZWQgYXMgKGl0ZW06IEl0ZW0pID0+IGJvb2xlYW4pKGl0ZW0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9LCB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIH0pO1xuXG4gICAgLy8gc3R5bGluZ1xuICAgIHB1YmxpYyBjb2x1bW5MYXN0TWluV2lkdGggPSBpbnB1dDxudW1iZXI+KCk7XG4gICAgcHVibGljIGNvbHVtbnNDb2xzcGFuID0gY29tcHV0ZWQoKCkgPT4gdGhpcy52aXNpYmxlQ29sdW1ucygpLmxlbmd0aCArICh0aGlzLmhhc0xhc3RDb2x1bW4oKSA/IDEgOiAwKSArICh0aGlzLnNlbGVjdGlvbkVuYWJsZWQoKSA/IDEgOiAwKSArICh0aGlzLnJvd1Jlb3JkZXJFbmFibGVkKCkgPyAxIDogMCkpO1xuICAgIHB1YmxpYyBoYXNUaXRsZURpc3BsYXkgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNhcHRpb25UZW1wbGF0ZSgpIHx8IHRoaXMuY2FwdGlvbkNvbXBvbmVudCgpIHx8IHRoaXMubWV0YWRhdGEuZGVzY3JpcHRvcigpLnRpdGxlKTtcbiAgICBwdWJsaWMgaXNDYXB0aW9uVmlzaWJsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaGFzVGl0bGVEaXNwbGF5KCkgfHwgdGhpcy5vdmVybGF5V2l0aFRhZ0ZpbHRlcnMoKS5sZW5ndGggPiAwIHx8IHRoaXMubWV0YWRhdGEuZGVzY3JpcHRvcigpLnNlYXJjaCk7XG5cbiAgICAvLyBjb21wb25lbnQgaW5wdXRzXG4gICAgcHVibGljIGNhcHRpb25Db21wb25lbnQgPSBpbnB1dDxUeXBlPGFueT4+KCk7XG4gICAgcHVibGljIGNvbHVtbkN1c3RvbUxhc3RDb21wb25lbnQgPSBpbnB1dDxUeXBlPGFueT4+KCk7XG4gICAgcHVibGljIGdsb2JhbEZpbHRlckZpZWxkc0lucHV0ID0gaW5wdXQ8c3RyaW5nW10gfCB1bmRlZmluZWQ+KHVuZGVmaW5lZCwge2FsaWFzOiAnZ2xvYmFsRmlsdGVyRmllbGRzJ30pO1xuXG4gICAgLy8gY2VsbCBjbGlja1xuICAgIHByaXZhdGUgY2VsbENsaWNrU3ViamVjdCA9IG5ldyBTdWJqZWN0PFRhYmxlQ2VsbENsaWNrRXZlbnQ8SXRlbT4+KCk7XG4gICAgcHVibGljIGlzQ2VsbENsaWNrT2JzZXJ2ZWQgPSBzaWduYWwodGhpcy5jZWxsQ2xpY2tTdWJqZWN0Lm9ic2VydmVkKTtcbiAgICBwdWJsaWMgaXNDZWxsQ2xpY2tFbmFibGVkID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jZWxsQ2xpY2tFbmFibGVkKCkgJiYgdGhpcy5pc0NlbGxDbGlja09ic2VydmVkKCkpO1xuXG4gICAgLy8gZXZlbnQgb3V0cHV0c1xuICAgIHB1YmxpYyB0YWJsZUxvYWQgPSBvdXRwdXQ8VGFibGVMb2FkRXZlbnQ+KCk7XG4gICAgcHVibGljIGNlbGxDbGljayA9IG91dHB1dEZyb21PYnNlcnZhYmxlKHRoaXMuY2VsbENsaWNrU3ViamVjdCk7XG4gICAgcHVibGljIHNlbGVjdGlvbkNoYW5nZSA9IG91dHB1dDxBcnJheTxJdGVtPj4oKTtcbiAgICBwdWJsaWMgY2FwdGlvbkNvbXBvbmVudEluc3RhbmNlID0gb3V0cHV0PGFueT4oKTtcbiAgICBwdWJsaWMgY29sdW1uQ3VzdG9tTGFzdENvbXBvbmVudEluc3RhbmNlID0gb3V0cHV0PGFueT4oKTtcbiAgICBwdWJsaWMgcm93UmVvcmRlciA9IG91dHB1dDxUYWJsZVJvd1Jlb3JkZXJFdmVudD4oKTtcblxuICAgIC8vIGNvbnRlbnQgYW5kIHZpZXcgcXVlcmllc1xuICAgIHB1YmxpYyB0ZW1wbGF0ZXMgPSBjb250ZW50Q2hpbGRyZW4oVGVtcGxhdGVEaXJlY3RpdmUpO1xuICAgIHB1YmxpYyBjb21wb25lbnRzID0gdmlld0NoaWxkcmVuKENvbXBvbmVudERpcmVjdGl2ZTxhbnk+KTtcbiAgICBwdWJsaWMgcHJpbWVUYWJsZSA9IHZpZXdDaGlsZChUYWJsZSk7XG5cbiAgICAvLyB0ZW1wbGF0ZXNcbiAgICBwdWJsaWMgY2FwdGlvblRlbXBsYXRlOiBTaWduYWw8VGVtcGxhdGVSZWY8YW55PiB8IG51bGw+ID0gY29tcHV0ZWQoKCkgPT4gZmluZFRlbXBsYXRlQnlOYW1lKFsuLi50aGlzLnRlbXBsYXRlcygpXSwgJ2NhcHRpb24nKSk7XG4gICAgcHVibGljIGNvbHVtbkN1c3RvbUxhc3RUZW1wbGF0ZTogU2lnbmFsPFRlbXBsYXRlUmVmPGFueT4gfCBudWxsPiA9IGNvbXB1dGVkKCgpID0+IGZpbmRUZW1wbGF0ZUJ5TmFtZShbLi4udGhpcy50ZW1wbGF0ZXMoKV0sICdjb2x1bW5DdXN0b21MYXN0JykpO1xuICAgIHB1YmxpYyBmb290ZXJUZW1wbGF0ZTogU2lnbmFsPFRlbXBsYXRlUmVmPGFueT4gfCBudWxsPiA9IGNvbXB1dGVkKCgpID0+IGZpbmRUZW1wbGF0ZUJ5TmFtZShbLi4udGhpcy50ZW1wbGF0ZXMoKV0sICdmb290ZXInKSk7XG4gICAgcHVibGljIHJvd0V4cGFuZFRlbXBsYXRlOiBTaWduYWw8VGVtcGxhdGVSZWY8YW55PiB8IG51bGw+ID0gY29tcHV0ZWQoKCkgPT4gZmluZFRlbXBsYXRlQnlOYW1lKFsuLi50aGlzLnRlbXBsYXRlcygpXSwgJ3Jvd0V4cGFuZENvbnRlbnQnKSk7XG5cbiAgICAvLyBkYXRhIHByb3ZpZGVyIGFuZCBpdGVtc1xuICAgIHB1YmxpYyBpc0xhenkgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmRhdGFQcm92aWRlcigpPy5pc0xhenkgPT09IHRydWUpO1xuICAgIHB1YmxpYyBpc1BhZ2luYXRpb24gPSBjb21wdXRlZCgoKSA9PiB0aGlzLmRhdGEucGFnaW5hdGlvbk1vZGUoKSA9PT0gVGFibGVQYWdpbmF0aW9uTW9kZUVudW0uUGFnaW5hdGlvbik7XG4gICAgcHVibGljIHVzZVF1ZXJ5UGFyYW1zSW5pdGlhbGl6ZWQgPSBzaWduYWwoZmFsc2UpO1xuXG4gICAgLy8gdmlzdWFsXG4gICAgcHVibGljIGNsYXNzTmFtZSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgbGV0IGNsYXNzTmFtZSA9IHRoaXMubWV0YWRhdGEuZGVzY3JpcHRvcigpLmNsYXNzTmFtZSA/PyAnJztcbiAgICAgICAgc3dpdGNoICh0aGlzLm1ldGFkYXRhLmRlc2NyaXB0b3IoKS5zaXplKSB7XG4gICAgICAgICAgICBjYXNlIFRhYmxlU2l6ZUVudW0uU21hbGw6XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lICs9ICcgcC1kYXRhdGFibGUtc20nO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBUYWJsZVNpemVFbnVtLkxhcmdlOlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZSArPSAnIHAtZGF0YXRhYmxlLWxnJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5tZXRhZGF0YS5kZXNjcmlwdG9yKCkuaGFzR3JpZGxpbmVzKSB7XG4gICAgICAgICAgICBjbGFzc05hbWUgKz0gJyBwLWRhdGF0YWJsZS1ncmlkbGluZXMnO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjbGFzc05hbWU7XG4gICAgfSk7XG5cbiAgICAvLyBjb2x1bW5zXG4gICAgcHVibGljIHZpc2libGVDb2x1bW5zID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5wcmVmcy5jb2x1bW5zV2l0aFByZWZzKCkuZmlsdGVyKGNvbCA9PiBjb2wuaXNWaXNpYmxlKSk7XG4gICAgcHVibGljIGFyZUNvbHVtbnNSZW9yZGVyYWJsZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMucHJlZnMuY29sdW1uc1dpdGhQcmVmcygpLnNvbWUoY29sID0+IGNvbC5kZXNjcmlwdG9yLmlzUmVvcmRlcmFibGUpKTtcbiAgICBwdWJsaWMgYXJlQ29sdW1uc1RvZ2dsZWFibGUgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnByZWZzLmNvbHVtbnNXaXRoUHJlZnMoKS5zb21lKGNvbCA9PiBjb2wuZGVzY3JpcHRvci5pc1RvZ2dsZWFibGUpKTtcblxuICAgIC8vIGZpbHRlciwgc29ydFxuICAgIHB1YmxpYyBoYXNDb2x1bW5GaWx0ZXJzID0gY29tcHV0ZWQoXG4gICAgICAgICgpID0+XG4gICAgICAgICAgICAodGhpcy5tZXRhZGF0YS5kZWZhdWx0RmlsdGVyRGlzcGxheVR5cGUgPT09IEZpbHRlckRpc3BsYXlUeXBlRW51bS5PdmVybGF5V2l0aFRhZyAmJlxuICAgICAgICAgICAgICAgIHRoaXMubWV0YWRhdGEuZmlsdGVyRGVzY3JpcHRvcnMoKS5zb21lKGQgPT4gZC5kaXNwbGF5VHlwZSA9PT0gRmlsdGVyRGlzcGxheVR5cGVFbnVtLkNvbHVtbikpIHx8XG4gICAgICAgICAgICAodGhpcy5tZXRhZGF0YS5kZWZhdWx0RmlsdGVyRGlzcGxheVR5cGUgPT09IEZpbHRlckRpc3BsYXlUeXBlRW51bS5Db2x1bW4gJiYgdGhpcy5tZXRhZGF0YS5maWx0ZXJEZXNjcmlwdG9ycygpLnNvbWUoZCA9PiBkLmRpc3BsYXlUeXBlID09IG51bGwpKVxuICAgICk7XG4gICAgcHVibGljIG92ZXJsYXlXaXRoVGFnRmlsdGVycyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgLy8gc3RhdGljYWxseSBkZWZpbmVkIGZpbHRlcnMgQU5EIGdlbmVyaWMgZmlsdGVyc1xuICAgICAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5tZXRhZGF0YVxuICAgICAgICAgICAgLmZpbHRlcnMoKVxuICAgICAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAgICAgICBkID0+XG4gICAgICAgICAgICAgICAgICAgIChkLmRlc2NyaXB0b3IuZGlzcGxheVR5cGUgPT0gbnVsbCAmJiB0aGlzLm1ldGFkYXRhLmRlZmF1bHRGaWx0ZXJEaXNwbGF5VHlwZSA9PT0gRmlsdGVyRGlzcGxheVR5cGVFbnVtLk92ZXJsYXlXaXRoVGFnKSB8fFxuICAgICAgICAgICAgICAgICAgICBkLmRlc2NyaXB0b3IuZGlzcGxheVR5cGUgPT09IEZpbHRlckRpc3BsYXlUeXBlRW51bS5PdmVybGF5V2l0aFRhZ1xuICAgICAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gZmlsdGVycy5jb25jYXQodGhpcy5tZXRhZGF0YS5nZW5lcmljRmlsdGVycygpKTtcbiAgICB9KTtcblxuICAgIHB1YmxpYyBoYXNDdXN0b21MYXN0Q29sdW1uID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5jb2x1bW5DdXN0b21MYXN0Q29tcG9uZW50KCkgfHwgdGhpcy5jb2x1bW5DdXN0b21MYXN0VGVtcGxhdGUoKSk7XG4gICAgcHVibGljIGhhc0xhc3RDb2x1bW4gPSBjb21wdXRlZCgoKSA9PiB0aGlzLmhhc0N1c3RvbUxhc3RDb2x1bW4oKSB8fCB0aGlzLmFyZUNvbHVtbnNUb2dnbGVhYmxlKCkgfHwgdGhpcy5hcmVDb2x1bW5zUmVvcmRlcmFibGUoKSk7XG5cbiAgICAvLyB0YWJsZSBsb2FkIHBhcmFtc1xuICAgIHByaXZhdGUgbGFzdExhenlMb2FkRXZlbnQ/OiBUYWJsZUxhenlMb2FkRXZlbnQ7XG4gICAgcHJpdmF0ZSBsYXN0UGFyYW1zV2l0aERlZmF1bHRzPzogRGF0YUxpc3RQYXJhbXM7XG5cbiAgICAvLyBvdGhlclxuICAgIHByaXZhdGUgbmF2aWdhdGlvbk91dE9mVGFibGVJblByb2dyZXNzID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBuYXZpZ2F0aW9uSW5UYWJsZUluUHJvZ3Jlc3MgPSBmYWxzZTtcblxuICAgIC8vIHN1YnNjcmlwdGlvbnMgYW5kIHJlZnNcbiAgICAjcHJldmlvdXNEYXRhUHJvdmlkZXI/OiBJVGFibGVEYXRhUHJvdmlkZXI8SXRlbSwgU2VydmljZSwgU29ydHMsIEZpbHRlcnM+O1xuXG4gICAgI2RhdGFQcm92aWRlckVhZ2VyRmlyc3RMb2FkID0gZWZmZWN0V2l0aERlcHMoW3RoaXMuZGF0YVByb3ZpZGVyXSwgKFtkYXRhUHJvdmlkZXJdKSA9PiB7XG4gICAgICAgIGlmIChkYXRhUHJvdmlkZXI/LmlzTGF6eSA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRoaXMubG9hZFRhYmxlV2l0aERhdGFQcm92aWRlcih0aGlzLm1ldGFkYXRhLmRlZmF1bHRQYXJhbXMoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4jcHJldmlvdXNEYXRhUHJvdmlkZXIgJiYgZGF0YVByb3ZpZGVyKSB7XG4gICAgICAgICAgICB0aGlzLnJlbG9hZCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy4jcHJldmlvdXNEYXRhUHJvdmlkZXIgPSBkYXRhUHJvdmlkZXI7XG4gICAgfSk7XG4gICAgI2RhdGFQcm92aWRlclJlbG9hZFN1YnNjcmlwdGlvbiA9IHRvT2JzZXJ2YWJsZSh0aGlzLmRhdGFQcm92aWRlcilcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoZHAgPT4gZHA/LnRhYmxlUmVsb2FkJCA/PyBvZih7fSkpLFxuICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKClcbiAgICAgICAgKVxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgIG5leHQ6IGUgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMucmVsb2FkKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAjcm91dGVRdWVyeVBhcmFtc1N1YnNjcmlwdGlvbiA9IHRvT2JzZXJ2YWJsZSh0aGlzLnVzZVF1ZXJ5UGFyYW1zKVxuICAgICAgICAucGlwZShcbiAgICAgICAgICAgIHN3aXRjaE1hcCh1c2VRcCA9PiAodXNlUXAgPyB0aGlzLnJvdXRlLnF1ZXJ5UGFyYW1zIDogTkVWRVIpKSxcbiAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZShxcCA9PiB7XG4gICAgICAgICAgICB0aGlzLmxvYWRUYWJsZUZyb21Sb3V0ZVVwZGF0ZShxcCk7XG4gICAgICAgIH0pO1xuICAgICNyb3V0ZXJFdmVudHNTdWJzY3JpcHRpb24gPSB0b09ic2VydmFibGUodGhpcy51c2VRdWVyeVBhcmFtcylcbiAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAodXNlUXAgPT4gKHVzZVFwID8gdGhpcy5yb3V0ZXIuZXZlbnRzIDogTkVWRVIpKSxcbiAgICAgICAgICAgIGZpbHRlcihcbiAgICAgICAgICAgICAgICBlID0+XG4gICAgICAgICAgICAgICAgICAgIChlIGluc3RhbmNlb2YgTmF2aWdhdGlvblN0YXJ0ICYmIGUudXJsLnNwbGl0KCc/JylbMF0uc3BsaXQoJyMnKVswXSAhPT0gdGhpcy5yb3V0ZXIudXJsLnNwbGl0KCc/JylbMF0uc3BsaXQoJyMnKVswXSkgfHxcbiAgICAgICAgICAgICAgICAgICAgZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQgfHxcbiAgICAgICAgICAgICAgICAgICAgZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25DYW5jZWwgfHxcbiAgICAgICAgICAgICAgICAgICAgZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25FcnJvclxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCgpXG4gICAgICAgIClcbiAgICAgICAgLnN1YnNjcmliZShlID0+IHtcbiAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbk91dE9mVGFibGVJblByb2dyZXNzID0gZSBpbnN0YW5jZW9mIE5hdmlnYXRpb25TdGFydDtcbiAgICAgICAgfSk7XG4gICAgI2FmdGVyTmV4dFJlbmRlclJlZiA9IGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNDZWxsQ2xpY2tPYnNlcnZlZC5zZXQodGhpcy5jZWxsQ2xpY2tTdWJqZWN0Lm9ic2VydmVkKTtcbiAgICB9KTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLm1ldGFkYXRhLnNldFNpZ25hbFNvdXJjZXModGhpcy5kZXNjcmlwdG9ySW5wdXQsIHRoaXMuZ2xvYmFsRmlsdGVyRmllbGRzSW5wdXQpO1xuICAgICAgICB0aGlzLmRhdGEuc2V0RGF0YVNvdXJjZXModGhpcy5pdGVtcywgdGhpcy5yZXN1bHQsIHRoaXMuZGF0YVByb3ZpZGVyLCB0aGlzLmxvYWRpbmdJbnB1dCk7XG4gICAgfVxuXG4gICAgcHVibGljIHJlbG9hZChlbWl0RXZlbnQ/OiBUYWJsZVJlbG9hZEV2ZW50PFNvcnRzLCBGaWx0ZXJzPik6IHZvaWQge1xuICAgICAgICBjb25zdCBwYXJhbXMgPSBlbWl0RXZlbnQ/LnBhcmFtcyA/IChlbWl0RXZlbnQ/LnBhcmFtcyBhcyBEYXRhTGlzdFBhcmFtcykgOiBlbWl0RXZlbnQ/LnJlc2V0UGFyYW1zID8gdW5kZWZpbmVkIDogdGhpcy5sYXN0UGFyYW1zV2l0aERlZmF1bHRzO1xuICAgICAgICBjb25zdCByZWxvYWRQYXJhbXMgPSBtZXJnZURhdGFMaXN0UGFyYW1zV2l0aERlZmF1bHRzKHBhcmFtcyA/PyB7fSwgdGhpcy5tZXRhZGF0YS5kZWZhdWx0UGFyYW1zKCkpO1xuICAgICAgICB0aGlzLmxvYWRUYWJsZVdpdGhEYXRhUHJvdmlkZXIocmVsb2FkUGFyYW1zLCBlbWl0RXZlbnQ/LmVtaXRFdmVudCA/PyBmYWxzZSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uVGFibGVMYXp5TG9hZChldmVudDogVGFibGVMYXp5TG9hZEV2ZW50KSB7XG4gICAgICAgIHRoaXMubGFzdExhenlMb2FkRXZlbnQgPSBldmVudDtcblxuICAgICAgICBjb25zdCBwYXJhbXMgPSBmcm9tVGFibGVMb2FkVG9EYXRhTGlzdFBhcmFtcyhldmVudCk7XG5cbiAgICAgICAgaWYgKHRoaXMudXNlUXVlcnlQYXJhbXMoKSkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLm5hdmlnYXRpb25PdXRPZlRhYmxlSW5Qcm9ncmVzcyAmJiAhdGhpcy5uYXZpZ2F0aW9uSW5UYWJsZUluUHJvZ3Jlc3MpIHtcbiAgICAgICAgICAgICAgICAvLyB0aGlzIGNoZWNrIGlzIG5lY2Vzc2FyeTogZnJvbSBzb21lIHJlYXNvbiwgcHJpbWVORyBjb21taXRzIG9uZSBsYXN0IGxhenkgbG9hZCBldmVudCB3aGVuZXZlciBhbnkgYW5ndWxhciByb3V0ZXIgbmF2aWdhdGlvbiBvY2N1cnNcbiAgICAgICAgICAgICAgICB0aGlzLm5hdmlnYXRpb25JblRhYmxlSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3UGFyYW1zID0gZGF0YUxpc3RQYXJhbXNUb1VybFF1ZXJ5KHBhcmFtcywgdGhpcy5tZXRhZGF0YS5kZWZhdWx0UGFyYW1zKCksIHtwcmVwZW5kRmlsdGVyTmFtZTogdGhpcy5maWx0ZXJLZXlQcmVwZW5kLCBza2lwUHJlc2V0RGVmYXVsdHNMaW1pdDogdHJ1ZX0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1BhcmFtc1dpdGhQYXJhbXNUb1JlbW92ZSA9IHsuLi5uZXdQYXJhbXN9O1xuICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRRcCA9IHRoaXMucm91dGUuc25hcHNob3QucXVlcnlQYXJhbXM7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRRcCkge1xuICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhjdXJyZW50UXApXG4gICAgICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKGsgPT4gKGsuc3RhcnRzV2l0aCh0aGlzLmZpbHRlcktleVByZXBlbmQpIHx8IFsnb2Zmc2V0JywgJ2xpbWl0JywgJ3NvcnQnLCAncSddLmluZGV4T2YoaykgPj0gMCkgJiYgbmV3UGFyYW1zW2tdID09PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgICAgICAuZm9yRWFjaChrID0+IChuZXdQYXJhbXNXaXRoUGFyYW1zVG9SZW1vdmVba10gPSBudWxsKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXJcbiAgICAgICAgICAgICAgICAgICAgLm5hdmlnYXRlKFtdLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVwbGFjZVVybDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiBuZXdQYXJhbXNXaXRoUGFyYW1zVG9SZW1vdmUsXG4gICAgICAgICAgICAgICAgICAgICAgICBxdWVyeVBhcmFtc0hhbmRsaW5nOiAnbWVyZ2UnXG4gICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubmF2aWdhdGlvbkluVGFibGVJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zV2l0aERlZmF1bHRzID0gbWVyZ2VEYXRhTGlzdFBhcmFtc1dpdGhEZWZhdWx0cyhwYXJhbXMsIHRoaXMubWV0YWRhdGEuZGVmYXVsdFBhcmFtcygpKTtcbiAgICAgICAgICAgIHRoaXMuZGF0YS5zZXRQYXJhbXMocGFyYW1zV2l0aERlZmF1bHRzKTtcbiAgICAgICAgICAgIHRoaXMubG9hZFRhYmxlV2l0aERhdGFQcm92aWRlcihwYXJhbXNXaXRoRGVmYXVsdHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uVGFibGVGaWx0ZXIoZXZlbnQ6IFRhYmxlRmlsdGVyRXZlbnQpIHtcbiAgICAgICAgaWYgKHRoaXMudXNlUXVlcnlQYXJhbXMoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IGZyb21UYWJsZUxvYWRUb0RhdGFMaXN0UGFyYW1zKHtmaWx0ZXJzOiBldmVudC5maWx0ZXJzfSk7XG4gICAgICAgIGNvbnN0IHBhcmFtc1dpdGhEZWZhdWx0cyA9IG1lcmdlRGF0YUxpc3RQYXJhbXNXaXRoRGVmYXVsdHMocGFyYW1zLCB0aGlzLm1ldGFkYXRhLmRlZmF1bHRQYXJhbXMoKSk7XG5cbiAgICAgICAgLy8gaWYgdGFibGUgZG9lc24ndCB1c2UgbGF6eSBsb2FkaW5nLCBmaWx0ZXIgcGFyYW1zIG5lZWQgdG8gYmUgc2V0IGhlcmVcbiAgICAgICAgLy8gYmVjYXVzZSB0aGUgb25UYWJsZUxhenlMb2FkIGV2ZW50IGlzIG5vdCBlbWl0dGVkXG4gICAgICAgIGlmICghdGhpcy5pc0xhenkoKSkge1xuICAgICAgICAgICAgdGhpcy5kYXRhLnNldFBhcmFtcyhwYXJhbXNXaXRoRGVmYXVsdHMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG9uQ2VsbENsaWNrKGV2ZW50OiBFdmVudCwgY29sOiBDb2x1bW5EZXNjcmlwdG9yPGFueSwgSXRlbT4sIGl0ZW06IEl0ZW0sIGlkeDogbnVtYmVyKSB7XG4gICAgICAgIGlmICghdGhpcy5pc0NlbGxDbGlja0VuYWJsZWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhYmxlRXZlbnQ6IFRhYmxlQ2VsbENsaWNrRXZlbnQ8SXRlbT4gPSB7XG4gICAgICAgICAgICBjb2x1bW46IGNvbCxcbiAgICAgICAgICAgIHJvd0l0ZW06IGl0ZW0sXG4gICAgICAgICAgICByb3dJbmRleDogaWR4LFxuICAgICAgICAgICAgZXZlbnQ6IGV2ZW50XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuY2VsbENsaWNrU3ViamVjdC5uZXh0KHRhYmxlRXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblNlbGVjdGlvbkNoYW5nZShldmVudDogQXJyYXk8SXRlbT4pIHtcbiAgICAgICAgdGhpcy5kYXRhLnNlbGVjdGVkSXRlbXMuc2V0KGV2ZW50KTtcbiAgICAgICAgdGhpcy5zZWxlY3Rpb25DaGFuZ2UuZW1pdChldmVudCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUm93UmVvcmRlcihldmVudDogVGFibGVSb3dSZW9yZGVyRXZlbnQpIHtcbiAgICAgICAgdGhpcy5yb3dSZW9yZGVyLmVtaXQoZXZlbnQpO1xuICAgIH1cblxuICAgIHByaXZhdGUgbG9hZFRhYmxlV2l0aERhdGFQcm92aWRlcihwYXJhbXNXaXRoRGVmYXVsdHM6IERhdGFMaXN0UGFyYW1zLCBlbWl0RXZlbnQgPSB0cnVlKSB7XG4gICAgICAgIGNvbnN0IGlzRmV0Y2hlZCA9IHRoaXMuZGF0YS5mZXRjaFdpdGhEYXRhUHJvdmlkZXIocGFyYW1zV2l0aERlZmF1bHRzLCBlcnJvciA9PiB7XG4gICAgICAgICAgICB0YWJsZU5vdGlmaWNhdGlvbkVycm9yKHRoaXMudHJhbnNsYXRlLCB0aGlzLm1lc3NhZ2VTZXJ2aWNlLCB0aGlzLm1ldGFkYXRhLmRlc2NyaXB0b3IoKSwgZXJyb3IpO1xuICAgICAgICAgICAgY29uc3QgY29tbW9uc0Vycm9yID0gZnJvbVN1YnNjcmliZUVycm9yKGVycm9yLCAnVGFibGVDb21wb25lbnRFcnJvcicsIHtcbiAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtc1dpdGhEZWZhdWx0c1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmxvZ2dlci5sb2coY29tbW9uc0Vycm9yLCBnZXRFcnJvckxvZ0xldmVsKGNvbW1vbnNFcnJvcikpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoaXNGZXRjaGVkKSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RQYXJhbXNXaXRoRGVmYXVsdHMgPSBwYXJhbXNXaXRoRGVmYXVsdHM7XG4gICAgICAgICAgICBpZiAoZW1pdEV2ZW50KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdGFibGVFdmVudDogVGFibGVMb2FkRXZlbnQgPSB7XG4gICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsRXZlbnQ6IHRoaXMubGFzdExhenlMb2FkRXZlbnQsXG4gICAgICAgICAgICAgICAgICAgIHBhcmFtczogcGFyYW1zV2l0aERlZmF1bHRzXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB0aGlzLnRhYmxlTG9hZC5lbWl0KHRhYmxlRXZlbnQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBsb2FkVGFibGVGcm9tUm91dGVVcGRhdGUodXJsUGFyYW1zOiBQYXJhbXMpIHtcbiAgICAgICAgY29uc3QgcGFyYW1zV2l0aERlZmF1bHRzID0gbWVyZ2VEYXRhTGlzdFBhcmFtc1dpdGhEZWZhdWx0cyhcbiAgICAgICAgICAgIGZyb21VcmxRdWVyeVRvRGF0YUxpc3RQYXJhbXModXJsUGFyYW1zLCB7XG4gICAgICAgICAgICAgICAgcHJlcGVuZEZpbHRlck5hbWU6IHRoaXMuZmlsdGVyS2V5UHJlcGVuZCxcbiAgICAgICAgICAgICAgICBzZWFyY2hBc0dsb2JhbDogdHJ1ZVxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0aGlzLm1ldGFkYXRhLmRlZmF1bHRQYXJhbXMoKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmRhdGEuc2V0UGFyYW1zKHBhcmFtc1dpdGhEZWZhdWx0cywgdHJ1ZSk7XG4gICAgICAgIHRoaXMubG9hZFRhYmxlV2l0aERhdGFQcm92aWRlcihwYXJhbXNXaXRoRGVmYXVsdHMpO1xuICAgIH1cbn1cbiIsIjxkaXY+XG4gICAgPCEtLSBNVVNUIE5PVCB1c2Ugb2JzZXJ2YWJsZSBmb3IgdmFsdWUgd2hlbiB1c2luZyB2aXJ0dWFsIHNjcm9sbCAtIGRvZXMgbm90IHdvcmsgZm9yIHNvbWUgcmVhc29uIC0tPlxuICAgIEBpZiAoZGF0YS5pc0FsbFBhZ2luYXRpb25NZXRhSW5pdGlhbGl6ZWQoKSkge1xuICAgICAgICA8cC10YWJsZVxuICAgICAgICAgICAgW3ZhbHVlXT1cImRhdGEuZGF0YSgpXCJcbiAgICAgICAgICAgIFtkYXRhS2V5XT1cIm1ldGFkYXRhLmRlc2NyaXB0b3IoKS50cmFja1Byb3BlcnR5XCJcbiAgICAgICAgICAgIFtsYXp5XT1cImlzTGF6eSgpXCJcbiAgICAgICAgICAgIFtsb2FkaW5nXT1cImRhdGEubG9hZGluZygpXCJcbiAgICAgICAgICAgIFtwYWdpbmF0b3JdPVwiaXNQYWdpbmF0aW9uKClcIlxuICAgICAgICAgICAgW3Jvd3NdPVwiZGF0YS5yb3dzKClcIlxuICAgICAgICAgICAgW2ZpcnN0XT1cImRhdGEub2Zmc2V0KClcIlxuICAgICAgICAgICAgW3RvdGFsUmVjb3Jkc109XCJkYXRhLmNvdW50KClcIlxuICAgICAgICAgICAgW3Jvd3NQZXJQYWdlT3B0aW9uc109XCJtZXRhZGF0YS5yb3dzUGVyUGFnZU9wdGlvbnMoKVwiXG4gICAgICAgICAgICBbc2hvd0N1cnJlbnRQYWdlUmVwb3J0XT1cInRydWVcIlxuICAgICAgICAgICAgW2N1cnJlbnRQYWdlUmVwb3J0VGVtcGxhdGVdPVwiJ21uZ1RhYmxlLnBhZ2luYXRpb25Nc2cnIHwgdHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFttdWx0aVNvcnRNZXRhXT1cImRhdGEuc29ydE1ldGEoKVwiXG4gICAgICAgICAgICBbZmlsdGVyc109XCJkYXRhLmZpbHRlck1ldGEoKVwiXG4gICAgICAgICAgICBbZ2xvYmFsRmlsdGVyRmllbGRzXT1cIm1ldGFkYXRhLnNlYXJjaEZpZWxkcygpXCJcbiAgICAgICAgICAgIHNvcnRNb2RlPVwibXVsdGlwbGVcIlxuICAgICAgICAgICAgW3NlbGVjdGlvbl09XCJbXVwiXG4gICAgICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VsZWN0aW9uQ2hhbmdlKCRldmVudClcIlxuICAgICAgICAgICAgW3NlbGVjdGlvbk1vZGVdPVwic2VsZWN0aW9uRW5hYmxlZCgpID8gc2VsZWN0aW9uTW9kZSgpIDogbnVsbFwiXG4gICAgICAgICAgICBbc2Nyb2xsYWJsZV09XCJ0cnVlXCJcbiAgICAgICAgICAgIHNjcm9sbEhlaWdodD1cImZsZXhcIlxuICAgICAgICAgICAgW3Jvd0hvdmVyXT1cIm1ldGFkYXRhLmRlc2NyaXB0b3IoKS5oYXNIb3ZlclwiXG4gICAgICAgICAgICBbc3R5bGVDbGFzc109XCJjbGFzc05hbWUoKVwiXG4gICAgICAgICAgICBbcmVzaXphYmxlQ29sdW1uc109XCJtZXRhZGF0YS5kZXNjcmlwdG9yKCkuaGFzUmVzaXphYmxlQ29sdW1uc1wiXG4gICAgICAgICAgICBbY29sdW1uUmVzaXplTW9kZV09XCJtZXRhZGF0YS5kZXNjcmlwdG9yKCkuY29sdW1uUmVzaXplTW9kZSA/PyAnZXhwYW5kJ1wiXG4gICAgICAgICAgICBbcmVvcmRlcmFibGVDb2x1bW5zXT1cImFyZUNvbHVtbnNSZW9yZGVyYWJsZSgpXCJcbiAgICAgICAgICAgIHBhZ2luYXRvckRyb3Bkb3duQXBwZW5kVG89XCJib2R5XCJcbiAgICAgICAgICAgIFtjb2x1bW5zXT1cInZpc2libGVDb2x1bW5zKClcIlxuICAgICAgICAgICAgW2V4cGFuZGVkUm93S2V5c109XCJleHBhbmRlZFJvd0tleXMoKVwiXG4gICAgICAgICAgICAob25Db2xSZXNpemUpPVwicHJlZnMub25Db2x1bW5SZXNpemUoJGV2ZW50KVwiXG4gICAgICAgICAgICAob25Db2xSZW9yZGVyKT1cInByZWZzLm9uQ29sdW1uUmVvcmRlcigkZXZlbnQpXCJcbiAgICAgICAgICAgIChvbkxhenlMb2FkKT1cIm9uVGFibGVMYXp5TG9hZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChvbkZpbHRlcik9XCJvblRhYmxlRmlsdGVyKCRldmVudClcIlxuICAgICAgICAgICAgKG9uUm93UmVvcmRlcik9XCJvblJvd1Jlb3JkZXIoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjYXB0aW9uPlxuICAgICAgICAgICAgICAgIEBpZiAoaXNDYXB0aW9uVmlzaWJsZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAob3ZlcmxheVdpdGhUYWdGaWx0ZXJzKCkubGVuZ3RoID4gMCB8fCBtZXRhZGF0YS5kZXNjcmlwdG9yKCkuc2VhcmNoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGRlZmVyIChvbiBpZGxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtbmctdGFibGUtZmlsdGVyLW92ZXJsYXktd2l0aC10YWdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0aXRsZV09XCJtZXRhZGF0YS5kZXNjcmlwdG9yKCkudGl0bGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21ldGFkYXRhXT1cIm92ZXJsYXlXaXRoVGFnRmlsdGVycygpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtnZW5lcmljRmlsdGVyRGVzY3JpcHRvcl09XCJtZXRhZGF0YS5nZW5lcmljRmlsdGVyRGVzY3JpcHRvcigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttb2RlbF09XCJtZXRhZGF0YS5kZXNjcmlwdG9yKCkubW9kZWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VuYWJsZVNlYXJjaF09XCJtZXRhZGF0YS5kZXNjcmlwdG9yKCkuc2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hdPVwiZGF0YS5zZWFyY2hNZXRhKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaExpbWl0V29yZE1heF09XCJtZXRhZGF0YS5kZXNjcmlwdG9yKCkuc2VhcmNoTGltaXRNYXhXb3Jkc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZW5hYmxlQ2FzZVNlbnNpdGl2ZV09XCJpc0xhenkoKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChoYXNUaXRsZURpc3BsYXkoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBtbmdUZW1wbGF0ZT1cInRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjYXB0aW9uVGVtcGxhdGVPckNvbXBvbmVudE9yVGl0bGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21uZy10YWJsZS1maWx0ZXItb3ZlcmxheS13aXRoLXRhZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY2FwdGlvblRlbXBsYXRlT3JDb21wb25lbnRPclRpdGxlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI2NhcHRpb25UZW1wbGF0ZU9yQ29tcG9uZW50T3JUaXRsZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNhcHRpb25UZW1wbGF0ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjYXB0aW9uVGVtcGxhdGUoKVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2UgaWYgKGNhcHRpb25Db21wb25lbnQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFttbmdDb21wb25lbnRdPVwiY2FwdGlvbkNvbXBvbmVudCgpXCIgKGluc3RhbmNlQ3JlYXRlZCk9XCJjYXB0aW9uQ29tcG9uZW50SW5zdGFuY2UuZW1pdCgkZXZlbnQpXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSBpZiAobWV0YWRhdGEuZGVzY3JpcHRvcigpLnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz1cInAtMCBtLTBcIj57eyBtZXRhZGF0YS5kZXNjcmlwdG9yKCkudGl0bGUhIHwgdHJhbnNsYXRlIH19PC9oNT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNoZWFkZXI+XG4gICAgICAgICAgICAgICAgQGlmICghbWV0YWRhdGEuZGVzY3JpcHRvcigpLmhpZGVIZWFkZXIpIHtcbiAgICAgICAgICAgICAgICAgICAgPHRyIGNsYXNzPVwibW5nLXRhYmxlLWhlYWRlclwiIFtjbGFzc109XCJtZXRhZGF0YS5kZXNjcmlwdG9yKCkuaGVhZGVyQ2xhc3NOYW1lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKHNlbGVjdGlvbkVuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc2VsZWN0aW9uTW9kZSgpID09PSAnbXVsdGlwbGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT1cIm1pbi13aWR0aDogMzZweFwiIHBGcm96ZW5Db2x1bW4gW2Zyb3plbl09XCJtZXRhZGF0YS5kZXNjcmlwdG9yKCkuc2VsZWN0aW9uQ29sdW1uRnJvemVuID8/IHRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwLXRhYmxlSGVhZGVyQ2hlY2tib3ggLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBXZSBuZWVkIHRoZSBsaW5lIGJlbG93LCBiZWNhdXNlIG90aGVyd2lzZSBwLXRhYmxlUmFkaW9CdXR0b24gc2hpZnRzIHRoZSByZXN0IG9mIHRoZSBjb2x1bW5zIGluIHRhYmxlIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJtaW4td2lkdGg6IDM2cHhcIiBwRnJvemVuQ29sdW1uIFtmcm96ZW5dPVwibWV0YWRhdGEuZGVzY3JpcHRvcigpLnNlbGVjdGlvbkNvbHVtbkZyb3plbiA/PyB0cnVlXCI+PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKG1ldGFkYXRhLmRlc2NyaXB0b3IoKS5yb3dFeHBhbmRhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgcEZyb3plbkNvbHVtbiBbZnJvemVuXT1cInRydWVcIj48L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChyb3dSZW9yZGVyRW5hYmxlZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbCBvZiB2aXNpYmxlQ29sdW1ucygpOyB0cmFjayBjb2wuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI3NvcnRhYmxlQ29sdW1uVEhUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1iZXR3ZWVuIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29sLmRlc2NyaXB0b3IudGl0bGUgJiYgIWNvbC5kZXNjcmlwdG9yLnRpdGxlVXNlTW9kZWxCYXNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gY29sLmRlc2NyaXB0b3IudGl0bGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoY29sLmRlc2NyaXB0b3IudGl0bGUgPz8gY29sLmRlc2NyaXB0b3IucHJvcGVydHkgfCBtbmdJMThuUHJvcGVydHk6IG1ldGFkYXRhLmRlc2NyaXB0b3IoKS5tb2RlbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtc29ydEljb24gW2ZpZWxkXT1cImNvbC5zb3J0Py5wcm9wZXJ0eVwiIGNsYXNzPVwiZmxleFwiPjwvcC1zb3J0SWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgI25vblNvcnRhYmxlQ29sdW1uVEhUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb2wuZGVzY3JpcHRvci50aXRsZSAmJiAhY29sLmRlc2NyaXB0b3IudGl0bGVVc2VNb2RlbEJhc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IGNvbC5kZXNjcmlwdG9yLnRpdGxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoY29sLmRlc2NyaXB0b3IudGl0bGUgPz8gY29sLmRlc2NyaXB0b3IucHJvcGVydHkgfCBtbmdJMThuUHJvcGVydHk6IG1ldGFkYXRhLmRlc2NyaXB0b3IoKS5tb2RlbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkgfCB0cmFuc2xhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoY29sLmRlc2NyaXB0b3IuaXNSZW9yZGVyYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBSZXNpemFibGVDb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBSZW9yZGVyYWJsZUNvbHVtblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2lkXT1cImNvbC5kZXNjcmlwdG9yLnByb3BlcnR5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwU29ydGFibGVDb2x1bW5dPVwiY29sLnNvcnQ/LnByb3BlcnR5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwU29ydGFibGVDb2x1bW5EaXNhYmxlZF09XCIhY29sLnNvcnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbC53aWR0aCA/IGNvbC53aWR0aCArICdweCcgOiBjb2wuZGVzY3JpcHRvci53aWR0aCArICclJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cImNvbC53aWR0aCA/IG51bGwgOiBjb2wuZGVzY3JpcHRvci5taW5XaWR0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUubWF4LXdpZHRoLnB4XT1cImNvbC53aWR0aCA/PyBjb2wuZGVzY3JpcHRvci5tYXhXaWR0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiY29sLmRlc2NyaXB0b3IuaGVhZGVyQ2xhc3NOYW1lIHwgbW5nVGFibGVDb2x1bW5GaWx0ZXJDbGFzczogY29sLmZpbHRlcj8uZGVzY3JpcHRvciA6IGhhc0NvbHVtbkZpbHRlcnMoKSAmJiAhY29sLndpZHRoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29sLnNvcnQgPyBzb3J0YWJsZUNvbHVtblRIVGVtcGxhdGUgOiBub25Tb3J0YWJsZUNvbHVtblRIVGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwUmVzaXphYmxlQ29sdW1uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaWRdPVwiY29sLmRlc2NyaXB0b3IucHJvcGVydHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BTb3J0YWJsZUNvbHVtbl09XCJjb2wuc29ydD8ucHJvcGVydHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BTb3J0YWJsZUNvbHVtbkRpc2FibGVkXT1cIiFjb2wuc29ydFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGhdPVwiY29sLndpZHRoID8gY29sLndpZHRoICsgJ3B4JyA6IGNvbC5kZXNjcmlwdG9yLndpZHRoICsgJyUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiY29sLndpZHRoID8gbnVsbCA6IGNvbC5kZXNjcmlwdG9yLm1pbldpZHRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGgucHhdPVwiY29sLndpZHRoID8/IGNvbC5kZXNjcmlwdG9yLm1heFdpZHRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzc109XCJjb2wuZGVzY3JpcHRvci5oZWFkZXJDbGFzc05hbWUgfCBtbmdUYWJsZUNvbHVtbkZpbHRlckNsYXNzOiBjb2wuZmlsdGVyPy5kZXNjcmlwdG9yIDogaGFzQ29sdW1uRmlsdGVycygpICYmICFjb2wud2lkdGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2wuc29ydCA/IHNvcnRhYmxlQ29sdW1uVEhUZW1wbGF0ZSA6IG5vblNvcnRhYmxlQ29sdW1uVEhUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaGFzTGFzdENvbHVtbigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5taW4td2lkdGgucHhdPVwiY29sdW1uTGFzdE1pbldpZHRoKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRnJvemVuQ29sdW1uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmcm96ZW5dPVwibWV0YWRhdGEuZGVzY3JpcHRvcigpLmFjdGlvbkNvbHVtbkZyb3plbiA/PyBhcmVDb2x1bW5zVG9nZ2xlYWJsZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25Gcm96ZW49XCJyaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibW5nLXRhYmxlLWNvbHVtbi1jdXN0b20tbGFzdCB0ZXh0LXJpZ2h0IVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGFyZUNvbHVtbnNUb2dnbGVhYmxlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBkZWZlciAob24gaWRsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxtbmctdGFibGUtY29sdW1uLXRvZ2dsZSBbY29sdW1uc109XCJ2aXNpYmxlQ29sdW1ucygpXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIEBpZiAoaGFzQ29sdW1uRmlsdGVycygpKSB7XG4gICAgICAgICAgICAgICAgICAgIDx0ciBjbGFzcz1cIm1uZy1jb2x1bW4tZmlsdGVyLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBXZSBuZWVkIHRoZSBsaW5lIGJlbG93LCBiZWNhdXNlIG90aGVyd2lzZSBwLXRhYmxlUmFkaW9CdXR0b24gc2hpZnRzIHRoZSByZXN0IG9mIHRoZSBjb2x1bW5zIGluIHRhYmxlIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChzZWxlY3Rpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9XCJtaW4td2lkdGg6IDM2cHhcIiBwRnJvemVuQ29sdW1uIFtmcm96ZW5dPVwibWV0YWRhdGEuZGVzY3JpcHRvcigpLnNlbGVjdGlvbkNvbHVtbkZyb3plbiA/PyB0cnVlXCI+PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAocm93UmVvcmRlckVuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiPjwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKG1ldGFkYXRhLmRlc2NyaXB0b3IoKS5yb3dFeHBhbmRhYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCI+PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbCBvZiB2aXNpYmxlQ29sdW1ucygpOyB0cmFjayBjb2wuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzXT1cIidweC0xISAnICsgY29sLmZpbHRlcj8uZGVzY3JpcHRvcj8uY29sdW1uQ2xhc3NOYW1lIHwgbW5nVGFibGVDb2x1bW5GaWx0ZXJDbGFzczogY29sLmZpbHRlcj8uZGVzY3JpcHRvciA6IGhhc0NvbHVtbkZpbHRlcnMoKSAmJiAhY29sLndpZHRoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImNvbC53aWR0aFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS53aWR0aC4lXT1cImNvbC53aWR0aCA/IG51bGwgOiAoY29sLmZpbHRlcj8uZGVzY3JpcHRvcj8uY29sdW1uV2lkdGggPz8gY29sLmRlc2NyaXB0b3Iud2lkdGggPz8gbnVsbClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cImNvbC53aWR0aCA/IG51bGwgOiAoY29sLmZpbHRlcj8uZGVzY3JpcHRvcj8uY29sdW1uTWluV2lkdGggPz8gY29sLmRlc2NyaXB0b3IubWluV2lkdGgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLm1heC13aWR0aC5weF09XCJjb2wud2lkdGggPz8gY29sLmRlc2NyaXB0b3IubWF4V2lkdGhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChjb2wuZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZGVmZXIgKG9uIGlkbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bW5nLXRhYmxlLWNvbHVtbi1maWx0ZXIgW21ldGFkYXRhXT1cImNvbC5maWx0ZXJcIj48L21uZy10YWJsZS1jb2x1bW4tZmlsdGVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaGFzTGFzdENvbHVtbigpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRoIHBGcm96ZW5Db2x1bW4gYWxpZ25Gcm96ZW49XCJyaWdodFwiIGNsYXNzPVwibW5nLXRhYmxlLWNvbHVtbi1jdXN0b20tbGFzdFwiIFtzdHlsZS5taW4td2lkdGgucHhdPVwiY29sdW1uTGFzdE1pbldpZHRoKClcIj48L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2JvZHkgbGV0LWl0ZW0gbGV0LWlkeD1cInJvd0luZGV4XCIgbGV0LWV4cGFuZGVkPVwiZXhwYW5kZWRcIj5cbiAgICAgICAgICAgICAgICA8dHJcbiAgICAgICAgICAgICAgICAgICAgW3BSZW9yZGVyYWJsZVJvd109XCJpZHhcIlxuICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhLmRlc2NyaXB0b3IoKS5yb3dDbGFzc05hbWUgfCBtbmdDbGFzc01hcDogbWV0YWRhdGEuZGVzY3JpcHRvcigpLnJvd0NsYXNzTmFtZU1hcEZuIDogaXRlbSB8IG1uZ0xvY2FsZURlZmF1bHRSb3dDbGFzczogbWV0YWRhdGEuZGVzY3JpcHRvcigpIDogaXRlbVxuICAgICAgICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChzZWxlY3Rpb25FbmFibGVkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc2VsZWN0aW9uTW9kZSgpID09PSAnbXVsdGlwbGUnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIHN0eWxlPVwibWluLXdpZHRoOiAzNnB4XCIgcEZyb3plbkNvbHVtbiBbZnJvemVuXT1cIm1ldGFkYXRhLmRlc2NyaXB0b3IoKS5zZWxlY3Rpb25Db2x1bW5Gcm96ZW4gPz8gdHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cC10YWJsZUNoZWNrYm94IFt2YWx1ZV09XCJpdGVtXCI+PC9wLXRhYmxlQ2hlY2tib3g+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBzdHlsZT1cIm1pbi13aWR0aDogMzZweFwiIHBGcm96ZW5Db2x1bW4gW2Zyb3plbl09XCJtZXRhZGF0YS5kZXNjcmlwdG9yKCkuc2VsZWN0aW9uQ29sdW1uRnJvemVuID8/IHRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHAtdGFibGVSYWRpb0J1dHRvbiBbdmFsdWVdPVwiaXRlbVwiPjwvcC10YWJsZVJhZGlvQnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgQGlmIChtZXRhZGF0YS5kZXNjcmlwdG9yKCkucm93RXhwYW5kYWJsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBsZXQgZXhwYW5kUHJvcCA9IG1ldGFkYXRhLmRlc2NyaXB0b3IoKS5yb3dFeHBhbmRhYmxlUHJvcGVydHk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghZXhwYW5kUHJvcCB8fCBpdGVtW2V4cGFuZFByb3BdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BSb3dUb2dnbGVyXT1cIml0ZW1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91bmRlZD1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dD1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtbmctYnV0dG9uLXNtXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uXT1cImV4cGFuZGVkID8gJ3BpIHBpLWNoZXZyb24tZG93bicgOiAncGkgcGktY2hldnJvbi1yaWdodCdcIj48L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBpZiAocm93UmVvcmRlckVuYWJsZWQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGkgcGktYmFyc1wiIHBSZW9yZGVyYWJsZVJvd0hhbmRsZT48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIEBmb3IgKGNvbCBvZiB2aXNpYmxlQ29sdW1ucygpOyB0cmFjayBjb2wuaWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvbkNlbGxDbGljaygkZXZlbnQsIGNvbC5kZXNjcmlwdG9yLCBpdGVtLCBpZHgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3NdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbC5kZXNjcmlwdG9yLmNsYXNzTmFtZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBtbmdDbGFzc01hcDogY29sLmRlc2NyaXB0b3IuY2xhc3NOYW1lTWFwRm4gOiBpdGVtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IG1uZ1RhYmxlQ29sdW1uRmlsdGVyQ2xhc3M6IGNvbC5maWx0ZXI/LmRlc2NyaXB0b3IgOiBoYXNDb2x1bW5GaWx0ZXJzKCkgJiYgIWNvbC53aWR0aFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmNsaWNrYWJsZV09XCJpc0NlbGxDbGlja0VuYWJsZWQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoXT1cImNvbC53aWR0aCA/IGNvbC53aWR0aCArICdweCcgOiBjb2wuZGVzY3JpcHRvci53aWR0aCArICclJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLm1pbi13aWR0aC5weF09XCJjb2wud2lkdGggPyBudWxsIDogY29sLmRlc2NyaXB0b3IubWluV2lkdGhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5tYXgtd2lkdGgucHhdPVwiY29sLndpZHRoID8/IGNvbC5kZXNjcmlwdG9yLm1heFdpZHRoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1uZy10YWJsZS1jb2x1bW4tdmFsdWUgW2Rlc2NyaXB0b3JdPVwiY29sLmRlc2NyaXB0b3JcIiBbaXRlbV09XCJpdGVtXCI+PC9tbmctdGFibGUtY29sdW1uLXZhbHVlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAaWYgKGhhc0xhc3RDb2x1bW4oKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHRkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJtbmctdGFibGUtY29sdW1uLWN1c3RvbS1sYXN0IGp1c3RpZnktZW5kIHRleHQtcmlnaHQhXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUubWluLXdpZHRoLnB4XT1cImNvbHVtbkxhc3RNaW5XaWR0aCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwRnJvemVuQ29sdW1uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25Gcm96ZW49XCJyaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Zyb3plbl09XCJtZXRhZGF0YS5kZXNjcmlwdG9yKCkuYWN0aW9uQ29sdW1uRnJvemVuID8/IHRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNvbHVtbkN1c3RvbUxhc3RUZW1wbGF0ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2x1bW5DdXN0b21MYXN0VGVtcGxhdGUoKTsgY29udGV4dDoge3Jvd0l0ZW06IGl0ZW0sIHJvd0luZGV4OiBpZHh9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSBpZiAoY29sdW1uQ3VzdG9tTGFzdENvbXBvbmVudCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgW21uZ0NvbXBvbmVudF09XCJjb2x1bW5DdXN0b21MYXN0Q29tcG9uZW50KClcIiAoaW5zdGFuY2VDcmVhdGVkKT1cImNvbHVtbkN1c3RvbUxhc3RDb21wb25lbnRJbnN0YW5jZS5lbWl0KCRldmVudClcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2V4cGFuZGVkcm93IGxldC1pdGVtPlxuICAgICAgICAgICAgICAgIEBpZiAobWV0YWRhdGEuZGVzY3JpcHRvcigpLnJvd0V4cGFuZGFibGUpIHtcbiAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgW2NvbFNwYW5dPVwibWV0YWRhdGEuZGVzY3JpcHRvcigpLnJvd0V4cGFuZGFibGVDb2xTcGFuXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChtZXRhZGF0YS5kZXNjcmlwdG9yKCkucm93RXhwYW5kYWJsZUNvbXBvbmVudFR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFttbmdDb21wb25lbnRdPVwibWV0YWRhdGEuZGVzY3JpcHRvcigpLnJvd0V4cGFuZGFibGVDb21wb25lbnRUeXBlXCIgW2lucHV0c109XCJ7aXRlbX1cIj4gPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyb3dFeHBhbmRUZW1wbGF0ZSgpOyBjb250ZXh0OiB7cm93SXRlbTogaXRlbX1cIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xvYWRpbmdpY29uPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKG1ldGFkYXRhLmRlc2NyaXB0b3IoKS5sb2FkaW5nSWNvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGkgW2NsYXNzXT1cIid0ZXh0LXdoaXRlIHRleHQtNHhsIHBpLXNwaW4gJyArIG1ldGFkYXRhLmRlc2NyaXB0b3IoKS5sb2FkaW5nSWNvblwiPjwvaT5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBAaWYgKG1ldGFkYXRhLmRlc2NyaXB0b3IoKS5sb2FkaW5nVGV4dCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQgdGV4dC13aGl0ZSB0ZXh0LWxnIGZvbnQtc2VtaWJvbGRcIiBbbmdDbGFzc109XCJ7J210LTMnOiBtZXRhZGF0YS5kZXNjcmlwdG9yKCkubG9hZGluZ0ljb259XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgbWV0YWRhdGEuZGVzY3JpcHRvcigpLmxvYWRpbmdUZXh0ID8/ICcnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjbG9hZGluZ2JvZHk+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8dGQgW2F0dHIuY29sc3Bhbl09XCJjb2x1bW5zQ29sc3BhbigpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibG9hZGluZy10ZXh0XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cC1za2VsZXRvbiBbbmdTdHlsZV09XCJ7d2lkdGg6ICcxMDAlJ31cIj48L3Atc2tlbGV0b24+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2VtcHR5bWVzc2FnZT5cbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBbYXR0ci5jb2xzcGFuXT1cImNvbHVtbnNDb2xzcGFuKClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdtbmdUYWJsZS5ub0l0ZW1zJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgQGlmIChmb290ZXJUZW1wbGF0ZSgpKSB7XG4gICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNzdW1tYXJ5PlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZm9vdGVyVGVtcGxhdGUoKTsgY29udGV4dDoge2RhdGE6IGRhdGEuZGF0YSgpLCB0b3RhbENvdW50OiBkYXRhLmNvdW50KCl9XCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9wLXRhYmxlPlxuICAgIH1cbjwvZGl2PlxuIl19","import { CommonsFeatureTypeEnum } from '@mediusinc/mng-commons/core';\nimport { COMMONS_TABLE_FEATURE_CONFIG_IT } from './services/table-feature-config.token';\n/**\n * Prepares providers for usage of the tableview functionalities.\n *\n * @returns {CommonsFeature} The `CommonsFeature` object with the layout configuration.\n */\nexport function withTable(config) {\n return {\n type: CommonsFeatureTypeEnum.Table,\n providers: [\n {\n provide: COMMONS_TABLE_FEATURE_CONFIG_IT,\n useValue: config\n }\n ]\n };\n}\n/**\n * Provides a list of providers for configuring a table feature. Useful for lazy-loading table chunk in child (lazy loaded routes).\n *\n * @param {TableFeatureConfig} [config] - An optional configuration object for the table feature.\n */\nexport function provideTableChild(config) {\n return [\n {\n provide: COMMONS_TABLE_FEATURE_CONFIG_IT,\n useValue: config\n }\n ];\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RhYmxlL3NyYy9wcm92aWRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBaUIsc0JBQXNCLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQztBQUVuRixPQUFPLEVBQUMsK0JBQStCLEVBQXFCLE1BQU0sdUNBQXVDLENBQUM7QUFFMUc7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxTQUFTLENBQUMsTUFBMkI7SUFDakQsT0FBTztRQUNILElBQUksRUFBRSxzQkFBc0IsQ0FBQyxLQUFLO1FBQ2xDLFNBQVMsRUFBRTtZQUNQO2dCQUNJLE9BQU8sRUFBRSwrQkFBK0I7Z0JBQ3hDLFFBQVEsRUFBRSxNQUFNO2FBQ25CO1NBQ0o7S0FDSixDQUFDO0FBQ04sQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsTUFBMkI7SUFDekQsT0FBTztRQUNIO1lBQ0ksT0FBTyxFQUFFLCtCQUErQjtZQUN4QyxRQUFRLEVBQUUsTUFBTTtTQUNuQjtLQUNKLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQcm92aWRlcn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7Q29tbW9uc0ZlYXR1cmUsIENvbW1vbnNGZWF0dXJlVHlwZUVudW19IGZyb20gJ0BtZWRpdXNpbmMvbW5nLWNvbW1vbnMvY29yZSc7XG5cbmltcG9ydCB7Q09NTU9OU19UQUJMRV9GRUFUVVJFX0NPTkZJR19JVCwgVGFibGVGZWF0dXJlQ29uZmlnfSBmcm9tICcuL3NlcnZpY2VzL3RhYmxlLWZlYXR1cmUtY29uZmlnLnRva2VuJztcblxuLyoqXG4gKiBQcmVwYXJlcyBwcm92aWRlcnMgZm9yIHVzYWdlIG9mIHRoZSB0YWJsZXZpZXcgZnVuY3Rpb25hbGl0aWVzLlxuICpcbiAqIEByZXR1cm5zIHtDb21tb25zRmVhdHVyZX0gVGhlIGBDb21tb25zRmVhdHVyZWAgb2JqZWN0IHdpdGggdGhlIGxheW91dCBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgZnVuY3Rpb24gd2l0aFRhYmxlKGNvbmZpZz86IFRhYmxlRmVhdHVyZUNvbmZpZyk6IENvbW1vbnNGZWF0dXJlIHtcbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBDb21tb25zRmVhdHVyZVR5cGVFbnVtLlRhYmxlLFxuICAgICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBwcm92aWRlOiBDT01NT05TX1RBQkxFX0ZFQVRVUkVfQ09ORklHX0lULFxuICAgICAgICAgICAgICAgIHVzZVZhbHVlOiBjb25maWdcbiAgICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgIH07XG59XG5cbi8qKlxuICogUHJvdmlkZXMgYSBsaXN0IG9mIHByb3ZpZGVycyBmb3IgY29uZmlndXJpbmcgYSB0YWJsZSBmZWF0dXJlLiBVc2VmdWwgZm9yIGxhenktbG9hZGluZyB0YWJsZSBjaHVuayBpbiBjaGlsZCAobGF6eSBsb2FkZWQgcm91dGVzKS5cbiAqXG4gKiBAcGFyYW0ge1RhYmxlRmVhdHVyZUNvbmZpZ30gW2NvbmZpZ10gLSBBbiBvcHRpb25hbCBjb25maWd1cmF0aW9uIG9iamVjdCBmb3IgdGhlIHRhYmxlIGZlYXR1cmUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlVGFibGVDaGlsZChjb25maWc/OiBUYWJsZUZlYXR1cmVDb25maWcpOiBQcm92aWRlcltdIHtcbiAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgICBwcm92aWRlOiBDT01NT05TX1RBQkxFX0ZFQVRVUkVfQ09ORklHX0lULFxuICAgICAgICAgICAgdXNlVmFsdWU6IGNvbmZpZ1xuICAgICAgICB9XG4gICAgXTtcbn1cbiJdfQ==","// components\nexport * from './components/column-filter/column-filter.component';\nexport * from './components/column-value/column-value.component';\nexport * from './components/filter/filter-active-tag/filter-active-tag.component';\nexport * from './components/filter/filter-form/filter-form.component';\nexport * from './components/filter/filter-overlay-with-tag/filter-overlay-with-tag.component';\nexport * from './components/table/table.component';\n// helpers\nexport * from './helpers/filters';\nexport * from './helpers/notification';\nexport * from './helpers/table-layout-prefs';\n// models\nexport * from './models/column-preferences.model';\nexport * from './models/filter.model';\n// pipes\nexport * from './pipes/filter-value.pipe';\nexport * from './pipes/locale-default-row-class.pipe';\nexport * from './pipes/table-column-filter-class.pipe';\n// services\nexport * from './services/table-data.service';\nexport * from './services/table-feature-config.token';\n// provide\nexport * from './provide';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90YWJsZS9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsYUFBYTtBQUNiLGNBQWMsb0RBQW9ELENBQUM7QUFDbkUsY0FBYyxrREFBa0QsQ0FBQztBQUNqRSxjQUFjLG1FQUFtRSxDQUFDO0FBQ2xGLGNBQWMsdURBQXVELENBQUM7QUFDdEUsY0FBYywrRUFBK0UsQ0FBQztBQUM5RixjQUFjLG9DQUFvQyxDQUFDO0FBRW5ELFVBQVU7QUFDVixjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyw4QkFBOEIsQ0FBQztBQUU3QyxTQUFTO0FBQ1QsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLHVCQUF1QixDQUFDO0FBRXRDLFFBQVE7QUFDUixjQUFjLDJCQUEyQixDQUFDO0FBQzFDLGNBQWMsdUNBQXVDLENBQUM7QUFDdEQsY0FBYyx3Q0FBd0MsQ0FBQztBQUV2RCxXQUFXO0FBQ1gsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLHVDQUF1QyxDQUFDO0FBRXRELFVBQVU7QUFDVixjQUFjLFdBQVcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIGNvbXBvbmVudHNcbmV4cG9ydCAqIGZyb20gJy4vY29tcG9uZW50cy9jb2x1bW4tZmlsdGVyL2NvbHVtbi1maWx0ZXIuY29tcG9uZW50JztcbmV4cG9ydCAqIGZyb20gJy4vY29tcG9uZW50cy9jb2x1bW4tdmFsdWUvY29sdW1uLXZhbHVlLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudHMvZmlsdGVyL2ZpbHRlci1hY3RpdmUtdGFnL2ZpbHRlci1hY3RpdmUtdGFnLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudHMvZmlsdGVyL2ZpbHRlci1mb3JtL2ZpbHRlci1mb3JtLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudHMvZmlsdGVyL2ZpbHRlci1vdmVybGF5LXdpdGgtdGFnL2ZpbHRlci1vdmVybGF5LXdpdGgtdGFnLmNvbXBvbmVudCc7XG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50JztcblxuLy8gaGVscGVyc1xuZXhwb3J0ICogZnJvbSAnLi9oZWxwZXJzL2ZpbHRlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9oZWxwZXJzL25vdGlmaWNhdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL2hlbHBlcnMvdGFibGUtbGF5b3V0LXByZWZzJztcblxuLy8gbW9kZWxzXG5leHBvcnQgKiBmcm9tICcuL21vZGVscy9jb2x1bW4tcHJlZmVyZW5jZXMubW9kZWwnO1xuZXhwb3J0ICogZnJvbSAnLi9tb2RlbHMvZmlsdGVyLm1vZGVsJztcblxuLy8gcGlwZXNcbmV4cG9ydCAqIGZyb20gJy4vcGlwZXMvZmlsdGVyLXZhbHVlLnBpcGUnO1xuZXhwb3J0ICogZnJvbSAnLi9waXBlcy9sb2NhbGUtZGVmYXVsdC1yb3ctY2xhc3MucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL3BpcGVzL3RhYmxlLWNvbHVtbi1maWx0ZXItY2xhc3MucGlwZSc7XG5cbi8vIHNlcnZpY2VzXG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL3RhYmxlLWRhdGEuc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3NlcnZpY2VzL3RhYmxlLWZlYXR1cmUtY29uZmlnLnRva2VuJztcblxuLy8gcHJvdmlkZVxuZXhwb3J0ICogZnJvbSAnLi9wcm92aWRlJztcbiJdfQ==","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVkaXVzaW5jLW1uZy1jb21tb25zLXRhYmxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdGFibGUvc3JjL21lZGl1c2luYy1tbmctY29tbW9ucy10YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ=="],"names":["commonsToObservable","i1"],"mappings":"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"}
|