barsa-sap-ui 2.0.64 → 2.0.67
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/esm2022/lib/barsa-report-one-of-list/barsa-report-one-of-list.component.mjs +3 -3
- package/esm2022/lib/barsa-table-column/barsa-table-column.component.mjs +3 -3
- package/esm2022/lib/barsa-table-header/barsa-table-header.component.mjs +36 -21
- package/esm2022/lib/barsa-table-row/barsa-table-row.component.mjs +4 -3
- package/esm2022/lib/barsa-text-ellipsis/barsa-text-ellipsis.component.mjs +1 -1
- package/esm2022/lib/column-renderer/column-renderer.component.mjs +3 -3
- package/esm2022/lib/models/grid-data-provider.mjs +8 -3
- package/esm2022/lib/report-navigator/report-navigator.component.mjs +3 -3
- package/esm2022/lib/sap-ui-report-base.component.mjs +14 -15
- package/esm2022/lib/table-th.directive.mjs +11 -39
- package/esm2022/lib/ui-grid-sort-setting/ui-grid-sort-setting.component.mjs +1 -2
- package/esm2022/lib/ui-list-view/ui-list-view.component.mjs +3 -3
- package/esm2022/lib/ui-table-view/ui-table-view.component.mjs +65 -59
- package/esm2022/lib/ui-tree/ui-tree.component.mjs +2 -1
- package/fesm2022/barsa-sap-ui.mjs +141 -143
- package/fesm2022/barsa-sap-ui.mjs.map +1 -1
- package/lib/barsa-table-header/barsa-table-header.component.d.ts +12 -6
- package/lib/barsa-table-row/barsa-table-row.component.d.ts +2 -1
- package/lib/table-th.directive.d.ts +6 -14
- package/lib/ui-table-view/ui-table-view.component.d.ts +10 -4
- package/package.json +1 -1
|
@@ -27,6 +27,7 @@ export class BarsaTableRowComponent extends BaseViewItemPropsComponent {
|
|
|
27
27
|
}
|
|
28
28
|
ngOnInit() {
|
|
29
29
|
super.ngOnInit();
|
|
30
|
+
this.el = this._el;
|
|
30
31
|
const rowN = Number(this.rowNumber);
|
|
31
32
|
this.isOdd = isNaN(rowN) || !this.coloringRow ? false : rowN % 2 === 0 ? true : false;
|
|
32
33
|
this.detailsComponentSetting = {
|
|
@@ -57,11 +58,11 @@ export class BarsaTableRowComponent extends BaseViewItemPropsComponent {
|
|
|
57
58
|
this._cdr.detectChanges();
|
|
58
59
|
}
|
|
59
60
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: BarsaTableRowComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
60
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: BarsaTableRowComponent, selector: "bsu-barsa-table-row", inputs: { showDetailsInRow: "showDetailsInRow", detailsComponent: "detailsComponent", detailsColumns: "detailsColumns", detailsText: "detailsText", columnComponents: "columnComponents", actionList: "actionList", dirtyColumns: "dirtyColumns" }, outputs: { columnSummary: "columnSummary" }, providers: [FormPanelService], viewQueries: [{ propertyName: "detailsFormItems", first: true, predicate: ["detailsFormItems"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "@if ((!mo.$Parent || parentExpanded) && visibility !== false) {\n<tr\n [class.row-error]=\"hasError\"\n [class.showdetails-on]=\"!detailsCollapsed\"\n #trEl\n fd-table-row\n [activable]=\"false\"\n [hoverable]=\"true\"\n [main]=\"true\"\n [focusable]=\"true\"\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [hostEl]=\"trEl\"\n [attr.aria-selected]=\"isChecked\"\n [class.brule-message]=\"bruleActionMessage || workflowState?.error\"\n [class.workflow-pending]=\"workflowState?.state === 'Pending'\"\n [style.background-color]=\"isOdd ? 'var(--sapList_Hover_Background)' : null\"\n>\n @if (mo.$Group || mo.$Group === '') {\n <td\n [style.padding-right]=\"rtl ? 'calc( 1rem + ' + level * 12 + 'px' + ' )' : 'inherit'\"\n [style.padding-left]=\"!rtl ? 'calc( 1rem + ' + level * 12 + 'px' + ' )' : 'inherit'\"\n fd-table-cell\n style=\"font-weight: bold; font-size: 1rem\"\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n class=\"row-group\"\n [class.mobile-mode]=\"secondaryColumns?.length\"\n [attr.level]=\"level\"\n [class.root-group]=\"level === 0\"\n >\n <button\n fd-button\n [fdType]=\"'transparent'\"\n [glyph]=\"expanded !== false ? 'navigation-down-arrow' : 'navigation-left-arrow'\"\n class=\"cell-expand\"\n (click)=\"onExpandClick()\"\n ></button>\n {{ mo.$Group === 'undefined' ? '' : mo.$Group }}\n </td>\n } @else {\n\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n @if (isCheckList) {\n <td fd-table-cell [style.width]=\"checkboxComponent ? '60px' : null\">\n @if (workflowState?.state === 'Pending') {\n <div style=\"position: absolute; left: 0; right: 0; bottom: 0; top: 0\">\n <bsu-mask [top]=\"'20px'\" [size]=\"'s'\"></bsu-mask>\n </div>\n } @if (checkboxComponent?.Selector) {\n <bnrc-dynamic-item-component\n [component]=\"checkboxComponent\"\n [mo]=\"mo\"\n [isChecked]=\"isChecked\"\n [UlvMainCtrlr]=\"UlvMainCtrlr\"\n [setting]=\"setting\"\n [parameters]=\"checkboxComponent.Parameters\"\n [editMode]=\"inlineEditMode\"\n [rtl]=\"rtl\"\n [deviceName]=\"deviceName\"\n [value]=\"isChecked\"\n [deviceSize]=\"deviceSize\"\n [index]=\"index\"\n [allColumns]=\"allColumns\"\n [typeDefId]=\"typeDefId\"\n (events)=\"onRowCheck()\"\n ></bnrc-dynamic-item-component>\n } @if (!checkboxComponent?.Selector) {\n <fd-checkbox [name]=\"mo.$Caption\" [ngModel]=\"isChecked\" (ngModelChange)=\"onRowCheck()\"></fd-checkbox>\n }\n </td>\n } @if (!isCheckList && !showRowNumber) {\n <td\n fd-table-cell\n class=\"single-select\"\n (click)=\"!isCheckList && onRowCheck()\"\n style=\"padding: 0; text-align: center\"\n >\n @if (inlineEditMode && allowInlineEdit && (hasError || saving || saved)) { @if (hasError) {\n <fd-icon class=\"save-error\" glyph=\"error\"></fd-icon>\n } @if (saving) {\n <fd-busy-indicator [loading]=\"true\" [size]=\"'s'\" title=\"record saving\"></fd-busy-indicator>\n } @if (saved) {\n <fd-icon class=\"save-success\" glyph=\"accept\"></fd-icon>\n } } @else { @if (mo.$State === 'New' && !isChecked) {\n <fd-icon glyph=\"favorite\"></fd-icon>\n } @if (inlineEditMode && allowInlineEdit && isChecked) {\n <fd-icon glyph=\"edit\"></fd-icon>\n } }\n </td>\n }\n <ng-container *ngTemplateOutlet=\"rowNumberTemplate\"></ng-container>\n @for (column of columns; track column; let columnIndex = $index) { @if ((rowIndicator && columnIndex > 0) ||\n !rowIndicator) {\n <td\n class=\"rep-column\"\n [attr.dbName]=\"column.Name\"\n #tdEl\n fd-table-cell\n [applyConditionalFormats]=\"conditionalFormats\"\n [hostEl]=\"tdEl\"\n [styleIndex]=\"styleIndex\"\n [dbName]=\"column.Name\"\n [focusable]=\"false\"\n (click)=\"onColumnClick()\"\n (dblclick)=\"onRowClick()\"\n [hoverable]=\"inlineEditMode && allowInlineEdit\"\n [class.control-readonly]=\"column.IsReadonly\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: {\n $implicit: column,\n mo: mo,\n index: columnIndex,\n inlineEditMode: inlineEditMode,\n layout94: layout$ | async\n }\n \"\n ></ng-container>\n </td>\n } } @if (contextMenuItems.length && (!inlineEditMode || !allowInlineEdit)) {\n <td class=\"col-context-menu\" fd-table-cell>\n <bsu-ulv-context-menu\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\n [conditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [mo]=\"mo\"\n [index]=\"index\"\n (commandClick)=\"onUlvCommand()\"\n [deviceName]=\"deviceName\"\n [menuItems]=\"contextMenuItems\"\n [allColumns]=\"allColumns\"\n ></bsu-ulv-context-menu>\n </td>\n } @if (showDetailsInRow && (!inlineEditMode || !allowInlineEdit)) {\n <td class=\"col-details\" fd-table-cell [fitContent]=\"true\">\n @if (detailsComponent?.Selector || cartableParams?.moId) {\n <button\n fd-button\n [label]=\"(detailsCollapsed ? detailsText : 'Hide') | bbbTranslate\"\n [fdType]=\"'transparent'\"\n (click)=\"onRowDetails()\"\n ></button>\n }\n </td>\n } @if (actionList?.length && !inlineEditMode) {\n <td class=\"col-view\" [class.rtl]=\"rtl\" fd-table-cell [fitContent]=\"true\">\n @for (a of actionList; track a) {\n <button\n fd-button\n [glyph]=\"a.glyph\"\n [navigation]=\"a.navigation\"\n [fdType]=\"'transparent'\"\n [role]=\"a.role\"\n bodyClick\n [disableBodyClick]=\"!a.closeOnClick\"\n (click)=\"a.handler({mo, index})\"\n ></button>\n }\n </td>\n } }\n</tr>\n} @if (secondaryColumns?.length && !mo.$Group && (!mo.$Parent || parentExpanded) && visibility !== false) {\n<tr\n #trEl\n fd-table-row\n [secondary]=\"true\"\n class=\"secondary-row\"\n [class.no-edit-mode]=\"!inlineEditMode\"\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [hostEl]=\"trEl\"\n [attr.aria-selected]=\"isChecked && !inlineEditMode ? true : false\"\n>\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n @if (!isCheckList) {\n <td fd-table-cell class=\"single-select\" (click)=\"onRowCheck()\"></td>\n }\n <td fd-table-cell colspan=\"100%\" (click)=\"onRowCheck()\" class=\"secondary p-wrapper\">\n <div style=\"display: flex; flex-direction: column\">\n @for (column of secondaryColumns; track _trackByColumn(columnIndex, column); let columnIndex = $index) {\n <p\n #pEl\n fd-table-text\n [applyConditionalFormats]=\"conditionalFormats\"\n [hostEl]=\"pEl\"\n [styleIndex]=\"styleIndex\"\n [dbName]=\"column.Name\"\n >\n <label fd-form-label>{{ column.Caption }} :</label>\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: {\n $implicit: column,\n mo: mo,\n index: columnIndex,\n inlineEditMode: inlineEditMode,\n layout94: layout$ | async\n }\n \"\n ></ng-container>\n </p>\n }\n </div>\n </td>\n</tr>\n} @if (cartableParams?.moId) {\n<tr [class.detailCollapsed]=\"detailsCollapsed\" fd-table-row class=\"showdetails\" [attr.aria-selected]=\"isChecked\">\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n <td\n (click)=\"onRowCheck()\"\n fd-table-cell\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems.length ? 1 : 0) +\n (canView ? 1 : 0) +\n (showDetailsInRow ? 1 : 0)\n \"\n >\n <ng-container>\n <bnrc-form\n #cartableFormRef\n class=\"cartable-template\"\n [inlineEditInReport]=\"true\"\n [params]=\"cartableParams\"\n (beforeTransition)=\"onCartableBeforeTansition()\"\n (afterTransition)=\"onCartableAfterTansition($event)\"\n (bruleAction)=\"onCartableBruleAction($event)\"\n (click)=\"OnCartableFormClick($event)\"\n (formClose)=\"onCartableFormClosed()\"\n ></bnrc-form>\n </ng-container>\n </td>\n</tr>\n} @if (!detailsCollapsed && detailsComponent?.Selector) {\n<tr fd-table-row class=\"showdetails\" [attr.aria-selected]=\"isChecked\">\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n <td\n (click)=\"onRowCheck()\"\n fd-table-cell\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n >\n <ng-container *ngTemplateOutlet=\"detailsColumnsTemplate\"></ng-container>\n @if (detailsComponent && detailsComponent.Selector) {\n <bnrc-dynamic-item-component\n [component]=\"detailsComponent\"\n [mo]=\"mo\"\n [isChecked]=\"isChecked\"\n [UlvMainCtrlr]=\"UlvMainCtrlr\"\n [setting]=\"detailsComponentSetting\"\n [parameters]=\"detailsComponent.Settings\"\n [editMode]=\"inlineEditMode\"\n [formSetting]=\"formSetting\"\n [rtl]=\"rtl\"\n [deviceName]=\"deviceName\"\n [deviceSize]=\"deviceSize\"\n [index]=\"index\"\n [allColumns]=\"allColumns\"\n [typeDefId]=\"typeDefId\"\n ></bnrc-dynamic-item-component>\n }\n </td>\n</tr>\n} @if(isLastChildGroup){\n<tr #trEl fd-table-row class=\"group-summary-row\" [class.no-edit-mode]=\"true\" [attr.aria-selected]=\"false\">\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n @if (!isCheckList) {\n <td fd-table-cell class=\"single-select\"></td>\n } @for (column of columns; track _trackByColumn(columnIndex, column); let columnIndex = $index) {\n <td fd-table-cell>\n <label #summaryRef>{{ reCalculateColumnSummary(summaryRef, column) }}</label>\n </td>\n }\n</tr>\n}\n<ng-template #detailsColumnsTemplate>\n <ng-container\n *ngTemplateOutlet=\"\n detailsFormItems;\n context: {\n $implicit: detailsColumns,\n mo: mo,\n inlineEditMode: inlineEditMode,\n layout94: layout$\n }\n \"\n ></ng-container>\n</ng-template>\n<ng-template #detailsFormItems let-detailsColumns let-mo=\"mo\" let-inlineEditMode=\"inlineEditMode\" let-layout$=\"layout$\">\n <div class=\"form-items\">\n @for (column of detailsColumns; track column; let columnIndex = $index) {\n <div fd-form-item>\n <label fd-form-label for=\"input-2\">{{ column.Caption }}</label>\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: {\n $implicit: column,\n mo: mo,\n index: columnIndex,\n inlineEditMode: inlineEditMode,\n layout94: layout$ | async\n }\n \"\n ></ng-container>\n </div>\n }\n </div>\n</ng-template>\n@if (bruleActionMessage && inlineEditMode) {\n<tr fd-table-row>\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n <td\n fd-table-cell\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n >\n @if (bruleActionMessage.MessageType === 2) {\n <fd-message-strip [type]=\"bruleActionMessage.MessageType === 2 ? 'error' : 'information'\" [dismissible]=\"false\">\n {{ bruleActionMessage.MessageExpression }}\n </fd-message-strip>\n }\n </td>\n</tr>\n} @if (workflowState?.state === 'Finish' && workflowState?.error) {\n<tr fd-table-row>\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n <td\n fd-table-cell\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n >\n <fd-message-strip type=\"error\" [dismissible]=\"true\" (onDismiss)=\"onResetWorkflowState()\">\n {{ workflowState.error?.Text || workflowState.error?.MessageExpression }}\n </fd-message-strip>\n </td>\n</tr>\n}\n<ng-template\n #columnTemplate\n let-column\n let-mo=\"mo\"\n let-index=\"index\"\n let-inlineEditMode=\"inlineEditMode\"\n let-layout94=\"layout94\"\n>\n <bsu-barsa-table-column\n [mo]=\"mo\"\n [allColumns]=\"allColumns\"\n [column]=\"column\"\n [isdirty]=\"dirtyColumns && dirtyColumns[column.Name]\"\n [value]=\"column | columnValue: mo\"\n [icon]=\"column | columnIcon: mo\"\n [customComponent]=\"column.$CustomComponent\"\n [column]=\"column\"\n [disableEllapsis]=\"secondaryColumns?.length\"\n [editMode]=\"isChecked && inlineEditMode && allowInlineEdit\"\n [inlineEditMode]=\"inlineEditMode\"\n [isChecked]=\"isChecked\"\n [index]=\"index\"\n [formSetting]=\"formSetting\"\n [rtl]=\"rtl\"\n [deviceName]=\"deviceName\"\n [deviceSize]=\"deviceSize\"\n [layout94]=\"layout94\"\n (save)=\"onEditFormPanelSave(null)\"\n (cancel)=\"onEditFormPanelCancel(null)\"\n (tab)=\"onTabKeyDown($event, index)\"\n (changeToEditMode)=\"onColumnChangeToEditMode($event, index)\"\n >\n </bsu-barsa-table-column>\n</ng-template>\n<ng-template #statusIndicator>\n @if (rowIndicator) {\n <bsu-barsa-column-indicator [hideBorderBottom]=\"!detailsCollapsed\" [backColor]=\"rowIndicatorColor\">\n </bsu-barsa-column-indicator>\n }\n</ng-template>\n<ng-template #rowNumberTemplate>\n @if (showRowNumber) {\n <bsu-barsa-column-rownumber [rowNumber]=\"rowNumber\" (click)=\"!isCheckList && onRowCheck()\">\n </bsu-barsa-column-rownumber>\n }\n</ng-template>\n<tr fd-table-row style=\"pointer-events: none\"></tr>\n", styles: [":host{display:contents;width:100%}:host bnrc-form.cartable-template ::ng-deep bsu-ly-layout-container-of-root{padding-bottom:1rem}:host ::ng-deep .row-group.mobile-mode{border-bottom:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e4e4e4)!important}:host ::ng-deep .inlineEditMode bnrc-field-ui{padding:0;margin:0}:host ::ng-deep .inlineEditMode bsu-ui-simple-combo{margin:0!important}:host ::ng-deep .secondary.p-wrapper p{display:flex;align-items:center}bsu-layout-control:not(.hide-form-item){align-items:center;height:100%;min-width:auto;width:auto}tr.group-summary-row td{border:none;background-color:#dde5f0;border-right:none!important;font-weight:700}tr.group-summary-row td label{font-weight:700}tr.group-summary-row td label.NaN{display:none}td{vertical-align:middle}td.control-readonly{background-color:var(--sapList_HeaderBackground)}tr.brule-message td{border:0}.row-group{background-color:var(--sapBackgroundColor, \"#f7f7ff\")}.cell-expand{cursor:pointer;display:inline-flex;justify-content:center;align-items:center;font-size:.75rem;color:#0854a0;color:var(--sapContent_IconColor, #0854a0);min-width:2rem;max-width:2rem}.save-error{color:var(--sapField_InvalidColor)}.save-success{color:var(--sapField_SuccessColor)}.flow{max-width:100%}.flow-item{display:flex}.flow-item fd-micro-process-flow-icon{width:1.375rem;height:1.375rem}.flow-item h5{padding-right:.3rem}.cartable-template{padding:.5rem 0}.workflow-pending{opacity:.5;pointer-events:none;position:relative}.detailCollapsed{height:0;display:none}tr td.rep-column:first-child{position:sticky;right:0}\n"], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.FormComponent, selector: "bnrc-form", inputs: ["params", "customFormPanelUi", "formPanelCtrl", "UlvMainCtrlr", "formPanelCtrlId", "saveOnChange", "inlineEditInReport"], outputs: ["titleChanged", "moChanged", "formClose", "uiComponent", "formRendered", "bruleAction", "beforeTransition", "afterTransition"] }, { kind: "component", type: i3.DynamicItemComponent, selector: "bnrc-dynamic-item-component", inputs: ["mo", "allColumns", "moDataList", "columns", "column", "index", "last", "deviceName", "deviceSize", "rtl", "editMode", "setting", "parameters", "contextMenuItems", "canView", "showRowNumber", "rowNumber", "formSetting", "conditionalFormats", "disableOverflowContextMenu", "navigationArrow", "isCheckList", "fields", "isChecked", "layout94$", "inlineEditMode", "isNewInlineMo", "allowInlineEdit", "typeDefId", "rowIndicator", "rowIndicatorColor", "UlvMainCtrlr"] }, { kind: "directive", type: i3.FormCloseDirective, selector: "[formClose]", inputs: ["isMobile"] }, { kind: "directive", type: i3.BodyClickDirective, selector: "[bodyClick]", inputs: ["disableBodyClick"] }, { kind: "component", type: i4.BusyIndicatorComponent, selector: "fd-busy-indicator", inputs: ["loading", "size", "block", "ariaLabel", "title", "label", "ariaLive"] }, { kind: "component", type: i5.ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i6.CheckboxComponent, selector: "fd-checkbox", inputs: ["wrapLabel", "valignLabel", "ariaLabel", "role", "value", "ariaLabelledBy", "ariaDescribedBy", "title", "inputId", "state", "name", "label", "disabled", "tristate", "tristateSelectable", "labelClass", "required", "displayOnly", "values", "standalone"], outputs: ["focusChange"] }, { kind: "component", type: i7.FormItemComponent, selector: "[fd-form-item]", inputs: ["isInline", "horizontal"] }, { kind: "component", type: i7.FormLabelComponent, selector: "[fd-form-label]", inputs: ["required", "colon", "alignLabelEnd", "inlineHelpContent", "inlineHelpGlyph", "inlineHelpTriggers", "inlineHelpBodyPlacement", "inlineHelpPlacement", "inlineHelpLabel", "id"] }, { kind: "component", type: i8.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "class", "ariaLabel", "ariaHidden"] }, { kind: "component", type: i9.MessageStripComponent, selector: "fd-message-strip", inputs: ["class", "dismissible", "noIcon", "type", "id", "ariaLabelledBy", "ariaLabel", "width", "minWidth", "marginBottom", "indicationColor"], outputs: ["onDismiss"] }, { kind: "directive", type: i10.TableRowDirective, selector: "[fdTableRow], [fd-table-row]", inputs: ["activable", "highlightActive", "hoverable", "focusable", "main", "secondary", "active"] }, { kind: "directive", type: i10.TableCellDirective, selector: "[fdTableCell], [fd-table-cell]", inputs: ["noBorderX", "noBorderY", "activable", "focusable", "hoverable", "fitContent", "noPadding", "noData", "key"] }, { kind: "directive", type: i10.TableTextDirective, selector: "[fdTableText], [fd-table-text]", inputs: ["fdTableTextClass", "noWrap", "title", "maxWidth"] }, { kind: "component", type: i11.MaskComponent, selector: "bsu-mask", inputs: ["size", "top"] }, { kind: "component", type: i12.UlvContextMenuComponent, selector: "bsu-ulv-context-menu,[ulvContextMenu]", inputs: ["onlyOverflow", "deviceName", "menuItems", "allColumns", "index", "mo", "styleIndex", "conditionalFormats", "disableOverflowContextMenu", "footerMode"], outputs: ["commandClick"] }, { kind: "component", type: i13.BarsaTableColumnComponent, selector: "bsu-barsa-table-column", inputs: ["disableEllapsis"] }, { kind: "component", type: i14.BarsaColumnIndicatorComponent, selector: "bsu-barsa-column-indicator", inputs: ["backColor", "hideBorderBottom"] }, { kind: "component", type: i15.BarsaColumnRowNumberComponent, selector: "bsu-barsa-column-rownumber", inputs: ["rowNumber"] }, { kind: "directive", type: i16.ApplyConditionalFormatsDirective, selector: "[applyConditionalFormats]", inputs: ["applyConditionalFormats", "styleIndex", "hostEl", "dbName"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.BbbTranslatePipe, name: "bbbTranslate" }, { kind: "pipe", type: i3.ColumnIconPipe, name: "columnIcon" }, { kind: "pipe", type: i3.ColumnValuePipe, name: "columnValue" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
61
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: BarsaTableRowComponent, selector: "bsu-barsa-table-row", inputs: { showDetailsInRow: "showDetailsInRow", detailsComponent: "detailsComponent", detailsColumns: "detailsColumns", detailsText: "detailsText", columnComponents: "columnComponents", actionList: "actionList", dirtyColumns: "dirtyColumns" }, outputs: { columnSummary: "columnSummary" }, providers: [FormPanelService], viewQueries: [{ propertyName: "detailsFormItems", first: true, predicate: ["detailsFormItems"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "@if ((!mo.$Parent || parentExpanded) && visibility !== false) {\n<tr\n [class.row-error]=\"hasError\"\n [class.showdetails-on]=\"!detailsCollapsed\"\n #trEl\n fd-table-row\n [activable]=\"false\"\n [hoverable]=\"true\"\n [main]=\"true\"\n [focusable]=\"true\"\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [hostEl]=\"trEl\"\n [attr.aria-selected]=\"isChecked\"\n [class.brule-message]=\"bruleActionMessage || workflowState?.error\"\n [class.workflow-pending]=\"workflowState?.state === 'Pending'\"\n [style.background-color]=\"isOdd && !isChecked ? 'var(--sapList_Hover_Background)' : null\"\n>\n @if (mo.$Group || mo.$Group === '') {\n <td\n [style.padding-right]=\"rtl ? 'calc( 1rem + ' + level * 12 + 'px' + ' )' : 'inherit'\"\n [style.padding-left]=\"!rtl ? 'calc( 1rem + ' + level * 12 + 'px' + ' )' : 'inherit'\"\n fd-table-cell\n style=\"font-weight: bold; font-size: 1rem\"\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n class=\"row-group\"\n [class.mobile-mode]=\"secondaryColumns?.length\"\n [attr.level]=\"level\"\n [class.root-group]=\"level === 0\"\n >\n <button\n fd-button\n [fdType]=\"'transparent'\"\n [glyph]=\"expanded !== false ? 'navigation-down-arrow' : 'navigation-left-arrow'\"\n class=\"cell-expand\"\n (click)=\"onExpandClick()\"\n ></button>\n {{ mo.$Group === 'undefined' ? '' : mo.$Group }}\n </td>\n } @else {\n\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n @if (isCheckList) {\n <td fd-table-cell [style.width]=\"checkboxComponent ? '60px' : null\">\n @if (workflowState?.state === 'Pending') {\n <div style=\"position: absolute; left: 0; right: 0; bottom: 0; top: 0\">\n <bsu-mask [top]=\"'20px'\" [size]=\"'s'\"></bsu-mask>\n </div>\n } @if (checkboxComponent?.Selector) {\n <bnrc-dynamic-item-component\n [component]=\"checkboxComponent\"\n [mo]=\"mo\"\n [isChecked]=\"isChecked\"\n [UlvMainCtrlr]=\"UlvMainCtrlr\"\n [setting]=\"setting\"\n [parameters]=\"checkboxComponent.Parameters\"\n [editMode]=\"inlineEditMode\"\n [rtl]=\"rtl\"\n [deviceName]=\"deviceName\"\n [value]=\"isChecked\"\n [deviceSize]=\"deviceSize\"\n [index]=\"index\"\n [allColumns]=\"allColumns\"\n [typeDefId]=\"typeDefId\"\n (events)=\"onRowCheck()\"\n ></bnrc-dynamic-item-component>\n } @else {\n <fd-checkbox [name]=\"mo.$Caption\" [ngModel]=\"isChecked\" (ngModelChange)=\"onRowCheck()\"></fd-checkbox>\n }\n </td>\n } @if (!isCheckList && !showRowNumber) {\n <td\n fd-table-cell\n class=\"single-select\"\n (click)=\"!isCheckList && onRowCheck()\"\n style=\"padding: 0; text-align: center\"\n >\n @if (inlineEditMode && allowInlineEdit && (hasError || saving || saved)) { @if (hasError) {\n <fd-icon class=\"save-error\" glyph=\"error\"></fd-icon>\n } @if (saving) {\n <fd-busy-indicator [loading]=\"true\" [size]=\"'s'\" title=\"record saving\"></fd-busy-indicator>\n } @if (saved) {\n <fd-icon class=\"save-success\" glyph=\"accept\"></fd-icon>\n } } @else { @if (mo.$State === 'New' && !isChecked) {\n <fd-icon glyph=\"favorite\"></fd-icon>\n } @if (inlineEditMode && allowInlineEdit && isChecked) {\n <fd-icon glyph=\"edit\"></fd-icon>\n } }\n </td>\n }\n <ng-container *ngTemplateOutlet=\"rowNumberTemplate\"></ng-container>\n @for (column of columns; track column.Name; let columnIndex = $index) {\n <td\n class=\"rep-column\"\n [attr.dbName]=\"column.Name\"\n #tdEl\n fd-table-cell\n [applyConditionalFormats]=\"conditionalFormats\"\n [hostEl]=\"tdEl\"\n [styleIndex]=\"styleIndex\"\n [dbName]=\"column.Name\"\n [focusable]=\"false\"\n (click)=\"onColumnClick()\"\n (dblclick)=\"onRowClick()\"\n [hoverable]=\"inlineEditMode && allowInlineEdit\"\n [class.control-readonly]=\"column.IsReadonly\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: {\n $implicit: column,\n mo: mo,\n index: columnIndex,\n inlineEditMode: inlineEditMode,\n layout94: layout$ | async\n }\n \"\n ></ng-container>\n </td>\n } @if (contextMenuItems.length && (!inlineEditMode || !allowInlineEdit)) {\n <td class=\"col-context-menu\" fd-table-cell>\n <bsu-ulv-context-menu\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\n [conditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [mo]=\"mo\"\n [index]=\"index\"\n (commandClick)=\"onUlvCommand()\"\n [deviceName]=\"deviceName\"\n [menuItems]=\"contextMenuItems\"\n [allColumns]=\"allColumns\"\n ></bsu-ulv-context-menu>\n </td>\n } @if (showDetailsInRow && (!inlineEditMode || !allowInlineEdit)) {\n <td class=\"col-details\" fd-table-cell [fitContent]=\"true\">\n @if (detailsComponent?.Selector || cartableParams?.moId) {\n <button\n fd-button\n [label]=\"(detailsCollapsed ? detailsText : 'Hide') | bbbTranslate\"\n [fdType]=\"'transparent'\"\n (click)=\"onRowDetails()\"\n ></button>\n }\n </td>\n } @if (actionList?.length && !inlineEditMode) {\n <td class=\"col-view\" [class.rtl]=\"rtl\" fd-table-cell [fitContent]=\"true\">\n @for (a of actionList; track a) {\n <button\n fd-button\n [glyph]=\"a.glyph\"\n [navigation]=\"a.navigation\"\n [fdType]=\"'transparent'\"\n [role]=\"a.role\"\n bodyClick\n [disableBodyClick]=\"!a.closeOnClick\"\n (click)=\"a.handler({mo, index})\"\n ></button>\n }\n </td>\n } }\n</tr>\n} @if (secondaryColumns?.length && !mo.$Group && (!mo.$Parent || parentExpanded) && visibility !== false) {\n<tr\n #trEl\n fd-table-row\n [secondary]=\"true\"\n class=\"secondary-row\"\n [class.no-edit-mode]=\"!inlineEditMode\"\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [hostEl]=\"trEl\"\n [attr.aria-selected]=\"isChecked && !inlineEditMode ? true : false\"\n>\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n @if (!isCheckList) {\n <td fd-table-cell class=\"single-select\" (click)=\"onRowCheck()\"></td>\n }\n <td fd-table-cell colspan=\"100%\" (click)=\"onRowCheck()\" class=\"secondary p-wrapper\">\n <div style=\"display: flex; flex-direction: column\">\n @for (column of secondaryColumns; track _trackByColumn(columnIndex, column); let columnIndex = $index) {\n <p\n #pEl\n fd-table-text\n [applyConditionalFormats]=\"conditionalFormats\"\n [hostEl]=\"pEl\"\n [styleIndex]=\"styleIndex\"\n [dbName]=\"column.Name\"\n >\n <label fd-form-label>{{ column.Caption }} :</label>\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: {\n $implicit: column,\n mo: mo,\n index: columnIndex,\n inlineEditMode: inlineEditMode,\n layout94: layout$ | async\n }\n \"\n ></ng-container>\n </p>\n }\n </div>\n </td>\n</tr>\n} @if (cartableParams?.moId) {\n<tr [class.detailCollapsed]=\"detailsCollapsed\" fd-table-row class=\"showdetails\" [attr.aria-selected]=\"isChecked\">\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n <td\n (click)=\"onRowCheck()\"\n fd-table-cell\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems.length ? 1 : 0) +\n (canView ? 1 : 0) +\n (showDetailsInRow ? 1 : 0)\n \"\n >\n <ng-container>\n <bnrc-form\n #cartableFormRef\n class=\"cartable-template\"\n [inlineEditInReport]=\"true\"\n [params]=\"cartableParams\"\n (beforeTransition)=\"onCartableBeforeTansition()\"\n (afterTransition)=\"onCartableAfterTansition($event)\"\n (bruleAction)=\"onCartableBruleAction($event)\"\n (click)=\"OnCartableFormClick($event)\"\n (formClose)=\"onCartableFormClosed()\"\n ></bnrc-form>\n </ng-container>\n </td>\n</tr>\n} @if (!detailsCollapsed && detailsComponent?.Selector) {\n<tr fd-table-row class=\"showdetails\" [attr.aria-selected]=\"isChecked\">\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n <td\n (click)=\"onRowCheck()\"\n fd-table-cell\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n >\n <ng-container *ngTemplateOutlet=\"detailsColumnsTemplate\"></ng-container>\n @if (detailsComponent && detailsComponent.Selector) {\n <bnrc-dynamic-item-component\n [component]=\"detailsComponent\"\n [mo]=\"mo\"\n [isChecked]=\"isChecked\"\n [UlvMainCtrlr]=\"UlvMainCtrlr\"\n [setting]=\"detailsComponentSetting\"\n [parameters]=\"detailsComponent.Settings\"\n [editMode]=\"inlineEditMode\"\n [formSetting]=\"formSetting\"\n [rtl]=\"rtl\"\n [deviceName]=\"deviceName\"\n [deviceSize]=\"deviceSize\"\n [index]=\"index\"\n [allColumns]=\"allColumns\"\n [typeDefId]=\"typeDefId\"\n ></bnrc-dynamic-item-component>\n }\n </td>\n</tr>\n} @if(isLastChildGroup){\n<tr #trEl fd-table-row class=\"group-summary-row\" [class.no-edit-mode]=\"true\" [attr.aria-selected]=\"false\">\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n @if (!isCheckList) {\n <td fd-table-cell class=\"single-select\"></td>\n } @for (column of columns; track _trackByColumn(columnIndex, column); let columnIndex = $index) {\n <td fd-table-cell>\n <label #summaryRef>{{ reCalculateColumnSummary(summaryRef, column) }}</label>\n </td>\n }\n</tr>\n} @if (bruleActionMessage && inlineEditMode) {\n<tr fd-table-row>\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n <td\n fd-table-cell\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n >\n @if (bruleActionMessage.MessageType === 2) {\n <fd-message-strip [type]=\"bruleActionMessage.MessageType === 2 ? 'error' : 'information'\" [dismissible]=\"false\">\n {{ bruleActionMessage.MessageExpression }}\n </fd-message-strip>\n }\n </td>\n</tr>\n} @if (workflowState?.state === 'Finish' && workflowState?.error) {\n<tr fd-table-row>\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n <td\n fd-table-cell\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n >\n <fd-message-strip type=\"error\" [dismissible]=\"true\" (onDismiss)=\"onResetWorkflowState()\">\n {{ workflowState.error?.Text || workflowState.error?.MessageExpression }}\n </fd-message-strip>\n </td>\n</tr>\n}\n<ng-template #detailsColumnsTemplate>\n <ng-container\n *ngTemplateOutlet=\"\n detailsFormItems;\n context: {\n $implicit: detailsColumns,\n mo: mo,\n inlineEditMode: inlineEditMode,\n layout94: layout$\n }\n \"\n ></ng-container>\n</ng-template>\n<ng-template #detailsFormItems let-detailsColumns let-mo=\"mo\" let-inlineEditMode=\"inlineEditMode\" let-layout$=\"layout$\">\n <div class=\"form-items\">\n @for (column of detailsColumns; track column; let columnIndex = $index) {\n <div fd-form-item>\n <label fd-form-label for=\"input-2\">{{ column.Caption }}</label>\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: {\n $implicit: column,\n mo: mo,\n index: columnIndex,\n inlineEditMode: inlineEditMode,\n layout94: layout$ | async\n }\n \"\n ></ng-container>\n </div>\n }\n </div>\n</ng-template>\n<ng-template\n #columnTemplate\n let-column\n let-mo=\"mo\"\n let-index=\"index\"\n let-inlineEditMode=\"inlineEditMode\"\n let-layout94=\"layout94\"\n>\n <bsu-barsa-table-column\n [mo]=\"mo\"\n [allColumns]=\"allColumns\"\n [column]=\"column\"\n [isdirty]=\"dirtyColumns && dirtyColumns[column.Name]\"\n [value]=\"column | columnValue: mo\"\n [icon]=\"column | columnIcon: mo\"\n [customComponent]=\"column.$CustomComponent\"\n [column]=\"column\"\n [disableEllapsis]=\"secondaryColumns?.length\"\n [editMode]=\"isChecked && inlineEditMode && allowInlineEdit\"\n [inlineEditMode]=\"inlineEditMode\"\n [isChecked]=\"isChecked\"\n [index]=\"index\"\n [formSetting]=\"formSetting\"\n [rtl]=\"rtl\"\n [deviceName]=\"deviceName\"\n [deviceSize]=\"deviceSize\"\n [layout94]=\"layout94\"\n (save)=\"onEditFormPanelSave(null)\"\n (cancel)=\"onEditFormPanelCancel(null)\"\n (tab)=\"onTabKeyDown($event, index)\"\n (changeToEditMode)=\"onColumnChangeToEditMode($event, index)\"\n >\n </bsu-barsa-table-column>\n</ng-template>\n<ng-template #statusIndicator>\n @if (rowIndicator) {\n <bsu-barsa-column-indicator [hideBorderBottom]=\"!detailsCollapsed\" [backColor]=\"rowIndicatorColor\">\n </bsu-barsa-column-indicator>\n }\n</ng-template>\n<ng-template #rowNumberTemplate>\n @if (showRowNumber) {\n <bsu-barsa-column-rownumber [rowNumber]=\"rowNumber\" (click)=\"!isCheckList && onRowCheck()\">\n </bsu-barsa-column-rownumber>\n }\n</ng-template>\n<tr fd-table-row style=\"pointer-events: none\"></tr>\n", styles: [":host{display:contents;width:100%}:host bnrc-form.cartable-template ::ng-deep bsu-ly-layout-container-of-root{padding-bottom:1rem}:host ::ng-deep .row-group.mobile-mode{border-bottom:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e4e4e4)!important}:host ::ng-deep .inlineEditMode bnrc-field-ui{padding:0;margin:0}:host ::ng-deep .inlineEditMode bsu-ui-simple-combo{margin:0!important}:host ::ng-deep .secondary.p-wrapper p{display:flex;align-items:center}bsu-layout-control:not(.hide-form-item){align-items:center;height:100%;min-width:auto;width:auto}tr.group-summary-row td{border:none;background-color:#dde5f0;border-right:none!important;font-weight:700}tr.group-summary-row td label{font-weight:700}tr.group-summary-row td label.NaN{display:none}td{vertical-align:middle}td.control-readonly{background-color:var(--sapList_HeaderBackground)}tr.brule-message td{border:0}.row-group{background-color:var(--sapBackgroundColor, \"#f7f7ff\")}.cell-expand{cursor:pointer;display:inline-flex;justify-content:center;align-items:center;font-size:.75rem;color:#0854a0;color:var(--sapContent_IconColor, #0854a0);min-width:2rem;max-width:2rem}.save-error{color:var(--sapField_InvalidColor)}.save-success{color:var(--sapField_SuccessColor)}.flow{max-width:100%}.flow-item{display:flex}.flow-item fd-micro-process-flow-icon{width:1.375rem;height:1.375rem}.flow-item h5{padding-right:.3rem}.cartable-template{padding:.5rem 0}.workflow-pending{opacity:.5;pointer-events:none;position:relative}.detailCollapsed{height:0;display:none}tr td.rep-column:first-child{position:sticky;right:0}\n"], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.FormComponent, selector: "bnrc-form", inputs: ["params", "customFormPanelUi", "formPanelCtrl", "UlvMainCtrlr", "formPanelCtrlId", "saveOnChange", "inlineEditInReport"], outputs: ["titleChanged", "moChanged", "formClose", "uiComponent", "formRendered", "bruleAction", "beforeTransition", "afterTransition"] }, { kind: "component", type: i3.DynamicItemComponent, selector: "bnrc-dynamic-item-component", inputs: ["mo", "allColumns", "moDataList", "columns", "column", "index", "last", "deviceName", "deviceSize", "rtl", "editMode", "setting", "parameters", "contextMenuItems", "canView", "showRowNumber", "rowNumber", "formSetting", "conditionalFormats", "disableOverflowContextMenu", "navigationArrow", "isCheckList", "fields", "isChecked", "layout94$", "inlineEditMode", "isNewInlineMo", "allowInlineEdit", "typeDefId", "rowIndicator", "rowIndicatorColor", "UlvMainCtrlr"] }, { kind: "directive", type: i3.FormCloseDirective, selector: "[formClose]", inputs: ["isMobile"] }, { kind: "directive", type: i3.BodyClickDirective, selector: "[bodyClick]", inputs: ["disableBodyClick"] }, { kind: "component", type: i4.BusyIndicatorComponent, selector: "fd-busy-indicator", inputs: ["loading", "size", "block", "ariaLabel", "title", "label", "ariaLive"] }, { kind: "component", type: i5.ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i6.CheckboxComponent, selector: "fd-checkbox", inputs: ["wrapLabel", "valignLabel", "ariaLabel", "role", "value", "ariaLabelledBy", "ariaDescribedBy", "title", "inputId", "state", "name", "label", "disabled", "tristate", "tristateSelectable", "labelClass", "required", "displayOnly", "values", "standalone"], outputs: ["focusChange"] }, { kind: "component", type: i7.FormItemComponent, selector: "[fd-form-item]", inputs: ["isInline", "horizontal"] }, { kind: "component", type: i7.FormLabelComponent, selector: "[fd-form-label]", inputs: ["required", "colon", "alignLabelEnd", "inlineHelpContent", "inlineHelpGlyph", "inlineHelpTriggers", "inlineHelpBodyPlacement", "inlineHelpPlacement", "inlineHelpLabel", "id"] }, { kind: "component", type: i8.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "class", "ariaLabel", "ariaHidden"] }, { kind: "component", type: i9.MessageStripComponent, selector: "fd-message-strip", inputs: ["class", "dismissible", "noIcon", "type", "id", "ariaLabelledBy", "ariaLabel", "width", "minWidth", "marginBottom", "indicationColor"], outputs: ["onDismiss"] }, { kind: "directive", type: i10.TableRowDirective, selector: "[fdTableRow], [fd-table-row]", inputs: ["activable", "highlightActive", "hoverable", "focusable", "main", "secondary", "active"] }, { kind: "directive", type: i10.TableCellDirective, selector: "[fdTableCell], [fd-table-cell]", inputs: ["noBorderX", "noBorderY", "activable", "focusable", "hoverable", "fitContent", "noPadding", "noData", "key"] }, { kind: "directive", type: i10.TableTextDirective, selector: "[fdTableText], [fd-table-text]", inputs: ["fdTableTextClass", "noWrap", "title", "maxWidth"] }, { kind: "component", type: i11.MaskComponent, selector: "bsu-mask", inputs: ["size", "top"] }, { kind: "component", type: i12.UlvContextMenuComponent, selector: "bsu-ulv-context-menu,[ulvContextMenu]", inputs: ["onlyOverflow", "deviceName", "menuItems", "allColumns", "index", "mo", "styleIndex", "conditionalFormats", "disableOverflowContextMenu", "footerMode"], outputs: ["commandClick"] }, { kind: "component", type: i13.BarsaTableColumnComponent, selector: "bsu-barsa-table-column", inputs: ["disableEllapsis"] }, { kind: "component", type: i14.BarsaColumnIndicatorComponent, selector: "bsu-barsa-column-indicator", inputs: ["backColor", "hideBorderBottom"] }, { kind: "component", type: i15.BarsaColumnRowNumberComponent, selector: "bsu-barsa-column-rownumber", inputs: ["rowNumber"] }, { kind: "directive", type: i16.ApplyConditionalFormatsDirective, selector: "[applyConditionalFormats]", inputs: ["applyConditionalFormats", "styleIndex", "hostEl", "dbName"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i3.BbbTranslatePipe, name: "bbbTranslate" }, { kind: "pipe", type: i3.ColumnIconPipe, name: "columnIcon" }, { kind: "pipe", type: i3.ColumnValuePipe, name: "columnValue" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
61
62
|
}
|
|
62
63
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: BarsaTableRowComponent, decorators: [{
|
|
63
64
|
type: Component,
|
|
64
|
-
args: [{ selector: 'bsu-barsa-table-row', providers: [FormPanelService], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if ((!mo.$Parent || parentExpanded) && visibility !== false) {\n<tr\n [class.row-error]=\"hasError\"\n [class.showdetails-on]=\"!detailsCollapsed\"\n #trEl\n fd-table-row\n [activable]=\"false\"\n [hoverable]=\"true\"\n [main]=\"true\"\n [focusable]=\"true\"\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [hostEl]=\"trEl\"\n [attr.aria-selected]=\"isChecked\"\n [class.brule-message]=\"bruleActionMessage || workflowState?.error\"\n [class.workflow-pending]=\"workflowState?.state === 'Pending'\"\n [style.background-color]=\"isOdd ? 'var(--sapList_Hover_Background)' : null\"\n>\n @if (mo.$Group || mo.$Group === '') {\n <td\n [style.padding-right]=\"rtl ? 'calc( 1rem + ' + level * 12 + 'px' + ' )' : 'inherit'\"\n [style.padding-left]=\"!rtl ? 'calc( 1rem + ' + level * 12 + 'px' + ' )' : 'inherit'\"\n fd-table-cell\n style=\"font-weight: bold; font-size: 1rem\"\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n class=\"row-group\"\n [class.mobile-mode]=\"secondaryColumns?.length\"\n [attr.level]=\"level\"\n [class.root-group]=\"level === 0\"\n >\n <button\n fd-button\n [fdType]=\"'transparent'\"\n [glyph]=\"expanded !== false ? 'navigation-down-arrow' : 'navigation-left-arrow'\"\n class=\"cell-expand\"\n (click)=\"onExpandClick()\"\n ></button>\n {{ mo.$Group === 'undefined' ? '' : mo.$Group }}\n </td>\n } @else {\n\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n @if (isCheckList) {\n <td fd-table-cell [style.width]=\"checkboxComponent ? '60px' : null\">\n @if (workflowState?.state === 'Pending') {\n <div style=\"position: absolute; left: 0; right: 0; bottom: 0; top: 0\">\n <bsu-mask [top]=\"'20px'\" [size]=\"'s'\"></bsu-mask>\n </div>\n } @if (checkboxComponent?.Selector) {\n <bnrc-dynamic-item-component\n [component]=\"checkboxComponent\"\n [mo]=\"mo\"\n [isChecked]=\"isChecked\"\n [UlvMainCtrlr]=\"UlvMainCtrlr\"\n [setting]=\"setting\"\n [parameters]=\"checkboxComponent.Parameters\"\n [editMode]=\"inlineEditMode\"\n [rtl]=\"rtl\"\n [deviceName]=\"deviceName\"\n [value]=\"isChecked\"\n [deviceSize]=\"deviceSize\"\n [index]=\"index\"\n [allColumns]=\"allColumns\"\n [typeDefId]=\"typeDefId\"\n (events)=\"onRowCheck()\"\n ></bnrc-dynamic-item-component>\n } @if (!checkboxComponent?.Selector) {\n <fd-checkbox [name]=\"mo.$Caption\" [ngModel]=\"isChecked\" (ngModelChange)=\"onRowCheck()\"></fd-checkbox>\n }\n </td>\n } @if (!isCheckList && !showRowNumber) {\n <td\n fd-table-cell\n class=\"single-select\"\n (click)=\"!isCheckList && onRowCheck()\"\n style=\"padding: 0; text-align: center\"\n >\n @if (inlineEditMode && allowInlineEdit && (hasError || saving || saved)) { @if (hasError) {\n <fd-icon class=\"save-error\" glyph=\"error\"></fd-icon>\n } @if (saving) {\n <fd-busy-indicator [loading]=\"true\" [size]=\"'s'\" title=\"record saving\"></fd-busy-indicator>\n } @if (saved) {\n <fd-icon class=\"save-success\" glyph=\"accept\"></fd-icon>\n } } @else { @if (mo.$State === 'New' && !isChecked) {\n <fd-icon glyph=\"favorite\"></fd-icon>\n } @if (inlineEditMode && allowInlineEdit && isChecked) {\n <fd-icon glyph=\"edit\"></fd-icon>\n } }\n </td>\n }\n <ng-container *ngTemplateOutlet=\"rowNumberTemplate\"></ng-container>\n @for (column of columns; track column; let columnIndex = $index) { @if ((rowIndicator && columnIndex > 0) ||\n !rowIndicator) {\n <td\n class=\"rep-column\"\n [attr.dbName]=\"column.Name\"\n #tdEl\n fd-table-cell\n [applyConditionalFormats]=\"conditionalFormats\"\n [hostEl]=\"tdEl\"\n [styleIndex]=\"styleIndex\"\n [dbName]=\"column.Name\"\n [focusable]=\"false\"\n (click)=\"onColumnClick()\"\n (dblclick)=\"onRowClick()\"\n [hoverable]=\"inlineEditMode && allowInlineEdit\"\n [class.control-readonly]=\"column.IsReadonly\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: {\n $implicit: column,\n mo: mo,\n index: columnIndex,\n inlineEditMode: inlineEditMode,\n layout94: layout$ | async\n }\n \"\n ></ng-container>\n </td>\n } } @if (contextMenuItems.length && (!inlineEditMode || !allowInlineEdit)) {\n <td class=\"col-context-menu\" fd-table-cell>\n <bsu-ulv-context-menu\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\n [conditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [mo]=\"mo\"\n [index]=\"index\"\n (commandClick)=\"onUlvCommand()\"\n [deviceName]=\"deviceName\"\n [menuItems]=\"contextMenuItems\"\n [allColumns]=\"allColumns\"\n ></bsu-ulv-context-menu>\n </td>\n } @if (showDetailsInRow && (!inlineEditMode || !allowInlineEdit)) {\n <td class=\"col-details\" fd-table-cell [fitContent]=\"true\">\n @if (detailsComponent?.Selector || cartableParams?.moId) {\n <button\n fd-button\n [label]=\"(detailsCollapsed ? detailsText : 'Hide') | bbbTranslate\"\n [fdType]=\"'transparent'\"\n (click)=\"onRowDetails()\"\n ></button>\n }\n </td>\n } @if (actionList?.length && !inlineEditMode) {\n <td class=\"col-view\" [class.rtl]=\"rtl\" fd-table-cell [fitContent]=\"true\">\n @for (a of actionList; track a) {\n <button\n fd-button\n [glyph]=\"a.glyph\"\n [navigation]=\"a.navigation\"\n [fdType]=\"'transparent'\"\n [role]=\"a.role\"\n bodyClick\n [disableBodyClick]=\"!a.closeOnClick\"\n (click)=\"a.handler({mo, index})\"\n ></button>\n }\n </td>\n } }\n</tr>\n} @if (secondaryColumns?.length && !mo.$Group && (!mo.$Parent || parentExpanded) && visibility !== false) {\n<tr\n #trEl\n fd-table-row\n [secondary]=\"true\"\n class=\"secondary-row\"\n [class.no-edit-mode]=\"!inlineEditMode\"\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [hostEl]=\"trEl\"\n [attr.aria-selected]=\"isChecked && !inlineEditMode ? true : false\"\n>\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n @if (!isCheckList) {\n <td fd-table-cell class=\"single-select\" (click)=\"onRowCheck()\"></td>\n }\n <td fd-table-cell colspan=\"100%\" (click)=\"onRowCheck()\" class=\"secondary p-wrapper\">\n <div style=\"display: flex; flex-direction: column\">\n @for (column of secondaryColumns; track _trackByColumn(columnIndex, column); let columnIndex = $index) {\n <p\n #pEl\n fd-table-text\n [applyConditionalFormats]=\"conditionalFormats\"\n [hostEl]=\"pEl\"\n [styleIndex]=\"styleIndex\"\n [dbName]=\"column.Name\"\n >\n <label fd-form-label>{{ column.Caption }} :</label>\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: {\n $implicit: column,\n mo: mo,\n index: columnIndex,\n inlineEditMode: inlineEditMode,\n layout94: layout$ | async\n }\n \"\n ></ng-container>\n </p>\n }\n </div>\n </td>\n</tr>\n} @if (cartableParams?.moId) {\n<tr [class.detailCollapsed]=\"detailsCollapsed\" fd-table-row class=\"showdetails\" [attr.aria-selected]=\"isChecked\">\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n <td\n (click)=\"onRowCheck()\"\n fd-table-cell\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems.length ? 1 : 0) +\n (canView ? 1 : 0) +\n (showDetailsInRow ? 1 : 0)\n \"\n >\n <ng-container>\n <bnrc-form\n #cartableFormRef\n class=\"cartable-template\"\n [inlineEditInReport]=\"true\"\n [params]=\"cartableParams\"\n (beforeTransition)=\"onCartableBeforeTansition()\"\n (afterTransition)=\"onCartableAfterTansition($event)\"\n (bruleAction)=\"onCartableBruleAction($event)\"\n (click)=\"OnCartableFormClick($event)\"\n (formClose)=\"onCartableFormClosed()\"\n ></bnrc-form>\n </ng-container>\n </td>\n</tr>\n} @if (!detailsCollapsed && detailsComponent?.Selector) {\n<tr fd-table-row class=\"showdetails\" [attr.aria-selected]=\"isChecked\">\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n <td\n (click)=\"onRowCheck()\"\n fd-table-cell\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n >\n <ng-container *ngTemplateOutlet=\"detailsColumnsTemplate\"></ng-container>\n @if (detailsComponent && detailsComponent.Selector) {\n <bnrc-dynamic-item-component\n [component]=\"detailsComponent\"\n [mo]=\"mo\"\n [isChecked]=\"isChecked\"\n [UlvMainCtrlr]=\"UlvMainCtrlr\"\n [setting]=\"detailsComponentSetting\"\n [parameters]=\"detailsComponent.Settings\"\n [editMode]=\"inlineEditMode\"\n [formSetting]=\"formSetting\"\n [rtl]=\"rtl\"\n [deviceName]=\"deviceName\"\n [deviceSize]=\"deviceSize\"\n [index]=\"index\"\n [allColumns]=\"allColumns\"\n [typeDefId]=\"typeDefId\"\n ></bnrc-dynamic-item-component>\n }\n </td>\n</tr>\n} @if(isLastChildGroup){\n<tr #trEl fd-table-row class=\"group-summary-row\" [class.no-edit-mode]=\"true\" [attr.aria-selected]=\"false\">\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n @if (!isCheckList) {\n <td fd-table-cell class=\"single-select\"></td>\n } @for (column of columns; track _trackByColumn(columnIndex, column); let columnIndex = $index) {\n <td fd-table-cell>\n <label #summaryRef>{{ reCalculateColumnSummary(summaryRef, column) }}</label>\n </td>\n }\n</tr>\n}\n<ng-template #detailsColumnsTemplate>\n <ng-container\n *ngTemplateOutlet=\"\n detailsFormItems;\n context: {\n $implicit: detailsColumns,\n mo: mo,\n inlineEditMode: inlineEditMode,\n layout94: layout$\n }\n \"\n ></ng-container>\n</ng-template>\n<ng-template #detailsFormItems let-detailsColumns let-mo=\"mo\" let-inlineEditMode=\"inlineEditMode\" let-layout$=\"layout$\">\n <div class=\"form-items\">\n @for (column of detailsColumns; track column; let columnIndex = $index) {\n <div fd-form-item>\n <label fd-form-label for=\"input-2\">{{ column.Caption }}</label>\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: {\n $implicit: column,\n mo: mo,\n index: columnIndex,\n inlineEditMode: inlineEditMode,\n layout94: layout$ | async\n }\n \"\n ></ng-container>\n </div>\n }\n </div>\n</ng-template>\n@if (bruleActionMessage && inlineEditMode) {\n<tr fd-table-row>\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n <td\n fd-table-cell\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n >\n @if (bruleActionMessage.MessageType === 2) {\n <fd-message-strip [type]=\"bruleActionMessage.MessageType === 2 ? 'error' : 'information'\" [dismissible]=\"false\">\n {{ bruleActionMessage.MessageExpression }}\n </fd-message-strip>\n }\n </td>\n</tr>\n} @if (workflowState?.state === 'Finish' && workflowState?.error) {\n<tr fd-table-row>\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n <td\n fd-table-cell\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n >\n <fd-message-strip type=\"error\" [dismissible]=\"true\" (onDismiss)=\"onResetWorkflowState()\">\n {{ workflowState.error?.Text || workflowState.error?.MessageExpression }}\n </fd-message-strip>\n </td>\n</tr>\n}\n<ng-template\n #columnTemplate\n let-column\n let-mo=\"mo\"\n let-index=\"index\"\n let-inlineEditMode=\"inlineEditMode\"\n let-layout94=\"layout94\"\n>\n <bsu-barsa-table-column\n [mo]=\"mo\"\n [allColumns]=\"allColumns\"\n [column]=\"column\"\n [isdirty]=\"dirtyColumns && dirtyColumns[column.Name]\"\n [value]=\"column | columnValue: mo\"\n [icon]=\"column | columnIcon: mo\"\n [customComponent]=\"column.$CustomComponent\"\n [column]=\"column\"\n [disableEllapsis]=\"secondaryColumns?.length\"\n [editMode]=\"isChecked && inlineEditMode && allowInlineEdit\"\n [inlineEditMode]=\"inlineEditMode\"\n [isChecked]=\"isChecked\"\n [index]=\"index\"\n [formSetting]=\"formSetting\"\n [rtl]=\"rtl\"\n [deviceName]=\"deviceName\"\n [deviceSize]=\"deviceSize\"\n [layout94]=\"layout94\"\n (save)=\"onEditFormPanelSave(null)\"\n (cancel)=\"onEditFormPanelCancel(null)\"\n (tab)=\"onTabKeyDown($event, index)\"\n (changeToEditMode)=\"onColumnChangeToEditMode($event, index)\"\n >\n </bsu-barsa-table-column>\n</ng-template>\n<ng-template #statusIndicator>\n @if (rowIndicator) {\n <bsu-barsa-column-indicator [hideBorderBottom]=\"!detailsCollapsed\" [backColor]=\"rowIndicatorColor\">\n </bsu-barsa-column-indicator>\n }\n</ng-template>\n<ng-template #rowNumberTemplate>\n @if (showRowNumber) {\n <bsu-barsa-column-rownumber [rowNumber]=\"rowNumber\" (click)=\"!isCheckList && onRowCheck()\">\n </bsu-barsa-column-rownumber>\n }\n</ng-template>\n<tr fd-table-row style=\"pointer-events: none\"></tr>\n", styles: [":host{display:contents;width:100%}:host bnrc-form.cartable-template ::ng-deep bsu-ly-layout-container-of-root{padding-bottom:1rem}:host ::ng-deep .row-group.mobile-mode{border-bottom:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e4e4e4)!important}:host ::ng-deep .inlineEditMode bnrc-field-ui{padding:0;margin:0}:host ::ng-deep .inlineEditMode bsu-ui-simple-combo{margin:0!important}:host ::ng-deep .secondary.p-wrapper p{display:flex;align-items:center}bsu-layout-control:not(.hide-form-item){align-items:center;height:100%;min-width:auto;width:auto}tr.group-summary-row td{border:none;background-color:#dde5f0;border-right:none!important;font-weight:700}tr.group-summary-row td label{font-weight:700}tr.group-summary-row td label.NaN{display:none}td{vertical-align:middle}td.control-readonly{background-color:var(--sapList_HeaderBackground)}tr.brule-message td{border:0}.row-group{background-color:var(--sapBackgroundColor, \"#f7f7ff\")}.cell-expand{cursor:pointer;display:inline-flex;justify-content:center;align-items:center;font-size:.75rem;color:#0854a0;color:var(--sapContent_IconColor, #0854a0);min-width:2rem;max-width:2rem}.save-error{color:var(--sapField_InvalidColor)}.save-success{color:var(--sapField_SuccessColor)}.flow{max-width:100%}.flow-item{display:flex}.flow-item fd-micro-process-flow-icon{width:1.375rem;height:1.375rem}.flow-item h5{padding-right:.3rem}.cartable-template{padding:.5rem 0}.workflow-pending{opacity:.5;pointer-events:none;position:relative}.detailCollapsed{height:0;display:none}tr td.rep-column:first-child{position:sticky;right:0}\n"] }]
|
|
65
|
+
args: [{ selector: 'bsu-barsa-table-row', providers: [FormPanelService], changeDetection: ChangeDetectionStrategy.OnPush, template: "@if ((!mo.$Parent || parentExpanded) && visibility !== false) {\n<tr\n [class.row-error]=\"hasError\"\n [class.showdetails-on]=\"!detailsCollapsed\"\n #trEl\n fd-table-row\n [activable]=\"false\"\n [hoverable]=\"true\"\n [main]=\"true\"\n [focusable]=\"true\"\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [hostEl]=\"trEl\"\n [attr.aria-selected]=\"isChecked\"\n [class.brule-message]=\"bruleActionMessage || workflowState?.error\"\n [class.workflow-pending]=\"workflowState?.state === 'Pending'\"\n [style.background-color]=\"isOdd && !isChecked ? 'var(--sapList_Hover_Background)' : null\"\n>\n @if (mo.$Group || mo.$Group === '') {\n <td\n [style.padding-right]=\"rtl ? 'calc( 1rem + ' + level * 12 + 'px' + ' )' : 'inherit'\"\n [style.padding-left]=\"!rtl ? 'calc( 1rem + ' + level * 12 + 'px' + ' )' : 'inherit'\"\n fd-table-cell\n style=\"font-weight: bold; font-size: 1rem\"\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n class=\"row-group\"\n [class.mobile-mode]=\"secondaryColumns?.length\"\n [attr.level]=\"level\"\n [class.root-group]=\"level === 0\"\n >\n <button\n fd-button\n [fdType]=\"'transparent'\"\n [glyph]=\"expanded !== false ? 'navigation-down-arrow' : 'navigation-left-arrow'\"\n class=\"cell-expand\"\n (click)=\"onExpandClick()\"\n ></button>\n {{ mo.$Group === 'undefined' ? '' : mo.$Group }}\n </td>\n } @else {\n\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n @if (isCheckList) {\n <td fd-table-cell [style.width]=\"checkboxComponent ? '60px' : null\">\n @if (workflowState?.state === 'Pending') {\n <div style=\"position: absolute; left: 0; right: 0; bottom: 0; top: 0\">\n <bsu-mask [top]=\"'20px'\" [size]=\"'s'\"></bsu-mask>\n </div>\n } @if (checkboxComponent?.Selector) {\n <bnrc-dynamic-item-component\n [component]=\"checkboxComponent\"\n [mo]=\"mo\"\n [isChecked]=\"isChecked\"\n [UlvMainCtrlr]=\"UlvMainCtrlr\"\n [setting]=\"setting\"\n [parameters]=\"checkboxComponent.Parameters\"\n [editMode]=\"inlineEditMode\"\n [rtl]=\"rtl\"\n [deviceName]=\"deviceName\"\n [value]=\"isChecked\"\n [deviceSize]=\"deviceSize\"\n [index]=\"index\"\n [allColumns]=\"allColumns\"\n [typeDefId]=\"typeDefId\"\n (events)=\"onRowCheck()\"\n ></bnrc-dynamic-item-component>\n } @else {\n <fd-checkbox [name]=\"mo.$Caption\" [ngModel]=\"isChecked\" (ngModelChange)=\"onRowCheck()\"></fd-checkbox>\n }\n </td>\n } @if (!isCheckList && !showRowNumber) {\n <td\n fd-table-cell\n class=\"single-select\"\n (click)=\"!isCheckList && onRowCheck()\"\n style=\"padding: 0; text-align: center\"\n >\n @if (inlineEditMode && allowInlineEdit && (hasError || saving || saved)) { @if (hasError) {\n <fd-icon class=\"save-error\" glyph=\"error\"></fd-icon>\n } @if (saving) {\n <fd-busy-indicator [loading]=\"true\" [size]=\"'s'\" title=\"record saving\"></fd-busy-indicator>\n } @if (saved) {\n <fd-icon class=\"save-success\" glyph=\"accept\"></fd-icon>\n } } @else { @if (mo.$State === 'New' && !isChecked) {\n <fd-icon glyph=\"favorite\"></fd-icon>\n } @if (inlineEditMode && allowInlineEdit && isChecked) {\n <fd-icon glyph=\"edit\"></fd-icon>\n } }\n </td>\n }\n <ng-container *ngTemplateOutlet=\"rowNumberTemplate\"></ng-container>\n @for (column of columns; track column.Name; let columnIndex = $index) {\n <td\n class=\"rep-column\"\n [attr.dbName]=\"column.Name\"\n #tdEl\n fd-table-cell\n [applyConditionalFormats]=\"conditionalFormats\"\n [hostEl]=\"tdEl\"\n [styleIndex]=\"styleIndex\"\n [dbName]=\"column.Name\"\n [focusable]=\"false\"\n (click)=\"onColumnClick()\"\n (dblclick)=\"onRowClick()\"\n [hoverable]=\"inlineEditMode && allowInlineEdit\"\n [class.control-readonly]=\"column.IsReadonly\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: {\n $implicit: column,\n mo: mo,\n index: columnIndex,\n inlineEditMode: inlineEditMode,\n layout94: layout$ | async\n }\n \"\n ></ng-container>\n </td>\n } @if (contextMenuItems.length && (!inlineEditMode || !allowInlineEdit)) {\n <td class=\"col-context-menu\" fd-table-cell>\n <bsu-ulv-context-menu\n [disableOverflowContextMenu]=\"disableOverflowContextMenu\"\n [conditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [mo]=\"mo\"\n [index]=\"index\"\n (commandClick)=\"onUlvCommand()\"\n [deviceName]=\"deviceName\"\n [menuItems]=\"contextMenuItems\"\n [allColumns]=\"allColumns\"\n ></bsu-ulv-context-menu>\n </td>\n } @if (showDetailsInRow && (!inlineEditMode || !allowInlineEdit)) {\n <td class=\"col-details\" fd-table-cell [fitContent]=\"true\">\n @if (detailsComponent?.Selector || cartableParams?.moId) {\n <button\n fd-button\n [label]=\"(detailsCollapsed ? detailsText : 'Hide') | bbbTranslate\"\n [fdType]=\"'transparent'\"\n (click)=\"onRowDetails()\"\n ></button>\n }\n </td>\n } @if (actionList?.length && !inlineEditMode) {\n <td class=\"col-view\" [class.rtl]=\"rtl\" fd-table-cell [fitContent]=\"true\">\n @for (a of actionList; track a) {\n <button\n fd-button\n [glyph]=\"a.glyph\"\n [navigation]=\"a.navigation\"\n [fdType]=\"'transparent'\"\n [role]=\"a.role\"\n bodyClick\n [disableBodyClick]=\"!a.closeOnClick\"\n (click)=\"a.handler({mo, index})\"\n ></button>\n }\n </td>\n } }\n</tr>\n} @if (secondaryColumns?.length && !mo.$Group && (!mo.$Parent || parentExpanded) && visibility !== false) {\n<tr\n #trEl\n fd-table-row\n [secondary]=\"true\"\n class=\"secondary-row\"\n [class.no-edit-mode]=\"!inlineEditMode\"\n [applyConditionalFormats]=\"conditionalFormats\"\n [styleIndex]=\"styleIndex\"\n [hostEl]=\"trEl\"\n [attr.aria-selected]=\"isChecked && !inlineEditMode ? true : false\"\n>\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n @if (!isCheckList) {\n <td fd-table-cell class=\"single-select\" (click)=\"onRowCheck()\"></td>\n }\n <td fd-table-cell colspan=\"100%\" (click)=\"onRowCheck()\" class=\"secondary p-wrapper\">\n <div style=\"display: flex; flex-direction: column\">\n @for (column of secondaryColumns; track _trackByColumn(columnIndex, column); let columnIndex = $index) {\n <p\n #pEl\n fd-table-text\n [applyConditionalFormats]=\"conditionalFormats\"\n [hostEl]=\"pEl\"\n [styleIndex]=\"styleIndex\"\n [dbName]=\"column.Name\"\n >\n <label fd-form-label>{{ column.Caption }} :</label>\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: {\n $implicit: column,\n mo: mo,\n index: columnIndex,\n inlineEditMode: inlineEditMode,\n layout94: layout$ | async\n }\n \"\n ></ng-container>\n </p>\n }\n </div>\n </td>\n</tr>\n} @if (cartableParams?.moId) {\n<tr [class.detailCollapsed]=\"detailsCollapsed\" fd-table-row class=\"showdetails\" [attr.aria-selected]=\"isChecked\">\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n <td\n (click)=\"onRowCheck()\"\n fd-table-cell\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems.length ? 1 : 0) +\n (canView ? 1 : 0) +\n (showDetailsInRow ? 1 : 0)\n \"\n >\n <ng-container>\n <bnrc-form\n #cartableFormRef\n class=\"cartable-template\"\n [inlineEditInReport]=\"true\"\n [params]=\"cartableParams\"\n (beforeTransition)=\"onCartableBeforeTansition()\"\n (afterTransition)=\"onCartableAfterTansition($event)\"\n (bruleAction)=\"onCartableBruleAction($event)\"\n (click)=\"OnCartableFormClick($event)\"\n (formClose)=\"onCartableFormClosed()\"\n ></bnrc-form>\n </ng-container>\n </td>\n</tr>\n} @if (!detailsCollapsed && detailsComponent?.Selector) {\n<tr fd-table-row class=\"showdetails\" [attr.aria-selected]=\"isChecked\">\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n <td\n (click)=\"onRowCheck()\"\n fd-table-cell\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n >\n <ng-container *ngTemplateOutlet=\"detailsColumnsTemplate\"></ng-container>\n @if (detailsComponent && detailsComponent.Selector) {\n <bnrc-dynamic-item-component\n [component]=\"detailsComponent\"\n [mo]=\"mo\"\n [isChecked]=\"isChecked\"\n [UlvMainCtrlr]=\"UlvMainCtrlr\"\n [setting]=\"detailsComponentSetting\"\n [parameters]=\"detailsComponent.Settings\"\n [editMode]=\"inlineEditMode\"\n [formSetting]=\"formSetting\"\n [rtl]=\"rtl\"\n [deviceName]=\"deviceName\"\n [deviceSize]=\"deviceSize\"\n [index]=\"index\"\n [allColumns]=\"allColumns\"\n [typeDefId]=\"typeDefId\"\n ></bnrc-dynamic-item-component>\n }\n </td>\n</tr>\n} @if(isLastChildGroup){\n<tr #trEl fd-table-row class=\"group-summary-row\" [class.no-edit-mode]=\"true\" [attr.aria-selected]=\"false\">\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n @if (!isCheckList) {\n <td fd-table-cell class=\"single-select\"></td>\n } @for (column of columns; track _trackByColumn(columnIndex, column); let columnIndex = $index) {\n <td fd-table-cell>\n <label #summaryRef>{{ reCalculateColumnSummary(summaryRef, column) }}</label>\n </td>\n }\n</tr>\n} @if (bruleActionMessage && inlineEditMode) {\n<tr fd-table-row>\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n <td\n fd-table-cell\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n >\n @if (bruleActionMessage.MessageType === 2) {\n <fd-message-strip [type]=\"bruleActionMessage.MessageType === 2 ? 'error' : 'information'\" [dismissible]=\"false\">\n {{ bruleActionMessage.MessageExpression }}\n </fd-message-strip>\n }\n </td>\n</tr>\n} @if (workflowState?.state === 'Finish' && workflowState?.error) {\n<tr fd-table-row>\n <ng-container *ngTemplateOutlet=\"statusIndicator\"></ng-container>\n <td\n fd-table-cell\n [attr.colspan]=\"\n columns.length +\n 1 +\n (rowIndicator ? -1 : 0) +\n (contextMenuItems && contextMenuItems.length > 0 && !inlineEditMode ? 1 : 0) +\n (showViewButton ? 1 : 0) +\n (showDetailsInRow && !inlineEditMode ? 1 : 0)\n \"\n >\n <fd-message-strip type=\"error\" [dismissible]=\"true\" (onDismiss)=\"onResetWorkflowState()\">\n {{ workflowState.error?.Text || workflowState.error?.MessageExpression }}\n </fd-message-strip>\n </td>\n</tr>\n}\n<ng-template #detailsColumnsTemplate>\n <ng-container\n *ngTemplateOutlet=\"\n detailsFormItems;\n context: {\n $implicit: detailsColumns,\n mo: mo,\n inlineEditMode: inlineEditMode,\n layout94: layout$\n }\n \"\n ></ng-container>\n</ng-template>\n<ng-template #detailsFormItems let-detailsColumns let-mo=\"mo\" let-inlineEditMode=\"inlineEditMode\" let-layout$=\"layout$\">\n <div class=\"form-items\">\n @for (column of detailsColumns; track column; let columnIndex = $index) {\n <div fd-form-item>\n <label fd-form-label for=\"input-2\">{{ column.Caption }}</label>\n <ng-container\n *ngTemplateOutlet=\"\n columnTemplate;\n context: {\n $implicit: column,\n mo: mo,\n index: columnIndex,\n inlineEditMode: inlineEditMode,\n layout94: layout$ | async\n }\n \"\n ></ng-container>\n </div>\n }\n </div>\n</ng-template>\n<ng-template\n #columnTemplate\n let-column\n let-mo=\"mo\"\n let-index=\"index\"\n let-inlineEditMode=\"inlineEditMode\"\n let-layout94=\"layout94\"\n>\n <bsu-barsa-table-column\n [mo]=\"mo\"\n [allColumns]=\"allColumns\"\n [column]=\"column\"\n [isdirty]=\"dirtyColumns && dirtyColumns[column.Name]\"\n [value]=\"column | columnValue: mo\"\n [icon]=\"column | columnIcon: mo\"\n [customComponent]=\"column.$CustomComponent\"\n [column]=\"column\"\n [disableEllapsis]=\"secondaryColumns?.length\"\n [editMode]=\"isChecked && inlineEditMode && allowInlineEdit\"\n [inlineEditMode]=\"inlineEditMode\"\n [isChecked]=\"isChecked\"\n [index]=\"index\"\n [formSetting]=\"formSetting\"\n [rtl]=\"rtl\"\n [deviceName]=\"deviceName\"\n [deviceSize]=\"deviceSize\"\n [layout94]=\"layout94\"\n (save)=\"onEditFormPanelSave(null)\"\n (cancel)=\"onEditFormPanelCancel(null)\"\n (tab)=\"onTabKeyDown($event, index)\"\n (changeToEditMode)=\"onColumnChangeToEditMode($event, index)\"\n >\n </bsu-barsa-table-column>\n</ng-template>\n<ng-template #statusIndicator>\n @if (rowIndicator) {\n <bsu-barsa-column-indicator [hideBorderBottom]=\"!detailsCollapsed\" [backColor]=\"rowIndicatorColor\">\n </bsu-barsa-column-indicator>\n }\n</ng-template>\n<ng-template #rowNumberTemplate>\n @if (showRowNumber) {\n <bsu-barsa-column-rownumber [rowNumber]=\"rowNumber\" (click)=\"!isCheckList && onRowCheck()\">\n </bsu-barsa-column-rownumber>\n }\n</ng-template>\n<tr fd-table-row style=\"pointer-events: none\"></tr>\n", styles: [":host{display:contents;width:100%}:host bnrc-form.cartable-template ::ng-deep bsu-ly-layout-container-of-root{padding-bottom:1rem}:host ::ng-deep .row-group.mobile-mode{border-bottom:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e4e4e4)!important}:host ::ng-deep .inlineEditMode bnrc-field-ui{padding:0;margin:0}:host ::ng-deep .inlineEditMode bsu-ui-simple-combo{margin:0!important}:host ::ng-deep .secondary.p-wrapper p{display:flex;align-items:center}bsu-layout-control:not(.hide-form-item){align-items:center;height:100%;min-width:auto;width:auto}tr.group-summary-row td{border:none;background-color:#dde5f0;border-right:none!important;font-weight:700}tr.group-summary-row td label{font-weight:700}tr.group-summary-row td label.NaN{display:none}td{vertical-align:middle}td.control-readonly{background-color:var(--sapList_HeaderBackground)}tr.brule-message td{border:0}.row-group{background-color:var(--sapBackgroundColor, \"#f7f7ff\")}.cell-expand{cursor:pointer;display:inline-flex;justify-content:center;align-items:center;font-size:.75rem;color:#0854a0;color:var(--sapContent_IconColor, #0854a0);min-width:2rem;max-width:2rem}.save-error{color:var(--sapField_InvalidColor)}.save-success{color:var(--sapField_SuccessColor)}.flow{max-width:100%}.flow-item{display:flex}.flow-item fd-micro-process-flow-icon{width:1.375rem;height:1.375rem}.flow-item h5{padding-right:.3rem}.cartable-template{padding:.5rem 0}.workflow-pending{opacity:.5;pointer-events:none;position:relative}.detailCollapsed{height:0;display:none}tr td.rep-column:first-child{position:sticky;right:0}\n"] }]
|
|
65
66
|
}], propDecorators: { showDetailsInRow: [{
|
|
66
67
|
type: Input
|
|
67
68
|
}], detailsComponent: [{
|
|
@@ -82,4 +83,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
|
|
|
82
83
|
type: ViewChild,
|
|
83
84
|
args: ['detailsFormItems', { static: true }]
|
|
84
85
|
}] } });
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyc2EtdGFibGUtcm93LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL2JhcnNhLXRhYmxlLXJvdy9iYXJzYS10YWJsZS1yb3cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvYmFyc2EtdGFibGUtcm93L2JhcnNhLXRhYmxlLXJvdy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULHVCQUF1QixFQUN2QixLQUFLLEVBR0wsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sU0FBUyxFQUNULE1BQU0sRUFDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUgsMEJBQTBCLEVBQzFCLGdCQUFnQixFQUluQixNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTOUIsTUFBTSxPQUFPLHNCQUF1QixTQUFRLDBCQUEwQjtJQVB0RTs7UUFRYSxxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFPeEIsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBcUIsQ0FBQztRQUVoRSxxQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFHeEIsZUFBVSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztLQWdDbEM7SUEvQkcsUUFBUTtRQUNKLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7UUFDdEYsSUFBSSxDQUFDLHVCQUF1QixHQUFHO1lBQzNCLEdBQUcsSUFBSSxDQUFDLE9BQU87WUFDZixlQUFlLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDcEMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtTQUMzQyxDQUFDO1FBQ0YsSUFBSSxDQUFDLFdBQVcsS0FBSyxTQUFTLENBQUM7SUFDbkMsQ0FBQztJQUNELHdCQUF3QixDQUFDLEtBQWtCLEVBQUUsTUFBTTtRQUMvQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQztZQUNwQixLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsU0FBUztZQUNoQyxNQUFNO1lBQ04sU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ2YsS0FBSyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUNoRSxLQUFLLENBQUMsU0FBUyxHQUFHLEdBQUcsQ0FBQztZQUMxQixDQUFDO1NBQ0osQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUNELGFBQWE7UUFDVCxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNuQixPQUFPO1FBQ1gsQ0FBQztRQUNELElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBQ0QsWUFBWTtRQUNSLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUMvQyxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQzlCLENBQUM7OEdBNUNRLHNCQUFzQjtrR0FBdEIsc0JBQXNCLCtVQUhwQixDQUFDLGdCQUFnQixDQUFDLHFMQ3pCakMsK3FmQStaQTs7MkZEbllhLHNCQUFzQjtrQkFQbEMsU0FBUzsrQkFDSSxxQkFBcUIsYUFHcEIsQ0FBQyxnQkFBZ0IsQ0FBQyxtQkFDWix1QkFBdUIsQ0FBQyxNQUFNOzhCQUd0QyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGNBQWM7c0JBQXRCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNJLGFBQWE7c0JBQXRCLE1BQU07Z0JBQzBDLGdCQUFnQjtzQkFBaEUsU0FBUzt1QkFBQyxrQkFBa0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENvbXBvbmVudCxcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgICBJbnB1dCxcbiAgICBPbkluaXQsXG4gICAgVGVtcGxhdGVSZWYsXG4gICAgVmlld0NoaWxkLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBPdXRwdXQsXG4gICAgUmVuZGVyZXIyLFxuICAgIGluamVjdFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgTW9Gb3JSZXBvcnRNb2RlbCxcbiAgICBCYXNlVmlld0l0ZW1Qcm9wc0NvbXBvbmVudCxcbiAgICBGb3JtUGFuZWxTZXJ2aWNlLFxuICAgIEVqcmF5T2xnbyxcbiAgICBSZXBvcnRWaWV3Q29sdW1uLFxuICAgIENvbHVtblN1bW1hcnlUeXBlXG59IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdic3UtYmFyc2EtdGFibGUtcm93JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYmFyc2EtdGFibGUtcm93LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9iYXJzYS10YWJsZS1yb3cuY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtGb3JtUGFuZWxTZXJ2aWNlXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBCYXJzYVRhYmxlUm93Q29tcG9uZW50IGV4dGVuZHMgQmFzZVZpZXdJdGVtUHJvcHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBJbnB1dCgpIHNob3dEZXRhaWxzSW5Sb3cgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBkZXRhaWxzQ29tcG9uZW50PzogRWpyYXlPbGdvO1xuICAgIEBJbnB1dCgpIGRldGFpbHNDb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW107XG4gICAgQElucHV0KCkgZGV0YWlsc1RleHQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBjb2x1bW5Db21wb25lbnRzOiBNb0ZvclJlcG9ydE1vZGVsIHwgbnVsbDtcbiAgICBASW5wdXQoKSBhY3Rpb25MaXN0OiBhbnlbXTtcbiAgICBASW5wdXQoKSBkaXJ0eUNvbHVtbnM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+O1xuICAgIEBPdXRwdXQoKSBjb2x1bW5TdW1tYXJ5ID0gbmV3IEV2ZW50RW1pdHRlcjxDb2x1bW5TdW1tYXJ5VHlwZT4oKTtcbiAgICBAVmlld0NoaWxkKCdkZXRhaWxzRm9ybUl0ZW1zJywgeyBzdGF0aWM6IHRydWUgfSkgZGV0YWlsc0Zvcm1JdGVtczogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBkZXRhaWxzQ29sbGFwc2VkID0gdHJ1ZTtcbiAgICBkZXRhaWxzQ29tcG9uZW50U2V0dGluZzogYW55O1xuICAgIGlzT2RkOiBib29sZWFuO1xuICAgIF9yZW5kZXJlcjIgPSBpbmplY3QoUmVuZGVyZXIyKTtcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgY29uc3Qgcm93TiA9IE51bWJlcih0aGlzLnJvd051bWJlcik7XG4gICAgICAgIHRoaXMuaXNPZGQgPSBpc05hTihyb3dOKSB8fCAhdGhpcy5jb2xvcmluZ1JvdyA/IGZhbHNlIDogcm93TiAlIDIgPT09IDAgPyB0cnVlIDogZmFsc2U7XG4gICAgICAgIHRoaXMuZGV0YWlsc0NvbXBvbmVudFNldHRpbmcgPSB7XG4gICAgICAgICAgICAuLi50aGlzLnNldHRpbmcsXG4gICAgICAgICAgICAkZGV0YWlsc0NvbHVtbnM6IHRoaXMuZGV0YWlsc0NvbHVtbnMsXG4gICAgICAgICAgICAkZGV0YWlsc0Zvcm1JdGVtczogdGhpcy5kZXRhaWxzRm9ybUl0ZW1zXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZGV0YWlsc1RleHQgfHw9ICdEZXRhaWxzJztcbiAgICB9XG4gICAgcmVDYWxjdWxhdGVDb2x1bW5TdW1tYXJ5KGVsRG9tOiBIVE1MRWxlbWVudCwgY29sdW1uKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29sdW1uU3VtbWFyeS5lbWl0KHtcbiAgICAgICAgICAgIG1vQXJyOiB0aGlzLm1vLiRQYXJlbnQuJENoaWxkcmVuLFxuICAgICAgICAgICAgY29sdW1uLFxuICAgICAgICAgICAgc3VtbWFyeUZuOiAodmFsKSA9PiB7XG4gICAgICAgICAgICAgICAgZWxEb20uY2xhc3NOYW1lID0gdmFsLnRvU3RyaW5nKCkucmVwbGFjZSgvJmxybTt8XFx1MjAwRS9naSwgJyAnKTtcbiAgICAgICAgICAgICAgICBlbERvbS5pbm5lckhUTUwgPSB2YWw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBvbkNvbHVtbkNsaWNrKCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5pc0NoZWNrTGlzdCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25Sb3dDaGVjaygpO1xuICAgIH1cbiAgICBvblJvd0RldGFpbHMoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuZGV0YWlsc0NvbGxhcHNlZCA9ICF0aGlzLmRldGFpbHNDb2xsYXBzZWQ7XG4gICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgfVxufVxuIiwiQGlmICgoIW1vLiRQYXJlbnQgfHwgcGFyZW50RXhwYW5kZWQpICYmIHZpc2liaWxpdHkgIT09IGZhbHNlKSB7XG48dHJcbiAgICBbY2xhc3Mucm93LWVycm9yXT1cImhhc0Vycm9yXCJcbiAgICBbY2xhc3Muc2hvd2RldGFpbHMtb25dPVwiIWRldGFpbHNDb2xsYXBzZWRcIlxuICAgICN0ckVsXG4gICAgZmQtdGFibGUtcm93XG4gICAgW2FjdGl2YWJsZV09XCJmYWxzZVwiXG4gICAgW2hvdmVyYWJsZV09XCJ0cnVlXCJcbiAgICBbbWFpbl09XCJ0cnVlXCJcbiAgICBbZm9jdXNhYmxlXT1cInRydWVcIlxuICAgIFthcHBseUNvbmRpdGlvbmFsRm9ybWF0c109XCJjb25kaXRpb25hbEZvcm1hdHNcIlxuICAgIFtzdHlsZUluZGV4XT1cInN0eWxlSW5kZXhcIlxuICAgIFtob3N0RWxdPVwidHJFbFwiXG4gICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJpc0NoZWNrZWRcIlxuICAgIFtjbGFzcy5icnVsZS1tZXNzYWdlXT1cImJydWxlQWN0aW9uTWVzc2FnZSB8fCB3b3JrZmxvd1N0YXRlPy5lcnJvclwiXG4gICAgW2NsYXNzLndvcmtmbG93LXBlbmRpbmddPVwid29ya2Zsb3dTdGF0ZT8uc3RhdGUgPT09ICdQZW5kaW5nJ1wiXG4gICAgW3N0eWxlLmJhY2tncm91bmQtY29sb3JdPVwiaXNPZGQgPyAndmFyKC0tc2FwTGlzdF9Ib3Zlcl9CYWNrZ3JvdW5kKScgOiBudWxsXCJcbj5cbiAgICBAaWYgKG1vLiRHcm91cCB8fCBtby4kR3JvdXAgPT09ICcnKSB7XG4gICAgPHRkXG4gICAgICAgIFtzdHlsZS5wYWRkaW5nLXJpZ2h0XT1cInJ0bCA/ICdjYWxjKCAxcmVtICsgJyArIGxldmVsICogMTIgKyAncHgnICsgJyApJyA6ICdpbmhlcml0J1wiXG4gICAgICAgIFtzdHlsZS5wYWRkaW5nLWxlZnRdPVwiIXJ0bCA/ICdjYWxjKCAxcmVtICsgJyArIGxldmVsICogMTIgKyAncHgnICsgJyApJyA6ICdpbmhlcml0J1wiXG4gICAgICAgIGZkLXRhYmxlLWNlbGxcbiAgICAgICAgc3R5bGU9XCJmb250LXdlaWdodDogYm9sZDsgZm9udC1zaXplOiAxcmVtXCJcbiAgICAgICAgW2F0dHIuY29sc3Bhbl09XCJcbiAgICAgICAgICAgIGNvbHVtbnMubGVuZ3RoICtcbiAgICAgICAgICAgIDEgK1xuICAgICAgICAgICAgKHJvd0luZGljYXRvciA/IC0xIDogMCkgK1xuICAgICAgICAgICAgKGNvbnRleHRNZW51SXRlbXMgJiYgY29udGV4dE1lbnVJdGVtcy5sZW5ndGggPiAwICYmICFpbmxpbmVFZGl0TW9kZSA/IDEgOiAwKSArXG4gICAgICAgICAgICAoc2hvd1ZpZXdCdXR0b24gPyAxIDogMCkgK1xuICAgICAgICAgICAgKHNob3dEZXRhaWxzSW5Sb3cgJiYgIWlubGluZUVkaXRNb2RlID8gMSA6IDApXG4gICAgICAgIFwiXG4gICAgICAgIGNsYXNzPVwicm93LWdyb3VwXCJcbiAgICAgICAgW2NsYXNzLm1vYmlsZS1tb2RlXT1cInNlY29uZGFyeUNvbHVtbnM/Lmxlbmd0aFwiXG4gICAgICAgIFthdHRyLmxldmVsXT1cImxldmVsXCJcbiAgICAgICAgW2NsYXNzLnJvb3QtZ3JvdXBdPVwibGV2ZWwgPT09IDBcIlxuICAgID5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICBbZmRUeXBlXT1cIid0cmFuc3BhcmVudCdcIlxuICAgICAgICAgICAgW2dseXBoXT1cImV4cGFuZGVkICE9PSBmYWxzZSA/ICduYXZpZ2F0aW9uLWRvd24tYXJyb3cnIDogJ25hdmlnYXRpb24tbGVmdC1hcnJvdydcIlxuICAgICAgICAgICAgY2xhc3M9XCJjZWxsLWV4cGFuZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25FeHBhbmRDbGljaygpXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICB7eyBtby4kR3JvdXAgPT09ICd1bmRlZmluZWQnID8gJycgOiBtby4kR3JvdXAgfX1cbiAgICA8L3RkPlxuICAgIH0gQGVsc2Uge1xuXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN0YXR1c0luZGljYXRvclwiPjwvbmctY29udGFpbmVyPlxuICAgIEBpZiAoaXNDaGVja0xpc3QpIHtcbiAgICA8dGQgZmQtdGFibGUtY2VsbCBbc3R5bGUud2lkdGhdPVwiY2hlY2tib3hDb21wb25lbnQgPyAnNjBweCcgOiBudWxsXCI+XG4gICAgICAgIEBpZiAod29ya2Zsb3dTdGF0ZT8uc3RhdGUgPT09ICdQZW5kaW5nJykge1xuICAgICAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAwOyByaWdodDogMDsgYm90dG9tOiAwOyB0b3A6IDBcIj5cbiAgICAgICAgICAgIDxic3UtbWFzayBbdG9wXT1cIicyMHB4J1wiIFtzaXplXT1cIidzJ1wiPjwvYnN1LW1hc2s+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9IEBpZiAoY2hlY2tib3hDb21wb25lbnQ/LlNlbGVjdG9yKSB7XG4gICAgICAgIDxibnJjLWR5bmFtaWMtaXRlbS1jb21wb25lbnRcbiAgICAgICAgICAgIFtjb21wb25lbnRdPVwiY2hlY2tib3hDb21wb25lbnRcIlxuICAgICAgICAgICAgW21vXT1cIm1vXCJcbiAgICAgICAgICAgIFtpc0NoZWNrZWRdPVwiaXNDaGVja2VkXCJcbiAgICAgICAgICAgIFtVbHZNYWluQ3RybHJdPVwiVWx2TWFpbkN0cmxyXCJcbiAgICAgICAgICAgIFtzZXR0aW5nXT1cInNldHRpbmdcIlxuICAgICAgICAgICAgW3BhcmFtZXRlcnNdPVwiY2hlY2tib3hDb21wb25lbnQuUGFyYW1ldGVyc1wiXG4gICAgICAgICAgICBbZWRpdE1vZGVdPVwiaW5saW5lRWRpdE1vZGVcIlxuICAgICAgICAgICAgW3J0bF09XCJydGxcIlxuICAgICAgICAgICAgW2RldmljZU5hbWVdPVwiZGV2aWNlTmFtZVwiXG4gICAgICAgICAgICBbdmFsdWVdPVwiaXNDaGVja2VkXCJcbiAgICAgICAgICAgIFtkZXZpY2VTaXplXT1cImRldmljZVNpemVcIlxuICAgICAgICAgICAgW2luZGV4XT1cImluZGV4XCJcbiAgICAgICAgICAgIFthbGxDb2x1bW5zXT1cImFsbENvbHVtbnNcIlxuICAgICAgICAgICAgW3R5cGVEZWZJZF09XCJ0eXBlRGVmSWRcIlxuICAgICAgICAgICAgKGV2ZW50cyk9XCJvblJvd0NoZWNrKClcIlxuICAgICAgICA+PC9ibnJjLWR5bmFtaWMtaXRlbS1jb21wb25lbnQ+XG4gICAgICAgIH0gQGlmICghY2hlY2tib3hDb21wb25lbnQ/LlNlbGVjdG9yKSB7XG4gICAgICAgIDxmZC1jaGVja2JveCBbbmFtZV09XCJtby4kQ2FwdGlvblwiIFtuZ01vZGVsXT1cImlzQ2hlY2tlZFwiIChuZ01vZGVsQ2hhbmdlKT1cIm9uUm93Q2hlY2soKVwiPjwvZmQtY2hlY2tib3g+XG4gICAgICAgIH1cbiAgICA8L3RkPlxuICAgIH0gQGlmICghaXNDaGVja0xpc3QgJiYgIXNob3dSb3dOdW1iZXIpIHtcbiAgICA8dGRcbiAgICAgICAgZmQtdGFibGUtY2VsbFxuICAgICAgICBjbGFzcz1cInNpbmdsZS1zZWxlY3RcIlxuICAgICAgICAoY2xpY2spPVwiIWlzQ2hlY2tMaXN0ICYmIG9uUm93Q2hlY2soKVwiXG4gICAgICAgIHN0eWxlPVwicGFkZGluZzogMDsgdGV4dC1hbGlnbjogY2VudGVyXCJcbiAgICA+XG4gICAgICAgIEBpZiAoaW5saW5lRWRpdE1vZGUgJiYgYWxsb3dJbmxpbmVFZGl0ICYmIChoYXNFcnJvciB8fCBzYXZpbmcgfHwgc2F2ZWQpKSB7IEBpZiAoaGFzRXJyb3IpIHtcbiAgICAgICAgPGZkLWljb24gY2xhc3M9XCJzYXZlLWVycm9yXCIgZ2x5cGg9XCJlcnJvclwiPjwvZmQtaWNvbj5cbiAgICAgICAgfSBAaWYgKHNhdmluZykge1xuICAgICAgICA8ZmQtYnVzeS1pbmRpY2F0b3IgW2xvYWRpbmddPVwidHJ1ZVwiIFtzaXplXT1cIidzJ1wiIHRpdGxlPVwicmVjb3JkIHNhdmluZ1wiPjwvZmQtYnVzeS1pbmRpY2F0b3I+XG4gICAgICAgIH0gQGlmIChzYXZlZCkge1xuICAgICAgICA8ZmQtaWNvbiBjbGFzcz1cInNhdmUtc3VjY2Vzc1wiIGdseXBoPVwiYWNjZXB0XCI+PC9mZC1pY29uPlxuICAgICAgICB9IH0gQGVsc2UgeyBAaWYgKG1vLiRTdGF0ZSA9PT0gJ05ldycgJiYgIWlzQ2hlY2tlZCkge1xuICAgICAgICA8ZmQtaWNvbiBnbHlwaD1cImZhdm9yaXRlXCI+PC9mZC1pY29uPlxuICAgICAgICB9IEBpZiAoaW5saW5lRWRpdE1vZGUgJiYgYWxsb3dJbmxpbmVFZGl0ICYmIGlzQ2hlY2tlZCkge1xuICAgICAgICA8ZmQtaWNvbiBnbHlwaD1cImVkaXRcIj48L2ZkLWljb24+XG4gICAgICAgIH0gfVxuICAgIDwvdGQ+XG4gICAgfVxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyb3dOdW1iZXJUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgIEBmb3IgKGNvbHVtbiBvZiBjb2x1bW5zOyB0cmFjayBjb2x1bW47IGxldCBjb2x1bW5JbmRleCA9ICRpbmRleCkgeyBAaWYgKChyb3dJbmRpY2F0b3IgJiYgY29sdW1uSW5kZXggPiAwKSB8fFxuICAgICFyb3dJbmRpY2F0b3IpIHtcbiAgICA8dGRcbiAgICAgICAgY2xhc3M9XCJyZXAtY29sdW1uXCJcbiAgICAgICAgW2F0dHIuZGJOYW1lXT1cImNvbHVtbi5OYW1lXCJcbiAgICAgICAgI3RkRWxcbiAgICAgICAgZmQtdGFibGUtY2VsbFxuICAgICAgICBbYXBwbHlDb25kaXRpb25hbEZvcm1hdHNdPVwiY29uZGl0aW9uYWxGb3JtYXRzXCJcbiAgICAgICAgW2hvc3RFbF09XCJ0ZEVsXCJcbiAgICAgICAgW3N0eWxlSW5kZXhdPVwic3R5bGVJbmRleFwiXG4gICAgICAgIFtkYk5hbWVdPVwiY29sdW1uLk5hbWVcIlxuICAgICAgICBbZm9jdXNhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uQ29sdW1uQ2xpY2soKVwiXG4gICAgICAgIChkYmxjbGljayk9XCJvblJvd0NsaWNrKClcIlxuICAgICAgICBbaG92ZXJhYmxlXT1cImlubGluZUVkaXRNb2RlICYmIGFsbG93SW5saW5lRWRpdFwiXG4gICAgICAgIFtjbGFzcy5jb250cm9sLXJlYWRvbmx5XT1cImNvbHVtbi5Jc1JlYWRvbmx5XCJcbiAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgY29sdW1uVGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgbW86IG1vLFxuICAgICAgICAgICAgICAgICAgICBpbmRleDogY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIGlubGluZUVkaXRNb2RlOiBpbmxpbmVFZGl0TW9kZSxcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0OTQ6IGxheW91dCQgfCBhc3luY1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L3RkPlxuICAgIH0gfSBAaWYgKGNvbnRleHRNZW51SXRlbXMubGVuZ3RoICYmICghaW5saW5lRWRpdE1vZGUgfHwgIWFsbG93SW5saW5lRWRpdCkpIHtcbiAgICA8dGQgY2xhc3M9XCJjb2wtY29udGV4dC1tZW51XCIgZmQtdGFibGUtY2VsbD5cbiAgICAgICAgPGJzdS11bHYtY29udGV4dC1tZW51XG4gICAgICAgICAgICBbZGlzYWJsZU92ZXJmbG93Q29udGV4dE1lbnVdPVwiZGlzYWJsZU92ZXJmbG93Q29udGV4dE1lbnVcIlxuICAgICAgICAgICAgW2NvbmRpdGlvbmFsRm9ybWF0c109XCJjb25kaXRpb25hbEZvcm1hdHNcIlxuICAgICAgICAgICAgW3N0eWxlSW5kZXhdPVwic3R5bGVJbmRleFwiXG4gICAgICAgICAgICBbbW9dPVwibW9cIlxuICAgICAgICAgICAgW2luZGV4XT1cImluZGV4XCJcbiAgICAgICAgICAgIChjb21tYW5kQ2xpY2spPVwib25VbHZDb21tYW5kKClcIlxuICAgICAgICAgICAgW2RldmljZU5hbWVdPVwiZGV2aWNlTmFtZVwiXG4gICAgICAgICAgICBbbWVudUl0ZW1zXT1cImNvbnRleHRNZW51SXRlbXNcIlxuICAgICAgICAgICAgW2FsbENvbHVtbnNdPVwiYWxsQ29sdW1uc1wiXG4gICAgICAgID48L2JzdS11bHYtY29udGV4dC1tZW51PlxuICAgIDwvdGQ+XG4gICAgfSBAaWYgKHNob3dEZXRhaWxzSW5Sb3cgJiYgKCFpbmxpbmVFZGl0TW9kZSB8fCAhYWxsb3dJbmxpbmVFZGl0KSkge1xuICAgIDx0ZCBjbGFzcz1cImNvbC1kZXRhaWxzXCIgZmQtdGFibGUtY2VsbCBbZml0Q29udGVudF09XCJ0cnVlXCI+XG4gICAgICAgIEBpZiAoZGV0YWlsc0NvbXBvbmVudD8uU2VsZWN0b3IgfHwgY2FydGFibGVQYXJhbXM/Lm1vSWQpIHtcbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICBbbGFiZWxdPVwiKGRldGFpbHNDb2xsYXBzZWQgPyBkZXRhaWxzVGV4dCA6ICdIaWRlJykgfCBiYmJUcmFuc2xhdGVcIlxuICAgICAgICAgICAgW2ZkVHlwZV09XCIndHJhbnNwYXJlbnQnXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvblJvd0RldGFpbHMoKVwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgfVxuICAgIDwvdGQ+XG4gICAgfSBAaWYgKGFjdGlvbkxpc3Q/Lmxlbmd0aCAmJiAhaW5saW5lRWRpdE1vZGUpIHtcbiAgICA8dGQgY2xhc3M9XCJjb2wtdmlld1wiIFtjbGFzcy5ydGxdPVwicnRsXCIgZmQtdGFibGUtY2VsbCBbZml0Q29udGVudF09XCJ0cnVlXCI+XG4gICAgICAgIEBmb3IgKGEgb2YgYWN0aW9uTGlzdDsgdHJhY2sgYSkge1xuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICBmZC1idXR0b25cbiAgICAgICAgICAgIFtnbHlwaF09XCJhLmdseXBoXCJcbiAgICAgICAgICAgIFtuYXZpZ2F0aW9uXT1cImEubmF2aWdhdGlvblwiXG4gICAgICAgICAgICBbZmRUeXBlXT1cIid0cmFuc3BhcmVudCdcIlxuICAgICAgICAgICAgW3JvbGVdPVwiYS5yb2xlXCJcbiAgICAgICAgICAgIGJvZHlDbGlja1xuICAgICAgICAgICAgW2Rpc2FibGVCb2R5Q2xpY2tdPVwiIWEuY2xvc2VPbkNsaWNrXCJcbiAgICAgICAgICAgIChjbGljayk9XCJhLmhhbmRsZXIoe21vLCBpbmRleH0pXCJcbiAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICB9XG4gICAgPC90ZD5cbiAgICB9IH1cbjwvdHI+XG59IEBpZiAoc2Vjb25kYXJ5Q29sdW1ucz8ubGVuZ3RoICYmICFtby4kR3JvdXAgJiYgKCFtby4kUGFyZW50IHx8IHBhcmVudEV4cGFuZGVkKSAmJiB2aXNpYmlsaXR5ICE9PSBmYWxzZSkge1xuPHRyXG4gICAgI3RyRWxcbiAgICBmZC10YWJsZS1yb3dcbiAgICBbc2Vjb25kYXJ5XT1cInRydWVcIlxuICAgIGNsYXNzPVwic2Vjb25kYXJ5LXJvd1wiXG4gICAgW2NsYXNzLm5vLWVkaXQtbW9kZV09XCIhaW5saW5lRWRpdE1vZGVcIlxuICAgIFthcHBseUNvbmRpdGlvbmFsRm9ybWF0c109XCJjb25kaXRpb25hbEZvcm1hdHNcIlxuICAgIFtzdHlsZUluZGV4XT1cInN0eWxlSW5kZXhcIlxuICAgIFtob3N0RWxdPVwidHJFbFwiXG4gICAgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJpc0NoZWNrZWQgJiYgIWlubGluZUVkaXRNb2RlID8gdHJ1ZSA6IGZhbHNlXCJcbj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3RhdHVzSW5kaWNhdG9yXCI+PC9uZy1jb250YWluZXI+XG4gICAgQGlmICghaXNDaGVja0xpc3QpIHtcbiAgICA8dGQgZmQtdGFibGUtY2VsbCBjbGFzcz1cInNpbmdsZS1zZWxlY3RcIiAoY2xpY2spPVwib25Sb3dDaGVjaygpXCI+PC90ZD5cbiAgICB9XG4gICAgPHRkIGZkLXRhYmxlLWNlbGwgY29sc3Bhbj1cIjEwMCVcIiAoY2xpY2spPVwib25Sb3dDaGVjaygpXCIgY2xhc3M9XCJzZWNvbmRhcnkgcC13cmFwcGVyXCI+XG4gICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBmbGV4LWRpcmVjdGlvbjogY29sdW1uXCI+XG4gICAgICAgICAgICBAZm9yIChjb2x1bW4gb2Ygc2Vjb25kYXJ5Q29sdW1uczsgdHJhY2sgX3RyYWNrQnlDb2x1bW4oY29sdW1uSW5kZXgsIGNvbHVtbik7IGxldCBjb2x1bW5JbmRleCA9ICRpbmRleCkge1xuICAgICAgICAgICAgPHBcbiAgICAgICAgICAgICAgICAjcEVsXG4gICAgICAgICAgICAgICAgZmQtdGFibGUtdGV4dFxuICAgICAgICAgICAgICAgIFthcHBseUNvbmRpdGlvbmFsRm9ybWF0c109XCJjb25kaXRpb25hbEZvcm1hdHNcIlxuICAgICAgICAgICAgICAgIFtob3N0RWxdPVwicEVsXCJcbiAgICAgICAgICAgICAgICBbc3R5bGVJbmRleF09XCJzdHlsZUluZGV4XCJcbiAgICAgICAgICAgICAgICBbZGJOYW1lXT1cImNvbHVtbi5OYW1lXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8bGFiZWwgZmQtZm9ybS1sYWJlbD57eyBjb2x1bW4uQ2FwdGlvbiB9fSA6PC9sYWJlbD5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5UZW1wbGF0ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtbzogbW8sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGNvbHVtbkluZGV4LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZUVkaXRNb2RlOiBpbmxpbmVFZGl0TW9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXQ5NDogbGF5b3V0JCB8IGFzeW5jXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICA8L3RkPlxuPC90cj5cbn0gQGlmIChjYXJ0YWJsZVBhcmFtcz8ubW9JZCkge1xuPHRyIFtjbGFzcy5kZXRhaWxDb2xsYXBzZWRdPVwiZGV0YWlsc0NvbGxhcHNlZFwiIGZkLXRhYmxlLXJvdyBjbGFzcz1cInNob3dkZXRhaWxzXCIgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJpc0NoZWNrZWRcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwic3RhdHVzSW5kaWNhdG9yXCI+PC9uZy1jb250YWluZXI+XG4gICAgPHRkXG4gICAgICAgIChjbGljayk9XCJvblJvd0NoZWNrKClcIlxuICAgICAgICBmZC10YWJsZS1jZWxsXG4gICAgICAgIFthdHRyLmNvbHNwYW5dPVwiXG4gICAgICAgICAgICBjb2x1bW5zLmxlbmd0aCArXG4gICAgICAgICAgICAxICtcbiAgICAgICAgICAgIChyb3dJbmRpY2F0b3IgPyAtMSA6IDApICtcbiAgICAgICAgICAgIChjb250ZXh0TWVudUl0ZW1zLmxlbmd0aCA/IDEgOiAwKSArXG4gICAgICAgICAgICAoY2FuVmlldyA/IDEgOiAwKSArXG4gICAgICAgICAgICAoc2hvd0RldGFpbHNJblJvdyA/IDEgOiAwKVxuICAgICAgICBcIlxuICAgID5cbiAgICAgICAgPG5nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDxibnJjLWZvcm1cbiAgICAgICAgICAgICAgICAjY2FydGFibGVGb3JtUmVmXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJjYXJ0YWJsZS10ZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgW2lubGluZUVkaXRJblJlcG9ydF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbcGFyYW1zXT1cImNhcnRhYmxlUGFyYW1zXCJcbiAgICAgICAgICAgICAgICAoYmVmb3JlVHJhbnNpdGlvbik9XCJvbkNhcnRhYmxlQmVmb3JlVGFuc2l0aW9uKClcIlxuICAgICAgICAgICAgICAgIChhZnRlclRyYW5zaXRpb24pPVwib25DYXJ0YWJsZUFmdGVyVGFuc2l0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChicnVsZUFjdGlvbik9XCJvbkNhcnRhYmxlQnJ1bGVBY3Rpb24oJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIk9uQ2FydGFibGVGb3JtQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgKGZvcm1DbG9zZSk9XCJvbkNhcnRhYmxlRm9ybUNsb3NlZCgpXCJcbiAgICAgICAgICAgID48L2JucmMtZm9ybT5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC90ZD5cbjwvdHI+XG59IEBpZiAoIWRldGFpbHNDb2xsYXBzZWQgJiYgZGV0YWlsc0NvbXBvbmVudD8uU2VsZWN0b3IpIHtcbjx0ciBmZC10YWJsZS1yb3cgY2xhc3M9XCJzaG93ZGV0YWlsc1wiIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiaXNDaGVja2VkXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN0YXR1c0luZGljYXRvclwiPjwvbmctY29udGFpbmVyPlxuICAgIDx0ZFxuICAgICAgICAoY2xpY2spPVwib25Sb3dDaGVjaygpXCJcbiAgICAgICAgZmQtdGFibGUtY2VsbFxuICAgICAgICBbYXR0ci5jb2xzcGFuXT1cIlxuICAgICAgICAgICAgY29sdW1ucy5sZW5ndGggK1xuICAgICAgICAgICAgMSArXG4gICAgICAgICAgICAocm93SW5kaWNhdG9yID8gLTEgOiAwKSArXG4gICAgICAgICAgICAoY29udGV4dE1lbnVJdGVtcyAmJiBjb250ZXh0TWVudUl0ZW1zLmxlbmd0aCA+IDAgJiYgIWlubGluZUVkaXRNb2RlID8gMSA6IDApICtcbiAgICAgICAgICAgIChzaG93Vmlld0J1dHRvbiA/IDEgOiAwKSArXG4gICAgICAgICAgICAoc2hvd0RldGFpbHNJblJvdyAmJiAhaW5saW5lRWRpdE1vZGUgPyAxIDogMClcbiAgICAgICAgXCJcbiAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkZXRhaWxzQ29sdW1uc1RlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgIEBpZiAoZGV0YWlsc0NvbXBvbmVudCAmJiBkZXRhaWxzQ29tcG9uZW50LlNlbGVjdG9yKSB7XG4gICAgICAgIDxibnJjLWR5bmFtaWMtaXRlbS1jb21wb25lbnRcbiAgICAgICAgICAgIFtjb21wb25lbnRdPVwiZGV0YWlsc0NvbXBvbmVudFwiXG4gICAgICAgICAgICBbbW9dPVwibW9cIlxuICAgICAgICAgICAgW2lzQ2hlY2tlZF09XCJpc0NoZWNrZWRcIlxuICAgICAgICAgICAgW1Vsdk1haW5DdHJscl09XCJVbHZNYWluQ3RybHJcIlxuICAgICAgICAgICAgW3NldHRpbmddPVwiZGV0YWlsc0NvbXBvbmVudFNldHRpbmdcIlxuICAgICAgICAgICAgW3BhcmFtZXRlcnNdPVwiZGV0YWlsc0NvbXBvbmVudC5TZXR0aW5nc1wiXG4gICAgICAgICAgICBbZWRpdE1vZGVdPVwiaW5saW5lRWRpdE1vZGVcIlxuICAgICAgICAgICAgW2Zvcm1TZXR0aW5nXT1cImZvcm1TZXR0aW5nXCJcbiAgICAgICAgICAgIFtydGxdPVwicnRsXCJcbiAgICAgICAgICAgIFtkZXZpY2VOYW1lXT1cImRldmljZU5hbWVcIlxuICAgICAgICAgICAgW2RldmljZVNpemVdPVwiZGV2aWNlU2l6ZVwiXG4gICAgICAgICAgICBbaW5kZXhdPVwiaW5kZXhcIlxuICAgICAgICAgICAgW2FsbENvbHVtbnNdPVwiYWxsQ29sdW1uc1wiXG4gICAgICAgICAgICBbdHlwZURlZklkXT1cInR5cGVEZWZJZFwiXG4gICAgICAgID48L2JucmMtZHluYW1pYy1pdGVtLWNvbXBvbmVudD5cbiAgICAgICAgfVxuICAgIDwvdGQ+XG48L3RyPlxufSBAaWYoaXNMYXN0Q2hpbGRHcm91cCl7XG48dHIgI3RyRWwgZmQtdGFibGUtcm93IGNsYXNzPVwiZ3JvdXAtc3VtbWFyeS1yb3dcIiBbY2xhc3Mubm8tZWRpdC1tb2RlXT1cInRydWVcIiBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cImZhbHNlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN0YXR1c0luZGljYXRvclwiPjwvbmctY29udGFpbmVyPlxuICAgIEBpZiAoIWlzQ2hlY2tMaXN0KSB7XG4gICAgPHRkIGZkLXRhYmxlLWNlbGwgY2xhc3M9XCJzaW5nbGUtc2VsZWN0XCI+PC90ZD5cbiAgICB9IEBmb3IgKGNvbHVtbiBvZiBjb2x1bW5zOyB0cmFjayBfdHJhY2tCeUNvbHVtbihjb2x1bW5JbmRleCwgY29sdW1uKTsgbGV0IGNvbHVtbkluZGV4ID0gJGluZGV4KSB7XG4gICAgPHRkIGZkLXRhYmxlLWNlbGw+XG4gICAgICAgIDxsYWJlbCAjc3VtbWFyeVJlZj57eyByZUNhbGN1bGF0ZUNvbHVtblN1bW1hcnkoc3VtbWFyeVJlZiwgY29sdW1uKSB9fTwvbGFiZWw+XG4gICAgPC90ZD5cbiAgICB9XG48L3RyPlxufVxuPG5nLXRlbXBsYXRlICNkZXRhaWxzQ29sdW1uc1RlbXBsYXRlPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIGRldGFpbHNGb3JtSXRlbXM7XG4gICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgJGltcGxpY2l0OiBkZXRhaWxzQ29sdW1ucyxcbiAgICAgICAgICAgICAgICBtbzogbW8sXG4gICAgICAgICAgICAgICAgaW5saW5lRWRpdE1vZGU6IGlubGluZUVkaXRNb2RlLFxuICAgICAgICAgICAgICAgIGxheW91dDk0OiBsYXlvdXQkXG4gICAgICAgICAgICB9XG4gICAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZGV0YWlsc0Zvcm1JdGVtcyBsZXQtZGV0YWlsc0NvbHVtbnMgbGV0LW1vPVwibW9cIiBsZXQtaW5saW5lRWRpdE1vZGU9XCJpbmxpbmVFZGl0TW9kZVwiIGxldC1sYXlvdXQkPVwibGF5b3V0JFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWl0ZW1zXCI+XG4gICAgICAgIEBmb3IgKGNvbHVtbiBvZiBkZXRhaWxzQ29sdW1uczsgdHJhY2sgY29sdW1uOyBsZXQgY29sdW1uSW5kZXggPSAkaW5kZXgpIHtcbiAgICAgICAgPGRpdiBmZC1mb3JtLWl0ZW0+XG4gICAgICAgICAgICA8bGFiZWwgZmQtZm9ybS1sYWJlbCBmb3I9XCJpbnB1dC0yXCI+e3sgY29sdW1uLkNhcHRpb24gfX08L2xhYmVsPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtblRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vOiBtbyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBjb2x1bW5JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZUVkaXRNb2RlOiBpbmxpbmVFZGl0TW9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dDk0OiBsYXlvdXQkIHwgYXN5bmNcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuQGlmIChicnVsZUFjdGlvbk1lc3NhZ2UgJiYgaW5saW5lRWRpdE1vZGUpIHtcbjx0ciBmZC10YWJsZS1yb3c+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN0YXR1c0luZGljYXRvclwiPjwvbmctY29udGFpbmVyPlxuICAgIDx0ZFxuICAgICAgICBmZC10YWJsZS1jZWxsXG4gICAgICAgIFthdHRyLmNvbHNwYW5dPVwiXG4gICAgICAgICAgICBjb2x1bW5zLmxlbmd0aCArXG4gICAgICAgICAgICAxICtcbiAgICAgICAgICAgIChyb3dJbmRpY2F0b3IgPyAtMSA6IDApICtcbiAgICAgICAgICAgIChjb250ZXh0TWVudUl0ZW1zICYmIGNvbnRleHRNZW51SXRlbXMubGVuZ3RoID4gMCAmJiAhaW5saW5lRWRpdE1vZGUgPyAxIDogMCkgK1xuICAgICAgICAgICAgKHNob3dWaWV3QnV0dG9uID8gMSA6IDApICtcbiAgICAgICAgICAgIChzaG93RGV0YWlsc0luUm93ICYmICFpbmxpbmVFZGl0TW9kZSA/IDEgOiAwKVxuICAgICAgICBcIlxuICAgID5cbiAgICAgICAgQGlmIChicnVsZUFjdGlvbk1lc3NhZ2UuTWVzc2FnZVR5cGUgPT09IDIpIHtcbiAgICAgICAgPGZkLW1lc3NhZ2Utc3RyaXAgW3R5cGVdPVwiYnJ1bGVBY3Rpb25NZXNzYWdlLk1lc3NhZ2VUeXBlID09PSAyID8gJ2Vycm9yJyA6ICdpbmZvcm1hdGlvbidcIiBbZGlzbWlzc2libGVdPVwiZmFsc2VcIj5cbiAgICAgICAgICAgIHt7IGJydWxlQWN0aW9uTWVzc2FnZS5NZXNzYWdlRXhwcmVzc2lvbiB9fVxuICAgICAgICA8L2ZkLW1lc3NhZ2Utc3RyaXA+XG4gICAgICAgIH1cbiAgICA8L3RkPlxuPC90cj5cbn0gQGlmICh3b3JrZmxvd1N0YXRlPy5zdGF0ZSA9PT0gJ0ZpbmlzaCcgJiYgd29ya2Zsb3dTdGF0ZT8uZXJyb3IpIHtcbjx0ciBmZC10YWJsZS1yb3c+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN0YXR1c0luZGljYXRvclwiPjwvbmctY29udGFpbmVyPlxuICAgIDx0ZFxuICAgICAgICBmZC10YWJsZS1jZWxsXG4gICAgICAgIFthdHRyLmNvbHNwYW5dPVwiXG4gICAgICAgICAgICBjb2x1bW5zLmxlbmd0aCArXG4gICAgICAgICAgICAxICtcbiAgICAgICAgICAgIChyb3dJbmRpY2F0b3IgPyAtMSA6IDApICtcbiAgICAgICAgICAgIChjb250ZXh0TWVudUl0ZW1zICYmIGNvbnRleHRNZW51SXRlbXMubGVuZ3RoID4gMCAmJiAhaW5saW5lRWRpdE1vZGUgPyAxIDogMCkgK1xuICAgICAgICAgICAgKHNob3dWaWV3QnV0dG9uID8gMSA6IDApICtcbiAgICAgICAgICAgIChzaG93RGV0YWlsc0luUm93ICYmICFpbmxpbmVFZGl0TW9kZSA/IDEgOiAwKVxuICAgICAgICBcIlxuICAgID5cbiAgICAgICAgPGZkLW1lc3NhZ2Utc3RyaXAgdHlwZT1cImVycm9yXCIgW2Rpc21pc3NpYmxlXT1cInRydWVcIiAob25EaXNtaXNzKT1cIm9uUmVzZXRXb3JrZmxvd1N0YXRlKClcIj5cbiAgICAgICAgICAgIHt7IHdvcmtmbG93U3RhdGUuZXJyb3I/LlRleHQgfHwgd29ya2Zsb3dTdGF0ZS5lcnJvcj8uTWVzc2FnZUV4cHJlc3Npb24gfX1cbiAgICAgICAgPC9mZC1tZXNzYWdlLXN0cmlwPlxuICAgIDwvdGQ+XG48L3RyPlxufVxuPG5nLXRlbXBsYXRlXG4gICAgI2NvbHVtblRlbXBsYXRlXG4gICAgbGV0LWNvbHVtblxuICAgIGxldC1tbz1cIm1vXCJcbiAgICBsZXQtaW5kZXg9XCJpbmRleFwiXG4gICAgbGV0LWlubGluZUVkaXRNb2RlPVwiaW5saW5lRWRpdE1vZGVcIlxuICAgIGxldC1sYXlvdXQ5ND1cImxheW91dDk0XCJcbj5cbiAgICA8YnN1LWJhcnNhLXRhYmxlLWNvbHVtblxuICAgICAgICBbbW9dPVwibW9cIlxuICAgICAgICBbYWxsQ29sdW1uc109XCJhbGxDb2x1bW5zXCJcbiAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICBbaXNkaXJ0eV09XCJkaXJ0eUNvbHVtbnMgJiYgZGlydHlDb2x1bW5zW2NvbHVtbi5OYW1lXVwiXG4gICAgICAgIFt2YWx1ZV09XCJjb2x1bW4gfCBjb2x1bW5WYWx1ZTogbW9cIlxuICAgICAgICBbaWNvbl09XCJjb2x1bW4gfCBjb2x1bW5JY29uOiBtb1wiXG4gICAgICAgIFtjdXN0b21Db21wb25lbnRdPVwiY29sdW1uLiRDdXN0b21Db21wb25lbnRcIlxuICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgIFtkaXNhYmxlRWxsYXBzaXNdPVwic2Vjb25kYXJ5Q29sdW1ucz8ubGVuZ3RoXCJcbiAgICAgICAgW2VkaXRNb2RlXT1cImlzQ2hlY2tlZCAmJiBpbmxpbmVFZGl0TW9kZSAmJiBhbGxvd0lubGluZUVkaXRcIlxuICAgICAgICBbaW5saW5lRWRpdE1vZGVdPVwiaW5saW5lRWRpdE1vZGVcIlxuICAgICAgICBbaXNDaGVja2VkXT1cImlzQ2hlY2tlZFwiXG4gICAgICAgIFtpbmRleF09XCJpbmRleFwiXG4gICAgICAgIFtmb3JtU2V0dGluZ109XCJmb3JtU2V0dGluZ1wiXG4gICAgICAgIFtydGxdPVwicnRsXCJcbiAgICAgICAgW2RldmljZU5hbWVdPVwiZGV2aWNlTmFtZVwiXG4gICAgICAgIFtkZXZpY2VTaXplXT1cImRldmljZVNpemVcIlxuICAgICAgICBbbGF5b3V0OTRdPVwibGF5b3V0OTRcIlxuICAgICAgICAoc2F2ZSk9XCJvbkVkaXRGb3JtUGFuZWxTYXZlKG51bGwpXCJcbiAgICAgICAgKGNhbmNlbCk9XCJvbkVkaXRGb3JtUGFuZWxDYW5jZWwobnVsbClcIlxuICAgICAgICAodGFiKT1cIm9uVGFiS2V5RG93bigkZXZlbnQsIGluZGV4KVwiXG4gICAgICAgIChjaGFuZ2VUb0VkaXRNb2RlKT1cIm9uQ29sdW1uQ2hhbmdlVG9FZGl0TW9kZSgkZXZlbnQsIGluZGV4KVwiXG4gICAgPlxuICAgIDwvYnN1LWJhcnNhLXRhYmxlLWNvbHVtbj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3N0YXR1c0luZGljYXRvcj5cbiAgICBAaWYgKHJvd0luZGljYXRvcikge1xuICAgIDxic3UtYmFyc2EtY29sdW1uLWluZGljYXRvciBbaGlkZUJvcmRlckJvdHRvbV09XCIhZGV0YWlsc0NvbGxhcHNlZFwiIFtiYWNrQ29sb3JdPVwicm93SW5kaWNhdG9yQ29sb3JcIj5cbiAgICA8L2JzdS1iYXJzYS1jb2x1bW4taW5kaWNhdG9yPlxuICAgIH1cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3Jvd051bWJlclRlbXBsYXRlPlxuICAgIEBpZiAoc2hvd1Jvd051bWJlcikge1xuICAgIDxic3UtYmFyc2EtY29sdW1uLXJvd251bWJlciBbcm93TnVtYmVyXT1cInJvd051bWJlclwiIChjbGljayk9XCIhaXNDaGVja0xpc3QgJiYgb25Sb3dDaGVjaygpXCI+XG4gICAgPC9ic3UtYmFyc2EtY29sdW1uLXJvd251bWJlcj5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuPHRyIGZkLXRhYmxlLXJvdyBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lXCI+PC90cj5cbiJdfQ==
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyc2EtdGFibGUtcm93LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL2JhcnNhLXRhYmxlLXJvdy9iYXJzYS10YWJsZS1yb3cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvYmFyc2EtdGFibGUtcm93L2JhcnNhLXRhYmxlLXJvdy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULHVCQUF1QixFQUN2QixLQUFLLEVBR0wsU0FBUyxFQUNULFlBQVksRUFDWixNQUFNLEVBQ04sU0FBUyxFQUNULE1BQU0sRUFFVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBRUgsMEJBQTBCLEVBQzFCLGdCQUFnQixFQUluQixNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFTOUIsTUFBTSxPQUFPLHNCQUF1QixTQUFRLDBCQUEwQjtJQVB0RTs7UUFRYSxxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFPeEIsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBcUIsQ0FBQztRQUVoRSxxQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFHeEIsZUFBVSxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztLQWtDbEM7SUFoQ0csUUFBUTtRQUNKLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUM7UUFDbkIsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO1FBQ3RGLElBQUksQ0FBQyx1QkFBdUIsR0FBRztZQUMzQixHQUFHLElBQUksQ0FBQyxPQUFPO1lBQ2YsZUFBZSxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQ3BDLGlCQUFpQixFQUFFLElBQUksQ0FBQyxnQkFBZ0I7U0FDM0MsQ0FBQztRQUNGLElBQUksQ0FBQyxXQUFXLEtBQUssU0FBUyxDQUFDO0lBQ25DLENBQUM7SUFDRCx3QkFBd0IsQ0FBQyxLQUFrQixFQUFFLE1BQU07UUFDL0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7WUFDcEIsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLFNBQVM7WUFDaEMsTUFBTTtZQUNOLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNmLEtBQUssQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDaEUsS0FBSyxDQUFDLFNBQVMsR0FBRyxHQUFHLENBQUM7WUFDMUIsQ0FBQztTQUNKLENBQUMsQ0FBQztJQUNQLENBQUM7SUFDRCxhQUFhO1FBQ1QsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDbkIsT0FBTztRQUNYLENBQUM7UUFDRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUNELFlBQVk7UUFDUixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7UUFDL0MsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM5QixDQUFDOzhHQTlDUSxzQkFBc0I7a0dBQXRCLHNCQUFzQiwrVUFIcEIsQ0FBQyxnQkFBZ0IsQ0FBQyxxTEMxQmpDLGttZkE2WkE7OzJGRGhZYSxzQkFBc0I7a0JBUGxDLFNBQVM7K0JBQ0kscUJBQXFCLGFBR3BCLENBQUMsZ0JBQWdCLENBQUMsbUJBQ1osdUJBQXVCLENBQUMsTUFBTTs4QkFHdEMsZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDSSxhQUFhO3NCQUF0QixNQUFNO2dCQUMwQyxnQkFBZ0I7c0JBQWhFLFNBQVM7dUJBQUMsa0JBQWtCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgSW5wdXQsXG4gICAgT25Jbml0LFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgT3V0cHV0LFxuICAgIFJlbmRlcmVyMixcbiAgICBpbmplY3QsXG4gICAgRWxlbWVudFJlZlxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgTW9Gb3JSZXBvcnRNb2RlbCxcbiAgICBCYXNlVmlld0l0ZW1Qcm9wc0NvbXBvbmVudCxcbiAgICBGb3JtUGFuZWxTZXJ2aWNlLFxuICAgIEVqcmF5T2xnbyxcbiAgICBSZXBvcnRWaWV3Q29sdW1uLFxuICAgIENvbHVtblN1bW1hcnlUeXBlXG59IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdic3UtYmFyc2EtdGFibGUtcm93JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vYmFyc2EtdGFibGUtcm93LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi9iYXJzYS10YWJsZS1yb3cuY29tcG9uZW50LnNjc3MnXSxcbiAgICBwcm92aWRlcnM6IFtGb3JtUGFuZWxTZXJ2aWNlXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBCYXJzYVRhYmxlUm93Q29tcG9uZW50IGV4dGVuZHMgQmFzZVZpZXdJdGVtUHJvcHNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIEBJbnB1dCgpIHNob3dEZXRhaWxzSW5Sb3cgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBkZXRhaWxzQ29tcG9uZW50PzogRWpyYXlPbGdvO1xuICAgIEBJbnB1dCgpIGRldGFpbHNDb2x1bW5zOiBSZXBvcnRWaWV3Q29sdW1uW107XG4gICAgQElucHV0KCkgZGV0YWlsc1RleHQ6IHN0cmluZztcbiAgICBASW5wdXQoKSBjb2x1bW5Db21wb25lbnRzOiBNb0ZvclJlcG9ydE1vZGVsIHwgbnVsbDtcbiAgICBASW5wdXQoKSBhY3Rpb25MaXN0OiBhbnlbXTtcbiAgICBASW5wdXQoKSBkaXJ0eUNvbHVtbnM6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+O1xuICAgIEBPdXRwdXQoKSBjb2x1bW5TdW1tYXJ5ID0gbmV3IEV2ZW50RW1pdHRlcjxDb2x1bW5TdW1tYXJ5VHlwZT4oKTtcbiAgICBAVmlld0NoaWxkKCdkZXRhaWxzRm9ybUl0ZW1zJywgeyBzdGF0aWM6IHRydWUgfSkgZGV0YWlsc0Zvcm1JdGVtczogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBkZXRhaWxzQ29sbGFwc2VkID0gdHJ1ZTtcbiAgICBkZXRhaWxzQ29tcG9uZW50U2V0dGluZzogYW55O1xuICAgIGlzT2RkOiBib29sZWFuO1xuICAgIF9yZW5kZXJlcjIgPSBpbmplY3QoUmVuZGVyZXIyKTtcbiAgICBlbDogRWxlbWVudFJlZjtcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5lbCA9IHRoaXMuX2VsO1xuICAgICAgICBjb25zdCByb3dOID0gTnVtYmVyKHRoaXMucm93TnVtYmVyKTtcbiAgICAgICAgdGhpcy5pc09kZCA9IGlzTmFOKHJvd04pIHx8ICF0aGlzLmNvbG9yaW5nUm93ID8gZmFsc2UgOiByb3dOICUgMiA9PT0gMCA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgdGhpcy5kZXRhaWxzQ29tcG9uZW50U2V0dGluZyA9IHtcbiAgICAgICAgICAgIC4uLnRoaXMuc2V0dGluZyxcbiAgICAgICAgICAgICRkZXRhaWxzQ29sdW1uczogdGhpcy5kZXRhaWxzQ29sdW1ucyxcbiAgICAgICAgICAgICRkZXRhaWxzRm9ybUl0ZW1zOiB0aGlzLmRldGFpbHNGb3JtSXRlbXNcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kZXRhaWxzVGV4dCB8fD0gJ0RldGFpbHMnO1xuICAgIH1cbiAgICByZUNhbGN1bGF0ZUNvbHVtblN1bW1hcnkoZWxEb206IEhUTUxFbGVtZW50LCBjb2x1bW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb2x1bW5TdW1tYXJ5LmVtaXQoe1xuICAgICAgICAgICAgbW9BcnI6IHRoaXMubW8uJFBhcmVudC4kQ2hpbGRyZW4sXG4gICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgICBzdW1tYXJ5Rm46ICh2YWwpID0+IHtcbiAgICAgICAgICAgICAgICBlbERvbS5jbGFzc05hbWUgPSB2YWwudG9TdHJpbmcoKS5yZXBsYWNlKC8mbHJtO3xcXHUyMDBFL2dpLCAnICcpO1xuICAgICAgICAgICAgICAgIGVsRG9tLmlubmVySFRNTCA9IHZhbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG9uQ29sdW1uQ2xpY2soKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmlzQ2hlY2tMaXN0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vblJvd0NoZWNrKCk7XG4gICAgfVxuICAgIG9uUm93RGV0YWlscygpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZXRhaWxzQ29sbGFwc2VkID0gIXRoaXMuZGV0YWlsc0NvbGxhcHNlZDtcbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG59XG4iLCJAaWYgKCghbW8uJFBhcmVudCB8fCBwYXJlbnRFeHBhbmRlZCkgJiYgdmlzaWJpbGl0eSAhPT0gZmFsc2UpIHtcbjx0clxuICAgIFtjbGFzcy5yb3ctZXJyb3JdPVwiaGFzRXJyb3JcIlxuICAgIFtjbGFzcy5zaG93ZGV0YWlscy1vbl09XCIhZGV0YWlsc0NvbGxhcHNlZFwiXG4gICAgI3RyRWxcbiAgICBmZC10YWJsZS1yb3dcbiAgICBbYWN0aXZhYmxlXT1cImZhbHNlXCJcbiAgICBbaG92ZXJhYmxlXT1cInRydWVcIlxuICAgIFttYWluXT1cInRydWVcIlxuICAgIFtmb2N1c2FibGVdPVwidHJ1ZVwiXG4gICAgW2FwcGx5Q29uZGl0aW9uYWxGb3JtYXRzXT1cImNvbmRpdGlvbmFsRm9ybWF0c1wiXG4gICAgW3N0eWxlSW5kZXhdPVwic3R5bGVJbmRleFwiXG4gICAgW2hvc3RFbF09XCJ0ckVsXCJcbiAgICBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cImlzQ2hlY2tlZFwiXG4gICAgW2NsYXNzLmJydWxlLW1lc3NhZ2VdPVwiYnJ1bGVBY3Rpb25NZXNzYWdlIHx8IHdvcmtmbG93U3RhdGU/LmVycm9yXCJcbiAgICBbY2xhc3Mud29ya2Zsb3ctcGVuZGluZ109XCJ3b3JrZmxvd1N0YXRlPy5zdGF0ZSA9PT0gJ1BlbmRpbmcnXCJcbiAgICBbc3R5bGUuYmFja2dyb3VuZC1jb2xvcl09XCJpc09kZCAmJiAhaXNDaGVja2VkID8gJ3ZhcigtLXNhcExpc3RfSG92ZXJfQmFja2dyb3VuZCknIDogbnVsbFwiXG4+XG4gICAgQGlmIChtby4kR3JvdXAgfHwgbW8uJEdyb3VwID09PSAnJykge1xuICAgIDx0ZFxuICAgICAgICBbc3R5bGUucGFkZGluZy1yaWdodF09XCJydGwgPyAnY2FsYyggMXJlbSArICcgKyBsZXZlbCAqIDEyICsgJ3B4JyArICcgKScgOiAnaW5oZXJpdCdcIlxuICAgICAgICBbc3R5bGUucGFkZGluZy1sZWZ0XT1cIiFydGwgPyAnY2FsYyggMXJlbSArICcgKyBsZXZlbCAqIDEyICsgJ3B4JyArICcgKScgOiAnaW5oZXJpdCdcIlxuICAgICAgICBmZC10YWJsZS1jZWxsXG4gICAgICAgIHN0eWxlPVwiZm9udC13ZWlnaHQ6IGJvbGQ7IGZvbnQtc2l6ZTogMXJlbVwiXG4gICAgICAgIFthdHRyLmNvbHNwYW5dPVwiXG4gICAgICAgICAgICBjb2x1bW5zLmxlbmd0aCArXG4gICAgICAgICAgICAxICtcbiAgICAgICAgICAgIChyb3dJbmRpY2F0b3IgPyAtMSA6IDApICtcbiAgICAgICAgICAgIChjb250ZXh0TWVudUl0ZW1zICYmIGNvbnRleHRNZW51SXRlbXMubGVuZ3RoID4gMCAmJiAhaW5saW5lRWRpdE1vZGUgPyAxIDogMCkgK1xuICAgICAgICAgICAgKHNob3dWaWV3QnV0dG9uID8gMSA6IDApICtcbiAgICAgICAgICAgIChzaG93RGV0YWlsc0luUm93ICYmICFpbmxpbmVFZGl0TW9kZSA/IDEgOiAwKVxuICAgICAgICBcIlxuICAgICAgICBjbGFzcz1cInJvdy1ncm91cFwiXG4gICAgICAgIFtjbGFzcy5tb2JpbGUtbW9kZV09XCJzZWNvbmRhcnlDb2x1bW5zPy5sZW5ndGhcIlxuICAgICAgICBbYXR0ci5sZXZlbF09XCJsZXZlbFwiXG4gICAgICAgIFtjbGFzcy5yb290LWdyb3VwXT1cImxldmVsID09PSAwXCJcbiAgICA+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgW2ZkVHlwZV09XCIndHJhbnNwYXJlbnQnXCJcbiAgICAgICAgICAgIFtnbHlwaF09XCJleHBhbmRlZCAhPT0gZmFsc2UgPyAnbmF2aWdhdGlvbi1kb3duLWFycm93JyA6ICduYXZpZ2F0aW9uLWxlZnQtYXJyb3cnXCJcbiAgICAgICAgICAgIGNsYXNzPVwiY2VsbC1leHBhbmRcIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uRXhwYW5kQ2xpY2soKVwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICAgICAge3sgbW8uJEdyb3VwID09PSAndW5kZWZpbmVkJyA/ICcnIDogbW8uJEdyb3VwIH19XG4gICAgPC90ZD5cbiAgICB9IEBlbHNlIHtcblxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdGF0dXNJbmRpY2F0b3JcIj48L25nLWNvbnRhaW5lcj5cbiAgICBAaWYgKGlzQ2hlY2tMaXN0KSB7XG4gICAgPHRkIGZkLXRhYmxlLWNlbGwgW3N0eWxlLndpZHRoXT1cImNoZWNrYm94Q29tcG9uZW50ID8gJzYwcHgnIDogbnVsbFwiPlxuICAgICAgICBAaWYgKHdvcmtmbG93U3RhdGU/LnN0YXRlID09PSAnUGVuZGluZycpIHtcbiAgICAgICAgPGRpdiBzdHlsZT1cInBvc2l0aW9uOiBhYnNvbHV0ZTsgbGVmdDogMDsgcmlnaHQ6IDA7IGJvdHRvbTogMDsgdG9wOiAwXCI+XG4gICAgICAgICAgICA8YnN1LW1hc2sgW3RvcF09XCInMjBweCdcIiBbc2l6ZV09XCIncydcIj48L2JzdS1tYXNrPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfSBAaWYgKGNoZWNrYm94Q29tcG9uZW50Py5TZWxlY3Rvcikge1xuICAgICAgICA8Ym5yYy1keW5hbWljLWl0ZW0tY29tcG9uZW50XG4gICAgICAgICAgICBbY29tcG9uZW50XT1cImNoZWNrYm94Q29tcG9uZW50XCJcbiAgICAgICAgICAgIFttb109XCJtb1wiXG4gICAgICAgICAgICBbaXNDaGVja2VkXT1cImlzQ2hlY2tlZFwiXG4gICAgICAgICAgICBbVWx2TWFpbkN0cmxyXT1cIlVsdk1haW5DdHJsclwiXG4gICAgICAgICAgICBbc2V0dGluZ109XCJzZXR0aW5nXCJcbiAgICAgICAgICAgIFtwYXJhbWV0ZXJzXT1cImNoZWNrYm94Q29tcG9uZW50LlBhcmFtZXRlcnNcIlxuICAgICAgICAgICAgW2VkaXRNb2RlXT1cImlubGluZUVkaXRNb2RlXCJcbiAgICAgICAgICAgIFtydGxdPVwicnRsXCJcbiAgICAgICAgICAgIFtkZXZpY2VOYW1lXT1cImRldmljZU5hbWVcIlxuICAgICAgICAgICAgW3ZhbHVlXT1cImlzQ2hlY2tlZFwiXG4gICAgICAgICAgICBbZGV2aWNlU2l6ZV09XCJkZXZpY2VTaXplXCJcbiAgICAgICAgICAgIFtpbmRleF09XCJpbmRleFwiXG4gICAgICAgICAgICBbYWxsQ29sdW1uc109XCJhbGxDb2x1bW5zXCJcbiAgICAgICAgICAgIFt0eXBlRGVmSWRdPVwidHlwZURlZklkXCJcbiAgICAgICAgICAgIChldmVudHMpPVwib25Sb3dDaGVjaygpXCJcbiAgICAgICAgPjwvYm5yYy1keW5hbWljLWl0ZW0tY29tcG9uZW50PlxuICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgPGZkLWNoZWNrYm94IFtuYW1lXT1cIm1vLiRDYXB0aW9uXCIgW25nTW9kZWxdPVwiaXNDaGVja2VkXCIgKG5nTW9kZWxDaGFuZ2UpPVwib25Sb3dDaGVjaygpXCI+PC9mZC1jaGVja2JveD5cbiAgICAgICAgfVxuICAgIDwvdGQ+XG4gICAgfSBAaWYgKCFpc0NoZWNrTGlzdCAmJiAhc2hvd1Jvd051bWJlcikge1xuICAgIDx0ZFxuICAgICAgICBmZC10YWJsZS1jZWxsXG4gICAgICAgIGNsYXNzPVwic2luZ2xlLXNlbGVjdFwiXG4gICAgICAgIChjbGljayk9XCIhaXNDaGVja0xpc3QgJiYgb25Sb3dDaGVjaygpXCJcbiAgICAgICAgc3R5bGU9XCJwYWRkaW5nOiAwOyB0ZXh0LWFsaWduOiBjZW50ZXJcIlxuICAgID5cbiAgICAgICAgQGlmIChpbmxpbmVFZGl0TW9kZSAmJiBhbGxvd0lubGluZUVkaXQgJiYgKGhhc0Vycm9yIHx8IHNhdmluZyB8fCBzYXZlZCkpIHsgQGlmIChoYXNFcnJvcikge1xuICAgICAgICA8ZmQtaWNvbiBjbGFzcz1cInNhdmUtZXJyb3JcIiBnbHlwaD1cImVycm9yXCI+PC9mZC1pY29uPlxuICAgICAgICB9IEBpZiAoc2F2aW5nKSB7XG4gICAgICAgIDxmZC1idXN5LWluZGljYXRvciBbbG9hZGluZ109XCJ0cnVlXCIgW3NpemVdPVwiJ3MnXCIgdGl0bGU9XCJyZWNvcmQgc2F2aW5nXCI+PC9mZC1idXN5LWluZGljYXRvcj5cbiAgICAgICAgfSBAaWYgKHNhdmVkKSB7XG4gICAgICAgIDxmZC1pY29uIGNsYXNzPVwic2F2ZS1zdWNjZXNzXCIgZ2x5cGg9XCJhY2NlcHRcIj48L2ZkLWljb24+XG4gICAgICAgIH0gfSBAZWxzZSB7IEBpZiAobW8uJFN0YXRlID09PSAnTmV3JyAmJiAhaXNDaGVja2VkKSB7XG4gICAgICAgIDxmZC1pY29uIGdseXBoPVwiZmF2b3JpdGVcIj48L2ZkLWljb24+XG4gICAgICAgIH0gQGlmIChpbmxpbmVFZGl0TW9kZSAmJiBhbGxvd0lubGluZUVkaXQgJiYgaXNDaGVja2VkKSB7XG4gICAgICAgIDxmZC1pY29uIGdseXBoPVwiZWRpdFwiPjwvZmQtaWNvbj5cbiAgICAgICAgfSB9XG4gICAgPC90ZD5cbiAgICB9XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInJvd051bWJlclRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgQGZvciAoY29sdW1uIG9mIGNvbHVtbnM7IHRyYWNrIGNvbHVtbi5OYW1lOyBsZXQgY29sdW1uSW5kZXggPSAkaW5kZXgpIHtcbiAgICA8dGRcbiAgICAgICAgY2xhc3M9XCJyZXAtY29sdW1uXCJcbiAgICAgICAgW2F0dHIuZGJOYW1lXT1cImNvbHVtbi5OYW1lXCJcbiAgICAgICAgI3RkRWxcbiAgICAgICAgZmQtdGFibGUtY2VsbFxuICAgICAgICBbYXBwbHlDb25kaXRpb25hbEZvcm1hdHNdPVwiY29uZGl0aW9uYWxGb3JtYXRzXCJcbiAgICAgICAgW2hvc3RFbF09XCJ0ZEVsXCJcbiAgICAgICAgW3N0eWxlSW5kZXhdPVwic3R5bGVJbmRleFwiXG4gICAgICAgIFtkYk5hbWVdPVwiY29sdW1uLk5hbWVcIlxuICAgICAgICBbZm9jdXNhYmxlXT1cImZhbHNlXCJcbiAgICAgICAgKGNsaWNrKT1cIm9uQ29sdW1uQ2xpY2soKVwiXG4gICAgICAgIChkYmxjbGljayk9XCJvblJvd0NsaWNrKClcIlxuICAgICAgICBbaG92ZXJhYmxlXT1cImlubGluZUVkaXRNb2RlICYmIGFsbG93SW5saW5lRWRpdFwiXG4gICAgICAgIFtjbGFzcy5jb250cm9sLXJlYWRvbmx5XT1cImNvbHVtbi5Jc1JlYWRvbmx5XCJcbiAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgY29sdW1uVGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgY29udGV4dDoge1xuICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgbW86IG1vLFxuICAgICAgICAgICAgICAgICAgICBpbmRleDogY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgICAgIGlubGluZUVkaXRNb2RlOiBpbmxpbmVFZGl0TW9kZSxcbiAgICAgICAgICAgICAgICAgICAgbGF5b3V0OTQ6IGxheW91dCQgfCBhc3luY1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFwiXG4gICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L3RkPlxuICAgIH0gQGlmIChjb250ZXh0TWVudUl0ZW1zLmxlbmd0aCAmJiAoIWlubGluZUVkaXRNb2RlIHx8ICFhbGxvd0lubGluZUVkaXQpKSB7XG4gICAgPHRkIGNsYXNzPVwiY29sLWNvbnRleHQtbWVudVwiIGZkLXRhYmxlLWNlbGw+XG4gICAgICAgIDxic3UtdWx2LWNvbnRleHQtbWVudVxuICAgICAgICAgICAgW2Rpc2FibGVPdmVyZmxvd0NvbnRleHRNZW51XT1cImRpc2FibGVPdmVyZmxvd0NvbnRleHRNZW51XCJcbiAgICAgICAgICAgIFtjb25kaXRpb25hbEZvcm1hdHNdPVwiY29uZGl0aW9uYWxGb3JtYXRzXCJcbiAgICAgICAgICAgIFtzdHlsZUluZGV4XT1cInN0eWxlSW5kZXhcIlxuICAgICAgICAgICAgW21vXT1cIm1vXCJcbiAgICAgICAgICAgIFtpbmRleF09XCJpbmRleFwiXG4gICAgICAgICAgICAoY29tbWFuZENsaWNrKT1cIm9uVWx2Q29tbWFuZCgpXCJcbiAgICAgICAgICAgIFtkZXZpY2VOYW1lXT1cImRldmljZU5hbWVcIlxuICAgICAgICAgICAgW21lbnVJdGVtc109XCJjb250ZXh0TWVudUl0ZW1zXCJcbiAgICAgICAgICAgIFthbGxDb2x1bW5zXT1cImFsbENvbHVtbnNcIlxuICAgICAgICA+PC9ic3UtdWx2LWNvbnRleHQtbWVudT5cbiAgICA8L3RkPlxuICAgIH0gQGlmIChzaG93RGV0YWlsc0luUm93ICYmICghaW5saW5lRWRpdE1vZGUgfHwgIWFsbG93SW5saW5lRWRpdCkpIHtcbiAgICA8dGQgY2xhc3M9XCJjb2wtZGV0YWlsc1wiIGZkLXRhYmxlLWNlbGwgW2ZpdENvbnRlbnRdPVwidHJ1ZVwiPlxuICAgICAgICBAaWYgKGRldGFpbHNDb21wb25lbnQ/LlNlbGVjdG9yIHx8IGNhcnRhYmxlUGFyYW1zPy5tb0lkKSB7XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgW2xhYmVsXT1cIihkZXRhaWxzQ29sbGFwc2VkID8gZGV0YWlsc1RleHQgOiAnSGlkZScpIHwgYmJiVHJhbnNsYXRlXCJcbiAgICAgICAgICAgIFtmZFR5cGVdPVwiJ3RyYW5zcGFyZW50J1wiXG4gICAgICAgICAgICAoY2xpY2spPVwib25Sb3dEZXRhaWxzKClcIlxuICAgICAgICA+PC9idXR0b24+XG4gICAgICAgIH1cbiAgICA8L3RkPlxuICAgIH0gQGlmIChhY3Rpb25MaXN0Py5sZW5ndGggJiYgIWlubGluZUVkaXRNb2RlKSB7XG4gICAgPHRkIGNsYXNzPVwiY29sLXZpZXdcIiBbY2xhc3MucnRsXT1cInJ0bFwiIGZkLXRhYmxlLWNlbGwgW2ZpdENvbnRlbnRdPVwidHJ1ZVwiPlxuICAgICAgICBAZm9yIChhIG9mIGFjdGlvbkxpc3Q7IHRyYWNrIGEpIHtcbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICBbZ2x5cGhdPVwiYS5nbHlwaFwiXG4gICAgICAgICAgICBbbmF2aWdhdGlvbl09XCJhLm5hdmlnYXRpb25cIlxuICAgICAgICAgICAgW2ZkVHlwZV09XCIndHJhbnNwYXJlbnQnXCJcbiAgICAgICAgICAgIFtyb2xlXT1cImEucm9sZVwiXG4gICAgICAgICAgICBib2R5Q2xpY2tcbiAgICAgICAgICAgIFtkaXNhYmxlQm9keUNsaWNrXT1cIiFhLmNsb3NlT25DbGlja1wiXG4gICAgICAgICAgICAoY2xpY2spPVwiYS5oYW5kbGVyKHttbywgaW5kZXh9KVwiXG4gICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgfVxuICAgIDwvdGQ+XG4gICAgfSB9XG48L3RyPlxufSBAaWYgKHNlY29uZGFyeUNvbHVtbnM/Lmxlbmd0aCAmJiAhbW8uJEdyb3VwICYmICghbW8uJFBhcmVudCB8fCBwYXJlbnRFeHBhbmRlZCkgJiYgdmlzaWJpbGl0eSAhPT0gZmFsc2UpIHtcbjx0clxuICAgICN0ckVsXG4gICAgZmQtdGFibGUtcm93XG4gICAgW3NlY29uZGFyeV09XCJ0cnVlXCJcbiAgICBjbGFzcz1cInNlY29uZGFyeS1yb3dcIlxuICAgIFtjbGFzcy5uby1lZGl0LW1vZGVdPVwiIWlubGluZUVkaXRNb2RlXCJcbiAgICBbYXBwbHlDb25kaXRpb25hbEZvcm1hdHNdPVwiY29uZGl0aW9uYWxGb3JtYXRzXCJcbiAgICBbc3R5bGVJbmRleF09XCJzdHlsZUluZGV4XCJcbiAgICBbaG9zdEVsXT1cInRyRWxcIlxuICAgIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiaXNDaGVja2VkICYmICFpbmxpbmVFZGl0TW9kZSA/IHRydWUgOiBmYWxzZVwiXG4+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN0YXR1c0luZGljYXRvclwiPjwvbmctY29udGFpbmVyPlxuICAgIEBpZiAoIWlzQ2hlY2tMaXN0KSB7XG4gICAgPHRkIGZkLXRhYmxlLWNlbGwgY2xhc3M9XCJzaW5nbGUtc2VsZWN0XCIgKGNsaWNrKT1cIm9uUm93Q2hlY2soKVwiPjwvdGQ+XG4gICAgfVxuICAgIDx0ZCBmZC10YWJsZS1jZWxsIGNvbHNwYW49XCIxMDAlXCIgKGNsaWNrKT1cIm9uUm93Q2hlY2soKVwiIGNsYXNzPVwic2Vjb25kYXJ5IHAtd3JhcHBlclwiPlxuICAgICAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZmxleC1kaXJlY3Rpb246IGNvbHVtblwiPlxuICAgICAgICAgICAgQGZvciAoY29sdW1uIG9mIHNlY29uZGFyeUNvbHVtbnM7IHRyYWNrIF90cmFja0J5Q29sdW1uKGNvbHVtbkluZGV4LCBjb2x1bW4pOyBsZXQgY29sdW1uSW5kZXggPSAkaW5kZXgpIHtcbiAgICAgICAgICAgIDxwXG4gICAgICAgICAgICAgICAgI3BFbFxuICAgICAgICAgICAgICAgIGZkLXRhYmxlLXRleHRcbiAgICAgICAgICAgICAgICBbYXBwbHlDb25kaXRpb25hbEZvcm1hdHNdPVwiY29uZGl0aW9uYWxGb3JtYXRzXCJcbiAgICAgICAgICAgICAgICBbaG9zdEVsXT1cInBFbFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlSW5kZXhdPVwic3R5bGVJbmRleFwiXG4gICAgICAgICAgICAgICAgW2RiTmFtZV09XCJjb2x1bW4uTmFtZVwiXG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGxhYmVsIGZkLWZvcm0tbGFiZWw+e3sgY29sdW1uLkNhcHRpb24gfX0gOjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uVGVtcGxhdGU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBjb2x1bW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW86IG1vLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBjb2x1bW5JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmxpbmVFZGl0TW9kZTogaW5saW5lRWRpdE1vZGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0OTQ6IGxheW91dCQgfCBhc3luY1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvcD5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgPC90ZD5cbjwvdHI+XG59IEBpZiAoY2FydGFibGVQYXJhbXM/Lm1vSWQpIHtcbjx0ciBbY2xhc3MuZGV0YWlsQ29sbGFwc2VkXT1cImRldGFpbHNDb2xsYXBzZWRcIiBmZC10YWJsZS1yb3cgY2xhc3M9XCJzaG93ZGV0YWlsc1wiIFthdHRyLmFyaWEtc2VsZWN0ZWRdPVwiaXNDaGVja2VkXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN0YXR1c0luZGljYXRvclwiPjwvbmctY29udGFpbmVyPlxuICAgIDx0ZFxuICAgICAgICAoY2xpY2spPVwib25Sb3dDaGVjaygpXCJcbiAgICAgICAgZmQtdGFibGUtY2VsbFxuICAgICAgICBbYXR0ci5jb2xzcGFuXT1cIlxuICAgICAgICAgICAgY29sdW1ucy5sZW5ndGggK1xuICAgICAgICAgICAgMSArXG4gICAgICAgICAgICAocm93SW5kaWNhdG9yID8gLTEgOiAwKSArXG4gICAgICAgICAgICAoY29udGV4dE1lbnVJdGVtcy5sZW5ndGggPyAxIDogMCkgK1xuICAgICAgICAgICAgKGNhblZpZXcgPyAxIDogMCkgK1xuICAgICAgICAgICAgKHNob3dEZXRhaWxzSW5Sb3cgPyAxIDogMClcbiAgICAgICAgXCJcbiAgICA+XG4gICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICA8Ym5yYy1mb3JtXG4gICAgICAgICAgICAgICAgI2NhcnRhYmxlRm9ybVJlZlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiY2FydGFibGUtdGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgIFtpbmxpbmVFZGl0SW5SZXBvcnRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW3BhcmFtc109XCJjYXJ0YWJsZVBhcmFtc1wiXG4gICAgICAgICAgICAgICAgKGJlZm9yZVRyYW5zaXRpb24pPVwib25DYXJ0YWJsZUJlZm9yZVRhbnNpdGlvbigpXCJcbiAgICAgICAgICAgICAgICAoYWZ0ZXJUcmFuc2l0aW9uKT1cIm9uQ2FydGFibGVBZnRlclRhbnNpdGlvbigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAoYnJ1bGVBY3Rpb24pPVwib25DYXJ0YWJsZUJydWxlQWN0aW9uKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJPbkNhcnRhYmxlRm9ybUNsaWNrKCRldmVudClcIlxuICAgICAgICAgICAgICAgIChmb3JtQ2xvc2UpPVwib25DYXJ0YWJsZUZvcm1DbG9zZWQoKVwiXG4gICAgICAgICAgICA+PC9ibnJjLWZvcm0+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvdGQ+XG48L3RyPlxufSBAaWYgKCFkZXRhaWxzQ29sbGFwc2VkICYmIGRldGFpbHNDb21wb25lbnQ/LlNlbGVjdG9yKSB7XG48dHIgZmQtdGFibGUtcm93IGNsYXNzPVwic2hvd2RldGFpbHNcIiBbYXR0ci5hcmlhLXNlbGVjdGVkXT1cImlzQ2hlY2tlZFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdGF0dXNJbmRpY2F0b3JcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8dGRcbiAgICAgICAgKGNsaWNrKT1cIm9uUm93Q2hlY2soKVwiXG4gICAgICAgIGZkLXRhYmxlLWNlbGxcbiAgICAgICAgW2F0dHIuY29sc3Bhbl09XCJcbiAgICAgICAgICAgIGNvbHVtbnMubGVuZ3RoICtcbiAgICAgICAgICAgIDEgK1xuICAgICAgICAgICAgKHJvd0luZGljYXRvciA/IC0xIDogMCkgK1xuICAgICAgICAgICAgKGNvbnRleHRNZW51SXRlbXMgJiYgY29udGV4dE1lbnVJdGVtcy5sZW5ndGggPiAwICYmICFpbmxpbmVFZGl0TW9kZSA/IDEgOiAwKSArXG4gICAgICAgICAgICAoc2hvd1ZpZXdCdXR0b24gPyAxIDogMCkgK1xuICAgICAgICAgICAgKHNob3dEZXRhaWxzSW5Sb3cgJiYgIWlubGluZUVkaXRNb2RlID8gMSA6IDApXG4gICAgICAgIFwiXG4gICAgPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZGV0YWlsc0NvbHVtbnNUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICBAaWYgKGRldGFpbHNDb21wb25lbnQgJiYgZGV0YWlsc0NvbXBvbmVudC5TZWxlY3Rvcikge1xuICAgICAgICA8Ym5yYy1keW5hbWljLWl0ZW0tY29tcG9uZW50XG4gICAgICAgICAgICBbY29tcG9uZW50XT1cImRldGFpbHNDb21wb25lbnRcIlxuICAgICAgICAgICAgW21vXT1cIm1vXCJcbiAgICAgICAgICAgIFtpc0NoZWNrZWRdPVwiaXNDaGVja2VkXCJcbiAgICAgICAgICAgIFtVbHZNYWluQ3RybHJdPVwiVWx2TWFpbkN0cmxyXCJcbiAgICAgICAgICAgIFtzZXR0aW5nXT1cImRldGFpbHNDb21wb25lbnRTZXR0aW5nXCJcbiAgICAgICAgICAgIFtwYXJhbWV0ZXJzXT1cImRldGFpbHNDb21wb25lbnQuU2V0dGluZ3NcIlxuICAgICAgICAgICAgW2VkaXRNb2RlXT1cImlubGluZUVkaXRNb2RlXCJcbiAgICAgICAgICAgIFtmb3JtU2V0dGluZ109XCJmb3JtU2V0dGluZ1wiXG4gICAgICAgICAgICBbcnRsXT1cInJ0bFwiXG4gICAgICAgICAgICBbZGV2aWNlTmFtZV09XCJkZXZpY2VOYW1lXCJcbiAgICAgICAgICAgIFtkZXZpY2VTaXplXT1cImRldmljZVNpemVcIlxuICAgICAgICAgICAgW2luZGV4XT1cImluZGV4XCJcbiAgICAgICAgICAgIFthbGxDb2x1bW5zXT1cImFsbENvbHVtbnNcIlxuICAgICAgICAgICAgW3R5cGVEZWZJZF09XCJ0eXBlRGVmSWRcIlxuICAgICAgICA+PC9ibnJjLWR5bmFtaWMtaXRlbS1jb21wb25lbnQ+XG4gICAgICAgIH1cbiAgICA8L3RkPlxuPC90cj5cbn0gQGlmKGlzTGFzdENoaWxkR3JvdXApe1xuPHRyICN0ckVsIGZkLXRhYmxlLXJvdyBjbGFzcz1cImdyb3VwLXN1bW1hcnktcm93XCIgW2NsYXNzLm5vLWVkaXQtbW9kZV09XCJ0cnVlXCIgW2F0dHIuYXJpYS1zZWxlY3RlZF09XCJmYWxzZVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJzdGF0dXNJbmRpY2F0b3JcIj48L25nLWNvbnRhaW5lcj5cbiAgICBAaWYgKCFpc0NoZWNrTGlzdCkge1xuICAgIDx0ZCBmZC10YWJsZS1jZWxsIGNsYXNzPVwic2luZ2xlLXNlbGVjdFwiPjwvdGQ+XG4gICAgfSBAZm9yIChjb2x1bW4gb2YgY29sdW1uczsgdHJhY2sgX3RyYWNrQnlDb2x1bW4oY29sdW1uSW5kZXgsIGNvbHVtbik7IGxldCBjb2x1bW5JbmRleCA9ICRpbmRleCkge1xuICAgIDx0ZCBmZC10YWJsZS1jZWxsPlxuICAgICAgICA8bGFiZWwgI3N1bW1hcnlSZWY+e3sgcmVDYWxjdWxhdGVDb2x1bW5TdW1tYXJ5KHN1bW1hcnlSZWYsIGNvbHVtbikgfX08L2xhYmVsPlxuICAgIDwvdGQ+XG4gICAgfVxuPC90cj5cbn0gQGlmIChicnVsZUFjdGlvbk1lc3NhZ2UgJiYgaW5saW5lRWRpdE1vZGUpIHtcbjx0ciBmZC10YWJsZS1yb3c+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN0YXR1c0luZGljYXRvclwiPjwvbmctY29udGFpbmVyPlxuICAgIDx0ZFxuICAgICAgICBmZC10YWJsZS1jZWxsXG4gICAgICAgIFthdHRyLmNvbHNwYW5dPVwiXG4gICAgICAgICAgICBjb2x1bW5zLmxlbmd0aCArXG4gICAgICAgICAgICAxICtcbiAgICAgICAgICAgIChyb3dJbmRpY2F0b3IgPyAtMSA6IDApICtcbiAgICAgICAgICAgIChjb250ZXh0TWVudUl0ZW1zICYmIGNvbnRleHRNZW51SXRlbXMubGVuZ3RoID4gMCAmJiAhaW5saW5lRWRpdE1vZGUgPyAxIDogMCkgK1xuICAgICAgICAgICAgKHNob3dWaWV3QnV0dG9uID8gMSA6IDApICtcbiAgICAgICAgICAgIChzaG93RGV0YWlsc0luUm93ICYmICFpbmxpbmVFZGl0TW9kZSA/IDEgOiAwKVxuICAgICAgICBcIlxuICAgID5cbiAgICAgICAgQGlmIChicnVsZUFjdGlvbk1lc3NhZ2UuTWVzc2FnZVR5cGUgPT09IDIpIHtcbiAgICAgICAgPGZkLW1lc3NhZ2Utc3RyaXAgW3R5cGVdPVwiYnJ1bGVBY3Rpb25NZXNzYWdlLk1lc3NhZ2VUeXBlID09PSAyID8gJ2Vycm9yJyA6ICdpbmZvcm1hdGlvbidcIiBbZGlzbWlzc2libGVdPVwiZmFsc2VcIj5cbiAgICAgICAgICAgIHt7IGJydWxlQWN0aW9uTWVzc2FnZS5NZXNzYWdlRXhwcmVzc2lvbiB9fVxuICAgICAgICA8L2ZkLW1lc3NhZ2Utc3RyaXA+XG4gICAgICAgIH1cbiAgICA8L3RkPlxuPC90cj5cbn0gQGlmICh3b3JrZmxvd1N0YXRlPy5zdGF0ZSA9PT0gJ0ZpbmlzaCcgJiYgd29ya2Zsb3dTdGF0ZT8uZXJyb3IpIHtcbjx0ciBmZC10YWJsZS1yb3c+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInN0YXR1c0luZGljYXRvclwiPjwvbmctY29udGFpbmVyPlxuICAgIDx0ZFxuICAgICAgICBmZC10YWJsZS1jZWxsXG4gICAgICAgIFthdHRyLmNvbHNwYW5dPVwiXG4gICAgICAgICAgICBjb2x1bW5zLmxlbmd0aCArXG4gICAgICAgICAgICAxICtcbiAgICAgICAgICAgIChyb3dJbmRpY2F0b3IgPyAtMSA6IDApICtcbiAgICAgICAgICAgIChjb250ZXh0TWVudUl0ZW1zICYmIGNvbnRleHRNZW51SXRlbXMubGVuZ3RoID4gMCAmJiAhaW5saW5lRWRpdE1vZGUgPyAxIDogMCkgK1xuICAgICAgICAgICAgKHNob3dWaWV3QnV0dG9uID8gMSA6IDApICtcbiAgICAgICAgICAgIChzaG93RGV0YWlsc0luUm93ICYmICFpbmxpbmVFZGl0TW9kZSA/IDEgOiAwKVxuICAgICAgICBcIlxuICAgID5cbiAgICAgICAgPGZkLW1lc3NhZ2Utc3RyaXAgdHlwZT1cImVycm9yXCIgW2Rpc21pc3NpYmxlXT1cInRydWVcIiAob25EaXNtaXNzKT1cIm9uUmVzZXRXb3JrZmxvd1N0YXRlKClcIj5cbiAgICAgICAgICAgIHt7IHdvcmtmbG93U3RhdGUuZXJyb3I/LlRleHQgfHwgd29ya2Zsb3dTdGF0ZS5lcnJvcj8uTWVzc2FnZUV4cHJlc3Npb24gfX1cbiAgICAgICAgPC9mZC1tZXNzYWdlLXN0cmlwPlxuICAgIDwvdGQ+XG48L3RyPlxufVxuPG5nLXRlbXBsYXRlICNkZXRhaWxzQ29sdW1uc1RlbXBsYXRlPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgIGRldGFpbHNGb3JtSXRlbXM7XG4gICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgJGltcGxpY2l0OiBkZXRhaWxzQ29sdW1ucyxcbiAgICAgICAgICAgICAgICBtbzogbW8sXG4gICAgICAgICAgICAgICAgaW5saW5lRWRpdE1vZGU6IGlubGluZUVkaXRNb2RlLFxuICAgICAgICAgICAgICAgIGxheW91dDk0OiBsYXlvdXQkXG4gICAgICAgICAgICB9XG4gICAgICAgIFwiXG4gICAgPjwvbmctY29udGFpbmVyPlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZGV0YWlsc0Zvcm1JdGVtcyBsZXQtZGV0YWlsc0NvbHVtbnMgbGV0LW1vPVwibW9cIiBsZXQtaW5saW5lRWRpdE1vZGU9XCJpbmxpbmVFZGl0TW9kZVwiIGxldC1sYXlvdXQkPVwibGF5b3V0JFwiPlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWl0ZW1zXCI+XG4gICAgICAgIEBmb3IgKGNvbHVtbiBvZiBkZXRhaWxzQ29sdW1uczsgdHJhY2sgY29sdW1uOyBsZXQgY29sdW1uSW5kZXggPSAkaW5kZXgpIHtcbiAgICAgICAgPGRpdiBmZC1mb3JtLWl0ZW0+XG4gICAgICAgICAgICA8bGFiZWwgZmQtZm9ybS1sYWJlbCBmb3I9XCJpbnB1dC0yXCI+e3sgY29sdW1uLkNhcHRpb24gfX08L2xhYmVsPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgICAgICAgIGNvbHVtblRlbXBsYXRlO1xuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGNvbHVtbixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vOiBtbyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBjb2x1bW5JbmRleCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZUVkaXRNb2RlOiBpbmxpbmVFZGl0TW9kZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxheW91dDk0OiBsYXlvdXQkIHwgYXN5bmNcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICA+PC9uZy1jb250YWluZXI+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlXG4gICAgI2NvbHVtblRlbXBsYXRlXG4gICAgbGV0LWNvbHVtblxuICAgIGxldC1tbz1cIm1vXCJcbiAgICBsZXQtaW5kZXg9XCJpbmRleFwiXG4gICAgbGV0LWlubGluZUVkaXRNb2RlPVwiaW5saW5lRWRpdE1vZGVcIlxuICAgIGxldC1sYXlvdXQ5ND1cImxheW91dDk0XCJcbj5cbiAgICA8YnN1LWJhcnNhLXRhYmxlLWNvbHVtblxuICAgICAgICBbbW9dPVwibW9cIlxuICAgICAgICBbYWxsQ29sdW1uc109XCJhbGxDb2x1bW5zXCJcbiAgICAgICAgW2NvbHVtbl09XCJjb2x1bW5cIlxuICAgICAgICBbaXNkaXJ0eV09XCJkaXJ0eUNvbHVtbnMgJiYgZGlydHlDb2x1bW5zW2NvbHVtbi5OYW1lXVwiXG4gICAgICAgIFt2YWx1ZV09XCJjb2x1bW4gfCBjb2x1bW5WYWx1ZTogbW9cIlxuICAgICAgICBbaWNvbl09XCJjb2x1bW4gfCBjb2x1bW5JY29uOiBtb1wiXG4gICAgICAgIFtjdXN0b21Db21wb25lbnRdPVwiY29sdW1uLiRDdXN0b21Db21wb25lbnRcIlxuICAgICAgICBbY29sdW1uXT1cImNvbHVtblwiXG4gICAgICAgIFtkaXNhYmxlRWxsYXBzaXNdPVwic2Vjb25kYXJ5Q29sdW1ucz8ubGVuZ3RoXCJcbiAgICAgICAgW2VkaXRNb2RlXT1cImlzQ2hlY2tlZCAmJiBpbmxpbmVFZGl0TW9kZSAmJiBhbGxvd0lubGluZUVkaXRcIlxuICAgICAgICBbaW5saW5lRWRpdE1vZGVdPVwiaW5saW5lRWRpdE1vZGVcIlxuICAgICAgICBbaXNDaGVja2VkXT1cImlzQ2hlY2tlZFwiXG4gICAgICAgIFtpbmRleF09XCJpbmRleFwiXG4gICAgICAgIFtmb3JtU2V0dGluZ109XCJmb3JtU2V0dGluZ1wiXG4gICAgICAgIFtydGxdPVwicnRsXCJcbiAgICAgICAgW2RldmljZU5hbWVdPVwiZGV2aWNlTmFtZVwiXG4gICAgICAgIFtkZXZpY2VTaXplXT1cImRldmljZVNpemVcIlxuICAgICAgICBbbGF5b3V0OTRdPVwibGF5b3V0OTRcIlxuICAgICAgICAoc2F2ZSk9XCJvbkVkaXRGb3JtUGFuZWxTYXZlKG51bGwpXCJcbiAgICAgICAgKGNhbmNlbCk9XCJvbkVkaXRGb3JtUGFuZWxDYW5jZWwobnVsbClcIlxuICAgICAgICAodGFiKT1cIm9uVGFiS2V5RG93bigkZXZlbnQsIGluZGV4KVwiXG4gICAgICAgIChjaGFuZ2VUb0VkaXRNb2RlKT1cIm9uQ29sdW1uQ2hhbmdlVG9FZGl0TW9kZSgkZXZlbnQsIGluZGV4KVwiXG4gICAgPlxuICAgIDwvYnN1LWJhcnNhLXRhYmxlLWNvbHVtbj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3N0YXR1c0luZGljYXRvcj5cbiAgICBAaWYgKHJvd0luZGljYXRvcikge1xuICAgIDxic3UtYmFyc2EtY29sdW1uLWluZGljYXRvciBbaGlkZUJvcmRlckJvdHRvbV09XCIhZGV0YWlsc0NvbGxhcHNlZFwiIFtiYWNrQ29sb3JdPVwicm93SW5kaWNhdG9yQ29sb3JcIj5cbiAgICA8L2JzdS1iYXJzYS1jb2x1bW4taW5kaWNhdG9yPlxuICAgIH1cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3Jvd051bWJlclRlbXBsYXRlPlxuICAgIEBpZiAoc2hvd1Jvd051bWJlcikge1xuICAgIDxic3UtYmFyc2EtY29sdW1uLXJvd251bWJlciBbcm93TnVtYmVyXT1cInJvd051bWJlclwiIChjbGljayk9XCIhaXNDaGVja0xpc3QgJiYgb25Sb3dDaGVjaygpXCI+XG4gICAgPC9ic3UtYmFyc2EtY29sdW1uLXJvd251bWJlcj5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuPHRyIGZkLXRhYmxlLXJvdyBzdHlsZT1cInBvaW50ZXItZXZlbnRzOiBub25lXCI+PC90cj5cbiJdfQ==
|
|
@@ -22,7 +22,7 @@ export class BarsaTextEllipsisComponent extends BaseComponent {
|
|
|
22
22
|
this._cdr.detectChanges();
|
|
23
23
|
}
|
|
24
24
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: BarsaTextEllipsisComponent, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
25
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: BarsaTextEllipsisComponent, selector: "bsu-barsa-text-ellipsis,[textEllipsis]", inputs: { text: "text", fontSize: "fontSize", deviceSize: "deviceSize" }, usesInheritance: true, ngImport: i0, template: "<div (ellapsised)=\"onEllapsised($event)\" ellapsisText [ellapsisText]=\"text | bbbTranslate\">\n {{ text | bbbTranslate }}\n</div>\n@if (ellipsised) {\n<fd-popover>\n <fd-popover-control>\n <button style=\"position: absolute; left: 0\" fd-button glyph=\"overflow\" fdType=\"transparent\" fdCompact></button>\n </fd-popover-control>\n <fd-popover-body style=\"max-width: 320px\">\n <fd-text [text]=\"text | bbbTranslate\" [whitespaces]=\"true\"></fd-text>\n </fd-popover-body>\n</fd-popover>\n}\n", styles: [":host{display:block;position:relative}\n"], dependencies: [{ kind: "directive", type: i1.EllapsisTextDirective, selector: "[ellapsisText]", inputs: ["ellapsisText", "fontSize"], outputs: ["ellapsised"] }, { kind: "directive", type: i2.ContentDensityDirective, selector: "[fdContentDensity]:not([fdCompact]):not([fdCondensed]):not([fdCozy]), [fdCompact]:not([fdContentDensity]):not([fdCondensed]):not([fdCozy]), [fdCondensed]:not([fdContentDensity]):not([fdCompact]):not([fdCozy]), [fdCozy]:not([fdContentDensity]):not([fdCompact]):not([fdCondensed])", inputs: ["fdContentDensity", "fdCompact", "fdCondensed", "fdCozy"], exportAs: ["fdContentDensity"] }, { kind: "component", type: i3.ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i4.PopoverControlComponent, selector: "fd-popover-control, [fdPopoverControl]" }, { kind: "component", type: i4.PopoverBodyComponent, selector: "fd-popover-body", inputs: ["minWidth", "maxWidth", "minHeight", "maxHeight"] }, { kind: "component", type: i4.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig", "preventSpaceKeyScroll"] }, { kind: "component", type: i5.TextComponent, selector: "fd-text", inputs: ["text", "maxLines", "whitespaces", "hyphenation", "expandable", "isCollapsed"], outputs: ["isCollapsedChange"] }, { kind: "pipe", type: i1.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
25
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: BarsaTextEllipsisComponent, selector: "bsu-barsa-text-ellipsis,[textEllipsis]", inputs: { text: "text", fontSize: "fontSize", deviceSize: "deviceSize" }, usesInheritance: true, ngImport: i0, template: "<div (ellapsised)=\"onEllapsised($event)\" ellapsisText [ellapsisText]=\"text | bbbTranslate\">\n {{ text | bbbTranslate }}\n</div>\n@if (ellipsised) {\n<fd-popover>\n <fd-popover-control>\n <button style=\"position: absolute; left: 0\" fd-button glyph=\"overflow\" fdType=\"transparent\" fdCompact></button>\n </fd-popover-control>\n <fd-popover-body style=\"max-width: 320px\">\n <fd-text [text]=\"text | bbbTranslate\" [whitespaces]=\"true\"></fd-text>\n </fd-popover-body>\n</fd-popover>\n}\n", styles: [":host{display:block;position:relative}\n"], dependencies: [{ kind: "directive", type: i1.EllapsisTextDirective, selector: "[ellapsisText]", inputs: ["ellapsisText", "fontSize", "disableEllapsis"], outputs: ["ellapsised"] }, { kind: "directive", type: i2.ContentDensityDirective, selector: "[fdContentDensity]:not([fdCompact]):not([fdCondensed]):not([fdCozy]), [fdCompact]:not([fdContentDensity]):not([fdCondensed]):not([fdCozy]), [fdCondensed]:not([fdContentDensity]):not([fdCompact]):not([fdCozy]), [fdCozy]:not([fdContentDensity]):not([fdCompact]):not([fdCondensed])", inputs: ["fdContentDensity", "fdCompact", "fdCondensed", "fdCozy"], exportAs: ["fdContentDensity"] }, { kind: "component", type: i3.ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i4.PopoverControlComponent, selector: "fd-popover-control, [fdPopoverControl]" }, { kind: "component", type: i4.PopoverBodyComponent, selector: "fd-popover-body", inputs: ["minWidth", "maxWidth", "minHeight", "maxHeight"] }, { kind: "component", type: i4.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig", "preventSpaceKeyScroll"] }, { kind: "component", type: i5.TextComponent, selector: "fd-text", inputs: ["text", "maxLines", "whitespaces", "hyphenation", "expandable", "isCollapsed"], outputs: ["isCollapsedChange"] }, { kind: "pipe", type: i1.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
26
26
|
}
|
|
27
27
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: BarsaTextEllipsisComponent, decorators: [{
|
|
28
28
|
type: Component,
|
|
@@ -42,11 +42,11 @@ export class ColumnRendererComponent extends BaseComponent {
|
|
|
42
42
|
this._cdr.detectChanges();
|
|
43
43
|
}
|
|
44
44
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: ColumnRendererComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
45
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: ColumnRendererComponent, selector: "bsu-column-renderer,[colRenderer]", inputs: { column: "column", mo: "mo", index: "index", editMode: "editMode", customRowHeight: "customRowHeight", controlUi: "controlUi", formLayoutShowLabel: "formLayoutShowLabel", isChecked: "isChecked", isNewInlineMo: "isNewInlineMo", containerDom: "containerDom", disableEllapsis: "disableEllapsis", rtl: "rtl", deviceName: "deviceName", deviceSize: "deviceSize", value: "value", icon: "icon" }, host: { properties: { "class.isMobile": "this._isSmall" } }, usesInheritance: true, ngImport: i0, template: "@if (column) {\n<ng-container *ngTemplateOutlet=\"editMode ? formControlTemplate : renderCellTemplate\"> </ng-container>\n}\n<ng-template #renderCellTemplate>\n @switch (column.FieldTypeId) { @case (42) {\n <ng-container *ngTemplateOutlet=\"renderCellImage\"></ng-container>\n } @case (33) {\n <ng-container *ngTemplateOutlet=\"renderCellFileInfo\"></ng-container>\n } @case (31) {\n <ng-container *ngTemplateOutlet=\"renderCellFileListKhati\"></ng-container>\n } @case (11) {\n <ng-container *ngTemplateOutlet=\"renderCellListTasavir\"></ng-container>\n } @case (5) {\n <ng-container\n *ngTemplateOutlet=\"column.Extra?.ShowCheckInGrid ? renderCellChecbox : renderChecboxImage\"\n ></ng-container>\n } @default {\n <ng-container *ngTemplateOutlet=\"renderGeneral\"></ng-container>\n } }\n</ng-template>\n<ng-template #renderGeneral>\n <div style=\"display: flex; width: 100%; height: 100%; align-items: center; justify-content: start\" [style.width]=\"\">\n @if (icon) {\n <img [attr.rtl]=\"rtl\" [src]=\"icon\" />\n }\n <!-- <fd-text\n #fdText\n *ngIf=\"column.Extra?.IconDisplayTypeEnum !== 'Image'\"\n [maxLines]=\"1\"\n [text]=\"value\"\n [fd-inline-help]=\"value\"\n [disabled]=\"!fdText._hasMore\"\n ></fd-text> -->\n\n <!-- <bsu-barsa-text-ellipsis\n [style.width]=\"column.$Width\"\n *ngIf=\"column.Extra?.IconDisplayTypeEnum !== 'Image'\"\n [text]=\"value\"\n></bsu-barsa-text-ellipsis> -->\n <!-- <div *ngIf=\"column.Extra?.IconDisplayTypeEnum !== 'Image'\" style=\"word-break:break-word\">\n{{ value }}\n</div> -->\n @if (column.Extra?.IconDisplayTypeEnum !== 'Image') {\n <div\n [ellapsisText]=\"value\"\n [class.ellapsis]=\"!disableEllapsis\"\n (ellapsised)=\"onElapsised($event)\"\n (click)=\"showMore && helpPopover.open()\"\n >\n {{ value }}\n </div>\n }\n <fd-popover #helpPopover>\n <fd-popover-control> </fd-popover-control>\n <fd-popover-body class=\"help-popover-body\">\n <div fd-popover-body-header>\n <div fd-bar>\n <div fd-bar-left>\n <fd-bar-element style=\"white-space: break-spaces\"\n >{{ column.Alias | bbbTranslate }}:</fd-bar-element\n >\n </div>\n <div fd-bar-right>\n <fd-bar-element\n ><button\n fd-button\n fdType=\"transparent\"\n glyph=\"decline\"\n (click)=\"helpPopover.close()\"\n ></button>\n </fd-bar-element>\n </div>\n </div>\n </div>\n <div class=\"help-content\">{{ value }}</div>\n </fd-popover-body>\n </fd-popover>\n </div>\n</ng-template>\n<ng-template #formControlTemplate>\n <ng-container\n *ngTemplateOutlet=\"\n !controlUi || controlUi.FieldUi.originalXtype === 'Ui.ReadOnlyField'\n ? renderCellTemplate\n : layoutControlTemplate\n \"\n ></ng-container>\n</ng-template>\n<ng-template #layoutControlTemplate>\n @if (controlUi) {\n <bsu-layout-control\n [inlineEdit]=\"true\"\n [caption]=\"column.Caption\"\n [config]=\"controlUi\"\n [focusControl]=\"index === 0 && (isChecked || isNewInlineMo)\"\n [showLabel]=\"formLayoutShowLabel\"\n ></bsu-layout-control>\n }\n</ng-template>\n<ng-template #renderCellListTasavir>\n @if (mo[column.Name] && mo[column.Name].Images) {\n <div style=\"display: flex; flex-wrap: wrap; gap: 0.15rem\">\n @for (pic of mo[column.Name].Images; track pic) {\n <img\n fullscreen\n fullscreenFiles\n [files]=\"mo[column.Name].Images\"\n [isImageGallery]=\"true\"\n [deviceSize]=\"deviceSize\"\n [src]=\"pic.FileId | picFieldSrc: 'BarsaPicture.Thumbnail':null:'':32:32\"\n style=\"width: 3rem; height: 3rem\"\n />\n }\n </div>\n }\n</ng-template>\n<ng-template #renderCellFileListKhati>\n @if (mo[column.Name]) {\n <div class=\"file-viewer-attachments\">\n @for (file of mo[column.Name].Files; track file) { @if (!file.IsDeleted) {\n <bsu-file-viewer-popover\n [style.width.px]=\"containerDom ? containerDom.offsetWidth : null\"\n [file]=\"file\"\n [files]=\"mo[column.Name].Files\"\n [deviceSize]=\"deviceSize\"\n [canDownload]=\"true\"\n [disableRemove]=\"true\"\n [fdType]=\"'transparent'\"\n ></bsu-file-viewer-popover>\n }\n <!-- <fd-token *ngIf=\"!file.IsDeleted\" [readOnly]=\"true\">{{ file.FileName }}</fd-token> -->\n }\n </div>\n }\n</ng-template>\n<ng-template #renderCellFileInfo>\n @if (mo[column.Name]) {\n <fd-avatar\n [transparent]=\"true\"\n [size]=\"column.FieldTypeId === '42' || column.FieldTypeId === 42 ? 'xs' : deviceSize === 's' ? 's' : 'm'\"\n [image]=\"mo[column.Name] | picFieldSrc: 'PictureFileInfo':null:column.FieldDefId\"\n ></fd-avatar>\n }\n</ng-template>\n<ng-template #renderCellChecbox>\n <fd-icon [glyph]=\"mo[column.Name] === true ? 'accept' : 'less'\"></fd-icon>\n</ng-template>\n<ng-template #renderChecboxImage>\n @if (column.Extra?.TrueImage === '') {\n {{ value }}\n } @if (column.Extra?.TrueImage !== '') {\n <img [src]=\"mo[column.Name] ? column.Extra?.TrueImage : column.Extra?.FalseImage\" aling=\"middle\" />\n }\n</ng-template>\n<ng-template #renderCellImage>\n @if (mo[column.Name] && mo[column.Name]['Url']) {\n <fd-avatar\n [size]=\"column.FieldTypeId === '42' || column.FieldTypeId === 42 ? 'xs' : deviceSize === 's' ? 's' : 'm'\"\n [transparent]=\"true\"\n [image]=\"mo[column.Name]['Url']\"\n ></fd-avatar>\n }\n</ng-template>\n", styles: [":host{display:contents;overflow:hidden;padding:0}:host.isMobile span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;white-space:pre-wrap}\n"], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.EllapsisTextDirective, selector: "[ellapsisText]", inputs: ["ellapsisText", "fontSize"], outputs: ["ellapsised"] }, { kind: "component", type: i3.AvatarComponent, selector: "fd-avatar", inputs: ["class", "id", "ariaLabel", "ariaLabelledby", "label", "size", "font", "glyph", "zoomGlyph", "circle", "transparent", "contain", "placeholder", "tile", "border", "colorAccent", "random", "clickable", "valueState", "image", "alterIcon", "backupImage"], outputs: ["avatarClicked", "zoomGlyphClicked"] }, { kind: "component", type: i4.BarComponent, selector: "[fd-bar]", inputs: ["class", "barDesign", "inPage", "inHomePage", "size"] }, { kind: "directive", type: i4.BarLeftDirective, selector: "[fd-bar-left]" }, { kind: "directive", type: i4.BarRightDirective, selector: "[fd-bar-right]" }, { kind: "directive", type: i4.BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth"] }, { kind: "component", type: i5.ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i6.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "class", "ariaLabel", "ariaHidden"] }, { kind: "component", type: i7.PopoverControlComponent, selector: "fd-popover-control, [fdPopoverControl]" }, { kind: "component", type: i7.PopoverBodyComponent, selector: "fd-popover-body", inputs: ["minWidth", "maxWidth", "minHeight", "maxHeight"] }, { kind: "directive", type: i7.PopoverBodyHeaderDirective, selector: "[fdPopoverBodyHeader], [fd-popover-body-header]" }, { kind: "component", type: i7.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig", "preventSpaceKeyScroll"] }, { kind: "component", type: i8.LayoutControlComponent, selector: "bsu-layout-control", inputs: ["inlineEdit", "caption", "focusControl", "showLabel", "maxLabelWidth", "hasHorizontalText", "contentDensity", "flex", "RefreshLabel", "SetVisible"], outputs: ["events"] }, { kind: "component", type: i9.FileViewerPopoverComponent, selector: "bsu-file-viewer-popover", inputs: ["files", "file", "deviceSize", "canDownload", "disableRemove", "fdType"], outputs: ["remove"] }, { kind: "directive", type: i10.FullscreenFilesDirective, selector: "[fullscreenFiles]", inputs: ["files", "title", "deviceSize", "isImageGallery", "component"] }, { kind: "pipe", type: i2.PictureFieldSourcePipe, name: "picFieldSrc" }, { kind: "pipe", type: i2.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
45
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.5", type: ColumnRendererComponent, selector: "bsu-column-renderer,[colRenderer]", inputs: { column: "column", mo: "mo", index: "index", editMode: "editMode", customRowHeight: "customRowHeight", controlUi: "controlUi", formLayoutShowLabel: "formLayoutShowLabel", isChecked: "isChecked", isNewInlineMo: "isNewInlineMo", containerDom: "containerDom", disableEllapsis: "disableEllapsis", rtl: "rtl", deviceName: "deviceName", deviceSize: "deviceSize", value: "value", icon: "icon" }, host: { properties: { "class.isMobile": "this._isSmall" } }, usesInheritance: true, ngImport: i0, template: "@if (column) {\n<ng-container *ngTemplateOutlet=\"editMode ? formControlTemplate : renderCellTemplate\"> </ng-container>\n}\n<ng-template #renderCellTemplate>\n @switch (column.FieldTypeId) { @case (42) {\n <ng-container *ngTemplateOutlet=\"renderCellImage\"></ng-container>\n } @case (33) {\n <ng-container *ngTemplateOutlet=\"renderCellFileInfo\"></ng-container>\n } @case (31) {\n <ng-container *ngTemplateOutlet=\"renderCellFileListKhati\"></ng-container>\n } @case (11) {\n <ng-container *ngTemplateOutlet=\"renderCellListTasavir\"></ng-container>\n } @case (5) {\n <ng-container\n *ngTemplateOutlet=\"column.Extra?.ShowCheckInGrid ? renderCellChecbox : renderChecboxImage\"\n ></ng-container>\n } @default {\n <ng-container *ngTemplateOutlet=\"renderGeneral\"></ng-container>\n } }\n</ng-template>\n<ng-template #renderGeneral>\n <div style=\"display: flex; width: 100%; height: 100%; align-items: center; justify-content: start\" [style.width]=\"\">\n @if (icon) {\n <img [attr.rtl]=\"rtl\" [src]=\"icon\" />\n }\n <!-- <fd-text\n #fdText\n *ngIf=\"column.Extra?.IconDisplayTypeEnum !== 'Image'\"\n [maxLines]=\"1\"\n [text]=\"value\"\n [fd-inline-help]=\"value\"\n [disabled]=\"!fdText._hasMore\"\n ></fd-text> -->\n\n <!-- <bsu-barsa-text-ellipsis\n [style.width]=\"column.$Width\"\n *ngIf=\"column.Extra?.IconDisplayTypeEnum !== 'Image'\"\n [text]=\"value\"\n></bsu-barsa-text-ellipsis> -->\n <!-- <div *ngIf=\"column.Extra?.IconDisplayTypeEnum !== 'Image'\" style=\"word-break:break-word\">\n{{ value }}\n</div> -->\n @if (column.Extra?.IconDisplayTypeEnum !== 'Image') {\n <div\n [ellapsisText]=\"value\"\n [disableEllapsis]=\"editMode\"\n [class.ellapsis]=\"!disableEllapsis\"\n (ellapsised)=\"onElapsised($event)\"\n (click)=\"showMore && helpPopover.open()\"\n >\n {{ value }}\n </div>\n }\n <fd-popover #helpPopover>\n <fd-popover-control> </fd-popover-control>\n <fd-popover-body class=\"help-popover-body\">\n <div fd-popover-body-header>\n <div fd-bar>\n <div fd-bar-left>\n <fd-bar-element style=\"white-space: break-spaces\"\n >{{ column.Alias | bbbTranslate }}:</fd-bar-element\n >\n </div>\n <div fd-bar-right>\n <fd-bar-element\n ><button\n fd-button\n fdType=\"transparent\"\n glyph=\"decline\"\n (click)=\"helpPopover.close()\"\n ></button>\n </fd-bar-element>\n </div>\n </div>\n </div>\n <div class=\"help-content\">{{ value }}</div>\n </fd-popover-body>\n </fd-popover>\n </div>\n</ng-template>\n<ng-template #formControlTemplate>\n <ng-container\n *ngTemplateOutlet=\"\n !controlUi || controlUi.FieldUi.originalXtype === 'Ui.ReadOnlyField'\n ? renderCellTemplate\n : layoutControlTemplate\n \"\n ></ng-container>\n</ng-template>\n<ng-template #layoutControlTemplate>\n @if (controlUi) {\n <bsu-layout-control\n [inlineEdit]=\"true\"\n [caption]=\"column.Caption\"\n [config]=\"controlUi\"\n [focusControl]=\"index === 0 && (isChecked || isNewInlineMo)\"\n [showLabel]=\"formLayoutShowLabel\"\n ></bsu-layout-control>\n }\n</ng-template>\n<ng-template #renderCellListTasavir>\n @if (mo[column.Name] && mo[column.Name].Images) {\n <div style=\"display: flex; flex-wrap: wrap; gap: 0.15rem\">\n @for (pic of mo[column.Name].Images; track pic) {\n <img\n fullscreen\n fullscreenFiles\n [files]=\"mo[column.Name].Images\"\n [isImageGallery]=\"true\"\n [deviceSize]=\"deviceSize\"\n [src]=\"pic.FileId | picFieldSrc: 'BarsaPicture.Thumbnail':null:'':32:32\"\n style=\"width: 3rem; height: 3rem\"\n />\n }\n </div>\n }\n</ng-template>\n<ng-template #renderCellFileListKhati>\n @if (mo[column.Name]) {\n <div class=\"file-viewer-attachments\">\n @for (file of mo[column.Name].Files; track file) { @if (!file.IsDeleted) {\n <bsu-file-viewer-popover\n [style.width.px]=\"containerDom ? containerDom.offsetWidth : null\"\n [file]=\"file\"\n [files]=\"mo[column.Name].Files\"\n [deviceSize]=\"deviceSize\"\n [canDownload]=\"true\"\n [disableRemove]=\"true\"\n [fdType]=\"'transparent'\"\n ></bsu-file-viewer-popover>\n }\n <!-- <fd-token *ngIf=\"!file.IsDeleted\" [readOnly]=\"true\">{{ file.FileName }}</fd-token> -->\n }\n </div>\n }\n</ng-template>\n<ng-template #renderCellFileInfo>\n @if (mo[column.Name]) {\n <fd-avatar\n [transparent]=\"true\"\n [size]=\"column.FieldTypeId === '42' || column.FieldTypeId === 42 ? 'xs' : deviceSize === 's' ? 's' : 'm'\"\n [image]=\"mo[column.Name] | picFieldSrc: 'PictureFileInfo':null:column.FieldDefId\"\n ></fd-avatar>\n }\n</ng-template>\n<ng-template #renderCellChecbox>\n <fd-icon [glyph]=\"mo[column.Name] === true ? 'accept' : 'less'\"></fd-icon>\n</ng-template>\n<ng-template #renderChecboxImage>\n @if (column.Extra?.TrueImage === '') {\n {{ value }}\n } @if (column.Extra?.TrueImage !== '') {\n <img [src]=\"mo[column.Name] ? column.Extra?.TrueImage : column.Extra?.FalseImage\" aling=\"middle\" />\n }\n</ng-template>\n<ng-template #renderCellImage>\n @if (mo[column.Name] && mo[column.Name]['Url']) {\n <fd-avatar\n [size]=\"column.FieldTypeId === '42' || column.FieldTypeId === 42 ? 'xs' : deviceSize === 's' ? 's' : 'm'\"\n [transparent]=\"true\"\n [image]=\"mo[column.Name]['Url']\"\n ></fd-avatar>\n }\n</ng-template>\n", styles: [":host{display:contents;overflow:hidden;padding:0}:host.isMobile span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;white-space:pre-wrap}\n"], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.EllapsisTextDirective, selector: "[ellapsisText]", inputs: ["ellapsisText", "fontSize", "disableEllapsis"], outputs: ["ellapsised"] }, { kind: "component", type: i3.AvatarComponent, selector: "fd-avatar", inputs: ["class", "id", "ariaLabel", "ariaLabelledby", "label", "size", "font", "glyph", "zoomGlyph", "circle", "transparent", "contain", "placeholder", "tile", "border", "colorAccent", "random", "clickable", "valueState", "image", "alterIcon", "backupImage"], outputs: ["avatarClicked", "zoomGlyphClicked"] }, { kind: "component", type: i4.BarComponent, selector: "[fd-bar]", inputs: ["class", "barDesign", "inPage", "inHomePage", "size"] }, { kind: "directive", type: i4.BarLeftDirective, selector: "[fd-bar-left]" }, { kind: "directive", type: i4.BarRightDirective, selector: "[fd-bar-right]" }, { kind: "directive", type: i4.BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth"] }, { kind: "component", type: i5.ButtonComponent, selector: "button[fd-button], a[fd-button], span[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i6.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "color", "background", "class", "ariaLabel", "ariaHidden"] }, { kind: "component", type: i7.PopoverControlComponent, selector: "fd-popover-control, [fdPopoverControl]" }, { kind: "component", type: i7.PopoverBodyComponent, selector: "fd-popover-body", inputs: ["minWidth", "maxWidth", "minHeight", "maxHeight"] }, { kind: "directive", type: i7.PopoverBodyHeaderDirective, selector: "[fdPopoverBodyHeader], [fd-popover-body-header]" }, { kind: "component", type: i7.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig", "preventSpaceKeyScroll"] }, { kind: "component", type: i8.LayoutControlComponent, selector: "bsu-layout-control", inputs: ["inlineEdit", "caption", "focusControl", "showLabel", "maxLabelWidth", "hasHorizontalText", "contentDensity", "flex", "RefreshLabel", "SetVisible"], outputs: ["events"] }, { kind: "component", type: i9.FileViewerPopoverComponent, selector: "bsu-file-viewer-popover", inputs: ["files", "file", "deviceSize", "canDownload", "disableRemove", "fdType"], outputs: ["remove"] }, { kind: "directive", type: i10.FullscreenFilesDirective, selector: "[fullscreenFiles]", inputs: ["files", "title", "deviceSize", "isImageGallery", "component"] }, { kind: "pipe", type: i2.PictureFieldSourcePipe, name: "picFieldSrc" }, { kind: "pipe", type: i2.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
46
46
|
}
|
|
47
47
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: ColumnRendererComponent, decorators: [{
|
|
48
48
|
type: Component,
|
|
49
|
-
args: [{ selector: 'bsu-column-renderer,[colRenderer]', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (column) {\n<ng-container *ngTemplateOutlet=\"editMode ? formControlTemplate : renderCellTemplate\"> </ng-container>\n}\n<ng-template #renderCellTemplate>\n @switch (column.FieldTypeId) { @case (42) {\n <ng-container *ngTemplateOutlet=\"renderCellImage\"></ng-container>\n } @case (33) {\n <ng-container *ngTemplateOutlet=\"renderCellFileInfo\"></ng-container>\n } @case (31) {\n <ng-container *ngTemplateOutlet=\"renderCellFileListKhati\"></ng-container>\n } @case (11) {\n <ng-container *ngTemplateOutlet=\"renderCellListTasavir\"></ng-container>\n } @case (5) {\n <ng-container\n *ngTemplateOutlet=\"column.Extra?.ShowCheckInGrid ? renderCellChecbox : renderChecboxImage\"\n ></ng-container>\n } @default {\n <ng-container *ngTemplateOutlet=\"renderGeneral\"></ng-container>\n } }\n</ng-template>\n<ng-template #renderGeneral>\n <div style=\"display: flex; width: 100%; height: 100%; align-items: center; justify-content: start\" [style.width]=\"\">\n @if (icon) {\n <img [attr.rtl]=\"rtl\" [src]=\"icon\" />\n }\n <!-- <fd-text\n #fdText\n *ngIf=\"column.Extra?.IconDisplayTypeEnum !== 'Image'\"\n [maxLines]=\"1\"\n [text]=\"value\"\n [fd-inline-help]=\"value\"\n [disabled]=\"!fdText._hasMore\"\n ></fd-text> -->\n\n <!-- <bsu-barsa-text-ellipsis\n [style.width]=\"column.$Width\"\n *ngIf=\"column.Extra?.IconDisplayTypeEnum !== 'Image'\"\n [text]=\"value\"\n></bsu-barsa-text-ellipsis> -->\n <!-- <div *ngIf=\"column.Extra?.IconDisplayTypeEnum !== 'Image'\" style=\"word-break:break-word\">\n{{ value }}\n</div> -->\n @if (column.Extra?.IconDisplayTypeEnum !== 'Image') {\n <div\n [ellapsisText]=\"value\"\n [class.ellapsis]=\"!disableEllapsis\"\n (ellapsised)=\"onElapsised($event)\"\n (click)=\"showMore && helpPopover.open()\"\n >\n {{ value }}\n </div>\n }\n <fd-popover #helpPopover>\n <fd-popover-control> </fd-popover-control>\n <fd-popover-body class=\"help-popover-body\">\n <div fd-popover-body-header>\n <div fd-bar>\n <div fd-bar-left>\n <fd-bar-element style=\"white-space: break-spaces\"\n >{{ column.Alias | bbbTranslate }}:</fd-bar-element\n >\n </div>\n <div fd-bar-right>\n <fd-bar-element\n ><button\n fd-button\n fdType=\"transparent\"\n glyph=\"decline\"\n (click)=\"helpPopover.close()\"\n ></button>\n </fd-bar-element>\n </div>\n </div>\n </div>\n <div class=\"help-content\">{{ value }}</div>\n </fd-popover-body>\n </fd-popover>\n </div>\n</ng-template>\n<ng-template #formControlTemplate>\n <ng-container\n *ngTemplateOutlet=\"\n !controlUi || controlUi.FieldUi.originalXtype === 'Ui.ReadOnlyField'\n ? renderCellTemplate\n : layoutControlTemplate\n \"\n ></ng-container>\n</ng-template>\n<ng-template #layoutControlTemplate>\n @if (controlUi) {\n <bsu-layout-control\n [inlineEdit]=\"true\"\n [caption]=\"column.Caption\"\n [config]=\"controlUi\"\n [focusControl]=\"index === 0 && (isChecked || isNewInlineMo)\"\n [showLabel]=\"formLayoutShowLabel\"\n ></bsu-layout-control>\n }\n</ng-template>\n<ng-template #renderCellListTasavir>\n @if (mo[column.Name] && mo[column.Name].Images) {\n <div style=\"display: flex; flex-wrap: wrap; gap: 0.15rem\">\n @for (pic of mo[column.Name].Images; track pic) {\n <img\n fullscreen\n fullscreenFiles\n [files]=\"mo[column.Name].Images\"\n [isImageGallery]=\"true\"\n [deviceSize]=\"deviceSize\"\n [src]=\"pic.FileId | picFieldSrc: 'BarsaPicture.Thumbnail':null:'':32:32\"\n style=\"width: 3rem; height: 3rem\"\n />\n }\n </div>\n }\n</ng-template>\n<ng-template #renderCellFileListKhati>\n @if (mo[column.Name]) {\n <div class=\"file-viewer-attachments\">\n @for (file of mo[column.Name].Files; track file) { @if (!file.IsDeleted) {\n <bsu-file-viewer-popover\n [style.width.px]=\"containerDom ? containerDom.offsetWidth : null\"\n [file]=\"file\"\n [files]=\"mo[column.Name].Files\"\n [deviceSize]=\"deviceSize\"\n [canDownload]=\"true\"\n [disableRemove]=\"true\"\n [fdType]=\"'transparent'\"\n ></bsu-file-viewer-popover>\n }\n <!-- <fd-token *ngIf=\"!file.IsDeleted\" [readOnly]=\"true\">{{ file.FileName }}</fd-token> -->\n }\n </div>\n }\n</ng-template>\n<ng-template #renderCellFileInfo>\n @if (mo[column.Name]) {\n <fd-avatar\n [transparent]=\"true\"\n [size]=\"column.FieldTypeId === '42' || column.FieldTypeId === 42 ? 'xs' : deviceSize === 's' ? 's' : 'm'\"\n [image]=\"mo[column.Name] | picFieldSrc: 'PictureFileInfo':null:column.FieldDefId\"\n ></fd-avatar>\n }\n</ng-template>\n<ng-template #renderCellChecbox>\n <fd-icon [glyph]=\"mo[column.Name] === true ? 'accept' : 'less'\"></fd-icon>\n</ng-template>\n<ng-template #renderChecboxImage>\n @if (column.Extra?.TrueImage === '') {\n {{ value }}\n } @if (column.Extra?.TrueImage !== '') {\n <img [src]=\"mo[column.Name] ? column.Extra?.TrueImage : column.Extra?.FalseImage\" aling=\"middle\" />\n }\n</ng-template>\n<ng-template #renderCellImage>\n @if (mo[column.Name] && mo[column.Name]['Url']) {\n <fd-avatar\n [size]=\"column.FieldTypeId === '42' || column.FieldTypeId === 42 ? 'xs' : deviceSize === 's' ? 's' : 'm'\"\n [transparent]=\"true\"\n [image]=\"mo[column.Name]['Url']\"\n ></fd-avatar>\n }\n</ng-template>\n", styles: [":host{display:contents;overflow:hidden;padding:0}:host.isMobile span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;white-space:pre-wrap}\n"] }]
|
|
49
|
+
args: [{ selector: 'bsu-column-renderer,[colRenderer]', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (column) {\n<ng-container *ngTemplateOutlet=\"editMode ? formControlTemplate : renderCellTemplate\"> </ng-container>\n}\n<ng-template #renderCellTemplate>\n @switch (column.FieldTypeId) { @case (42) {\n <ng-container *ngTemplateOutlet=\"renderCellImage\"></ng-container>\n } @case (33) {\n <ng-container *ngTemplateOutlet=\"renderCellFileInfo\"></ng-container>\n } @case (31) {\n <ng-container *ngTemplateOutlet=\"renderCellFileListKhati\"></ng-container>\n } @case (11) {\n <ng-container *ngTemplateOutlet=\"renderCellListTasavir\"></ng-container>\n } @case (5) {\n <ng-container\n *ngTemplateOutlet=\"column.Extra?.ShowCheckInGrid ? renderCellChecbox : renderChecboxImage\"\n ></ng-container>\n } @default {\n <ng-container *ngTemplateOutlet=\"renderGeneral\"></ng-container>\n } }\n</ng-template>\n<ng-template #renderGeneral>\n <div style=\"display: flex; width: 100%; height: 100%; align-items: center; justify-content: start\" [style.width]=\"\">\n @if (icon) {\n <img [attr.rtl]=\"rtl\" [src]=\"icon\" />\n }\n <!-- <fd-text\n #fdText\n *ngIf=\"column.Extra?.IconDisplayTypeEnum !== 'Image'\"\n [maxLines]=\"1\"\n [text]=\"value\"\n [fd-inline-help]=\"value\"\n [disabled]=\"!fdText._hasMore\"\n ></fd-text> -->\n\n <!-- <bsu-barsa-text-ellipsis\n [style.width]=\"column.$Width\"\n *ngIf=\"column.Extra?.IconDisplayTypeEnum !== 'Image'\"\n [text]=\"value\"\n></bsu-barsa-text-ellipsis> -->\n <!-- <div *ngIf=\"column.Extra?.IconDisplayTypeEnum !== 'Image'\" style=\"word-break:break-word\">\n{{ value }}\n</div> -->\n @if (column.Extra?.IconDisplayTypeEnum !== 'Image') {\n <div\n [ellapsisText]=\"value\"\n [disableEllapsis]=\"editMode\"\n [class.ellapsis]=\"!disableEllapsis\"\n (ellapsised)=\"onElapsised($event)\"\n (click)=\"showMore && helpPopover.open()\"\n >\n {{ value }}\n </div>\n }\n <fd-popover #helpPopover>\n <fd-popover-control> </fd-popover-control>\n <fd-popover-body class=\"help-popover-body\">\n <div fd-popover-body-header>\n <div fd-bar>\n <div fd-bar-left>\n <fd-bar-element style=\"white-space: break-spaces\"\n >{{ column.Alias | bbbTranslate }}:</fd-bar-element\n >\n </div>\n <div fd-bar-right>\n <fd-bar-element\n ><button\n fd-button\n fdType=\"transparent\"\n glyph=\"decline\"\n (click)=\"helpPopover.close()\"\n ></button>\n </fd-bar-element>\n </div>\n </div>\n </div>\n <div class=\"help-content\">{{ value }}</div>\n </fd-popover-body>\n </fd-popover>\n </div>\n</ng-template>\n<ng-template #formControlTemplate>\n <ng-container\n *ngTemplateOutlet=\"\n !controlUi || controlUi.FieldUi.originalXtype === 'Ui.ReadOnlyField'\n ? renderCellTemplate\n : layoutControlTemplate\n \"\n ></ng-container>\n</ng-template>\n<ng-template #layoutControlTemplate>\n @if (controlUi) {\n <bsu-layout-control\n [inlineEdit]=\"true\"\n [caption]=\"column.Caption\"\n [config]=\"controlUi\"\n [focusControl]=\"index === 0 && (isChecked || isNewInlineMo)\"\n [showLabel]=\"formLayoutShowLabel\"\n ></bsu-layout-control>\n }\n</ng-template>\n<ng-template #renderCellListTasavir>\n @if (mo[column.Name] && mo[column.Name].Images) {\n <div style=\"display: flex; flex-wrap: wrap; gap: 0.15rem\">\n @for (pic of mo[column.Name].Images; track pic) {\n <img\n fullscreen\n fullscreenFiles\n [files]=\"mo[column.Name].Images\"\n [isImageGallery]=\"true\"\n [deviceSize]=\"deviceSize\"\n [src]=\"pic.FileId | picFieldSrc: 'BarsaPicture.Thumbnail':null:'':32:32\"\n style=\"width: 3rem; height: 3rem\"\n />\n }\n </div>\n }\n</ng-template>\n<ng-template #renderCellFileListKhati>\n @if (mo[column.Name]) {\n <div class=\"file-viewer-attachments\">\n @for (file of mo[column.Name].Files; track file) { @if (!file.IsDeleted) {\n <bsu-file-viewer-popover\n [style.width.px]=\"containerDom ? containerDom.offsetWidth : null\"\n [file]=\"file\"\n [files]=\"mo[column.Name].Files\"\n [deviceSize]=\"deviceSize\"\n [canDownload]=\"true\"\n [disableRemove]=\"true\"\n [fdType]=\"'transparent'\"\n ></bsu-file-viewer-popover>\n }\n <!-- <fd-token *ngIf=\"!file.IsDeleted\" [readOnly]=\"true\">{{ file.FileName }}</fd-token> -->\n }\n </div>\n }\n</ng-template>\n<ng-template #renderCellFileInfo>\n @if (mo[column.Name]) {\n <fd-avatar\n [transparent]=\"true\"\n [size]=\"column.FieldTypeId === '42' || column.FieldTypeId === 42 ? 'xs' : deviceSize === 's' ? 's' : 'm'\"\n [image]=\"mo[column.Name] | picFieldSrc: 'PictureFileInfo':null:column.FieldDefId\"\n ></fd-avatar>\n }\n</ng-template>\n<ng-template #renderCellChecbox>\n <fd-icon [glyph]=\"mo[column.Name] === true ? 'accept' : 'less'\"></fd-icon>\n</ng-template>\n<ng-template #renderChecboxImage>\n @if (column.Extra?.TrueImage === '') {\n {{ value }}\n } @if (column.Extra?.TrueImage !== '') {\n <img [src]=\"mo[column.Name] ? column.Extra?.TrueImage : column.Extra?.FalseImage\" aling=\"middle\" />\n }\n</ng-template>\n<ng-template #renderCellImage>\n @if (mo[column.Name] && mo[column.Name]['Url']) {\n <fd-avatar\n [size]=\"column.FieldTypeId === '42' || column.FieldTypeId === 42 ? 'xs' : deviceSize === 's' ? 's' : 'm'\"\n [transparent]=\"true\"\n [image]=\"mo[column.Name]['Url']\"\n ></fd-avatar>\n }\n</ng-template>\n", styles: [":host{display:contents;overflow:hidden;padding:0}:host.isMobile span{overflow:hidden;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;white-space:pre-wrap}\n"] }]
|
|
50
50
|
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { _isSmall: [{
|
|
51
51
|
type: HostBinding,
|
|
52
52
|
args: ['class.isMobile']
|
|
@@ -83,4 +83,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
|
|
|
83
83
|
}], icon: [{
|
|
84
84
|
type: Input
|
|
85
85
|
}] } });
|
|
86
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLXJlbmRlcmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL2NvbHVtbi1yZW5kZXJlci9jb2x1bW4tcmVuZGVyZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvY29sdW1uLXJlbmRlcmVyL2NvbHVtbi1yZW5kZXJlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxXQUFXLEVBQ1gsS0FBSyxFQUdSLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBeUIsYUFBYSxFQUFzQyxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7Ozs7QUFRaEgsTUFBTSxPQUFPLHVCQUF3QixTQUFRLGFBQWE7SUFxQnREOztPQUVHO0lBQ0gsWUFBc0IsSUFBdUI7UUFDekMsS0FBSyxFQUFFLENBQUM7UUFEVSxTQUFJLEdBQUosSUFBSSxDQUFtQjtRQXZCZCxhQUFRLEdBQUcsS0FBSyxDQUFDO0lBeUJoRCxDQUFDO0lBQ0QsUUFBUTtRQUNKLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25ELElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUN6QixDQUFDO0lBQ0wsQ0FBQztJQUNELGVBQWU7UUFDWCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzlDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM5QixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDVixDQUFDO0lBQ0wsQ0FBQztJQUNELFdBQVcsQ0FBQyxHQUFZO1FBQ3BCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLE9BQU87UUFDWCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM5QixDQUFDOzhHQS9DUSx1QkFBdUI7a0dBQXZCLHVCQUF1QiwyaUJDakJwQyxvb01BbUtBOzsyRkRsSmEsdUJBQXVCO2tCQU5uQyxTQUFTOytCQUNJLG1DQUFtQyxtQkFHNUIsdUJBQXVCLENBQUMsTUFBTTtzRkFHaEIsUUFBUTtzQkFBdEMsV0FBVzt1QkFBQyxnQkFBZ0I7Z0JBQ3BCLE1BQU07c0JBQWQsS0FBSztnQkFDRyxFQUFFO3NCQUFWLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFFRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgT25Jbml0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJicmV2YXRpb25EZXZpY2VTaXplLCBCYXNlQ29tcG9uZW50LCBMYXlvdXRTZXR0aW5nLCBNZXRhb2JqZWN0RGF0YU1vZGVsIH0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2JzdS1jb2x1bW4tcmVuZGVyZXIsW2NvbFJlbmRlcmVyXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvbHVtbi1yZW5kZXJlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY29sdW1uLXJlbmRlcmVyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQ29sdW1uUmVuZGVyZXJDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlzTW9iaWxlJykgX2lzU21hbGwgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBjb2x1bW46IGFueTtcbiAgICBASW5wdXQoKSBtbzogTWV0YW9iamVjdERhdGFNb2RlbDtcbiAgICBASW5wdXQoKSBpbmRleDogYW55O1xuICAgIEBJbnB1dCgpIGVkaXRNb2RlOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGN1c3RvbVJvd0hlaWdodDogYW55O1xuICAgIEBJbnB1dCgpIGNvbnRyb2xVaTogTGF5b3V0U2V0dGluZyB8IG51bGw7XG4gICAgQElucHV0KCkgZm9ybUxheW91dFNob3dMYWJlbDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBpc0NoZWNrZWQ6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaXNOZXdJbmxpbmVNbzogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBjb250YWluZXJEb206IEhUTUxFbGVtZW50O1xuXG4gICAgQElucHV0KCkgZGlzYWJsZUVsbGFwc2lzOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJ0bDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBkZXZpY2VOYW1lOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZGV2aWNlU2l6ZTogQWJicmV2YXRpb25EZXZpY2VTaXplO1xuICAgIEBJbnB1dCgpIHZhbHVlOiBhbnk7XG4gICAgQElucHV0KCkgaWNvbjogYW55O1xuICAgIHNob3dNb3JlOiBib29sZWFuO1xuICAgIGZpZWxkVHlwZUlkOiBudW1iZXI7XG4gICAgLyoqXG4gICAgICpcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMuZmllbGRUeXBlSWQgPSBOdW1iZXIodGhpcy5jb2x1bW4uRmllbGRUeXBlSWQpO1xuICAgICAgICBpZiAodGhpcy5kZXZpY2VTaXplID09PSAncycpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzU21hbGwgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY29sdW1uLkZpZWxkVHlwZUlkLnRvU3RyaW5nKCkgPT09ICczMScpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbkVsYXBzaXNlZCh2YWw6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZUVsbGFwc2lzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zaG93TW9yZSA9IHZhbDtcbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG59XG4iLCJAaWYgKGNvbHVtbikge1xuPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImVkaXRNb2RlID8gZm9ybUNvbnRyb2xUZW1wbGF0ZSA6IHJlbmRlckNlbGxUZW1wbGF0ZVwiPiA8L25nLWNvbnRhaW5lcj5cbn1cbjxuZy10ZW1wbGF0ZSAjcmVuZGVyQ2VsbFRlbXBsYXRlPlxuICAgIEBzd2l0Y2ggKGNvbHVtbi5GaWVsZFR5cGVJZCkgeyBAY2FzZSAoNDIpIHtcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVuZGVyQ2VsbEltYWdlXCI+PC9uZy1jb250YWluZXI+XG4gICAgfSBAY2FzZSAoMzMpIHtcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVuZGVyQ2VsbEZpbGVJbmZvXCI+PC9uZy1jb250YWluZXI+XG4gICAgfSBAY2FzZSAoMzEpIHtcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVuZGVyQ2VsbEZpbGVMaXN0S2hhdGlcIj48L25nLWNvbnRhaW5lcj5cbiAgICB9IEBjYXNlICgxMSkge1xuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyZW5kZXJDZWxsTGlzdFRhc2F2aXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICB9IEBjYXNlICg1KSB7XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImNvbHVtbi5FeHRyYT8uU2hvd0NoZWNrSW5HcmlkID8gcmVuZGVyQ2VsbENoZWNib3ggOiByZW5kZXJDaGVjYm94SW1hZ2VcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICB9IEBkZWZhdWx0IHtcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVuZGVyR2VuZXJhbFwiPjwvbmctY29udGFpbmVyPlxuICAgIH0gfVxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjcmVuZGVyR2VuZXJhbD5cbiAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBzdGFydFwiIFtzdHlsZS53aWR0aF09XCJcIj5cbiAgICAgICAgQGlmIChpY29uKSB7XG4gICAgICAgIDxpbWcgW2F0dHIucnRsXT1cInJ0bFwiIFtzcmNdPVwiaWNvblwiIC8+XG4gICAgICAgIH1cbiAgICAgICAgPCEtLSA8ZmQtdGV4dFxuICAgICNmZFRleHRcbiAgICAqbmdJZj1cImNvbHVtbi5FeHRyYT8uSWNvbkRpc3BsYXlUeXBlRW51bSAhPT0gJ0ltYWdlJ1wiXG4gICAgW21heExpbmVzXT1cIjFcIlxuICAgIFt0ZXh0XT1cInZhbHVlXCJcbiAgICBbZmQtaW5saW5lLWhlbHBdPVwidmFsdWVcIlxuICAgIFtkaXNhYmxlZF09XCIhZmRUZXh0Ll9oYXNNb3JlXCJcbiAgPjwvZmQtdGV4dD4gLS0+XG5cbiAgICAgICAgPCEtLSA8YnN1LWJhcnNhLXRleHQtZWxsaXBzaXNcbiAgW3N0eWxlLndpZHRoXT1cImNvbHVtbi4kV2lkdGhcIlxuICAqbmdJZj1cImNvbHVtbi5FeHRyYT8uSWNvbkRpc3BsYXlUeXBlRW51bSAhPT0gJ0ltYWdlJ1wiXG4gIFt0ZXh0XT1cInZhbHVlXCJcbj48L2JzdS1iYXJzYS10ZXh0LWVsbGlwc2lzPiAtLT5cbiAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwiY29sdW1uLkV4dHJhPy5JY29uRGlzcGxheVR5cGVFbnVtICE9PSAnSW1hZ2UnXCIgc3R5bGU9XCJ3b3JkLWJyZWFrOmJyZWFrLXdvcmRcIj5cbnt7IHZhbHVlIH19XG48L2Rpdj4gLS0+XG4gICAgICAgIEBpZiAoY29sdW1uLkV4dHJhPy5JY29uRGlzcGxheVR5cGVFbnVtICE9PSAnSW1hZ2UnKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtlbGxhcHNpc1RleHRdPVwidmFsdWVcIlxuICAgICAgICAgICAgW2NsYXNzLmVsbGFwc2lzXT1cIiFkaXNhYmxlRWxsYXBzaXNcIlxuICAgICAgICAgICAgKGVsbGFwc2lzZWQpPVwib25FbGFwc2lzZWQoJGV2ZW50KVwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2hvd01vcmUgJiYgaGVscFBvcG92ZXIub3BlbigpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAge3sgdmFsdWUgfX1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgICAgPGZkLXBvcG92ZXIgI2hlbHBQb3BvdmVyPlxuICAgICAgICAgICAgPGZkLXBvcG92ZXItY29udHJvbD4gPC9mZC1wb3BvdmVyLWNvbnRyb2w+XG4gICAgICAgICAgICA8ZmQtcG9wb3Zlci1ib2R5IGNsYXNzPVwiaGVscC1wb3BvdmVyLWJvZHlcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGZkLXBvcG92ZXItYm9keS1oZWFkZXI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgZmQtYmFyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBmZC1iYXItbGVmdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtYmFyLWVsZW1lbnQgc3R5bGU9XCJ3aGl0ZS1zcGFjZTogYnJlYWstc3BhY2VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7IGNvbHVtbi5BbGlhcyB8IGJiYlRyYW5zbGF0ZSB9fTo8L2ZkLWJhci1lbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGZkLWJhci1yaWdodD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZmQtYmFyLWVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZkLWJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2x5cGg9XCJkZWNsaW5lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJoZWxwUG9wb3Zlci5jbG9zZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZmQtYmFyLWVsZW1lbnQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlbHAtY29udGVudFwiPnt7IHZhbHVlIH19PC9kaXY+XG4gICAgICAgICAgICA8L2ZkLXBvcG92ZXItYm9keT5cbiAgICAgICAgPC9mZC1wb3BvdmVyPlxuICAgIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjZm9ybUNvbnRyb2xUZW1wbGF0ZT5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAhY29udHJvbFVpIHx8IGNvbnRyb2xVaS5GaWVsZFVpLm9yaWdpbmFsWHR5cGUgPT09ICdVaS5SZWFkT25seUZpZWxkJ1xuICAgICAgICAgICAgICAgID8gcmVuZGVyQ2VsbFRlbXBsYXRlXG4gICAgICAgICAgICAgICAgOiBsYXlvdXRDb250cm9sVGVtcGxhdGVcbiAgICAgICAgXCJcbiAgICA+PC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNsYXlvdXRDb250cm9sVGVtcGxhdGU+XG4gICAgQGlmIChjb250cm9sVWkpIHtcbiAgICA8YnN1LWxheW91dC1jb250cm9sXG4gICAgICAgIFtpbmxpbmVFZGl0XT1cInRydWVcIlxuICAgICAgICBbY2FwdGlvbl09XCJjb2x1bW4uQ2FwdGlvblwiXG4gICAgICAgIFtjb25maWddPVwiY29udHJvbFVpXCJcbiAgICAgICAgW2ZvY3VzQ29udHJvbF09XCJpbmRleCA9PT0gMCAmJiAoaXNDaGVja2VkIHx8IGlzTmV3SW5saW5lTW8pXCJcbiAgICAgICAgW3Nob3dMYWJlbF09XCJmb3JtTGF5b3V0U2hvd0xhYmVsXCJcbiAgICA+PC9ic3UtbGF5b3V0LWNvbnRyb2w+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjcmVuZGVyQ2VsbExpc3RUYXNhdmlyPlxuICAgIEBpZiAobW9bY29sdW1uLk5hbWVdICYmIG1vW2NvbHVtbi5OYW1lXS5JbWFnZXMpIHtcbiAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgZmxleC13cmFwOiB3cmFwOyBnYXA6IDAuMTVyZW1cIj5cbiAgICAgICAgQGZvciAocGljIG9mIG1vW2NvbHVtbi5OYW1lXS5JbWFnZXM7IHRyYWNrIHBpYykge1xuICAgICAgICA8aW1nXG4gICAgICAgICAgICBmdWxsc2NyZWVuXG4gICAgICAgICAgICBmdWxsc2NyZWVuRmlsZXNcbiAgICAgICAgICAgIFtmaWxlc109XCJtb1tjb2x1bW4uTmFtZV0uSW1hZ2VzXCJcbiAgICAgICAgICAgIFtpc0ltYWdlR2FsbGVyeV09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtkZXZpY2VTaXplXT1cImRldmljZVNpemVcIlxuICAgICAgICAgICAgW3NyY109XCJwaWMuRmlsZUlkIHwgcGljRmllbGRTcmM6ICdCYXJzYVBpY3R1cmUuVGh1bWJuYWlsJzpudWxsOicnOjMyOjMyXCJcbiAgICAgICAgICAgIHN0eWxlPVwid2lkdGg6IDNyZW07IGhlaWdodDogM3JlbVwiXG4gICAgICAgIC8+XG4gICAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNyZW5kZXJDZWxsRmlsZUxpc3RLaGF0aT5cbiAgICBAaWYgKG1vW2NvbHVtbi5OYW1lXSkge1xuICAgIDxkaXYgY2xhc3M9XCJmaWxlLXZpZXdlci1hdHRhY2htZW50c1wiPlxuICAgICAgICBAZm9yIChmaWxlIG9mIG1vW2NvbHVtbi5OYW1lXS5GaWxlczsgdHJhY2sgZmlsZSkgeyBAaWYgKCFmaWxlLklzRGVsZXRlZCkge1xuICAgICAgICA8YnN1LWZpbGUtdmlld2VyLXBvcG92ZXJcbiAgICAgICAgICAgIFtzdHlsZS53aWR0aC5weF09XCJjb250YWluZXJEb20gPyBjb250YWluZXJEb20ub2Zmc2V0V2lkdGggOiBudWxsXCJcbiAgICAgICAgICAgIFtmaWxlXT1cImZpbGVcIlxuICAgICAgICAgICAgW2ZpbGVzXT1cIm1vW2NvbHVtbi5OYW1lXS5GaWxlc1wiXG4gICAgICAgICAgICBbZGV2aWNlU2l6ZV09XCJkZXZpY2VTaXplXCJcbiAgICAgICAgICAgIFtjYW5Eb3dubG9hZF09XCJ0cnVlXCJcbiAgICAgICAgICAgIFtkaXNhYmxlUmVtb3ZlXT1cInRydWVcIlxuICAgICAgICAgICAgW2ZkVHlwZV09XCIndHJhbnNwYXJlbnQnXCJcbiAgICAgICAgPjwvYnN1LWZpbGUtdmlld2VyLXBvcG92ZXI+XG4gICAgICAgIH1cbiAgICAgICAgPCEtLSA8ZmQtdG9rZW4gKm5nSWY9XCIhZmlsZS5Jc0RlbGV0ZWRcIiBbcmVhZE9ubHldPVwidHJ1ZVwiPnt7IGZpbGUuRmlsZU5hbWUgfX08L2ZkLXRva2VuPiAtLT5cbiAgICAgICAgfVxuICAgIDwvZGl2PlxuICAgIH1cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3JlbmRlckNlbGxGaWxlSW5mbz5cbiAgICBAaWYgKG1vW2NvbHVtbi5OYW1lXSkge1xuICAgIDxmZC1hdmF0YXJcbiAgICAgICAgW3RyYW5zcGFyZW50XT1cInRydWVcIlxuICAgICAgICBbc2l6ZV09XCJjb2x1bW4uRmllbGRUeXBlSWQgPT09ICc0MicgfHwgY29sdW1uLkZpZWxkVHlwZUlkID09PSA0MiA/ICd4cycgOiBkZXZpY2VTaXplID09PSAncycgPyAncycgOiAnbSdcIlxuICAgICAgICBbaW1hZ2VdPVwibW9bY29sdW1uLk5hbWVdIHwgcGljRmllbGRTcmM6ICdQaWN0dXJlRmlsZUluZm8nOm51bGw6Y29sdW1uLkZpZWxkRGVmSWRcIlxuICAgID48L2ZkLWF2YXRhcj5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNyZW5kZXJDZWxsQ2hlY2JveD5cbiAgICA8ZmQtaWNvbiBbZ2x5cGhdPVwibW9bY29sdW1uLk5hbWVdID09PSB0cnVlID8gJ2FjY2VwdCcgOiAnbGVzcydcIj48L2ZkLWljb24+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNyZW5kZXJDaGVjYm94SW1hZ2U+XG4gICAgQGlmIChjb2x1bW4uRXh0cmE/LlRydWVJbWFnZSA9PT0gJycpIHtcbiAgICB7eyB2YWx1ZSB9fVxuICAgIH0gQGlmIChjb2x1bW4uRXh0cmE/LlRydWVJbWFnZSAhPT0gJycpIHtcbiAgICA8aW1nIFtzcmNdPVwibW9bY29sdW1uLk5hbWVdID8gY29sdW1uLkV4dHJhPy5UcnVlSW1hZ2UgOiBjb2x1bW4uRXh0cmE/LkZhbHNlSW1hZ2VcIiBhbGluZz1cIm1pZGRsZVwiIC8+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjcmVuZGVyQ2VsbEltYWdlPlxuICAgIEBpZiAobW9bY29sdW1uLk5hbWVdICYmIG1vW2NvbHVtbi5OYW1lXVsnVXJsJ10pIHtcbiAgICA8ZmQtYXZhdGFyXG4gICAgICAgIFtzaXplXT1cImNvbHVtbi5GaWVsZFR5cGVJZCA9PT0gJzQyJyB8fCBjb2x1bW4uRmllbGRUeXBlSWQgPT09IDQyID8gJ3hzJyA6IGRldmljZVNpemUgPT09ICdzJyA/ICdzJyA6ICdtJ1wiXG4gICAgICAgIFt0cmFuc3BhcmVudF09XCJ0cnVlXCJcbiAgICAgICAgW2ltYWdlXT1cIm1vW2NvbHVtbi5OYW1lXVsnVXJsJ11cIlxuICAgID48L2ZkLWF2YXRhcj5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sdW1uLXJlbmRlcmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLXNhcC11aS9zcmMvbGliL2NvbHVtbi1yZW5kZXJlci9jb2x1bW4tcmVuZGVyZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2Etc2FwLXVpL3NyYy9saWIvY29sdW1uLXJlbmRlcmVyL2NvbHVtbi1yZW5kZXJlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxXQUFXLEVBQ1gsS0FBSyxFQUdSLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBeUIsYUFBYSxFQUFzQyxNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7Ozs7QUFRaEgsTUFBTSxPQUFPLHVCQUF3QixTQUFRLGFBQWE7SUFxQnREOztPQUVHO0lBQ0gsWUFBc0IsSUFBdUI7UUFDekMsS0FBSyxFQUFFLENBQUM7UUFEVSxTQUFJLEdBQUosSUFBSSxDQUFtQjtRQXZCZCxhQUFRLEdBQUcsS0FBSyxDQUFDO0lBeUJoRCxDQUFDO0lBQ0QsUUFBUTtRQUNKLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNqQixJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25ELElBQUksSUFBSSxDQUFDLFVBQVUsS0FBSyxHQUFHLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUN6QixDQUFDO0lBQ0wsQ0FBQztJQUNELGVBQWU7UUFDWCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFDO1lBQzlDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1osSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM5QixDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDVixDQUFDO0lBQ0wsQ0FBQztJQUNELFdBQVcsQ0FBQyxHQUFZO1FBQ3BCLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLE9BQU87UUFDWCxDQUFDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxHQUFHLENBQUM7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUM5QixDQUFDOzhHQS9DUSx1QkFBdUI7a0dBQXZCLHVCQUF1QiwyaUJDakJwQyxnck1Bb0tBOzsyRkRuSmEsdUJBQXVCO2tCQU5uQyxTQUFTOytCQUNJLG1DQUFtQyxtQkFHNUIsdUJBQXVCLENBQUMsTUFBTTtzRkFHaEIsUUFBUTtzQkFBdEMsV0FBVzt1QkFBQyxnQkFBZ0I7Z0JBQ3BCLE1BQU07c0JBQWQsS0FBSztnQkFDRyxFQUFFO3NCQUFWLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csZUFBZTtzQkFBdkIsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFDRyxTQUFTO3NCQUFqQixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFFRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLEdBQUc7c0JBQVgsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgQ29tcG9uZW50LFxuICAgIEhvc3RCaW5kaW5nLFxuICAgIElucHV0LFxuICAgIEFmdGVyVmlld0luaXQsXG4gICAgT25Jbml0XG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWJicmV2YXRpb25EZXZpY2VTaXplLCBCYXNlQ29tcG9uZW50LCBMYXlvdXRTZXR0aW5nLCBNZXRhb2JqZWN0RGF0YU1vZGVsIH0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2JzdS1jb2x1bW4tcmVuZGVyZXIsW2NvbFJlbmRlcmVyXScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NvbHVtbi1yZW5kZXJlci5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vY29sdW1uLXJlbmRlcmVyLmNvbXBvbmVudC5zY3NzJ10sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQ29sdW1uUmVuZGVyZXJDb21wb25lbnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0IHtcbiAgICBASG9zdEJpbmRpbmcoJ2NsYXNzLmlzTW9iaWxlJykgX2lzU21hbGwgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBjb2x1bW46IGFueTtcbiAgICBASW5wdXQoKSBtbzogTWV0YW9iamVjdERhdGFNb2RlbDtcbiAgICBASW5wdXQoKSBpbmRleDogYW55O1xuICAgIEBJbnB1dCgpIGVkaXRNb2RlOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIGN1c3RvbVJvd0hlaWdodDogYW55O1xuICAgIEBJbnB1dCgpIGNvbnRyb2xVaTogTGF5b3V0U2V0dGluZyB8IG51bGw7XG4gICAgQElucHV0KCkgZm9ybUxheW91dFNob3dMYWJlbDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBpc0NoZWNrZWQ6IGJvb2xlYW47XG4gICAgQElucHV0KCkgaXNOZXdJbmxpbmVNbzogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBjb250YWluZXJEb206IEhUTUxFbGVtZW50O1xuXG4gICAgQElucHV0KCkgZGlzYWJsZUVsbGFwc2lzOiBib29sZWFuO1xuICAgIEBJbnB1dCgpIHJ0bDogYm9vbGVhbjtcbiAgICBASW5wdXQoKSBkZXZpY2VOYW1lOiBzdHJpbmc7XG4gICAgQElucHV0KCkgZGV2aWNlU2l6ZTogQWJicmV2YXRpb25EZXZpY2VTaXplO1xuICAgIEBJbnB1dCgpIHZhbHVlOiBhbnk7XG4gICAgQElucHV0KCkgaWNvbjogYW55O1xuICAgIHNob3dNb3JlOiBib29sZWFuO1xuICAgIGZpZWxkVHlwZUlkOiBudW1iZXI7XG4gICAgLyoqXG4gICAgICpcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG4gICAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG4gICAgICAgIHRoaXMuZmllbGRUeXBlSWQgPSBOdW1iZXIodGhpcy5jb2x1bW4uRmllbGRUeXBlSWQpO1xuICAgICAgICBpZiAodGhpcy5kZXZpY2VTaXplID09PSAncycpIHtcbiAgICAgICAgICAgIHRoaXMuX2lzU21hbGwgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuY29sdW1uLkZpZWxkVHlwZUlkLnRvU3RyaW5nKCkgPT09ICczMScpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuX2Nkci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbkVsYXBzaXNlZCh2YWw6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZGlzYWJsZUVsbGFwc2lzKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zaG93TW9yZSA9IHZhbDtcbiAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG59XG4iLCJAaWYgKGNvbHVtbikge1xuPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImVkaXRNb2RlID8gZm9ybUNvbnRyb2xUZW1wbGF0ZSA6IHJlbmRlckNlbGxUZW1wbGF0ZVwiPiA8L25nLWNvbnRhaW5lcj5cbn1cbjxuZy10ZW1wbGF0ZSAjcmVuZGVyQ2VsbFRlbXBsYXRlPlxuICAgIEBzd2l0Y2ggKGNvbHVtbi5GaWVsZFR5cGVJZCkgeyBAY2FzZSAoNDIpIHtcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVuZGVyQ2VsbEltYWdlXCI+PC9uZy1jb250YWluZXI+XG4gICAgfSBAY2FzZSAoMzMpIHtcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVuZGVyQ2VsbEZpbGVJbmZvXCI+PC9uZy1jb250YWluZXI+XG4gICAgfSBAY2FzZSAoMzEpIHtcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVuZGVyQ2VsbEZpbGVMaXN0S2hhdGlcIj48L25nLWNvbnRhaW5lcj5cbiAgICB9IEBjYXNlICgxMSkge1xuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJyZW5kZXJDZWxsTGlzdFRhc2F2aXJcIj48L25nLWNvbnRhaW5lcj5cbiAgICB9IEBjYXNlICg1KSB7XG4gICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cImNvbHVtbi5FeHRyYT8uU2hvd0NoZWNrSW5HcmlkID8gcmVuZGVyQ2VsbENoZWNib3ggOiByZW5kZXJDaGVjYm94SW1hZ2VcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbiAgICB9IEBkZWZhdWx0IHtcbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwicmVuZGVyR2VuZXJhbFwiPjwvbmctY29udGFpbmVyPlxuICAgIH0gfVxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjcmVuZGVyR2VuZXJhbD5cbiAgICA8ZGl2IHN0eWxlPVwiZGlzcGxheTogZmxleDsgd2lkdGg6IDEwMCU7IGhlaWdodDogMTAwJTsgYWxpZ24taXRlbXM6IGNlbnRlcjsganVzdGlmeS1jb250ZW50OiBzdGFydFwiIFtzdHlsZS53aWR0aF09XCJcIj5cbiAgICAgICAgQGlmIChpY29uKSB7XG4gICAgICAgIDxpbWcgW2F0dHIucnRsXT1cInJ0bFwiIFtzcmNdPVwiaWNvblwiIC8+XG4gICAgICAgIH1cbiAgICAgICAgPCEtLSA8ZmQtdGV4dFxuICAgICNmZFRleHRcbiAgICAqbmdJZj1cImNvbHVtbi5FeHRyYT8uSWNvbkRpc3BsYXlUeXBlRW51bSAhPT0gJ0ltYWdlJ1wiXG4gICAgW21heExpbmVzXT1cIjFcIlxuICAgIFt0ZXh0XT1cInZhbHVlXCJcbiAgICBbZmQtaW5saW5lLWhlbHBdPVwidmFsdWVcIlxuICAgIFtkaXNhYmxlZF09XCIhZmRUZXh0Ll9oYXNNb3JlXCJcbiAgPjwvZmQtdGV4dD4gLS0+XG5cbiAgICAgICAgPCEtLSA8YnN1LWJhcnNhLXRleHQtZWxsaXBzaXNcbiAgW3N0eWxlLndpZHRoXT1cImNvbHVtbi4kV2lkdGhcIlxuICAqbmdJZj1cImNvbHVtbi5FeHRyYT8uSWNvbkRpc3BsYXlUeXBlRW51bSAhPT0gJ0ltYWdlJ1wiXG4gIFt0ZXh0XT1cInZhbHVlXCJcbj48L2JzdS1iYXJzYS10ZXh0LWVsbGlwc2lzPiAtLT5cbiAgICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwiY29sdW1uLkV4dHJhPy5JY29uRGlzcGxheVR5cGVFbnVtICE9PSAnSW1hZ2UnXCIgc3R5bGU9XCJ3b3JkLWJyZWFrOmJyZWFrLXdvcmRcIj5cbnt7IHZhbHVlIH19XG48L2Rpdj4gLS0+XG4gICAgICAgIEBpZiAoY29sdW1uLkV4dHJhPy5JY29uRGlzcGxheVR5cGVFbnVtICE9PSAnSW1hZ2UnKSB7XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAgIFtlbGxhcHNpc1RleHRdPVwidmFsdWVcIlxuICAgICAgICAgICAgW2Rpc2FibGVFbGxhcHNpc109XCJlZGl0TW9kZVwiXG4gICAgICAgICAgICBbY2xhc3MuZWxsYXBzaXNdPVwiIWRpc2FibGVFbGxhcHNpc1wiXG4gICAgICAgICAgICAoZWxsYXBzaXNlZCk9XCJvbkVsYXBzaXNlZCgkZXZlbnQpXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzaG93TW9yZSAmJiBoZWxwUG9wb3Zlci5vcGVuKClcIlxuICAgICAgICA+XG4gICAgICAgICAgICB7eyB2YWx1ZSB9fVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgICA8ZmQtcG9wb3ZlciAjaGVscFBvcG92ZXI+XG4gICAgICAgICAgICA8ZmQtcG9wb3Zlci1jb250cm9sPiA8L2ZkLXBvcG92ZXItY29udHJvbD5cbiAgICAgICAgICAgIDxmZC1wb3BvdmVyLWJvZHkgY2xhc3M9XCJoZWxwLXBvcG92ZXItYm9keVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgZmQtcG9wb3Zlci1ib2R5LWhlYWRlcj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBmZC1iYXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGZkLWJhci1sZWZ0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1iYXItZWxlbWVudCBzdHlsZT1cIndoaXRlLXNwYWNlOiBicmVhay1zcGFjZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+e3sgY29sdW1uLkFsaWFzIHwgYmJiVHJhbnNsYXRlIH19OjwvZmQtYmFyLWVsZW1lbnRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgZmQtYmFyLXJpZ2h0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxmZC1iYXItZWxlbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmQtYnV0dG9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZFR5cGU9XCJ0cmFuc3BhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbHlwaD1cImRlY2xpbmVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImhlbHBQb3BvdmVyLmNsb3NlKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9mZC1iYXItZWxlbWVudD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGVscC1jb250ZW50XCI+e3sgdmFsdWUgfX08L2Rpdj5cbiAgICAgICAgICAgIDwvZmQtcG9wb3Zlci1ib2R5PlxuICAgICAgICA8L2ZkLXBvcG92ZXI+XG4gICAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNmb3JtQ29udHJvbFRlbXBsYXRlPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICFjb250cm9sVWkgfHwgY29udHJvbFVpLkZpZWxkVWkub3JpZ2luYWxYdHlwZSA9PT0gJ1VpLlJlYWRPbmx5RmllbGQnXG4gICAgICAgICAgICAgICAgPyByZW5kZXJDZWxsVGVtcGxhdGVcbiAgICAgICAgICAgICAgICA6IGxheW91dENvbnRyb2xUZW1wbGF0ZVxuICAgICAgICBcIlxuICAgID48L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI2xheW91dENvbnRyb2xUZW1wbGF0ZT5cbiAgICBAaWYgKGNvbnRyb2xVaSkge1xuICAgIDxic3UtbGF5b3V0LWNvbnRyb2xcbiAgICAgICAgW2lubGluZUVkaXRdPVwidHJ1ZVwiXG4gICAgICAgIFtjYXB0aW9uXT1cImNvbHVtbi5DYXB0aW9uXCJcbiAgICAgICAgW2NvbmZpZ109XCJjb250cm9sVWlcIlxuICAgICAgICBbZm9jdXNDb250cm9sXT1cImluZGV4ID09PSAwICYmIChpc0NoZWNrZWQgfHwgaXNOZXdJbmxpbmVNbylcIlxuICAgICAgICBbc2hvd0xhYmVsXT1cImZvcm1MYXlvdXRTaG93TGFiZWxcIlxuICAgID48L2JzdS1sYXlvdXQtY29udHJvbD5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNyZW5kZXJDZWxsTGlzdFRhc2F2aXI+XG4gICAgQGlmIChtb1tjb2x1bW4uTmFtZV0gJiYgbW9bY29sdW1uLk5hbWVdLkltYWdlcykge1xuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyBmbGV4LXdyYXA6IHdyYXA7IGdhcDogMC4xNXJlbVwiPlxuICAgICAgICBAZm9yIChwaWMgb2YgbW9bY29sdW1uLk5hbWVdLkltYWdlczsgdHJhY2sgcGljKSB7XG4gICAgICAgIDxpbWdcbiAgICAgICAgICAgIGZ1bGxzY3JlZW5cbiAgICAgICAgICAgIGZ1bGxzY3JlZW5GaWxlc1xuICAgICAgICAgICAgW2ZpbGVzXT1cIm1vW2NvbHVtbi5OYW1lXS5JbWFnZXNcIlxuICAgICAgICAgICAgW2lzSW1hZ2VHYWxsZXJ5XT1cInRydWVcIlxuICAgICAgICAgICAgW2RldmljZVNpemVdPVwiZGV2aWNlU2l6ZVwiXG4gICAgICAgICAgICBbc3JjXT1cInBpYy5GaWxlSWQgfCBwaWNGaWVsZFNyYzogJ0JhcnNhUGljdHVyZS5UaHVtYm5haWwnOm51bGw6Jyc6MzI6MzJcIlxuICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogM3JlbTsgaGVpZ2h0OiAzcmVtXCJcbiAgICAgICAgLz5cbiAgICAgICAgfVxuICAgIDwvZGl2PlxuICAgIH1cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3JlbmRlckNlbGxGaWxlTGlzdEtoYXRpPlxuICAgIEBpZiAobW9bY29sdW1uLk5hbWVdKSB7XG4gICAgPGRpdiBjbGFzcz1cImZpbGUtdmlld2VyLWF0dGFjaG1lbnRzXCI+XG4gICAgICAgIEBmb3IgKGZpbGUgb2YgbW9bY29sdW1uLk5hbWVdLkZpbGVzOyB0cmFjayBmaWxlKSB7IEBpZiAoIWZpbGUuSXNEZWxldGVkKSB7XG4gICAgICAgIDxic3UtZmlsZS12aWV3ZXItcG9wb3ZlclxuICAgICAgICAgICAgW3N0eWxlLndpZHRoLnB4XT1cImNvbnRhaW5lckRvbSA/IGNvbnRhaW5lckRvbS5vZmZzZXRXaWR0aCA6IG51bGxcIlxuICAgICAgICAgICAgW2ZpbGVdPVwiZmlsZVwiXG4gICAgICAgICAgICBbZmlsZXNdPVwibW9bY29sdW1uLk5hbWVdLkZpbGVzXCJcbiAgICAgICAgICAgIFtkZXZpY2VTaXplXT1cImRldmljZVNpemVcIlxuICAgICAgICAgICAgW2NhbkRvd25sb2FkXT1cInRydWVcIlxuICAgICAgICAgICAgW2Rpc2FibGVSZW1vdmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICBbZmRUeXBlXT1cIid0cmFuc3BhcmVudCdcIlxuICAgICAgICA+PC9ic3UtZmlsZS12aWV3ZXItcG9wb3Zlcj5cbiAgICAgICAgfVxuICAgICAgICA8IS0tIDxmZC10b2tlbiAqbmdJZj1cIiFmaWxlLklzRGVsZXRlZFwiIFtyZWFkT25seV09XCJ0cnVlXCI+e3sgZmlsZS5GaWxlTmFtZSB9fTwvZmQtdG9rZW4+IC0tPlxuICAgICAgICB9XG4gICAgPC9kaXY+XG4gICAgfVxuPC9uZy10ZW1wbGF0ZT5cbjxuZy10ZW1wbGF0ZSAjcmVuZGVyQ2VsbEZpbGVJbmZvPlxuICAgIEBpZiAobW9bY29sdW1uLk5hbWVdKSB7XG4gICAgPGZkLWF2YXRhclxuICAgICAgICBbdHJhbnNwYXJlbnRdPVwidHJ1ZVwiXG4gICAgICAgIFtzaXplXT1cImNvbHVtbi5GaWVsZFR5cGVJZCA9PT0gJzQyJyB8fCBjb2x1bW4uRmllbGRUeXBlSWQgPT09IDQyID8gJ3hzJyA6IGRldmljZVNpemUgPT09ICdzJyA/ICdzJyA6ICdtJ1wiXG4gICAgICAgIFtpbWFnZV09XCJtb1tjb2x1bW4uTmFtZV0gfCBwaWNGaWVsZFNyYzogJ1BpY3R1cmVGaWxlSW5mbyc6bnVsbDpjb2x1bW4uRmllbGREZWZJZFwiXG4gICAgPjwvZmQtYXZhdGFyPlxuICAgIH1cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3JlbmRlckNlbGxDaGVjYm94PlxuICAgIDxmZC1pY29uIFtnbHlwaF09XCJtb1tjb2x1bW4uTmFtZV0gPT09IHRydWUgPyAnYWNjZXB0JyA6ICdsZXNzJ1wiPjwvZmQtaWNvbj5cbjwvbmctdGVtcGxhdGU+XG48bmctdGVtcGxhdGUgI3JlbmRlckNoZWNib3hJbWFnZT5cbiAgICBAaWYgKGNvbHVtbi5FeHRyYT8uVHJ1ZUltYWdlID09PSAnJykge1xuICAgIHt7IHZhbHVlIH19XG4gICAgfSBAaWYgKGNvbHVtbi5FeHRyYT8uVHJ1ZUltYWdlICE9PSAnJykge1xuICAgIDxpbWcgW3NyY109XCJtb1tjb2x1bW4uTmFtZV0gPyBjb2x1bW4uRXh0cmE/LlRydWVJbWFnZSA6IGNvbHVtbi5FeHRyYT8uRmFsc2VJbWFnZVwiIGFsaW5nPVwibWlkZGxlXCIgLz5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuPG5nLXRlbXBsYXRlICNyZW5kZXJDZWxsSW1hZ2U+XG4gICAgQGlmIChtb1tjb2x1bW4uTmFtZV0gJiYgbW9bY29sdW1uLk5hbWVdWydVcmwnXSkge1xuICAgIDxmZC1hdmF0YXJcbiAgICAgICAgW3NpemVdPVwiY29sdW1uLkZpZWxkVHlwZUlkID09PSAnNDInIHx8IGNvbHVtbi5GaWVsZFR5cGVJZCA9PT0gNDIgPyAneHMnIDogZGV2aWNlU2l6ZSA9PT0gJ3MnID8gJ3MnIDogJ20nXCJcbiAgICAgICAgW3RyYW5zcGFyZW50XT1cInRydWVcIlxuICAgICAgICBbaW1hZ2VdPVwibW9bY29sdW1uLk5hbWVdWydVcmwnXVwiXG4gICAgPjwvZmQtYXZhdGFyPlxuICAgIH1cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|