@porscheinformatik/material-addons 10.1.7 → 10.2.1
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/bundles/porscheinformatik-material-addons.umd.js +395 -51
- package/bundles/porscheinformatik-material-addons.umd.js.map +1 -1
- package/bundles/porscheinformatik-material-addons.umd.min.js +2 -2
- package/bundles/porscheinformatik-material-addons.umd.min.js.map +1 -1
- package/esm2015/lib/card/card.component.js +19 -5
- package/esm2015/lib/material-addons.module.js +3 -3
- package/esm2015/lib/numeric-field/numeric-field.directive.js +4 -2
- package/esm2015/lib/quick-list/base-quick-list.component.js +89 -0
- package/esm2015/lib/quick-list/quick-list-compact/quick-list-compact.component.js +18 -0
- package/esm2015/lib/quick-list/quick-list.component.js +6 -77
- package/esm2015/lib/quick-list/quick-list.module.js +6 -4
- package/esm2015/lib/stepper/mad-stepper-animation.js +13 -0
- package/esm2015/lib/stepper/step-header/step-header.component.js +75 -0
- package/esm2015/lib/stepper/stepper.component.js +167 -0
- package/esm2015/lib/stepper/stepper.module.js +18 -0
- package/esm2015/porscheinformatik-material-addons.js +4 -2
- package/esm2015/public-api.js +5 -1
- package/fesm2015/porscheinformatik-material-addons.js +329 -24
- package/fesm2015/porscheinformatik-material-addons.js.map +1 -1
- package/lib/card/card.component.d.ts +4 -0
- package/lib/quick-list/base-quick-list.component.d.ts +29 -0
- package/lib/quick-list/quick-list-compact/quick-list-compact.component.d.ts +6 -0
- package/lib/quick-list/quick-list.component.d.ts +4 -27
- package/lib/stepper/mad-stepper-animation.d.ts +7 -0
- package/lib/stepper/step-header/step-header.component.d.ts +23 -0
- package/lib/stepper/stepper.component.d.ts +47 -0
- package/lib/stepper/stepper.module.d.ts +2 -0
- package/package.json +6 -6
- package/porscheinformatik-material-addons.d.ts +3 -1
- package/porscheinformatik-material-addons.metadata.json +1 -1
- package/public-api.d.ts +4 -0
- package/themes/common/styles.scss +17 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../projects/material-addons/src/lib/material-action-button/material-action-button.component.ts","../../../projects/material-addons/src/lib/material-action-button/material-action-button.module.ts","../../../node_modules/tslib/tslib.es6.js","../../../projects/material-addons/src/lib/button/mad-basic-button.ts","../../../projects/material-addons/src/lib/button/primary-button/primary-button.component.ts","../../../projects/material-addons/src/lib/button/outline-button/outline-button.component.ts","../../../projects/material-addons/src/lib/button/flat-button/link-button.component.ts","../../../projects/material-addons/src/lib/button/icon-button/icon-button.component.ts","../../../projects/material-addons/src/lib/button/danger-button/danger-button.component.ts","../../../projects/material-addons/src/lib/button/button.module.ts","../../../projects/material-addons/src/lib/readonly/readonly-form-field-wrapper/readonly-form-field-wrapper.component.ts","../../../projects/material-addons/src/lib/numeric-field/number-format.service.ts","../../../projects/material-addons/src/lib/readonly/readonly-form-field/readonly-form-field.component.ts","../../../projects/material-addons/src/lib/readonly/readonly-form-field.module.ts","../../../projects/material-addons/src/lib/toolbar/toolbar.service.ts","../../../projects/material-addons/src/lib/toolbar/toolbar.component.ts","../../../projects/material-addons/src/lib/toolbar/toolbar.module.ts","../../../projects/material-addons/src/lib/numeric-field/numeric-field.directive.ts","../../../projects/material-addons/src/lib/numeric-field/numeric-field.module.ts","../../../projects/material-addons/src/lib/card/card.component.ts","../../../projects/material-addons/src/lib/throttle-click/throttle-click.directive.ts","../../../projects/material-addons/src/lib/throttle-click/throttle-click.module.ts","../../../projects/material-addons/src/lib/card/card.module.ts","../../../projects/material-addons/src/lib/quick-list/quick-list.component.ts","../../../projects/material-addons/src/lib/quick-list/quick-list.module.ts","../../../projects/material-addons/src/lib/table/table.component.ts","../../../projects/material-addons/src/lib/table/table.module.ts","../../../projects/material-addons/src/lib/material-addons.module.ts"],"names":["this","icon","liftHigher","liftHigher2","Component","args","selector","template","Input","NgModule","declarations","MaterialActionButtonComponent","imports","CommonModule","RouterModule","MatButtonModule","MatIconModule","MatTooltipModule","exports","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__extends","__","constructor","prototype","create","__values","o","s","Symbol","iterator","m","i","call","length","next","value","done","TypeError","__read","n","r","e","ar","push","error","MadBasicButton","disableClick","stopPropagation","ngOnChanges","changes","disableButton","disabled","button","nativeElement","addEventListener","removeEventListener","defineProperty","HostBinding","PrimaryButtonComponent","_this","_super","title","ViewChild","read","ElementRef","static","OutlineButtonComponent","LinkButtonComponent","IconButtonComponent","DangerButtonComponent","ReadOnlyFormFieldWrapperComponent","changeDetector","elementRef","readonly","textAlign","formatNumber","decimalPlaces","roundValue","autofillDecimals","unit","unitPosition","errorMessage","multiline","rows","shrinkIfEmpty","toolTipForInputEnabled","ngOnInit","doRendering","ngAfterViewInit","setReadonlyFieldStyle","ngAfterViewChecked","setTooltipForOverflownField","_","getLabel","label","extractLabel","originalContent","detectChanges","correctWidth","labelElement","querySelector","innerHTML","formField","setAttribute","input","_b","_a","readOnlyContentWrapper","textOverFlowStyleValue","getTextOverFlowStyleValue","textOverflow","style","isEllipsisForTextOverflowEnabled","isTextOverflown","toolTipText","calculateToolTipText","offsetWidth","scrollWidth","ChangeDetectorRef","NumberFormatService","locale","allowedKeys","localeDecimalSeparator","toLocaleString","charAt","decimalSeparator","groupingSeparator","arguments","concat","__spread","NUMBERS","NEGATIVE","valueIsSet","format","options","toString","replace","RegExp","valueOrDefault","DEFAULT_AUTOFILL_DECIMALS","DEFAULT_DECIMAL_PLACES","finalFormatting","DEFAULT_FINAL_FORMATTING","result","strip","removeLeadingZeros","decimalIndex","indexOf","isNegative","startsWith","substring","actualDecimalIndex","addMissingLeadingZero","actualDecimalPlaces","j","DEFAULT_REMOVE_LEADING_ZEROS","indexDecimalSep","ignoredChars","value_1","value_1_1","char","includes","defaultValue","Injectable","providedIn","Inject","LOCALE_ID","ReadOnlyFormFieldComponent","renderer","numberFormatService","errorMatcher","isErrorState","injectUnitSymbol","unitSpan","inputEl","inputWrapper","parentNode","createElement","setStyle","insertBefore","children","appendChild","inputStyles","window","getComputedStyle","parentElement","position","marginTop","getPropertyValue","paddingTop","paddingBottom","textSpan","document","body","font","fontSize","height","width","top","whiteSpace","visibility","Math","min","clientWidth","ceil","left","textContent","Renderer2","MatFormFieldModule","MatInputModule","FormsModule","ToolbarService","router","translate","mainActions","toolbarActions","liftFabButtonHigher","routerSubscription","events","subscribe","routingEvent","NavigationEnd","currentUrl","urlAfterRedirects","clearToolbarActions","clearMainActions","backAction","dataTitle","url","ngOnDestroy","unsubscribe","getToolbarActions","addToolbarAction","action","get","i18nActionKey","toPromise","then","translated","actionName","toolbarTitle","setDataTitle","getDataTitle","getMainActions","getBackAction","addMainAction","mainAction","addBackAction","goBackRoute","isAbsoluteUrl","matIcon","href","routerLink","addSimpleBackButton","overrideIfPresent","history","back","Router","TranslateService","ToolbarComponent","breakpointObserver","titleService","toolbarService","isHandset$","observe","Breakpoints","Handset","pipe","map","matches","getTitle","hasPermission","showIf","of","isRouterLink","isAbsoluteLink","isAction","BreakpointObserver","Title","MatMenuModule","MatToolbarModule","MaterialActionButtonModule","ButtonModule","MatBadgeModule","OTHER_CONTROL_KEYS","Set","NumericFieldDirective","numericValueChanged","EventEmitter","displayValue","originalValue","NaN","onChange","onTouched","_numericValue","isNaN","roundOrTruncate","handleInputChanged","registerOnChange","fn","registerOnTouched","setDisabledState","writeValue","numericValue","parseInt","inputChangeListener","listen","event","formatInput","target","keyupListener","keyCode","has","keydownListener","key","metaKey","ctrlKey","altKey","indexNegativeSign","selectionStart","selectionEnd","cursorStart","substr","detachListener","setTimeout","updateInput","element","cursorPos","setCursor","textFormatted","max","parseFloat","emit","getValueForFormControl","display","method","pow","Directive","host","[class.text-right]","(change)","(input)","(blur)","providers","provide","NG_VALUE_ACCESSOR","useExisting","forwardRef","multi","Output","NumericFieldModule","forRoot","ngModule","CardComponent","cancelDisabled","cancelText","editText","expandable","expanded","saveDisabled","saveText","editMode","edit","cancel","save","onCancel","undefined","onEdit","onSave","toggleCollapse","animations","trigger","transition","opacity","overflow","animate","state","transform","ThrottleClickDirective","throttleTime","throttleClick","clicks","Subject","subscription","clickEvent","preventDefault","HostListener","MatCardModule","ThrottleClickModule","QuickListComponent","changeDetectorRef","allItems","addLabel","addPossible","blankItem","added","removed","addEventFunction","addItem","bind","minItems","interalAddItem","setFocusOnAdd","newItem","removeItem","item","isDeleteAllowed","splice","rowCountFocus","itemRows","els","last","firstFocusable","focus","isAddAllowed","maxItems","assign","id","random","ContentChild","TemplateRef","ViewChildren","TableComponent","ACTION_COLUMN_NAME","columns","filterLabel","filterPlaceholder","pageSizeOptions","defaultPageSize","rowActions","tableActions","tableAction","rowAction","sortEvent","isFilterEnabled","isPaginationEnabled","data","dataSource","MatTableDataSource","pageSize","Number","MAX_VALUE","paginator","_changePageSize","setFilterValue","columnNames","column","isRowClickable","unshift","defaultAction","sort","filterPredicate","filter","split","every","term","keys","find","onFilter","onRowEvent","row","isClickOnRowMenuIcon","outputRow","onSortingEvent","sortingParams","onTableAction","trim","toLowerCase","classList","contains","MatPaginator","MatSort","MatPaginatorModule","MatSortModule","MatTableModule","ReadOnlyFormFieldModule","ToolbarModule","CardModule","QuickListModule"],"mappings":"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","sourcesContent":["import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'mad-material-action-button',\n templateUrl: './material-action-button.component.html',\n styleUrls: ['./material-action-button.component.css'],\n})\nexport class MaterialActionButtonComponent {\n @Input()\n actionName: string;\n\n @Input()\n id: string;\n\n @Input()\n icon = 'add';\n\n @Input()\n routerLink: string;\n\n // Sets the lower padding higher providing some bottom space for a fixed paginator\n @Input()\n liftHigher = true;\n\n @Input()\n liftHigher2 = false;\n}\n","import { NgModule } from '@angular/core';\nimport { MaterialActionButtonComponent } from './material-action-button.component';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\n@NgModule({\n declarations: [MaterialActionButtonComponent],\n imports: [CommonModule, RouterModule, MatButtonModule, MatIconModule, MatTooltipModule],\n exports: [MaterialActionButtonComponent],\n})\nexport class MaterialActionButtonModule {}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) __createBinding(exports, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","import {ElementRef, HostBinding, SimpleChanges} from '@angular/core';\n\nexport class MadBasicButton {\n button: ElementRef;\n disabled: boolean;\n\n disableClick = (e: Event) => e.stopPropagation();\n\n ngOnChanges(changes: SimpleChanges) {\n this.disableButton();\n }\n\n disableButton(): void {\n if (this.disabled) {\n this.button.nativeElement.addEventListener('click', this.disableClick);\n } else {\n this.button.nativeElement.removeEventListener('click', this.disableClick);\n }\n }\n @HostBinding('style.pointer-events')\n get pointerEvent(): string {\n return this.disabled ? 'none' : 'auto';\n }\n\n @HostBinding('style.opacity')\n get opacity(): string {\n return this.disabled ? '0.35' : '1';\n }\n}\n","import {Component, ElementRef, Input, ViewChild} from '@angular/core';\nimport {MadBasicButton} from '../mad-basic-button';\n\n@Component({\n selector: 'mad-primary-button',\n templateUrl: './primary-button.component.html',\n styleUrls: ['./primary-button.component.css'],\n})\nexport class PrimaryButtonComponent extends MadBasicButton {\n @Input()\n type: string;\n\n @Input()\n disabled: boolean;\n\n @Input()\n title: string = '';\n\n @ViewChild('btn', { read: ElementRef, static: true }) button: ElementRef;\n\n constructor() {\n super();\n super.button = this.button;\n super.disabled = this.disabled;\n }\n}\n","import {Component, ElementRef, Input, ViewChild} from '@angular/core';\nimport {MadBasicButton} from '../mad-basic-button';\n\n@Component({\n selector: 'mad-outline-button',\n templateUrl: './outline-button.component.html',\n styleUrls: ['./outline-button.component.css'],\n})\nexport class OutlineButtonComponent extends MadBasicButton {\n @Input()\n type: string;\n\n @Input()\n disabled: boolean;\n\n @Input()\n title: string = '';\n\n @ViewChild('btn', { read: ElementRef, static: true }) button: ElementRef;\n\n constructor() {\n super();\n super.button = this.button;\n super.disabled = this.disabled;\n }\n}\n","import { Component, ElementRef, Input, ViewChild } from '@angular/core';\nimport {MadBasicButton} from '../mad-basic-button';\n@Component({\n selector: 'mad-link-button',\n templateUrl: './link-button.component.html',\n styleUrls: ['./link-button.component.css'],\n})\nexport class LinkButtonComponent extends MadBasicButton {\n @Input()\n type: string;\n\n @Input()\n disabled: boolean;\n\n @Input()\n title: string = '';\n\n @ViewChild('btn', { read: ElementRef, static: true }) button: ElementRef;\n\n constructor() {\n super();\n super.button = this.button;\n super.disabled = this.disabled;\n }\n}\n","import {Component, ElementRef, Input, ViewChild} from '@angular/core';\nimport {MadBasicButton} from '../mad-basic-button';\n\n@Component({\n selector: 'mad-icon-button',\n templateUrl: './icon-button.component.html',\n styleUrls: ['./icon-button.component.css'],\n})\nexport class IconButtonComponent extends MadBasicButton {\n @Input()\n type: string;\n\n @Input()\n disabled: boolean;\n\n @Input()\n title: string = '';\n\n @ViewChild('btn', { read: ElementRef, static: true }) button: ElementRef;\n\n constructor() {\n super();\n super.button = this.button;\n super.disabled = this.disabled;\n }\n}\n","import {Component, ElementRef, Input, ViewChild} from '@angular/core';\nimport {MadBasicButton} from '../mad-basic-button';\n\n@Component({\n selector: 'mad-danger-button',\n templateUrl: './danger-button.component.html',\n styleUrls: ['./danger-button.component.css'],\n})\nexport class DangerButtonComponent extends MadBasicButton {\n @Input()\n type: string;\n\n @Input()\n disabled: boolean;\n\n @Input()\n title: string = '';\n\n @ViewChild('btn', { read: ElementRef, static: true }) button: ElementRef;\n\n constructor() {\n super();\n super.button = this.button;\n super.disabled = this.disabled;\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {RouterModule} from '@angular/router';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {PrimaryButtonComponent} from './primary-button/primary-button.component';\nimport {OutlineButtonComponent} from './outline-button/outline-button.component';\nimport {LinkButtonComponent} from './flat-button/link-button.component';\nimport {IconButtonComponent} from './icon-button/icon-button.component';\nimport {DangerButtonComponent} from \"./danger-button/danger-button.component\";\n\n@NgModule({\n declarations: [PrimaryButtonComponent, OutlineButtonComponent, LinkButtonComponent, DangerButtonComponent, IconButtonComponent],\n imports: [CommonModule, RouterModule, MatButtonModule, MatIconModule, MatTooltipModule],\n exports: [PrimaryButtonComponent, OutlineButtonComponent, LinkButtonComponent, DangerButtonComponent, IconButtonComponent],\n})\nexport class ButtonModule {}\n","import {\n AfterViewChecked,\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\n\n/**\n * Wraps a mat-form-field to replace it by a readOnly representation if necessary\n *\n * @author Stefan Laesser\n */\n@Component({\n selector: 'mad-readonly-form-field-wrapper',\n templateUrl: './readonly-form-field-wrapper.component.html',\n styleUrls: ['./readonly-form-field-wrapper.component.css'],\n})\nexport class ReadOnlyFormFieldWrapperComponent implements OnInit, AfterViewInit, OnChanges, AfterViewChecked {\n /**\n * If set to \"false\", the contained mat-form-field is rendered in all it's glory.\n * If set to \"true\", a readonly representation of the value is shown using the mat-form-fields label.\n */\n @Input() readonly = true;\n\n /**\n * This input *MUST MATCH* the mat-form-field value to ensure correct data\n * binding and formatting of readOnly representation!\n */\n @Input('value') value: any;\n\n /**\n * Automatically taken from the contained <mat-label>\n */\n label: string;\n\n @ViewChild('contentWrapper', {static: false})\n originalContent: ElementRef;\n @ViewChild('readOnlyContentWrapper', {static: false})\n readOnlyContentWrapper: ElementRef;\n\n @Input('textAlign') textAlign: 'right' | 'left' = 'left';\n @Input('formatNumber') formatNumber = false;\n @Input('decimalPlaces') decimalPlaces = 2;\n @Input('roundDisplayValue') roundValue = false;\n @Input('autofillDecimals') autofillDecimals = false;\n @Input('unit') unit: string | null = null;\n @Input('unitPosition') unitPosition: 'right' | 'left' = 'left';\n @Input('errorMessage') errorMessage: string | null = null;\n @Input() id: string;\n\n /**\n * If set to \"false\", a readonly input will be rendered.\n * If set to \"true\", a readonly textarea will be rendered instead.\n */\n @Input() multiline = false;\n\n /**\n * Defines the rows for the readonly textarea.\n */\n @Input() rows = 3;\n\n/**\n * If shrinkIfEmpty is set to \"false\", nothing changes\n * If set to \"true\" and multiline is also \"true\", the textarea will\n * shrink to one row, if value is empty/null/undefined.\n * Otherwise, the defined rows-value will be used\n */\n @Input() shrinkIfEmpty: boolean = false;\n\n toolTipForInputEnabled = false;\n toolTipText: string;\n\n constructor(private changeDetector: ChangeDetectorRef, private elementRef: ElementRef) {\n }\n\n ngOnInit(): void {\n this.doRendering();\n }\n\n ngAfterViewInit(): void {\n this.setReadonlyFieldStyle();\n this.doRendering();\n }\n\n ngAfterViewChecked(): void {\n this.setReadonlyFieldStyle();\n this.setTooltipForOverflownField();\n }\n\n ngOnChanges(_: SimpleChanges): void {\n this.doRendering();\n }\n\n getLabel(): string {\n if (!this.label) {\n this.extractLabel();\n }\n return this.label;\n }\n\n private doRendering(): void {\n if (!this.originalContent) {\n return;\n }\n if (!this.readonly) {\n this.correctWidth();\n return;\n }\n\n this.changeDetector.detectChanges();\n }\n\n private extractLabel(): void {\n if (!this.originalContent || !this.originalContent.nativeElement) {\n return null;\n }\n const labelElement = this.originalContent.nativeElement.querySelector('mat-label');\n this.label = labelElement ? labelElement.innerHTML : 'mat-label is missing!';\n }\n\n private correctWidth(): void {\n const formField = this.originalContent.nativeElement.querySelector('mat-form-field');\n if (formField) {\n formField.setAttribute('style', 'width:100%');\n }\n }\n\n private setReadonlyFieldStyle(): void {\n const input = this.readOnlyContentWrapper?.nativeElement?.querySelector('input');\n\n if (input) {\n let textOverFlowStyleValue = this.getTextOverFlowStyleValue();\n if (textOverFlowStyleValue) {\n input.setAttribute('style', 'text-overflow: ' + textOverFlowStyleValue);\n }\n }\n }\n\n // Ellipsis is enabled by default as text-overflow behaviour\n private getTextOverFlowStyleValue(): string {\n // it works only if the style is added to the component directly. Should find a way for get it from the calculated\n // style. Than it would be possible to define the text-overflow in css for the whole application\n let textOverflow = this.elementRef?.nativeElement?.style.textOverflow;\n if (!textOverflow) {\n return 'ellipsis';\n }\n\n return textOverflow;\n }\n\n private setTooltipForOverflownField() {\n if (this.isEllipsisForTextOverflowEnabled()) {\n const input = this.readOnlyContentWrapper?.nativeElement?.querySelector('input');\n\n if (input) {\n this.toolTipForInputEnabled = this.isTextOverflown(input);\n if (this.toolTipForInputEnabled) {\n this.toolTipText = this.calculateToolTipText();\n }\n this.changeDetector.detectChanges();\n }\n }\n }\n\n private isEllipsisForTextOverflowEnabled(): boolean {\n return this.getTextOverFlowStyleValue() === 'ellipsis';\n }\n\n private isTextOverflown(input: any): boolean {\n if (input) {\n return (input.offsetWidth < input.scrollWidth);\n }\n return false;\n }\n\n private calculateToolTipText(): string {\n if (!this.unit) {\n return this.value;\n }\n\n return this.unitPosition === 'left' ? this.unit + ' ' + this.value : this.value + ' ' + this.unit;\n }\n}\n","import { Inject, LOCALE_ID, Injectable } from '@angular/core';\n\nexport declare interface FormatOptions {\n decimalPlaces?: number;\n\n finalFormatting?: boolean;\n\n autofillDecimals?: boolean;\n}\n\nexport declare interface StripOptions {\n decimalPlaces?: number;\n\n removeLeadingZeros?: boolean;\n}\n\n@Injectable({\n providedIn: 'any',\n})\nexport class NumberFormatService {\n static readonly NEGATIVE = '-';\n static readonly NUMBERS = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];\n static readonly DEFAULT_FINAL_FORMATTING = true;\n static readonly DEFAULT_DECIMAL_PLACES = 2;\n static readonly DEFAULT_AUTOFILL_DECIMALS = false;\n static readonly DEFAULT_REMOVE_LEADING_ZEROS = false;\n\n decimalSeparator: ',' | '.';\n groupingSeparator: ',' | '.';\n\n allowedKeys: string[] = [];\n\n constructor(@Inject(LOCALE_ID) locale: string) {\n // try to get the current formatting\n const localeDecimalSeparator = (1.1).toLocaleString(locale).charAt(1);\n this.decimalSeparator = localeDecimalSeparator === ',' ? ',' : '.';\n this.groupingSeparator = localeDecimalSeparator === ',' ? '.' : ',';\n\n this.allowedKeys = [...NumberFormatService.NUMBERS, NumberFormatService.NEGATIVE, this.decimalSeparator];\n }\n\n static valueIsSet(value: any): boolean {\n return typeof value !== 'undefined' && value !== null && (typeof value !== 'string' || value.length !== 0);\n }\n\n format(value: number, options?: Partial<FormatOptions>): string {\n return NumberFormatService.valueIsSet(value)\n ? this.formatNumber(value.toString().replace(new RegExp('[.]', 'g'), this.decimalSeparator), options)\n : '';\n }\n\n formatNumber(value: string, options?: Partial<FormatOptions>): string {\n const autofillDecimals = this.valueOrDefault(options?.autofillDecimals, NumberFormatService.DEFAULT_AUTOFILL_DECIMALS);\n const decimalPlaces = this.valueOrDefault(options?.decimalPlaces, NumberFormatService.DEFAULT_DECIMAL_PLACES);\n const finalFormatting = this.valueOrDefault(options?.finalFormatting, NumberFormatService.DEFAULT_FINAL_FORMATTING);\n\n let result = this.strip(value, { decimalPlaces, removeLeadingZeros: finalFormatting });\n\n /* add grouping separator */\n const decimalIndex = result.indexOf(this.decimalSeparator);\n const isNegative = result.startsWith(NumberFormatService.NEGATIVE);\n let i = decimalIndex > -1 ? decimalIndex : result.length;\n while (i > (isNegative ? 4 : 3)) {\n i -= 3;\n result = result.substring(0, i) + this.groupingSeparator + result.substring(i, result.length);\n }\n\n if (finalFormatting) {\n if (decimalPlaces > 0 && !!result) {\n /* autofill decimal places */\n let actualDecimalIndex = result.indexOf(this.decimalSeparator);\n if (autofillDecimals) {\n if (actualDecimalIndex === -1) {\n actualDecimalIndex = result.length;\n result += this.decimalSeparator;\n }\n\n result = this.addMissingLeadingZero(result, actualDecimalIndex);\n actualDecimalIndex = result.indexOf(this.decimalSeparator);\n\n const actualDecimalPlaces = result.length - actualDecimalIndex - 1;\n for (let j = 0; j < decimalPlaces - actualDecimalPlaces; j++) {\n result += '0';\n }\n } else {\n result = this.addMissingLeadingZero(result, actualDecimalIndex);\n }\n }\n }\n return result;\n }\n\n strip(value: string, options?: StripOptions): string {\n const decimalPlaces = this.valueOrDefault(options?.decimalPlaces, NumberFormatService.DEFAULT_DECIMAL_PLACES);\n const removeLeadingZeros = this.valueOrDefault(options?.removeLeadingZeros, NumberFormatService.DEFAULT_REMOVE_LEADING_ZEROS);\n\n let result = '';\n let indexDecimalSep = -1;\n let j = -1;\n let ignoredChars = 0;\n for (const char of value) {\n j++;\n if (this.allowedKeys.includes(char)) {\n if (char === this.decimalSeparator) {\n if (decimalPlaces === 0) {\n /* dismiss content after a decimal separator, when no places allowed */\n break;\n } else if (indexDecimalSep > -1) {\n /* ignore subsequent decimal separators */\n continue;\n }\n indexDecimalSep = j;\n }\n if (char === '0' && removeLeadingZeros) {\n /* remove leading zero only if it's not the only zero in the 'value' string */\n if ((result.length === 0 && j + 1 !== value.length) || result === NumberFormatService.NEGATIVE) {\n ignoredChars++;\n continue;\n }\n }\n if (char === NumberFormatService.NEGATIVE && j > 0) {\n /* dismiss content after a negative sign not on first position */\n break;\n }\n if (indexDecimalSep > -1 && result.length + ignoredChars > indexDecimalSep + decimalPlaces) {\n /* dismiss content after maximum decimal places reached */\n break;\n }\n result += char;\n } else if (char === this.groupingSeparator) {\n if (indexDecimalSep === -1) {\n ignoredChars++;\n }\n } else {\n /* dismiss content after a invalid character */\n break;\n }\n }\n return result;\n }\n\n private addMissingLeadingZero(result: string, actualDecimalIndex: number): string {\n const isNegative = result.startsWith(NumberFormatService.NEGATIVE);\n /* autoadd a zero before decimal separator, when it's missing */\n if (actualDecimalIndex === 0) {\n result = '0' + result;\n }\n /* autoadd a zero before decimal separator, when it's missing, for negative values */\n if (actualDecimalIndex === 1 && isNegative) {\n result = result[0] + '0' + result.substring(1, result.length);\n }\n return result;\n }\n\n private valueOrDefault(value: any, defaultValue: any): any {\n return NumberFormatService.valueIsSet(value) ? value : defaultValue;\n }\n}\n","import {\n AfterViewChecked,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnChanges,\n Renderer2,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport {ErrorStateMatcher} from '@angular/material/core';\nimport {NumberFormatService} from '../../numeric-field/number-format.service';\n\n/**\n * Read-only mat-form-field representation of provided value\n *\n * @author Stefan Laesser\n */\n\n@Component({\n selector: 'mad-readonly-form-field',\n templateUrl: './readonly-form-field.component.html',\n styleUrls: ['./readonly-form-field.component.css'],\n})\nexport class ReadOnlyFormFieldComponent implements OnChanges, AfterViewChecked {\n @Input('value') value: any;\n @Input('label') label: string;\n @Input('textAlign') textAlign: 'right' | 'left' = 'left';\n @Input('formatNumber') formatNumber = false;\n @Input('decimalPlaces') decimalPlaces = 2;\n @Input('roundDisplayValue') roundValue = false;\n @Input('autofillDecimals') autofillDecimals = false;\n @Input('unit') unit: string | null = null;\n @Input('unitPosition') unitPosition: 'right' | 'left' = 'left';\n @Input('errorMessage') errorMessage: string | null = null;\n @Input() multiline = false;\n @Input() rows = 3;\n @Input() id: string;\n /*\n * If shrinkIfEmpty is set to \"false\", nothing changes\n * If set to \"true\" and multiline is also \"true\", the textarea will\n * shrink to one row, if value is empty/null/undefined.\n * Otherwise, the defined rows-value will be used\n */\n @Input() shrinkIfEmpty: boolean = false;\n @ViewChild('inputEl') inputEl: ElementRef;\n errorMatcher: ErrorStateMatcher = {\n isErrorState: () => !!this.errorMessage,\n };\n\n private unitSpan: HTMLSpanElement;\n private textSpan: HTMLSpanElement;\n\n constructor(private changeDetector: ChangeDetectorRef, private renderer: Renderer2, private numberFormatService: NumberFormatService) {}\n\n ngOnChanges(_: SimpleChanges): void {\n if (!NumberFormatService.valueIsSet(this.value)) {\n this.value = '-';\n if (this.shrinkIfEmpty) {\n this.rows = 1;\n }\n } else if (this.formatNumber && typeof this.value === 'number') {\n this.value = this.numberFormatService.format(this.value, {\n decimalPlaces: this.decimalPlaces,\n finalFormatting: true,\n autofillDecimals: this.autofillDecimals,\n });\n }\n this.changeDetector.detectChanges();\n }\n\n // TODO direct copy from NumericFieldDirective\n ngAfterViewChecked(): void {\n this.injectUnitSymbol();\n }\n\n private injectUnitSymbol(): void {\n // Need to inject the unit symbol when the input element width is set to its actual value,\n // otherwise the icon wont show in the correct position\n if (!!this.unit && !this.unitSpan && this.inputEl.nativeElement.offsetWidth !== 0) {\n // Get the input wrapper and apply necessary styles\n const inputWrapper = this.inputEl.nativeElement.parentNode.parentNode;\n\n // Create the span with unit symbol and apply necessary styles\n this.unitSpan = this.renderer.createElement('span');\n\n if (this.unitPosition === 'left') {\n this.renderer.setAttribute(this.unitSpan, 'matPrefix', '');\n this.renderer.setStyle(this.unitSpan, 'padding-right', '5px');\n this.renderer.insertBefore(inputWrapper, this.unitSpan, inputWrapper.children[0]);\n } else {\n this.renderer.setAttribute(this.unitSpan, 'matSuffix', '');\n this.renderer.setStyle(this.unitSpan, 'padding-left', '5px');\n this.renderer.appendChild(inputWrapper, this.unitSpan);\n }\n }\n\n // special handling to move unit symbol along with display value\n if (!!this.unitSpan && this.textAlign === 'left' && this.unitPosition === 'right') {\n const inputStyles = window.getComputedStyle(this.inputEl.nativeElement.parentElement, null);\n this.unitSpan.style.position = 'absolute';\n this.unitSpan.style.marginTop = inputStyles.getPropertyValue('border-top-width');\n this.unitSpan.style.paddingTop = inputStyles.getPropertyValue('padding-top');\n this.unitSpan.style.paddingBottom = inputStyles.getPropertyValue('padding-bottom');\n\n if (!this.textSpan) {\n this.textSpan = document.createElement('span');\n document.body.appendChild(this.textSpan);\n this.textSpan.style.font = inputStyles.getPropertyValue('font');\n this.textSpan.style.fontSize = inputStyles.getPropertyValue('font-size');\n this.textSpan.style.height = 'auto';\n this.textSpan.style.width = 'auto';\n this.textSpan.style.position = 'absolute';\n this.textSpan.style.top = '0';\n this.textSpan.style.whiteSpace = 'no-wrap';\n this.textSpan.style.visibility = 'hidden';\n }\n this.textSpan.innerHTML = this.value;\n const width = Math.min(this.inputEl.nativeElement.clientWidth - this.unitSpan.clientWidth, Math.ceil(this.textSpan.clientWidth));\n this.unitSpan.style.left = width + 'px';\n }\n // always reset unit symbol\n if (!!this.unitSpan) {\n this.unitSpan.textContent = this.unit;\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { ReadOnlyFormFieldWrapperComponent } from './readonly-form-field-wrapper/readonly-form-field-wrapper.component';\nimport { ReadOnlyFormFieldComponent } from './readonly-form-field/readonly-form-field.component';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { FormsModule } from '@angular/forms';\nimport {MatTooltipModule} from '@angular/material/tooltip';\n\n@NgModule({\n declarations: [ReadOnlyFormFieldComponent, ReadOnlyFormFieldWrapperComponent],\n imports: [CommonModule, RouterModule, MatFormFieldModule, MatInputModule, FormsModule, MatTooltipModule],\n exports: [ReadOnlyFormFieldComponent, ReadOnlyFormFieldWrapperComponent],\n})\nexport class ReadOnlyFormFieldModule {}\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BackAction, MainAction, ToolbarAction } from './toolbar-action.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ToolbarService implements OnDestroy {\n backAction: BackAction;\n mainActions: MainAction[] = []; // shown on the left, next to title, as big buttons\n toolbarActions: ToolbarAction[] = []; // shown on the right as icons\n addNewButtonRoute: string;\n liftFabButtonHigher = false;\n dataTitle: string;\n routerSubscription: Subscription;\n private title: string;\n\n private currentUrl: string;\n\n constructor(private router: Router, private translate: TranslateService) {\n this.routerSubscription = this.router.events.subscribe(routingEvent => {\n if (routingEvent instanceof NavigationEnd) {\n if (this.currentUrl !== routingEvent.urlAfterRedirects) {\n this.clearToolbarActions();\n this.clearMainActions();\n delete this.backAction;\n delete this.dataTitle;\n }\n this.currentUrl = router.url;\n }\n });\n }\n\n ngOnDestroy(): void {\n if (this.routerSubscription) {\n this.routerSubscription.unsubscribe();\n }\n }\n\n getToolbarActions(): ToolbarAction[] {\n return this.toolbarActions;\n }\n\n addToolbarAction(action: ToolbarAction): void {\n this.translate\n .get(action.i18nActionKey)\n .toPromise()\n .then(translated => {\n action.actionName = translated;\n this.toolbarActions.push(action);\n });\n }\n\n set toolbarTitle(toolbarTitle: string) {\n this.title = toolbarTitle;\n }\n\n get toolbarTitle(): string {\n return this.title;\n }\n\n setDataTitle(dataTitle: string): void {\n this.dataTitle = dataTitle;\n }\n\n getDataTitle(): string {\n return this.dataTitle;\n }\n\n clearToolbarActions(): void {\n this.toolbarActions = [];\n }\n\n getMainActions(): MainAction[] {\n return this.mainActions;\n }\n\n getBackAction(): BackAction {\n return this.backAction;\n }\n\n addMainAction(mainAction: MainAction): void {\n this.translate\n .get(mainAction.i18nActionKey)\n .toPromise()\n .then(translated => {\n mainAction.actionName = translated;\n this.mainActions.push(mainAction);\n });\n }\n\n /**\n * Per default the goBackRoute is a routerLink. But if a href should be used (for absolute browser routing) then isAbsoluteUrl can be set to true.\n */\n addBackAction(goBackRoute: string, isAbsoluteUrl = false): void {\n this.backAction = {\n matIcon: 'keyboard_backspace',\n i18nActionKey: '',\n };\n if (!isAbsoluteUrl) {\n this.backAction.routerLink = goBackRoute;\n } else {\n this.backAction.href = goBackRoute;\n }\n }\n\n addSimpleBackButton(overrideIfPresent = false): void {\n if (this.getBackAction() && !overrideIfPresent) {\n return;\n }\n\n this.backAction = {\n matIcon: 'keyboard_backspace',\n i18nActionKey: '',\n action(): void {\n window.history.back();\n },\n };\n }\n\n clearMainActions(): void {\n this.mainActions = [];\n }\n}\n","import { Component } from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport { ToolbarService } from './toolbar.service';\nimport { Observable, of } from 'rxjs';\nimport { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\nimport { map } from 'rxjs/operators';\nimport { Action, BackAction, MainAction, ToolbarAction } from './toolbar-action.interface';\n\n@Component({\n selector: 'mad-toolbar',\n templateUrl: './toolbar.component.html',\n styleUrls: ['./toolbar.component.css'],\n})\nexport class ToolbarComponent {\n isHandset$: Observable<boolean> = this.breakpointObserver.observe([Breakpoints.Handset]).pipe(map(result => result.matches));\n\n constructor(private breakpointObserver: BreakpointObserver, private titleService: Title, private toolbarService: ToolbarService) {}\n\n getTitle(): string {\n const dataTitle = this.toolbarService.getDataTitle();\n const toolbarTitle = this.toolbarService.toolbarTitle;\n const title = !toolbarTitle || toolbarTitle.length <= 0 ? this.titleService.getTitle() : toolbarTitle;\n return !dataTitle || dataTitle.length <= 0 ? title : title + ': ' + dataTitle;\n }\n\n getToolbarActions(): ToolbarAction[] {\n return this.toolbarService.getToolbarActions();\n }\n\n getMainActions(): MainAction[] {\n return this.toolbarService.getMainActions();\n }\n\n hasPermission(action: Action): Observable<boolean> {\n if (!action || !action.showIf) {\n return of(true);\n }\n return action.showIf;\n }\n\n isRouterLink(): boolean {\n return this.toolbarService.getBackAction() && !!this.toolbarService.getBackAction().routerLink;\n }\n\n isAbsoluteLink(): boolean {\n return this.toolbarService.getBackAction() && !!this.toolbarService.getBackAction().href;\n }\n\n isAction(): boolean {\n return this.toolbarService.getBackAction() && !!this.toolbarService.getBackAction().action;\n }\n\n getBackAction(): BackAction {\n return this.toolbarService.getBackAction();\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {RouterModule} from '@angular/router';\nimport {ToolbarComponent} from './toolbar.component';\nimport {MaterialActionButtonModule} from '../material-action-button/material-action-button.module';\nimport {MatMenuModule} from '@angular/material/menu';\nimport {MatToolbarModule} from '@angular/material/toolbar';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {ButtonModule} from '../button/button.module';\nimport {MatBadgeModule} from \"@angular/material/badge\";\n\n@NgModule({\n declarations: [ToolbarComponent],\n imports: [\n CommonModule,\n RouterModule,\n MatMenuModule,\n MatButtonModule,\n MatToolbarModule,\n MatIconModule,\n MaterialActionButtonModule,\n MatTooltipModule,\n ButtonModule,\n MatBadgeModule,\n ],\n exports: [ToolbarComponent],\n})\nexport class ToolbarModule {}\n","/*\n * Copyright (c) 2018-2020 Porsche Informatik. All Rights Reserved.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport {\n AfterViewChecked,\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NumberFormatService } from './number-format.service';\n\nconst BACK_KEYCODE = 8;\nconst SPACE_KEYCODE = 32;\nconst DEL_KEYCODE = 46;\nconst CONTROL_KEYCODES_UPPER_BORDER = 46;\nconst OTHER_CONTROL_KEYS = new Set([224, 91, 93]);\n\n@Directive({\n selector: '[madNumericField]',\n host: {\n '[class.text-right]': 'textAlign === \"right\"',\n '(change)': 'onChange(getValueForFormControl())',\n '(input)': 'onChange(getValueForFormControl())',\n '(blur)': 'onTouched()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NumericFieldDirective), // eslint-disable-line\n multi: true,\n },\n ],\n})\nexport class NumericFieldDirective implements OnInit, OnDestroy, AfterViewChecked, ControlValueAccessor {\n @Input('textAlign') textAlign: 'right' | 'left' = 'right';\n @Input('decimalPlaces') decimalPlaces = 2;\n @Input('roundDisplayValue') roundValue = false;\n @Input('autofillDecimals') autofillDecimals = false;\n @Input('unit') unit: string | null = null;\n @Input('unitPosition') unitPosition: 'right' | 'left' = 'right';\n @Output('numericValueChange') numericValueChanged = new EventEmitter<number>();\n\n private displayValue = '';\n private originalValue = NaN;\n private _numericValue: number;\n private inputChangeListener: () => void;\n private keyupListener: () => void;\n private keydownListener: () => void;\n\n @Input('numericValue')\n set numericValue(value: number) {\n if (this._numericValue !== value && !(isNaN(this._numericValue) && (isNaN(value) || value === null))) {\n this.originalValue = value;\n this._numericValue = this.roundOrTruncate(value);\n this.handleInputChanged();\n }\n }\n\n private unitSpan: HTMLSpanElement;\n private textSpan: HTMLSpanElement;\n\n constructor(private renderer: Renderer2, private inputEl: ElementRef, private numberFormatService: NumberFormatService) {}\n\n /* Control Values Accessor Stuff below */\n // eslint-disable-next-line\n onChange: any = () => {};\n // eslint-disable-next-line\n onTouched: any = () => {};\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(): void {\n // Dont need to implement since its just a directive\n }\n\n writeValue(value: number): void {\n this.numericValue = value;\n }\n\n ngOnInit(): void {\n /* needs to be parsed as number explicitly as it comes as string from user input */\n this.decimalPlaces = parseInt(this.decimalPlaces.toString(), 10);\n\n this.inputChangeListener = this.renderer.listen(this.inputEl.nativeElement, 'blur', event => {\n this.formatInput(event.target, true);\n });\n\n this.keyupListener = this.renderer.listen(this.inputEl.nativeElement, 'keyup', event => {\n if (event.keyCode === BACK_KEYCODE || (event.keyCode >= CONTROL_KEYCODES_UPPER_BORDER && !OTHER_CONTROL_KEYS.has(event.keyCode))) {\n this.formatInput(event.target, false);\n }\n });\n\n this.keydownListener = this.renderer.listen(this.inputEl.nativeElement, 'keydown', event => {\n const value: string = event.target.value;\n if (\n this.numberFormatService.allowedKeys.includes(event.key) ||\n (event.keyCode <= CONTROL_KEYCODES_UPPER_BORDER && event.keyCode > 0 && event.keyCode !== SPACE_KEYCODE) ||\n event.metaKey ||\n event.ctrlKey ||\n event.altKey\n ) {\n /* allow negative sign only as first character and none exists outside of text selection */\n const indexNegativeSign = value.indexOf(NumberFormatService.NEGATIVE);\n if (\n event.key === NumberFormatService.NEGATIVE &&\n (event.target.selectionStart > 0 || indexNegativeSign > -1) &&\n (event.target.selectionStart === event.target.selectionEnd ||\n !(indexNegativeSign >= event.target.selectionStart && indexNegativeSign <= event.target.selectionEnd))\n ) {\n return false;\n }\n\n /* no duplicate decimal separators */\n const indexDecimalSep = value.indexOf(this.numberFormatService.decimalSeparator);\n if (\n event.key === this.numberFormatService.decimalSeparator &&\n (indexDecimalSep > -1 || this.decimalPlaces === 0) &&\n (event.target.selectionStart === event.target.selectionEnd ||\n !(indexDecimalSep >= event.target.selectionStart && indexDecimalSep <= event.target.selectionEnd))\n ) {\n return false;\n }\n\n /* prevent too many decimal places */\n if (\n NumberFormatService.NUMBERS.includes(event.key) &&\n indexDecimalSep > -1 &&\n indexDecimalSep < event.target.selectionStart &&\n event.target.selectionStart === event.target.selectionEnd &&\n value.length > indexDecimalSep + this.decimalPlaces\n ) {\n return false;\n }\n\n /* when deleting thousand separator, remove the digit before or after it */\n const cursorStart = event.target.selectionStart;\n\n if (cursorStart === event.target.selectionEnd) {\n if (event.keyCode === BACK_KEYCODE && value.substr(cursorStart - 1, 1) === this.numberFormatService.groupingSeparator) {\n event.target.value = value.substring(0, cursorStart - 2) + value.substring(cursorStart - 1, value.length);\n event.target.selectionStart = event.target.selectionEnd = cursorStart - 1;\n return false;\n } else if (event.keyCode === DEL_KEYCODE && value.substr(cursorStart, 1) === this.numberFormatService.groupingSeparator) {\n event.target.value = value.substring(0, cursorStart + 1) + value.substring(cursorStart + 2, value.length);\n event.target.selectionStart = event.target.selectionEnd = cursorStart + 1;\n return false;\n }\n }\n this.originalValue = NaN;\n } else {\n return false;\n }\n return true;\n });\n }\n\n ngOnDestroy(): void {\n this.detachListener();\n }\n\n ngAfterViewChecked(): void {\n this.injectUnitSymbol();\n }\n\n handleInputChanged(): void {\n // Call in set timeout to avoid Expression has changed after it has been checked error.\n // Sometimes the value changes because we cut off decimal places\n setTimeout(() => {\n this.updateInput(\n this.numberFormatService.format(this._numericValue, {\n decimalPlaces: this.decimalPlaces,\n finalFormatting: false,\n autofillDecimals: this.autofillDecimals,\n }),\n );\n }, 1);\n }\n\n formatInput(element: HTMLInputElement, finalFormatting: boolean): void {\n const cursorPos = element.selectionStart;\n const length = element.value.length;\n const setCursor = this.displayValue !== element.value;\n const textFormatted = this.numberFormatService.formatNumber(element.value, {\n decimalPlaces: this.decimalPlaces,\n finalFormatting,\n autofillDecimals: this.autofillDecimals,\n });\n\n // special handling to move unit symbol along with display value\n if (this.textAlign === 'left' && this.unitPosition === 'right') {\n const inputStyles = window.getComputedStyle(this.inputEl.nativeElement.parentElement, null);\n this.unitSpan.style.position = 'absolute';\n this.unitSpan.style.marginTop = inputStyles.getPropertyValue('border-top-width');\n this.unitSpan.style.paddingTop = inputStyles.getPropertyValue('padding-top');\n this.unitSpan.style.paddingBottom = inputStyles.getPropertyValue('padding-bottom');\n\n if (!this.textSpan) {\n this.textSpan = document.createElement('span');\n document.body.appendChild(this.textSpan);\n this.textSpan.style.font = inputStyles.getPropertyValue('font');\n this.textSpan.style.fontSize = inputStyles.getPropertyValue('font-size');\n this.textSpan.style.height = 'auto';\n this.textSpan.style.width = 'auto';\n this.textSpan.style.position = 'absolute';\n this.textSpan.style.top = '0';\n this.textSpan.style.whiteSpace = 'no-wrap';\n this.textSpan.style.visibility = 'hidden';\n }\n this.textSpan.innerHTML = textFormatted;\n const width = Math.min(this.inputEl.nativeElement.clientWidth - this.unitSpan.clientWidth, Math.ceil(this.textSpan.clientWidth));\n this.unitSpan.style.left = width + 'px';\n }\n\n this.updateInput(textFormatted);\n if (setCursor) {\n element.selectionStart = element.selectionEnd = Math.max(cursorPos + element.value.length - length, 0);\n }\n }\n\n updateInput(value: string): void {\n this.displayValue = value;\n this.inputEl.nativeElement.value = value;\n this._numericValue = parseFloat(\n this.numberFormatService.strip(value, { decimalPlaces: this.decimalPlaces }).replace(this.numberFormatService.decimalSeparator, '.'),\n );\n if (this._numericValue !== this.roundOrTruncate(this.originalValue)) {\n this.originalValue = this._numericValue;\n this.numericValueChanged.emit(this._numericValue);\n }\n }\n\n getValueForFormControl(): number | undefined {\n this.formatInput(this.inputEl.nativeElement, false);\n if (isNaN(this._numericValue)) {\n // Return undefined instead of NaN to support the default required validator.\n return undefined; // eslint-disable-line\n }\n return this._numericValue;\n }\n\n private injectUnitSymbol(): void {\n // Need to inject the unit symbol when the input element width is set to its actual value,\n // otherwise the icon wont show in the correct position\n if (!!this.unit && !this.unitSpan && this.inputEl.nativeElement.offsetWidth !== 0) {\n // Get the input wrapper and apply necessary styles\n const inputWrapper = this.inputEl.nativeElement.parentNode.parentNode;\n\n // Create the span with unit symbol and apply necessary styles\n this.unitSpan = this.renderer.createElement('span');\n\n if (this.unitPosition === 'left') {\n this.renderer.setAttribute(this.unitSpan, 'matPrefix', '');\n this.renderer.setStyle(this.unitSpan, 'padding-right', '5px');\n this.renderer.insertBefore(inputWrapper, this.unitSpan, inputWrapper.children[0]);\n } else {\n this.renderer.setAttribute(this.unitSpan, 'matSuffix', '');\n this.renderer.setStyle(this.unitSpan, 'padding-left', '5px');\n this.renderer.appendChild(inputWrapper, this.unitSpan);\n }\n }\n\n // do not display unit symbol if the unit should move along display value\n if (!!this.unitSpan && this.textAlign === 'left' && this.unitPosition === 'right') {\n if (NumberFormatService.valueIsSet(this.displayValue)) {\n this.unitSpan.style.display = 'unset';\n } else {\n this.unitSpan.style.display = 'none';\n }\n }\n // always reset unit symbol\n if (!!this.unitSpan) {\n this.unitSpan.textContent = this.unit;\n }\n }\n\n private detachListener(): void {\n if (this.inputChangeListener) {\n this.inputChangeListener();\n delete this.inputChangeListener;\n }\n if (this.keydownListener) {\n this.keydownListener();\n delete this.keydownListener;\n }\n if (this.keyupListener) {\n this.keyupListener();\n delete this.keyupListener;\n }\n }\n\n private roundOrTruncate(value: number): number {\n const method = this.roundValue ? 'round' : value < 0 ? 'ceil' : 'floor';\n return Math[method](value * Math.pow(10, this.decimalPlaces)) / Math.pow(10, this.decimalPlaces);\n }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { NumericFieldDirective } from './numeric-field.directive';\nimport { NumberFormatService } from './number-format.service';\n\n@NgModule({\n providers: [NumberFormatService],\n declarations: [NumericFieldDirective],\n exports: [NumericFieldDirective],\n})\nexport class NumericFieldModule {\n static forRoot(): ModuleWithProviders<NumericFieldModule> {\n return {\n ngModule: NumericFieldModule,\n providers: [NumberFormatService],\n };\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { animate, state, style, transition, trigger } from '@angular/animations';\n\n@Component({\n selector: 'mad-card',\n templateUrl: './card.component.html',\n animations: [\n trigger('collapseExpandAnimation', [\n transition(':enter', [style({ opacity: 0, height: 0, overflow: 'hidden' }), animate('100ms', style({ opacity: 1, height: '*' }))]),\n transition(':leave', [style({ opacity: 1, height: '*', overflow: 'hidden' }), animate('100ms', style({ opacity: 0, height: 0 }))]),\n ]),\n trigger('rotateIcon', [\n state('true', style({ transform: 'rotate(0)' })),\n state('false', style({ transform: 'rotate(180deg)' })),\n transition('true => false', animate('100ms ease-out')),\n transition('false => true', animate('100ms ease-in')),\n ]),\n ],\n styleUrls: ['./card.component.css'],\n})\nexport class CardComponent {\n @Input() cancelDisabled = false;\n @Input() cancelText = 'NOT SET';\n @Input() readonly = true;\n @Input() editText = 'NOT SET';\n @Input() expandable = true;\n @Input() expanded = true;\n @Input() saveDisabled = false;\n @Input() saveText = 'NOT SET';\n @Input() title: string;\n @Input() editMode = false;\n @Output() edit = new EventEmitter();\n @Output() cancel = new EventEmitter();\n @Output() save = new EventEmitter();\n\n onCancel(): void {\n this.cancel.emit(undefined);\n }\n\n onEdit(): void {\n this.edit.emit(undefined);\n this.expanded = true;\n }\n\n onSave(): void {\n this.save.emit(undefined);\n }\n\n toggleCollapse(): void {\n this.expanded = !this.expanded;\n }\n}\n","import { Directive, EventEmitter, HostListener, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\nimport { throttleTime } from 'rxjs/operators';\n\n@Directive({\n selector: '[madThrottleClick]',\n})\nexport class ThrottleClickDirective implements OnInit, OnDestroy {\n @Input() throttleTime = 300;\n @Output() throttleClick = new EventEmitter();\n private clicks = new Subject();\n private subscription: Subscription;\n constructor() {}\n\n ngOnInit() {\n this.subscription = this.clicks.pipe(throttleTime(this.throttleTime)).subscribe(e => this.throttleClick.emit(e));\n }\n\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n\n @HostListener('click', ['$event'])\n clickEvent(event: any) {\n event.preventDefault();\n event.stopPropagation();\n this.clicks.next(event);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ThrottleClickDirective } from './throttle-click.directive';\n\n@NgModule({\n declarations: [ThrottleClickDirective],\n imports: [CommonModule],\n exports: [ThrottleClickDirective],\n})\nexport class ThrottleClickModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatCardModule} from '@angular/material/card';\nimport {MatIconModule} from '@angular/material/icon';\nimport {CardComponent} from './card.component';\nimport {ButtonModule} from \"../button/button.module\";\nimport {MatButtonModule} from \"@angular/material/button\";\nimport {ThrottleClickModule} from '../throttle-click/throttle-click.module';\n\n@NgModule({\n declarations: [CardComponent],\n imports: [CommonModule, MatCardModule, MatIconModule, ButtonModule, MatButtonModule, ThrottleClickModule],\n exports: [CardComponent],\n})\nexport class CardModule {\n}\n","// Based on https://github.com/porscheinformatik/clarity-addons/blob/master/src/clr-addons/generic-quick-list/generic-quick-list.ts\n\nimport {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n QueryList,\n TemplateRef,\n ViewChildren,\n} from '@angular/core';\n\nexport interface QuickListItem {\n id: string;\n}\n\n@Component({\n selector: 'mad-quick-list',\n templateUrl: './quick-list.component.html',\n styleUrls: [],\n})\nexport class QuickListComponent<T extends QuickListItem> implements OnInit, AfterViewInit {\n @Input() allItems = [] as T[];\n @Input() addLabel = 'NOT SET';\n @Input() addPossible = true;\n @Input() blankItem = {} as any;\n @Input() readonly: string;\n @Input() maxItems: number;\n @Input() minItems: number;\n\n @Output() added = new EventEmitter<T>();\n @Output() removed = new EventEmitter<T>();\n @ContentChild(TemplateRef) itemTemplate: TemplateRef<any>;\n @ViewChildren('row') itemRows: QueryList<ElementRef>;\n\n rowCountFocus: number;\n addEventFunction: Function;\n\n constructor(private changeDetectorRef: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n this.addEventFunction = this.addItem.bind(this);\n if (typeof this.minItems !== 'undefined') {\n for (let n = this.allItems.length; n < this.minItems; n++) {\n this.interalAddItem();\n }\n }\n }\n\n ngAfterViewInit(): void {\n setTimeout(() => this.setFocusOnAdd(), 1);\n }\n\n addItem(): void {\n const newItem = this.interalAddItem();\n if (!!newItem) {\n this.added.emit(newItem);\n }\n }\n\n removeItem(item: T): void {\n if (this.isDeleteAllowed()) {\n this.allItems.splice(this.allItems.indexOf(item), 1);\n this.removed.emit(item);\n }\n }\n\n setFocusOnAdd(): void {\n this.rowCountFocus = this.itemRows.length;\n this.itemRows.changes.subscribe((els: QueryList<ElementRef>) => {\n if (els.length > this.rowCountFocus && !!els.last) {\n const firstFocusable = els.last.nativeElement.querySelector(\"button, a, input, select, textarea, [tabindex]:not([tabindex='-1'])\");\n if (firstFocusable) {\n firstFocusable.focus();\n }\n }\n this.rowCountFocus = els.length;\n });\n }\n\n isAddAllowed(): boolean {\n return typeof this.maxItems === 'undefined' || this.allItems.length < this.maxItems;\n }\n\n isDeleteAllowed(): boolean {\n return typeof this.minItems === 'undefined' || this.allItems.length > this.minItems;\n }\n\n private interalAddItem(): T {\n if (this.isAddAllowed()) {\n const newItem = { ...this.blankItem };\n // creates ids in the form of \"n5kdz1pljl8\"\n newItem.id = Math.random()\n .toString(36)\n .substring(2);\n this.allItems.push(newItem);\n this.changeDetectorRef.detectChanges();\n return newItem;\n }\n return null;\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { QuickListComponent } from './quick-list.component';\nimport {ButtonModule} from \"../button/button.module\";\n\n@NgModule({\n declarations: [QuickListComponent],\n imports: [CommonModule, MatButtonModule, MatIconModule, ButtonModule],\n exports: [QuickListComponent],\n})\nexport class QuickListModule {}\n","import { AfterViewInit, Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatSort, Sort } from '@angular/material/sort';\nimport { ColumnHeader } from './column-header';\nimport { TableAction } from './table-action';\n\n@Component({\n selector: 'mad-table',\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.scss'],\n})\nexport class TableComponent implements OnInit, AfterViewInit {\n readonly ACTION_COLUMN_NAME = '__action__';\n\n @Input() columns: ColumnHeader[] = [];\n @Input() filterLabel = 'NOT SET';\n @Input() filterPlaceholder = 'NOT SET';\n @Input() noDataText: string;\n @Input() pageSizeOptions = [5, 10, 15];\n @Input() defaultPageSize = this.pageSizeOptions?.[0] || 10;\n @Input() rowActions: TableAction[] = [];\n @Input() tableActions: TableAction[] = [];\n\n @Input() set displayedData(data: any[]) {\n if (!this.dataSource) {\n this.dataSource = new MatTableDataSource<any>(data);\n } else {\n this.dataSource.data = data;\n }\n }\n\n @Input() set paginationEnabled(isPaginationEnabled: boolean) {\n this.isPaginationEnabled = isPaginationEnabled;\n // eslint-disable-next-line\n const pageSize = this.isPaginationEnabled ? this.defaultPageSize : Number.MAX_VALUE;\n if (this.dataSource.paginator) {\n this.dataSource.paginator._changePageSize(pageSize);\n }\n }\n\n @Input()\n set filterEnabled(isFilterEnabled: boolean) {\n this.isFilterEnabled = isFilterEnabled;\n this.setFilterValue(undefined);\n }\n\n @Output() tableAction = new EventEmitter<TableAction>();\n @Output() rowAction = new EventEmitter<TableAction>();\n @Output() sortEvent = new EventEmitter<Sort>();\n\n @ViewChild(MatPaginator, { static: false }) paginator: MatPaginator;\n @ViewChild(MatSort, { static: true }) sort: MatSort;\n\n dataSource: MatTableDataSource<any[]>;\n columnNames: string[];\n isRowClickable: boolean;\n defaultAction: TableAction;\n isFilterEnabled = false;\n isPaginationEnabled = false;\n\n ngOnInit(): void {\n this.columnNames = this.columns.map(column => column.label);\n this.isRowClickable = this.rowActions.length > 0;\n if (this.isRowClickable) {\n this.columnNames.unshift(this.ACTION_COLUMN_NAME);\n this.defaultAction = this.rowActions[0];\n }\n }\n\n ngAfterViewInit(): void {\n this.dataSource.paginator = this.paginator;\n this.dataSource.sort = this.sort;\n // set custom filter predicate to enable search for multiple search strings:\n // e.g. \"one two three\"\n this.dataSource.filterPredicate = (data: any, filter: string) => \n !filter || filter.split(/\\s+/).every(term => !!Object.keys(data).find(key => data[key].includes(term)));\n }\n\n onFilter(value: string): void {\n this.setFilterValue(value);\n }\n\n onRowEvent(event: MouseEvent, row: any, action = this.defaultAction): void {\n if (!!action && !this.isClickOnRowMenuIcon(event)) {\n this.rowAction.emit({ ...action, outputRow: row });\n }\n }\n\n onSortingEvent(sortingParams: Sort): void {\n this.sortEvent.emit(sortingParams);\n }\n\n onTableAction(tableAction: TableAction): void {\n if (!!tableAction) {\n this.tableAction.emit(tableAction);\n }\n }\n\n private setFilterValue(value: string): void {\n this.dataSource.filter = value?.trim().toLowerCase();\n }\n\n private isClickOnRowMenuIcon(event: MouseEvent): boolean {\n return (event?.target as HTMLElement)?.classList.contains('mat-icon');\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatSortModule } from '@angular/material/sort';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { TableComponent } from './table.component';\nimport {ButtonModule} from \"../button/button.module\";\n\n@NgModule({\n declarations: [TableComponent],\n imports: [\n CommonModule,\n MatButtonModule,\n MatIconModule,\n MatFormFieldModule,\n MatInputModule,\n MatMenuModule,\n MatPaginatorModule,\n MatSortModule,\n MatTableModule,\n ButtonModule\n ],\n exports: [TableComponent],\n})\nexport class TableModule {}\n","import {NgModule} from '@angular/core';\nimport {ToolbarModule} from './toolbar/toolbar.module';\nimport {ReadOnlyFormFieldModule} from './readonly/readonly-form-field.module';\nimport {MaterialActionButtonModule} from './material-action-button/material-action-button.module';\nimport {NumericFieldModule} from './numeric-field/numeric-field.module';\nimport {CardModule} from './card/card.module';\nimport {QuickListModule} from './quick-list/quick-list.module';\nimport {ButtonModule} from './button/button.module';\nimport {ThrottleClickModule} from './throttle-click/throttle-click.module';\n\n@NgModule({\n exports: [\n ReadOnlyFormFieldModule,\n ButtonModule,\n ToolbarModule,\n MaterialActionButtonModule,\n NumericFieldModule,\n CardModule,\n QuickListModule,\n ThrottleClickModule]\n})\nexport class MaterialAddonsModule {\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../projects/material-addons/src/lib/material-action-button/material-action-button.component.ts","../../../projects/material-addons/src/lib/material-action-button/material-action-button.module.ts","../../../node_modules/tslib/tslib.es6.js","../../../projects/material-addons/src/lib/button/mad-basic-button.ts","../../../projects/material-addons/src/lib/button/primary-button/primary-button.component.ts","../../../projects/material-addons/src/lib/button/outline-button/outline-button.component.ts","../../../projects/material-addons/src/lib/button/flat-button/link-button.component.ts","../../../projects/material-addons/src/lib/button/icon-button/icon-button.component.ts","../../../projects/material-addons/src/lib/button/danger-button/danger-button.component.ts","../../../projects/material-addons/src/lib/button/button.module.ts","../../../projects/material-addons/src/lib/readonly/readonly-form-field-wrapper/readonly-form-field-wrapper.component.ts","../../../projects/material-addons/src/lib/numeric-field/number-format.service.ts","../../../projects/material-addons/src/lib/readonly/readonly-form-field/readonly-form-field.component.ts","../../../projects/material-addons/src/lib/readonly/readonly-form-field.module.ts","../../../projects/material-addons/src/lib/toolbar/toolbar.service.ts","../../../projects/material-addons/src/lib/toolbar/toolbar.component.ts","../../../projects/material-addons/src/lib/toolbar/toolbar.module.ts","../../../projects/material-addons/src/lib/numeric-field/numeric-field.directive.ts","../../../projects/material-addons/src/lib/numeric-field/numeric-field.module.ts","../../../projects/material-addons/src/lib/card/card.component.ts","../../../projects/material-addons/src/lib/throttle-click/throttle-click.directive.ts","../../../projects/material-addons/src/lib/throttle-click/throttle-click.module.ts","../../../projects/material-addons/src/lib/card/card.module.ts","../../../projects/material-addons/src/lib/quick-list/base-quick-list.component.ts","../../../projects/material-addons/src/lib/quick-list/quick-list.component.ts","../../../projects/material-addons/src/lib/quick-list/quick-list-compact/quick-list-compact.component.ts","../../../projects/material-addons/src/lib/quick-list/quick-list.module.ts","../../../projects/material-addons/src/lib/table/table.component.ts","../../../projects/material-addons/src/lib/table/table.module.ts","../../../projects/material-addons/src/lib/stepper/step-header/step-header.component.ts","../../../projects/material-addons/src/lib/stepper/mad-stepper-animation.ts","../../../projects/material-addons/src/lib/stepper/stepper.component.ts","../../../projects/material-addons/src/lib/stepper/stepper.module.ts","../../../projects/material-addons/src/lib/material-addons.module.ts"],"names":["this","icon","liftHigher","liftHigher2","Component","args","selector","template","Input","NgModule","declarations","MaterialActionButtonComponent","imports","CommonModule","RouterModule","MatButtonModule","MatIconModule","MatTooltipModule","exports","extendStatics","d","b","Object","setPrototypeOf","__proto__","Array","p","prototype","hasOwnProperty","call","__extends","TypeError","String","__","constructor","create","__values","o","s","Symbol","iterator","m","i","length","next","value","done","__read","n","r","e","ar","push","error","MadBasicButton","disableClick","stopPropagation","ngOnChanges","changes","disableButton","disabled","button","nativeElement","addEventListener","removeEventListener","defineProperty","HostBinding","PrimaryButtonComponent","_this","_super","title","ViewChild","read","ElementRef","static","OutlineButtonComponent","LinkButtonComponent","IconButtonComponent","DangerButtonComponent","ReadOnlyFormFieldWrapperComponent","changeDetector","elementRef","readonly","textAlign","formatNumber","decimalPlaces","roundValue","autofillDecimals","unit","unitPosition","errorMessage","multiline","rows","shrinkIfEmpty","toolTipForInputEnabled","ngOnInit","doRendering","ngAfterViewInit","setReadonlyFieldStyle","ngAfterViewChecked","setTooltipForOverflownField","_","getLabel","label","extractLabel","originalContent","detectChanges","correctWidth","labelElement","querySelector","innerHTML","formField","setAttribute","input","_b","_a","readOnlyContentWrapper","textOverFlowStyleValue","getTextOverFlowStyleValue","textOverflow","style","isEllipsisForTextOverflowEnabled","isTextOverflown","toolTipText","calculateToolTipText","offsetWidth","scrollWidth","ChangeDetectorRef","NumberFormatService","locale","allowedKeys","localeDecimalSeparator","toLocaleString","charAt","decimalSeparator","groupingSeparator","arguments","concat","__spread","NUMBERS","NEGATIVE","valueIsSet","format","options","toString","replace","RegExp","valueOrDefault","DEFAULT_AUTOFILL_DECIMALS","DEFAULT_DECIMAL_PLACES","finalFormatting","DEFAULT_FINAL_FORMATTING","result","strip","removeLeadingZeros","decimalIndex","indexOf","isNegative","startsWith","substring","actualDecimalIndex","addMissingLeadingZero","actualDecimalPlaces","j","DEFAULT_REMOVE_LEADING_ZEROS","indexDecimalSep","ignoredChars","value_1","value_1_1","char","includes","defaultValue","Injectable","providedIn","Inject","LOCALE_ID","ReadOnlyFormFieldComponent","renderer","numberFormatService","errorMatcher","isErrorState","injectUnitSymbol","unitSpan","inputEl","inputWrapper","parentNode","createElement","setStyle","insertBefore","children","appendChild","inputStyles","window","getComputedStyle","parentElement","position","marginTop","getPropertyValue","paddingTop","paddingBottom","textSpan","document","body","font","fontSize","height","width","top","whiteSpace","visibility","Math","min","clientWidth","ceil","left","textContent","Renderer2","MatFormFieldModule","MatInputModule","FormsModule","ToolbarService","router","translate","mainActions","toolbarActions","liftFabButtonHigher","routerSubscription","events","subscribe","routingEvent","NavigationEnd","currentUrl","urlAfterRedirects","clearToolbarActions","clearMainActions","backAction","dataTitle","url","ngOnDestroy","unsubscribe","getToolbarActions","addToolbarAction","action","get","i18nActionKey","toPromise","then","translated","actionName","toolbarTitle","setDataTitle","getDataTitle","getMainActions","getBackAction","addMainAction","mainAction","addBackAction","goBackRoute","isAbsoluteUrl","matIcon","href","routerLink","addSimpleBackButton","overrideIfPresent","history","back","Router","TranslateService","ToolbarComponent","breakpointObserver","titleService","toolbarService","isHandset$","observe","Breakpoints","Handset","pipe","map","matches","getTitle","hasPermission","showIf","of","isRouterLink","isAbsoluteLink","isAction","BreakpointObserver","Title","MatMenuModule","MatToolbarModule","MaterialActionButtonModule","ButtonModule","MatBadgeModule","OTHER_CONTROL_KEYS","Set","NumericFieldDirective","numericValueChanged","EventEmitter","displayValue","originalValue","NaN","onChange","onTouched","_numericValue","isNaN","roundOrTruncate","handleInputChanged","registerOnChange","fn","registerOnTouched","setDisabledState","writeValue","numericValue","parseInt","inputChangeListener","listen","event","formatInput","target","keyupListener","keyCode","has","keydownListener","key","metaKey","ctrlKey","altKey","indexNegativeSign","selectionStart","selectionEnd","cursorStart","substr","detachListener","setTimeout","updateInput","element","cursorPos","setCursor","textFormatted","max","parseFloat","emit","getValueForFormControl","display","method","pow","Directive","host","[class.text-right]","(change)","(input)","(blur)","providers","provide","NG_VALUE_ACCESSOR","useExisting","forwardRef","multi","Output","NumericFieldModule","forRoot","ngModule","CardComponent","cancelDisabled","cancelText","editText","expandable","expanded","saveDisabled","saveText","editMode","additionalActionText","edit","cancel","save","additionalAction","onCancel","undefined","onEdit","onSave","toggleCollapse","additionalActionClicked","animations","trigger","transition","opacity","overflow","animate","state","transform","ThrottleClickDirective","throttleTime","throttleClick","clicks","Subject","subscription","clickEvent","preventDefault","HostListener","MatCardModule","ThrottleClickModule","BaseQuickListComponent","changeDetectorRef","allItems","addLabel","addPossible","blankItem","added","removed","addEventFunction","addItem","bind","minItems","interalAddItem","setFocusOnAdd","newItem","removeItem","item","isDeleteAllowed","splice","rowCountFocus","itemRows","els","last","firstFocusable","focus","isAddAllowed","maxItems","assign","id","random","ContentChild","TemplateRef","ViewChildren","QuickListComponent","QuickListCompactComponent","TableComponent","ACTION_COLUMN_NAME","columns","filterLabel","filterPlaceholder","pageSizeOptions","defaultPageSize","rowActions","tableActions","tableAction","rowAction","sortEvent","isFilterEnabled","isPaginationEnabled","data","dataSource","MatTableDataSource","pageSize","Number","MAX_VALUE","paginator","_changePageSize","setFilterValue","columnNames","column","isRowClickable","unshift","defaultAction","sort","filterPredicate","filter","split","every","term","keys","find","onFilter","onRowEvent","row","isClickOnRowMenuIcon","outputRow","onSortingEvent","sortingParams","onTableAction","trim","toLowerCase","classList","contains","MatPaginator","MatSort","MatPaginatorModule","MatSortModule","MatTableModule","StepHeaderComponent","_focusMonitor","_elementRef","monitor","stopMonitoring","origin","focusVia","getCssForState","STEP_STATE","NUMBER","completed","hasError","getIcon","CdkStepHeader","inputs","class","role","encapsulation","ViewEncapsulation","None","changeDetection","ChangeDetectionStrategy","OnPush","FocusMonitor","madStepperAnimations","verticalStepTransition","StepComponent","stepper","_viewContainerRef","onNext","onDone","onHeaderClick","stepClosed","_isSelected","Subscription","EMPTY","ngAfterContentInit","_stepper","steps","switchMap","selectionChange","selectedStep","tap","startWith","selected","stepValidation","observers","selectAndMarkAsTouched","index","stepControl","markAllAsTouched","select","completeLast","resetValidations","DONE","valid","ERROR","CdkStep","StepperComponent","decorators","type","ViewContainerRef","dir","_document","animationDone","QueryList","_animationDone","_orientation","linear","takeUntil","_destroyed","_stateChanged","distinctUntilChanged","x","y","fromState","toState","_getAnimationDirection","selectedIndex","_steps","_stepIsNavigable","step","CdkStepper","[class.stepper-vertical]","[attr.aria-orientation]","Directionality","Optional","DOCUMENT","ContentChildren","descendants","CdkStepperModule","FlexModule","ReadOnlyFormFieldModule","ToolbarModule","CardModule","QuickListModule"],"mappings":"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","sourcesContent":["import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'mad-material-action-button',\n templateUrl: './material-action-button.component.html',\n styleUrls: ['./material-action-button.component.css'],\n})\nexport class MaterialActionButtonComponent {\n @Input()\n actionName: string;\n\n @Input()\n id: string;\n\n @Input()\n icon = 'add';\n\n @Input()\n routerLink: string;\n\n // Sets the lower padding higher providing some bottom space for a fixed paginator\n @Input()\n liftHigher = true;\n\n @Input()\n liftHigher2 = false;\n}\n","import { NgModule } from '@angular/core';\nimport { MaterialActionButtonComponent } from './material-action-button.component';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\n@NgModule({\n declarations: [MaterialActionButtonComponent],\n imports: [CommonModule, RouterModule, MatButtonModule, MatIconModule, MatTooltipModule],\n exports: [MaterialActionButtonComponent],\n})\nexport class MaterialActionButtonModule {}\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","import {ElementRef, HostBinding, SimpleChanges} from '@angular/core';\n\nexport class MadBasicButton {\n button: ElementRef;\n disabled: boolean;\n\n disableClick = (e: Event) => e.stopPropagation();\n\n ngOnChanges(changes: SimpleChanges) {\n this.disableButton();\n }\n\n disableButton(): void {\n if (this.disabled) {\n this.button.nativeElement.addEventListener('click', this.disableClick);\n } else {\n this.button.nativeElement.removeEventListener('click', this.disableClick);\n }\n }\n @HostBinding('style.pointer-events')\n get pointerEvent(): string {\n return this.disabled ? 'none' : 'auto';\n }\n\n @HostBinding('style.opacity')\n get opacity(): string {\n return this.disabled ? '0.35' : '1';\n }\n}\n","import {Component, ElementRef, Input, ViewChild} from '@angular/core';\nimport {MadBasicButton} from '../mad-basic-button';\n\n@Component({\n selector: 'mad-primary-button',\n templateUrl: './primary-button.component.html',\n styleUrls: ['./primary-button.component.css'],\n})\nexport class PrimaryButtonComponent extends MadBasicButton {\n @Input()\n type: string;\n\n @Input()\n disabled: boolean;\n\n @Input()\n title: string = '';\n\n @ViewChild('btn', { read: ElementRef, static: true }) button: ElementRef;\n\n constructor() {\n super();\n super.button = this.button;\n super.disabled = this.disabled;\n }\n}\n","import {Component, ElementRef, Input, ViewChild} from '@angular/core';\nimport {MadBasicButton} from '../mad-basic-button';\n\n@Component({\n selector: 'mad-outline-button',\n templateUrl: './outline-button.component.html',\n styleUrls: ['./outline-button.component.css'],\n})\nexport class OutlineButtonComponent extends MadBasicButton {\n @Input()\n type: string;\n\n @Input()\n disabled: boolean;\n\n @Input()\n title: string = '';\n\n @ViewChild('btn', { read: ElementRef, static: true }) button: ElementRef;\n\n constructor() {\n super();\n super.button = this.button;\n super.disabled = this.disabled;\n }\n}\n","import { Component, ElementRef, Input, ViewChild } from '@angular/core';\nimport {MadBasicButton} from '../mad-basic-button';\n@Component({\n selector: 'mad-link-button',\n templateUrl: './link-button.component.html',\n styleUrls: ['./link-button.component.css'],\n})\nexport class LinkButtonComponent extends MadBasicButton {\n @Input()\n type: string;\n\n @Input()\n disabled: boolean;\n\n @Input()\n title: string = '';\n\n @ViewChild('btn', { read: ElementRef, static: true }) button: ElementRef;\n\n constructor() {\n super();\n super.button = this.button;\n super.disabled = this.disabled;\n }\n}\n","import {Component, ElementRef, Input, ViewChild} from '@angular/core';\nimport {MadBasicButton} from '../mad-basic-button';\n\n@Component({\n selector: 'mad-icon-button',\n templateUrl: './icon-button.component.html',\n styleUrls: ['./icon-button.component.css'],\n})\nexport class IconButtonComponent extends MadBasicButton {\n @Input()\n type: string;\n\n @Input()\n disabled: boolean;\n\n @Input()\n title: string = '';\n\n @ViewChild('btn', { read: ElementRef, static: true }) button: ElementRef;\n\n constructor() {\n super();\n super.button = this.button;\n super.disabled = this.disabled;\n }\n}\n","import {Component, ElementRef, Input, ViewChild} from '@angular/core';\nimport {MadBasicButton} from '../mad-basic-button';\n\n@Component({\n selector: 'mad-danger-button',\n templateUrl: './danger-button.component.html',\n styleUrls: ['./danger-button.component.css'],\n})\nexport class DangerButtonComponent extends MadBasicButton {\n @Input()\n type: string;\n\n @Input()\n disabled: boolean;\n\n @Input()\n title: string = '';\n\n @ViewChild('btn', { read: ElementRef, static: true }) button: ElementRef;\n\n constructor() {\n super();\n super.button = this.button;\n super.disabled = this.disabled;\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {RouterModule} from '@angular/router';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {PrimaryButtonComponent} from './primary-button/primary-button.component';\nimport {OutlineButtonComponent} from './outline-button/outline-button.component';\nimport {LinkButtonComponent} from './flat-button/link-button.component';\nimport {IconButtonComponent} from './icon-button/icon-button.component';\nimport {DangerButtonComponent} from \"./danger-button/danger-button.component\";\n\n@NgModule({\n declarations: [PrimaryButtonComponent, OutlineButtonComponent, LinkButtonComponent, DangerButtonComponent, IconButtonComponent],\n imports: [CommonModule, RouterModule, MatButtonModule, MatIconModule, MatTooltipModule],\n exports: [PrimaryButtonComponent, OutlineButtonComponent, LinkButtonComponent, DangerButtonComponent, IconButtonComponent],\n})\nexport class ButtonModule {}\n","import {\n AfterViewChecked,\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnChanges,\n OnInit,\n SimpleChanges,\n ViewChild\n} from '@angular/core';\n\n/**\n * Wraps a mat-form-field to replace it by a readOnly representation if necessary\n *\n * @author Stefan Laesser\n */\n@Component({\n selector: 'mad-readonly-form-field-wrapper',\n templateUrl: './readonly-form-field-wrapper.component.html',\n styleUrls: ['./readonly-form-field-wrapper.component.css'],\n})\nexport class ReadOnlyFormFieldWrapperComponent implements OnInit, AfterViewInit, OnChanges, AfterViewChecked {\n /**\n * If set to \"false\", the contained mat-form-field is rendered in all it's glory.\n * If set to \"true\", a readonly representation of the value is shown using the mat-form-fields label.\n */\n @Input() readonly = true;\n\n /**\n * This input *MUST MATCH* the mat-form-field value to ensure correct data\n * binding and formatting of readOnly representation!\n */\n @Input('value') value: any;\n\n /**\n * Automatically taken from the contained <mat-label>\n */\n label: string;\n\n @ViewChild('contentWrapper', {static: false})\n originalContent: ElementRef;\n @ViewChild('readOnlyContentWrapper', {static: false})\n readOnlyContentWrapper: ElementRef;\n\n @Input('textAlign') textAlign: 'right' | 'left' = 'left';\n @Input('formatNumber') formatNumber = false;\n @Input('decimalPlaces') decimalPlaces = 2;\n @Input('roundDisplayValue') roundValue = false;\n @Input('autofillDecimals') autofillDecimals = false;\n @Input('unit') unit: string | null = null;\n @Input('unitPosition') unitPosition: 'right' | 'left' = 'left';\n @Input('errorMessage') errorMessage: string | null = null;\n @Input() id: string;\n\n /**\n * If set to \"false\", a readonly input will be rendered.\n * If set to \"true\", a readonly textarea will be rendered instead.\n */\n @Input() multiline = false;\n\n /**\n * Defines the rows for the readonly textarea.\n */\n @Input() rows = 3;\n\n/**\n * If shrinkIfEmpty is set to \"false\", nothing changes\n * If set to \"true\" and multiline is also \"true\", the textarea will\n * shrink to one row, if value is empty/null/undefined.\n * Otherwise, the defined rows-value will be used\n */\n @Input() shrinkIfEmpty: boolean = false;\n\n toolTipForInputEnabled = false;\n toolTipText: string;\n\n constructor(private changeDetector: ChangeDetectorRef, private elementRef: ElementRef) {\n }\n\n ngOnInit(): void {\n this.doRendering();\n }\n\n ngAfterViewInit(): void {\n this.setReadonlyFieldStyle();\n this.doRendering();\n }\n\n ngAfterViewChecked(): void {\n this.setReadonlyFieldStyle();\n this.setTooltipForOverflownField();\n }\n\n ngOnChanges(_: SimpleChanges): void {\n this.doRendering();\n }\n\n getLabel(): string {\n if (!this.label) {\n this.extractLabel();\n }\n return this.label;\n }\n\n private doRendering(): void {\n if (!this.originalContent) {\n return;\n }\n if (!this.readonly) {\n this.correctWidth();\n return;\n }\n\n this.changeDetector.detectChanges();\n }\n\n private extractLabel(): void {\n if (!this.originalContent || !this.originalContent.nativeElement) {\n return null;\n }\n const labelElement = this.originalContent.nativeElement.querySelector('mat-label');\n this.label = labelElement ? labelElement.innerHTML : 'mat-label is missing!';\n }\n\n private correctWidth(): void {\n const formField = this.originalContent.nativeElement.querySelector('mat-form-field');\n if (formField) {\n formField.setAttribute('style', 'width:100%');\n }\n }\n\n private setReadonlyFieldStyle(): void {\n const input = this.readOnlyContentWrapper?.nativeElement?.querySelector('input');\n\n if (input) {\n let textOverFlowStyleValue = this.getTextOverFlowStyleValue();\n if (textOverFlowStyleValue) {\n input.setAttribute('style', 'text-overflow: ' + textOverFlowStyleValue);\n }\n }\n }\n\n // Ellipsis is enabled by default as text-overflow behaviour\n private getTextOverFlowStyleValue(): string {\n // it works only if the style is added to the component directly. Should find a way for get it from the calculated\n // style. Than it would be possible to define the text-overflow in css for the whole application\n let textOverflow = this.elementRef?.nativeElement?.style.textOverflow;\n if (!textOverflow) {\n return 'ellipsis';\n }\n\n return textOverflow;\n }\n\n private setTooltipForOverflownField() {\n if (this.isEllipsisForTextOverflowEnabled()) {\n const input = this.readOnlyContentWrapper?.nativeElement?.querySelector('input');\n\n if (input) {\n this.toolTipForInputEnabled = this.isTextOverflown(input);\n if (this.toolTipForInputEnabled) {\n this.toolTipText = this.calculateToolTipText();\n }\n this.changeDetector.detectChanges();\n }\n }\n }\n\n private isEllipsisForTextOverflowEnabled(): boolean {\n return this.getTextOverFlowStyleValue() === 'ellipsis';\n }\n\n private isTextOverflown(input: any): boolean {\n if (input) {\n return (input.offsetWidth < input.scrollWidth);\n }\n return false;\n }\n\n private calculateToolTipText(): string {\n if (!this.unit) {\n return this.value;\n }\n\n return this.unitPosition === 'left' ? this.unit + ' ' + this.value : this.value + ' ' + this.unit;\n }\n}\n","import { Inject, LOCALE_ID, Injectable } from '@angular/core';\n\nexport declare interface FormatOptions {\n decimalPlaces?: number;\n\n finalFormatting?: boolean;\n\n autofillDecimals?: boolean;\n}\n\nexport declare interface StripOptions {\n decimalPlaces?: number;\n\n removeLeadingZeros?: boolean;\n}\n\n@Injectable({\n providedIn: 'any',\n})\nexport class NumberFormatService {\n static readonly NEGATIVE = '-';\n static readonly NUMBERS = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];\n static readonly DEFAULT_FINAL_FORMATTING = true;\n static readonly DEFAULT_DECIMAL_PLACES = 2;\n static readonly DEFAULT_AUTOFILL_DECIMALS = false;\n static readonly DEFAULT_REMOVE_LEADING_ZEROS = false;\n\n decimalSeparator: ',' | '.';\n groupingSeparator: ',' | '.';\n\n allowedKeys: string[] = [];\n\n constructor(@Inject(LOCALE_ID) locale: string) {\n // try to get the current formatting\n const localeDecimalSeparator = (1.1).toLocaleString(locale).charAt(1);\n this.decimalSeparator = localeDecimalSeparator === ',' ? ',' : '.';\n this.groupingSeparator = localeDecimalSeparator === ',' ? '.' : ',';\n\n this.allowedKeys = [...NumberFormatService.NUMBERS, NumberFormatService.NEGATIVE, this.decimalSeparator];\n }\n\n static valueIsSet(value: any): boolean {\n return typeof value !== 'undefined' && value !== null && (typeof value !== 'string' || value.length !== 0);\n }\n\n format(value: number, options?: Partial<FormatOptions>): string {\n return NumberFormatService.valueIsSet(value)\n ? this.formatNumber(value.toString().replace(new RegExp('[.]', 'g'), this.decimalSeparator), options)\n : '';\n }\n\n formatNumber(value: string, options?: Partial<FormatOptions>): string {\n const autofillDecimals = this.valueOrDefault(options?.autofillDecimals, NumberFormatService.DEFAULT_AUTOFILL_DECIMALS);\n const decimalPlaces = this.valueOrDefault(options?.decimalPlaces, NumberFormatService.DEFAULT_DECIMAL_PLACES);\n const finalFormatting = this.valueOrDefault(options?.finalFormatting, NumberFormatService.DEFAULT_FINAL_FORMATTING);\n\n let result = this.strip(value, { decimalPlaces, removeLeadingZeros: finalFormatting });\n\n /* add grouping separator */\n const decimalIndex = result.indexOf(this.decimalSeparator);\n const isNegative = result.startsWith(NumberFormatService.NEGATIVE);\n let i = decimalIndex > -1 ? decimalIndex : result.length;\n while (i > (isNegative ? 4 : 3)) {\n i -= 3;\n result = result.substring(0, i) + this.groupingSeparator + result.substring(i, result.length);\n }\n\n if (finalFormatting) {\n if (decimalPlaces > 0 && !!result) {\n /* autofill decimal places */\n let actualDecimalIndex = result.indexOf(this.decimalSeparator);\n if (autofillDecimals) {\n if (actualDecimalIndex === -1) {\n actualDecimalIndex = result.length;\n result += this.decimalSeparator;\n }\n\n result = this.addMissingLeadingZero(result, actualDecimalIndex);\n actualDecimalIndex = result.indexOf(this.decimalSeparator);\n\n const actualDecimalPlaces = result.length - actualDecimalIndex - 1;\n for (let j = 0; j < decimalPlaces - actualDecimalPlaces; j++) {\n result += '0';\n }\n } else {\n result = this.addMissingLeadingZero(result, actualDecimalIndex);\n }\n }\n }\n return result;\n }\n\n strip(value: string, options?: StripOptions): string {\n const decimalPlaces = this.valueOrDefault(options?.decimalPlaces, NumberFormatService.DEFAULT_DECIMAL_PLACES);\n const removeLeadingZeros = this.valueOrDefault(options?.removeLeadingZeros, NumberFormatService.DEFAULT_REMOVE_LEADING_ZEROS);\n\n let result = '';\n let indexDecimalSep = -1;\n let j = -1;\n let ignoredChars = 0;\n for (const char of value) {\n j++;\n if (this.allowedKeys.includes(char)) {\n if (char === this.decimalSeparator) {\n if (decimalPlaces === 0) {\n /* dismiss content after a decimal separator, when no places allowed */\n break;\n } else if (indexDecimalSep > -1) {\n /* ignore subsequent decimal separators */\n continue;\n }\n indexDecimalSep = j;\n }\n if (char === '0' && removeLeadingZeros) {\n /* remove leading zero only if it's not the only zero in the 'value' string */\n if ((result.length === 0 && j + 1 !== value.length) || result === NumberFormatService.NEGATIVE) {\n ignoredChars++;\n continue;\n }\n }\n if (char === NumberFormatService.NEGATIVE && j > 0) {\n /* dismiss content after a negative sign not on first position */\n break;\n }\n if (indexDecimalSep > -1 && result.length + ignoredChars > indexDecimalSep + decimalPlaces) {\n /* dismiss content after maximum decimal places reached */\n break;\n }\n result += char;\n } else if (char === this.groupingSeparator) {\n if (indexDecimalSep === -1) {\n ignoredChars++;\n }\n } else {\n /* dismiss content after a invalid character */\n break;\n }\n }\n return result;\n }\n\n private addMissingLeadingZero(result: string, actualDecimalIndex: number): string {\n const isNegative = result.startsWith(NumberFormatService.NEGATIVE);\n /* autoadd a zero before decimal separator, when it's missing */\n if (actualDecimalIndex === 0) {\n result = '0' + result;\n }\n /* autoadd a zero before decimal separator, when it's missing, for negative values */\n if (actualDecimalIndex === 1 && isNegative) {\n result = result[0] + '0' + result.substring(1, result.length);\n }\n return result;\n }\n\n private valueOrDefault(value: any, defaultValue: any): any {\n return NumberFormatService.valueIsSet(value) ? value : defaultValue;\n }\n}\n","import {\n AfterViewChecked,\n ChangeDetectorRef,\n Component,\n ElementRef,\n Input,\n OnChanges,\n Renderer2,\n SimpleChanges,\n ViewChild,\n} from '@angular/core';\nimport {ErrorStateMatcher} from '@angular/material/core';\nimport {NumberFormatService} from '../../numeric-field/number-format.service';\n\n/**\n * Read-only mat-form-field representation of provided value\n *\n * @author Stefan Laesser\n */\n\n@Component({\n selector: 'mad-readonly-form-field',\n templateUrl: './readonly-form-field.component.html',\n styleUrls: ['./readonly-form-field.component.css'],\n})\nexport class ReadOnlyFormFieldComponent implements OnChanges, AfterViewChecked {\n @Input('value') value: any;\n @Input('label') label: string;\n @Input('textAlign') textAlign: 'right' | 'left' = 'left';\n @Input('formatNumber') formatNumber = false;\n @Input('decimalPlaces') decimalPlaces = 2;\n @Input('roundDisplayValue') roundValue = false;\n @Input('autofillDecimals') autofillDecimals = false;\n @Input('unit') unit: string | null = null;\n @Input('unitPosition') unitPosition: 'right' | 'left' = 'left';\n @Input('errorMessage') errorMessage: string | null = null;\n @Input() multiline = false;\n @Input() rows = 3;\n @Input() id: string;\n /*\n * If shrinkIfEmpty is set to \"false\", nothing changes\n * If set to \"true\" and multiline is also \"true\", the textarea will\n * shrink to one row, if value is empty/null/undefined.\n * Otherwise, the defined rows-value will be used\n */\n @Input() shrinkIfEmpty: boolean = false;\n @ViewChild('inputEl') inputEl: ElementRef;\n errorMatcher: ErrorStateMatcher = {\n isErrorState: () => !!this.errorMessage,\n };\n\n private unitSpan: HTMLSpanElement;\n private textSpan: HTMLSpanElement;\n\n constructor(private changeDetector: ChangeDetectorRef, private renderer: Renderer2, private numberFormatService: NumberFormatService) {}\n\n ngOnChanges(_: SimpleChanges): void {\n if (!NumberFormatService.valueIsSet(this.value)) {\n this.value = '-';\n if (this.shrinkIfEmpty) {\n this.rows = 1;\n }\n } else if (this.formatNumber && typeof this.value === 'number') {\n this.value = this.numberFormatService.format(this.value, {\n decimalPlaces: this.decimalPlaces,\n finalFormatting: true,\n autofillDecimals: this.autofillDecimals,\n });\n }\n this.changeDetector.detectChanges();\n }\n\n // TODO direct copy from NumericFieldDirective\n ngAfterViewChecked(): void {\n this.injectUnitSymbol();\n }\n\n private injectUnitSymbol(): void {\n // Need to inject the unit symbol when the input element width is set to its actual value,\n // otherwise the icon wont show in the correct position\n if (!!this.unit && !this.unitSpan && this.inputEl.nativeElement.offsetWidth !== 0) {\n // Get the input wrapper and apply necessary styles\n const inputWrapper = this.inputEl.nativeElement.parentNode.parentNode;\n\n // Create the span with unit symbol and apply necessary styles\n this.unitSpan = this.renderer.createElement('span');\n\n if (this.unitPosition === 'left') {\n this.renderer.setAttribute(this.unitSpan, 'matPrefix', '');\n this.renderer.setStyle(this.unitSpan, 'padding-right', '5px');\n this.renderer.insertBefore(inputWrapper, this.unitSpan, inputWrapper.children[0]);\n } else {\n this.renderer.setAttribute(this.unitSpan, 'matSuffix', '');\n this.renderer.setStyle(this.unitSpan, 'padding-left', '5px');\n this.renderer.appendChild(inputWrapper, this.unitSpan);\n }\n }\n\n // special handling to move unit symbol along with display value\n if (!!this.unitSpan && this.textAlign === 'left' && this.unitPosition === 'right') {\n const inputStyles = window.getComputedStyle(this.inputEl.nativeElement.parentElement, null);\n this.unitSpan.style.position = 'absolute';\n this.unitSpan.style.marginTop = inputStyles.getPropertyValue('border-top-width');\n this.unitSpan.style.paddingTop = inputStyles.getPropertyValue('padding-top');\n this.unitSpan.style.paddingBottom = inputStyles.getPropertyValue('padding-bottom');\n\n if (!this.textSpan) {\n this.textSpan = document.createElement('span');\n document.body.appendChild(this.textSpan);\n this.textSpan.style.font = inputStyles.getPropertyValue('font');\n this.textSpan.style.fontSize = inputStyles.getPropertyValue('font-size');\n this.textSpan.style.height = 'auto';\n this.textSpan.style.width = 'auto';\n this.textSpan.style.position = 'absolute';\n this.textSpan.style.top = '0';\n this.textSpan.style.whiteSpace = 'no-wrap';\n this.textSpan.style.visibility = 'hidden';\n }\n this.textSpan.innerHTML = this.value;\n const width = Math.min(this.inputEl.nativeElement.clientWidth - this.unitSpan.clientWidth, Math.ceil(this.textSpan.clientWidth));\n this.unitSpan.style.left = width + 'px';\n }\n // always reset unit symbol\n if (!!this.unitSpan) {\n this.unitSpan.textContent = this.unit;\n }\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { ReadOnlyFormFieldWrapperComponent } from './readonly-form-field-wrapper/readonly-form-field-wrapper.component';\nimport { ReadOnlyFormFieldComponent } from './readonly-form-field/readonly-form-field.component';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { FormsModule } from '@angular/forms';\nimport {MatTooltipModule} from '@angular/material/tooltip';\n\n@NgModule({\n declarations: [ReadOnlyFormFieldComponent, ReadOnlyFormFieldWrapperComponent],\n imports: [CommonModule, RouterModule, MatFormFieldModule, MatInputModule, FormsModule, MatTooltipModule],\n exports: [ReadOnlyFormFieldComponent, ReadOnlyFormFieldWrapperComponent],\n})\nexport class ReadOnlyFormFieldModule {}\n","import { Injectable, OnDestroy } from '@angular/core';\nimport { NavigationEnd, Router } from '@angular/router';\nimport { Subscription } from 'rxjs';\nimport { TranslateService } from '@ngx-translate/core';\nimport { BackAction, MainAction, ToolbarAction } from './toolbar-action.interface';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class ToolbarService implements OnDestroy {\n backAction: BackAction;\n mainActions: MainAction[] = []; // shown on the left, next to title, as big buttons\n toolbarActions: ToolbarAction[] = []; // shown on the right as icons\n addNewButtonRoute: string;\n liftFabButtonHigher = false;\n dataTitle: string;\n routerSubscription: Subscription;\n private title: string;\n\n private currentUrl: string;\n\n constructor(private router: Router, private translate: TranslateService) {\n this.routerSubscription = this.router.events.subscribe(routingEvent => {\n if (routingEvent instanceof NavigationEnd) {\n if (this.currentUrl !== routingEvent.urlAfterRedirects) {\n this.clearToolbarActions();\n this.clearMainActions();\n delete this.backAction;\n delete this.dataTitle;\n }\n this.currentUrl = router.url;\n }\n });\n }\n\n ngOnDestroy(): void {\n if (this.routerSubscription) {\n this.routerSubscription.unsubscribe();\n }\n }\n\n getToolbarActions(): ToolbarAction[] {\n return this.toolbarActions;\n }\n\n addToolbarAction(action: ToolbarAction): void {\n this.translate\n .get(action.i18nActionKey)\n .toPromise()\n .then(translated => {\n action.actionName = translated;\n this.toolbarActions.push(action);\n });\n }\n\n set toolbarTitle(toolbarTitle: string) {\n this.title = toolbarTitle;\n }\n\n get toolbarTitle(): string {\n return this.title;\n }\n\n setDataTitle(dataTitle: string): void {\n this.dataTitle = dataTitle;\n }\n\n getDataTitle(): string {\n return this.dataTitle;\n }\n\n clearToolbarActions(): void {\n this.toolbarActions = [];\n }\n\n getMainActions(): MainAction[] {\n return this.mainActions;\n }\n\n getBackAction(): BackAction {\n return this.backAction;\n }\n\n addMainAction(mainAction: MainAction): void {\n this.translate\n .get(mainAction.i18nActionKey)\n .toPromise()\n .then(translated => {\n mainAction.actionName = translated;\n this.mainActions.push(mainAction);\n });\n }\n\n /**\n * Per default the goBackRoute is a routerLink. But if a href should be used (for absolute browser routing) then isAbsoluteUrl can be set to true.\n */\n addBackAction(goBackRoute: string, isAbsoluteUrl = false): void {\n this.backAction = {\n matIcon: 'keyboard_backspace',\n i18nActionKey: '',\n };\n if (!isAbsoluteUrl) {\n this.backAction.routerLink = goBackRoute;\n } else {\n this.backAction.href = goBackRoute;\n }\n }\n\n addSimpleBackButton(overrideIfPresent = false): void {\n if (this.getBackAction() && !overrideIfPresent) {\n return;\n }\n\n this.backAction = {\n matIcon: 'keyboard_backspace',\n i18nActionKey: '',\n action(): void {\n window.history.back();\n },\n };\n }\n\n clearMainActions(): void {\n this.mainActions = [];\n }\n}\n","import { Component } from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport { ToolbarService } from './toolbar.service';\nimport { Observable, of } from 'rxjs';\nimport { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\nimport { map } from 'rxjs/operators';\nimport { Action, BackAction, MainAction, ToolbarAction } from './toolbar-action.interface';\n\n@Component({\n selector: 'mad-toolbar',\n templateUrl: './toolbar.component.html',\n styleUrls: ['./toolbar.component.css'],\n})\nexport class ToolbarComponent {\n isHandset$: Observable<boolean> = this.breakpointObserver.observe([Breakpoints.Handset]).pipe(map(result => result.matches));\n\n constructor(private breakpointObserver: BreakpointObserver, private titleService: Title, private toolbarService: ToolbarService) {}\n\n getTitle(): string {\n const dataTitle = this.toolbarService.getDataTitle();\n const toolbarTitle = this.toolbarService.toolbarTitle;\n const title = !toolbarTitle || toolbarTitle.length <= 0 ? this.titleService.getTitle() : toolbarTitle;\n return !dataTitle || dataTitle.length <= 0 ? title : title + ': ' + dataTitle;\n }\n\n getToolbarActions(): ToolbarAction[] {\n return this.toolbarService.getToolbarActions();\n }\n\n getMainActions(): MainAction[] {\n return this.toolbarService.getMainActions();\n }\n\n hasPermission(action: Action): Observable<boolean> {\n if (!action || !action.showIf) {\n return of(true);\n }\n return action.showIf;\n }\n\n isRouterLink(): boolean {\n return this.toolbarService.getBackAction() && !!this.toolbarService.getBackAction().routerLink;\n }\n\n isAbsoluteLink(): boolean {\n return this.toolbarService.getBackAction() && !!this.toolbarService.getBackAction().href;\n }\n\n isAction(): boolean {\n return this.toolbarService.getBackAction() && !!this.toolbarService.getBackAction().action;\n }\n\n getBackAction(): BackAction {\n return this.toolbarService.getBackAction();\n }\n}\n","import {NgModule} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {RouterModule} from '@angular/router';\nimport {ToolbarComponent} from './toolbar.component';\nimport {MaterialActionButtonModule} from '../material-action-button/material-action-button.module';\nimport {MatMenuModule} from '@angular/material/menu';\nimport {MatToolbarModule} from '@angular/material/toolbar';\nimport {MatIconModule} from '@angular/material/icon';\nimport {MatButtonModule} from '@angular/material/button';\nimport {MatTooltipModule} from '@angular/material/tooltip';\nimport {ButtonModule} from '../button/button.module';\nimport {MatBadgeModule} from \"@angular/material/badge\";\n\n@NgModule({\n declarations: [ToolbarComponent],\n imports: [\n CommonModule,\n RouterModule,\n MatMenuModule,\n MatButtonModule,\n MatToolbarModule,\n MatIconModule,\n MaterialActionButtonModule,\n MatTooltipModule,\n ButtonModule,\n MatBadgeModule,\n ],\n exports: [ToolbarComponent],\n})\nexport class ToolbarModule {}\n","/*\n * Copyright (c) 2018-2020 Porsche Informatik. All Rights Reserved.\n * This software is released under MIT license.\n * The full license information can be found in LICENSE in the root directory of this project.\n */\n\nimport {\n AfterViewChecked,\n Directive,\n ElementRef,\n EventEmitter,\n forwardRef,\n Input,\n OnDestroy,\n OnInit,\n Output,\n Renderer2,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { NumberFormatService } from './number-format.service';\n\nconst BACK_KEYCODE = 8;\nconst SPACE_KEYCODE = 32;\nconst DEL_KEYCODE = 46;\nconst CONTROL_KEYCODES_UPPER_BORDER = 46;\nconst OTHER_CONTROL_KEYS = new Set([224, 91, 93]);\n\n@Directive({\n selector: '[madNumericField]',\n host: {\n '[class.text-right]': 'textAlign === \"right\"',\n '(change)': 'onChange(getValueForFormControl())',\n '(input)': 'onChange(getValueForFormControl())',\n '(blur)': 'onTouched()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NumericFieldDirective), // eslint-disable-line\n multi: true,\n },\n ],\n})\nexport class NumericFieldDirective implements OnInit, OnDestroy, AfterViewChecked, ControlValueAccessor {\n @Input('textAlign') textAlign: 'right' | 'left' = 'right';\n @Input('decimalPlaces') decimalPlaces = 2;\n @Input('roundDisplayValue') roundValue = false;\n @Input('autofillDecimals') autofillDecimals = false;\n @Input('unit') unit: string | null = null;\n @Input('unitPosition') unitPosition: 'right' | 'left' = 'right';\n @Output('numericValueChange') numericValueChanged = new EventEmitter<number>();\n\n private displayValue = '';\n private originalValue = NaN;\n private _numericValue: number;\n private inputChangeListener: () => void;\n private keyupListener: () => void;\n private keydownListener: () => void;\n\n @Input('numericValue')\n set numericValue(value: number) {\n if (this._numericValue !== value && !(isNaN(this._numericValue) && (isNaN(value) || value === null))) {\n this.originalValue = value;\n // Don't roundOrTruncate if value was set to empty otherwise input value will be set to 0 instead of empty\n // which happens when an input is being reset\n this._numericValue = value === null || value === undefined ? value : this.roundOrTruncate(value); // eslint-disable-line\n this.handleInputChanged();\n }\n }\n\n private unitSpan: HTMLSpanElement;\n private textSpan: HTMLSpanElement;\n\n constructor(private renderer: Renderer2, private inputEl: ElementRef, private numberFormatService: NumberFormatService) {}\n\n /* Control Values Accessor Stuff below */\n // eslint-disable-next-line\n onChange: any = () => {};\n // eslint-disable-next-line\n onTouched: any = () => {};\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(): void {\n // Dont need to implement since its just a directive\n }\n\n writeValue(value: number): void {\n this.numericValue = value;\n }\n\n ngOnInit(): void {\n /* needs to be parsed as number explicitly as it comes as string from user input */\n this.decimalPlaces = parseInt(this.decimalPlaces.toString(), 10);\n\n this.inputChangeListener = this.renderer.listen(this.inputEl.nativeElement, 'blur', event => {\n this.formatInput(event.target, true);\n });\n\n this.keyupListener = this.renderer.listen(this.inputEl.nativeElement, 'keyup', event => {\n if (event.keyCode === BACK_KEYCODE || (event.keyCode >= CONTROL_KEYCODES_UPPER_BORDER && !OTHER_CONTROL_KEYS.has(event.keyCode))) {\n this.formatInput(event.target, false);\n }\n });\n\n this.keydownListener = this.renderer.listen(this.inputEl.nativeElement, 'keydown', event => {\n const value: string = event.target.value;\n if (\n this.numberFormatService.allowedKeys.includes(event.key) ||\n (event.keyCode <= CONTROL_KEYCODES_UPPER_BORDER && event.keyCode > 0 && event.keyCode !== SPACE_KEYCODE) ||\n event.metaKey ||\n event.ctrlKey ||\n event.altKey\n ) {\n /* allow negative sign only as first character and none exists outside of text selection */\n const indexNegativeSign = value.indexOf(NumberFormatService.NEGATIVE);\n if (\n event.key === NumberFormatService.NEGATIVE &&\n (event.target.selectionStart > 0 || indexNegativeSign > -1) &&\n (event.target.selectionStart === event.target.selectionEnd ||\n !(indexNegativeSign >= event.target.selectionStart && indexNegativeSign <= event.target.selectionEnd))\n ) {\n return false;\n }\n\n /* no duplicate decimal separators */\n const indexDecimalSep = value.indexOf(this.numberFormatService.decimalSeparator);\n if (\n event.key === this.numberFormatService.decimalSeparator &&\n (indexDecimalSep > -1 || this.decimalPlaces === 0) &&\n (event.target.selectionStart === event.target.selectionEnd ||\n !(indexDecimalSep >= event.target.selectionStart && indexDecimalSep <= event.target.selectionEnd))\n ) {\n return false;\n }\n\n /* prevent too many decimal places */\n if (\n NumberFormatService.NUMBERS.includes(event.key) &&\n indexDecimalSep > -1 &&\n indexDecimalSep < event.target.selectionStart &&\n event.target.selectionStart === event.target.selectionEnd &&\n value.length > indexDecimalSep + this.decimalPlaces\n ) {\n return false;\n }\n\n /* when deleting thousand separator, remove the digit before or after it */\n const cursorStart = event.target.selectionStart;\n\n if (cursorStart === event.target.selectionEnd) {\n if (event.keyCode === BACK_KEYCODE && value.substr(cursorStart - 1, 1) === this.numberFormatService.groupingSeparator) {\n event.target.value = value.substring(0, cursorStart - 2) + value.substring(cursorStart - 1, value.length);\n event.target.selectionStart = event.target.selectionEnd = cursorStart - 1;\n return false;\n } else if (event.keyCode === DEL_KEYCODE && value.substr(cursorStart, 1) === this.numberFormatService.groupingSeparator) {\n event.target.value = value.substring(0, cursorStart + 1) + value.substring(cursorStart + 2, value.length);\n event.target.selectionStart = event.target.selectionEnd = cursorStart + 1;\n return false;\n }\n }\n this.originalValue = NaN;\n } else {\n return false;\n }\n return true;\n });\n }\n\n ngOnDestroy(): void {\n this.detachListener();\n }\n\n ngAfterViewChecked(): void {\n this.injectUnitSymbol();\n }\n\n handleInputChanged(): void {\n // Call in set timeout to avoid Expression has changed after it has been checked error.\n // Sometimes the value changes because we cut off decimal places\n setTimeout(() => {\n this.updateInput(\n this.numberFormatService.format(this._numericValue, {\n decimalPlaces: this.decimalPlaces,\n finalFormatting: false,\n autofillDecimals: this.autofillDecimals,\n }),\n );\n }, 1);\n }\n\n formatInput(element: HTMLInputElement, finalFormatting: boolean): void {\n const cursorPos = element.selectionStart;\n const length = element.value.length;\n const setCursor = this.displayValue !== element.value;\n const textFormatted = this.numberFormatService.formatNumber(element.value, {\n decimalPlaces: this.decimalPlaces,\n finalFormatting,\n autofillDecimals: this.autofillDecimals,\n });\n\n // special handling to move unit symbol along with display value\n if (this.textAlign === 'left' && this.unitPosition === 'right') {\n const inputStyles = window.getComputedStyle(this.inputEl.nativeElement.parentElement, null);\n this.unitSpan.style.position = 'absolute';\n this.unitSpan.style.marginTop = inputStyles.getPropertyValue('border-top-width');\n this.unitSpan.style.paddingTop = inputStyles.getPropertyValue('padding-top');\n this.unitSpan.style.paddingBottom = inputStyles.getPropertyValue('padding-bottom');\n\n if (!this.textSpan) {\n this.textSpan = document.createElement('span');\n document.body.appendChild(this.textSpan);\n this.textSpan.style.font = inputStyles.getPropertyValue('font');\n this.textSpan.style.fontSize = inputStyles.getPropertyValue('font-size');\n this.textSpan.style.height = 'auto';\n this.textSpan.style.width = 'auto';\n this.textSpan.style.position = 'absolute';\n this.textSpan.style.top = '0';\n this.textSpan.style.whiteSpace = 'no-wrap';\n this.textSpan.style.visibility = 'hidden';\n }\n this.textSpan.innerHTML = textFormatted;\n const width = Math.min(this.inputEl.nativeElement.clientWidth - this.unitSpan.clientWidth, Math.ceil(this.textSpan.clientWidth));\n this.unitSpan.style.left = width + 'px';\n }\n\n this.updateInput(textFormatted);\n if (setCursor) {\n element.selectionStart = element.selectionEnd = Math.max(cursorPos + element.value.length - length, 0);\n }\n }\n\n updateInput(value: string): void {\n this.displayValue = value;\n this.inputEl.nativeElement.value = value;\n this._numericValue = parseFloat(\n this.numberFormatService.strip(value, { decimalPlaces: this.decimalPlaces }).replace(this.numberFormatService.decimalSeparator, '.'),\n );\n if (this._numericValue !== this.roundOrTruncate(this.originalValue)) {\n this.originalValue = this._numericValue;\n this.numericValueChanged.emit(this._numericValue);\n }\n }\n\n getValueForFormControl(): number | undefined {\n this.formatInput(this.inputEl.nativeElement, false);\n if (isNaN(this._numericValue)) {\n // Return undefined instead of NaN to support the default required validator.\n return undefined; // eslint-disable-line\n }\n return this._numericValue;\n }\n\n private injectUnitSymbol(): void {\n // Need to inject the unit symbol when the input element width is set to its actual value,\n // otherwise the icon wont show in the correct position\n if (!!this.unit && !this.unitSpan && this.inputEl.nativeElement.offsetWidth !== 0) {\n // Get the input wrapper and apply necessary styles\n const inputWrapper = this.inputEl.nativeElement.parentNode.parentNode;\n\n // Create the span with unit symbol and apply necessary styles\n this.unitSpan = this.renderer.createElement('span');\n\n if (this.unitPosition === 'left') {\n this.renderer.setAttribute(this.unitSpan, 'matPrefix', '');\n this.renderer.setStyle(this.unitSpan, 'padding-right', '5px');\n this.renderer.insertBefore(inputWrapper, this.unitSpan, inputWrapper.children[0]);\n } else {\n this.renderer.setAttribute(this.unitSpan, 'matSuffix', '');\n this.renderer.setStyle(this.unitSpan, 'padding-left', '5px');\n this.renderer.appendChild(inputWrapper, this.unitSpan);\n }\n }\n\n // do not display unit symbol if the unit should move along display value\n if (!!this.unitSpan && this.textAlign === 'left' && this.unitPosition === 'right') {\n if (NumberFormatService.valueIsSet(this.displayValue)) {\n this.unitSpan.style.display = 'unset';\n } else {\n this.unitSpan.style.display = 'none';\n }\n }\n // always reset unit symbol\n if (!!this.unitSpan) {\n this.unitSpan.textContent = this.unit;\n }\n }\n\n private detachListener(): void {\n if (this.inputChangeListener) {\n this.inputChangeListener();\n delete this.inputChangeListener;\n }\n if (this.keydownListener) {\n this.keydownListener();\n delete this.keydownListener;\n }\n if (this.keyupListener) {\n this.keyupListener();\n delete this.keyupListener;\n }\n }\n\n private roundOrTruncate(value: number): number {\n const method = this.roundValue ? 'round' : value < 0 ? 'ceil' : 'floor';\n return Math[method](value * Math.pow(10, this.decimalPlaces)) / Math.pow(10, this.decimalPlaces);\n }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { NumericFieldDirective } from './numeric-field.directive';\nimport { NumberFormatService } from './number-format.service';\n\n@NgModule({\n providers: [NumberFormatService],\n declarations: [NumericFieldDirective],\n exports: [NumericFieldDirective],\n})\nexport class NumericFieldModule {\n static forRoot(): ModuleWithProviders<NumericFieldModule> {\n return {\n ngModule: NumericFieldModule,\n providers: [NumberFormatService],\n };\n }\n}\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\nimport {animate, state, style, transition, trigger} from '@angular/animations';\n\n@Component({\n selector: 'mad-card',\n templateUrl: './card.component.html',\n animations: [\n trigger('collapseExpandAnimation', [\n transition(':enter', [style({opacity: 0, height: 0, overflow: 'hidden'}), animate('100ms', style({\n opacity: 1,\n height: '*'\n }))]),\n transition(':leave', [style({opacity: 1, height: '*', overflow: 'hidden'}), animate('100ms', style({\n opacity: 0,\n height: 0\n }))]),\n ]),\n trigger('rotateIcon', [\n state('true', style({transform: 'rotate(0)'})),\n state('false', style({transform: 'rotate(180deg)'})),\n transition('true => false', animate('100ms ease-out')),\n transition('false => true', animate('100ms ease-in')),\n ]),\n ],\n styleUrls: ['./card.component.css'],\n})\nexport class CardComponent {\n @Input() cancelDisabled = false;\n @Input() cancelText = 'NOT SET';\n @Input() readonly = true;\n @Input() editText = 'NOT SET';\n @Input() expandable = true;\n @Input() expanded = true;\n @Input() saveDisabled = false;\n @Input() saveText = 'NOT SET';\n @Input() title: string;\n @Input() editMode = false;\n @Input() additionalActionIcon: string;\n @Input() additionalActionText: string = '';\n @Output() edit = new EventEmitter();\n @Output() cancel = new EventEmitter();\n @Output() save = new EventEmitter();\n @Output() additionalAction = new EventEmitter();\n\n onCancel(): void {\n this.cancel.emit(undefined);\n }\n\n onEdit(): void {\n this.edit.emit(undefined);\n this.expanded = true;\n }\n\n onSave(): void {\n this.save.emit(undefined);\n }\n\n toggleCollapse(): void {\n this.expanded = !this.expanded;\n }\n\n additionalActionClicked() {\n this.additionalAction.emit(undefined);\n }\n}\n","import { Directive, EventEmitter, HostListener, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { Subject, Subscription } from 'rxjs';\nimport { throttleTime } from 'rxjs/operators';\n\n@Directive({\n selector: '[madThrottleClick]',\n})\nexport class ThrottleClickDirective implements OnInit, OnDestroy {\n @Input() throttleTime = 300;\n @Output() throttleClick = new EventEmitter();\n private clicks = new Subject();\n private subscription: Subscription;\n constructor() {}\n\n ngOnInit() {\n this.subscription = this.clicks.pipe(throttleTime(this.throttleTime)).subscribe(e => this.throttleClick.emit(e));\n }\n\n ngOnDestroy() {\n this.subscription.unsubscribe();\n }\n\n @HostListener('click', ['$event'])\n clickEvent(event: any) {\n event.preventDefault();\n event.stopPropagation();\n this.clicks.next(event);\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ThrottleClickDirective } from './throttle-click.directive';\n\n@NgModule({\n declarations: [ThrottleClickDirective],\n imports: [CommonModule],\n exports: [ThrottleClickDirective],\n})\nexport class ThrottleClickModule {}\n","import {CommonModule} from '@angular/common';\nimport {NgModule} from '@angular/core';\nimport {MatCardModule} from '@angular/material/card';\nimport {MatIconModule} from '@angular/material/icon';\nimport {CardComponent} from './card.component';\nimport {ButtonModule} from \"../button/button.module\";\nimport {MatButtonModule} from \"@angular/material/button\";\nimport {ThrottleClickModule} from '../throttle-click/throttle-click.module';\n\n@NgModule({\n declarations: [CardComponent],\n imports: [CommonModule, MatCardModule, MatIconModule, ButtonModule, MatButtonModule, ThrottleClickModule],\n exports: [CardComponent],\n})\nexport class CardModule {\n}\n","import {\n AfterViewInit,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n Input,\n OnInit,\n Output,\n QueryList,\n TemplateRef,\n ViewChildren,\n} from '@angular/core';\n\nexport interface QuickListItem {\n id: string;\n}\n\n@Component({\n selector: 'mad-base-quick-list',\n template: '',\n styleUrls: [],\n})\nexport class BaseQuickListComponent<T> implements OnInit, AfterViewInit {\n @Input() allItems = [] as T[];\n @Input() addLabel = 'NOT SET';\n @Input() addPossible = true;\n @Input() blankItem = {} as any;\n @Input() readonly: boolean;\n @Input() maxItems: number;\n @Input() minItems: number;\n\n @Output() added = new EventEmitter<T>();\n @Output() removed = new EventEmitter<T>();\n @ContentChild(TemplateRef) itemTemplate: TemplateRef<any>;\n @ViewChildren('row') itemRows: QueryList<ElementRef>;\n\n rowCountFocus: number;\n addEventFunction: Function;\n\n constructor(public changeDetectorRef: ChangeDetectorRef) { }\n\n ngOnInit(): void {\n this.addEventFunction = this.addItem.bind(this);\n if (this.minItems) {\n for (let n = this.allItems.length; n < this.minItems; n++) {\n this.interalAddItem();\n }\n }\n }\n\n ngAfterViewInit(): void {\n setTimeout(() => this.setFocusOnAdd(), 1);\n }\n\n addItem(): void {\n const newItem = this.interalAddItem();\n if (!!newItem) {\n this.added.emit(newItem);\n }\n }\n\n removeItem(item: T): void {\n if (this.isDeleteAllowed()) {\n this.allItems.splice(this.allItems.indexOf(item), 1);\n this.removed.emit(item);\n }\n }\n\n setFocusOnAdd(): void {\n this.rowCountFocus = this.itemRows.length;\n this.itemRows.changes.subscribe((els: QueryList<ElementRef>) => {\n if (els.length > this.rowCountFocus && !!els.last) {\n const firstFocusable = els.last.nativeElement.querySelector(\"button, a, input, select, textarea, [tabindex]:not([tabindex='-1'])\");\n if (firstFocusable) {\n firstFocusable.focus();\n }\n }\n this.rowCountFocus = els.length;\n });\n }\n\n isAddAllowed(): boolean {\n return this.addPossible && (!this.maxItems || this.allItems.length < this.maxItems);\n }\n\n isDeleteAllowed(): boolean {\n return !this.minItems || this.allItems.length > this.minItems;\n }\n\n private interalAddItem(): T {\n if (this.isAddAllowed()) {\n const newItem = { ...this.blankItem };\n // creates ids in the form of \"n5kdz1pljl8\"\n newItem.id = Math.random()\n .toString(36)\n .substring(2);\n this.allItems.push(newItem);\n this.changeDetectorRef.detectChanges();\n return newItem;\n }\n return null;\n }\n\n}\n","// Based on https://github.com/porscheinformatik/clarity-addons/blob/master/src/clr-addons/generic-quick-list/generic-quick-list.ts\n\nimport { ChangeDetectorRef, Component } from '@angular/core';\nimport { BaseQuickListComponent, QuickListItem } from './base-quick-list.component';\n\n@Component({\n selector: 'mad-quick-list',\n templateUrl: './quick-list.component.html',\n styleUrls: [],\n})\nexport class QuickListComponent extends BaseQuickListComponent<QuickListItem> {\n constructor(public changeDetectorRef: ChangeDetectorRef) {\n super(changeDetectorRef);\n }\n}\n","import {\n ChangeDetectorRef,\n Component,\n} from '@angular/core';\nimport { BaseQuickListComponent, QuickListItem } from '../base-quick-list.component';\n\n@Component({\n selector: 'mad-quick-list-compact',\n templateUrl: './quick-list-compact.component.html',\n styleUrls: [],\n})\nexport class QuickListCompactComponent extends BaseQuickListComponent<QuickListItem> {\n\n constructor(public changeDetectorRef: ChangeDetectorRef) {\n super(changeDetectorRef);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { QuickListComponent } from './quick-list.component';\nimport { ButtonModule } from '../button/button.module';\nimport { BaseQuickListComponent } from './base-quick-list.component';\nimport { QuickListCompactComponent } from './quick-list-compact/quick-list-compact.component';\n\n@NgModule({\n declarations: [QuickListComponent, BaseQuickListComponent, QuickListCompactComponent],\n imports: [CommonModule, MatButtonModule, MatIconModule, ButtonModule],\n exports: [QuickListComponent, QuickListCompactComponent, BaseQuickListComponent],\n})\nexport class QuickListModule {}\n","import { AfterViewInit, Component, EventEmitter, Input, OnInit, Output, ViewChild } from '@angular/core';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatSort, Sort } from '@angular/material/sort';\nimport { ColumnHeader } from './column-header';\nimport { TableAction } from './table-action';\n\n@Component({\n selector: 'mad-table',\n templateUrl: './table.component.html',\n styleUrls: ['./table.component.scss'],\n})\nexport class TableComponent implements OnInit, AfterViewInit {\n readonly ACTION_COLUMN_NAME = '__action__';\n\n @Input() columns: ColumnHeader[] = [];\n @Input() filterLabel = 'NOT SET';\n @Input() filterPlaceholder = 'NOT SET';\n @Input() noDataText: string;\n @Input() pageSizeOptions = [5, 10, 15];\n @Input() defaultPageSize = this.pageSizeOptions?.[0] || 10;\n @Input() rowActions: TableAction[] = [];\n @Input() tableActions: TableAction[] = [];\n\n @Input() set displayedData(data: any[]) {\n if (!this.dataSource) {\n this.dataSource = new MatTableDataSource<any>(data);\n } else {\n this.dataSource.data = data;\n }\n }\n\n @Input() set paginationEnabled(isPaginationEnabled: boolean) {\n this.isPaginationEnabled = isPaginationEnabled;\n // eslint-disable-next-line\n const pageSize = this.isPaginationEnabled ? this.defaultPageSize : Number.MAX_VALUE;\n if (this.dataSource.paginator) {\n this.dataSource.paginator._changePageSize(pageSize);\n }\n }\n\n @Input()\n set filterEnabled(isFilterEnabled: boolean) {\n this.isFilterEnabled = isFilterEnabled;\n this.setFilterValue(undefined);\n }\n\n @Output() tableAction = new EventEmitter<TableAction>();\n @Output() rowAction = new EventEmitter<TableAction>();\n @Output() sortEvent = new EventEmitter<Sort>();\n\n @ViewChild(MatPaginator, { static: false }) paginator: MatPaginator;\n @ViewChild(MatSort, { static: true }) sort: MatSort;\n\n dataSource: MatTableDataSource<any[]>;\n columnNames: string[];\n isRowClickable: boolean;\n defaultAction: TableAction;\n isFilterEnabled = false;\n isPaginationEnabled = false;\n\n ngOnInit(): void {\n this.columnNames = this.columns.map(column => column.label);\n this.isRowClickable = this.rowActions.length > 0;\n if (this.isRowClickable) {\n this.columnNames.unshift(this.ACTION_COLUMN_NAME);\n this.defaultAction = this.rowActions[0];\n }\n }\n\n ngAfterViewInit(): void {\n this.dataSource.paginator = this.paginator;\n this.dataSource.sort = this.sort;\n // set custom filter predicate to enable search for multiple search strings:\n // e.g. \"one two three\"\n this.dataSource.filterPredicate = (data: any, filter: string) => \n !filter || filter.split(/\\s+/).every(term => !!Object.keys(data).find(key => data[key].includes(term)));\n }\n\n onFilter(value: string): void {\n this.setFilterValue(value);\n }\n\n onRowEvent(event: MouseEvent, row: any, action = this.defaultAction): void {\n if (!!action && !this.isClickOnRowMenuIcon(event)) {\n this.rowAction.emit({ ...action, outputRow: row });\n }\n }\n\n onSortingEvent(sortingParams: Sort): void {\n this.sortEvent.emit(sortingParams);\n }\n\n onTableAction(tableAction: TableAction): void {\n if (!!tableAction) {\n this.tableAction.emit(tableAction);\n }\n }\n\n private setFilterValue(value: string): void {\n this.dataSource.filter = value?.trim().toLowerCase();\n }\n\n private isClickOnRowMenuIcon(event: MouseEvent): boolean {\n return (event?.target as HTMLElement)?.classList.contains('mat-icon');\n }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatSortModule } from '@angular/material/sort';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { TableComponent } from './table.component';\nimport {ButtonModule} from \"../button/button.module\";\n\n@NgModule({\n declarations: [TableComponent],\n imports: [\n CommonModule,\n MatButtonModule,\n MatIconModule,\n MatFormFieldModule,\n MatInputModule,\n MatMenuModule,\n MatPaginatorModule,\n MatSortModule,\n MatTableModule,\n ButtonModule\n ],\n exports: [TableComponent],\n})\nexport class TableModule {}\n","import { CdkStepHeader, STEP_STATE, StepState } from '@angular/cdk/stepper';\nimport { ChangeDetectionStrategy, Component, ElementRef, Input, ViewEncapsulation } from '@angular/core';\nimport { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\n\n@Component({\n selector: 'mad-step-header',\n templateUrl: './step-header.component.html',\n styleUrls: ['./step-header.component.scss'],\n inputs: ['color'],\n host: {\n 'class': 'mad-step-header',\n 'role': 'tab',\n },\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class StepHeaderComponent extends CdkStepHeader {\n @Input()\n index: number;\n\n @Input()\n label: string;\n\n @Input() state: StepState;\n\n @Input() errorMessage: string;\n\n @Input() selected: boolean;\n\n @Input() active: boolean;\n\n @Input() optional: boolean;\n\n @Input() hasError: boolean;\n\n @Input() completed: boolean;\n\n @Input() closed: boolean;\n\n constructor(private _focusMonitor: FocusMonitor, _elementRef: ElementRef<HTMLElement>) {\n super(_elementRef);\n }\n\n ngAfterViewInit() {\n this._focusMonitor.monitor(this._elementRef, true);\n }\n\n ngOnDestroy() {\n this._focusMonitor.stopMonitoring(this._elementRef);\n }\n\n /** Focuses the step header. */\n focus(origin?: FocusOrigin, options?: FocusOptions) {\n if (origin) {\n this._focusMonitor.focusVia(this._elementRef, origin, options);\n } else {\n this._elementRef.nativeElement.focus(options);\n }\n }\n\n public getCssForState(): string {\n if (this.state === STEP_STATE.NUMBER && !this.completed && !this.hasError) {\n return 'step-state-neutral'; //initiale state is 'number'\n } else if (this.completed) {\n return 'step-state-complete';\n } else if (this.hasError) {\n return 'step-state-error';\n }\n }\n\n public getIcon(): string {\n if (this.completed) {\n return 'check_circle_outline';\n } else if (this.hasError) {\n return 'error_outline';\n }\n return '';\n }\n}\n","import { animate, state, style, transition, trigger, AnimationTriggerMetadata } from '@angular/animations';\n\n/**\n * Animations used by the MAD stepper.\n */\nexport const madStepperAnimations: {\n readonly verticalStepTransition: AnimationTriggerMetadata;\n} = {\n verticalStepTransition: trigger('stepTransition', [\n state('previous', style({ height: '0px', visibility: 'hidden' })),\n state('next', style({ height: '0px', visibility: 'hidden' })),\n state('current', style({ height: '*', visibility: 'visible' })),\n transition('* <=> current', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),\n ]),\n};\n","import { Directionality } from '@angular/cdk/bidi';\nimport { CdkStep, CdkStepper, STEP_STATE, StepContentPositionState} from '@angular/cdk/stepper';\nimport { AnimationEvent } from '@angular/animations';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n forwardRef,\n Inject,\n Input,\n OnDestroy, OnInit,\n Optional,\n Output,\n QueryList,\n ViewChildren,\n ViewContainerRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport { DOCUMENT } from '@angular/common';\nimport { Subject, Subscription } from 'rxjs';\nimport { distinctUntilChanged, map, startWith, switchMap, takeUntil, tap } from 'rxjs/operators';\nimport { StepHeaderComponent } from './step-header/step-header.component';\nimport { madStepperAnimations } from './mad-stepper-animation';\n\n@Component({\n selector: 'mad-step',\n templateUrl: './step.component.html',\n styleUrls: ['./stepper.component.scss'],\n providers: [{ provide: CdkStep, useExisting: StepComponent }],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class StepComponent extends CdkStep implements AfterContentInit, OnDestroy {\n /** Action event for the next button. If not set the StepComponent will handle the step navigation */\n @Output()\n onNext = new EventEmitter<any>();\n\n /** Action event for the done button. If not set the StepComponent will handle the step navigation */\n @Output()\n onDone = new EventEmitter<any>();\n\n /*** Action event when the header is clicked. If not set the StepComponent will handle the step navigation*/\n @Output()\n onHeaderClick = new EventEmitter<any>();\n\n stepClosed = false;\n\n private _isSelected = Subscription.EMPTY;\n\n constructor(@Inject(forwardRef(() => StepperComponent)) private stepper: StepperComponent, private _viewContainerRef: ViewContainerRef) {\n super(stepper);\n }\n\n ngAfterContentInit() {\n this._isSelected = this._stepper.steps.changes\n .pipe(\n switchMap(() =>\n this._stepper.selectionChange.pipe(\n map(event => event.selectedStep === this),\n tap(() => (this.stepClosed = false)),\n startWith(this._stepper.selected === this),\n ),\n ),\n )\n .subscribe();\n }\n\n ngOnDestroy() {\n this._isSelected.unsubscribe();\n }\n\n public next(): void {\n this.stepValidation();\n\n if (this.onNext.observers.length <= 0) {\n this.stepper.next();\n }\n this.onNext.emit();\n }\n\n public selectAndMarkAsTouched(index: number): void {\n //Mark current selected step as touched before selecting to display errors in the from\n this._stepper.selected?.stepControl?.markAllAsTouched();\n this.stepClosed = false;\n if (this.onHeaderClick.observers.length <= 0) {\n this.select();\n }\n this.onHeaderClick.emit(index);\n }\n\n public completeLast(): void {\n this.stepValidation();\n this.stepClosed = true;\n\n if (this.onDone.observers.length <= 0) {\n this.stepper.next();\n }\n\n this.onDone.emit();\n }\n\n public resetValidations(): void {\n this.hasError = false;\n this.completed = true;\n this.state = STEP_STATE.DONE;\n }\n\n private stepValidation(): void {\n this.stepControl?.markAllAsTouched();\n if (this.stepControl?.valid) {\n this.hasError = false;\n this.completed = true;\n this.state = STEP_STATE.DONE;\n } else {\n this.completed = false;\n this.hasError = true;\n this.state = STEP_STATE.ERROR;\n }\n }\n}\n\n@Component({\n selector: 'mad-stepper',\n templateUrl: './stepper.component.html',\n styleUrls: ['./stepper.component.scss'],\n host: {\n '[class.stepper-vertical]': 'true',\n '[attr.aria-orientation]': '\"vertical\"',\n 'role': 'tablist',\n },\n animations: [madStepperAnimations.verticalStepTransition],\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n providers: [{ provide: CdkStepper, useExisting: StepperComponent }],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class StepperComponent extends CdkStepper implements OnInit, AfterContentInit {\n\n /** Event emitted when the current step is done transitioning in. */\n @Output() readonly animationDone: EventEmitter<void> = new EventEmitter<void>();\n\n @Input()\n nextButtonLabel: string;\n\n @Input()\n doneButtonLabel: string;\n /** Step headers of all steps inside the stepper */\n @ViewChildren(StepHeaderComponent) _stepHeader: QueryList<StepHeaderComponent>;\n\n /** Steps inside the Stepper */\n @ContentChildren(StepComponent, { descendants: true }) _steps: QueryList<StepComponent>;\n\n /** Steps that belong to the current stepper, excluding ones from nested steppers. */\n steps: QueryList<StepComponent> = new QueryList<StepComponent>();\n\n readonly _animationDone = new Subject<AnimationEvent>();\n\n\n constructor(\n @Optional() dir: Directionality,\n changeDetectorRef: ChangeDetectorRef,\n elementRef: ElementRef<HTMLElement>,\n @Inject(DOCUMENT) _document: any,\n ) {\n super(dir, changeDetectorRef, elementRef, _document);\n this._orientation = 'vertical';\n }\n\n ngOnInit() {\n // Only linear stepper implementation is supported\n super.linear = true;\n }\n\n ngAfterContentInit() {\n super.ngAfterContentInit();\n\n this.steps.changes.pipe(takeUntil(this._destroyed)).subscribe(() => {\n this._stateChanged();\n });\n\n this._animationDone\n .pipe(\n distinctUntilChanged((x, y) => x.fromState === y.fromState && x.toState === y.toState),\n takeUntil(this._destroyed),\n )\n .subscribe(event => {\n if ((event.toState as StepContentPositionState) === 'current') {\n this.animationDone.emit();\n }\n });\n }\n\n /**\n * Method patched to enable the closing of the last step.\n */\n _getAnimationDirection(index: number): StepContentPositionState {\n const closeLastStep = this.selectedIndex === this.steps.length - 1 && this._steps.last?.completed && this._steps.last?.stepClosed;\n if (closeLastStep) {\n return 'next';\n }\n return super._getAnimationDirection(index);\n }\n\n _stepIsNavigable(index: number, step: StepComponent): boolean {\n return step.completed || this.selectedIndex === index || !this.linear;\n }\n}\n","import { StepComponent, StepperComponent} from './stepper.component';\nimport { StepHeaderComponent } from './step-header/step-header.component';\nimport { CommonModule } from '@angular/common';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { NgModule } from '@angular/core';\nimport { CdkStepperModule } from '@angular/cdk/stepper';\nimport { FlexModule } from '@angular/flex-layout';\n\n@NgModule({\n declarations: [StepperComponent, StepHeaderComponent, StepComponent],\n imports: [CommonModule, MatButtonModule, MatIconModule, CdkStepperModule, FlexModule],\n exports: [StepperComponent, StepHeaderComponent, StepComponent],\n})\nexport class StepperModule {}\n","import {NgModule} from '@angular/core';\nimport {ToolbarModule} from './toolbar/toolbar.module';\nimport {ReadOnlyFormFieldModule} from './readonly/readonly-form-field.module';\nimport {MaterialActionButtonModule} from './material-action-button/material-action-button.module';\nimport {NumericFieldModule} from './numeric-field/numeric-field.module';\nimport {CardModule} from './card/card.module';\nimport {QuickListModule} from './quick-list/quick-list.module';\nimport {ButtonModule} from './button/button.module';\nimport {ThrottleClickModule} from './throttle-click/throttle-click.module';\nimport {StepperModule} from './stepper/stepper.module';\n\n@NgModule({\n exports: [\n ReadOnlyFormFieldModule,\n ButtonModule,\n ToolbarModule,\n MaterialActionButtonModule,\n NumericFieldModule,\n CardModule,\n QuickListModule,\n ThrottleClickModule,\n ],\n})\nexport class MaterialAddonsModule {}\n"]}
|