@sd-angular/core 1.2.95 → 1.2.98
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/sd-angular-core-button.umd.js +4 -1
- package/bundles/sd-angular-core-button.umd.js.map +1 -1
- package/bundles/sd-angular-core-button.umd.min.js +1 -1
- package/bundles/sd-angular-core-button.umd.min.js.map +1 -1
- package/bundles/sd-angular-core-db.umd.js +11 -0
- package/bundles/sd-angular-core-db.umd.js.map +1 -1
- package/bundles/sd-angular-core-db.umd.min.js +2 -2
- package/bundles/sd-angular-core-db.umd.min.js.map +1 -1
- package/bundles/sd-angular-core-editor.umd.js +4 -2
- package/bundles/sd-angular-core-editor.umd.js.map +1 -1
- package/bundles/sd-angular-core-editor.umd.min.js +1 -1
- package/bundles/sd-angular-core-editor.umd.min.js.map +1 -1
- package/button/sd-angular-core-button.metadata.json +1 -1
- package/db/src/lib/db.service.d.ts +7 -1
- package/editor/sd-angular-core-editor.metadata.json +1 -1
- package/editor/src/lib/editor.component.d.ts +0 -1
- package/editor/src/lib/editor.model.d.ts +3 -2
- package/esm2015/button/src/lib/button.component.js +5 -2
- package/esm2015/db/src/lib/db.service.js +12 -1
- package/esm2015/editor/src/lib/editor.component.js +5 -3
- package/esm2015/editor/src/lib/editor.model.js +2 -2
- package/fesm2015/sd-angular-core-button.js +4 -1
- package/fesm2015/sd-angular-core-button.js.map +1 -1
- package/fesm2015/sd-angular-core-db.js +11 -0
- package/fesm2015/sd-angular-core-db.js.map +1 -1
- package/fesm2015/sd-angular-core-editor.js +4 -2
- package/fesm2015/sd-angular-core-editor.js.map +1 -1
- package/package.json +1 -1
- package/{sd-angular-core-1.2.95.tgz → sd-angular-core-1.2.98.tgz} +0 -0
|
@@ -1 +1 @@
|
|
|
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","__values","o","s","Symbol","iterator","m","i","call","length","next","value","done","TypeError","__classPrivateFieldGet","receiver","state","kind","f","has","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","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","matches","toLowerCase","indexOf","push","keyboard","bindings","enter","key","handler","range","context","customButtonFileSVG","sdChange","timerLoadQuillToolbar","_updateValidator","clearValidators","clearAsyncValidators","validators","Validators","minlength","minLength","maxLength","setValidators","updateValueAndValidity","markForCheck","_quill","editorInit","quill","quillEvent","_initUploadImage","self","runOutsideAngular","getModule","addHandler","fileInput","querySelector","document","createElement","setAttribute","classList","add","addEventListener","files","getSelection","formData","FormData","append","enable","_a","uploadImage","args","then","url","dangerouslyPasteHTML","index","content","getContents","setContents","setSelection","appendChild","click","onModelChange","val","setValue","modelHTML","onClickShowHtmlEditor","defineProperty","prototype","emitEvent","detectChanges","disable","NgForm","form","ngOnInit","addControl","action","this_1","toString","includes","qlKey_1","interval_1","setInterval","clearInterval","innerHTML","customAction","getAttribute","e","cursorPosition","localStorage","getItem","element","currentTarget","loadingId","closest","qlKey","JSON","parse","_d","_b","actions","_e","ngAfterViewInit","valueChanges","subscribe","emit","ngOnDestroy","removeControl","unsubscribe","onSelectionChanged","setItem","editor","stringify","onContentChanged","getLength","Component","selector","template","changeDetection","ChangeDetectionStrategy","OnPush","NgZone","ChangeDetectorRef","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\nimport Quill from \"quill\";\r\nexport interface SdEditorAction {\r\n key: string;\r\n icon: string;\r\n click: (event: any, args: SdEditorActionArgs) => void | Promise<void>\r\n}\r\nexport interface SdEditorActionArgs {\r\n qlKey: string;\r\n element: HTMLElement;\r\n loadingId: string;\r\n quill: Quill;\r\n cursorPosition: {\r\n index: number;\r\n length: number;\r\n },\r\n args?: any\r\n}\r\nexport interface IEditorConfiguration {\r\n uploadImage?: (formData: FormData, args?: any) => Promise<string>;\r\n actions?: SdEditorAction[];\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 #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 constructor(\r\n private ngZone: NgZone,\r\n private ref: ChangeDetectorRef,\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\r\n for (const action of (this.configuration?.actions || [])) {\r\n if (this.quillConfig.toolbar.container.toString().includes(action.key)) {\r\n const qlKey = `button.ql-${action.key}`\r\n const interval = setInterval(() => {\r\n if (document.querySelector(qlKey)) {\r\n clearInterval(interval);\r\n document.querySelector(qlKey).innerHTML = this.customButtonFileSVG;\r\n const customAction = document.querySelector(qlKey);\r\n if (customAction.getAttribute('listener') !== '1') {\r\n customAction.setAttribute('listener', '1');\r\n customAction.addEventListener('click', (e) => {\r\n const cursorPosition = localStorage.getItem('quillRange');\r\n const element = e.currentTarget as HTMLElement; // Lấy element của action được click\r\n const toolbar = element.closest('.ql-formats').closest('.ql-toolbar'); // Lấy toolbar element\r\n const id = toolbar.closest('quill-editor').id; // Lấy id của editor để phục vụ loading\r\n const loadingId = `#box-${id}`; // id của editor;\r\n action.click(e, {\r\n qlKey,\r\n element,\r\n loadingId,\r\n cursorPosition: JSON.parse(cursorPosition),\r\n quill: this.#quill,\r\n args: this.args\r\n });\r\n });\r\n }\r\n }\r\n }, 1000);\r\n }\r\n }\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 // 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 #quill: Quill;\r\n editorInit = (quill: Quill) => {\r\n this.#quill = 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, "Courier New", 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.#initUploadImage(quill);\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 const formData = new FormData();\r\n formData.append(Constants.FILE, files[0]);\r\n this.quill.enable(false);\r\n // self.#uploadImage(formData, quill, range, fileInput);\r\n self.configuration?.uploadImage(formData, self.args).then(url => {\r\n self.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=\"' + (url || '')\r\n + '\"><img src=\"' + (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 });\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
|
+
{"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","__values","o","s","Symbol","iterator","m","i","call","length","next","value","done","TypeError","__classPrivateFieldGet","receiver","state","kind","f","has","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","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","matches","toLowerCase","indexOf","push","keyboard","bindings","enter","key","handler","range","context","sdChange","timerLoadQuillToolbar","_updateValidator","clearValidators","clearAsyncValidators","validators","Validators","minlength","minLength","maxLength","setValidators","updateValueAndValidity","markForCheck","_quill","editorInit","quill","quillEvent","_initUploadImage","self","runOutsideAngular","getModule","addHandler","fileInput","querySelector","document","createElement","setAttribute","classList","add","addEventListener","files","getSelection","formData","FormData","append","enable","_a","uploadImage","args","then","url","dangerouslyPasteHTML","index","content","getContents","setContents","setSelection","appendChild","click","onModelChange","val","setValue","modelHTML","onClickShowHtmlEditor","defineProperty","prototype","emitEvent","detectChanges","disable","NgForm","form","ngOnInit","addControl","action","this_1","toString","includes","qlKey_1","interval_1","setInterval","clearInterval","innerHTML","icon","customAction","getAttribute","tooltip","e","cursorPosition","localStorage","getItem","element","currentTarget","loadingId","closest","qlKey","JSON","parse","_d","_b","actions","_e","ngAfterViewInit","valueChanges","subscribe","emit","ngOnDestroy","removeControl","unsubscribe","onSelectionChanged","setItem","editor","stringify","onContentChanged","getLength","Component","selector","template","changeDetection","ChangeDetectionStrategy","OnPush","NgZone","ChangeDetectorRef","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\nimport Quill from 'quill';\r\nexport interface SdEditorAction {\r\n key: string;\r\n icon: string;\r\n tooltip: string;\r\n click: (event: any, args: SdEditorActionArgs) => void | Promise<void>;\r\n}\r\nexport interface SdEditorActionArgs {\r\n qlKey: string;\r\n element: HTMLElement;\r\n loadingId: string;\r\n quill: Quill;\r\n cursorPosition: {\r\n index: number;\r\n length: number;\r\n };\r\n args?: any;\r\n}\r\nexport interface IEditorConfiguration {\r\n uploadImage?: (formData: FormData, args?: any) => Promise<string>;\r\n actions?: SdEditorAction[];\r\n}\r\n\r\nexport const EDITOR_CONFIG = new InjectionToken<IEditorConfiguration>('editor.configuration');\r\n","/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","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 #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 @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 @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\r\n for (const action of (this.configuration?.actions || [])) {\r\n if (this.quillConfig.toolbar.container.toString().includes(action.key)) {\r\n const qlKey = `button.ql-${action.key}`;\r\n const interval = setInterval(() => {\r\n if (document.querySelector(qlKey)) {\r\n clearInterval(interval);\r\n document.querySelector(qlKey).innerHTML = action.icon;\r\n const customAction = document.querySelector(qlKey);\r\n if (customAction.getAttribute('listener') !== '1') {\r\n customAction.setAttribute('listener', '1');\r\n if (action.tooltip) {\r\n customAction.setAttribute('title', action.tooltip);\r\n }\r\n customAction.addEventListener('click', (e) => {\r\n const cursorPosition = localStorage.getItem('quillRange');\r\n const element = e.currentTarget as HTMLElement; // Lấy element của action được click\r\n const toolbar = element.closest('.ql-formats').closest('.ql-toolbar'); // Lấy toolbar element\r\n const id = toolbar.closest('quill-editor').id; // Lấy id của editor để phục vụ loading\r\n const loadingId = `#box-${id}`; // id của editor;\r\n action.click(e, {\r\n qlKey,\r\n element,\r\n loadingId,\r\n cursorPosition: JSON.parse(cursorPosition),\r\n quill: this.#quill,\r\n args: this.args\r\n });\r\n });\r\n }\r\n }\r\n }, 1000);\r\n }\r\n }\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 // 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 #quill: Quill;\r\n editorInit = (quill: Quill) => {\r\n this.#quill = 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, "Courier New", 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.#initUploadImage(quill);\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 const formData = new FormData();\r\n formData.append(Constants.FILE, files[0]);\r\n this.quill.enable(false);\r\n // self.#uploadImage(formData, quill, range, fileInput);\r\n self.configuration?.uploadImage(formData, self.args).then(url => {\r\n self.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=\"' + (url || '')\r\n + '\"><img src=\"' + (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 });\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":{"SdButtonModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":8,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":10,"character":4},{"__symbolic":"reference","module":"@angular/material/icon","name":"MatIconModule","line":11,"character":4},{"__symbolic":"reference","module":"@angular/material/button","name":"MatButtonModule","line":12,"character":4},{"__symbolic":"reference","module":"@angular/material/progress-spinner","name":"MatProgressSpinnerModule","line":13,"character":4},{"__symbolic":"reference","module":"@angular/material/tooltip","name":"MatTooltipModule","line":14,"character":4}],"declarations":[{"__symbolic":"reference","name":"SdButton"}],"exports":[{"__symbolic":"reference","name":"SdButton"}]}]}],"members":{}},"SdButton":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":16,"character":1},"arguments":[{"selector":"sd-button","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":20,"character":19},"member":"OnPush"},"template":"<button *ngIf=\"type === 'fill'\" [ngStyle]=\"{'width':width}\" class=\"c-button c-fill\" [class.c-square]=\"icon && !title\"\r\n [ngClass]=\"{'c-sm': size === 'sm', 'c-lg': size === 'lg'}\" type=\"button\" [color]=\"color\" [disabled]=\"isDisabled\"\r\n matTooltipPosition=\"above\" [matTooltip]=\"tooltip\" mat-flat-button #button>\r\n <ng-container *ngTemplateOutlet=\"buttonContent\"></ng-container>\r\n</button>\r\n<button *ngIf=\"type === 'light'\" [ngStyle]=\"{'width':width}\" class=\"c-button c-light\" [class.c-square]=\"icon && !title\"\r\n [ngClass]=\"{'c-sm': size === 'sm', 'c-lg': size === 'lg'}\" type=\"button\" [color]=\"color\" [disabled]=\"isDisabled\"\r\n matTooltipPosition=\"above\" [matTooltip]=\"tooltip\" mat-flat-button #button>\r\n <ng-container *ngTemplateOutlet=\"buttonContent\"></ng-container>\r\n</button>\r\n<button *ngIf=\"type === 'outline'\" [ngStyle]=\"{'width':width}\" class=\"c-button c-outline\"\r\n [class.c-square]=\"icon && !title\" [ngClass]=\"{'c-sm': size === 'sm', 'c-lg': size === 'lg'}\" type=\"button\"\r\n [color]=\"color\" [disabled]=\"isDisabled\" matTooltipPosition=\"above\" [matTooltip]=\"tooltip\" mat-stroked-button #button>\r\n <ng-container *ngTemplateOutlet=\"buttonContent\"></ng-container>\r\n</button>\r\n<button *ngIf=\"type === 'link'\" [ngStyle]=\"{'width':width}\" class=\"c-button c-link\" [class.c-square]=\"icon && !title\"\r\n [ngClass]=\"{'c-sm': size === 'sm', 'c-lg': size === 'lg'}\" type=\"button\" [color]=\"color\" [disabled]=\"isDisabled\"\r\n matTooltipPosition=\"above\" [matTooltip]=\"tooltip\" mat-button #button>\r\n <ng-container *ngTemplateOutlet=\"buttonContent\"></ng-container>\r\n</button>\r\n<ng-template #buttonContent>\r\n <ng-container *ngIf=\"title\">\r\n <ng-container *ngIf=\"!iconSuffix\">\r\n <mat-spinner *ngIf=\"loading\" strokeWidth=\"2\" mode=\"indeterminate\" diameter=\"18\" value=\"100\"\r\n class=\"d-inline-block\"></mat-spinner>\r\n <mat-icon *ngIf=\"!loading && icon\" [fontSet]=\"fontSet\">{{icon}}</mat-icon>\r\n </ng-container>\r\n <span class=\"d-inline\" [ngClass]=\"{'ml-8': icon && !iconSuffix, 'mr-8': icon && iconSuffix}\">{{title}}</span>\r\n <mat-icon *ngIf=\"iconSuffix && icon\" [fontSet]=\"fontSet\">{{icon}}</mat-icon>\r\n </ng-container>\r\n <ng-container *ngIf=\"!title\">\r\n <mat-icon [fontSet]=\"fontSet\">{{icon}}</mat-icon>\r\n </ng-container>\r\n</ng-template>","styles":[".text-black400{color:#757575}:host ::ng-deep button.c-button{font-size:16px;height:40px;line-height:20px;min-width:auto;padding:2px 16px!important}:host ::ng-deep button.c-button .mat-button-wrapper{align-items:center;display:flex;justify-content:center}:host ::ng-deep button.c-button.mat-button-disabled{background-color:#e9e9e9!important;color:#a6a6a6!important}:host ::ng-deep button.c-button.c-square{min-width:auto!important;padding:0!important;width:40px!important}:host ::ng-deep button.c-button.c-sm{font-size:14px!important;font-weight:400;height:32px;line-height:20px!important;padding:2px 16px!important}:host ::ng-deep button.c-button.c-sm mat-icon{font-size:16px!important;height:16px!important;width:16px!important}:host ::ng-deep button.c-button.c-sm.c-square{width:32px!important}:host ::ng-deep button.c-button.c-lg{font-size:16px!important;height:48px;line-height:20px!important;padding:2px 16px!important}:host ::ng-deep button.c-button.c-lg.c-square{width:48px!important}:host ::ng-deep button.c-button:focus{outline:none}:host ::ng-deep button.c-button.c-fill.mat-flat-button.mat-info,:host ::ng-deep button.c-button.c-fill.mat-flat-button.mat-primary{background-color:#2962ff;color:#fff}:host ::ng-deep button.c-button.c-fill.mat-flat-button.mat-success{background-color:#4caf50;color:#fff}:host ::ng-deep button.c-button.c-fill.mat-flat-button.mat-warning{background-color:#ff9600;color:#fff}:host ::ng-deep button.c-button.c-fill.mat-flat-button.mat-danger{background-color:#f82c13;color:#fff}:host ::ng-deep button.c-button.c-fill.mat-flat-button.mat-secondary{background-color:#212121;color:#fff}:host ::ng-deep button.c-button.c-light.mat-flat-button.mat-info,:host ::ng-deep button.c-button.c-light.mat-flat-button.mat-primary{background-color:#e7e9ff;color:#2962ff}:host ::ng-deep button.c-button.c-light.mat-flat-button.mat-success{background-color:#dbefdc;color:#4caf50}:host ::ng-deep button.c-button.c-light.mat-flat-button.mat-warning{background-color:#ffeacc;color:#ff9600}:host ::ng-deep button.c-button.c-light.mat-flat-button.mat-danger{background-color:#fed5d0;color:#f82c13}:host ::ng-deep button.c-button.c-light.mat-flat-button.mat-secondary{background-color:#e9e9e9;color:#212121}:host ::ng-deep button.c-button.c-outline.mat-stroked-button{border-color:#d3d3d3}:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-info,:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-primary{color:#2962ff}:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-success{color:#4caf50}:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-warning{color:#ff9600}:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-danger{color:#f82c13}:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-secondary{color:#212121}:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-button-disabled{background:transparent!important}:host ::ng-deep button.c-button.c-link.mat-button.mat-info,:host ::ng-deep button.c-button.c-link.mat-button.mat-primary{color:#2962ff}:host ::ng-deep button.c-button.c-link.mat-button.mat-success{color:#4caf50}:host ::ng-deep button.c-button.c-link.mat-button.mat-warning{color:#ff9600}:host ::ng-deep button.c-button.c-link.mat-button.mat-danger{color:#f82c13}:host ::ng-deep button.c-button.c-link.mat-button.mat-secondary{color:#212121}"]}]}],"members":{"button":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":24,"character":3},"arguments":["button"]}]}],"type":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":28,"character":3}}]}],"color":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":29,"character":3}}]}],"title":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":30,"character":3}}]}],"icon":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":31,"character":3}}]}],"width":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":32,"character":3}}]}],"size":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":33,"character":3}}]}],"tooltip":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":34,"character":3}}]}],"iconSuffix":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":35,"character":3}}]}],"fontSet":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":36,"character":3}}]}],"disabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":40,"character":3}}]}],"loading":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":46,"character":3}}]}],"action":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":47,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":49,"character":27}]}],"ngOnInit":[{"__symbolic":"method"}],"ngAfterViewInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}]}}},"origins":{"SdButtonModule":"./src/lib/button.module","SdButton":"./src/lib/button.component"},"importAs":"@sd-angular/core/button"}
|
|
1
|
+
{"__symbolic":"module","version":4,"metadata":{"SdButtonModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":8,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":10,"character":4},{"__symbolic":"reference","module":"@angular/material/icon","name":"MatIconModule","line":11,"character":4},{"__symbolic":"reference","module":"@angular/material/button","name":"MatButtonModule","line":12,"character":4},{"__symbolic":"reference","module":"@angular/material/progress-spinner","name":"MatProgressSpinnerModule","line":13,"character":4},{"__symbolic":"reference","module":"@angular/material/tooltip","name":"MatTooltipModule","line":14,"character":4}],"declarations":[{"__symbolic":"reference","name":"SdButton"}],"exports":[{"__symbolic":"reference","name":"SdButton"}]}]}],"members":{}},"SdButton":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":16,"character":1},"arguments":[{"selector":"sd-button","changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":20,"character":19},"member":"OnPush"},"host":{"[attr.disabled]":"isDisabled ? true : null","$quoted$":["[attr.disabled]"]},"template":"<button *ngIf=\"type === 'fill'\" [ngStyle]=\"{'width':width}\" class=\"c-button c-fill\" [class.c-square]=\"icon && !title\"\r\n [ngClass]=\"{'c-sm': size === 'sm', 'c-lg': size === 'lg'}\" type=\"button\" [color]=\"color\" [disabled]=\"isDisabled\"\r\n matTooltipPosition=\"above\" [matTooltip]=\"tooltip\" mat-flat-button #button>\r\n <ng-container *ngTemplateOutlet=\"buttonContent\"></ng-container>\r\n</button>\r\n<button *ngIf=\"type === 'light'\" [ngStyle]=\"{'width':width}\" class=\"c-button c-light\" [class.c-square]=\"icon && !title\"\r\n [ngClass]=\"{'c-sm': size === 'sm', 'c-lg': size === 'lg'}\" type=\"button\" [color]=\"color\" [disabled]=\"isDisabled\"\r\n matTooltipPosition=\"above\" [matTooltip]=\"tooltip\" mat-flat-button #button>\r\n <ng-container *ngTemplateOutlet=\"buttonContent\"></ng-container>\r\n</button>\r\n<button *ngIf=\"type === 'outline'\" [ngStyle]=\"{'width':width}\" class=\"c-button c-outline\"\r\n [class.c-square]=\"icon && !title\" [ngClass]=\"{'c-sm': size === 'sm', 'c-lg': size === 'lg'}\" type=\"button\"\r\n [color]=\"color\" [disabled]=\"isDisabled\" matTooltipPosition=\"above\" [matTooltip]=\"tooltip\" mat-stroked-button #button>\r\n <ng-container *ngTemplateOutlet=\"buttonContent\"></ng-container>\r\n</button>\r\n<button *ngIf=\"type === 'link'\" [ngStyle]=\"{'width':width}\" class=\"c-button c-link\" [class.c-square]=\"icon && !title\"\r\n [ngClass]=\"{'c-sm': size === 'sm', 'c-lg': size === 'lg'}\" type=\"button\" [color]=\"color\" [disabled]=\"isDisabled\"\r\n matTooltipPosition=\"above\" [matTooltip]=\"tooltip\" mat-button #button>\r\n <ng-container *ngTemplateOutlet=\"buttonContent\"></ng-container>\r\n</button>\r\n<ng-template #buttonContent>\r\n <ng-container *ngIf=\"title\">\r\n <ng-container *ngIf=\"!iconSuffix\">\r\n <mat-spinner *ngIf=\"loading\" strokeWidth=\"2\" mode=\"indeterminate\" diameter=\"18\" value=\"100\"\r\n class=\"d-inline-block\"></mat-spinner>\r\n <mat-icon *ngIf=\"!loading && icon\" [fontSet]=\"fontSet\">{{icon}}</mat-icon>\r\n </ng-container>\r\n <span class=\"d-inline\" [ngClass]=\"{'ml-8': icon && !iconSuffix, 'mr-8': icon && iconSuffix}\">{{title}}</span>\r\n <mat-icon *ngIf=\"iconSuffix && icon\" [fontSet]=\"fontSet\">{{icon}}</mat-icon>\r\n </ng-container>\r\n <ng-container *ngIf=\"!title\">\r\n <mat-icon [fontSet]=\"fontSet\">{{icon}}</mat-icon>\r\n </ng-container>\r\n</ng-template>","styles":[".text-black400{color:#757575}:host[disabled=true]{pointer-events:none}:host ::ng-deep button.c-button{font-size:16px;height:40px;line-height:20px;min-width:auto;padding:2px 16px!important}:host ::ng-deep button.c-button .mat-button-wrapper{align-items:center;display:flex;justify-content:center}:host ::ng-deep button.c-button.mat-button-disabled{background-color:#e9e9e9!important;color:#a6a6a6!important}:host ::ng-deep button.c-button.c-square{min-width:auto!important;padding:0!important;width:40px!important}:host ::ng-deep button.c-button.c-sm{font-size:14px!important;font-weight:400;height:32px;line-height:20px!important;padding:2px 16px!important}:host ::ng-deep button.c-button.c-sm mat-icon{font-size:16px!important;height:16px!important;width:16px!important}:host ::ng-deep button.c-button.c-sm.c-square{width:32px!important}:host ::ng-deep button.c-button.c-lg{font-size:16px!important;height:48px;line-height:20px!important;padding:2px 16px!important}:host ::ng-deep button.c-button.c-lg.c-square{width:48px!important}:host ::ng-deep button.c-button:focus{outline:none}:host ::ng-deep button.c-button.c-fill.mat-flat-button.mat-info,:host ::ng-deep button.c-button.c-fill.mat-flat-button.mat-primary{background-color:#2962ff;color:#fff}:host ::ng-deep button.c-button.c-fill.mat-flat-button.mat-success{background-color:#4caf50;color:#fff}:host ::ng-deep button.c-button.c-fill.mat-flat-button.mat-warning{background-color:#ff9600;color:#fff}:host ::ng-deep button.c-button.c-fill.mat-flat-button.mat-danger{background-color:#f82c13;color:#fff}:host ::ng-deep button.c-button.c-fill.mat-flat-button.mat-secondary{background-color:#212121;color:#fff}:host ::ng-deep button.c-button.c-light.mat-flat-button.mat-info,:host ::ng-deep button.c-button.c-light.mat-flat-button.mat-primary{background-color:#e7e9ff;color:#2962ff}:host ::ng-deep button.c-button.c-light.mat-flat-button.mat-success{background-color:#dbefdc;color:#4caf50}:host ::ng-deep button.c-button.c-light.mat-flat-button.mat-warning{background-color:#ffeacc;color:#ff9600}:host ::ng-deep button.c-button.c-light.mat-flat-button.mat-danger{background-color:#fed5d0;color:#f82c13}:host ::ng-deep button.c-button.c-light.mat-flat-button.mat-secondary{background-color:#e9e9e9;color:#212121}:host ::ng-deep button.c-button.c-outline.mat-stroked-button{border-color:#d3d3d3}:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-info,:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-primary{color:#2962ff}:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-success{color:#4caf50}:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-warning{color:#ff9600}:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-danger{color:#f82c13}:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-secondary{color:#212121}:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-button-disabled{background:transparent!important}:host ::ng-deep button.c-button.c-link.mat-button.mat-info,:host ::ng-deep button.c-button.c-link.mat-button.mat-primary{color:#2962ff}:host ::ng-deep button.c-button.c-link.mat-button.mat-success{color:#4caf50}:host ::ng-deep button.c-button.c-link.mat-button.mat-warning{color:#ff9600}:host ::ng-deep button.c-button.c-link.mat-button.mat-danger{color:#f82c13}:host ::ng-deep button.c-button.c-link.mat-button.mat-secondary{color:#212121}"]}]}],"members":{"button":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":27,"character":3},"arguments":["button"]}]}],"type":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":31,"character":3}}]}],"color":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":32,"character":3}}]}],"title":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":33,"character":3}}]}],"icon":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":34,"character":3}}]}],"width":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":35,"character":3}}]}],"size":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":36,"character":3}}]}],"tooltip":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":37,"character":3}}]}],"iconSuffix":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":38,"character":3}}]}],"fontSet":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":39,"character":3}}]}],"disabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":43,"character":3}}]}],"loading":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":49,"character":3}}]}],"action":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":50,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":52,"character":27}]}],"ngOnInit":[{"__symbolic":"method"}],"ngAfterViewInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}]}}},"origins":{"SdButtonModule":"./src/lib/button.module","SdButton":"./src/lib/button.component"},"importAs":"@sd-angular/core/button"}
|
|
@@ -4,8 +4,14 @@ import { DbQuery, DbRes } from './db.model';
|
|
|
4
4
|
export declare class SdDbService {
|
|
5
5
|
private apiService;
|
|
6
6
|
private firebaseConfiguration;
|
|
7
|
-
|
|
7
|
+
get hasConfiguration(): boolean;
|
|
8
8
|
constructor(apiService: SdApiService, firebaseConfiguration: IFirebaseConfiguration);
|
|
9
|
+
register: <T = any>(collection: string) => {
|
|
10
|
+
get: (id: string) => Promise<DbRes<any>>;
|
|
11
|
+
set: (id: string, data: T) => Promise<void>;
|
|
12
|
+
remove: (id: string) => Promise<void>;
|
|
13
|
+
find: (query?: DbQuery) => Promise<DbRes<any[]>>;
|
|
14
|
+
};
|
|
9
15
|
get: <T = any>(collection: string, id: string) => Promise<DbRes<T>>;
|
|
10
16
|
set: <T = any>(collection: string, id: string, data: T) => Promise<void>;
|
|
11
17
|
remove: (collection: string, id: string) => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"__symbolic":"module","version":4,"metadata":{"SdEditorAction":{"__symbolic":"interface"},"SdEditorActionArgs":{"__symbolic":"interface"},"IEditorConfiguration":{"__symbolic":"interface"},"EDITOR_CONFIG":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":23,"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}}]}],"form":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":92,"character":3}}]}],"toolbar":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":102,"character":3}}]}],"enableHTMLButton":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":103,"character":3}}]}],"mentionValues":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":108,"character":3}}]}],"hashTagValues":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":109,"character":3}}]}],"sdLabelDef":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ContentChild","line":110,"character":3},"arguments":[{"__symbolic":"reference","module":"@sd-angular/core/common","name":"SdLabelDefDirective","line":110,"character":16}]}]}],"sdChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":178,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":183,"character":5},"arguments":[{"__symbolic":"reference","name":"EDITOR_CONFIG"}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":183,"character":28}}]],"parameters":[{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":181,"character":20},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":182,"character":17},{"__symbolic":"reference","name":"IEditorConfiguration"}]}],"ngOnInit":[{"__symbolic":"method"}],"ngAfterViewInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"onSelectionChanged":[{"__symbolic":"method"}],"onContentChanged":[{"__symbolic":"method"}]}}},"origins":{"SdEditorAction":"./src/lib/editor.model","SdEditorActionArgs":"./src/lib/editor.model","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
|
+
{"__symbolic":"module","version":4,"metadata":{"SdEditorAction":{"__symbolic":"interface"},"SdEditorActionArgs":{"__symbolic":"interface"},"IEditorConfiguration":{"__symbolic":"interface"},"EDITOR_CONFIG":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":24,"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}}]}],"form":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":92,"character":3}}]}],"toolbar":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":102,"character":3}}]}],"enableHTMLButton":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":103,"character":3}}]}],"mentionValues":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":108,"character":3}}]}],"hashTagValues":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":109,"character":3}}]}],"sdLabelDef":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ContentChild","line":110,"character":3},"arguments":[{"__symbolic":"reference","module":"@sd-angular/core/common","name":"SdLabelDefDirective","line":110,"character":16}]}]}],"sdChange":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":177,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":183,"character":5},"arguments":[{"__symbolic":"reference","name":"EDITOR_CONFIG"}]},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":183,"character":28}}]],"parameters":[{"__symbolic":"reference","module":"@angular/core","name":"NgZone","line":181,"character":20},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":182,"character":17},{"__symbolic":"reference","name":"IEditorConfiguration"}]}],"ngOnInit":[{"__symbolic":"method"}],"ngAfterViewInit":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}],"onSelectionChanged":[{"__symbolic":"method"}],"onContentChanged":[{"__symbolic":"method"}]}}},"origins":{"SdEditorAction":"./src/lib/editor.model","SdEditorActionArgs":"./src/lib/editor.model","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"}
|
|
@@ -86,7 +86,6 @@ export declare class SdEditor implements OnInit, AfterViewInit, OnDestroy {
|
|
|
86
86
|
};
|
|
87
87
|
};
|
|
88
88
|
};
|
|
89
|
-
customButtonFileSVG: string;
|
|
90
89
|
sdChange: EventEmitter<string>;
|
|
91
90
|
timerLoadQuillToolbar: any;
|
|
92
91
|
constructor(ngZone: NgZone, ref: ChangeDetectorRef, configuration: IEditorConfiguration);
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import { InjectionToken } from
|
|
2
|
-
import Quill from
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
import Quill from 'quill';
|
|
3
3
|
export interface SdEditorAction {
|
|
4
4
|
key: string;
|
|
5
5
|
icon: string;
|
|
6
|
+
tooltip: string;
|
|
6
7
|
click: (event: any, args: SdEditorActionArgs) => void | Promise<void>;
|
|
7
8
|
}
|
|
8
9
|
export interface SdEditorActionArgs {
|
|
@@ -55,7 +55,10 @@ SdButton.decorators = [
|
|
|
55
55
|
selector: 'sd-button',
|
|
56
56
|
template: "<button *ngIf=\"type === 'fill'\" [ngStyle]=\"{'width':width}\" class=\"c-button c-fill\" [class.c-square]=\"icon && !title\"\r\n [ngClass]=\"{'c-sm': size === 'sm', 'c-lg': size === 'lg'}\" type=\"button\" [color]=\"color\" [disabled]=\"isDisabled\"\r\n matTooltipPosition=\"above\" [matTooltip]=\"tooltip\" mat-flat-button #button>\r\n <ng-container *ngTemplateOutlet=\"buttonContent\"></ng-container>\r\n</button>\r\n<button *ngIf=\"type === 'light'\" [ngStyle]=\"{'width':width}\" class=\"c-button c-light\" [class.c-square]=\"icon && !title\"\r\n [ngClass]=\"{'c-sm': size === 'sm', 'c-lg': size === 'lg'}\" type=\"button\" [color]=\"color\" [disabled]=\"isDisabled\"\r\n matTooltipPosition=\"above\" [matTooltip]=\"tooltip\" mat-flat-button #button>\r\n <ng-container *ngTemplateOutlet=\"buttonContent\"></ng-container>\r\n</button>\r\n<button *ngIf=\"type === 'outline'\" [ngStyle]=\"{'width':width}\" class=\"c-button c-outline\"\r\n [class.c-square]=\"icon && !title\" [ngClass]=\"{'c-sm': size === 'sm', 'c-lg': size === 'lg'}\" type=\"button\"\r\n [color]=\"color\" [disabled]=\"isDisabled\" matTooltipPosition=\"above\" [matTooltip]=\"tooltip\" mat-stroked-button #button>\r\n <ng-container *ngTemplateOutlet=\"buttonContent\"></ng-container>\r\n</button>\r\n<button *ngIf=\"type === 'link'\" [ngStyle]=\"{'width':width}\" class=\"c-button c-link\" [class.c-square]=\"icon && !title\"\r\n [ngClass]=\"{'c-sm': size === 'sm', 'c-lg': size === 'lg'}\" type=\"button\" [color]=\"color\" [disabled]=\"isDisabled\"\r\n matTooltipPosition=\"above\" [matTooltip]=\"tooltip\" mat-button #button>\r\n <ng-container *ngTemplateOutlet=\"buttonContent\"></ng-container>\r\n</button>\r\n<ng-template #buttonContent>\r\n <ng-container *ngIf=\"title\">\r\n <ng-container *ngIf=\"!iconSuffix\">\r\n <mat-spinner *ngIf=\"loading\" strokeWidth=\"2\" mode=\"indeterminate\" diameter=\"18\" value=\"100\"\r\n class=\"d-inline-block\"></mat-spinner>\r\n <mat-icon *ngIf=\"!loading && icon\" [fontSet]=\"fontSet\">{{icon}}</mat-icon>\r\n </ng-container>\r\n <span class=\"d-inline\" [ngClass]=\"{'ml-8': icon && !iconSuffix, 'mr-8': icon && iconSuffix}\">{{title}}</span>\r\n <mat-icon *ngIf=\"iconSuffix && icon\" [fontSet]=\"fontSet\">{{icon}}</mat-icon>\r\n </ng-container>\r\n <ng-container *ngIf=\"!title\">\r\n <mat-icon [fontSet]=\"fontSet\">{{icon}}</mat-icon>\r\n </ng-container>\r\n</ng-template>",
|
|
57
57
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
58
|
-
|
|
58
|
+
host: {
|
|
59
|
+
'[attr.disabled]': 'isDisabled ? true : null'
|
|
60
|
+
},
|
|
61
|
+
styles: [".text-black400{color:#757575}:host[disabled=true]{pointer-events:none}:host ::ng-deep button.c-button{font-size:16px;height:40px;line-height:20px;min-width:auto;padding:2px 16px!important}:host ::ng-deep button.c-button .mat-button-wrapper{align-items:center;display:flex;justify-content:center}:host ::ng-deep button.c-button.mat-button-disabled{background-color:#e9e9e9!important;color:#a6a6a6!important}:host ::ng-deep button.c-button.c-square{min-width:auto!important;padding:0!important;width:40px!important}:host ::ng-deep button.c-button.c-sm{font-size:14px!important;font-weight:400;height:32px;line-height:20px!important;padding:2px 16px!important}:host ::ng-deep button.c-button.c-sm mat-icon{font-size:16px!important;height:16px!important;width:16px!important}:host ::ng-deep button.c-button.c-sm.c-square{width:32px!important}:host ::ng-deep button.c-button.c-lg{font-size:16px!important;height:48px;line-height:20px!important;padding:2px 16px!important}:host ::ng-deep button.c-button.c-lg.c-square{width:48px!important}:host ::ng-deep button.c-button:focus{outline:none}:host ::ng-deep button.c-button.c-fill.mat-flat-button.mat-info,:host ::ng-deep button.c-button.c-fill.mat-flat-button.mat-primary{background-color:#2962ff;color:#fff}:host ::ng-deep button.c-button.c-fill.mat-flat-button.mat-success{background-color:#4caf50;color:#fff}:host ::ng-deep button.c-button.c-fill.mat-flat-button.mat-warning{background-color:#ff9600;color:#fff}:host ::ng-deep button.c-button.c-fill.mat-flat-button.mat-danger{background-color:#f82c13;color:#fff}:host ::ng-deep button.c-button.c-fill.mat-flat-button.mat-secondary{background-color:#212121;color:#fff}:host ::ng-deep button.c-button.c-light.mat-flat-button.mat-info,:host ::ng-deep button.c-button.c-light.mat-flat-button.mat-primary{background-color:#e7e9ff;color:#2962ff}:host ::ng-deep button.c-button.c-light.mat-flat-button.mat-success{background-color:#dbefdc;color:#4caf50}:host ::ng-deep button.c-button.c-light.mat-flat-button.mat-warning{background-color:#ffeacc;color:#ff9600}:host ::ng-deep button.c-button.c-light.mat-flat-button.mat-danger{background-color:#fed5d0;color:#f82c13}:host ::ng-deep button.c-button.c-light.mat-flat-button.mat-secondary{background-color:#e9e9e9;color:#212121}:host ::ng-deep button.c-button.c-outline.mat-stroked-button{border-color:#d3d3d3}:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-info,:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-primary{color:#2962ff}:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-success{color:#4caf50}:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-warning{color:#ff9600}:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-danger{color:#f82c13}:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-secondary{color:#212121}:host ::ng-deep button.c-button.c-outline.mat-stroked-button.mat-button-disabled{background:transparent!important}:host ::ng-deep button.c-button.c-link.mat-button.mat-info,:host ::ng-deep button.c-button.c-link.mat-button.mat-primary{color:#2962ff}:host ::ng-deep button.c-button.c-link.mat-button.mat-success{color:#4caf50}:host ::ng-deep button.c-button.c-link.mat-button.mat-warning{color:#ff9600}:host ::ng-deep button.c-button.c-link.mat-button.mat-danger{color:#f82c13}:host ::ng-deep button.c-button.c-link.mat-button.mat-secondary{color:#212121}"]
|
|
59
62
|
},] }
|
|
60
63
|
];
|
|
61
64
|
SdButton.ctorParameters = () => [
|
|
@@ -76,4 +79,4 @@ SdButton.propDecorators = {
|
|
|
76
79
|
loading: [{ type: Input }],
|
|
77
80
|
action: [{ type: Output }]
|
|
78
81
|
};
|
|
79
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJDOi9Vc2Vycy9uZ2hpYXR0MTVfb25lbW91bnQvRG9jdW1lbnRzL2xpYi1jb3JlLXVpL3Byb2plY3RzL3NkLWNvcmUvYnV0dG9uLyIsInNvdXJjZXMiOlsic3JjL2xpYi9idXR0b24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixpQkFBaUIsRUFHakIsU0FBUyxFQUVULHVCQUF1QixHQUN4QixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFhOUMsTUFBTSxPQUFPLFFBQVE7SUEwQm5CLFlBQW9CLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBeEIxQyxvQkFBWSxLQUFLLEVBQUM7UUFDbEIsdUJBQWUsS0FBSyxFQUFDO1FBQ3JCLGVBQVUsR0FBRyxLQUFLLENBQUM7UUFDVixTQUFJLEdBQTBDLE9BQU8sQ0FBQztRQUN0RCxVQUFLLEdBQTRGLFdBQVcsQ0FBQztRQU03RyxlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLFlBQU8sR0FHVyxnQkFBZ0IsQ0FBQztRQU9uQyxZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2YsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDdEMsd0JBQWdCLElBQUksWUFBWSxFQUFFLEVBQUM7UUFzQm5DLHFCQUFhLEdBQUcsRUFBRTtZQUNoQixJQUFJLENBQUMsVUFBVSwwQ0FBaUIsQ0FBQztZQUNqQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQzNCLENBQUMsRUFBQTtRQUVELFlBQU8sR0FBRyxDQUFDLE1BQVcsRUFBRSxFQUFFO1lBQ3hCLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDaEIsT0FBTzthQUNSO1lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0IsQ0FBQyxDQUFBO0lBOUJELENBQUM7SUFWRCxJQUFhLFFBQVEsQ0FBQyxLQUFjO1FBQ2xDLHVCQUFBLElBQUksYUFBYSxLQUFLLElBQUksS0FBSyxFQUFDO1FBQ2hDLGdEQUF1QjtZQUNyQiw4Q0FBQSxJQUFJLENBQWEsQ0FBQztTQUNuQjtJQUNILENBQUM7SUFPRCxRQUFRO0lBQ1IsQ0FBQztJQUVELGVBQWU7UUFDYiw4Q0FBQSxJQUFJLENBQWEsQ0FBQztRQUNsQiw0Q0FBbUIsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUMxSCxJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2hCLE9BQU87YUFDUjtZQUNELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzNCLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDSix1QkFBQSxJQUFJLGdCQUFnQixJQUFJLEVBQUM7SUFDM0IsQ0FBQztJQUVELFdBQVc7UUFDVCw0Q0FBbUIsV0FBVyxFQUFFLENBQUM7SUFDbkMsQ0FBQzs7OztZQXZERixTQUFTLFNBQUM7Z0JBQ1QsUUFBUSxFQUFFLFdBQVc7Z0JBQ3JCLHc1RUFBc0M7Z0JBRXRDLGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2dCQUMvQyxJQUFJLEVBQUU7b0JBQ0osaUJBQWlCLEVBQUUsMEJBQTBCO2lCQUM5Qzs7YUFDRjs7O1lBbkJDLGlCQUFpQjs7O3FCQXNCaEIsU0FBUyxTQUFDLFFBQVE7bUJBSWxCLEtBQUs7b0JBQ0wsS0FBSztvQkFDTCxLQUFLO21CQUNMLEtBQUs7b0JBQ0wsS0FBSzttQkFDTCxLQUFLO3NCQUNMLEtBQUs7eUJBQ0wsS0FBSztzQkFDTCxLQUFLO3VCQUlMLEtBQUs7c0JBTUwsS0FBSztxQkFDTCxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgSW5wdXQsXHJcbiAgT3V0cHV0LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBPbkluaXQsXHJcbiAgQWZ0ZXJWaWV3SW5pdCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgRWxlbWVudFJlZixcclxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uLCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgZGVib3VuY2VUaW1lIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBNYXRCdXR0b24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9idXR0b24nO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdzZC1idXR0b24nLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9idXR0b24uY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2J1dHRvbi5jb21wb25lbnQuc2NzcyddLFxyXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxyXG4gIGhvc3Q6IHtcclxuICAgICdbYXR0ci5kaXNhYmxlZF0nOiAnaXNEaXNhYmxlZCA/IHRydWUgOiBudWxsJ1xyXG4gIH1cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBTZEJ1dHRvbiBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQFZpZXdDaGlsZCgnYnV0dG9uJykgYnV0dG9uOiBNYXRCdXR0b247XHJcbiAgI2Rpc2FibGVkID0gZmFsc2U7XHJcbiAgI2luaXRpYWxpemVkID0gZmFsc2U7XHJcbiAgaXNEaXNhYmxlZCA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHR5cGU6ICdmaWxsJyB8ICdsaWdodCcgfCAnb3V0bGluZScgfCAnbGluaycgPSAnbGlnaHQnO1xyXG4gIEBJbnB1dCgpIGNvbG9yOiAncHJpbWFyeScgfCAnYWNjZW50JyB8ICd3YXJuJyB8ICdpbmZvJyB8ICdzdWNjZXNzJyB8ICd3YXJuaW5nJyB8ICdkYW5nZXInIHwgJ3NlY29uZGFyeScgPSAnc2Vjb25kYXJ5JztcclxuICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGljb246IHN0cmluZztcclxuICBASW5wdXQoKSB3aWR0aDogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIHNpemU6ICdzbScgfCAnbGcnO1xyXG4gIEBJbnB1dCgpIHRvb2x0aXA6IHN0cmluZztcclxuICBASW5wdXQoKSBpY29uU3VmZml4ID0gZmFsc2U7XHJcbiAgQElucHV0KCkgZm9udFNldDogJ21hdGVyaWFsLWljb25zJyB8XHJcbiAgICAnbWF0ZXJpYWwtaWNvbnMtb3V0bGluZWQnIHxcclxuICAgICdtYXRlcmlhbC1pY29ucy1yb3VuZCcgfFxyXG4gICAgJ21hdGVyaWFsLWljb25zLXNoYXJwJyA9ICdtYXRlcmlhbC1pY29ucyc7XHJcbiAgQElucHV0KCkgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLiNkaXNhYmxlZCA9IHZhbHVlIHx8IGZhbHNlO1xyXG4gICAgaWYgKHRoaXMuI2luaXRpYWxpemVkKSB7XHJcbiAgICAgIHRoaXMuI29uQ2hhbmdlcygpO1xyXG4gICAgfVxyXG4gIH1cclxuICBASW5wdXQoKSBsb2FkaW5nID0gZmFsc2U7XHJcbiAgQE91dHB1dCgpIGFjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAjc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICB0aGlzLiNvbkNoYW5nZXMoKTtcclxuICAgIHRoaXMuI3N1YnNjcmlwdGlvbi5hZGQoZnJvbUV2ZW50KHRoaXMuYnV0dG9uLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsICdjbGljaycpLnBpcGUoZGVib3VuY2VUaW1lKDIwMCkpLnN1YnNjcmliZSgkZXZlbnQgPT4ge1xyXG4gICAgICBpZiAodGhpcy5sb2FkaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuYWN0aW9uLmVtaXQoJGV2ZW50KTtcclxuICAgIH0pKTtcclxuICAgIHRoaXMuI2luaXRpYWxpemVkID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy4jc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICAjb25DaGFuZ2VzID0gKCkgPT4ge1xyXG4gICAgdGhpcy5pc0Rpc2FibGVkID0gdGhpcy4jZGlzYWJsZWQ7XHJcbiAgICB0aGlzLnJlZi5kZXRlY3RDaGFuZ2VzKCk7XHJcbiAgfVxyXG5cclxuICBvbkNsaWNrID0gKCRldmVudDogYW55KSA9PiB7XHJcbiAgICBpZiAodGhpcy5sb2FkaW5nKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuYWN0aW9uLmVtaXQoJGV2ZW50KTtcclxuICB9XHJcbn1cclxuIl19
|