@sd-angular/core 1.2.86 → 1.2.87

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.
Files changed (33) hide show
  1. package/bundles/sd-angular-core-comment.umd.js +1 -1
  2. package/bundles/sd-angular-core-comment.umd.js.__ivy_ngcc_bak +1 -1
  3. package/bundles/sd-angular-core-comment.umd.js.map +1 -1
  4. package/bundles/sd-angular-core-comment.umd.js.map.__ivy_ngcc_bak +1 -1
  5. package/bundles/sd-angular-core-comment.umd.min.js +1 -1
  6. package/bundles/sd-angular-core-comment.umd.min.js.map +1 -1
  7. package/bundles/sd-angular-core-editor.umd.js +126 -20
  8. package/bundles/sd-angular-core-editor.umd.js.__ivy_ngcc_bak +126 -20
  9. package/bundles/sd-angular-core-editor.umd.js.map +1 -1
  10. package/bundles/sd-angular-core-editor.umd.js.map.__ivy_ngcc_bak +1 -1
  11. package/bundles/sd-angular-core-editor.umd.min.js +2 -2
  12. package/bundles/sd-angular-core-editor.umd.min.js.map +1 -1
  13. package/comment/sd-angular-core-comment.metadata.json +1 -1
  14. package/comment/src/lib/comment.model.d.ts +1 -0
  15. package/editor/sd-angular-core-editor.metadata.json +1 -1
  16. package/editor/src/lib/editor.component.d.ts +14 -4
  17. package/editor/src/lib/editor.model.d.ts +6 -0
  18. package/editor/src/public-api.d.ts +1 -0
  19. package/esm2015/comment/src/lib/comment.component.js +2 -2
  20. package/esm2015/comment/src/lib/comment.model.js +1 -1
  21. package/esm2015/editor/src/lib/editor.component.js +121 -18
  22. package/esm2015/editor/src/lib/editor.model.js +3 -0
  23. package/esm2015/editor/src/public-api.js +2 -1
  24. package/fesm2015/sd-angular-core-comment.js +1 -1
  25. package/fesm2015/sd-angular-core-comment.js.__ivy_ngcc_bak +1 -1
  26. package/fesm2015/sd-angular-core-comment.js.map +1 -1
  27. package/fesm2015/sd-angular-core-comment.js.map.__ivy_ngcc_bak +1 -1
  28. package/fesm2015/sd-angular-core-editor.js +122 -18
  29. package/fesm2015/sd-angular-core-editor.js.__ivy_ngcc_bak +122 -18
  30. package/fesm2015/sd-angular-core-editor.js.map +1 -1
  31. package/fesm2015/sd-angular-core-editor.js.map.__ivy_ngcc_bak +1 -1
  32. package/package.json +1 -1
  33. package/{sd-angular-core-1.2.86.tgz → sd-angular-core-1.2.87.tgz} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../node_modules/tslib/tslib.es6.js","../../../../projects/sd-core/editor/src/lib/constant.ts","../../../../projects/sd-core/editor/src/lib/editor.component.ts","../../../../projects/sd-core/editor/src/lib/editor.module.ts"],"names":["Object","create","__classPrivateFieldGet","receiver","state","kind","f","TypeError","has","call","value","get","__classPrivateFieldSet","set","Constants","ARE_YOU_WANT_TO_DELETE","ACTIVE","IN_ACTIVE","APPROVE","UN_APPROVE","ACCEPT_SIZE_IMAGE","ACCEPT_TYPE_IMAGE","PAGE_TYPE_NEW","PAGE_TYPE_EDIT","SAVE","SAVE_AND_CONTINUE","IMAGE_SIZE","SUCCESS","IMPORT_SUCCESSFULLY","ERROR","FAILED","FILE","NONE","NOT_EXIST_ID_OR_LINK","FEATURE_IS_PENDING","NOT_SUPPORT_FILE_IMAGE","NOT_SUPPORT_FILE_IMPORT","NETWORK_ERROR","SORT_BY","name","DESC","FORM_ERRORS","Id","textSearch","ImportLogId","SortBy","Reverse","VALIDATION_MESSAGES","ValidateMessageConstants","TITLE_REQUIRED","TITLE_MAXLENGTH","TITLE_PATTERN","CREATED_AT_REQUIRED","SHOW_ON_HOME_REQUIRED","DISPLAY_NUMBER_REQUIRED","CONTENT_TYPE_REQUIRED","DISCOUNT_PERCENT_REQUIRED","DISCOUNT_PERCENT_MAX","DISCOUNT_PERCENT_MIN","PROMOTION_FORM","title","createdAt","displayNumber","showOnHome","discountPercent","isActive","ctaLabelName","ctaDeepLink","tags","required","maxlength","pattern","max","min","SdEditor","ngZone","ref","sdApiService","_this","this","_name","uuid.v4","id","_subscription","Subscription","_model","modelChange","EventEmitter","placeholder","styles","height","formControl","FormControl","domain","_form","enableHTMLButton","showHtmlEditor","quillConfig","toolbar","container","header","list","script","indent","direction","size","color","background","font","align","mention","allowedChars","mentionDenotationChars","source","searchTerm","renderList","mentionChar","mentionValues","hashTagValues","values","length","matches","i","toLowerCase","indexOf","push","keyboard","bindings","enter","key","handler","range","context","textLength","sdChange","_updateValidator","clearValidators","clearAsyncValidators","validators","Validators","minlength","minLength","maxLength","setValidators","updateValueAndValidity","markForCheck","editorInit","quill","quillEvent","self","runOutsideAngular","getModule","addHandler","fileInput","querySelector","document","createElement","setAttribute","classList","add","addEventListener","files","getSelection","formData","FormData","append","enable","_uploadImage","appendChild","click","onModelChange","val","setValue","modelHTML","onClickShowHtmlEditor","urlUploadImage","post","then","resp","dangerouslyPasteHTML","index","_a","data","imageUrl","_b","publish_url","url","_c","_d","content","getContents","setContents","setSelection","defineProperty","prototype","emitEvent","detectChanges","disable","NgForm","form","ngOnInit","addControl","console","log","ngAfterViewInit","valueChanges","subscribe","emit","ngOnDestroy","removeControl","unsubscribe","Component","args","selector","template","changeDetection","ChangeDetectionStrategy","OnPush","NgZone","ChangeDetectorRef","SdApiService","ViewChild","Input","Output","ContentChild","SdLabelDefDirective","NgModule","declarations","imports","CommonModule","FormsModule","ReactiveFormsModule","QuillModule","forRoot","SdTranslateModule","SdButtonModule","SdTextareaModule","SdApiModule","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","export const Constants = {\r\n ARE_YOU_WANT_TO_DELETE: 'Are you sure you want to delete?',\r\n ACTIVE: 'active',\r\n IN_ACTIVE: 'inactive',\r\n APPROVE: 'approve',\r\n UN_APPROVE: 'unapprove',\r\n ACCEPT_SIZE_IMAGE: 'Logo only accept image with size <= 2MB',\r\n ACCEPT_TYPE_IMAGE:\r\n 'image/png, image/gif, image/jpeg, image/bmp, image/x-icon',\r\n PAGE_TYPE_NEW: 'new',\r\n PAGE_TYPE_EDIT: 'edit',\r\n SAVE: 'saveOb',\r\n SAVE_AND_CONTINUE: 'saveAndContOb',\r\n IMAGE_SIZE: 2048000,\r\n SUCCESS: 'Success',\r\n IMPORT_SUCCESSFULLY: 'Import successfully!',\r\n ERROR: 'Error',\r\n FAILED: 'fail',\r\n FILE: 'file',\r\n NONE: 'none',\r\n NOT_EXIST_ID_OR_LINK: 'This ID/Link is not existing',\r\n FEATURE_IS_PENDING: 'This feature is pending',\r\n NOT_SUPPORT_FILE_IMAGE: 'File upload is not supported.',\r\n NOT_SUPPORT_FILE_IMPORT: 'File import is not supported.',\r\n NETWORK_ERROR: 'Network Error',\r\n SORT_BY: [\r\n {\r\n value: 0,\r\n name: 'Created Date'\r\n },\r\n {\r\n value: 1,\r\n name: 'Title'\r\n }\r\n ],\r\n DESC: [\r\n {\r\n value: true,\r\n name: 'Descending'\r\n },\r\n {\r\n value: false,\r\n name: 'Ascending'\r\n }\r\n ],\r\n FORM_ERRORS: {\r\n Id: '',\r\n textSearch: '',\r\n ImportLogId: '',\r\n SortBy: '',\r\n Reverse: '',\r\n },\r\n VALIDATION_MESSAGES: {}\r\n};\r\n\r\nexport const PROMOTION_PERMISSIONS = ['ListPromotion', 'AddNewPromotion', 'EditPromotion',\r\n 'ActiveOrInactivePromotion', 'RemovePromotion', 'ImportPromotion', 'ExportPromotion'];\r\n\r\nexport const ValidateMessageConstants = {\r\n TITLE_REQUIRED: 'Title is required',\r\n TITLE_MAXLENGTH: 'Title is not more than 55 characters',\r\n TITLE_PATTERN: 'Title is required',\r\n\r\n CREATED_AT_REQUIRED: 'Created At is required',\r\n\r\n SHOW_ON_HOME_REQUIRED: 'Show On Home is required',\r\n\r\n DISPLAY_NUMBER_REQUIRED: 'Display Number is required',\r\n\r\n CONTENT_TYPE_REQUIRED: 'Content Type is required',\r\n\r\n DISCOUNT_PERCENT_REQUIRED: 'Discount percent is required',\r\n DISCOUNT_PERCENT_MAX: 'Max discount percent is 100, cannot input greater',\r\n DISCOUNT_PERCENT_MIN: 'Min discount percent is 0, cannot input lower'\r\n};\r\n\r\nexport const PROMOTION_FORM = {\r\n FORM_ERRORS: {\r\n title: '',\r\n createdAt: '',\r\n displayNumber: '',\r\n showOnHome: '',\r\n discountPercent: '',\r\n isActive: '',\r\n ctaLabelName: '',\r\n ctaDeepLink: '',\r\n tags: ''\r\n },\r\n VALIDATION_MESSAGES: {\r\n title: {\r\n required: ValidateMessageConstants.TITLE_REQUIRED,\r\n maxlength: ValidateMessageConstants.TITLE_MAXLENGTH,\r\n pattern: ValidateMessageConstants.TITLE_PATTERN\r\n },\r\n createdAt: {\r\n required: ValidateMessageConstants.CREATED_AT_REQUIRED\r\n },\r\n showOnHome: {\r\n required: ValidateMessageConstants.SHOW_ON_HOME_REQUIRED\r\n },\r\n displayNumber: {\r\n required: ValidateMessageConstants.DISPLAY_NUMBER_REQUIRED\r\n },\r\n discountPercent: {\r\n required: ValidateMessageConstants.DISCOUNT_PERCENT_REQUIRED,\r\n max: ValidateMessageConstants.DISCOUNT_PERCENT_MAX,\r\n min: ValidateMessageConstants.DISCOUNT_PERCENT_MIN\r\n },\r\n tags: {\r\n required: ValidateMessageConstants.CONTENT_TYPE_REQUIRED\r\n }\r\n }\r\n};\r\n","import {\r\n Component,\r\n ViewChild,\r\n Input,\r\n OnInit,\r\n Output,\r\n EventEmitter,\r\n ChangeDetectorRef,\r\n AfterViewInit, OnDestroy, ChangeDetectionStrategy, NgZone, ContentChild\r\n} from '@angular/core';\r\nimport {QuillEditorComponent} from 'ngx-quill';\r\nimport * as uuid from 'uuid';\r\nimport {FormControl, FormGroup, NgForm, ValidatorFn, Validators} from '@angular/forms';\r\nimport {Constants} from './constant';\r\nimport {Subscription} from 'rxjs';\r\nimport {SdApiService} from '@sd-angular/core/api';\r\nimport 'quill-mention';\r\nimport { SdLabelDefDirective } from '@sd-angular/core/common';\r\n\r\n@Component({\r\n selector: 'sd-editor',\r\n templateUrl: './editor.component.html',\r\n styleUrls: ['./editor.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SdEditor implements OnInit, AfterViewInit, OnDestroy {\r\n #name = `N${uuid.v4()}`;\r\n id: string = `I${uuid.v4()}`;\r\n #subscription = new Subscription();\r\n @ViewChild('editor') editor: QuillEditorComponent;\r\n @Input() label: string;\r\n #model: string;\r\n @Input() set model(val: string) {\r\n this.#model = val;\r\n this.modelHTML = val;\r\n this.formControl.setValue(this.#model, {\r\n emitEvent: false\r\n });\r\n this.ref.detectChanges();\r\n }\r\n\r\n @Input() set disabled(val: boolean | '') {\r\n val = (val === '') || val;\r\n if (val) {\r\n this.formControl.disable();\r\n } else {\r\n this.formControl.enable();\r\n }\r\n }\r\n\r\n required = false;\r\n\r\n @Input() set pRequired(val: boolean | '') {\r\n this.required = (val === '') || val;\r\n this.#updateValidator();\r\n }\r\n\r\n minlength: number;\r\n\r\n @Input('minlength') set _minlength(val: number) {\r\n this.minlength = +val;\r\n this.#updateValidator();\r\n }\r\n\r\n maxlength: number;\r\n\r\n @Input('maxlength') set _maxlength(val: number) {\r\n this.maxlength = +val;\r\n this.#updateValidator();\r\n }\r\n\r\n @Output() modelChange = new EventEmitter<string>();\r\n\r\n @Input() placeholder: string = '';\r\n\r\n @Input() styles: any = {height: '250px'};\r\n\r\n formControl = new FormControl();\r\n\r\n @Input() domain = '';\r\n @Input() urlUploadImage: string;\r\n #form: FormGroup;\r\n @Input() set form(val: NgForm | FormGroup) {\r\n if (val) {\r\n if (val instanceof NgForm) {\r\n this.#form = val.form;\r\n } else {\r\n this.#form = val;\r\n }\r\n }\r\n }\r\n\r\n @Input() toolbar: any;\r\n @Input() enableHTMLButton = false;\r\n showHtmlEditor = false;\r\n modelHTML: string;\r\n\r\n quillEvent: any;\r\n @Input() mentionValues: { id: string, value: string, link?: string }[];\r\n @Input() hashTagValues: { id: string, value: string, link?: string }[];\r\n @ContentChild(SdLabelDefDirective) sdLabelDef: SdLabelDefDirective;\r\n quillConfig = {\r\n // toolbar: '.toolbar',\r\n toolbar: {\r\n container: [\r\n ['bold', 'italic', 'underline', 'strike'], // toggled buttons\r\n ['blockquote', 'code-block'],\r\n\r\n [{'header': 1}, {'header': 2}], // custom button values\r\n [{'list': 'ordered'}, {'list': 'bullet'}],\r\n [{'script': 'sub'}, {'script': 'super'}], // superscript/subscript\r\n [{'indent': '-1'}, {'indent': '+1'}], // outdent/indent\r\n [{'direction': 'rtl'}], // text direction\r\n\r\n [{'size': ['small', false, 'large', 'huge']}], // custom dropdown\r\n [{'header': [1, 2, 3, 4, 5, 6, false]}],\r\n\r\n [{'color': []}, {'background': []}], // dropdown with defaults from theme\r\n [{'font': []}],\r\n [{'align': []}],\r\n\r\n ['clean'], // remove formatting button\r\n\r\n ['link', 'image', 'video'] // link and image, video\r\n ]\r\n },\r\n mention: {\r\n allowedChars: /^[A-Za-z0-9\\sÅÄÖåäö._-]*$/,\r\n mentionDenotationChars: ['@', '#'],\r\n source: (searchTerm, renderList, mentionChar) => {\r\n if ((this.mentionValues && mentionChar === '@') || (this.hashTagValues && mentionChar === '#')) {\r\n let values;\r\n if (mentionChar === '@') {\r\n values = this.mentionValues;\r\n } else if (mentionChar === '#') {\r\n values = this.hashTagValues;\r\n } else {\r\n values = [];\r\n }\r\n\r\n if (searchTerm.length === 0) {\r\n renderList(values, searchTerm);\r\n } else {\r\n const matches = [];\r\n // tslint:disable-next-line:prefer-for-of\r\n for (let i = 0; i < values.length; i++) {\r\n // tslint:disable-next-line:no-bitwise\r\n if (~values[i].value.toLowerCase().indexOf(searchTerm.toLowerCase())) {\r\n matches.push(values[i]);\r\n }\r\n }\r\n renderList(matches, searchTerm);\r\n }\r\n }\r\n },\r\n },\r\n keyboard: {\r\n bindings: {\r\n enter: {\r\n key: 13,\r\n handler: (range, context) => {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n textLength: number = 0;\r\n @Output() sdChange = new EventEmitter<string>();\r\n\r\n constructor(\r\n private ngZone: NgZone,\r\n private ref: ChangeDetectorRef,\r\n private sdApiService: SdApiService\r\n ) {\r\n }\r\n\r\n ngOnInit() {\r\n this.#form?.addControl(this.#name, this.formControl);\r\n if (this.toolbar) {\r\n this.quillConfig.toolbar.container = this.toolbar;\r\n console.log('toolbar', this.quillConfig);\r\n }\r\n this.ref.markForCheck();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.#subscription.add(this.formControl.valueChanges.subscribe((val) => {\r\n this.modelChange.emit(val);\r\n this.sdChange.emit(val);\r\n }));\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#form?.removeControl(this.#name);\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n #updateValidator = () => {\r\n this.formControl.clearValidators();\r\n this.formControl.clearAsyncValidators();\r\n const validators: ValidatorFn[] = [];\r\n if (this.required) {\r\n validators.push(Validators.required);\r\n }\r\n if (this.minlength > 0) {\r\n validators.push(Validators.minLength(this.minlength));\r\n }\r\n if (this.maxlength > 0) {\r\n validators.push(Validators.maxLength(this.maxlength));\r\n }\r\n this.formControl.setValidators(validators);\r\n this.formControl.updateValueAndValidity();\r\n this.ref.markForCheck();\r\n }\r\n\r\n editorInit = (quill) => {\r\n this.quillEvent = quill;\r\n // const txtArea = document.createElement('textarea');\r\n // txtArea.style.cssText =\r\n // 'width: 100%;margin: 0px;background: rgb(29, 29, 29);' +\r\n // 'box-sizing: border-box;color: rgb(204, 204, 204);' +\r\n // 'font-size: 15px;outline: none;padding: 20px;' +\r\n // 'line-height: 24px;font-family: Consolas, Menlo, Monaco, &quot;Courier New&quot;, monospace;' +\r\n // 'position: absolute;top: 0;bottom: 0;border: none;display:none';\r\n\r\n // const htmlEditor = quill.addContainer('ql-custom');\r\n // htmlEditor.appendChild(txtArea);\r\n\r\n // const myEditor = quill.container;\r\n // quill.on('text-change', (delta, oldDelta, source) => {\r\n // const html = myEditor.children[0].innerHTML;\r\n // txtArea.value = html;\r\n // // if (quill.getLength() > this.maxlength) {\r\n // // quill.deleteText(this.maxlength, quill.getLength());\r\n // // }\r\n // // this.formControl.setValue(html);\r\n // });\r\n\r\n const self = this;\r\n this.ngZone.runOutsideAngular(() => {\r\n quill.getModule('toolbar').addHandler('image', function () {\r\n let fileInput = this.container.querySelector('input.ql-image[type=file]');\r\n \r\n if (fileInput == null) {\r\n fileInput = document.createElement('input');\r\n fileInput.setAttribute('type', Constants.FILE);\r\n fileInput.setAttribute('accept', 'image/png, image/gif, image/jpeg, image/bmp, image/x-icon');\r\n fileInput.classList.add('ql-image');\r\n fileInput.addEventListener('change', () => {\r\n const files = fileInput.files;\r\n const range = this.quill.getSelection(true);\r\n if (!files || !files.length) {\r\n return;\r\n }\r\n \r\n const formData = new FormData();\r\n formData.append(Constants.FILE, files[0]);\r\n \r\n this.quill.enable(false);\r\n /*this.apiService.post(this.domain + this.urlUploadImage, formData).subscribe((resp: any) => {\r\n this.quill.enable(true);\r\n this.quill.editor.insertEmbed(range.index, 'image', resp.data.imageUrl || resp.data.publish_url || resp.url);\r\n const content = this.quill.getContents();\r\n this.quill.setContents(content);\r\n this.quill.setSelection(range.index + 1, 'silent');\r\n fileInput.value = '';\r\n });*/\r\n self.#uploadImage(formData, quill, range, fileInput);\r\n });\r\n this.container.appendChild(fileInput);\r\n }\r\n fileInput.click();\r\n });\r\n })\r\n this.ref.markForCheck();\r\n }\r\n\r\n onModelChange = (val: string) => {\r\n this.formControl.setValue(val);\r\n this.modelHTML = val;\r\n this.ref.markForCheck();\r\n }\r\n\r\n onClickShowHtmlEditor = () => {\r\n this.showHtmlEditor = !this.showHtmlEditor;\r\n this.ref.markForCheck();\r\n }\r\n\r\n #uploadImage = (formData, quill, range, fileInput) => {\r\n if (!this.urlUploadImage) {\r\n this.urlUploadImage = '/partner/v2/merchandise/file/uploaduserfile';\r\n }\r\n // this.domain = 'https://api-commerce-qc.vinid.dev';\r\n this.sdApiService.post(this.urlUploadImage, formData).then((resp: any) => {\r\n this.ngZone.runOutsideAngular(() => {\r\n quill.enable(true);\r\n // quill.editor.insertEmbed(range.index, 'image', resp?.data?.imageUrl || resp?.data?.publish_url || resp?.url || '');\r\n quill.getModule('clipboard').dangerouslyPasteHTML(range.index, '<a target=\"_blank\" href=\"' + (resp?.data?.imageUrl || resp?.data?.publish_url || resp?.url || '')\r\n + '\"><img src=\"' + (resp?.data?.imageUrl || resp?.data?.publish_url || resp?.url || '') + '\" alt=\"c-image-editor-quill\"></a>', 'user');\r\n // quill.insertText();\r\n const content = quill.getContents();\r\n quill.setContents(content);\r\n quill.setSelection(range.index + 1, 'user');\r\n fileInput.value = '';\r\n })\r\n });\r\n this.ref.markForCheck();\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { QuillModule } from 'ngx-quill';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { SdEditor } from './editor.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SdTranslateModule } from '@sd-angular/core/translate';\r\nimport {SdButtonModule} from '@sd-angular/core/button';\r\nimport {SdTextareaModule} from '@sd-angular/core/textarea';\r\nimport {SdApiModule, SdApiService} from '@sd-angular/core/api';\r\n\r\n@NgModule({\r\n declarations: [SdEditor],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n QuillModule.forRoot(),\r\n SdTranslateModule,\r\n SdButtonModule,\r\n SdTextareaModule,\r\n SdApiModule\r\n ],\r\n exports: [SdEditor],\r\n providers: [],\r\n})\r\nexport class SdEditorModule { }\r\n"]}
1
+ {"version":3,"sources":["../../../../projects/sd-core/editor/src/lib/editor.model.ts","../../../../node_modules/tslib/tslib.es6.js","../../../../projects/sd-core/editor/src/lib/constant.ts","../../../../projects/sd-core/editor/src/lib/editor.component.ts","../../../../projects/sd-core/editor/src/lib/editor.module.ts"],"names":["EDITOR_CONFIG","InjectionToken","Object","create","__classPrivateFieldGet","receiver","state","kind","f","TypeError","has","call","value","get","__classPrivateFieldSet","set","Constants","ARE_YOU_WANT_TO_DELETE","ACTIVE","IN_ACTIVE","APPROVE","UN_APPROVE","ACCEPT_SIZE_IMAGE","ACCEPT_TYPE_IMAGE","PAGE_TYPE_NEW","PAGE_TYPE_EDIT","SAVE","SAVE_AND_CONTINUE","IMAGE_SIZE","SUCCESS","IMPORT_SUCCESSFULLY","ERROR","FAILED","FILE","NONE","NOT_EXIST_ID_OR_LINK","FEATURE_IS_PENDING","NOT_SUPPORT_FILE_IMAGE","NOT_SUPPORT_FILE_IMPORT","NETWORK_ERROR","SORT_BY","name","DESC","FORM_ERRORS","Id","textSearch","ImportLogId","SortBy","Reverse","VALIDATION_MESSAGES","ValidateMessageConstants","TITLE_REQUIRED","TITLE_MAXLENGTH","TITLE_PATTERN","CREATED_AT_REQUIRED","SHOW_ON_HOME_REQUIRED","DISPLAY_NUMBER_REQUIRED","CONTENT_TYPE_REQUIRED","DISCOUNT_PERCENT_REQUIRED","DISCOUNT_PERCENT_MAX","DISCOUNT_PERCENT_MIN","PROMOTION_FORM","title","createdAt","displayNumber","showOnHome","discountPercent","isActive","ctaLabelName","ctaDeepLink","tags","required","maxlength","pattern","max","min","SdEditor","ngZone","ref","sdApiService","loadingService","configuration","_this","this","_name","uuid.v4","id","_subscription","Subscription","_model","modelChange","EventEmitter","placeholder","styles","height","formControl","FormControl","domain","_form","enableHTMLButton","showHtmlEditor","quillConfig","toolbar","container","header","list","script","indent","direction","size","color","background","font","align","mention","allowedChars","mentionDenotationChars","source","searchTerm","renderList","mentionChar","mentionValues","hashTagValues","values","length","matches","i","toLowerCase","indexOf","push","keyboard","bindings","enter","key","handler","range","context","customButtonFileSVG","sdChange","timerLoadQuillToolbar","customFileHandler","e","quillToolbar","currentTarget","closest","fileInput","querySelector","document","createElement","setAttribute","classList","add","addEventListener","files","formData","FormData","append","localStorage","getItem","JSON","parse","quillEvent","enable","_uploadFile","appendChild","click","_updateValidator","clearValidators","clearAsyncValidators","validators","Validators","minlength","minLength","maxLength","setValidators","updateValueAndValidity","markForCheck","editorInit","quill","self","runOutsideAngular","getModule","addHandler","getSelection","_uploadImage","_initUploadImage","onModelChange","val","setValue","modelHTML","onClickShowHtmlEditor","urlUploadImage","post","then","resp","dangerouslyPasteHTML","index","_a","data","imageUrl","_b","publish_url","url","_c","_d","content","getContents","setContents","setSelection","loadingID","urlUploadFile","start","stop","catch","er","defineProperty","prototype","emitEvent","detectChanges","disable","NgForm","form","ngOnInit","addControl","toString","includes","setInterval","clearInterval","innerHTML","customButton","getAttribute","ngAfterViewInit","valueChanges","subscribe","emit","ngOnDestroy","removeControl","unsubscribe","onSelectionChanged","setItem","editor","stringify","onContentChanged","getLength","Component","args","selector","template","changeDetection","ChangeDetectionStrategy","OnPush","NgZone","ChangeDetectorRef","SdApiService","SdLoadingService","Inject","type","Optional","ViewChild","Input","Output","ContentChild","SdLabelDefDirective","NgModule","declarations","imports","CommonModule","FormsModule","ReactiveFormsModule","QuillModule","forRoot","SdTranslateModule","SdButtonModule","SdTextareaModule","SdApiModule","exports","providers"],"mappings":"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","sourcesContent":["import { InjectionToken } from \"@angular/core\";\r\n\r\nexport interface IEditorConfiguration {\r\n uploadImage: (formData: FormData, args?: any) => Promise<string>;\r\n uploadFile: (formData: FormData, args?: any) => Promise<string>;\r\n}\r\n\r\nexport const EDITOR_CONFIG = new InjectionToken<IEditorConfiguration>('editor.configuration');","/*! *****************************************************************************\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","export const Constants = {\r\n ARE_YOU_WANT_TO_DELETE: 'Are you sure you want to delete?',\r\n ACTIVE: 'active',\r\n IN_ACTIVE: 'inactive',\r\n APPROVE: 'approve',\r\n UN_APPROVE: 'unapprove',\r\n ACCEPT_SIZE_IMAGE: 'Logo only accept image with size <= 2MB',\r\n ACCEPT_TYPE_IMAGE:\r\n 'image/png, image/gif, image/jpeg, image/bmp, image/x-icon',\r\n PAGE_TYPE_NEW: 'new',\r\n PAGE_TYPE_EDIT: 'edit',\r\n SAVE: 'saveOb',\r\n SAVE_AND_CONTINUE: 'saveAndContOb',\r\n IMAGE_SIZE: 2048000,\r\n SUCCESS: 'Success',\r\n IMPORT_SUCCESSFULLY: 'Import successfully!',\r\n ERROR: 'Error',\r\n FAILED: 'fail',\r\n FILE: 'file',\r\n NONE: 'none',\r\n NOT_EXIST_ID_OR_LINK: 'This ID/Link is not existing',\r\n FEATURE_IS_PENDING: 'This feature is pending',\r\n NOT_SUPPORT_FILE_IMAGE: 'File upload is not supported.',\r\n NOT_SUPPORT_FILE_IMPORT: 'File import is not supported.',\r\n NETWORK_ERROR: 'Network Error',\r\n SORT_BY: [\r\n {\r\n value: 0,\r\n name: 'Created Date'\r\n },\r\n {\r\n value: 1,\r\n name: 'Title'\r\n }\r\n ],\r\n DESC: [\r\n {\r\n value: true,\r\n name: 'Descending'\r\n },\r\n {\r\n value: false,\r\n name: 'Ascending'\r\n }\r\n ],\r\n FORM_ERRORS: {\r\n Id: '',\r\n textSearch: '',\r\n ImportLogId: '',\r\n SortBy: '',\r\n Reverse: '',\r\n },\r\n VALIDATION_MESSAGES: {}\r\n};\r\n\r\nexport const PROMOTION_PERMISSIONS = ['ListPromotion', 'AddNewPromotion', 'EditPromotion',\r\n 'ActiveOrInactivePromotion', 'RemovePromotion', 'ImportPromotion', 'ExportPromotion'];\r\n\r\nexport const ValidateMessageConstants = {\r\n TITLE_REQUIRED: 'Title is required',\r\n TITLE_MAXLENGTH: 'Title is not more than 55 characters',\r\n TITLE_PATTERN: 'Title is required',\r\n\r\n CREATED_AT_REQUIRED: 'Created At is required',\r\n\r\n SHOW_ON_HOME_REQUIRED: 'Show On Home is required',\r\n\r\n DISPLAY_NUMBER_REQUIRED: 'Display Number is required',\r\n\r\n CONTENT_TYPE_REQUIRED: 'Content Type is required',\r\n\r\n DISCOUNT_PERCENT_REQUIRED: 'Discount percent is required',\r\n DISCOUNT_PERCENT_MAX: 'Max discount percent is 100, cannot input greater',\r\n DISCOUNT_PERCENT_MIN: 'Min discount percent is 0, cannot input lower'\r\n};\r\n\r\nexport const PROMOTION_FORM = {\r\n FORM_ERRORS: {\r\n title: '',\r\n createdAt: '',\r\n displayNumber: '',\r\n showOnHome: '',\r\n discountPercent: '',\r\n isActive: '',\r\n ctaLabelName: '',\r\n ctaDeepLink: '',\r\n tags: ''\r\n },\r\n VALIDATION_MESSAGES: {\r\n title: {\r\n required: ValidateMessageConstants.TITLE_REQUIRED,\r\n maxlength: ValidateMessageConstants.TITLE_MAXLENGTH,\r\n pattern: ValidateMessageConstants.TITLE_PATTERN\r\n },\r\n createdAt: {\r\n required: ValidateMessageConstants.CREATED_AT_REQUIRED\r\n },\r\n showOnHome: {\r\n required: ValidateMessageConstants.SHOW_ON_HOME_REQUIRED\r\n },\r\n displayNumber: {\r\n required: ValidateMessageConstants.DISPLAY_NUMBER_REQUIRED\r\n },\r\n discountPercent: {\r\n required: ValidateMessageConstants.DISCOUNT_PERCENT_REQUIRED,\r\n max: ValidateMessageConstants.DISCOUNT_PERCENT_MAX,\r\n min: ValidateMessageConstants.DISCOUNT_PERCENT_MIN\r\n },\r\n tags: {\r\n required: ValidateMessageConstants.CONTENT_TYPE_REQUIRED\r\n }\r\n }\r\n};\r\n","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n ContentChild,\r\n EventEmitter,\r\n Inject,\r\n Input,\r\n NgZone,\r\n OnDestroy,\r\n OnInit,\r\n Optional,\r\n Output,\r\n ViewChild\r\n} from '@angular/core';\r\nimport {ContentChange, QuillEditorComponent, SelectionChange} from 'ngx-quill';\r\nimport * as uuid from 'uuid';\r\nimport {FormControl, FormGroup, NgForm, ValidatorFn, Validators} from '@angular/forms';\r\nimport {Constants} from './constant';\r\nimport {Subscription} from 'rxjs';\r\nimport {SdApiService} from '@sd-angular/core/api';\r\nimport 'quill-mention';\r\nimport {SdLabelDefDirective} from '@sd-angular/core/common';\r\nimport {SdLoadingService} from \"@sd-angular/core/loading\";\r\nimport { EDITOR_CONFIG, IEditorConfiguration } from './editor.model';\r\nimport Quill from 'quill';\r\n\r\n@Component({\r\n selector: 'sd-editor',\r\n templateUrl: './editor.component.html',\r\n styleUrls: ['./editor.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class SdEditor implements OnInit, AfterViewInit, OnDestroy {\r\n #name = `N${uuid.v4()}`;\r\n id: string = `I${uuid.v4()}`;\r\n #subscription = new Subscription();\r\n @ViewChild('editor') editor: QuillEditorComponent;\r\n @Input() label: string;\r\n #model: string;\r\n @Input() set model(val: string) {\r\n this.#model = val;\r\n this.modelHTML = val;\r\n this.formControl.setValue(this.#model, {\r\n emitEvent: false\r\n });\r\n this.ref.detectChanges();\r\n }\r\n\r\n @Input() set disabled(val: boolean | '') {\r\n val = (val === '') || val;\r\n if (val) {\r\n this.formControl.disable();\r\n } else {\r\n this.formControl.enable();\r\n }\r\n }\r\n\r\n required = false;\r\n\r\n @Input() set pRequired(val: boolean | '') {\r\n this.required = (val === '') || val;\r\n this.#updateValidator();\r\n }\r\n\r\n minlength: number;\r\n\r\n @Input('minlength') set _minlength(val: number) {\r\n this.minlength = +val;\r\n this.#updateValidator();\r\n }\r\n\r\n maxlength: number;\r\n\r\n @Input('maxlength') set _maxlength(val: number) {\r\n this.maxlength = +val;\r\n this.#updateValidator();\r\n }\r\n\r\n @Output() modelChange = new EventEmitter<string>();\r\n\r\n @Input() placeholder: string = '';\r\n\r\n @Input() styles: any = {height: '250px'};\r\n\r\n @Input() args: any;\r\n\r\n formControl = new FormControl();\r\n\r\n @Input() domain = '';\r\n @Input() urlUploadImage: string;\r\n @Input() urlUploadFile: string;\r\n #form: FormGroup;\r\n @Input() set form(val: NgForm | FormGroup) {\r\n if (val) {\r\n if (val instanceof NgForm) {\r\n this.#form = val.form;\r\n } else {\r\n this.#form = val;\r\n }\r\n }\r\n }\r\n\r\n @Input() toolbar: any;\r\n @Input() enableHTMLButton = false;\r\n showHtmlEditor = false;\r\n modelHTML: string;\r\n\r\n quillEvent: any;\r\n @Input() mentionValues: { id: string, value: string, link?: string }[];\r\n @Input() hashTagValues: { id: string, value: string, link?: string }[];\r\n @ContentChild(SdLabelDefDirective) sdLabelDef: SdLabelDefDirective;\r\n quillConfig = {\r\n // toolbar: '.toolbar',\r\n toolbar: {\r\n container: [\r\n ['bold', 'italic', 'underline', 'strike'], // toggled buttons\r\n ['blockquote', 'code-block'],\r\n\r\n [{'header': 1}, {'header': 2}], // custom button values\r\n [{'list': 'ordered'}, {'list': 'bullet'}],\r\n [{'script': 'sub'}, {'script': 'super'}], // superscript/subscript\r\n [{'indent': '-1'}, {'indent': '+1'}], // outdent/indent\r\n [{'direction': 'rtl'}], // text direction\r\n\r\n [{'size': ['small', false, 'large', 'huge']}], // custom dropdown\r\n [{'header': [1, 2, 3, 4, 5, 6, false]}],\r\n\r\n [{'color': []}, {'background': []}], // dropdown with defaults from theme\r\n [{'font': []}],\r\n [{'align': []}],\r\n\r\n ['clean'], // remove formatting button\r\n\r\n ['link', 'image', 'video'] // link and image, video\r\n ]\r\n },\r\n mention: {\r\n allowedChars: /^[A-Za-z0-9\\sÅÄÖåäö._-]*$/,\r\n mentionDenotationChars: ['@', '#'],\r\n source: (searchTerm, renderList, mentionChar) => {\r\n if ((this.mentionValues && mentionChar === '@') || (this.hashTagValues && mentionChar === '#')) {\r\n let values;\r\n if (mentionChar === '@') {\r\n values = this.mentionValues;\r\n } else if (mentionChar === '#') {\r\n values = this.hashTagValues;\r\n } else {\r\n values = [];\r\n }\r\n\r\n if (searchTerm.length === 0) {\r\n renderList(values, searchTerm);\r\n } else {\r\n const matches = [];\r\n // tslint:disable-next-line:prefer-for-of\r\n for (let i = 0; i < values.length; i++) {\r\n // tslint:disable-next-line:no-bitwise\r\n if (~values[i].value.toLowerCase().indexOf(searchTerm.toLowerCase())) {\r\n matches.push(values[i]);\r\n }\r\n }\r\n renderList(matches, searchTerm);\r\n }\r\n }\r\n },\r\n },\r\n keyboard: {\r\n bindings: {\r\n enter: {\r\n key: 13,\r\n handler: (range, context) => {\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n customButtonFileSVG = '<svg xmlns=\"http://www.w3.org/2000/svg\" enable-background=\"new 0 0 24 24\" height=\"24px\" viewBox=\"0 0 24 24\" width=\"24px\" fill=\"#000000\"><g><rect fill=\"none\" height=\"24\" width=\"24\"/><path d=\"M20.41,8.41l-4.83-4.83C15.21,3.21,14.7,3,14.17,3H5C3.9,3,3,3.9,3,5v14c0,1.1,0.9,2,2,2h14c1.1,0,2-0.9,2-2V9.83 C21,9.3,20.79,8.79,20.41,8.41z M7,7h7v2H7V7z M17,17H7v-2h10V17z M17,13H7v-2h10V13z\"/></g></svg>';\r\n @Output() sdChange = new EventEmitter<string>();\r\n timerLoadQuillToolbar = null;\r\n\r\n constructor(\r\n private ngZone: NgZone,\r\n private ref: ChangeDetectorRef,\r\n private sdApiService: SdApiService,\r\n private loadingService: SdLoadingService,\r\n @Inject(EDITOR_CONFIG) @Optional() private configuration: IEditorConfiguration,\r\n ) {\r\n\r\n }\r\n\r\n ngOnInit() {\r\n this.#form?.addControl(this.#name, this.formControl);\r\n\r\n if (this.toolbar) {\r\n this.quillConfig.toolbar.container = this.toolbar;\r\n }\r\n if (this.quillConfig.toolbar.container.toString().includes('customFile')) {\r\n this.timerLoadQuillToolbar = setInterval(() => {\r\n if (document.querySelector('button.ql-customFile')) {\r\n clearInterval(this.timerLoadQuillToolbar);\r\n document.querySelector('button.ql-customFile').innerHTML = this.customButtonFileSVG;\r\n const customButton = document.querySelector('button.ql-customFile');\r\n if (customButton.getAttribute('listener') !== '1') {\r\n customButton.setAttribute('listener', '1');\r\n customButton.addEventListener('click', this.customFileHandler);\r\n }\r\n }\r\n }, 1000);\r\n }\r\n\r\n this.ref.markForCheck();\r\n }\r\n\r\n customFileHandler = (e) => {\r\n const customButton = e.currentTarget;\r\n const quillToolbar = customButton.closest('.ql-formats').closest('.ql-toolbar');\r\n const quillBox = quillToolbar.closest('.ql-formats')\r\n let fileInput: HTMLInputElement = quillToolbar.querySelector('input.ql-customFile[type=file]');\r\n if (fileInput == null) {\r\n fileInput = document.createElement('input');\r\n fileInput.setAttribute('type', Constants.FILE);\r\n fileInput.setAttribute('accept', '*');\r\n fileInput.classList.add('ql-customFile');\r\n fileInput.addEventListener('change', () => {\r\n const files = fileInput.files;\r\n if (!files || !files.length) {\r\n return;\r\n }\r\n\r\n const formData = new FormData();\r\n formData.append(Constants.FILE, files[0]);\r\n\r\n let range = localStorage.getItem('quillRange');\r\n if (range) {\r\n range = JSON.parse(range);\r\n }\r\n this.quillEvent.enable(false);\r\n this.#uploadFile(formData, this.quillEvent, range, fileInput, quillToolbar.closest('quill-editor').id);\r\n });\r\n quillToolbar.appendChild(fileInput);\r\n }\r\n fileInput.click();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.#subscription.add(this.formControl.valueChanges.subscribe((val) => {\r\n this.modelChange.emit(val);\r\n this.sdChange.emit(val);\r\n }));\r\n }\r\n\r\n ngOnDestroy() {\r\n this.#form?.removeControl(this.#name);\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n #updateValidator = () => {\r\n this.formControl.clearValidators();\r\n this.formControl.clearAsyncValidators();\r\n const validators: ValidatorFn[] = [];\r\n if (this.required) {\r\n validators.push(Validators.required);\r\n }\r\n if (this.minlength > 0) {\r\n validators.push(Validators.minLength(this.minlength));\r\n }\r\n if (this.maxlength > 0) {\r\n validators.push(Validators.maxLength(this.maxlength));\r\n }\r\n this.formControl.setValidators(validators);\r\n this.formControl.updateValueAndValidity();\r\n this.ref.markForCheck();\r\n }\r\n\r\n editorInit = (quill) => {\r\n this.quillEvent = quill;\r\n // const txtArea = document.createElement('textarea');\r\n // txtArea.style.cssText =\r\n // 'width: 100%;margin: 0px;background: rgb(29, 29, 29);' +\r\n // 'box-sizing: border-box;color: rgb(204, 204, 204);' +\r\n // 'font-size: 15px;outline: none;padding: 20px;' +\r\n // 'line-height: 24px;font-family: Consolas, Menlo, Monaco, &quot;Courier New&quot;, monospace;' +\r\n // 'position: absolute;top: 0;bottom: 0;border: none;display:none';\r\n\r\n // const htmlEditor = quill.addContainer('ql-custom');\r\n // htmlEditor.appendChild(txtArea);\r\n\r\n // const myEditor = quill.container;\r\n // quill.on('text-change', (delta, oldDelta, source) => {\r\n // const html = myEditor.children[0].innerHTML;\r\n // txtArea.value = html;\r\n // // if (quill.getLength() > this.maxlength) {\r\n // // quill.deleteText(this.maxlength, quill.getLength());\r\n // // }\r\n // // this.formControl.setValue(html);\r\n // });\r\n const self = this;\r\n this.ngZone.runOutsideAngular(() => {\r\n quill.getModule('toolbar').addHandler('image', function () {\r\n let fileInput = this.container.querySelector('input.ql-image[type=file]');\r\n\r\n if (fileInput == null) {\r\n fileInput = document.createElement('input');\r\n fileInput.setAttribute('type', Constants.FILE);\r\n fileInput.setAttribute('accept', 'image/png, image/gif, image/jpeg, image/bmp, image/x-icon');\r\n fileInput.classList.add('ql-image');\r\n fileInput.addEventListener('change', () => {\r\n const files = fileInput.files;\r\n const range = this.quill.getSelection(true);\r\n if (!files || !files.length) {\r\n return;\r\n }\r\n\r\n const formData = new FormData();\r\n formData.append(Constants.FILE, files[0]);\r\n\r\n this.quill.enable(false);\r\n\r\n self.#uploadImage(formData, quill, range, fileInput);\r\n });\r\n this.container.appendChild(fileInput);\r\n }\r\n fileInput.click();\r\n });\r\n\r\n });\r\n this.ref.markForCheck();\r\n }\r\n\r\n #initUploadImage = (quill: Quill) => {\r\n const self = this;\r\n this.ngZone.runOutsideAngular(() => {\r\n quill.getModule('toolbar').addHandler('image', function () {\r\n let fileInput = this.container.querySelector('input.ql-image[type=file]');\r\n if (fileInput == null) {\r\n fileInput = document.createElement('input');\r\n fileInput.setAttribute('type', Constants.FILE);\r\n fileInput.setAttribute('accept', 'image/png, image/gif, image/jpeg, image/bmp, image/x-icon');\r\n fileInput.classList.add('ql-image');\r\n fileInput.addEventListener('change', () => {\r\n const files = fileInput.files;\r\n const range = this.quill.getSelection(true);\r\n if (!files || !files.length) {\r\n return;\r\n }\r\n\r\n const formData = new FormData();\r\n formData.append(Constants.FILE, files[0]);\r\n\r\n this.quill.enable(false);\r\n \r\n self.#uploadImage(formData, quill, range, fileInput);\r\n });\r\n this.container.appendChild(fileInput);\r\n }\r\n fileInput.click();\r\n });\r\n\r\n });\r\n }\r\n\r\n onModelChange = (val: string) => {\r\n this.formControl.setValue(val);\r\n this.modelHTML = val;\r\n this.ref.markForCheck();\r\n }\r\n\r\n onClickShowHtmlEditor = () => {\r\n this.showHtmlEditor = !this.showHtmlEditor;\r\n this.ref.markForCheck();\r\n }\r\n\r\n #uploadImage = (formData, quill, range, fileInput) => {\r\n if (!this.urlUploadImage) {\r\n this.urlUploadImage = '/partner/v2/merchandise/file/uploaduserfile';\r\n }\r\n // this.domain = 'https://api-commerce-qc.vinid.dev';\r\n this.sdApiService.post(this.urlUploadImage, formData).then((resp: any) => {\r\n this.ngZone.runOutsideAngular(() => {\r\n quill.enable(true);\r\n // quill.editor.insertEmbed(range.index, 'image', resp?.data?.imageUrl || resp?.data?.publish_url || resp?.url || '');\r\n quill.getModule('clipboard').dangerouslyPasteHTML(range.index, '<a target=\"_blank\" href=\"' + (resp?.data?.imageUrl || resp?.data?.publish_url || resp?.url || '')\r\n + '\"><img src=\"' + (resp?.data?.imageUrl || resp?.data?.publish_url || resp?.url || '') + '\" alt=\"c-image-editor-quill\"></a>', 'user');\r\n // quill.insertText();\r\n const content = quill.getContents();\r\n quill.setContents(content);\r\n quill.setSelection(range.index + 1, 'user');\r\n fileInput.value = '';\r\n });\r\n });\r\n this.ref.markForCheck();\r\n }\r\n\r\n #uploadFile = (formData, quill, range, fileInput, loadingID) => {\r\n if (!this.urlUploadFile) {\r\n this.urlUploadFile = '/partner/v2/merchandise/file/uploaduserfile';\r\n }\r\n // this.domain = 'https://api-commerce-qc.vinid.dev';\r\n this.loadingService.start('#box-' + loadingID);\r\n this.sdApiService.post(this.urlUploadFile, formData).then((resp: any) => {\r\n this.ngZone.runOutsideAngular(() => {\r\n quill.enable(true);\r\n // quill.editor.insertEmbed(range.index, 'image', resp?.data?.imageUrl || resp?.data?.publish_url || resp?.url || '');\r\n quill.getModule('clipboard').dangerouslyPasteHTML(range.index, '<a target=\"_blank\" href=\"' + (resp?.data?.imageUrl || resp?.data?.publish_url || resp?.url || '')\r\n + '\">' + (resp?.data?.imageUrl || resp?.data?.publish_url || resp?.url || '') + '</a>', 'user');\r\n // quill.insertText();\r\n const content = quill.getContents();\r\n quill.setContents(content);\r\n quill.setSelection(range.index + 1, 'user');\r\n fileInput.value = '';\r\n });\r\n this.loadingService.stop('#box-' + loadingID);\r\n }).catch((er) => {\r\n this.loadingService.stop('#box-' + loadingID);\r\n });\r\n this.ref.markForCheck();\r\n }\r\n\r\n onSelectionChanged(e: SelectionChange) {\r\n // localStorage.setItem('quillRange', e.range ? JSON.stringify(e.range) : (e.oldRange ? JSON.stringify(e.oldRange) : null));\r\n localStorage.setItem('quillRange', e.editor.getSelection() ? JSON.stringify(e.editor.getSelection()) : null);\r\n }\r\n\r\n onContentChanged(e: ContentChange) {\r\n localStorage.setItem('quillRange', JSON.stringify({\r\n index: (e.editor.getLength() ? e.editor.getLength() - 1 : 0),\r\n length: 0\r\n }));\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { QuillModule } from 'ngx-quill';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { SdEditor } from './editor.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { SdTranslateModule } from '@sd-angular/core/translate';\r\nimport {SdButtonModule} from '@sd-angular/core/button';\r\nimport {SdTextareaModule} from '@sd-angular/core/textarea';\r\nimport {SdApiModule, SdApiService} from '@sd-angular/core/api';\r\n\r\n@NgModule({\r\n declarations: [SdEditor],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n QuillModule.forRoot(),\r\n SdTranslateModule,\r\n SdButtonModule,\r\n SdTextareaModule,\r\n SdApiModule\r\n ],\r\n exports: [SdEditor],\r\n providers: [],\r\n})\r\nexport class SdEditorModule { }\r\n"]}
@@ -1 +1 @@
1
- {"__symbolic":"module","version":4,"metadata":{"SdCommentModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":14,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":16,"character":4},{"__symbolic":"reference","module":"@angular/material/button","name":"MatButtonModule","line":17,"character":4},{"__symbolic":"reference","module":"@angular/material/icon","name":"MatIconModule","line":18,"character":4},{"__symbolic":"reference","module":"@angular/material/tooltip","name":"MatTooltipModule","line":19,"character":4},{"__symbolic":"reference","module":"@sd-angular/core/translate","name":"SdTranslateModule","line":20,"character":4},{"__symbolic":"reference","module":"@sd-angular/core/button","name":"SdButtonModule","line":21,"character":4},{"__symbolic":"reference","module":"@sd-angular/core/input","name":"SdInputModule","line":22,"character":4},{"__symbolic":"reference","module":"@sd-angular/core/textarea","name":"SdTextareaModule","line":23,"character":4},{"__symbolic":"reference","module":"@sd-angular/core/editor","name":"SdEditorModule","line":24,"character":4},{"__symbolic":"reference","module":"@sd-angular/core/utility","name":"SdUtilityModule","line":25,"character":4},{"__symbolic":"reference","module":"@sd-angular/core/modal","name":"SdModalModule","line":26,"character":4}],"declarations":[{"__symbolic":"reference","name":"SdComment"}],"exports":[{"__symbolic":"reference","name":"SdComment"}],"providers":[]}]}],"members":{}},"SdCommentOption":{"__symbolic":"interface"},"Comment":{"__symbolic":"interface"},"SdComment":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":14,"character":1},"arguments":[{"selector":"sd-comment","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":18,"character":19},"member":"OnPush"},"template":"<div class=\"c-container\">\r\n <div class=\"c-header\">\r\n <div class=\"c-title\">{{'Comments' | sdTranslate}} <a href=\"javascript:;\">({{count | async}})</a></div>\r\n </div>\r\n <div class=\"c-body\" *ngIf=\"commentOption?.style==='basic'\">\r\n <ng-container *ngFor=\"let item of items | async\">\r\n <div class=\"d-flex my-8\">\r\n <div class=\"c-avatar mr-12\">\r\n <img height=\"32\" width=\"32px\" [src]=\"item.picture\">\r\n </div>\r\n <div class=\"c-comment\">\r\n <div class=\"c-info mb-4\">\r\n {{'By' | sdTranslate}}\r\n <span class=\"c-creator ml-2\">\r\n {{item.creator}}\r\n </span>\r\n <ng-container *ngIf=\"item.createdDate\">\r\n <span class=\"mx-4\">•</span>\r\n <span\r\n [matTooltip]=\"item.createdDate | date:'dd/MM/yyyy HH:mm'\">{{item.createdDate | sdTimeDifferent:'dd/MM/yyyy HH:mm':'hour' | async}}</span>\r\n </ng-container>\r\n </div>\r\n <div class=\"c-content\" [innerHtml]=\"item.content\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"c-body-style1\" *ngIf=\"commentOption?.style==='style1'\" sdScroll>\r\n <ng-container *ngFor=\"let item of items | async; let i = index\">\r\n <div class=\"d-flex my-8\">\r\n <div class=\"c-avatar mr-12\">\r\n <img height=\"32\" width=\"32px\" [src]=\"item.picture\">\r\n </div>\r\n <div class=\"c-comment {{i + 1 === (count | async) ? 'c-comment-border': ''}}\">\r\n <div class=\"c-info mb-4\">\r\n <div class=\"c-col-left\">\r\n <div class=\"c-creator\">\r\n {{item.creator}}\r\n </div>\r\n <div class=\"c-email\">\r\n {{item.email}}\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"item.createdDate\">\r\n <div class=\"c-col-right\"\r\n [matTooltip]=\"item.createdDate | date:'dd/MM/yyyy H:mm'\">{{item.createdDate | date:'dd/MM/yyyy H:mm'}}</div>\r\n </ng-container>\r\n </div>\r\n <div class=\"c-content\" [innerHtml]=\"item.content\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"c-footer p-16\">\r\n <div class=\"row\">\r\n <div class=\"col-12 c-position-relative\">\r\n <ng-container *ngIf=\"commentOption?.editor?.enabled else noUseEditor\">\r\n <div class=\"mb-8\">\r\n <sd-editor [(model)]=\"message\" [styles]=\"commentOption?.editor?.styles\"\r\n [toolbar]=\"commentOption?.editor?.toolbar\"\r\n [urlUploadImage]=\"commentOption?.editor?.urlUploadImage\"\r\n [mentionValues]=\"commentOption?.editor?.mentionValues\"\r\n [hashTagValues]=\"commentOption?.editor?.hashTagValues\"></sd-editor>\r\n </div>\r\n <div *ngIf=\"commentOption?.fullComment?.enabled\" class=\"c-full-comment-backdrop\"\r\n (click)=\"modalFullComment.open()\"></div>\r\n </ng-container>\r\n <ng-template #noUseEditor>\r\n <sd-textarea [(model)]=\"message\" rows=\"1\" autoHeight></sd-textarea>\r\n </ng-template>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <sd-button class=\"float-right\" title=\"Gửi\" (action)=\"onSend()\" [disabled]=\"!message\" color=\"primary\" type=\"fill\"\r\n size=\"sm\">\r\n </sd-button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<sd-modal [title]=\"'Comments' | sdTranslate\" width=\"sm\" [closeClickOutSide]=\"commentOption?.fullComment?.closeClickOutSide\" #modalFullComment>\r\n <sd-modal-body>\r\n <sd-editor [(model)]=\"message\" [styles]=\"fullCommentStyles\"\r\n [toolbar]=\"commentOption?.editor?.toolbar\"\r\n [urlUploadImage]=\"commentOption?.editor?.urlUploadImage\"\r\n [mentionValues]=\"commentOption?.editor?.mentionValues\"\r\n [hashTagValues]=\"commentOption?.editor?.hashTagValues\"></sd-editor>\r\n </sd-modal-body>\r\n <sd-modal-footer>\r\n <sd-button class=\"ml-8\" title=\"Xóa toàn bộ\" size=\"sm\" type=\"link\"\r\n (action)=\"clearAllData()\">\r\n </sd-button>\r\n <sd-button *ngIf=\"!commentOption?.fullComment?.enableSendButton\" class=\"ml-8\" title=\"Đóng\" size=\"sm\" (action)=\"modalFullComment.close()\"\r\n color=\"primary\" type=\"fill\">\r\n </sd-button>\r\n <sd-button *ngIf=\"commentOption?.fullComment?.enableSendButton\" class=\"ml-8\" title=\"Gửi\" size=\"sm\" (action)=\"onSend();modalFullComment.close();\" [disabled]=\"!message\"\r\n color=\"primary\" type=\"fill\">\r\n </sd-button>\r\n </sd-modal-footer>\r\n</sd-modal>\r\n","styles":[".text-black400{color:#757575}.c-container{display:flex;flex-direction:column;height:100%}.c-container .c-header{align-items:center;background-color:#fff;display:flex;height:40px;padding:0 16px}.c-container .c-header .c-title{font-weight:500}.c-container .c-body{background:#f8f9fa;flex:1;overflow-y:hidden;padding:16px}.c-container .c-body:hover{overflow-y:auto}.c-container .c-body .c-comment{background:#fff;border:1px solid #f2f2f2;border-radius:4px;flex:1;overflow-wrap:break-word;padding:12px 16px;white-space:pre-wrap;word-break:break-word}.c-container .c-body .c-comment .c-info{color:#757575}.c-container .c-body .c-comment .c-info .c-creator{color:#000;font-weight:500}.c-container .c-body-style1{background:#fff;flex:1;overflow-y:hidden;padding:16px}.c-container .c-body-style1 .c-comment{background:#fff;border-bottom:3px solid #f2f2f2;border-radius:4px;flex:1;overflow-wrap:break-word;white-space:pre-wrap;word-break:break-word}.c-container .c-body-style1 .c-comment .c-info{color:#757575}.c-container .c-body-style1 .c-comment .c-info .c-creator{color:#000;font-weight:500;white-space:nowrap}.c-container .c-body-style1 .c-comment .c-info .c-email{color:#000;font-weight:400;white-space:nowrap}.c-container .c-body-style1 .c-comment .c-info .c-col-left{display:inline-block;overflow:hidden;vertical-align:top;width:calc(100% - 128px)}.c-container .c-body-style1 .c-comment .c-info .c-col-right{display:inline-block;margin-left:8px;width:120px}.c-container .c-body-style1 .c-comment-border{border-bottom:none}.c-container .c-footer{background:#fff;min-height:120px}.c-container .c-footer .c-position-relative{position:relative}.c-container .c-footer .c-full-comment-backdrop{height:100%;left:0;position:absolute;top:0;width:100%;z-index:1}"]}]}],"members":{"textarea":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":21,"character":3},"arguments":[{"__symbolic":"reference","module":"@sd-angular/core/textarea","name":"SdTextarea","line":21,"character":13}]}]}],"option":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":26,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor"}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"ngAfterViewInit":[{"__symbolic":"method"}]}}},"origins":{"SdCommentModule":"./src/lib/comment.module","SdCommentOption":"./src/lib/comment.model","Comment":"./src/lib/comment.model","SdComment":"./src/lib/comment.component"},"importAs":"@sd-angular/core/comment"}
1
+ {"__symbolic":"module","version":4,"metadata":{"SdCommentModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":14,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":16,"character":4},{"__symbolic":"reference","module":"@angular/material/button","name":"MatButtonModule","line":17,"character":4},{"__symbolic":"reference","module":"@angular/material/icon","name":"MatIconModule","line":18,"character":4},{"__symbolic":"reference","module":"@angular/material/tooltip","name":"MatTooltipModule","line":19,"character":4},{"__symbolic":"reference","module":"@sd-angular/core/translate","name":"SdTranslateModule","line":20,"character":4},{"__symbolic":"reference","module":"@sd-angular/core/button","name":"SdButtonModule","line":21,"character":4},{"__symbolic":"reference","module":"@sd-angular/core/input","name":"SdInputModule","line":22,"character":4},{"__symbolic":"reference","module":"@sd-angular/core/textarea","name":"SdTextareaModule","line":23,"character":4},{"__symbolic":"reference","module":"@sd-angular/core/editor","name":"SdEditorModule","line":24,"character":4},{"__symbolic":"reference","module":"@sd-angular/core/utility","name":"SdUtilityModule","line":25,"character":4},{"__symbolic":"reference","module":"@sd-angular/core/modal","name":"SdModalModule","line":26,"character":4}],"declarations":[{"__symbolic":"reference","name":"SdComment"}],"exports":[{"__symbolic":"reference","name":"SdComment"}],"providers":[]}]}],"members":{}},"SdCommentOption":{"__symbolic":"interface"},"Comment":{"__symbolic":"interface"},"SdComment":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":14,"character":1},"arguments":[{"selector":"sd-comment","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":18,"character":19},"member":"OnPush"},"template":"<div class=\"c-container\">\r\n <div class=\"c-header\">\r\n <div class=\"c-title\">{{'Comments' | sdTranslate}} <a href=\"javascript:;\">({{count | async}})</a></div>\r\n </div>\r\n <div class=\"c-body\" *ngIf=\"commentOption?.style==='basic'\">\r\n <ng-container *ngFor=\"let item of items | async\">\r\n <div class=\"d-flex my-8\">\r\n <div class=\"c-avatar mr-12\">\r\n <img height=\"32\" width=\"32px\" [src]=\"item.picture\">\r\n </div>\r\n <div class=\"c-comment\">\r\n <div class=\"c-info mb-4\">\r\n {{'By' | sdTranslate}}\r\n <span class=\"c-creator ml-2\">\r\n {{item.creator}}\r\n </span>\r\n <ng-container *ngIf=\"item.createdDate\">\r\n <span class=\"mx-4\">•</span>\r\n <span\r\n [matTooltip]=\"item.createdDate | date:'dd/MM/yyyy HH:mm'\">{{item.createdDate | sdTimeDifferent:'dd/MM/yyyy HH:mm':'hour' | async}}</span>\r\n </ng-container>\r\n </div>\r\n <div class=\"c-content\" [innerHtml]=\"item.content\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"c-body-style1\" *ngIf=\"commentOption?.style==='style1'\" sdScroll>\r\n <ng-container *ngFor=\"let item of items | async; let i = index\">\r\n <div class=\"d-flex my-8\">\r\n <div class=\"c-avatar mr-12\">\r\n <img height=\"32\" width=\"32px\" [src]=\"item.picture\">\r\n </div>\r\n <div class=\"c-comment {{i + 1 === (count | async) ? 'c-comment-border': ''}}\">\r\n <div class=\"c-info mb-4\">\r\n <div class=\"c-col-left\">\r\n <div class=\"c-creator\">\r\n {{item.creator}}\r\n </div>\r\n <div class=\"c-email\">\r\n {{item.email}}\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"item.createdDate\">\r\n <div class=\"c-col-right\"\r\n [matTooltip]=\"item.createdDate | date:'dd/MM/yyyy H:mm'\">{{item.createdDate | date:'dd/MM/yyyy H:mm'}}</div>\r\n </ng-container>\r\n </div>\r\n <div class=\"c-content\" [innerHtml]=\"item.content\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"c-footer p-16\">\r\n <div class=\"row\">\r\n <div class=\"col-12 c-position-relative\">\r\n <ng-container *ngIf=\"commentOption?.editor?.enabled else noUseEditor\">\r\n <div class=\"mb-8\">\r\n <sd-editor [(model)]=\"message\" [styles]=\"commentOption?.editor?.styles\"\r\n [toolbar]=\"commentOption?.editor?.toolbar\"\r\n [urlUploadImage]=\"commentOption?.editor?.urlUploadImage\"\r\n [urlUploadFile]=\"commentOption?.editor?.urlUploadFile\"\r\n [mentionValues]=\"commentOption?.editor?.mentionValues\"\r\n [hashTagValues]=\"commentOption?.editor?.hashTagValues\"></sd-editor>\r\n </div>\r\n <div *ngIf=\"commentOption?.fullComment?.enabled\" class=\"c-full-comment-backdrop\"\r\n (click)=\"modalFullComment.open()\"></div>\r\n </ng-container>\r\n <ng-template #noUseEditor>\r\n <sd-textarea [(model)]=\"message\" rows=\"1\" autoHeight></sd-textarea>\r\n </ng-template>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <sd-button class=\"float-right\" title=\"Gửi\" (action)=\"onSend()\" [disabled]=\"!message\" color=\"primary\" type=\"fill\"\r\n size=\"sm\">\r\n </sd-button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<sd-modal [title]=\"'Comments' | sdTranslate\" width=\"sm\" [closeClickOutSide]=\"commentOption?.fullComment?.closeClickOutSide\" #modalFullComment>\r\n <sd-modal-body>\r\n <sd-editor [(model)]=\"message\" [styles]=\"fullCommentStyles\"\r\n [toolbar]=\"commentOption?.editor?.toolbar\"\r\n [urlUploadImage]=\"commentOption?.editor?.urlUploadImage\"\r\n [urlUploadFile]=\"commentOption?.editor?.urlUploadFile\"\r\n [mentionValues]=\"commentOption?.editor?.mentionValues\"\r\n [hashTagValues]=\"commentOption?.editor?.hashTagValues\"></sd-editor>\r\n </sd-modal-body>\r\n <sd-modal-footer>\r\n <sd-button class=\"ml-8\" title=\"Xóa toàn bộ\" size=\"sm\" type=\"link\"\r\n (action)=\"clearAllData()\">\r\n </sd-button>\r\n <sd-button *ngIf=\"!commentOption?.fullComment?.enableSendButton\" class=\"ml-8\" title=\"Đóng\" size=\"sm\" (action)=\"modalFullComment.close()\"\r\n color=\"primary\" type=\"fill\">\r\n </sd-button>\r\n <sd-button *ngIf=\"commentOption?.fullComment?.enableSendButton\" class=\"ml-8\" title=\"Gửi\" size=\"sm\" (action)=\"onSend();modalFullComment.close();\" [disabled]=\"!message\"\r\n color=\"primary\" type=\"fill\">\r\n </sd-button>\r\n </sd-modal-footer>\r\n</sd-modal>\r\n","styles":[".text-black400{color:#757575}.c-container{display:flex;flex-direction:column;height:100%}.c-container .c-header{align-items:center;background-color:#fff;display:flex;height:40px;padding:0 16px}.c-container .c-header .c-title{font-weight:500}.c-container .c-body{background:#f8f9fa;flex:1;overflow-y:hidden;padding:16px}.c-container .c-body:hover{overflow-y:auto}.c-container .c-body .c-comment{background:#fff;border:1px solid #f2f2f2;border-radius:4px;flex:1;overflow-wrap:break-word;padding:12px 16px;white-space:pre-wrap;word-break:break-word}.c-container .c-body .c-comment .c-info{color:#757575}.c-container .c-body .c-comment .c-info .c-creator{color:#000;font-weight:500}.c-container .c-body-style1{background:#fff;flex:1;overflow-y:hidden;padding:16px}.c-container .c-body-style1 .c-comment{background:#fff;border-bottom:3px solid #f2f2f2;border-radius:4px;flex:1;overflow-wrap:break-word;white-space:pre-wrap;word-break:break-word}.c-container .c-body-style1 .c-comment .c-info{color:#757575}.c-container .c-body-style1 .c-comment .c-info .c-creator{color:#000;font-weight:500;white-space:nowrap}.c-container .c-body-style1 .c-comment .c-info .c-email{color:#000;font-weight:400;white-space:nowrap}.c-container .c-body-style1 .c-comment .c-info .c-col-left{display:inline-block;overflow:hidden;vertical-align:top;width:calc(100% - 128px)}.c-container .c-body-style1 .c-comment .c-info .c-col-right{display:inline-block;margin-left:8px;width:120px}.c-container .c-body-style1 .c-comment-border{border-bottom:none}.c-container .c-footer{background:#fff;min-height:120px}.c-container .c-footer .c-position-relative{position:relative}.c-container .c-footer .c-full-comment-backdrop{height:100%;left:0;position:absolute;top:0;width:100%;z-index:1}"]}]}],"members":{"textarea":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":21,"character":3},"arguments":[{"__symbolic":"reference","module":"@sd-angular/core/textarea","name":"SdTextarea","line":21,"character":13}]}]}],"option":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":26,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor"}],"ngOnInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"ngAfterViewInit":[{"__symbolic":"method"}]}}},"origins":{"SdCommentModule":"./src/lib/comment.module","SdCommentOption":"./src/lib/comment.model","Comment":"./src/lib/comment.model","SdComment":"./src/lib/comment.component"},"importAs":"@sd-angular/core/comment"}
@@ -7,6 +7,7 @@ export interface SdCommentOption {
7
7
  enabled?: boolean;
8
8
  toolbar?: any;
9
9
  urlUploadImage?: string;
10
+ urlUploadFile?: string;
10
11
  styles?: any;
11
12
  mentionValues?: {
12
13
  id: string;
@@ -1 +1 @@
1
- {"__symbolic":"module","version":4,"metadata":{"SdEditorModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":10,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"SdEditor"}],"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":13,"character":4},{"__symbolic":"reference","module":"@angular/forms","name":"FormsModule","line":14,"character":4},{"__symbolic":"reference","module":"@angular/forms","name":"ReactiveFormsModule","line":15,"character":4},{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"ngx-quill","name":"QuillModule","line":16,"character":4},"member":"forRoot"}},{"__symbolic":"reference","module":"@sd-angular/core/translate","name":"SdTranslateModule","line":17,"character":4},{"__symbolic":"reference","module":"@sd-angular/core/button","name":"SdButtonModule","line":18,"character":4},{"__symbolic":"reference","module":"@sd-angular/core/textarea","name":"SdTextareaModule","line":19,"character":4},{"__symbolic":"reference","module":"@sd-angular/core/api","name":"SdApiModule","line":20,"character":4}],"exports":[{"__symbolic":"reference","name":"SdEditor"}],"providers":[]}]}],"members":{}},"Constants":{"ARE_YOU_WANT_TO_DELETE":"Are you sure you want to delete?","ACTIVE":"active","IN_ACTIVE":"inactive","APPROVE":"approve","UN_APPROVE":"unapprove","ACCEPT_SIZE_IMAGE":"Logo only accept image with size <= 2MB","ACCEPT_TYPE_IMAGE":"image/png, image/gif, image/jpeg, image/bmp, image/x-icon","PAGE_TYPE_NEW":"new","PAGE_TYPE_EDIT":"edit","SAVE":"saveOb","SAVE_AND_CONTINUE":"saveAndContOb","IMAGE_SIZE":2048000,"SUCCESS":"Success","IMPORT_SUCCESSFULLY":"Import successfully!","ERROR":"Error","FAILED":"fail","FILE":"file","NONE":"none","NOT_EXIST_ID_OR_LINK":"This ID/Link is not existing","FEATURE_IS_PENDING":"This feature is pending","NOT_SUPPORT_FILE_IMAGE":"File upload is not supported.","NOT_SUPPORT_FILE_IMPORT":"File import is not supported.","NETWORK_ERROR":"Network Error","SORT_BY":[{"value":0,"name":"Created Date"},{"value":1,"name":"Title"}],"DESC":[{"value":true,"name":"Descending"},{"value":false,"name":"Ascending"}],"FORM_ERRORS":{"Id":"","textSearch":"","ImportLogId":"","SortBy":"","Reverse":""},"VALIDATION_MESSAGES":{}},"PROMOTION_PERMISSIONS":["ListPromotion","AddNewPromotion","EditPromotion","ActiveOrInactivePromotion","RemovePromotion","ImportPromotion","ExportPromotion"],"ValidateMessageConstants":{"TITLE_REQUIRED":"Title is required","TITLE_MAXLENGTH":"Title is not more than 55 characters","TITLE_PATTERN":"Title is required","CREATED_AT_REQUIRED":"Created At is required","SHOW_ON_HOME_REQUIRED":"Show On Home is required","DISPLAY_NUMBER_REQUIRED":"Display Number is required","CONTENT_TYPE_REQUIRED":"Content Type is required","DISCOUNT_PERCENT_REQUIRED":"Discount percent is required","DISCOUNT_PERCENT_MAX":"Max discount percent is 100, cannot input greater","DISCOUNT_PERCENT_MIN":"Min discount percent is 0, cannot input lower"},"PROMOTION_FORM":{"FORM_ERRORS":{"title":"","createdAt":"","displayNumber":"","showOnHome":"","discountPercent":"","isActive":"","ctaLabelName":"","ctaDeepLink":"","tags":""},"VALIDATION_MESSAGES":{"title":{"required":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"TITLE_REQUIRED"},"maxlength":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"TITLE_MAXLENGTH"},"pattern":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"TITLE_PATTERN"}},"createdAt":{"required":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"CREATED_AT_REQUIRED"}},"showOnHome":{"required":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"SHOW_ON_HOME_REQUIRED"}},"displayNumber":{"required":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"DISPLAY_NUMBER_REQUIRED"}},"discountPercent":{"required":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"DISCOUNT_PERCENT_REQUIRED"},"max":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"DISCOUNT_PERCENT_MAX"},"min":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"DISCOUNT_PERCENT_MIN"}},"tags":{"required":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"CONTENT_TYPE_REQUIRED"}}}},"SdEditor":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":19,"character":1},"arguments":[{"selector":"sd-editor","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":23,"character":19},"member":"OnPush"},"template":"<label *ngIf=\"label && !sdLabelDef?.templateRef\" class=\"d-block T14M\">{{label}} <span class=\"text-danger mb-2\" *ngIf=\"required\">*</span></label>\r\n<ng-container *ngIf=\"sdLabelDef?.templateRef\" matSuffix>\r\n <ng-container *ngTemplateOutlet=\"sdLabelDef.templateRef\">\r\n </ng-container>\r\n</ng-container>\r\n<ng-container *ngIf=\"!formControl.disabled && !showHtmlEditor\">\r\n <quill-editor #editor [styles]=\"styles\" (onEditorCreated)=\"editorInit($event)\" [ngModel]=\"formControl.value\"\r\n (ngModelChange)=\"onModelChange($event)\" [id]=\"id\" [modules]=\"quillConfig\" [placeholder]=\"placeholder\"\r\n [maxLength]=\"maxlength\" >\r\n </quill-editor>\r\n <span class=\"d-block text-danger mt-5\" *ngIf=\"formControl.errors?.required\">\r\n {{'This field is required' | sdTranslate}}\r\n </span>\r\n <span class=\"d-block text-danger mt-5\" *ngIf=\"formControl.errors?.minlength\">\r\n {{'Max length' | sdTranslate}} <strong>{{minlength}}</strong>\r\n </span>\r\n <span class=\"d-block text-danger mt-5\" *ngIf=\"formControl.errors?.maxlength\">\r\n {{'Max length' | sdTranslate}} <strong>{{maxlength}}</strong>\r\n </span>\r\n</ng-container>\r\n<ng-container *ngIf=\"formControl.disabled\">\r\n <div [innerHtml]=\"formControl.value\"></div>\r\n</ng-container>\r\n<ng-container *ngIf=\"enableHTMLButton\">\r\n <sd-textarea [(model)]=\"modelHTML\" *ngIf=\"showHtmlEditor\" rows=\"20\"\r\n (modelChange)=\"onModelChange($event)\"></sd-textarea>\r\n <sd-button\r\n title=\"{{showHtmlEditor?'Ẩn':'Hiện'}} mã HTML\"\r\n class=\"mr-8\"\r\n fontSet=\"material-icons-outlined\"\r\n (action)=\"onClickShowHtmlEditor()\"\r\n type=\"light\"\r\n ></sd-button>\r\n</ng-container>\r\n","styles":["::ng-deep img[alt=c-image-editor-quill]{max-width:80%}"]}]}],"members":{"editor":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":29,"character":3},"arguments":["editor"]}]}],"label":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":30,"character":3}}]}],"model":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":32,"character":3}}]}],"disabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":41,"character":3}}]}],"pRequired":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":52,"character":3}}]}],"_minlength":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":59,"character":3},"arguments":["minlength"]}]}],"_maxlength":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":66,"character":3},"arguments":["maxlength"]}]}],"modelChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":71,"character":3}}]}],"placeholder":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":73,"character":3}}]}],"styles":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":75,"character":3}}]}],"domain":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":79,"character":3}}]}],"urlUploadImage":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":80,"character":3}}]}],"form":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":82,"character":3}}]}],"toolbar":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":92,"character":3}}]}],"enableHTMLButton":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":93,"character":3}}]}],"mentionValues":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":98,"character":3}}]}],"hashTagValues":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":99,"character":3}}]}],"sdLabelDef":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ContentChild","line":100,"character":3},"arguments":[{"__symbolic":"reference","module":"@sd-angular/core/common","name":"SdLabelDefDirective","line":100,"character":16}]}]}],"sdChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":169,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":172,"character":20},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":173,"character":17},{"__symbolic":"reference","module":"@sd-angular/core/api","name":"SdApiService","line":174,"character":26}]}],"ngOnInit":[{"__symbolic":"method"}],"ngAfterViewInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}]}}},"origins":{"SdEditorModule":"./src/lib/editor.module","Constants":"./src/lib/constant","PROMOTION_PERMISSIONS":"./src/lib/constant","ValidateMessageConstants":"./src/lib/constant","PROMOTION_FORM":"./src/lib/constant","SdEditor":"./src/lib/editor.component"},"importAs":"@sd-angular/core/editor"}
1
+ {"__symbolic":"module","version":4,"metadata":{"IEditorConfiguration":{"__symbolic":"interface"},"EDITOR_CONFIG":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":7,"character":33},"arguments":["editor.configuration"]},"SdEditorModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":10,"character":1},"arguments":[{"declarations":[{"__symbolic":"reference","name":"SdEditor"}],"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":13,"character":4},{"__symbolic":"reference","module":"@angular/forms","name":"FormsModule","line":14,"character":4},{"__symbolic":"reference","module":"@angular/forms","name":"ReactiveFormsModule","line":15,"character":4},{"__symbolic":"call","expression":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"ngx-quill","name":"QuillModule","line":16,"character":4},"member":"forRoot"}},{"__symbolic":"reference","module":"@sd-angular/core/translate","name":"SdTranslateModule","line":17,"character":4},{"__symbolic":"reference","module":"@sd-angular/core/button","name":"SdButtonModule","line":18,"character":4},{"__symbolic":"reference","module":"@sd-angular/core/textarea","name":"SdTextareaModule","line":19,"character":4},{"__symbolic":"reference","module":"@sd-angular/core/api","name":"SdApiModule","line":20,"character":4}],"exports":[{"__symbolic":"reference","name":"SdEditor"}],"providers":[]}]}],"members":{}},"Constants":{"ARE_YOU_WANT_TO_DELETE":"Are you sure you want to delete?","ACTIVE":"active","IN_ACTIVE":"inactive","APPROVE":"approve","UN_APPROVE":"unapprove","ACCEPT_SIZE_IMAGE":"Logo only accept image with size <= 2MB","ACCEPT_TYPE_IMAGE":"image/png, image/gif, image/jpeg, image/bmp, image/x-icon","PAGE_TYPE_NEW":"new","PAGE_TYPE_EDIT":"edit","SAVE":"saveOb","SAVE_AND_CONTINUE":"saveAndContOb","IMAGE_SIZE":2048000,"SUCCESS":"Success","IMPORT_SUCCESSFULLY":"Import successfully!","ERROR":"Error","FAILED":"fail","FILE":"file","NONE":"none","NOT_EXIST_ID_OR_LINK":"This ID/Link is not existing","FEATURE_IS_PENDING":"This feature is pending","NOT_SUPPORT_FILE_IMAGE":"File upload is not supported.","NOT_SUPPORT_FILE_IMPORT":"File import is not supported.","NETWORK_ERROR":"Network Error","SORT_BY":[{"value":0,"name":"Created Date"},{"value":1,"name":"Title"}],"DESC":[{"value":true,"name":"Descending"},{"value":false,"name":"Ascending"}],"FORM_ERRORS":{"Id":"","textSearch":"","ImportLogId":"","SortBy":"","Reverse":""},"VALIDATION_MESSAGES":{}},"PROMOTION_PERMISSIONS":["ListPromotion","AddNewPromotion","EditPromotion","ActiveOrInactivePromotion","RemovePromotion","ImportPromotion","ExportPromotion"],"ValidateMessageConstants":{"TITLE_REQUIRED":"Title is required","TITLE_MAXLENGTH":"Title is not more than 55 characters","TITLE_PATTERN":"Title is required","CREATED_AT_REQUIRED":"Created At is required","SHOW_ON_HOME_REQUIRED":"Show On Home is required","DISPLAY_NUMBER_REQUIRED":"Display Number is required","CONTENT_TYPE_REQUIRED":"Content Type is required","DISCOUNT_PERCENT_REQUIRED":"Discount percent is required","DISCOUNT_PERCENT_MAX":"Max discount percent is 100, cannot input greater","DISCOUNT_PERCENT_MIN":"Min discount percent is 0, cannot input lower"},"PROMOTION_FORM":{"FORM_ERRORS":{"title":"","createdAt":"","displayNumber":"","showOnHome":"","discountPercent":"","isActive":"","ctaLabelName":"","ctaDeepLink":"","tags":""},"VALIDATION_MESSAGES":{"title":{"required":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"TITLE_REQUIRED"},"maxlength":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"TITLE_MAXLENGTH"},"pattern":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"TITLE_PATTERN"}},"createdAt":{"required":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"CREATED_AT_REQUIRED"}},"showOnHome":{"required":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"SHOW_ON_HOME_REQUIRED"}},"displayNumber":{"required":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"DISPLAY_NUMBER_REQUIRED"}},"discountPercent":{"required":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"DISCOUNT_PERCENT_REQUIRED"},"max":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"DISCOUNT_PERCENT_MAX"},"min":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"DISCOUNT_PERCENT_MIN"}},"tags":{"required":{"__symbolic":"select","expression":{"__symbolic":"reference","name":"ValidateMessageConstants"},"member":"CONTENT_TYPE_REQUIRED"}}}},"SdEditor":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":28,"character":1},"arguments":[{"selector":"sd-editor","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":32,"character":19},"member":"OnPush"},"template":"<div id=\"box-{{id}}\">\r\n <label *ngIf=\"label && !sdLabelDef?.templateRef\" class=\"d-block T14M\">{{label}} <span class=\"text-danger mb-2\"\r\n *ngIf=\"required\">*</span></label>\r\n <ng-container *ngIf=\"sdLabelDef?.templateRef\" matSuffix>\r\n <ng-container *ngTemplateOutlet=\"sdLabelDef.templateRef\">\r\n </ng-container>\r\n </ng-container>\r\n <ng-container *ngIf=\"!formControl.disabled && !showHtmlEditor\">\r\n <quill-editor #editor [styles]=\"styles\" (onEditorCreated)=\"editorInit($event)\" [ngModel]=\"formControl.value\"\r\n (onSelectionChanged)=\"onSelectionChanged($event)\"\r\n (onContentChanged)=\"onContentChanged($event)\"\r\n (ngModelChange)=\"onModelChange($event)\" [id]=\"id\" [modules]=\"quillConfig\" [placeholder]=\"placeholder\"\r\n [maxLength]=\"maxlength\">\r\n </quill-editor>\r\n <span class=\"d-block text-danger mt-5\" *ngIf=\"formControl.errors?.required\">\r\n {{'This field is required' | sdTranslate}}\r\n </span>\r\n <span class=\"d-block text-danger mt-5\" *ngIf=\"formControl.errors?.minlength\">\r\n {{'Max length' | sdTranslate}} <strong>{{minlength}}</strong>\r\n </span>\r\n <span class=\"d-block text-danger mt-5\" *ngIf=\"formControl.errors?.maxlength\">\r\n {{'Max length' | sdTranslate}} <strong>{{maxlength}}</strong>\r\n </span>\r\n </ng-container>\r\n <ng-container *ngIf=\"formControl.disabled\">\r\n <div [innerHtml]=\"formControl.value\"></div>\r\n </ng-container>\r\n <ng-container *ngIf=\"enableHTMLButton\">\r\n <sd-textarea [(model)]=\"modelHTML\" *ngIf=\"showHtmlEditor\" rows=\"20\"\r\n (modelChange)=\"onModelChange($event)\"></sd-textarea>\r\n <sd-button\r\n title=\"{{showHtmlEditor?'Ẩn':'Hiện'}} mã HTML\"\r\n class=\"mr-8\"\r\n fontSet=\"material-icons-outlined\"\r\n (action)=\"onClickShowHtmlEditor()\"\r\n type=\"light\"\r\n ></sd-button>\r\n </ng-container>\r\n</div>\r\n","styles":["::ng-deep img[alt=c-image-editor-quill]{max-width:80%}::ng-deep .ql-toolbar input.ql-customFile[type=file]{display:none}"]}]}],"members":{"editor":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":38,"character":3},"arguments":["editor"]}]}],"label":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":39,"character":3}}]}],"model":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":41,"character":3}}]}],"disabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":50,"character":3}}]}],"pRequired":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":61,"character":3}}]}],"_minlength":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":68,"character":3},"arguments":["minlength"]}]}],"_maxlength":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":75,"character":3},"arguments":["maxlength"]}]}],"modelChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":80,"character":3}}]}],"placeholder":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":82,"character":3}}]}],"styles":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":84,"character":3}}]}],"args":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":86,"character":3}}]}],"domain":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":90,"character":3}}]}],"urlUploadImage":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":91,"character":3}}]}],"urlUploadFile":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":92,"character":3}}]}],"form":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":94,"character":3}}]}],"toolbar":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":104,"character":3}}]}],"enableHTMLButton":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":105,"character":3}}]}],"mentionValues":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":110,"character":3}}]}],"hashTagValues":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":111,"character":3}}]}],"sdLabelDef":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ContentChild","line":112,"character":3},"arguments":[{"__symbolic":"reference","module":"@sd-angular/core/common","name":"SdLabelDefDirective","line":112,"character":16}]}]}],"sdChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":180,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,null,null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":188,"character":5},"arguments":[{"__symbolic":"reference","name":"EDITOR_CONFIG"}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":188,"character":28}}]],"parameters":[{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":184,"character":20},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":185,"character":17},{"__symbolic":"reference","module":"@sd-angular/core/api","name":"SdApiService","line":186,"character":26},{"__symbolic":"reference","module":"@sd-angular/core/loading","name":"SdLoadingService","line":187,"character":28},{"__symbolic":"reference","name":"IEditorConfiguration"}]}],"ngOnInit":[{"__symbolic":"method"}],"ngAfterViewInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"onSelectionChanged":[{"__symbolic":"method"}],"onContentChanged":[{"__symbolic":"method"}]}}},"origins":{"IEditorConfiguration":"./src/lib/editor.model","EDITOR_CONFIG":"./src/lib/editor.model","SdEditorModule":"./src/lib/editor.module","Constants":"./src/lib/constant","PROMOTION_PERMISSIONS":"./src/lib/constant","ValidateMessageConstants":"./src/lib/constant","PROMOTION_FORM":"./src/lib/constant","SdEditor":"./src/lib/editor.component"},"importAs":"@sd-angular/core/editor"}
@@ -1,14 +1,18 @@
1
- import { OnInit, EventEmitter, ChangeDetectorRef, AfterViewInit, OnDestroy, NgZone } from '@angular/core';
2
- import { QuillEditorComponent } from 'ngx-quill';
1
+ import { AfterViewInit, ChangeDetectorRef, EventEmitter, NgZone, OnDestroy, OnInit } from '@angular/core';
2
+ import { ContentChange, QuillEditorComponent, SelectionChange } from 'ngx-quill';
3
3
  import { FormControl, FormGroup, NgForm } from '@angular/forms';
4
4
  import { SdApiService } from '@sd-angular/core/api';
5
5
  import 'quill-mention';
6
6
  import { SdLabelDefDirective } from '@sd-angular/core/common';
7
+ import { SdLoadingService } from "@sd-angular/core/loading";
8
+ import { IEditorConfiguration } from './editor.model';
7
9
  export declare class SdEditor implements OnInit, AfterViewInit, OnDestroy {
8
10
  #private;
9
11
  private ngZone;
10
12
  private ref;
11
13
  private sdApiService;
14
+ private loadingService;
15
+ private configuration;
12
16
  id: string;
13
17
  editor: QuillEditorComponent;
14
18
  label: string;
@@ -23,9 +27,11 @@ export declare class SdEditor implements OnInit, AfterViewInit, OnDestroy {
23
27
  modelChange: EventEmitter<string>;
24
28
  placeholder: string;
25
29
  styles: any;
30
+ args: any;
26
31
  formControl: FormControl;
27
32
  domain: string;
28
33
  urlUploadImage: string;
34
+ urlUploadFile: string;
29
35
  set form(val: NgForm | FormGroup);
30
36
  toolbar: any;
31
37
  enableHTMLButton: boolean;
@@ -85,13 +91,17 @@ export declare class SdEditor implements OnInit, AfterViewInit, OnDestroy {
85
91
  };
86
92
  };
87
93
  };
88
- textLength: number;
94
+ customButtonFileSVG: string;
89
95
  sdChange: EventEmitter<string>;
90
- constructor(ngZone: NgZone, ref: ChangeDetectorRef, sdApiService: SdApiService);
96
+ timerLoadQuillToolbar: any;
97
+ constructor(ngZone: NgZone, ref: ChangeDetectorRef, sdApiService: SdApiService, loadingService: SdLoadingService, configuration: IEditorConfiguration);
91
98
  ngOnInit(): void;
99
+ customFileHandler: (e: any) => void;
92
100
  ngAfterViewInit(): void;
93
101
  ngOnDestroy(): void;
94
102
  editorInit: (quill: any) => void;
95
103
  onModelChange: (val: string) => void;
96
104
  onClickShowHtmlEditor: () => void;
105
+ onSelectionChanged(e: SelectionChange): void;
106
+ onContentChanged(e: ContentChange): void;
97
107
  }
@@ -0,0 +1,6 @@
1
+ import { InjectionToken } from "@angular/core";
2
+ export interface IEditorConfiguration {
3
+ uploadImage: (formData: FormData, args?: any) => Promise<string>;
4
+ uploadFile: (formData: FormData, args?: any) => Promise<string>;
5
+ }
6
+ export declare const EDITOR_CONFIG: InjectionToken<IEditorConfiguration>;
@@ -1,3 +1,4 @@
1
+ export * from './lib/editor.model';
1
2
  export * from './lib/editor.module';
2
3
  export * from './lib/constant';
3
4
  export * from './lib/editor.component';
@@ -57,7 +57,7 @@ _items = new WeakMap(), _send = new WeakMap(), _load = new WeakMap();
57
57
  SdComment.decorators = [
58
58
  { type: Component, args: [{
59
59
  selector: 'sd-comment',
60
- template: "<div class=\"c-container\">\r\n <div class=\"c-header\">\r\n <div class=\"c-title\">{{'Comments' | sdTranslate}} <a href=\"javascript:;\">({{count | async}})</a></div>\r\n </div>\r\n <div class=\"c-body\" *ngIf=\"commentOption?.style==='basic'\">\r\n <ng-container *ngFor=\"let item of items | async\">\r\n <div class=\"d-flex my-8\">\r\n <div class=\"c-avatar mr-12\">\r\n <img height=\"32\" width=\"32px\" [src]=\"item.picture\">\r\n </div>\r\n <div class=\"c-comment\">\r\n <div class=\"c-info mb-4\">\r\n {{'By' | sdTranslate}}\r\n <span class=\"c-creator ml-2\">\r\n {{item.creator}}\r\n </span>\r\n <ng-container *ngIf=\"item.createdDate\">\r\n <span class=\"mx-4\">\u2022</span>\r\n <span\r\n [matTooltip]=\"item.createdDate | date:'dd/MM/yyyy HH:mm'\">{{item.createdDate | sdTimeDifferent:'dd/MM/yyyy HH:mm':'hour' | async}}</span>\r\n </ng-container>\r\n </div>\r\n <div class=\"c-content\" [innerHtml]=\"item.content\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"c-body-style1\" *ngIf=\"commentOption?.style==='style1'\" sdScroll>\r\n <ng-container *ngFor=\"let item of items | async; let i = index\">\r\n <div class=\"d-flex my-8\">\r\n <div class=\"c-avatar mr-12\">\r\n <img height=\"32\" width=\"32px\" [src]=\"item.picture\">\r\n </div>\r\n <div class=\"c-comment {{i + 1 === (count | async) ? 'c-comment-border': ''}}\">\r\n <div class=\"c-info mb-4\">\r\n <div class=\"c-col-left\">\r\n <div class=\"c-creator\">\r\n {{item.creator}}\r\n </div>\r\n <div class=\"c-email\">\r\n {{item.email}}\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"item.createdDate\">\r\n <div class=\"c-col-right\"\r\n [matTooltip]=\"item.createdDate | date:'dd/MM/yyyy H:mm'\">{{item.createdDate | date:'dd/MM/yyyy H:mm'}}</div>\r\n </ng-container>\r\n </div>\r\n <div class=\"c-content\" [innerHtml]=\"item.content\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"c-footer p-16\">\r\n <div class=\"row\">\r\n <div class=\"col-12 c-position-relative\">\r\n <ng-container *ngIf=\"commentOption?.editor?.enabled else noUseEditor\">\r\n <div class=\"mb-8\">\r\n <sd-editor [(model)]=\"message\" [styles]=\"commentOption?.editor?.styles\"\r\n [toolbar]=\"commentOption?.editor?.toolbar\"\r\n [urlUploadImage]=\"commentOption?.editor?.urlUploadImage\"\r\n [mentionValues]=\"commentOption?.editor?.mentionValues\"\r\n [hashTagValues]=\"commentOption?.editor?.hashTagValues\"></sd-editor>\r\n </div>\r\n <div *ngIf=\"commentOption?.fullComment?.enabled\" class=\"c-full-comment-backdrop\"\r\n (click)=\"modalFullComment.open()\"></div>\r\n </ng-container>\r\n <ng-template #noUseEditor>\r\n <sd-textarea [(model)]=\"message\" rows=\"1\" autoHeight></sd-textarea>\r\n </ng-template>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <sd-button class=\"float-right\" title=\"G\u1EEDi\" (action)=\"onSend()\" [disabled]=\"!message\" color=\"primary\" type=\"fill\"\r\n size=\"sm\">\r\n </sd-button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<sd-modal [title]=\"'Comments' | sdTranslate\" width=\"sm\" [closeClickOutSide]=\"commentOption?.fullComment?.closeClickOutSide\" #modalFullComment>\r\n <sd-modal-body>\r\n <sd-editor [(model)]=\"message\" [styles]=\"fullCommentStyles\"\r\n [toolbar]=\"commentOption?.editor?.toolbar\"\r\n [urlUploadImage]=\"commentOption?.editor?.urlUploadImage\"\r\n [mentionValues]=\"commentOption?.editor?.mentionValues\"\r\n [hashTagValues]=\"commentOption?.editor?.hashTagValues\"></sd-editor>\r\n </sd-modal-body>\r\n <sd-modal-footer>\r\n <sd-button class=\"ml-8\" title=\"X\u00F3a to\u00E0n b\u1ED9\" size=\"sm\" type=\"link\"\r\n (action)=\"clearAllData()\">\r\n </sd-button>\r\n <sd-button *ngIf=\"!commentOption?.fullComment?.enableSendButton\" class=\"ml-8\" title=\"\u0110\u00F3ng\" size=\"sm\" (action)=\"modalFullComment.close()\"\r\n color=\"primary\" type=\"fill\">\r\n </sd-button>\r\n <sd-button *ngIf=\"commentOption?.fullComment?.enableSendButton\" class=\"ml-8\" title=\"G\u1EEDi\" size=\"sm\" (action)=\"onSend();modalFullComment.close();\" [disabled]=\"!message\"\r\n color=\"primary\" type=\"fill\">\r\n </sd-button>\r\n </sd-modal-footer>\r\n</sd-modal>\r\n",
60
+ template: "<div class=\"c-container\">\r\n <div class=\"c-header\">\r\n <div class=\"c-title\">{{'Comments' | sdTranslate}} <a href=\"javascript:;\">({{count | async}})</a></div>\r\n </div>\r\n <div class=\"c-body\" *ngIf=\"commentOption?.style==='basic'\">\r\n <ng-container *ngFor=\"let item of items | async\">\r\n <div class=\"d-flex my-8\">\r\n <div class=\"c-avatar mr-12\">\r\n <img height=\"32\" width=\"32px\" [src]=\"item.picture\">\r\n </div>\r\n <div class=\"c-comment\">\r\n <div class=\"c-info mb-4\">\r\n {{'By' | sdTranslate}}\r\n <span class=\"c-creator ml-2\">\r\n {{item.creator}}\r\n </span>\r\n <ng-container *ngIf=\"item.createdDate\">\r\n <span class=\"mx-4\">\u2022</span>\r\n <span\r\n [matTooltip]=\"item.createdDate | date:'dd/MM/yyyy HH:mm'\">{{item.createdDate | sdTimeDifferent:'dd/MM/yyyy HH:mm':'hour' | async}}</span>\r\n </ng-container>\r\n </div>\r\n <div class=\"c-content\" [innerHtml]=\"item.content\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"c-body-style1\" *ngIf=\"commentOption?.style==='style1'\" sdScroll>\r\n <ng-container *ngFor=\"let item of items | async; let i = index\">\r\n <div class=\"d-flex my-8\">\r\n <div class=\"c-avatar mr-12\">\r\n <img height=\"32\" width=\"32px\" [src]=\"item.picture\">\r\n </div>\r\n <div class=\"c-comment {{i + 1 === (count | async) ? 'c-comment-border': ''}}\">\r\n <div class=\"c-info mb-4\">\r\n <div class=\"c-col-left\">\r\n <div class=\"c-creator\">\r\n {{item.creator}}\r\n </div>\r\n <div class=\"c-email\">\r\n {{item.email}}\r\n </div>\r\n </div>\r\n <ng-container *ngIf=\"item.createdDate\">\r\n <div class=\"c-col-right\"\r\n [matTooltip]=\"item.createdDate | date:'dd/MM/yyyy H:mm'\">{{item.createdDate | date:'dd/MM/yyyy H:mm'}}</div>\r\n </ng-container>\r\n </div>\r\n <div class=\"c-content\" [innerHtml]=\"item.content\">\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </div>\r\n <div class=\"c-footer p-16\">\r\n <div class=\"row\">\r\n <div class=\"col-12 c-position-relative\">\r\n <ng-container *ngIf=\"commentOption?.editor?.enabled else noUseEditor\">\r\n <div class=\"mb-8\">\r\n <sd-editor [(model)]=\"message\" [styles]=\"commentOption?.editor?.styles\"\r\n [toolbar]=\"commentOption?.editor?.toolbar\"\r\n [urlUploadImage]=\"commentOption?.editor?.urlUploadImage\"\r\n [urlUploadFile]=\"commentOption?.editor?.urlUploadFile\"\r\n [mentionValues]=\"commentOption?.editor?.mentionValues\"\r\n [hashTagValues]=\"commentOption?.editor?.hashTagValues\"></sd-editor>\r\n </div>\r\n <div *ngIf=\"commentOption?.fullComment?.enabled\" class=\"c-full-comment-backdrop\"\r\n (click)=\"modalFullComment.open()\"></div>\r\n </ng-container>\r\n <ng-template #noUseEditor>\r\n <sd-textarea [(model)]=\"message\" rows=\"1\" autoHeight></sd-textarea>\r\n </ng-template>\r\n </div>\r\n </div>\r\n <div class=\"row\">\r\n <div class=\"col-12\">\r\n <sd-button class=\"float-right\" title=\"G\u1EEDi\" (action)=\"onSend()\" [disabled]=\"!message\" color=\"primary\" type=\"fill\"\r\n size=\"sm\">\r\n </sd-button>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<sd-modal [title]=\"'Comments' | sdTranslate\" width=\"sm\" [closeClickOutSide]=\"commentOption?.fullComment?.closeClickOutSide\" #modalFullComment>\r\n <sd-modal-body>\r\n <sd-editor [(model)]=\"message\" [styles]=\"fullCommentStyles\"\r\n [toolbar]=\"commentOption?.editor?.toolbar\"\r\n [urlUploadImage]=\"commentOption?.editor?.urlUploadImage\"\r\n [urlUploadFile]=\"commentOption?.editor?.urlUploadFile\"\r\n [mentionValues]=\"commentOption?.editor?.mentionValues\"\r\n [hashTagValues]=\"commentOption?.editor?.hashTagValues\"></sd-editor>\r\n </sd-modal-body>\r\n <sd-modal-footer>\r\n <sd-button class=\"ml-8\" title=\"X\u00F3a to\u00E0n b\u1ED9\" size=\"sm\" type=\"link\"\r\n (action)=\"clearAllData()\">\r\n </sd-button>\r\n <sd-button *ngIf=\"!commentOption?.fullComment?.enableSendButton\" class=\"ml-8\" title=\"\u0110\u00F3ng\" size=\"sm\" (action)=\"modalFullComment.close()\"\r\n color=\"primary\" type=\"fill\">\r\n </sd-button>\r\n <sd-button *ngIf=\"commentOption?.fullComment?.enableSendButton\" class=\"ml-8\" title=\"G\u1EEDi\" size=\"sm\" (action)=\"onSend();modalFullComment.close();\" [disabled]=\"!message\"\r\n color=\"primary\" type=\"fill\">\r\n </sd-button>\r\n </sd-modal-footer>\r\n</sd-modal>\r\n",
61
61
  changeDetection: ChangeDetectionStrategy.OnPush,
62
62
  styles: [".text-black400{color:#757575}.c-container{display:flex;flex-direction:column;height:100%}.c-container .c-header{align-items:center;background-color:#fff;display:flex;height:40px;padding:0 16px}.c-container .c-header .c-title{font-weight:500}.c-container .c-body{background:#f8f9fa;flex:1;overflow-y:hidden;padding:16px}.c-container .c-body:hover{overflow-y:auto}.c-container .c-body .c-comment{background:#fff;border:1px solid #f2f2f2;border-radius:4px;flex:1;overflow-wrap:break-word;padding:12px 16px;white-space:pre-wrap;word-break:break-word}.c-container .c-body .c-comment .c-info{color:#757575}.c-container .c-body .c-comment .c-info .c-creator{color:#000;font-weight:500}.c-container .c-body-style1{background:#fff;flex:1;overflow-y:hidden;padding:16px}.c-container .c-body-style1 .c-comment{background:#fff;border-bottom:3px solid #f2f2f2;border-radius:4px;flex:1;overflow-wrap:break-word;white-space:pre-wrap;word-break:break-word}.c-container .c-body-style1 .c-comment .c-info{color:#757575}.c-container .c-body-style1 .c-comment .c-info .c-creator{color:#000;font-weight:500;white-space:nowrap}.c-container .c-body-style1 .c-comment .c-info .c-email{color:#000;font-weight:400;white-space:nowrap}.c-container .c-body-style1 .c-comment .c-info .c-col-left{display:inline-block;overflow:hidden;vertical-align:top;width:calc(100% - 128px)}.c-container .c-body-style1 .c-comment .c-info .c-col-right{display:inline-block;margin-left:8px;width:120px}.c-container .c-body-style1 .c-comment-border{border-bottom:none}.c-container .c-footer{background:#fff;min-height:120px}.c-container .c-footer .c-position-relative{position:relative}.c-container .c-footer .c-full-comment-backdrop{height:100%;left:0;position:absolute;top:0;width:100%;z-index:1}"]
63
63
  },] }
@@ -67,4 +67,4 @@ SdComment.propDecorators = {
67
67
  textarea: [{ type: ViewChild, args: [SdTextarea,] }],
68
68
  option: [{ type: Input }]
69
69
  };
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiQzovVXNlcnMvbmdoaWF0dDE1X29uZW1vdW50L0RvY3VtZW50cy9saWItY29yZS11aS9wcm9qZWN0cy9zZC1jb3JlL2NvbW1lbnQvIiwic291cmNlcyI6WyJzcmMvbGliL2NvbW1lbnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFJVCxLQUFLLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDckQsT0FBTyxFQUFDLGVBQWUsRUFBYSxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUMsR0FBRyxFQUFZLE1BQU0sZ0JBQWdCLENBQUM7QUFTOUMsTUFBTSxPQUFPLFNBQVM7SUFrQnBCO1FBaEJBLGlCQUFTLElBQUksZUFBZSxDQUFZLEVBQUUsQ0FBQyxFQUFDO1FBQzVDLGdCQUFRLElBQUksZUFBZSxDQUFTLEVBQUUsQ0FBQyxFQUFDO1FBUXhDLHNCQUFpQixHQUFHO1lBQ2xCLFlBQVksRUFBRSxPQUFPO1NBQ3RCLENBQUM7UUF3QkYsV0FBTSxHQUFHLEdBQUcsRUFBRTs7WUFDWixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2hCLFlBQUEsSUFBSSxDQUFDLGFBQWEsMENBQUUsS0FBSywwQ0FBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDaEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQ3BCLE1BQUEsSUFBSSxDQUFDLFFBQVEsMENBQUUsS0FBSyxHQUFHO2FBQ3hCO1FBQ0gsQ0FBQyxDQUFBO1FBRUQsZ0JBQVEsR0FBUyxFQUFFO1lBQ2pCLE1BQU0sRUFBQyxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQ25DLE1BQU0sT0FBTyxHQUFHLEtBQUssRUFBRSxDQUFDO1lBQ3hCLElBQUksT0FBTyxZQUFZLE9BQU8sRUFBRTtnQkFDOUIsT0FBTyxNQUFNLE9BQU8sQ0FBQzthQUN0QjtZQUNELE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FBQSxFQUFBO1FBRUQsV0FBTSxHQUFHLEdBQVMsRUFBRTtZQUNsQixxQ0FBWSxJQUFJLENBQUMsTUFBTSx5Q0FBQSxJQUFJLENBQVEsQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQSxDQUFBO1FBRUQsaUJBQVksR0FBRyxHQUFHLEVBQUU7WUFDbEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFBO0lBekNELENBQUM7SUFiRCxJQUFhLE1BQU0sQ0FBQyxNQUF1QjtRQUN6QyxJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztRQUM1QixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUFBLENBQUM7SUFZRixRQUFRO1FBQ04sSUFBSSxDQUFDLEtBQUssR0FBRyxxQ0FBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3hDLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTs7Z0JBQUMsT0FBQSxpQ0FDakIsQ0FBQyxLQUNKLE9BQU8sUUFBRSxDQUFDLENBQUMsT0FBTyxtQ0FBSSwyRUFBMkUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUM1RyxDQUFBO2FBQUEsQ0FBQyxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNKLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELFdBQVc7SUFDWCxDQUFDO0lBRUQsZUFBZTtJQUNmLENBQUM7Ozs7WUF6Q0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxZQUFZO2dCQUN0Qix3NkpBQXVDO2dCQUV2QyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7YUFDaEQ7Ozs7dUJBRUUsU0FBUyxTQUFDLFVBQVU7cUJBS3BCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIE9uSW5pdCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgSW5wdXQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgVmlld0NoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7U2RUZXh0YXJlYX0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS90ZXh0YXJlYSc7XHJcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHttYXAsIHN3aXRjaE1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge0NvbW1lbnQsIFNkQ29tbWVudE9wdGlvbn0gZnJvbSAnLi9jb21tZW50Lm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2QtY29tbWVudCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbW1lbnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvbW1lbnQuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2RDb21tZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBWaWV3Q2hpbGQoU2RUZXh0YXJlYSkgdGV4dGFyZWE6IFNkVGV4dGFyZWE7XHJcbiAgI2l0ZW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb21tZW50W10+KFtdKTtcclxuICAjc2VuZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XHJcbiAgY29tbWVudE9wdGlvbjogU2RDb21tZW50T3B0aW9uO1xyXG5cclxuICBASW5wdXQoKSBzZXQgb3B0aW9uKG9wdGlvbjogU2RDb21tZW50T3B0aW9uKSB7XHJcbiAgICB0aGlzLmNvbW1lbnRPcHRpb24gPSBvcHRpb247XHJcbiAgICB0aGlzLnJlbG9hZCgpO1xyXG4gIH07XHJcblxyXG4gIGZ1bGxDb21tZW50U3R5bGVzID0ge1xyXG4gICAgJ21pbi1oZWlnaHQnOiAnMTUwcHgnXHJcbiAgfTtcclxuICBpdGVtczogT2JzZXJ2YWJsZTxDb21tZW50W10+O1xyXG4gIGNvdW50OiBPYnNlcnZhYmxlPG51bWJlcj47XHJcbiAgbWVzc2FnZTogc3RyaW5nO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pdGVtcyA9IHRoaXMuI2l0ZW1zLnBpcGUobWFwKGl0ZW1zID0+IHtcclxuICAgICAgcmV0dXJuIGl0ZW1zLm1hcChlID0+ICh7XHJcbiAgICAgICAgLi4uZSxcclxuICAgICAgICBwaWN0dXJlOiBlLnBpY3R1cmUgPz8gYGh0dHBzOi8vdWktYXZhdGFycy5jb20vYXBpLz9zaXplPTMyJnJvdW5kZWQ9dHJ1ZSZiYWNrZ3JvdW5kPXJhbmRvbSZuYW1lPSR7ZS5jcmVhdG9yfWBcclxuICAgICAgfSkpO1xyXG4gICAgfSkpO1xyXG4gICAgdGhpcy5jb3VudCA9IHRoaXMuaXRlbXMucGlwZShtYXAoaXRlbXMgPT4gaXRlbXMubGVuZ3RoKSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIG9uU2VuZCA9ICgpID0+IHtcclxuICAgIGlmICh0aGlzLm1lc3NhZ2UpIHtcclxuICAgICAgdGhpcy5jb21tZW50T3B0aW9uPy5ldmVudD8ub25TZW5kKHRoaXMubWVzc2FnZSk7XHJcbiAgICAgIHRoaXMubWVzc2FnZSA9IG51bGw7XHJcbiAgICAgIHRoaXMudGV4dGFyZWE/LmZvY3VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAjbG9hZCA9IGFzeW5jICgpID0+IHtcclxuICAgIGNvbnN0IHtpdGVtc30gPSB0aGlzLmNvbW1lbnRPcHRpb247XHJcbiAgICBjb25zdCByZXN1bHRzID0gaXRlbXMoKTtcclxuICAgIGlmIChyZXN1bHRzIGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdWx0cztcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgcmVsb2FkID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgdGhpcy4jaXRlbXMubmV4dChhd2FpdCB0aGlzLiNsb2FkKCkpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJBbGxEYXRhID0gKCkgPT4ge1xyXG4gICAgdGhpcy5tZXNzYWdlID0gJyc7XHJcbiAgfVxyXG59XHJcbiJdfQ==
70
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiQzovVXNlcnMvbmdoaWF0dDE1X29uZW1vdW50L0RvY3VtZW50cy9saWItY29yZS11aS9wcm9qZWN0cy9zZC1jb3JlL2NvbW1lbnQvIiwic291cmNlcyI6WyJzcmMvbGliL2NvbW1lbnQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFJVCxLQUFLLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDckQsT0FBTyxFQUFDLGVBQWUsRUFBYSxNQUFNLE1BQU0sQ0FBQztBQUNqRCxPQUFPLEVBQUMsR0FBRyxFQUFZLE1BQU0sZ0JBQWdCLENBQUM7QUFTOUMsTUFBTSxPQUFPLFNBQVM7SUFrQnBCO1FBaEJBLGlCQUFTLElBQUksZUFBZSxDQUFZLEVBQUUsQ0FBQyxFQUFDO1FBQzVDLGdCQUFRLElBQUksZUFBZSxDQUFTLEVBQUUsQ0FBQyxFQUFDO1FBUXhDLHNCQUFpQixHQUFHO1lBQ2xCLFlBQVksRUFBRSxPQUFPO1NBQ3RCLENBQUM7UUF3QkYsV0FBTSxHQUFHLEdBQUcsRUFBRTs7WUFDWixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2hCLFlBQUEsSUFBSSxDQUFDLGFBQWEsMENBQUUsS0FBSywwQ0FBRSxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDaEQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7Z0JBQ3BCLE1BQUEsSUFBSSxDQUFDLFFBQVEsMENBQUUsS0FBSyxHQUFHO2FBQ3hCO1FBQ0gsQ0FBQyxDQUFBO1FBRUQsZ0JBQVEsR0FBUyxFQUFFO1lBQ2pCLE1BQU0sRUFBQyxLQUFLLEVBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDO1lBQ25DLE1BQU0sT0FBTyxHQUFHLEtBQUssRUFBRSxDQUFDO1lBQ3hCLElBQUksT0FBTyxZQUFZLE9BQU8sRUFBRTtnQkFDOUIsT0FBTyxNQUFNLE9BQU8sQ0FBQzthQUN0QjtZQUNELE9BQU8sT0FBTyxDQUFDO1FBQ2pCLENBQUMsQ0FBQSxFQUFBO1FBRUQsV0FBTSxHQUFHLEdBQVMsRUFBRTtZQUNsQixxQ0FBWSxJQUFJLENBQUMsTUFBTSx5Q0FBQSxJQUFJLENBQVEsQ0FBQyxDQUFDO1FBQ3ZDLENBQUMsQ0FBQSxDQUFBO1FBRUQsaUJBQVksR0FBRyxHQUFHLEVBQUU7WUFDbEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFBO0lBekNELENBQUM7SUFiRCxJQUFhLE1BQU0sQ0FBQyxNQUF1QjtRQUN6QyxJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQztRQUM1QixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUFBLENBQUM7SUFZRixRQUFRO1FBQ04sSUFBSSxDQUFDLEtBQUssR0FBRyxxQ0FBWSxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1lBQ3hDLE9BQU8sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRTs7Z0JBQUMsT0FBQSxpQ0FDakIsQ0FBQyxLQUNKLE9BQU8sUUFBRSxDQUFDLENBQUMsT0FBTyxtQ0FBSSwyRUFBMkUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUM1RyxDQUFBO2FBQUEsQ0FBQyxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNKLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVELFdBQVc7SUFDWCxDQUFDO0lBRUQsZUFBZTtJQUNmLENBQUM7Ozs7WUF6Q0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxZQUFZO2dCQUN0Qixza0tBQXVDO2dCQUV2QyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7YUFDaEQ7Ozs7dUJBRUUsU0FBUyxTQUFDLFVBQVU7cUJBS3BCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBBZnRlclZpZXdJbml0LFxyXG4gIE9uSW5pdCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgSW5wdXQsXHJcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXHJcbiAgVmlld0NoaWxkXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7U2RUZXh0YXJlYX0gZnJvbSAnQHNkLWFuZ3VsYXIvY29yZS90ZXh0YXJlYSc7XHJcbmltcG9ydCB7QmVoYXZpb3JTdWJqZWN0LCBPYnNlcnZhYmxlfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHttYXAsIHN3aXRjaE1hcH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQge0NvbW1lbnQsIFNkQ29tbWVudE9wdGlvbn0gZnJvbSAnLi9jb21tZW50Lm1vZGVsJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2QtY29tbWVudCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbW1lbnQuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2NvbW1lbnQuY29tcG9uZW50LnNjc3MnXSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2RDb21tZW50IGltcGxlbWVudHMgT25Jbml0LCBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xyXG4gIEBWaWV3Q2hpbGQoU2RUZXh0YXJlYSkgdGV4dGFyZWE6IFNkVGV4dGFyZWE7XHJcbiAgI2l0ZW1zID0gbmV3IEJlaGF2aW9yU3ViamVjdDxDb21tZW50W10+KFtdKTtcclxuICAjc2VuZCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XHJcbiAgY29tbWVudE9wdGlvbjogU2RDb21tZW50T3B0aW9uO1xyXG5cclxuICBASW5wdXQoKSBzZXQgb3B0aW9uKG9wdGlvbjogU2RDb21tZW50T3B0aW9uKSB7XHJcbiAgICB0aGlzLmNvbW1lbnRPcHRpb24gPSBvcHRpb247XHJcbiAgICB0aGlzLnJlbG9hZCgpO1xyXG4gIH07XHJcblxyXG4gIGZ1bGxDb21tZW50U3R5bGVzID0ge1xyXG4gICAgJ21pbi1oZWlnaHQnOiAnMTUwcHgnXHJcbiAgfTtcclxuICBpdGVtczogT2JzZXJ2YWJsZTxDb21tZW50W10+O1xyXG4gIGNvdW50OiBPYnNlcnZhYmxlPG51bWJlcj47XHJcbiAgbWVzc2FnZTogc3RyaW5nO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5pdGVtcyA9IHRoaXMuI2l0ZW1zLnBpcGUobWFwKGl0ZW1zID0+IHtcclxuICAgICAgcmV0dXJuIGl0ZW1zLm1hcChlID0+ICh7XHJcbiAgICAgICAgLi4uZSxcclxuICAgICAgICBwaWN0dXJlOiBlLnBpY3R1cmUgPz8gYGh0dHBzOi8vdWktYXZhdGFycy5jb20vYXBpLz9zaXplPTMyJnJvdW5kZWQ9dHJ1ZSZiYWNrZ3JvdW5kPXJhbmRvbSZuYW1lPSR7ZS5jcmVhdG9yfWBcclxuICAgICAgfSkpO1xyXG4gICAgfSkpO1xyXG4gICAgdGhpcy5jb3VudCA9IHRoaXMuaXRlbXMucGlwZShtYXAoaXRlbXMgPT4gaXRlbXMubGVuZ3RoKSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIG9uU2VuZCA9ICgpID0+IHtcclxuICAgIGlmICh0aGlzLm1lc3NhZ2UpIHtcclxuICAgICAgdGhpcy5jb21tZW50T3B0aW9uPy5ldmVudD8ub25TZW5kKHRoaXMubWVzc2FnZSk7XHJcbiAgICAgIHRoaXMubWVzc2FnZSA9IG51bGw7XHJcbiAgICAgIHRoaXMudGV4dGFyZWE/LmZvY3VzKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAjbG9hZCA9IGFzeW5jICgpID0+IHtcclxuICAgIGNvbnN0IHtpdGVtc30gPSB0aGlzLmNvbW1lbnRPcHRpb247XHJcbiAgICBjb25zdCByZXN1bHRzID0gaXRlbXMoKTtcclxuICAgIGlmIChyZXN1bHRzIGluc3RhbmNlb2YgUHJvbWlzZSkge1xyXG4gICAgICByZXR1cm4gYXdhaXQgcmVzdWx0cztcclxuICAgIH1cclxuICAgIHJldHVybiByZXN1bHRzO1xyXG4gIH1cclxuXHJcbiAgcmVsb2FkID0gYXN5bmMgKCkgPT4ge1xyXG4gICAgdGhpcy4jaXRlbXMubmV4dChhd2FpdCB0aGlzLiNsb2FkKCkpO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJBbGxEYXRhID0gKCkgPT4ge1xyXG4gICAgdGhpcy5tZXNzYWdlID0gJyc7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -1,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiJDOi9Vc2Vycy9uZ2hpYXR0MTVfb25lbW91bnQvRG9jdW1lbnRzL2xpYi1jb3JlLXVpL3Byb2plY3RzL3NkLWNvcmUvY29tbWVudC8iLCJzb3VyY2VzIjpbInNyYy9saWIvY29tbWVudC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2RDb21tZW50T3B0aW9uIHtcclxuICBpdGVtczogKCkgPT4gQ29tbWVudFtdIHwgUHJvbWlzZTxDb21tZW50W10+O1xyXG4gIGV2ZW50OiB7XHJcbiAgICBvblNlbmQ6ICh0ZXh0OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cclxuICB9O1xyXG4gIGVkaXRvcj86IHtcclxuICAgIGVuYWJsZWQ/OiBib29sZWFuO1xyXG4gICAgdG9vbGJhcj86IGFueTtcclxuICAgIHVybFVwbG9hZEltYWdlPzogc3RyaW5nO1xyXG4gICAgc3R5bGVzPzogYW55O1xyXG4gICAgbWVudGlvblZhbHVlcz86IHsgaWQ6IHN0cmluZywgdmFsdWU6IHN0cmluZywgbGluaz86IHN0cmluZyB9W107XHJcbiAgICBoYXNoVGFnVmFsdWVzPzogeyBpZDogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBsaW5rPzogc3RyaW5nIH1bXTtcclxuICB9O1xyXG4gIHN0eWxlOiAnYmFzaWMnIHwgJ3N0eWxlMSc7XHJcbiAgZnVsbENvbW1lbnQ/OiB7XHJcbiAgICBlbmFibGVkPzogYm9vbGVhbjtcclxuICAgIGVuYWJsZVNlbmRCdXR0b24/OiBib29sZWFuO1xyXG4gICAgY2xvc2VDbGlja091dFNpZGU/OiBib29sZWFuO1xyXG4gIH07XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ29tbWVudCBleHRlbmRzIEJhc2VDb21tZW50IHtcclxuICBjaGlsZHJlbjogQ29tbWVudEx2MltdO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgQmFzZUNvbW1lbnQge1xyXG4gIGNyZWF0b3I6IHN0cmluZztcclxuICBlbWFpbDogc3RyaW5nO1xyXG4gIGNyZWF0ZWREYXRlOiBzdHJpbmcgfCBEYXRlO1xyXG4gIGNvbnRlbnQ6IHN0cmluZztcclxuICBwaWN0dXJlOiBzdHJpbmc7XHJcbn1cclxuXHJcbmludGVyZmFjZSBDb21tZW50THYyIGV4dGVuZHMgQmFzZUNvbW1lbnQge1xyXG4gIGNoaWxkcmVuOiBDb21tZW50THYzW107XHJcbn1cclxuXHJcbmludGVyZmFjZSBDb21tZW50THYzIGV4dGVuZHMgQmFzZUNvbW1lbnQge1xyXG5cclxufVxyXG5cclxuXHJcblxyXG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWVudC5tb2RlbC5qcyIsInNvdXJjZVJvb3QiOiJDOi9Vc2Vycy9uZ2hpYXR0MTVfb25lbW91bnQvRG9jdW1lbnRzL2xpYi1jb3JlLXVpL3Byb2plY3RzL3NkLWNvcmUvY29tbWVudC8iLCJzb3VyY2VzIjpbInNyYy9saWIvY29tbWVudC5tb2RlbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbmV4cG9ydCBpbnRlcmZhY2UgU2RDb21tZW50T3B0aW9uIHtcclxuICBpdGVtczogKCkgPT4gQ29tbWVudFtdIHwgUHJvbWlzZTxDb21tZW50W10+O1xyXG4gIGV2ZW50OiB7XHJcbiAgICBvblNlbmQ6ICh0ZXh0OiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD5cclxuICB9O1xyXG4gIGVkaXRvcj86IHtcclxuICAgIGVuYWJsZWQ/OiBib29sZWFuO1xyXG4gICAgdG9vbGJhcj86IGFueTtcclxuICAgIHVybFVwbG9hZEltYWdlPzogc3RyaW5nO1xyXG4gICAgdXJsVXBsb2FkRmlsZT86IHN0cmluZztcclxuICAgIHN0eWxlcz86IGFueTtcclxuICAgIG1lbnRpb25WYWx1ZXM/OiB7IGlkOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcsIGxpbms/OiBzdHJpbmcgfVtdO1xyXG4gICAgaGFzaFRhZ1ZhbHVlcz86IHsgaWQ6IHN0cmluZywgdmFsdWU6IHN0cmluZywgbGluaz86IHN0cmluZyB9W107XHJcbiAgfTtcclxuICBzdHlsZTogJ2Jhc2ljJyB8ICdzdHlsZTEnO1xyXG4gIGZ1bGxDb21tZW50Pzoge1xyXG4gICAgZW5hYmxlZD86IGJvb2xlYW47XHJcbiAgICBlbmFibGVTZW5kQnV0dG9uPzogYm9vbGVhbjtcclxuICAgIGNsb3NlQ2xpY2tPdXRTaWRlPzogYm9vbGVhbjtcclxuICB9O1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIENvbW1lbnQgZXh0ZW5kcyBCYXNlQ29tbWVudCB7XHJcbiAgY2hpbGRyZW46IENvbW1lbnRMdjJbXTtcclxufVxyXG5cclxuaW50ZXJmYWNlIEJhc2VDb21tZW50IHtcclxuICBjcmVhdG9yOiBzdHJpbmc7XHJcbiAgZW1haWw6IHN0cmluZztcclxuICBjcmVhdGVkRGF0ZTogc3RyaW5nIHwgRGF0ZTtcclxuICBjb250ZW50OiBzdHJpbmc7XHJcbiAgcGljdHVyZTogc3RyaW5nO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgQ29tbWVudEx2MiBleHRlbmRzIEJhc2VDb21tZW50IHtcclxuICBjaGlsZHJlbjogQ29tbWVudEx2M1tdO1xyXG59XHJcblxyXG5pbnRlcmZhY2UgQ29tbWVudEx2MyBleHRlbmRzIEJhc2VDb21tZW50IHtcclxuXHJcbn1cclxuXHJcblxyXG5cclxuIl19