@sd-angular/core 1.3.211 → 1.3.213
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/sd-angular-core-select.umd.js +5 -5
- package/bundles/sd-angular-core-select.umd.js.map +1 -1
- package/bundles/sd-angular-core-select.umd.min.js +2 -2
- package/bundles/sd-angular-core-select.umd.min.js.map +1 -1
- package/bundles/sd-angular-core-upload-file.umd.js +8 -1
- package/bundles/sd-angular-core-upload-file.umd.js.map +1 -1
- package/bundles/sd-angular-core-upload-file.umd.min.js +1 -1
- package/bundles/sd-angular-core-upload-file.umd.min.js.map +1 -1
- package/esm2015/select/src/lib/select.component.js +7 -8
- package/esm2015/upload-file/src/lib/upload-file.component.js +9 -2
- package/fesm2015/sd-angular-core-select.js +3 -3
- package/fesm2015/sd-angular-core-select.js.map +1 -1
- package/fesm2015/sd-angular-core-upload-file.js +8 -1
- package/fesm2015/sd-angular-core-upload-file.js.map +1 -1
- package/package.json +1 -1
- package/{sd-angular-core-1.3.211.tgz → sd-angular-core-1.3.213.tgz} +0 -0
- package/select/sd-angular-core-select.metadata.json +1 -1
- package/select/src/lib/select.component.d.ts +6 -7
- package/upload-file/sd-angular-core-upload-file.metadata.json +1 -1
- package/upload-file/src/lib/upload-file.component.d.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../node_modules/tslib/tslib.es6.js","../../../../projects/sd-core/upload-file/src/lib/upload-file.component.ts","../../../../projects/sd-core/upload-file/src/lib/upload-file.module.ts"],"names":["__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","this","n","v","op","TypeError","call","pop","length","push","Object","create","__values","o","s","m","i","__classPrivateFieldGet","receiver","state","kind","has","get","__classPrivateFieldSet","set","SdUploadFile","deviceService","ref","notifyService","translateService","_this","id","uuid.v4","_isMobileOrTablet","_canvas1","_canvas2","previewFiles","type","disabled","extensions","max","_srcs","previewWidth","previewHeight","align","_model","loaded","EventEmitter","modelChange","sdChange","_subscription","Subscription","_currentDropContainer","_srcChanges","Subject","_modelChanges","reload","Array","isArray","emit","_validate","file","split","name","translate","_a","lastDot","lastIndexOf","extension_1","substring","some","toUpperCase","join","maxSize","size","maxWidth","maxHeight","URL","window","webkitURL","img","Image","onload","width","height","src","createObjectURL","message","_b","_preview","sum","previewFile","reader","FileReader","evt","previewSrc","target","isPreviewImage","detectChanges","filter","readAsDataURL","_c","_d","onUpload","$","children","remove","append","on","_uploadFile","trigger","files","originFiles","notify","warning","item","scaleToPixel","_resize","files_1","files_1_1","extension","fileName","idx","indexOf","onRemove","confirmDelete","splice","onDrop","event","moveItemInArray","previousIndex","currentIndex","canvas1","document","createElement","setAttribute","ctx1","getContext","_scale","canvas2","ctx2","drawImage","toBlob","blob","_blobToFile","err","scaleToPixcel","ratio","Math","trunc","onSelect","selectedFile","temp","lastModifiedDate","Date","isDesktop","defineProperty","prototype","srcs","model","flag_1","map","baseSrc","ngOnInit","ngAfterViewInit","add","pipe","startWith","subscribe","dropElements","dropContainer_1","first","nativeElement","addEventListener","preventDefault","style","opacity","border","dataTransfer","changes","dropContainer_2","ngOnDestroy","unsubscribe","Component","args","selector","template","DeviceDetectorService","ChangeDetectorRef","SdNotifyService","SdTranslateService","Input","Output","ViewChildren","ViewChild","ContentChild","SdLabelDefDirective","NgModule","imports","CommonModule","DeviceDetectorModule","forRoot","MatButtonModule","MatIconModule","DragDropModule","SdNotifyModule","SdTranslateModule","SdImagePreviewModule","declarations","exports","providers"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, 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 {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectorRef,\r\n AfterViewInit,\r\n ElementRef,\r\n OnInit,\r\n ViewChildren,\r\n QueryList,\r\n OnDestroy,\r\n ViewChild,\r\n ContentChild\r\n} from '@angular/core';\r\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport * as uuid from 'uuid';\r\nimport $ from 'jquery';\r\nimport { SdNotifyService } from '@sd-angular/core/notify';\r\nimport { SdTranslateService } from '@sd-angular/core/translate';\r\nimport { Subscription, Subject } from 'rxjs';\r\nimport { startWith } from 'rxjs/operators';\r\nimport { SdLabelDefDirective } from '@sd-angular/core/common';\r\n\r\n// https://stackoverflow.com/questions/4459379/preview-an-image-before-it-is-uploaded\r\n@Component({\r\n selector: 'sd-upload-file',\r\n templateUrl: './upload-file.component.html',\r\n styleUrls: ['./upload-file.component.scss']\r\n})\r\nexport class SdUploadFile implements OnInit, AfterViewInit, OnDestroy {\r\n id = `I${uuid.v4()}`;\r\n #isMobileOrTablet = false;\r\n #canvas1 = `C${uuid.v4()}`;\r\n #canvas2 = `C${uuid.v4()}`;\r\n previewFiles: PreviewFile[] = [];\r\n selectedFile: PreviewFile;\r\n @Input() label: string;\r\n @Input() type: 'image' | 'file' = 'file';\r\n @Input() disabled = false;\r\n @Input() extensions: string[] = [];\r\n @Input() max = 1;\r\n @Input() maxSize: number;\r\n @Input() maxWidth: number;\r\n @Input() maxHeight: number;\r\n @Input() scaleToPixel: number;\r\n #srcs: string[];\r\n @Input() set srcs(srcs: string[]) {\r\n if (Array.isArray(srcs)) {\r\n this.#srcs = srcs;\r\n this.#srcChanges.next(this.#srcs);\r\n }\r\n }\r\n @Input() previewWidth: string = '100px';\r\n @Input() previewHeight: string = '100px';\r\n @Input() align: 'left' | 'center' = 'center';\r\n #model: PreviewFile[];\r\n @Input() set model(model: (string | PreviewFile)[]) {\r\n if (Array.isArray(model) && this.#model !== model) {\r\n let flag = false;\r\n this.#model = model.map(src => {\r\n if (typeof (src) === 'string') {\r\n let extension = null;\r\n const baseSrc = src.split('?')?.[0];\r\n const lastDot = baseSrc.lastIndexOf('.');\r\n if (lastDot > 0) {\r\n extension = baseSrc.substring(lastDot + 1);\r\n }\r\n flag = true;\r\n return {\r\n file: null,\r\n previewSrc: null,\r\n src,\r\n isPreviewImage: this.type === 'image',\r\n extension\r\n }\r\n }\r\n return src;\r\n });\r\n if (flag) {\r\n this.modelChange.emit(this.#model);\r\n }\r\n this.#modelChanges.next(this.#model);\r\n } else {\r\n this.#model = [];\r\n }\r\n }\r\n @Output() loaded = new EventEmitter<PreviewFile[]>();\r\n @Output() modelChange = new EventEmitter<PreviewFile[]>();\r\n @Output() sdChange = new EventEmitter<PreviewFile[]>();\r\n @ViewChildren('dropElement') dropElements: QueryList<ElementRef>;\r\n @ViewChild('canvas') canvas: ElementRef;\r\n @ContentChild(SdLabelDefDirective) sdLabelDef: SdLabelDefDirective;\r\n #subscription = new Subscription();\r\n #currentDropContainer: any;\r\n #srcChanges = new Subject();\r\n #modelChanges = new Subject();\r\n constructor(\r\n deviceService: DeviceDetectorService,\r\n private ref: ChangeDetectorRef,\r\n private notifyService: SdNotifyService,\r\n private translateService: SdTranslateService) {\r\n this.#isMobileOrTablet = !deviceService.isDesktop();\r\n }\r\n\r\n ngOnInit() {\r\n\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.#subscription.add(this.#srcChanges.pipe(startWith(this.#srcs)).subscribe(() => {\r\n if (!Array.isArray(this.#srcs)) {\r\n return;\r\n }\r\n const previewFiles = this.#srcs.map(src => {\r\n let extension = null;\r\n const baseSrc = src.split('?')?.[0];\r\n const lastDot = baseSrc.lastIndexOf('.');\r\n if (lastDot > 0) {\r\n extension = baseSrc.substring(lastDot + 1);\r\n }\r\n return {\r\n file: null,\r\n previewSrc: null,\r\n src,\r\n isPreviewImage: this.type === 'image',\r\n extension\r\n }\r\n });\r\n this.previewFiles = previewFiles;\r\n this.modelChange.emit(previewFiles);\r\n // this.sdChange.emit(previewFiles);\r\n }));\r\n this.#subscription.add(this.#modelChanges.pipe(startWith([])).subscribe(() => {\r\n if (Array.isArray(this.#model)) {\r\n this.previewFiles = this.#model;\r\n }\r\n }));\r\n if (!this.#isMobileOrTablet) {\r\n if (this.dropElements.length > 0) {\r\n const dropContainer = this.dropElements.first.nativeElement;\r\n this.#currentDropContainer = dropContainer;\r\n dropContainer.addEventListener('dragover', (evt: Event) => {\r\n evt.preventDefault();\r\n dropContainer.style.opacity = 0.9;\r\n dropContainer.style.border = '2px solid grey';\r\n });\r\n dropContainer.addEventListener('dragenter', (evt: Event) => {\r\n evt.preventDefault();\r\n });\r\n dropContainer.addEventListener('dragleave', (evt: Event) => {\r\n dropContainer.style.opacity = 0.6;\r\n dropContainer.style.border = '2px dashed grey';\r\n });\r\n dropContainer.addEventListener('drop', async (evt: DragEvent) => {\r\n evt.preventDefault();\r\n dropContainer.style.opacity = 0.6;\r\n dropContainer.style.border = '2px dashed grey';\r\n await this.#uploadFile(evt.dataTransfer);\r\n });\r\n }\r\n this.#subscription.add(this.dropElements.changes.subscribe(() => {\r\n if (this.dropElements.length > 0 && this.#currentDropContainer !== this.dropElements.first.nativeElement) {\r\n const dropContainer = this.dropElements.first.nativeElement;\r\n this.#currentDropContainer = dropContainer;\r\n dropContainer.addEventListener('dragover', (evt: Event) => {\r\n evt.preventDefault();\r\n dropContainer.style.opacity = 0.9;\r\n dropContainer.style.border = '2px solid grey';\r\n });\r\n dropContainer.addEventListener('dragenter', (evt: Event) => {\r\n evt.preventDefault();\r\n });\r\n dropContainer.addEventListener('dragleave', (evt: Event) => {\r\n dropContainer.style.opacity = 0.6;\r\n dropContainer.style.border = '2px dashed grey';\r\n });\r\n dropContainer.addEventListener('drop', async (evt: DragEvent) => {\r\n evt.preventDefault();\r\n dropContainer.style.opacity = 0.6;\r\n dropContainer.style.border = '2px dashed grey';\r\n await this.#uploadFile(evt.dataTransfer);\r\n });\r\n }\r\n }));\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n reload = (previewFiles: PreviewFile[]) => {\r\n if (Array.isArray(previewFiles)) {\r\n this.previewFiles = previewFiles;\r\n this.modelChange.emit(previewFiles);\r\n // this.sdChange.emit(previewFiles);\r\n }\r\n }\r\n\r\n #validate = async (file: File): Promise<string> => {\r\n if (this.type === 'image') {\r\n if (file.type.split('/')[0] !== 'image') {\r\n return `[${file.name}] ${this.translateService.translate('Uploaded file is not an image')}`;\r\n }\r\n }\r\n if (this.extensions?.length) {\r\n const lastDot = file.name.lastIndexOf('.');\r\n const extension = file.name.substring(lastDot + 1);\r\n if (!this.extensions.some(e => e.toUpperCase() === extension.toUpperCase())) {\r\n return `[${file.name}] ${this.translateService.translate('Uploaded file is not match extension')} ${this.extensions.join(', ')}`;\r\n }\r\n }\r\n if (this.maxSize) {\r\n if (this.maxSize * 1024 * 1024 < file.size) {\r\n return `[${file.name}] ${this.translateService.translate('Max file size')} ${this.maxSize} Mbs`;\r\n }\r\n }\r\n if (this.type === 'image' && (this.maxWidth || this.maxHeight)) {\r\n const message: string = await new Promise(resolve => {\r\n const URL = window.URL || window.webkitURL;\r\n const img = new Image();\r\n img.onload = () => {\r\n if (this.maxWidth && img.width > this.maxWidth) {\r\n resolve(`[${file.name}] ${this.translateService.translate('Max image width')} ${this.maxWidth}px`);\r\n }\r\n if (this.maxHeight && img.height > this.maxHeight) {\r\n resolve(`[${file.name}] ${this.translateService.translate('Max image height')} ${this.maxHeight}px`);\r\n }\r\n resolve(null);\r\n };\r\n img.src = URL.createObjectURL(file);\r\n });\r\n if (message) {\r\n return message;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n #preview = () => {\r\n let sum = 0;\r\n for (const previewFile of this.previewFiles.filter(e => e.file)) {\r\n const reader = new FileReader();\r\n reader.onload = (evt) => {\r\n previewFile.previewSrc = evt.target.result;\r\n previewFile.isPreviewImage = previewFile.file?.type.split('/')[0] === 'image';\r\n this.ref.detectChanges();\r\n sum++;\r\n if (sum === this.previewFiles.filter(e => e.file).length) this.loaded.emit(this.previewFiles)\r\n }\r\n reader.readAsDataURL(previewFile.file);\r\n }\r\n }\r\n\r\n onUpload = (previewFile?: PreviewFile) => {\r\n if ($(`#${this.id}`).length) {\r\n $('body').children(`#${this.id}`).remove();\r\n }\r\n if (previewFile || this.max === 1) {\r\n $('body').append(`<input id=\"${this.id}\" style=\"display: none\" type=\"file\" />`);\r\n } else {\r\n $('body').append(`<input id=\"${this.id}\" style=\"display: none\" type=\"file\" multiple />`);\r\n }\r\n $(`#${this.id}`).on('change', async (evt: any) => {\r\n await this.#uploadFile(evt.target, previewFile);\r\n $('body').children(`#${this.id}`).remove();\r\n });\r\n $(`#${this.id}`).trigger('click');\r\n }\r\n\r\n #uploadFile = async (target: DataTransfer, previewFile?: PreviewFile) => {\r\n if (!target.files.length) {\r\n return;\r\n }\r\n const originFiles = target.files;\r\n const files: File[] = [];\r\n if (!previewFile) {\r\n if (originFiles.length + this.previewFiles.length > this.max) {\r\n this.notifyService.notify.warning(`${this.translateService.translate('Max number of files')} ${this.max}`);\r\n return;\r\n }\r\n for (let i = 0; i < originFiles.length; i++) {\r\n let file = originFiles.item(i);\r\n if (this.type === 'image' && this.scaleToPixel > 0) {\r\n file = await this.#resize(file);\r\n }\r\n const message = await this.#validate(file);\r\n if (message) {\r\n this.notifyService.notify.warning(message);\r\n return;\r\n }\r\n files.push(file);\r\n }\r\n for (const file of files) {\r\n const lastDot = file.name.lastIndexOf('.');\r\n const extension = file.name.substring(lastDot + 1);\r\n this.previewFiles.push({\r\n file,\r\n isPreviewImage: false,\r\n previewSrc: null,\r\n src: null,\r\n fileName: file.name,\r\n extension\r\n });\r\n }\r\n } else {\r\n const idx = this.previewFiles.indexOf(previewFile);\r\n let file = originFiles.item(0);\r\n if (this.type === 'image' && this.scaleToPixel > 0) {\r\n file = await this.#resize(file);\r\n }\r\n const lastDot = file.name.lastIndexOf('.');\r\n const extension = file.name.substring(lastDot + 1);\r\n this.previewFiles[idx] = {\r\n file,\r\n isPreviewImage: false,\r\n previewSrc: null,\r\n src: null,\r\n fileName: file.name,\r\n extension\r\n };\r\n }\r\n this.#preview();\r\n this.modelChange.emit(this.previewFiles);\r\n this.sdChange.emit(this.previewFiles);\r\n this.ref.detectChanges();\r\n }\r\n\r\n onRemove = (previewFile: PreviewFile) => {\r\n this.notifyService.confirmDelete().then(() => {\r\n const idx = this.previewFiles.indexOf(previewFile);\r\n this.previewFiles.splice(idx, 1);\r\n this.modelChange.emit(this.previewFiles);\r\n this.sdChange.emit(this.previewFiles);\r\n });\r\n }\r\n\r\n onDrop = (event: CdkDragDrop<string[]>) => {\r\n moveItemInArray(this.previewFiles, event.previousIndex, event.currentIndex);\r\n this.modelChange.emit(this.previewFiles);\r\n this.sdChange.emit(this.previewFiles);\r\n }\r\n\r\n #resize = async (file: File): Promise<File> => {\r\n if (!this.scaleToPixel) {\r\n return file;\r\n }\r\n const lastDot = file.name.lastIndexOf('.');\r\n if (lastDot === -1) {\r\n return file;\r\n }\r\n return await new Promise((resolve, reject) => {\r\n const URL = window.URL || window.webkitURL;\r\n const img = new Image();\r\n img.onload = () => {\r\n try {\r\n if (img.width * img.height <= this.scaleToPixel) {\r\n return resolve(file);\r\n }\r\n const canvas1 = document.createElement('canvas');\r\n canvas1.setAttribute('id', this.#canvas1);\r\n const ctx1 = canvas1.getContext('2d');\r\n const { width, height } = this.#scale(img.width, img.height, this.scaleToPixel);\r\n canvas1.width = width;\r\n canvas1.height = height;\r\n\r\n const canvas2 = document.createElement('canvas');\r\n canvas2.setAttribute('id', this.#canvas2);\r\n const ctx2 = canvas2.getContext('2d');\r\n canvas2.width = width;\r\n canvas2.height = height;\r\n ctx2.drawImage(img, 0, 0, canvas2.width, canvas2.height);\r\n ctx2.drawImage(canvas2, 0, 0, canvas2.width * 0.5, canvas2.height * 0.5);\r\n ctx1.drawImage(canvas2, 0, 0, canvas2.width * 0.5, canvas2.height * 0.5, 0, 0, canvas1.width, canvas1.height);\r\n canvas1.toBlob(blob => {\r\n resolve(this.#blobToFile(blob, `${file.name.substring(0, lastDot)}.png`));\r\n });\r\n } catch (err) {\r\n reject(err);\r\n } finally {\r\n $(`#${this.#canvas1}`).remove();\r\n $(`#${this.#canvas2}`).remove();\r\n }\r\n };\r\n img.src = URL.createObjectURL(file);\r\n });\r\n }\r\n\r\n #scale = (width: number, height: number, scaleToPixcel: number) => {\r\n if (!width || !height || !scaleToPixcel) {\r\n return {\r\n width,\r\n height\r\n };\r\n }\r\n const ratio = width / height;\r\n for (let i = 0; i < width; i++) {\r\n width -= i;\r\n height = Math.trunc(width / ratio);\r\n if (width * height <= scaleToPixcel) {\r\n break;\r\n }\r\n }\r\n return {\r\n width,\r\n height\r\n };\r\n }\r\n\r\n onSelect = (file: PreviewFile) => {\r\n if (!this.#isMobileOrTablet) {\r\n return;\r\n }\r\n if (this.selectedFile !== file) {\r\n this.selectedFile = file;\r\n } else {\r\n this.selectedFile = null;\r\n }\r\n }\r\n\r\n #blobToFile = (blob: Blob, fileName: string): File => {\r\n const temp: any = blob;\r\n temp.lastModifiedDate = new Date();\r\n temp.name = fileName;\r\n return blob as File;\r\n }\r\n}\r\n\r\nexport interface PreviewFile {\r\n file: File;\r\n src: string;\r\n previewSrc: string | ArrayBuffer;\r\n isPreviewImage: boolean;\r\n fileName?: string;\r\n extension?: string;\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DeviceDetectorModule } from 'ngx-device-detector';\r\nimport { SdUploadFile } from './upload-file.component';\r\nimport { SdNotifyModule } from '@sd-angular/core/notify';\r\nimport { SdTranslateModule } from '@sd-angular/core/translate';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { SdImagePreviewModule } from '@sd-angular/core/image-preview';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n DeviceDetectorModule.forRoot(),\r\n MatButtonModule,\r\n MatIconModule,\r\n DragDropModule,\r\n SdNotifyModule,\r\n SdTranslateModule,\r\n SdImagePreviewModule\r\n ],\r\n declarations: [\r\n SdUploadFile\r\n ],\r\n exports: [\r\n SdUploadFile\r\n ],\r\n providers: [\r\n ]\r\n})\r\nexport class SdUploadFileModule { }\r\n"]}
|
|
1
|
+
{"version":3,"sources":["../../../../node_modules/tslib/tslib.es6.js","../../../../projects/sd-core/upload-file/src/lib/upload-file.component.ts","../../../../projects/sd-core/upload-file/src/lib/upload-file.module.ts"],"names":["__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","t","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","this","n","v","op","TypeError","call","pop","length","push","Object","create","__values","o","s","m","i","__classPrivateFieldGet","receiver","state","kind","has","get","__classPrivateFieldSet","set","SdUploadFile","deviceService","ref","notifyService","translateService","_this","id","uuid.v4","_isMobileOrTablet","_canvas1","_canvas2","previewFiles","type","disabled","extensions","max","_srcs","previewWidth","previewHeight","align","_model","loaded","EventEmitter","modelChange","sdChange","_subscription","Subscription","_currentDropContainer","_srcChanges","Subject","_modelChanges","reload","Array","isArray","emit","_validate","file","split","name","translate","_a","lastDot","lastIndexOf","extension_1","substring","some","toUpperCase","join","maxSize","size","maxWidth","maxHeight","imageValidatorFn","URL","window","webkitURL","img","Image","onload","width","height","src","createObjectURL","message","_b","_preview","sum","previewFile","reader","FileReader","evt","previewSrc","target","isPreviewImage","detectChanges","filter","readAsDataURL","_c","_d","onUpload","$","children","remove","append","on","_uploadFile","trigger","files","originFiles","notify","warning","item","scaleToPixel","_resize","files_1","files_1_1","extension","fileName","idx","indexOf","onRemove","confirmDelete","splice","onDrop","event","moveItemInArray","previousIndex","currentIndex","canvas1","document","createElement","setAttribute","ctx1","getContext","_scale","canvas2","ctx2","drawImage","toBlob","blob","_blobToFile","err","scaleToPixcel","ratio","Math","trunc","onSelect","selectedFile","temp","lastModifiedDate","Date","isDesktop","defineProperty","prototype","srcs","model","flag_1","map","baseSrc","ngOnInit","ngAfterViewInit","add","pipe","startWith","subscribe","dropElements","dropContainer_1","first","nativeElement","addEventListener","preventDefault","style","opacity","border","dataTransfer","changes","dropContainer_2","ngOnDestroy","unsubscribe","Component","args","selector","template","DeviceDetectorService","ChangeDetectorRef","SdNotifyService","SdTranslateService","Input","Output","ViewChildren","ViewChild","ContentChild","SdLabelDefDirective","NgModule","imports","CommonModule","DeviceDetectorModule","forRoot","MatButtonModule","MatIconModule","DragDropModule","SdNotifyModule","SdTranslateModule","SdImagePreviewModule","declarations","exports","providers"],"mappings":"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","sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, 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 {\r\n Component,\r\n Input,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectorRef,\r\n AfterViewInit,\r\n ElementRef,\r\n OnInit,\r\n ViewChildren,\r\n QueryList,\r\n OnDestroy,\r\n ViewChild,\r\n ContentChild\r\n} from '@angular/core';\r\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport { DeviceDetectorService } from 'ngx-device-detector';\r\nimport * as uuid from 'uuid';\r\nimport $ from 'jquery';\r\nimport { SdNotifyService } from '@sd-angular/core/notify';\r\nimport { SdTranslateService } from '@sd-angular/core/translate';\r\nimport { Subscription, Subject } from 'rxjs';\r\nimport { startWith } from 'rxjs/operators';\r\nimport { SdLabelDefDirective } from '@sd-angular/core/common';\r\n\r\n// https://stackoverflow.com/questions/4459379/preview-an-image-before-it-is-uploaded\r\n@Component({\r\n selector: 'sd-upload-file',\r\n templateUrl: './upload-file.component.html',\r\n styleUrls: ['./upload-file.component.scss']\r\n})\r\nexport class SdUploadFile implements OnInit, AfterViewInit, OnDestroy {\r\n id = `I${uuid.v4()}`;\r\n #isMobileOrTablet = false;\r\n #canvas1 = `C${uuid.v4()}`;\r\n #canvas2 = `C${uuid.v4()}`;\r\n previewFiles: PreviewFile[] = [];\r\n selectedFile: PreviewFile;\r\n @Input() label: string;\r\n @Input() type: 'image' | 'file' = 'file';\r\n @Input() disabled = false;\r\n @Input() extensions: string[] = [];\r\n @Input() max = 1;\r\n @Input() maxSize: number;\r\n @Input() maxWidth: number;\r\n @Input() maxHeight: number;\r\n @Input() scaleToPixel: number;\r\n #srcs: string[];\r\n @Input() set srcs(srcs: string[]) {\r\n if (Array.isArray(srcs)) {\r\n this.#srcs = srcs;\r\n this.#srcChanges.next(this.#srcs);\r\n }\r\n }\r\n @Input() previewWidth: string = '100px';\r\n @Input() previewHeight: string = '100px';\r\n @Input() align: 'left' | 'center' = 'center';\r\n @Input() imageValidatorFn: (image: HTMLImageElement) => string;\r\n #model: PreviewFile[];\r\n @Input() set model(model: (string | PreviewFile)[]) {\r\n if (Array.isArray(model) && this.#model !== model) {\r\n let flag = false;\r\n this.#model = model.map(src => {\r\n if (typeof (src) === 'string') {\r\n let extension = null;\r\n const baseSrc = src.split('?')?.[0];\r\n const lastDot = baseSrc.lastIndexOf('.');\r\n if (lastDot > 0) {\r\n extension = baseSrc.substring(lastDot + 1);\r\n }\r\n flag = true;\r\n return {\r\n file: null,\r\n previewSrc: null,\r\n src,\r\n isPreviewImage: this.type === 'image',\r\n extension\r\n }\r\n }\r\n return src;\r\n });\r\n if (flag) {\r\n this.modelChange.emit(this.#model);\r\n }\r\n this.#modelChanges.next(this.#model);\r\n } else {\r\n this.#model = [];\r\n }\r\n }\r\n @Output() loaded = new EventEmitter<PreviewFile[]>();\r\n @Output() modelChange = new EventEmitter<PreviewFile[]>();\r\n @Output() sdChange = new EventEmitter<PreviewFile[]>();\r\n @ViewChildren('dropElement') dropElements: QueryList<ElementRef>;\r\n @ViewChild('canvas') canvas: ElementRef;\r\n @ContentChild(SdLabelDefDirective) sdLabelDef: SdLabelDefDirective;\r\n #subscription = new Subscription();\r\n #currentDropContainer: any;\r\n #srcChanges = new Subject();\r\n #modelChanges = new Subject();\r\n constructor(\r\n deviceService: DeviceDetectorService,\r\n private ref: ChangeDetectorRef,\r\n private notifyService: SdNotifyService,\r\n private translateService: SdTranslateService) {\r\n this.#isMobileOrTablet = !deviceService.isDesktop();\r\n }\r\n\r\n ngOnInit() {\r\n\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.#subscription.add(this.#srcChanges.pipe(startWith(this.#srcs)).subscribe(() => {\r\n if (!Array.isArray(this.#srcs)) {\r\n return;\r\n }\r\n const previewFiles = this.#srcs.map(src => {\r\n let extension = null;\r\n const baseSrc = src.split('?')?.[0];\r\n const lastDot = baseSrc.lastIndexOf('.');\r\n if (lastDot > 0) {\r\n extension = baseSrc.substring(lastDot + 1);\r\n }\r\n return {\r\n file: null,\r\n previewSrc: null,\r\n src,\r\n isPreviewImage: this.type === 'image',\r\n extension\r\n }\r\n });\r\n this.previewFiles = previewFiles;\r\n this.modelChange.emit(previewFiles);\r\n // this.sdChange.emit(previewFiles);\r\n }));\r\n this.#subscription.add(this.#modelChanges.pipe(startWith([])).subscribe(() => {\r\n if (Array.isArray(this.#model)) {\r\n this.previewFiles = this.#model;\r\n }\r\n }));\r\n if (!this.#isMobileOrTablet) {\r\n if (this.dropElements.length > 0) {\r\n const dropContainer = this.dropElements.first.nativeElement;\r\n this.#currentDropContainer = dropContainer;\r\n dropContainer.addEventListener('dragover', (evt: Event) => {\r\n evt.preventDefault();\r\n dropContainer.style.opacity = 0.9;\r\n dropContainer.style.border = '2px solid grey';\r\n });\r\n dropContainer.addEventListener('dragenter', (evt: Event) => {\r\n evt.preventDefault();\r\n });\r\n dropContainer.addEventListener('dragleave', (evt: Event) => {\r\n dropContainer.style.opacity = 0.6;\r\n dropContainer.style.border = '2px dashed grey';\r\n });\r\n dropContainer.addEventListener('drop', async (evt: DragEvent) => {\r\n evt.preventDefault();\r\n dropContainer.style.opacity = 0.6;\r\n dropContainer.style.border = '2px dashed grey';\r\n await this.#uploadFile(evt.dataTransfer);\r\n });\r\n }\r\n this.#subscription.add(this.dropElements.changes.subscribe(() => {\r\n if (this.dropElements.length > 0 && this.#currentDropContainer !== this.dropElements.first.nativeElement) {\r\n const dropContainer = this.dropElements.first.nativeElement;\r\n this.#currentDropContainer = dropContainer;\r\n dropContainer.addEventListener('dragover', (evt: Event) => {\r\n evt.preventDefault();\r\n dropContainer.style.opacity = 0.9;\r\n dropContainer.style.border = '2px solid grey';\r\n });\r\n dropContainer.addEventListener('dragenter', (evt: Event) => {\r\n evt.preventDefault();\r\n });\r\n dropContainer.addEventListener('dragleave', (evt: Event) => {\r\n dropContainer.style.opacity = 0.6;\r\n dropContainer.style.border = '2px dashed grey';\r\n });\r\n dropContainer.addEventListener('drop', async (evt: DragEvent) => {\r\n evt.preventDefault();\r\n dropContainer.style.opacity = 0.6;\r\n dropContainer.style.border = '2px dashed grey';\r\n await this.#uploadFile(evt.dataTransfer);\r\n });\r\n }\r\n }));\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n reload = (previewFiles: PreviewFile[]) => {\r\n if (Array.isArray(previewFiles)) {\r\n this.previewFiles = previewFiles;\r\n this.modelChange.emit(previewFiles);\r\n // this.sdChange.emit(previewFiles);\r\n }\r\n }\r\n\r\n #validate = async (file: File): Promise<string> => {\r\n if (this.type === 'image') {\r\n if (file.type.split('/')[0] !== 'image') {\r\n return `[${file.name}] ${this.translateService.translate('Uploaded file is not an image')}`;\r\n }\r\n }\r\n if (this.extensions?.length) {\r\n const lastDot = file.name.lastIndexOf('.');\r\n const extension = file.name.substring(lastDot + 1);\r\n if (!this.extensions.some(e => e.toUpperCase() === extension.toUpperCase())) {\r\n return `[${file.name}] ${this.translateService.translate('Uploaded file is not match extension')} ${this.extensions.join(', ')}`;\r\n }\r\n }\r\n if (this.maxSize) {\r\n if (this.maxSize * 1024 * 1024 < file.size) {\r\n return `[${file.name}] ${this.translateService.translate('Max file size')} ${this.maxSize} Mbs`;\r\n }\r\n }\r\n if (this.type === 'image' && (this.maxWidth || this.maxHeight || this.imageValidatorFn)) {\r\n const message: string = await new Promise(resolve => {\r\n const URL = window.URL || window.webkitURL;\r\n const img = new Image();\r\n img.onload = () => {\r\n if (this.maxWidth && img.width > this.maxWidth) {\r\n resolve(`[${file.name}] ${this.translateService.translate('Max image width')} ${this.maxWidth}px`);\r\n return;\r\n }\r\n if (this.maxHeight && img.height > this.maxHeight) {\r\n resolve(`[${file.name}] ${this.translateService.translate('Max image height')} ${this.maxHeight}px`);\r\n return;\r\n }\r\n if (this.imageValidatorFn) {\r\n resolve(this.imageValidatorFn(img))\r\n return;\r\n }\r\n resolve(null);\r\n };\r\n img.src = URL.createObjectURL(file);\r\n });\r\n if (message) {\r\n return message;\r\n }\r\n }\r\n return null;\r\n }\r\n\r\n #preview = () => {\r\n let sum = 0;\r\n for (const previewFile of this.previewFiles.filter(e => e.file)) {\r\n const reader = new FileReader();\r\n reader.onload = (evt) => {\r\n previewFile.previewSrc = evt.target.result;\r\n previewFile.isPreviewImage = previewFile.file?.type.split('/')[0] === 'image';\r\n this.ref.detectChanges();\r\n sum++;\r\n if (sum === this.previewFiles.filter(e => e.file).length) this.loaded.emit(this.previewFiles)\r\n }\r\n reader.readAsDataURL(previewFile.file);\r\n }\r\n }\r\n\r\n onUpload = (previewFile?: PreviewFile) => {\r\n if ($(`#${this.id}`).length) {\r\n $('body').children(`#${this.id}`).remove();\r\n }\r\n if (previewFile || this.max === 1) {\r\n $('body').append(`<input id=\"${this.id}\" style=\"display: none\" type=\"file\" />`);\r\n } else {\r\n $('body').append(`<input id=\"${this.id}\" style=\"display: none\" type=\"file\" multiple />`);\r\n }\r\n $(`#${this.id}`).on('change', async (evt: any) => {\r\n await this.#uploadFile(evt.target, previewFile);\r\n $('body').children(`#${this.id}`).remove();\r\n });\r\n $(`#${this.id}`).trigger('click');\r\n }\r\n\r\n #uploadFile = async (target: DataTransfer, previewFile?: PreviewFile) => {\r\n if (!target.files.length) {\r\n return;\r\n }\r\n const originFiles = target.files;\r\n const files: File[] = [];\r\n if (!previewFile) {\r\n if (originFiles.length + this.previewFiles.length > this.max) {\r\n this.notifyService.notify.warning(`${this.translateService.translate('Max number of files')} ${this.max}`);\r\n return;\r\n }\r\n for (let i = 0; i < originFiles.length; i++) {\r\n let file = originFiles.item(i);\r\n if (this.type === 'image' && this.scaleToPixel > 0) {\r\n file = await this.#resize(file);\r\n }\r\n const message = await this.#validate(file);\r\n if (message) {\r\n this.notifyService.notify.warning(message);\r\n return;\r\n }\r\n files.push(file);\r\n }\r\n for (const file of files) {\r\n const lastDot = file.name.lastIndexOf('.');\r\n const extension = file.name.substring(lastDot + 1);\r\n this.previewFiles.push({\r\n file,\r\n isPreviewImage: false,\r\n previewSrc: null,\r\n src: null,\r\n fileName: file.name,\r\n extension\r\n });\r\n }\r\n } else {\r\n const idx = this.previewFiles.indexOf(previewFile);\r\n let file = originFiles.item(0);\r\n if (this.type === 'image' && this.scaleToPixel > 0) {\r\n file = await this.#resize(file);\r\n }\r\n const lastDot = file.name.lastIndexOf('.');\r\n const extension = file.name.substring(lastDot + 1);\r\n this.previewFiles[idx] = {\r\n file,\r\n isPreviewImage: false,\r\n previewSrc: null,\r\n src: null,\r\n fileName: file.name,\r\n extension\r\n };\r\n }\r\n this.#preview();\r\n this.modelChange.emit(this.previewFiles);\r\n this.sdChange.emit(this.previewFiles);\r\n this.ref.detectChanges();\r\n }\r\n\r\n onRemove = (previewFile: PreviewFile) => {\r\n this.notifyService.confirmDelete().then(() => {\r\n const idx = this.previewFiles.indexOf(previewFile);\r\n this.previewFiles.splice(idx, 1);\r\n this.modelChange.emit(this.previewFiles);\r\n this.sdChange.emit(this.previewFiles);\r\n });\r\n }\r\n\r\n onDrop = (event: CdkDragDrop<string[]>) => {\r\n moveItemInArray(this.previewFiles, event.previousIndex, event.currentIndex);\r\n this.modelChange.emit(this.previewFiles);\r\n this.sdChange.emit(this.previewFiles);\r\n }\r\n\r\n #resize = async (file: File): Promise<File> => {\r\n if (!this.scaleToPixel) {\r\n return file;\r\n }\r\n const lastDot = file.name.lastIndexOf('.');\r\n if (lastDot === -1) {\r\n return file;\r\n }\r\n return await new Promise((resolve, reject) => {\r\n const URL = window.URL || window.webkitURL;\r\n const img = new Image();\r\n img.onload = () => {\r\n try {\r\n if (img.width * img.height <= this.scaleToPixel) {\r\n return resolve(file);\r\n }\r\n const canvas1 = document.createElement('canvas');\r\n canvas1.setAttribute('id', this.#canvas1);\r\n const ctx1 = canvas1.getContext('2d');\r\n const { width, height } = this.#scale(img.width, img.height, this.scaleToPixel);\r\n canvas1.width = width;\r\n canvas1.height = height;\r\n\r\n const canvas2 = document.createElement('canvas');\r\n canvas2.setAttribute('id', this.#canvas2);\r\n const ctx2 = canvas2.getContext('2d');\r\n canvas2.width = width;\r\n canvas2.height = height;\r\n ctx2.drawImage(img, 0, 0, canvas2.width, canvas2.height);\r\n ctx2.drawImage(canvas2, 0, 0, canvas2.width * 0.5, canvas2.height * 0.5);\r\n ctx1.drawImage(canvas2, 0, 0, canvas2.width * 0.5, canvas2.height * 0.5, 0, 0, canvas1.width, canvas1.height);\r\n canvas1.toBlob(blob => {\r\n resolve(this.#blobToFile(blob, `${file.name.substring(0, lastDot)}.png`));\r\n });\r\n } catch (err) {\r\n reject(err);\r\n } finally {\r\n $(`#${this.#canvas1}`).remove();\r\n $(`#${this.#canvas2}`).remove();\r\n }\r\n };\r\n img.src = URL.createObjectURL(file);\r\n });\r\n }\r\n\r\n #scale = (width: number, height: number, scaleToPixcel: number) => {\r\n if (!width || !height || !scaleToPixcel) {\r\n return {\r\n width,\r\n height\r\n };\r\n }\r\n const ratio = width / height;\r\n for (let i = 0; i < width; i++) {\r\n width -= i;\r\n height = Math.trunc(width / ratio);\r\n if (width * height <= scaleToPixcel) {\r\n break;\r\n }\r\n }\r\n return {\r\n width,\r\n height\r\n };\r\n }\r\n\r\n onSelect = (file: PreviewFile) => {\r\n if (!this.#isMobileOrTablet) {\r\n return;\r\n }\r\n if (this.selectedFile !== file) {\r\n this.selectedFile = file;\r\n } else {\r\n this.selectedFile = null;\r\n }\r\n }\r\n\r\n #blobToFile = (blob: Blob, fileName: string): File => {\r\n const temp: any = blob;\r\n temp.lastModifiedDate = new Date();\r\n temp.name = fileName;\r\n return blob as File;\r\n }\r\n}\r\n\r\nexport interface PreviewFile {\r\n file: File;\r\n src: string;\r\n previewSrc: string | ArrayBuffer;\r\n isPreviewImage: boolean;\r\n fileName?: string;\r\n extension?: string;\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DeviceDetectorModule } from 'ngx-device-detector';\r\nimport { SdUploadFile } from './upload-file.component';\r\nimport { SdNotifyModule } from '@sd-angular/core/notify';\r\nimport { SdTranslateModule } from '@sd-angular/core/translate';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { SdImagePreviewModule } from '@sd-angular/core/image-preview';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n DeviceDetectorModule.forRoot(),\r\n MatButtonModule,\r\n MatIconModule,\r\n DragDropModule,\r\n SdNotifyModule,\r\n SdTranslateModule,\r\n SdImagePreviewModule\r\n ],\r\n declarations: [\r\n SdUploadFile\r\n ],\r\n exports: [\r\n SdUploadFile\r\n ],\r\n providers: [\r\n ]\r\n})\r\nexport class SdUploadFileModule { }\r\n"]}
|
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
var _input, _name, _form, _itemsChanges, _delay, _validator, _subscription, _allItems, _allItem, _cache, _updateValidator, _loadSelectedItems, _loadItems, _onChange, _customValidator, _getCopyText;
|
|
2
2
|
import { __awaiter, __classPrivateFieldGet, __classPrivateFieldSet } from "tslib";
|
|
3
|
-
import {
|
|
3
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, EventEmitter, Inject, Input, Optional, Output, ViewChild } from '@angular/core';
|
|
4
4
|
import { NgForm, Validators } from '@angular/forms';
|
|
5
|
-
import
|
|
5
|
+
import { MatInput } from '@angular/material/input';
|
|
6
|
+
import { FORM_CONFIG, SdFormControl, SdLabelDefDirective, SdViewDefDirective } from '@sd-angular/core/common';
|
|
6
7
|
import hash from 'object-hash';
|
|
7
|
-
import { BehaviorSubject,
|
|
8
|
+
import { BehaviorSubject, Subject, Subscription, combineLatest } from 'rxjs';
|
|
8
9
|
import { debounceTime, map, startWith, switchMap } from 'rxjs/operators';
|
|
9
|
-
import
|
|
10
|
+
import * as uuid from 'uuid';
|
|
10
11
|
import { SdSelectDisplayDefDirective } from './select-display-def.directive';
|
|
11
|
-
import { FORM_CONFIG, SdFormControl, SdViewDefDirective } from '@sd-angular/core/common';
|
|
12
|
-
import { SdLabelDefDirective } from '@sd-angular/core/common';
|
|
13
12
|
export class SdSelect {
|
|
14
13
|
constructor(ref, formConfig) {
|
|
15
14
|
this.ref = ref;
|
|
@@ -425,7 +424,7 @@ _input = new WeakMap(), _name = new WeakMap(), _form = new WeakMap(), _itemsChan
|
|
|
425
424
|
SdSelect.decorators = [
|
|
426
425
|
{ type: Component, args: [{
|
|
427
426
|
selector: 'sd-select',
|
|
428
|
-
template: "<ng-container *ngIf=\"!appearance && sdLabelDef?.templateRef\">\r\n <ng-container *ngTemplateOutlet=\"sdLabelDef.templateRef\"
|
|
427
|
+
template: "<ng-container *ngIf=\"!appearance && sdLabelDef?.templateRef\">\r\n <ng-container *ngTemplateOutlet=\"sdLabelDef.templateRef\"> </ng-container>\r\n</ng-container>\r\n<label *ngIf=\"!appearance && label && !sdLabelDef?.templateRef\" class=\"d-block mb-0 T14M\"\r\n >{{ label }} <span class=\"text-danger mb-2\" *ngIf=\"isRequired\">*</span></label\r\n>\r\n<div\r\n class=\"d-flex align-items-center\"\r\n [class.sd-view]=\"sdView?.templateRef\"\r\n [class.c-focused]=\"isFocused\"\r\n [class.c-disabled]=\"formControl.disabled\"\r\n (click)=\"onClick()\">\r\n <ng-container *ngIf=\"sdView?.templateRef && !isFocused; else default\">\r\n <ng-container *ngTemplateOutlet=\"sdView.templateRef; context: { value: formControl.value, selectedItems: selectedItems | async }\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-template #default>\r\n <mat-form-field\r\n class=\"sd-md\"\r\n [ngClass]=\"{ 'sd-sm': size === 'sm', 'no-padding-wrapper': disableErrorMessage }\"\r\n [appearance]=\"appearance || 'outline'\">\r\n <mat-label *ngIf=\"appearance && label\">{{ label }}</mat-label>\r\n <mat-select\r\n *ngIf=\"multiple\"\r\n #select\r\n [formControl]=\"formControl\"\r\n [placeholder]=\"placeholder || (appearance ? label : '')\"\r\n multiple\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n disableOptionCentering=\"true\"\r\n panelClass=\"sd-select-panel\"\r\n [ngClass]=\"{ 'sd-selected': !isRequired && (multiple ? formControl?.value?.length : formControl?.value != null) }\"\r\n [required]=\"isRequired\"\r\n (openedChange)=\"onOpenChange($event)\"\r\n [attr.data-qclabel]=\"label\"\r\n [attr.data-qcid]=\"qcId\"\r\n [sdPopoverDisabled]=\"!formControl.disabled || !formControl?.value?.length\"\r\n [sdPopoverTriggerFor]=\"popoverValues\">\r\n <mat-select-trigger>\r\n {{ display | async }}\r\n </mat-select-trigger>\r\n <mat-option *ngIf=\"filtered\" class=\"sd-filtered-input\" (keyup.Space)=\"$event.stopPropagation()\" disabled=\"true\">\r\n <mat-form-field class=\"sd-md\" appearance=\"outline\">\r\n <mat-icon matPrefix>search</mat-icon>\r\n <input\r\n aria-hidden=\"true\"\r\n #input\r\n placeholder=\"{{ 'Search' | sdTranslate }}\"\r\n matInput\r\n autocomplete=\"off\"\r\n (keydown)=\"$event.stopPropagation()\"\r\n (keyup)=\"searchTerm$.next($event.target.value)\" />\r\n </mat-form-field>\r\n </mat-option>\r\n <ng-container *ngIf=\"multiple && selectAll\">\r\n <mat-checkbox class=\"mat-option\" [(ngModel)]=\"allSelected\" [ngModelOptions]=\"{ standalone: true }\" (change)=\"onSelectAll()\">\r\n T\u1EA5t c\u1EA3</mat-checkbox\r\n >\r\n </ng-container>\r\n <ng-container *ngIf=\"valueField && displayField\">\r\n <mat-option *ngFor=\"let item of filteredItems | async; trackBy: trackByKey\" [value]=\"item[valueField]\">\r\n <div matTooltipPosition=\"above\" [matTooltip]=\"item[displayField]\">\r\n <ng-container *ngIf=\"selectDisplayDef?.templateRef\">\r\n <ng-container *ngTemplateOutlet=\"selectDisplayDef.templateRef; context: { item: item }\"> </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!selectDisplayDef?.templateRef\">\r\n {{ item[displayField] }}\r\n </ng-container>\r\n </div>\r\n </mat-option>\r\n </ng-container>\r\n <ng-container *ngIf=\"!valueField && !displayField\">\r\n <mat-option *ngFor=\"let item of filteredItems | async; trackBy: trackByKey\" [value]=\"item\">\r\n <div matTooltipPosition=\"above\" [matTooltip]=\"item\">\r\n <ng-container *ngIf=\"selectDisplayDef?.templateRef\">\r\n <ng-container *ngTemplateOutlet=\"selectDisplayDef.templateRef; context: { item: item }\"> </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!selectDisplayDef?.templateRef\">\r\n {{ item }}\r\n </ng-container>\r\n </div>\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n <mat-select\r\n *ngIf=\"!multiple\"\r\n #select\r\n [formControl]=\"formControl\"\r\n [placeholder]=\"placeholder || (appearance ? label : '')\"\r\n (selectionChange)=\"onSelectionChange($event)\"\r\n disableOptionCentering=\"true\"\r\n panelClass=\"sd-select-panel\"\r\n [ngClass]=\"{ 'sd-selected': !isRequired && formControl?.value != null }\"\r\n [required]=\"isRequired\"\r\n (openedChange)=\"onOpenChange($event)\"\r\n [attr.data-qclabel]=\"label\"\r\n [attr.data-qcid]=\"qcId\">\r\n <mat-select-trigger>\r\n {{ display | async }}\r\n </mat-select-trigger>\r\n <mat-option *ngIf=\"filtered\" class=\"sd-filtered-input\" (keyup.Space)=\"$event.stopPropagation()\" disabled=\"true\">\r\n <mat-form-field class=\"sd-md\" appearance=\"outline\">\r\n <mat-icon matPrefix>search</mat-icon>\r\n <input\r\n aria-hidden=\"true\"\r\n #input\r\n placeholder=\"{{ 'Search' | sdTranslate }}\"\r\n matInput\r\n autocomplete=\"off\"\r\n (keydown)=\"$event.stopPropagation()\"\r\n (keyup)=\"searchTerm$.next($event.target.value)\" />\r\n </mat-form-field>\r\n </mat-option>\r\n <ng-container *ngIf=\"valueField && displayField\">\r\n <mat-option *ngFor=\"let item of filteredItems | async; trackBy: trackByKey\" [value]=\"item[valueField]\">\r\n <div matTooltipPosition=\"above\" [matTooltip]=\"item[displayField]\">\r\n <ng-container *ngIf=\"selectDisplayDef?.templateRef\">\r\n <ng-container *ngTemplateOutlet=\"selectDisplayDef.templateRef; context: { item: item }\"> </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!selectDisplayDef?.templateRef\">\r\n {{ item[displayField] }}\r\n </ng-container>\r\n </div>\r\n </mat-option>\r\n </ng-container>\r\n <ng-container *ngIf=\"!valueField && !displayField\">\r\n <mat-option *ngFor=\"let item of filteredItems | async; trackBy: trackByKey\" [value]=\"item\">\r\n <div matTooltipPosition=\"above\" [matTooltip]=\"item\">\r\n <ng-container *ngIf=\"selectDisplayDef?.templateRef\">\r\n <ng-container *ngTemplateOutlet=\"selectDisplayDef.templateRef; context: { item: item }\"> </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!selectDisplayDef?.templateRef\">\r\n {{ item }}\r\n </ng-container>\r\n </div>\r\n </mat-option>\r\n </ng-container>\r\n </mat-select>\r\n <svg\r\n #copyTooltip=\"matTooltip\"\r\n *ngIf=\"(multiple ? formControl?.value?.length : formControl?.value != null) && copyable\"\r\n matSuffix\r\n [matTooltip]=\"copied ? 'Copied' : 'Copy'\"\r\n class=\"icon-copy\"\r\n focusable=\"false\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n viewBox=\"0 0 448 512\"\r\n (click)=\"onCopyText($event)\">\r\n <path\r\n d=\"M433.941 65.941l-51.882-51.882A48 48 0 0 0 348.118 0H176c-26.51 0-48 21.49-48 48v48H48c-26.51 0-48 21.49-48 48v320c0 26.51 21.49 48 48 48h224c26.51 0 48-21.49 48-48v-48h80c26.51 0 48-21.49 48-48V99.882a48 48 0 0 0-14.059-33.941zM266 464H54a6 6 0 0 1-6-6V150a6 6 0 0 1 6-6h74v224c0 26.51 21.49 48 48 48h96v42a6 6 0 0 1-6 6zm128-96H182a6 6 0 0 1-6-6V54a6 6 0 0 1 6-6h106v88c0 13.255 10.745 24 24 24h88v202a6 6 0 0 1-6 6zm6-256h-64V48h9.632c1.591 0 3.117.632 4.243 1.757l48.368 48.368a6 6 0 0 1 1.757 4.243V112z\"></path>\r\n </svg>\r\n <mat-icon\r\n *ngIf=\"(multiple ? formControl?.value?.length : formControl?.value != null) && !isRequired && !formControl.disabled\"\r\n class=\"pointer sd-suffix-icon\"\r\n (click)=\"clear($event)\"\r\n matSuffix\r\n >cancel\r\n </mat-icon>\r\n <mat-error *ngIf=\"formControl.errors?.required\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ 'This field is required' | sdTranslate }}</ng-container>\r\n </mat-error>\r\n <mat-error *ngIf=\"formControl?.errors?.customValidator\">\r\n <ng-container *ngIf=\"!disableErrorMessage\">{{ formControl?.errors?.customValidator }}</ng-container>\r\n </mat-error>\r\n </mat-form-field>\r\n </ng-template>\r\n</div>\r\n<sd-popover #popoverValues=\"sdPopover\" width=\"auto\">\r\n <ng-container *ngIf=\"formControl?.value?.length\">\r\n <ng-container *sdLet=\"selectedItems | async as items\">\r\n <div *ngFor=\"let item of items\">\r\n <strong>{{ item[valueField] }}</strong> - {{ item[displayField] }}\r\n </div>\r\n </ng-container>\r\n </ng-container>\r\n</sd-popover>\r\n",
|
|
429
428
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
430
429
|
styles: [":host{display:block;padding-top:5px}:host ::ng-deep .mat-form-field.mat-form-field-appearance-outline .mat-select-arrow-wrapper{transform:none}:host ::ng-deep .sd-selected .mat-select-arrow{border:none}:host ::ng-deep .mat-form-field.no-padding-wrapper .mat-form-field-wrapper{padding-bottom:0}:host ::ng-deep .mat-form-field.mat-form-field-appearance-outline.mat-form-field-disabled .mat-form-field-outline{background:#f6f6f6;color:#e9e9e9}:host ::ng-deep .mat-form-field mat-select.mat-select-disabled .mat-select-value{color:#4d4d4d!important}:host ::ng-deep .mat-form-field .mat-placeholder-required{color:#f82c13}:host ::ng-deep .mat-form-field:hover .icon-copy{opacity:1}:host ::ng-deep .mat-form-field .icon-copy{cursor:pointer;fill:rgba(0,0,0,.5);height:.9em;opacity:0;transition:opacity .2s linear;width:.9em}.sd-view:not(.c-focused):not(.c-disabled):hover{background-color:#ebecf0}::ng-deep .sd-select-panel .mat-option.sd-filtered-input{background-color:#fff;position:-webkit-sticky;position:sticky;top:0;z-index:10}::ng-deep .sd-select-panel .mat-option.sd-filtered-input .mat-form-field.mat-form-field-appearance-outline{width:100%}::ng-deep .sd-select-panel .mat-option.sd-filtered-input mat-pseudo-checkbox{display:none}::ng-deep .mat-select-panel .mat-option.sd-filtered-input{height:auto}::ng-deep .sd-select-panel .mat-option.sd-filtered-input input{color:#000}::ng-deep .sd-select-panel .mat-option.sd-filtered-input .mat-form-field-prefix .mat-icon{margin-right:0}::ng-deep .sd-select-panel .mat-option.sd-filtered-input .mat-form-field.mat-form-field-appearance-outline .mat-form-field-wrapper{padding:10px 0}::ng-deep .sd-select-panel .mat-option.sd-filtered-input .mat-form-field.mat-form-field-appearance-outline .mat-form-field-wrapper .mat-form-field-outline{background-color:rgba(0,0,0,.04)}"]
|
|
431
430
|
},] }
|
|
@@ -466,4 +465,4 @@ SdSelect.propDecorators = {
|
|
|
466
465
|
sdLabelDef: [{ type: ContentChild, args: [SdLabelDefDirective,] }],
|
|
467
466
|
sdView: [{ type: ContentChild, args: [SdViewDefDirective,] }]
|
|
468
467
|
};
|
|
469
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJDOi9Vc2Vycy9uZ2hpYXR0MTVfb25lbW91bnQvRG9jdW1lbnRzL2xpYi1jb3JlLXVpL3Byb2plY3RzL3NkLWNvcmUvc2VsZWN0LyIsInNvdXJjZXMiOlsic3JjL2xpYi9zZWxlY3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxpQkFBaUIsRUFBb0MsU0FBUyxFQUFFLHVCQUF1QixFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFjLE1BQU0sZUFBZSxDQUFDO0FBQzVNLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUE2RCxNQUFNLGdCQUFnQixDQUFDO0FBQy9HLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sSUFBSSxNQUFNLGFBQWEsQ0FBQztBQUUvQixPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBa0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3RixPQUFPLEVBQUUsWUFBWSxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDekUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxXQUFXLEVBQXNCLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRzdHLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBTzlELE1BQU0sT0FBTyxRQUFRO0lBbUpuQixZQUNVLEdBQXNCLEVBQ1csVUFBOEI7UUFEL0QsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDVyxlQUFVLEdBQVYsVUFBVSxDQUFv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O3lCQUtMLEtBQUs7bUNBRUwsS0FBSyxTQUFDLHFCQUFxQjttQkFRM0IsS0FBSzttQkFFTCxLQUFLO3FCQVdMLEtBQUssU0FBQyxPQUFPOzBCQU9iLEtBQUs7b0JBSUwsS0FBSztvQkFpQkwsS0FBSzt5QkFZTCxLQUFLOzJCQUNMLEtBQUs7NEJBQ0wsS0FBSzt1QkFTTCxLQUFLO3dCQUlMLEtBQUs7dUJBS0wsS0FBSzt3QkFTTCxLQUFLLFNBQUMsVUFBVTtvQkFHaEIsS0FBSzt3QkFFTCxLQUFLLFNBQUMsVUFBVTsrQkFHaEIsWUFBWSxTQUFDLDJCQUEyQjt5QkFFeEMsS0FBSyxTQUFDLFdBQVc7MEJBSWpCLFNBQVMsU0FBQyxhQUFhO3dCQUV2QixLQUFLLFNBQUMsVUFBVTt1QkFJaEIsS0FBSzswQkFFTCxNQUFNO3VCQUNOLE1BQU07MEJBQ04sTUFBTTt5QkFZTixZQUFZLFNBQUMsbUJBQW1CO3FCQUNoQyxZQUFZLFNBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBJbnB1dCwgT3V0cHV0LCBFdmVudEVtaXR0ZXIsIENoYW5nZURldGVjdG9yUmVmLCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0NoaWxkLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29udGVudENoaWxkLCBJbmplY3QsIE9wdGlvbmFsLCBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nRm9ybSwgVmFsaWRhdG9ycywgVmFsaWRhdG9yRm4sIEFic3RyYWN0Q29udHJvbCwgQXN5bmNWYWxpZGF0b3JGbiwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgKiBhcyB1dWlkIGZyb20gJ3V1aWQnO1xyXG5pbXBvcnQgaGFzaCBmcm9tICdvYmplY3QtaGFzaCc7XHJcbmltcG9ydCB7IE1hdFNlbGVjdCwgTWF0U2VsZWN0Q2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvc2VsZWN0JztcclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBvZiwgU3ViamVjdCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgbWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgTWF0SW5wdXQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9pbnB1dCc7XHJcbmltcG9ydCB7IFNkU2VsZWN0RGlzcGxheURlZkRpcmVjdGl2ZSB9IGZyb20gJy4vc2VsZWN0LWRpc3BsYXktZGVmLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IEZPUk1fQ09ORklHLCBJRm9ybUNvbmZpZ3VyYXRpb24sIFNkRm9ybUNvbnRyb2wsIFNkVmlld0RlZkRpcmVjdGl2ZSB9IGZyb20gJ0BzZC1hbmd1bGFyL2NvcmUvY29tbW9uJztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRBcHBlYXJhbmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IFNkTGFiZWxEZWZEaXJlY3RpdmUgfSBmcm9tICdAc2QtYW5ndWxhci9jb3JlL2NvbW1vbic7XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2Qtc2VsZWN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zZWxlY3QuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2RTZWxlY3QgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgI2lucHV0OiBNYXRJbnB1dDtcclxuICBAVmlld0NoaWxkKE1hdElucHV0KSBzZXQgaW5wdXQoaW5wdXQ6IE1hdElucHV0KSB7XHJcbiAgICBpZiAodGhpcy4jaW5wdXQgIT09IGlucHV0KSB7XHJcbiAgICAgIHRoaXMuI2lucHV0ID0gaW5wdXQ7XHJcbiAgICAgIHRoaXMuI2lucHV0LnZhbHVlID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcbiAgQFZpZXdDaGlsZCgnc2VsZWN0Jykgc2VsZWN0OiBNYXRTZWxlY3Q7XHJcbiAgI25hbWUgPSB1dWlkLnY0KCk7XHJcbiAgQElucHV0KCkgc2V0IG5hbWUodmFsOiBzdHJpbmcpIHtcclxuICAgIGlmICh2YWwpIHtcclxuICAgICAgdGhpcy4jbmFtZSA9IHZhbDtcclxuICAgIH1cclxuICB9XHJcbiAgQElucHV0KCkgYXBwZWFyYW5jZTogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZTtcclxuICBkaXNhYmxlRXJyb3JNZXNzYWdlID0gZmFsc2U7XHJcbiAgQElucHV0KCdkaXNhYmxlRXJyb3JNZXNzYWdlJykgc2V0IF9kaXNhYmxlRXJyb3JNZXNzYWdlKHZhbDogYm9vbGVhbiB8ICcnKSB7XHJcbiAgICB0aGlzLmRpc2FibGVFcnJvck1lc3NhZ2UgPSAodmFsID09PSAnJykgfHwgdmFsO1xyXG4gICAgdmFsID0gKHZhbCA9PT0gJycpIHx8IHZhbDtcclxuICB9XHJcbiAgZm9ybUNvbnRyb2wgPSBuZXcgU2RGb3JtQ29udHJvbCgpO1xyXG5cclxuICBzZWFyY2hUZXJtJCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuXHJcbiAgQElucHV0KCkgc2l6ZTogJ3NtJyB8ICdsZyc7XHJcbiAgI2Zvcm06IEZvcm1Hcm91cDtcclxuICBASW5wdXQoKSBzZXQgZm9ybSh2YWw6IE5nRm9ybSB8IEZvcm1Hcm91cCkge1xyXG4gICAgaWYgKHZhbCkge1xyXG4gICAgICBpZiAodmFsIGluc3RhbmNlb2YgTmdGb3JtKSB7XHJcbiAgICAgICAgdGhpcy4jZm9ybSA9IHZhbC5mb3JtO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuI2Zvcm0gPSB2YWw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgcWNJZDogc3RyaW5nO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgQElucHV0KCdsYWJlbCcpIHNldCBfbGFiZWwodmFsOiBzdHJpbmcpIHtcclxuICAgIHRoaXMubGFiZWwgPSB2YWw7XHJcbiAgICB0aGlzLnFjSWQgPSBoYXNoKHtcclxuICAgICAgc2VsZWN0b3I6ICdzZC1zZWxlY3QnLFxyXG4gICAgICBsYWJlbDogdmFsXHJcbiAgICB9KTtcclxuICB9O1xyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcblxyXG4gIC8vIE1vZGVsXHJcbiAgZGlzcGxheTogT2JzZXJ2YWJsZTxzdHJpbmc+O1xyXG4gIEBJbnB1dCgpIHNldCBtb2RlbCh2YWx1ZTogdW5kZWZpbmVkIHwgYm9vbGVhbiB8IG51bWJlciB8IHN0cmluZyB8IChudW1iZXIgfCBzdHJpbmcpW10pIHtcclxuICAgIC8vIGlmKHRoaXMuZm9ybUNvbnRyb2wuZGlzYWJsZWQpIHtcclxuICAgIC8vICAgdGhpcy5mb3JtQ29udHJvbC5lbmFibGUoe1xyXG4gICAgLy8gICAgIGVtaXRFdmVudDogZmFsc2VcclxuICAgIC8vICAgfSk7XHJcbiAgICAvLyAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xyXG4gICAgLy8gICB0aGlzLmZvcm1Db250cm9sLmRpc2FibGUoe1xyXG4gICAgLy8gICAgIGVtaXRFdmVudDogZmFsc2VcclxuICAgIC8vICAgfSk7XHJcbiAgICAvLyB9IGVsc2Uge1xyXG4gICAgLy8gICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHZhbHVlKTtcclxuICAgIC8vIH1cclxuICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xyXG4gIH1cclxuICAvLyBJdGVtc1xyXG5cclxuICAjaXRlbXNDaGFuZ2VzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXSB8IFNlYXJjaEZ1bmM+KFtdKTtcclxuICBASW5wdXQoKSBzZXQgaXRlbXMoaXRlbXM6IHVuZGVmaW5lZCB8IGFueVtdIHwgU2VhcmNoRnVuYykge1xyXG4gICAgdGhpcy4jZGVsYXkgPSAwO1xyXG4gICAgaWYgKCFpdGVtcykge1xyXG4gICAgICB0aGlzLiNpdGVtc0NoYW5nZXMubmV4dChbXSk7XHJcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XHJcbiAgICAgIHRoaXMuI2l0ZW1zQ2hhbmdlcy5uZXh0KGl0ZW1zLmZpbHRlcihlID0+IGUgIT09IG51bGwgJiYgZSAhPT0gdW5kZWZpbmVkKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLiNkZWxheSA9IDUwMDtcclxuICAgICAgdGhpcy4jaXRlbXNDaGFuZ2VzLm5leHQoaXRlbXMpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWFyY2hUZXJtJC5uZXh0KCcnKTtcclxuICB9XHJcbiAgQElucHV0KCkgdmFsdWVGaWVsZDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGRpc3BsYXlGaWVsZDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGNhY2hlQ2hlY2tzdW06IGFueTtcclxuXHJcbiAgLy8gU2VydmVyIHNlYXJjaFxyXG4gIGxvYWRpbmcgPSBmYWxzZTtcclxuICAjZGVsYXkgPSAyMDA7IC8vIFNhdSBraG/huqNuZyB0aOG7nWkgZ2lhbiBkZWxheSBu4bq/dSBraMO0bmcgY8OzIHRoYXkgxJHhu5VpIHRow6wgdGjDrCBt4bubaSBi4bqvdCDEkeG6p3UgdGjhu7FjIGhp4buHbiBn4buNaSBow6BtXHJcblxyXG4gIC8vIFZhbGlkYXRvclxyXG4gIGlzUmVxdWlyZWQgPSBmYWxzZTtcclxuICAjdmFsaWRhdG9yOiAodmFsdWU6IGFueSkgPT4gc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+O1xyXG4gIEBJbnB1dCgpIHNldCByZXF1aXJlZCh2YWw6IGJvb2xlYW4gfCAnJykge1xyXG4gICAgdGhpcy5pc1JlcXVpcmVkID0gKHZhbCA9PT0gJycpIHx8IHZhbDtcclxuICAgIHRoaXMuI3VwZGF0ZVZhbGlkYXRvcigpO1xyXG4gIH1cclxuICBASW5wdXQoKSBzZXQgdmFsaWRhdG9yKHZhbGlkYXRvcjogKHZhbHVlOiBhbnkpID0+IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPikge1xyXG4gICAgdGhpcy4jdmFsaWRhdG9yID0gdmFsaWRhdG9yO1xyXG4gICAgdGhpcy4jdXBkYXRlVmFsaWRhdG9yKCk7XHJcbiAgfVxyXG4gIC8vIE9wdGlvbmFsXHJcbiAgQElucHV0KCkgc2V0IGRpc2FibGVkKHZhbDogYm9vbGVhbiB8ICcnKSB7XHJcbiAgICB2YWwgPSAodmFsID09PSAnJykgfHwgdmFsO1xyXG4gICAgaWYgKHZhbCkge1xyXG4gICAgICB0aGlzLmZvcm1Db250cm9sLmRpc2FibGUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuZW5hYmxlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG11bHRpcGxlID0gZmFsc2U7XHJcbiAgQElucHV0KCdtdWx0aXBsZScpIHNldCBfbXVsdGlwbGUodmFsOiBib29sZWFuIHwgJycpIHtcclxuICAgIHRoaXMubXVsdGlwbGUgPSAodmFsID09PSAnJykgfHwgdmFsO1xyXG4gIH1cclxuICBASW5wdXQoKSBsaW1pdCA9IDEwMDtcclxuICBmaWx0ZXJlZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgnZmlsdGVyZWQnKSBzZXQgX2ZpbHRlcmVkKHZhbDogYm9vbGVhbiB8ICcnKSB7XHJcbiAgICB0aGlzLmZpbHRlcmVkID0gKHZhbCA9PT0gJycpIHx8IHZhbDtcclxuICB9XHJcbiAgQENvbnRlbnRDaGlsZChTZFNlbGVjdERpc3BsYXlEZWZEaXJlY3RpdmUpIHNlbGVjdERpc3BsYXlEZWY6IFNkU2VsZWN0RGlzcGxheURlZkRpcmVjdGl2ZTtcclxuICBzZWxlY3RBbGwgPSBmYWxzZTtcclxuICBASW5wdXQoJ3NlbGVjdEFsbCcpIHNldCBfc2VsZWN0QWxsKHZhbDogYm9vbGVhbiB8ICcnKSB7XHJcbiAgICB0aGlzLnNlbGVjdEFsbCA9ICh2YWwgPT09ICcnKSB8fCB2YWw7XHJcbiAgfVxyXG5cclxuICBAVmlld0NoaWxkKCdjb3B5VG9vbHRpcCcpIGNvcHlUb29sdGlwOiBNYXRUb29sdGlwO1xyXG4gIGNvcHlhYmxlID0gZmFsc2U7XHJcbiAgQElucHV0KCdjb3B5YWJsZScpIHNldCBfY29weWFibGUodmFsOiBib29sZWFuIHwgJycpIHtcclxuICAgIHRoaXMuY29weWFibGUgPSAodmFsID09PSAnJykgfHwgdmFsO1xyXG4gIH1cclxuICBjb3BpZWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBjb3B5VGV4dDogKCh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10sIGl0ZW1zOiBhbnlbXSkgPT4gc3RyaW5nKSB8IHN0cmluZztcclxuXHJcbiAgQE91dHB1dCgpIG1vZGVsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBzZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgc2RTZWxlY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHsgdmFsdWU6IGFueSB8IGFueVtdLCBpdGVtPzogYW55LCBpdGVtcz86IGFueVtdIH0+KCk7XHJcbiAgI3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuICBzZWxlY3RlZEl0ZW1zOiBPYnNlcnZhYmxlPGFueVtdPjtcclxuICAjYWxsSXRlbXM6IE9ic2VydmFibGU8YW55W10+O1xyXG4gIGZpbHRlcmVkSXRlbXM6IE9ic2VydmFibGU8YW55W10+O1xyXG4gICNhbGxJdGVtOiB7XHJcbiAgICBba2V5OiBzdHJpbmddOiBhbnlcclxuICB9ID0ge307XHJcbiAgYWxsU2VsZWN0ZWQgPSBmYWxzZTtcclxuICAjY2FjaGU6IHtcclxuICAgIFtrZXk6IHN0cmluZ106IGFueVtdXHJcbiAgfSA9IHt9O1xyXG4gIEBDb250ZW50Q2hpbGQoU2RMYWJlbERlZkRpcmVjdGl2ZSkgc2RMYWJlbERlZjogU2RMYWJlbERlZkRpcmVjdGl2ZTtcclxuICBAQ29udGVudENoaWxkKFNkVmlld0RlZkRpcmVjdGl2ZSkgc2RWaWV3OiBTZFZpZXdEZWZEaXJlY3RpdmU7XHJcbiAgaXNGb2N1c2VkID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQEluamVjdChGT1JNX0NPTkZJRykgQE9wdGlvbmFsKCkgcHJpdmF0ZSBmb3JtQ29uZmlnOiBJRm9ybUNvbmZpZ3VyYXRpb25cclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuYXBwZWFyYW5jZSA9IHRoaXMuYXBwZWFyYW5jZSB8fCB0aGlzLmZvcm1Db25maWc/LmFwcGVhcmFuY2U7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKHRoaXMuZm9ybUNvbnRyb2wuc2RDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfSkpO1xyXG4gICAgdGhpcy4jYWxsSXRlbXMgPSBjb21iaW5lTGF0ZXN0KFtcclxuICAgICAgdGhpcy4jaXRlbXNDaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpLFxyXG4gICAgICB0aGlzLnNlYXJjaFRlcm0kLmFzT2JzZXJ2YWJsZSgpLnBpcGUoc3RhcnRXaXRoKCcnKSwgZGVib3VuY2VUaW1lKHRoaXMuI2RlbGF5KSksXHJcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKHRoaXMuZm9ybUNvbnRyb2wudmFsdWUpKV0pLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKGFzeW5jIChbaXRlbXMsIHZhbCwgZm9ybVZhbHVlXSkgPT4ge1xyXG4gICAgICAgICAgZm9ybVZhbHVlID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZTtcclxuICAgICAgICAgIGlmICh0eXBlb2YgKGl0ZW1zKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy4jbG9hZEl0ZW1zKHZhbCwgaXRlbXMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy4jYWxsSXRlbSA9IGl0ZW1zLnRvT2JqZWN0KHRoaXMudmFsdWVGaWVsZCk7XHJcbiAgICAgICAgICBjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShmb3JtVmFsdWUpO1xyXG4gICAgICAgICAgY29uc3QgaGFzRmllbGRzID0gISF0aGlzLnZhbHVlRmllbGQgJiYgISF0aGlzLmRpc3BsYXlGaWVsZDtcclxuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkSXRlbXMgPSBpdGVtcy5maWx0ZXIoaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaGFzRmllbGRzID8gaXRlbVt0aGlzLnZhbHVlRmllbGRdIDogaXRlbTtcclxuICAgICAgICAgICAgY29uc3QgZGlzcGxheSA9IGhhc0ZpZWxkcyA/IGl0ZW1bdGhpcy5kaXNwbGF5RmllbGRdIDogaXRlbTtcclxuICAgICAgICAgICAgaWYgKFN0cmluZy5hbGlhc0luY2x1ZGVzKHZhbHVlLCB2YWwpIHx8IFN0cmluZy5hbGlhc0luY2x1ZGVzKGRpc3BsYXksIHZhbCkpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXNBcnJheSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBmb3JtVmFsdWUuc29tZShlID0+IGUgPT09IHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZm9ybVZhbHVlID09PSB2YWx1ZTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA8PSB0aGlzLmxpbWl0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZEl0ZW1zO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gxJDGsGEgbmjhu69uZyBzZWxlY3RlZEl0ZW1zIGzDqm4gxJHhuqd1IG7hur91IGtow7RuZyBtYXQtc2VsZWN0LXRyaWdnZXIgc+G6vSBraMO0bmcgd29ya1xyXG4gICAgICAgICAgcmV0dXJuIGZpbHRlcmVkSXRlbXMuc29ydCgoY3VycmVudCwgbmV4dCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZTEgPSBoYXNGaWVsZHMgPyBjdXJyZW50W3RoaXMudmFsdWVGaWVsZF0gOiBjdXJyZW50O1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZTIgPSBoYXNGaWVsZHMgPyBuZXh0W3RoaXMudmFsdWVGaWVsZF0gOiBuZXh0O1xyXG4gICAgICAgICAgICBsZXQgZmxhZzEgPSAwO1xyXG4gICAgICAgICAgICBsZXQgZmxhZzIgPSAwO1xyXG4gICAgICAgICAgICBpZiAoaXNBcnJheSkge1xyXG4gICAgICAgICAgICAgIGZsYWcxID0gZm9ybVZhbHVlLnNvbWUoZSA9PiBlID09PSB2YWx1ZTEpID8gMSA6IDA7XHJcbiAgICAgICAgICAgICAgZmxhZzIgPSBmb3JtVmFsdWUuc29tZShlID0+IGUgPT09IHZhbHVlMikgPyAxIDogMDtcclxuICAgICAgICAgICAgICByZXR1cm4gZmxhZzIgLSBmbGFnMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmbGFnMSA9IGZvcm1WYWx1ZSA9PT0gdmFsdWUxID8gMSA6IDA7XHJcbiAgICAgICAgICAgIGZsYWcyID0gZm9ybVZhbHVlID09PSB2YWx1ZTIgPyAxIDogMDtcclxuICAgICAgICAgICAgcmV0dXJuIGZsYWcyIC0gZmxhZzE7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KSk7XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBjb21iaW5lTGF0ZXN0KFtcclxuICAgICAgdGhpcy4jaXRlbXNDaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpLFxyXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLmZvcm1Db250cm9sLnZhbHVlKSldKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBzd2l0Y2hNYXAoYXN5bmMgKFtpdGVtcywgdmFsXSkgPT4ge1xyXG4gICAgICAgICAgLy8gVsOsIG3hu5l0IHPhu5EgbMO9IGRvIGNoxrBhIHjDoWMgxJHhu4tuaCBtw6Aga2hpIHPhu60gZOG7pW5nIHNkVmlld0RlZiB0aMOsIGtoaSBjaHV54buDbiBzYW5nIGThuqFuZyB2aWV3IHPhur0gdHJpZ2dlciB2YWwgPSBudWxsXHJcbiAgICAgICAgICAvLyBOaMawbmcgZm9ybUNvbnRyb2wudmFsdWUgduG6q24gY8OzIGdpw6EgdHLhu4sgxJHDum5nIG7Dqm4gdGjhu7FjIGhp4buHbiBnw6FuIHZhbCA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWU7XHJcbiAgICAgICAgICB2YWwgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlO1xyXG4gICAgICAgICAgaWYgKCF2YWw/LnRvU3RyaW5nKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheSh2YWwpID8gdmFsIDogW3ZhbF07XHJcbiAgICAgICAgICBpZiAoIXRoaXMudmFsdWVGaWVsZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWVzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHR5cGVvZiAoaXRlbXMpID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLiNsb2FkU2VsZWN0ZWRJdGVtcyh2YWwsIGl0ZW1zKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiB2YWx1ZXMubWFwKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zPy5maW5kKGl0ZW0gPT4gaXRlbVt0aGlzLnZhbHVlRmllbGRdID09PSB2YWx1ZSkgfHwge1xyXG4gICAgICAgICAgICAgIFt0aGlzLnZhbHVlRmllbGRdOiB2YWx1ZSxcclxuICAgICAgICAgICAgICBbdGhpcy5kaXNwbGF5RmllbGRdOiB2YWx1ZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIHRoaXMuZmlsdGVyZWRJdGVtcyA9IHRoaXMuI2FsbEl0ZW1zLnBpcGUobWFwKGFsbEl0ZW1zID0+IGFsbEl0ZW1zLnBhZ2luZyh0aGlzLmxpbWl0KSkpO1xyXG4gICAgdGhpcy5kaXNwbGF5ID0gdGhpcy5zZWxlY3RlZEl0ZW1zLnBpcGUoXHJcbiAgICAgIG1hcChzZWxlY3RlZEl0ZW1zID0+IHNlbGVjdGVkSXRlbXM/Lm1hcChpdGVtID0+IHRoaXMuZGlzcGxheUZpZWxkID8gaXRlbVt0aGlzLmRpc3BsYXlGaWVsZF0gOiBpdGVtKT8uam9pbignLCAnKSkpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy4jZm9ybT8uYWRkQ29udHJvbCh0aGlzLiNuYW1lLCB0aGlzLmZvcm1Db250cm9sKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy4jZm9ybT8ucmVtb3ZlQ29udHJvbCh0aGlzLiNuYW1lKTtcclxuICAgIHRoaXMuI3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgI3VwZGF0ZVZhbGlkYXRvciA9ICgpID0+IHtcclxuICAgIHRoaXMuZm9ybUNvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICB0aGlzLmZvcm1Db250cm9sLmNsZWFyQXN5bmNWYWxpZGF0b3JzKCk7XHJcbiAgICBjb25zdCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gW107XHJcbiAgICBjb25zdCBhc3luY1ZhbGlkYXRvcnM6IEFzeW5jVmFsaWRhdG9yRm5bXSA9IFtdO1xyXG4gICAgaWYgKHRoaXMuaXNSZXF1aXJlZCkge1xyXG4gICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy4jdmFsaWRhdG9yKSB7XHJcbiAgICAgIGFzeW5jVmFsaWRhdG9ycy5wdXNoKHRoaXMuI2N1c3RvbVZhbGlkYXRvcih0aGlzLiN2YWxpZGF0b3IpKTtcclxuICAgIH1cclxuICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKTtcclxuICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0QXN5bmNWYWxpZGF0b3JzKGFzeW5jVmFsaWRhdG9ycyk7XHJcbiAgICB0aGlzLmZvcm1Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICB9XHJcblxyXG4gICNsb2FkU2VsZWN0ZWRJdGVtcyA9IGFzeW5jICh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10sIGl0ZW1zOiBTZWFyY2hGdW5jKSA9PiB7XHJcbiAgICBpZiAoIXZhbHVlPy50b1N0cmluZygpKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIGNvbnN0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xyXG4gICAgaWYgKCF0aGlzLnZhbHVlRmllbGQgJiYgIXRoaXMuZGlzcGxheUZpZWxkKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZXM7XHJcbiAgICB9XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgaWYgKHZhbHVlcy5zb21lKHZhbCA9PiB0aGlzLiNhbGxJdGVtW3ZhbF0gPT09IHVuZGVmaW5lZCkpIHtcclxuICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IGl0ZW1zKHZhbHVlLCB0cnVlKS5jYXRjaCgoKSA9PiBbXSkuZmluYWxseSgoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSk7XHJcbiAgICAgIGNvbnN0IG9iakl0ZW0gPSBBcnJheS50b09iamVjdChyZXN1bHRzLCB0aGlzLnZhbHVlRmllbGQpO1xyXG4gICAgICBjb25zdCBvYmpWYWx1ZSA9IEFycmF5LnRvT2JqZWN0KFxyXG4gICAgICAgIHZhbHVlcy5tYXAodmFsID0+ICh7IFt2YWw/LnRvU3RyaW5nKCldOiB7IFt0aGlzLnZhbHVlRmllbGRdOiB2YWwsIFt0aGlzLmRpc3BsYXlGaWVsZF06IHZhbCB9IH0pKSwgdGhpcy52YWx1ZUZpZWxkKTtcclxuICAgICAgdGhpcy4jYWxsSXRlbSA9IHtcclxuICAgICAgICAuLi5vYmpWYWx1ZSxcclxuICAgICAgICAuLi50aGlzLiNhbGxJdGVtLFxyXG4gICAgICAgIC4uLm9iakl0ZW1cclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZXMubWFwKHZhbCA9PiB0aGlzLiNhbGxJdGVtW3ZhbD8udG9TdHJpbmcoKV0gPz8geyBbdGhpcy52YWx1ZUZpZWxkXTogdmFsLCBbdGhpcy5kaXNwbGF5RmllbGRdOiB2YWwgfSk7XHJcbiAgfVxyXG5cclxuICAjbG9hZEl0ZW1zID0gYXN5bmMgKHNlYXJjaFRleHQ6IHN0cmluZywgaXRlbXM6IFNlYXJjaEZ1bmMpID0+IHtcclxuICAgIHNlYXJjaFRleHQgPSBzZWFyY2hUZXh0Py50b1N0cmluZygpIHx8ICcnO1xyXG4gICAgY29uc3Qga2V5ID0gaGFzaCh7XHJcbiAgICAgIGNoZWNrc3VtOiB0aGlzLmNhY2hlQ2hlY2tzdW0gfHwgbnVsbCxcclxuICAgICAgc2VhcmNoVGV4dFxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuI2NhY2hlW2tleV0gPT09IHVuZGVmaW5lZCAmJiB0aGlzLmlzRm9jdXNlZCkge1xyXG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgaXRlbXMoc2VhcmNoVGV4dCkuY2F0Y2goKCkgPT4gW10pLmZpbmFsbHkoKCkgPT4gdGhpcy5sb2FkaW5nID0gZmFsc2UpO1xyXG4gICAgICBjb25zdCBvYmpJdGVtID0gQXJyYXkudG9PYmplY3QocmVzdWx0cywgdGhpcy52YWx1ZUZpZWxkKTtcclxuICAgICAgdGhpcy4jYWxsSXRlbSA9IHtcclxuICAgICAgICAuLi50aGlzLiNhbGxJdGVtLFxyXG4gICAgICAgIC4uLm9iakl0ZW1cclxuICAgICAgfTtcclxuICAgICAgdGhpcy4jY2FjaGVba2V5XSA9IHJlc3VsdHMudW5pb24odGhpcy52YWx1ZUZpZWxkKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSBhd2FpdCB0aGlzLiNsb2FkU2VsZWN0ZWRJdGVtcyh0aGlzLmZvcm1Db250cm9sLnZhbHVlLCBpdGVtcyk7XHJcbiAgICAvLyDEkMawYSBuaOG7r25nIHNlbGVjdGVkSXRlbXMgbMOqbiDEkeG6p3UgbuG6v3Uga2jDtG5nIG1hdC1zZWxlY3QtdHJpZ2dlciBz4bq9IGtow7RuZyB3b3JrXHJcbiAgICByZXR1cm4gWy4uLnNlbGVjdGVkSXRlbXMsIC4uLih0aGlzLiNjYWNoZVtrZXldIHx8IFtdKV0udW5pb24odGhpcy52YWx1ZUZpZWxkKTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0aW9uQ2hhbmdlID0gKGNoYW5nZTogTWF0U2VsZWN0Q2hhbmdlKSA9PiB7XHJcbiAgICB0aGlzLmFsbFNlbGVjdGVkID0gIXRoaXMuc2VsZWN0Lm9wdGlvbnMuc29tZShlID0+ICFlLnNlbGVjdGVkKTtcclxuICAgIGNvbnN0IHZhbHVlID0gY2hhbmdlPy52YWx1ZSA/PyAnJztcclxuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgIHRoaXMuI29uQ2hhbmdlKHZhbHVlIHx8IFtdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoVGVybSQubmV4dCgnJyk7XHJcbiAgICAgIHRoaXMuI29uQ2hhbmdlKHZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uU2VsZWN0QWxsKCkge1xyXG4gICAgaWYgKHRoaXMuYWxsU2VsZWN0ZWQpIHtcclxuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnNlbGVjdC5vcHRpb25zLm1hcChlID0+IGUudmFsdWUpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoW10pO1xyXG4gICAgfVxyXG4gICAgdGhpcy4jb25DaGFuZ2UodGhpcy5mb3JtQ29udHJvbC52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICByZVZhbGlkYXRlID0gKCkgPT4ge1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xyXG4gIH1cclxuXHJcbiAgI29uQ2hhbmdlID0gYXN5bmMgKHZhbHVlOiBib29sZWFuIHwgbnVtYmVyIHwgc3RyaW5nIHwgKG51bWJlciB8IHN0cmluZylbXSkgPT4ge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdCh2YWx1ZSk7XHJcbiAgICAgIHRoaXMuc2RDaGFuZ2UuZW1pdCh2YWx1ZSk7XHJcbiAgICAgIHRoaXMuc2RTZWxlY3Rpb24uZW1pdCh7XHJcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxyXG4gICAgICAgIGl0ZW1zOiB2YWx1ZS5tYXAodmFsID0+IHRoaXMuI2FsbEl0ZW1bdmFsPy50b1N0cmluZygpXSlcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodmFsdWUpO1xyXG4gICAgICB0aGlzLnNkQ2hhbmdlLmVtaXQodmFsdWUpO1xyXG4gICAgICB0aGlzLnNkU2VsZWN0aW9uLmVtaXQoe1xyXG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcclxuICAgICAgICBpdGVtOiB0aGlzLiNhbGxJdGVtW3ZhbHVlPy50b1N0cmluZygpXVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsZWFyID0gKCRldmVudD86IGFueSkgPT4ge1xyXG4gICAgJGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoW10pO1xyXG4gICAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQoW10pO1xyXG4gICAgICB0aGlzLnNkQ2hhbmdlLmVtaXQoW10pO1xyXG4gICAgICB0aGlzLnNkU2VsZWN0aW9uLmVtaXQoe1xyXG4gICAgICAgIHZhbHVlOiBbXSxcclxuICAgICAgICBpdGVtczogW11cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKG51bGwpO1xyXG4gICAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQobnVsbCk7XHJcbiAgICAgIHRoaXMuc2RDaGFuZ2UuZW1pdChudWxsKTtcclxuICAgICAgdGhpcy5zZFNlbGVjdGlvbi5lbWl0KHtcclxuICAgICAgICB2YWx1ZTogbnVsbCxcclxuICAgICAgICBpdGVtOiBudWxsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DbGljayA9ICgpID0+IHtcclxuICAgIGlmICh0aGlzLnNkVmlldz8udGVtcGxhdGVSZWYpIHtcclxuICAgICAgaWYgKCF0aGlzLmZvcm1Db250cm9sLmRpc2FibGVkICYmICF0aGlzLmlzRm9jdXNlZCkge1xyXG4gICAgICAgIHRoaXMuZm9jdXMoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9jdXMgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmlzRm9jdXNlZCA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zZWxlY3Q/LmZvY3VzKCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0Py5vcGVuKCk7XHJcbiAgICB9LCAxMDApO1xyXG4gIH1cclxuXHJcbiAgI2N1c3RvbVZhbGlkYXRvciA9IChmdW5jOiAodmFsdWU6IGFueSkgPT4gc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+KTogQXN5bmNWYWxpZGF0b3JGbiA9PiB7XHJcbiAgICByZXR1cm4gYXN5bmMgKGM6IEFic3RyYWN0Q29udHJvbCk6IFByb21pc2U8eyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGw+ID0+IHtcclxuICAgICAgY29uc3QgdmFsdWUgPSBjLnZhbHVlIHx8IG51bGw7XHJcbiAgICAgIGlmIChmdW5jICYmIHR5cGVvZiAoZnVuYykgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBmdW5jKHZhbHVlKTtcclxuICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IHJlc3VsdDtcclxuICAgICAgICAgIGlmIChtZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgY3VzdG9tVmFsaWRhdG9yOiBtZXNzYWdlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgY3VzdG9tVmFsaWRhdG9yOiByZXN1bHRcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIG9uT3BlbkNoYW5nZSA9IChpc09wZW5lZDogYm9vbGVhbikgPT4ge1xyXG4gICAgaWYgKGlzT3BlbmVkKSB7XHJcbiAgICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcclxuICAgICAgaWYgKHRoaXMuI2lucHV0KSB7XHJcbiAgICAgICAgdGhpcy4jaW5wdXQudmFsdWUgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2VhcmNoVGVybSQubmV4dCgnJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmlzRm9jdXNlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25PcHRpb25DaGFuZ2UgPSAodG9vbHRpcDogTWF0VG9vbHRpcCkgPT4ge1xyXG4gICAgdG9vbHRpcD8uaGlkZSgpO1xyXG4gIH1cclxuXHJcbiAgdHJhY2tCeUtleSA9IChpbmRleCwgaXRlbSkgPT4ge1xyXG4gICAgaWYgKHRoaXMudmFsdWVGaWVsZCkge1xyXG4gICAgICByZXR1cm4gaXRlbT8uW3RoaXMudmFsdWVGaWVsZF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXRlbTtcclxuICB9XHJcblxyXG4gIG9uQ29weVRleHQgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcclxuICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGNvbnN0IHRleHQ6IHN0cmluZyA9IHRoaXMuI2dldENvcHlUZXh0KCk7XHJcbiAgICBTZFV0aWxpdHkuY29weVRvQ2xpcGJvYXJkKHRleHQpO1xyXG4gICAgdGhpcy5jb3BpZWQgPSB0cnVlO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuY29waWVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfSwgMjAwMClcclxuICB9XHJcblxyXG4gICNnZXRDb3B5VGV4dCA9ICgpID0+IHtcclxuICAgIGNvbnN0IHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWU7XHJcbiAgICBsZXQgdGV4dCA9IHZhbHVlPy50b1N0cmluZygpID8/ICcnO1xyXG4gICAgaWYgKHR5cGVvZiB0aGlzLmNvcHlUZXh0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgIHRleHQgPSB0aGlzLmNvcHlUZXh0KHZhbHVlLCB2YWx1ZS5tYXAodmFsID0+IHRoaXMuI2FsbEl0ZW1bdmFsPy50b1N0cmluZygpXSkpXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGV4dCA9IHRoaXMuY29weVRleHQodmFsdWUsIHRoaXMuI2FsbEl0ZW1bdmFsdWU/LnRvU3RyaW5nKCldKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmNvcHlUZXh0KSB7XHJcbiAgICAgIHRleHQgPSB0aGlzLmNvcHlUZXh0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRleHQ7XHJcbiAgfVxyXG59XHJcblxyXG50eXBlIFNlYXJjaEZ1bmMgPSAoc2VhcmNoVGV4dD86IHN0cmluZyB8IHN0cmluZ1tdLCBpc0Zvcm1WYWx1ZT86IGJvb2xlYW4pID0+IFByb21pc2U8YW55W10+OyJdfQ==
|
|
468
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJDOi9Vc2Vycy9uZ2hpYXR0MTVfb25lbW91bnQvRG9jdW1lbnRzL2xpYi1jb3JlLXVpL3Byb2plY3RzL3NkLWNvcmUvc2VsZWN0LyIsInNvdXJjZXMiOlsic3JjL2xpYi9zZWxlY3QuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUFpQix1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFxQixRQUFRLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoTSxPQUFPLEVBQWdELE1BQU0sRUFBZSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUvRyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFHbkQsT0FBTyxFQUFFLFdBQVcsRUFBc0IsYUFBYSxFQUFFLG1CQUFtQixFQUFFLGtCQUFrQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFbEksT0FBTyxJQUFJLE1BQU0sYUFBYSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxlQUFlLEVBQWMsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekYsT0FBTyxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pFLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBTzdFLE1BQU0sT0FBTyxRQUFRO0lBbUpuQixZQUNVLEdBQXNCLEVBQ1csVUFBOEI7UUFEL0QsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFDVyxlQUFVLEdBQVYsVUFBVSxDQUFvQjtRQXBKekUseUJBQWlCO1FBUWpCLGdCQUFRLElBQUks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QjttQkFRM0IsS0FBSzttQkFFTCxLQUFLO3FCQVdMLEtBQUssU0FBQyxPQUFPOzBCQU9iLEtBQUs7b0JBSUwsS0FBSztvQkFpQkwsS0FBSzt5QkFZTCxLQUFLOzJCQUNMLEtBQUs7NEJBQ0wsS0FBSzt1QkFTTCxLQUFLO3dCQUlMLEtBQUs7dUJBS0wsS0FBSzt3QkFTTCxLQUFLLFNBQUMsVUFBVTtvQkFHaEIsS0FBSzt3QkFFTCxLQUFLLFNBQUMsVUFBVTsrQkFHaEIsWUFBWSxTQUFDLDJCQUEyQjt5QkFFeEMsS0FBSyxTQUFDLFdBQVc7MEJBSWpCLFNBQVMsU0FBQyxhQUFhO3dCQUV2QixLQUFLLFNBQUMsVUFBVTt1QkFJaEIsS0FBSzswQkFFTCxNQUFNO3VCQUNOLE1BQU07MEJBQ04sTUFBTTt5QkFZTixZQUFZLFNBQUMsbUJBQW1CO3FCQUNoQyxZQUFZLFNBQUMsa0JBQWtCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIENvbnRlbnRDaGlsZCwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3B0aW9uYWwsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgQXN5bmNWYWxpZGF0b3JGbiwgRm9ybUdyb3VwLCBOZ0Zvcm0sIFZhbGlkYXRvckZuLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBNYXRGb3JtRmllbGRBcHBlYXJhbmNlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZm9ybS1maWVsZCc7XHJcbmltcG9ydCB7IE1hdElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvaW5wdXQnO1xyXG5pbXBvcnQgeyBNYXRTZWxlY3QsIE1hdFNlbGVjdENoYW5nZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3NlbGVjdCc7XHJcbmltcG9ydCB7IE1hdFRvb2x0aXAgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90b29sdGlwJztcclxuaW1wb3J0IHsgRk9STV9DT05GSUcsIElGb3JtQ29uZmlndXJhdGlvbiwgU2RGb3JtQ29udHJvbCwgU2RMYWJlbERlZkRpcmVjdGl2ZSwgU2RWaWV3RGVmRGlyZWN0aXZlIH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9jb21tb24nO1xyXG5pbXBvcnQgeyBQb3BvdmVyQ29tcG9uZW50IH0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS9wb3BvdmVyJztcclxuaW1wb3J0IGhhc2ggZnJvbSAnb2JqZWN0LWhhc2gnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbiwgY29tYmluZUxhdGVzdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIG1hcCwgc3RhcnRXaXRoLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCAqIGFzIHV1aWQgZnJvbSAndXVpZCc7XHJcbmltcG9ydCB7IFNkU2VsZWN0RGlzcGxheURlZkRpcmVjdGl2ZSB9IGZyb20gJy4vc2VsZWN0LWRpc3BsYXktZGVmLmRpcmVjdGl2ZSc7XHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2Qtc2VsZWN0JyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9zZWxlY3QuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2RTZWxlY3QgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uRGVzdHJveSB7XHJcbiAgI2lucHV0OiBNYXRJbnB1dDtcclxuICBAVmlld0NoaWxkKE1hdElucHV0KSBzZXQgaW5wdXQoaW5wdXQ6IE1hdElucHV0KSB7XHJcbiAgICBpZiAodGhpcy4jaW5wdXQgIT09IGlucHV0KSB7XHJcbiAgICAgIHRoaXMuI2lucHV0ID0gaW5wdXQ7XHJcbiAgICAgIHRoaXMuI2lucHV0LnZhbHVlID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcbiAgQFZpZXdDaGlsZCgnc2VsZWN0Jykgc2VsZWN0OiBNYXRTZWxlY3Q7XHJcbiAgI25hbWUgPSB1dWlkLnY0KCk7XHJcbiAgQElucHV0KCkgc2V0IG5hbWUodmFsOiBzdHJpbmcpIHtcclxuICAgIGlmICh2YWwpIHtcclxuICAgICAgdGhpcy4jbmFtZSA9IHZhbDtcclxuICAgIH1cclxuICB9XHJcbiAgQElucHV0KCkgYXBwZWFyYW5jZTogTWF0Rm9ybUZpZWxkQXBwZWFyYW5jZTtcclxuICBkaXNhYmxlRXJyb3JNZXNzYWdlID0gZmFsc2U7XHJcbiAgQElucHV0KCdkaXNhYmxlRXJyb3JNZXNzYWdlJykgc2V0IF9kaXNhYmxlRXJyb3JNZXNzYWdlKHZhbDogYm9vbGVhbiB8ICcnKSB7XHJcbiAgICB0aGlzLmRpc2FibGVFcnJvck1lc3NhZ2UgPSAodmFsID09PSAnJykgfHwgdmFsO1xyXG4gICAgdmFsID0gKHZhbCA9PT0gJycpIHx8IHZhbDtcclxuICB9XHJcbiAgZm9ybUNvbnRyb2wgPSBuZXcgU2RGb3JtQ29udHJvbCgpO1xyXG5cclxuICBzZWFyY2hUZXJtJCA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuXHJcbiAgQElucHV0KCkgc2l6ZTogJ3NtJyB8ICdsZyc7XHJcbiAgI2Zvcm06IEZvcm1Hcm91cDtcclxuICBASW5wdXQoKSBzZXQgZm9ybSh2YWw6IE5nRm9ybSB8IEZvcm1Hcm91cCkge1xyXG4gICAgaWYgKHZhbCkge1xyXG4gICAgICBpZiAodmFsIGluc3RhbmNlb2YgTmdGb3JtKSB7XHJcbiAgICAgICAgdGhpcy4jZm9ybSA9IHZhbC5mb3JtO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuI2Zvcm0gPSB2YWw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbiAgcWNJZDogc3RyaW5nO1xyXG4gIGxhYmVsOiBzdHJpbmc7XHJcbiAgQElucHV0KCdsYWJlbCcpIHNldCBfbGFiZWwodmFsOiBzdHJpbmcpIHtcclxuICAgIHRoaXMubGFiZWwgPSB2YWw7XHJcbiAgICB0aGlzLnFjSWQgPSBoYXNoKHtcclxuICAgICAgc2VsZWN0b3I6ICdzZC1zZWxlY3QnLFxyXG4gICAgICBsYWJlbDogdmFsXHJcbiAgICB9KTtcclxuICB9O1xyXG4gIEBJbnB1dCgpIHBsYWNlaG9sZGVyOiBzdHJpbmc7XHJcblxyXG4gIC8vIE1vZGVsXHJcbiAgZGlzcGxheTogT2JzZXJ2YWJsZTxzdHJpbmc+O1xyXG4gIEBJbnB1dCgpIHNldCBtb2RlbCh2YWx1ZTogdW5kZWZpbmVkIHwgYm9vbGVhbiB8IG51bWJlciB8IHN0cmluZyB8IChudW1iZXIgfCBzdHJpbmcpW10pIHtcclxuICAgIC8vIGlmKHRoaXMuZm9ybUNvbnRyb2wuZGlzYWJsZWQpIHtcclxuICAgIC8vICAgdGhpcy5mb3JtQ29udHJvbC5lbmFibGUoe1xyXG4gICAgLy8gICAgIGVtaXRFdmVudDogZmFsc2VcclxuICAgIC8vICAgfSk7XHJcbiAgICAvLyAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xyXG4gICAgLy8gICB0aGlzLmZvcm1Db250cm9sLmRpc2FibGUoe1xyXG4gICAgLy8gICAgIGVtaXRFdmVudDogZmFsc2VcclxuICAgIC8vICAgfSk7XHJcbiAgICAvLyB9IGVsc2Uge1xyXG4gICAgLy8gICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKHZhbHVlKTtcclxuICAgIC8vIH1cclxuICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUodmFsdWUpO1xyXG4gIH1cclxuICAvLyBJdGVtc1xyXG5cclxuICAjaXRlbXNDaGFuZ2VzID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnlbXSB8IFNlYXJjaEZ1bmM+KFtdKTtcclxuICBASW5wdXQoKSBzZXQgaXRlbXMoaXRlbXM6IHVuZGVmaW5lZCB8IGFueVtdIHwgU2VhcmNoRnVuYykge1xyXG4gICAgdGhpcy4jZGVsYXkgPSAwO1xyXG4gICAgaWYgKCFpdGVtcykge1xyXG4gICAgICB0aGlzLiNpdGVtc0NoYW5nZXMubmV4dChbXSk7XHJcbiAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaXRlbXMpKSB7XHJcbiAgICAgIHRoaXMuI2l0ZW1zQ2hhbmdlcy5uZXh0KGl0ZW1zLmZpbHRlcihlID0+IGUgIT09IG51bGwgJiYgZSAhPT0gdW5kZWZpbmVkKSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLiNkZWxheSA9IDUwMDtcclxuICAgICAgdGhpcy4jaXRlbXNDaGFuZ2VzLm5leHQoaXRlbXMpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5zZWFyY2hUZXJtJC5uZXh0KCcnKTtcclxuICB9XHJcbiAgQElucHV0KCkgdmFsdWVGaWVsZDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGRpc3BsYXlGaWVsZDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGNhY2hlQ2hlY2tzdW06IGFueTtcclxuXHJcbiAgLy8gU2VydmVyIHNlYXJjaFxyXG4gIGxvYWRpbmcgPSBmYWxzZTtcclxuICAjZGVsYXkgPSAyMDA7IC8vIFNhdSBraG/huqNuZyB0aOG7nWkgZ2lhbiBkZWxheSBu4bq/dSBraMO0bmcgY8OzIHRoYXkgxJHhu5VpIHRow6wgdGjDrCBt4bubaSBi4bqvdCDEkeG6p3UgdGjhu7FjIGhp4buHbiBn4buNaSBow6BtXHJcblxyXG4gIC8vIFZhbGlkYXRvclxyXG4gIGlzUmVxdWlyZWQgPSBmYWxzZTtcclxuICAjdmFsaWRhdG9yOiAodmFsdWU6IGFueSkgPT4gc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+O1xyXG4gIEBJbnB1dCgpIHNldCByZXF1aXJlZCh2YWw6IGJvb2xlYW4gfCAnJykge1xyXG4gICAgdGhpcy5pc1JlcXVpcmVkID0gKHZhbCA9PT0gJycpIHx8IHZhbDtcclxuICAgIHRoaXMuI3VwZGF0ZVZhbGlkYXRvcigpO1xyXG4gIH1cclxuICBASW5wdXQoKSBzZXQgdmFsaWRhdG9yKHZhbGlkYXRvcjogKHZhbHVlOiBhbnkpID0+IHN0cmluZyB8IFByb21pc2U8c3RyaW5nPikge1xyXG4gICAgdGhpcy4jdmFsaWRhdG9yID0gdmFsaWRhdG9yO1xyXG4gICAgdGhpcy4jdXBkYXRlVmFsaWRhdG9yKCk7XHJcbiAgfVxyXG4gIC8vIE9wdGlvbmFsXHJcbiAgQElucHV0KCkgc2V0IGRpc2FibGVkKHZhbDogYm9vbGVhbiB8ICcnKSB7XHJcbiAgICB2YWwgPSAodmFsID09PSAnJykgfHwgdmFsO1xyXG4gICAgaWYgKHZhbCkge1xyXG4gICAgICB0aGlzLmZvcm1Db250cm9sLmRpc2FibGUoKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuZW5hYmxlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIG11bHRpcGxlID0gZmFsc2U7XHJcbiAgQElucHV0KCdtdWx0aXBsZScpIHNldCBfbXVsdGlwbGUodmFsOiBib29sZWFuIHwgJycpIHtcclxuICAgIHRoaXMubXVsdGlwbGUgPSAodmFsID09PSAnJykgfHwgdmFsO1xyXG4gIH1cclxuICBASW5wdXQoKSBsaW1pdCA9IDEwMDtcclxuICBmaWx0ZXJlZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgnZmlsdGVyZWQnKSBzZXQgX2ZpbHRlcmVkKHZhbDogYm9vbGVhbiB8ICcnKSB7XHJcbiAgICB0aGlzLmZpbHRlcmVkID0gKHZhbCA9PT0gJycpIHx8IHZhbDtcclxuICB9XHJcbiAgQENvbnRlbnRDaGlsZChTZFNlbGVjdERpc3BsYXlEZWZEaXJlY3RpdmUpIHNlbGVjdERpc3BsYXlEZWY6IFNkU2VsZWN0RGlzcGxheURlZkRpcmVjdGl2ZTtcclxuICBzZWxlY3RBbGwgPSBmYWxzZTtcclxuICBASW5wdXQoJ3NlbGVjdEFsbCcpIHNldCBfc2VsZWN0QWxsKHZhbDogYm9vbGVhbiB8ICcnKSB7XHJcbiAgICB0aGlzLnNlbGVjdEFsbCA9ICh2YWwgPT09ICcnKSB8fCB2YWw7XHJcbiAgfVxyXG5cclxuICBAVmlld0NoaWxkKCdjb3B5VG9vbHRpcCcpIGNvcHlUb29sdGlwOiBNYXRUb29sdGlwO1xyXG4gIGNvcHlhYmxlID0gZmFsc2U7XHJcbiAgQElucHV0KCdjb3B5YWJsZScpIHNldCBfY29weWFibGUodmFsOiBib29sZWFuIHwgJycpIHtcclxuICAgIHRoaXMuY29weWFibGUgPSAodmFsID09PSAnJykgfHwgdmFsO1xyXG4gIH1cclxuICBjb3BpZWQgPSBmYWxzZTtcclxuICBASW5wdXQoKSBjb3B5VGV4dDogKCh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10sIGl0ZW1zOiBhbnlbXSkgPT4gc3RyaW5nKSB8IHN0cmluZztcclxuXHJcbiAgQE91dHB1dCgpIG1vZGVsQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBzZENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgc2RTZWxlY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPHsgdmFsdWU6IGFueSB8IGFueVtdLCBpdGVtPzogYW55LCBpdGVtcz86IGFueVtdIH0+KCk7XHJcbiAgI3N1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcclxuICBzZWxlY3RlZEl0ZW1zOiBPYnNlcnZhYmxlPGFueVtdPjtcclxuICAjYWxsSXRlbXM6IE9ic2VydmFibGU8YW55W10+O1xyXG4gIGZpbHRlcmVkSXRlbXM6IE9ic2VydmFibGU8YW55W10+O1xyXG4gICNhbGxJdGVtOiB7XHJcbiAgICBba2V5OiBzdHJpbmddOiBhbnlcclxuICB9ID0ge307XHJcbiAgYWxsU2VsZWN0ZWQgPSBmYWxzZTtcclxuICAjY2FjaGU6IHtcclxuICAgIFtrZXk6IHN0cmluZ106IGFueVtdXHJcbiAgfSA9IHt9O1xyXG4gIEBDb250ZW50Q2hpbGQoU2RMYWJlbERlZkRpcmVjdGl2ZSkgc2RMYWJlbERlZjogU2RMYWJlbERlZkRpcmVjdGl2ZTtcclxuICBAQ29udGVudENoaWxkKFNkVmlld0RlZkRpcmVjdGl2ZSkgc2RWaWV3OiBTZFZpZXdEZWZEaXJlY3RpdmU7XHJcbiAgaXNGb2N1c2VkID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSByZWY6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQEluamVjdChGT1JNX0NPTkZJRykgQE9wdGlvbmFsKCkgcHJpdmF0ZSBmb3JtQ29uZmlnOiBJRm9ybUNvbmZpZ3VyYXRpb25cclxuICApIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHRoaXMuYXBwZWFyYW5jZSA9IHRoaXMuYXBwZWFyYW5jZSB8fCB0aGlzLmZvcm1Db25maWc/LmFwcGVhcmFuY2U7XHJcbiAgICB0aGlzLiNzdWJzY3JpcHRpb24uYWRkKHRoaXMuZm9ybUNvbnRyb2wuc2RDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfSkpO1xyXG4gICAgdGhpcy4jYWxsSXRlbXMgPSBjb21iaW5lTGF0ZXN0KFtcclxuICAgICAgdGhpcy4jaXRlbXNDaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpLFxyXG4gICAgICB0aGlzLnNlYXJjaFRlcm0kLmFzT2JzZXJ2YWJsZSgpLnBpcGUoc3RhcnRXaXRoKCcnKSwgZGVib3VuY2VUaW1lKHRoaXMuI2RlbGF5KSksXHJcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKHRoaXMuZm9ybUNvbnRyb2wudmFsdWUpKV0pLnBpcGUoXHJcbiAgICAgICAgc3dpdGNoTWFwKGFzeW5jIChbaXRlbXMsIHZhbCwgZm9ybVZhbHVlXSkgPT4ge1xyXG4gICAgICAgICAgZm9ybVZhbHVlID0gdGhpcy5mb3JtQ29udHJvbC52YWx1ZTtcclxuICAgICAgICAgIGlmICh0eXBlb2YgKGl0ZW1zKSA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy4jbG9hZEl0ZW1zKHZhbCwgaXRlbXMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgdGhpcy4jYWxsSXRlbSA9IGl0ZW1zLnRvT2JqZWN0KHRoaXMudmFsdWVGaWVsZCk7XHJcbiAgICAgICAgICBjb25zdCBpc0FycmF5ID0gQXJyYXkuaXNBcnJheShmb3JtVmFsdWUpO1xyXG4gICAgICAgICAgY29uc3QgaGFzRmllbGRzID0gISF0aGlzLnZhbHVlRmllbGQgJiYgISF0aGlzLmRpc3BsYXlGaWVsZDtcclxuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkSXRlbXMgPSBpdGVtcy5maWx0ZXIoaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gaGFzRmllbGRzID8gaXRlbVt0aGlzLnZhbHVlRmllbGRdIDogaXRlbTtcclxuICAgICAgICAgICAgY29uc3QgZGlzcGxheSA9IGhhc0ZpZWxkcyA/IGl0ZW1bdGhpcy5kaXNwbGF5RmllbGRdIDogaXRlbTtcclxuICAgICAgICAgICAgaWYgKFN0cmluZy5hbGlhc0luY2x1ZGVzKHZhbHVlLCB2YWwpIHx8IFN0cmluZy5hbGlhc0luY2x1ZGVzKGRpc3BsYXksIHZhbCkpIHtcclxuICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoaXNBcnJheSkge1xyXG4gICAgICAgICAgICAgIHJldHVybiBmb3JtVmFsdWUuc29tZShlID0+IGUgPT09IHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZm9ybVZhbHVlID09PSB2YWx1ZTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA8PSB0aGlzLmxpbWl0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJlZEl0ZW1zO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgLy8gxJDGsGEgbmjhu69uZyBzZWxlY3RlZEl0ZW1zIGzDqm4gxJHhuqd1IG7hur91IGtow7RuZyBtYXQtc2VsZWN0LXRyaWdnZXIgc+G6vSBraMO0bmcgd29ya1xyXG4gICAgICAgICAgcmV0dXJuIGZpbHRlcmVkSXRlbXMuc29ydCgoY3VycmVudCwgbmV4dCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZTEgPSBoYXNGaWVsZHMgPyBjdXJyZW50W3RoaXMudmFsdWVGaWVsZF0gOiBjdXJyZW50O1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZTIgPSBoYXNGaWVsZHMgPyBuZXh0W3RoaXMudmFsdWVGaWVsZF0gOiBuZXh0O1xyXG4gICAgICAgICAgICBsZXQgZmxhZzEgPSAwO1xyXG4gICAgICAgICAgICBsZXQgZmxhZzIgPSAwO1xyXG4gICAgICAgICAgICBpZiAoaXNBcnJheSkge1xyXG4gICAgICAgICAgICAgIGZsYWcxID0gZm9ybVZhbHVlLnNvbWUoZSA9PiBlID09PSB2YWx1ZTEpID8gMSA6IDA7XHJcbiAgICAgICAgICAgICAgZmxhZzIgPSBmb3JtVmFsdWUuc29tZShlID0+IGUgPT09IHZhbHVlMikgPyAxIDogMDtcclxuICAgICAgICAgICAgICByZXR1cm4gZmxhZzIgLSBmbGFnMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBmbGFnMSA9IGZvcm1WYWx1ZSA9PT0gdmFsdWUxID8gMSA6IDA7XHJcbiAgICAgICAgICAgIGZsYWcyID0gZm9ybVZhbHVlID09PSB2YWx1ZTIgPyAxIDogMDtcclxuICAgICAgICAgICAgcmV0dXJuIGZsYWcyIC0gZmxhZzE7XHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9KSk7XHJcbiAgICB0aGlzLnNlbGVjdGVkSXRlbXMgPSBjb21iaW5lTGF0ZXN0KFtcclxuICAgICAgdGhpcy4jaXRlbXNDaGFuZ2VzLmFzT2JzZXJ2YWJsZSgpLFxyXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aCh0aGlzLmZvcm1Db250cm9sLnZhbHVlKSldKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBzd2l0Y2hNYXAoYXN5bmMgKFtpdGVtcywgdmFsXSkgPT4ge1xyXG4gICAgICAgICAgLy8gVsOsIG3hu5l0IHPhu5EgbMO9IGRvIGNoxrBhIHjDoWMgxJHhu4tuaCBtw6Aga2hpIHPhu60gZOG7pW5nIHNkVmlld0RlZiB0aMOsIGtoaSBjaHV54buDbiBzYW5nIGThuqFuZyB2aWV3IHPhur0gdHJpZ2dlciB2YWwgPSBudWxsXHJcbiAgICAgICAgICAvLyBOaMawbmcgZm9ybUNvbnRyb2wudmFsdWUgduG6q24gY8OzIGdpw6EgdHLhu4sgxJHDum5nIG7Dqm4gdGjhu7FjIGhp4buHbiBnw6FuIHZhbCA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWU7XHJcbiAgICAgICAgICB2YWwgPSB0aGlzLmZvcm1Db250cm9sLnZhbHVlO1xyXG4gICAgICAgICAgaWYgKCF2YWw/LnRvU3RyaW5nKCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgY29uc3QgdmFsdWVzID0gQXJyYXkuaXNBcnJheSh2YWwpID8gdmFsIDogW3ZhbF07XHJcbiAgICAgICAgICBpZiAoIXRoaXMudmFsdWVGaWVsZCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdmFsdWVzO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKHR5cGVvZiAoaXRlbXMpID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCB0aGlzLiNsb2FkU2VsZWN0ZWRJdGVtcyh2YWwsIGl0ZW1zKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHJldHVybiB2YWx1ZXMubWFwKHZhbHVlID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGl0ZW1zPy5maW5kKGl0ZW0gPT4gaXRlbVt0aGlzLnZhbHVlRmllbGRdID09PSB2YWx1ZSkgfHwge1xyXG4gICAgICAgICAgICAgIFt0aGlzLnZhbHVlRmllbGRdOiB2YWx1ZSxcclxuICAgICAgICAgICAgICBbdGhpcy5kaXNwbGF5RmllbGRdOiB2YWx1ZVxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIHRoaXMuZmlsdGVyZWRJdGVtcyA9IHRoaXMuI2FsbEl0ZW1zLnBpcGUobWFwKGFsbEl0ZW1zID0+IGFsbEl0ZW1zLnBhZ2luZyh0aGlzLmxpbWl0KSkpO1xyXG4gICAgdGhpcy5kaXNwbGF5ID0gdGhpcy5zZWxlY3RlZEl0ZW1zLnBpcGUoXHJcbiAgICAgIG1hcChzZWxlY3RlZEl0ZW1zID0+IHNlbGVjdGVkSXRlbXM/Lm1hcChpdGVtID0+IHRoaXMuZGlzcGxheUZpZWxkID8gaXRlbVt0aGlzLmRpc3BsYXlGaWVsZF0gOiBpdGVtKT8uam9pbignLCAnKSkpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy4jZm9ybT8uYWRkQ29udHJvbCh0aGlzLiNuYW1lLCB0aGlzLmZvcm1Db250cm9sKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy4jZm9ybT8ucmVtb3ZlQ29udHJvbCh0aGlzLiNuYW1lKTtcclxuICAgIHRoaXMuI3N1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgI3VwZGF0ZVZhbGlkYXRvciA9ICgpID0+IHtcclxuICAgIHRoaXMuZm9ybUNvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKCk7XHJcbiAgICB0aGlzLmZvcm1Db250cm9sLmNsZWFyQXN5bmNWYWxpZGF0b3JzKCk7XHJcbiAgICBjb25zdCB2YWxpZGF0b3JzOiBWYWxpZGF0b3JGbltdID0gW107XHJcbiAgICBjb25zdCBhc3luY1ZhbGlkYXRvcnM6IEFzeW5jVmFsaWRhdG9yRm5bXSA9IFtdO1xyXG4gICAgaWYgKHRoaXMuaXNSZXF1aXJlZCkge1xyXG4gICAgICB2YWxpZGF0b3JzLnB1c2goVmFsaWRhdG9ycy5yZXF1aXJlZCk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy4jdmFsaWRhdG9yKSB7XHJcbiAgICAgIGFzeW5jVmFsaWRhdG9ycy5wdXNoKHRoaXMuI2N1c3RvbVZhbGlkYXRvcih0aGlzLiN2YWxpZGF0b3IpKTtcclxuICAgIH1cclxuICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsaWRhdG9ycyh2YWxpZGF0b3JzKTtcclxuICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0QXN5bmNWYWxpZGF0b3JzKGFzeW5jVmFsaWRhdG9ycyk7XHJcbiAgICB0aGlzLmZvcm1Db250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICB9XHJcblxyXG4gICNsb2FkU2VsZWN0ZWRJdGVtcyA9IGFzeW5jICh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10sIGl0ZW1zOiBTZWFyY2hGdW5jKSA9PiB7XHJcbiAgICBpZiAoIXZhbHVlPy50b1N0cmluZygpKSB7XHJcbiAgICAgIHJldHVybiBbXTtcclxuICAgIH1cclxuICAgIGNvbnN0IHZhbHVlcyA9IEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUgOiBbdmFsdWVdO1xyXG4gICAgaWYgKCF0aGlzLnZhbHVlRmllbGQgJiYgIXRoaXMuZGlzcGxheUZpZWxkKSB7XHJcbiAgICAgIHJldHVybiB2YWx1ZXM7XHJcbiAgICB9XHJcbiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgaWYgKHZhbHVlcy5zb21lKHZhbCA9PiB0aGlzLiNhbGxJdGVtW3ZhbF0gPT09IHVuZGVmaW5lZCkpIHtcclxuICAgICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IGl0ZW1zKHZhbHVlLCB0cnVlKS5jYXRjaCgoKSA9PiBbXSkuZmluYWxseSgoKSA9PiB0aGlzLmxvYWRpbmcgPSBmYWxzZSk7XHJcbiAgICAgIGNvbnN0IG9iakl0ZW0gPSBBcnJheS50b09iamVjdChyZXN1bHRzLCB0aGlzLnZhbHVlRmllbGQpO1xyXG4gICAgICBjb25zdCBvYmpWYWx1ZSA9IEFycmF5LnRvT2JqZWN0KFxyXG4gICAgICAgIHZhbHVlcy5tYXAodmFsID0+ICh7IFt2YWw/LnRvU3RyaW5nKCldOiB7IFt0aGlzLnZhbHVlRmllbGRdOiB2YWwsIFt0aGlzLmRpc3BsYXlGaWVsZF06IHZhbCB9IH0pKSwgdGhpcy52YWx1ZUZpZWxkKTtcclxuICAgICAgdGhpcy4jYWxsSXRlbSA9IHtcclxuICAgICAgICAuLi5vYmpWYWx1ZSxcclxuICAgICAgICAuLi50aGlzLiNhbGxJdGVtLFxyXG4gICAgICAgIC4uLm9iakl0ZW1cclxuICAgICAgfTtcclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZXMubWFwKHZhbCA9PiB0aGlzLiNhbGxJdGVtW3ZhbD8udG9TdHJpbmcoKV0gPz8geyBbdGhpcy52YWx1ZUZpZWxkXTogdmFsLCBbdGhpcy5kaXNwbGF5RmllbGRdOiB2YWwgfSk7XHJcbiAgfVxyXG5cclxuICAjbG9hZEl0ZW1zID0gYXN5bmMgKHNlYXJjaFRleHQ6IHN0cmluZywgaXRlbXM6IFNlYXJjaEZ1bmMpID0+IHtcclxuICAgIHNlYXJjaFRleHQgPSBzZWFyY2hUZXh0Py50b1N0cmluZygpIHx8ICcnO1xyXG4gICAgY29uc3Qga2V5ID0gaGFzaCh7XHJcbiAgICAgIGNoZWNrc3VtOiB0aGlzLmNhY2hlQ2hlY2tzdW0gfHwgbnVsbCxcclxuICAgICAgc2VhcmNoVGV4dFxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuI2NhY2hlW2tleV0gPT09IHVuZGVmaW5lZCAmJiB0aGlzLmlzRm9jdXNlZCkge1xyXG4gICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgaXRlbXMoc2VhcmNoVGV4dCkuY2F0Y2goKCkgPT4gW10pLmZpbmFsbHkoKCkgPT4gdGhpcy5sb2FkaW5nID0gZmFsc2UpO1xyXG4gICAgICBjb25zdCBvYmpJdGVtID0gQXJyYXkudG9PYmplY3QocmVzdWx0cywgdGhpcy52YWx1ZUZpZWxkKTtcclxuICAgICAgdGhpcy4jYWxsSXRlbSA9IHtcclxuICAgICAgICAuLi50aGlzLiNhbGxJdGVtLFxyXG4gICAgICAgIC4uLm9iakl0ZW1cclxuICAgICAgfTtcclxuICAgICAgdGhpcy4jY2FjaGVba2V5XSA9IHJlc3VsdHMudW5pb24odGhpcy52YWx1ZUZpZWxkKTtcclxuICAgIH1cclxuICAgIGNvbnN0IHNlbGVjdGVkSXRlbXMgPSBhd2FpdCB0aGlzLiNsb2FkU2VsZWN0ZWRJdGVtcyh0aGlzLmZvcm1Db250cm9sLnZhbHVlLCBpdGVtcyk7XHJcbiAgICAvLyDEkMawYSBuaOG7r25nIHNlbGVjdGVkSXRlbXMgbMOqbiDEkeG6p3UgbuG6v3Uga2jDtG5nIG1hdC1zZWxlY3QtdHJpZ2dlciBz4bq9IGtow7RuZyB3b3JrXHJcbiAgICByZXR1cm4gWy4uLnNlbGVjdGVkSXRlbXMsIC4uLih0aGlzLiNjYWNoZVtrZXldIHx8IFtdKV0udW5pb24odGhpcy52YWx1ZUZpZWxkKTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0aW9uQ2hhbmdlID0gKGNoYW5nZTogTWF0U2VsZWN0Q2hhbmdlKSA9PiB7XHJcbiAgICB0aGlzLmFsbFNlbGVjdGVkID0gIXRoaXMuc2VsZWN0Lm9wdGlvbnMuc29tZShlID0+ICFlLnNlbGVjdGVkKTtcclxuICAgIGNvbnN0IHZhbHVlID0gY2hhbmdlPy52YWx1ZSA/PyAnJztcclxuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgIHRoaXMuI29uQ2hhbmdlKHZhbHVlIHx8IFtdKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VhcmNoVGVybSQubmV4dCgnJyk7XHJcbiAgICAgIHRoaXMuI29uQ2hhbmdlKHZhbHVlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uU2VsZWN0QWxsKCkge1xyXG4gICAgaWYgKHRoaXMuYWxsU2VsZWN0ZWQpIHtcclxuICAgICAgdGhpcy5mb3JtQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnNlbGVjdC5vcHRpb25zLm1hcChlID0+IGUudmFsdWUpKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoW10pO1xyXG4gICAgfVxyXG4gICAgdGhpcy4jb25DaGFuZ2UodGhpcy5mb3JtQ29udHJvbC52YWx1ZSk7XHJcbiAgfVxyXG5cclxuICByZVZhbGlkYXRlID0gKCkgPT4ge1xyXG4gICAgdGhpcy5mb3JtQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KHsgZW1pdEV2ZW50OiB0cnVlIH0pO1xyXG4gIH1cclxuXHJcbiAgI29uQ2hhbmdlID0gYXN5bmMgKHZhbHVlOiBib29sZWFuIHwgbnVtYmVyIHwgc3RyaW5nIHwgKG51bWJlciB8IHN0cmluZylbXSkgPT4ge1xyXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XHJcbiAgICAgIHRoaXMubW9kZWxDaGFuZ2UuZW1pdCh2YWx1ZSk7XHJcbiAgICAgIHRoaXMuc2RDaGFuZ2UuZW1pdCh2YWx1ZSk7XHJcbiAgICAgIHRoaXMuc2RTZWxlY3Rpb24uZW1pdCh7XHJcbiAgICAgICAgdmFsdWU6IHZhbHVlLFxyXG4gICAgICAgIGl0ZW1zOiB2YWx1ZS5tYXAodmFsID0+IHRoaXMuI2FsbEl0ZW1bdmFsPy50b1N0cmluZygpXSlcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQodmFsdWUpO1xyXG4gICAgICB0aGlzLnNkQ2hhbmdlLmVtaXQodmFsdWUpO1xyXG4gICAgICB0aGlzLnNkU2VsZWN0aW9uLmVtaXQoe1xyXG4gICAgICAgIHZhbHVlOiB2YWx1ZSxcclxuICAgICAgICBpdGVtOiB0aGlzLiNhbGxJdGVtW3ZhbHVlPy50b1N0cmluZygpXVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNsZWFyID0gKCRldmVudD86IGFueSkgPT4ge1xyXG4gICAgJGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGlmICh0aGlzLm11bHRpcGxlKSB7XHJcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wuc2V0VmFsdWUoW10pO1xyXG4gICAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQoW10pO1xyXG4gICAgICB0aGlzLnNkQ2hhbmdlLmVtaXQoW10pO1xyXG4gICAgICB0aGlzLnNkU2VsZWN0aW9uLmVtaXQoe1xyXG4gICAgICAgIHZhbHVlOiBbXSxcclxuICAgICAgICBpdGVtczogW11cclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmZvcm1Db250cm9sLnNldFZhbHVlKG51bGwpO1xyXG4gICAgICB0aGlzLm1vZGVsQ2hhbmdlLmVtaXQobnVsbCk7XHJcbiAgICAgIHRoaXMuc2RDaGFuZ2UuZW1pdChudWxsKTtcclxuICAgICAgdGhpcy5zZFNlbGVjdGlvbi5lbWl0KHtcclxuICAgICAgICB2YWx1ZTogbnVsbCxcclxuICAgICAgICBpdGVtOiBudWxsXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25DbGljayA9ICgpID0+IHtcclxuICAgIGlmICh0aGlzLnNkVmlldz8udGVtcGxhdGVSZWYpIHtcclxuICAgICAgaWYgKCF0aGlzLmZvcm1Db250cm9sLmRpc2FibGVkICYmICF0aGlzLmlzRm9jdXNlZCkge1xyXG4gICAgICAgIHRoaXMuZm9jdXMoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZm9jdXMgPSAoKSA9PiB7XHJcbiAgICB0aGlzLmlzRm9jdXNlZCA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5zZWxlY3Q/LmZvY3VzKCk7XHJcbiAgICAgIHRoaXMuc2VsZWN0Py5vcGVuKCk7XHJcbiAgICB9LCAxMDApO1xyXG4gIH1cclxuXHJcbiAgI2N1c3RvbVZhbGlkYXRvciA9IChmdW5jOiAodmFsdWU6IGFueSkgPT4gc3RyaW5nIHwgUHJvbWlzZTxzdHJpbmc+KTogQXN5bmNWYWxpZGF0b3JGbiA9PiB7XHJcbiAgICByZXR1cm4gYXN5bmMgKGM6IEFic3RyYWN0Q29udHJvbCk6IFByb21pc2U8eyBba2V5OiBzdHJpbmddOiBhbnkgfSB8IG51bGw+ID0+IHtcclxuICAgICAgY29uc3QgdmFsdWUgPSBjLnZhbHVlIHx8IG51bGw7XHJcbiAgICAgIGlmIChmdW5jICYmIHR5cGVvZiAoZnVuYykgPT09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBmdW5jKHZhbHVlKTtcclxuICAgICAgICBpZiAocmVzdWx0IGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGF3YWl0IHJlc3VsdDtcclxuICAgICAgICAgIGlmIChtZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgY3VzdG9tVmFsaWRhdG9yOiBtZXNzYWdlXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgY3VzdG9tVmFsaWRhdG9yOiByZXN1bHRcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIG9uT3BlbkNoYW5nZSA9IChpc09wZW5lZDogYm9vbGVhbikgPT4ge1xyXG4gICAgaWYgKGlzT3BlbmVkKSB7XHJcbiAgICAgIHRoaXMuaXNGb2N1c2VkID0gdHJ1ZTtcclxuICAgICAgaWYgKHRoaXMuI2lucHV0KSB7XHJcbiAgICAgICAgdGhpcy4jaW5wdXQudmFsdWUgPSBudWxsO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuc2VhcmNoVGVybSQubmV4dCgnJyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmlzRm9jdXNlZCA9IGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25PcHRpb25DaGFuZ2UgPSAodG9vbHRpcDogTWF0VG9vbHRpcCkgPT4ge1xyXG4gICAgdG9vbHRpcD8uaGlkZSgpO1xyXG4gIH1cclxuXHJcbiAgdHJhY2tCeUtleSA9IChpbmRleCwgaXRlbSkgPT4ge1xyXG4gICAgaWYgKHRoaXMudmFsdWVGaWVsZCkge1xyXG4gICAgICByZXR1cm4gaXRlbT8uW3RoaXMudmFsdWVGaWVsZF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gaXRlbTtcclxuICB9XHJcblxyXG4gIG9uQ29weVRleHQgPSAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcclxuICAgIGV2ZW50Py5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIGNvbnN0IHRleHQ6IHN0cmluZyA9IHRoaXMuI2dldENvcHlUZXh0KCk7XHJcbiAgICBTZFV0aWxpdHkuY29weVRvQ2xpcGJvYXJkKHRleHQpO1xyXG4gICAgdGhpcy5jb3BpZWQgPSB0cnVlO1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIHRoaXMuY29waWVkID0gZmFsc2U7XHJcbiAgICAgIHRoaXMucmVmLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfSwgMjAwMClcclxuICB9XHJcblxyXG4gICNnZXRDb3B5VGV4dCA9ICgpID0+IHtcclxuICAgIGNvbnN0IHZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXSA9IHRoaXMuZm9ybUNvbnRyb2wudmFsdWU7XHJcbiAgICBsZXQgdGV4dCA9IHZhbHVlPy50b1N0cmluZygpID8/ICcnO1xyXG4gICAgaWYgKHR5cGVvZiB0aGlzLmNvcHlUZXh0ID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xyXG4gICAgICAgIHRleHQgPSB0aGlzLmNvcHlUZXh0KHZhbHVlLCB2YWx1ZS5tYXAodmFsID0+IHRoaXMuI2FsbEl0ZW1bdmFsPy50b1N0cmluZygpXSkpXHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgdGV4dCA9IHRoaXMuY29weVRleHQodmFsdWUsIHRoaXMuI2FsbEl0ZW1bdmFsdWU/LnRvU3RyaW5nKCldKVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmICh0aGlzLmNvcHlUZXh0KSB7XHJcbiAgICAgIHRleHQgPSB0aGlzLmNvcHlUZXh0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRleHQ7XHJcbiAgfVxyXG59XHJcblxyXG50eXBlIFNlYXJjaEZ1bmMgPSAoc2VhcmNoVGV4dD86IHN0cmluZyB8IHN0cmluZ1tdLCBpc0Zvcm1WYWx1ZT86IGJvb2xlYW4pID0+IFByb21pc2U8YW55W10+OyJdfQ==
|