mis-crystal-design-system 18.1.0-signal-test → 18.1.0-signal
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/async-search-dropdown/async-dropdown.component.d.ts +1 -1
- package/button/button.directive.scss +15 -13
- package/drawer/drawer.scss +1 -1
- package/dynamic-theme/branding.types.d.ts +84 -0
- package/dynamic-theme/dynamic-theme.module.d.ts +9 -0
- package/dynamic-theme/dynamic-theme.service.d.ts +89 -0
- package/dynamic-theme/index.d.ts +1 -0
- package/dynamic-theme/public_api.d.ts +3 -0
- package/esm2022/action-list/action-list.component.mjs +2 -2
- package/esm2022/async-search-dropdown/async-dropdown.component.mjs +8 -8
- package/esm2022/button/button.component.mjs +2 -2
- package/esm2022/checkbox/checkbox.component.mjs +2 -2
- package/esm2022/chip/chip.component.mjs +2 -2
- package/esm2022/datepicker_v2/tz-dp-container/tz-dp-container.component.mjs +2 -2
- package/esm2022/daterangepicker_v2/tz-drp-container/tz-drp-container.component.mjs +2 -2
- package/esm2022/dropdown/dropdown.component.mjs +2 -2
- package/esm2022/dynamic-form/dynamic-form.component.mjs +2 -2
- package/esm2022/dynamic-theme/branding.types.mjs +93 -0
- package/esm2022/dynamic-theme/dynamic-theme.module.mjs +25 -0
- package/esm2022/dynamic-theme/dynamic-theme.service.mjs +193 -0
- package/esm2022/dynamic-theme/index.mjs +2 -0
- package/esm2022/dynamic-theme/mis-crystal-design-system-dynamic-theme.mjs +5 -0
- package/esm2022/dynamic-theme/public_api.mjs +4 -0
- package/esm2022/fab/fab.component.mjs +3 -3
- package/esm2022/filter/filter-panel/filter-panel.component.mjs +3 -3
- package/esm2022/input/mis-input.component.mjs +2 -2
- package/esm2022/input-stepper/input-stepper/input-stepper.component.mjs +5 -5
- package/esm2022/loader/loader.component.mjs +2 -2
- package/esm2022/mobile-filter/mobile-filter.component.mjs +2 -2
- package/esm2022/multi-select-dropdown/multi-select-dropdown.component.mjs +2 -2
- package/esm2022/nested-multi-select-dropdown/nested-multi-select-dropdown.component.mjs +2 -2
- package/esm2022/phone-input/phone-input.component.mjs +2 -2
- package/esm2022/public-api.mjs +1 -1
- package/esm2022/radio-button/radio-button.component.mjs +2 -2
- package/esm2022/ske-loader/ske-loader.component.mjs +2 -2
- package/esm2022/slider/slider.component.mjs +2 -2
- package/esm2022/snackbar/snackbar/snackbar.component.mjs +2 -2
- package/esm2022/specificdatepicker/tz-sdp-container/tz-sdp-container.component.mjs +2 -2
- package/esm2022/star-rating/star-rating.component.mjs +2 -2
- package/esm2022/switch/switch.component.mjs +2 -2
- package/esm2022/table/actions-cell/actions-cell.component.mjs +2 -2
- package/esm2022/table/filter/filter.component.mjs +2 -2
- package/esm2022/table/sub-table/sub-table.component.mjs +2 -2
- package/esm2022/table/table.component.mjs +2 -2
- package/esm2022/timepicker/timepicker.component.mjs +2 -2
- package/esm2022/toast/toast.component.mjs +3 -3
- package/esm2022/tooltip/tooltip-container/tooltip.component.mjs +2 -2
- package/fesm2022/mis-crystal-design-system-action-list.mjs +2 -2
- package/fesm2022/mis-crystal-design-system-action-list.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-async-search-dropdown.mjs +7 -7
- package/fesm2022/mis-crystal-design-system-async-search-dropdown.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-button.mjs +2 -2
- package/fesm2022/mis-crystal-design-system-button.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-checkbox.mjs +2 -2
- package/fesm2022/mis-crystal-design-system-checkbox.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-chip.mjs +2 -2
- package/fesm2022/mis-crystal-design-system-chip.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-datepicker_v2.mjs +2 -2
- package/fesm2022/mis-crystal-design-system-datepicker_v2.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-daterangepicker_v2.mjs +2 -2
- package/fesm2022/mis-crystal-design-system-daterangepicker_v2.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-dropdown.mjs +2 -2
- package/fesm2022/mis-crystal-design-system-dropdown.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-dynamic-form.mjs +2 -2
- package/fesm2022/mis-crystal-design-system-dynamic-form.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-dynamic-theme.mjs +313 -0
- package/fesm2022/mis-crystal-design-system-dynamic-theme.mjs.map +1 -0
- package/fesm2022/mis-crystal-design-system-fab.mjs +2 -2
- package/fesm2022/mis-crystal-design-system-fab.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-filter.mjs +2 -2
- package/fesm2022/mis-crystal-design-system-filter.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-input-stepper.mjs +4 -4
- package/fesm2022/mis-crystal-design-system-input-stepper.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-input.mjs +2 -2
- package/fesm2022/mis-crystal-design-system-input.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-loader.mjs +2 -2
- package/fesm2022/mis-crystal-design-system-loader.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-mobile-filter.mjs +2 -2
- package/fesm2022/mis-crystal-design-system-mobile-filter.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-multi-select-dropdown.mjs +2 -2
- package/fesm2022/mis-crystal-design-system-multi-select-dropdown.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-nested-multi-select-dropdown.mjs +2 -2
- package/fesm2022/mis-crystal-design-system-nested-multi-select-dropdown.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-phone-input.mjs +2 -2
- package/fesm2022/mis-crystal-design-system-phone-input.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-radio-button.mjs +2 -2
- package/fesm2022/mis-crystal-design-system-radio-button.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-ske-loader.mjs +2 -2
- package/fesm2022/mis-crystal-design-system-ske-loader.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-slider.mjs +2 -2
- package/fesm2022/mis-crystal-design-system-slider.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-snackbar.mjs +2 -2
- package/fesm2022/mis-crystal-design-system-snackbar.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-specificdatepicker.mjs +2 -2
- package/fesm2022/mis-crystal-design-system-specificdatepicker.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-star-rating.mjs +2 -2
- package/fesm2022/mis-crystal-design-system-star-rating.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-switch.mjs +2 -2
- package/fesm2022/mis-crystal-design-system-switch.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-table.mjs +8 -8
- package/fesm2022/mis-crystal-design-system-table.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-timepicker.mjs +2 -2
- package/fesm2022/mis-crystal-design-system-timepicker.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-toast.mjs +2 -2
- package/fesm2022/mis-crystal-design-system-toast.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system-tooltip.mjs +2 -2
- package/fesm2022/mis-crystal-design-system-tooltip.mjs.map +1 -1
- package/fesm2022/mis-crystal-design-system.mjs.map +1 -1
- package/input/mis-input.component.scss +18 -18
- package/modal/modal.scss +1 -1
- package/package.json +19 -13
- package/styles/mis-color-constants.scss +204 -0
- package/styles/mis-icons.scss +56 -56
- package/styles/mis-old-icon-styles.scss +21 -21
|
@@ -1052,11 +1052,11 @@ export class DynamicFormComponent {
|
|
|
1052
1052
|
i0.ɵɵproperty("formGroup", ctx.dynamicForm());
|
|
1053
1053
|
i0.ɵɵadvance(2);
|
|
1054
1054
|
i0.ɵɵproperty("ngForOf", ctx.getDynamicFieldsControls().controls);
|
|
1055
|
-
} }, dependencies: [i1.NgClass, i1.NgForOf, i1.NgIf, i1.NgTemplateOutlet, i1.NgStyle, i2.ɵNgNoValidate, i2.DefaultValueAccessor, i2.NgControlStatus, i2.NgControlStatusGroup, i2.FormControlDirective, i2.FormGroupDirective, i2.FormGroupName, i2.FormArrayName, i3.DropdownComponent, i4.SwitchComponent, i5.MultiSelectDropdownComponent, i6.TzDatepickerDirective, i1.KeyValuePipe], styles: ["p[_ngcontent-%COMP%]{margin:0;cursor:default} .main-container{margin:0;max-width:100%}.sub-dynamic-form[_ngcontent-%COMP%]{padding-left:24px;border-bottom:1px solid var(--
|
|
1055
|
+
} }, dependencies: [i1.NgClass, i1.NgForOf, i1.NgIf, i1.NgTemplateOutlet, i1.NgStyle, i2.ɵNgNoValidate, i2.DefaultValueAccessor, i2.NgControlStatus, i2.NgControlStatusGroup, i2.FormControlDirective, i2.FormGroupDirective, i2.FormGroupName, i2.FormArrayName, i3.DropdownComponent, i4.SwitchComponent, i5.MultiSelectDropdownComponent, i6.TzDatepickerDirective, i1.KeyValuePipe], styles: ["[_ngcontent-%COMP%]:root{--pmry-200: #99BAF7;--pmry-100: #CBDDFB;--pmry-500: #0937B2;--pmry-400: #3C68D0;--pmry-600: #062A99;--pmry-700: #041F80;--pmry-300: #638FE7;--pmry-800: #021567;--pmry-900: #010F55;--sec-d-purple: #40447F;--sec-maroon: #6B034E;--sec-mud-red: #B23600;--sec-orange: #ED711C;--sec-purple: #815FD5;--sec-teal: #10ADAE;--sec-yellow: #D4900C;--sec-green: #547F40;--sec-bright-green: #27D22E;--sec-dark-teal: #035F6B;--sec-chocolate: #7C2F33;--sec-rube-pink: #C13D6D;--sec-cerulean: #0087B2;--sem-error: #B00020;--sem-info: #0091FF;--sem-warning: #FF9D00;--sem-success: #38AF49;--grey-bg-1: #FAFAFA;--grey-bg: #F5F5F5;--grey-seperators: #E0E0E0;--grey-disabled: #C8CDD3;--grey-hover: #F5F7FC;--grey-pressed: #E6EBF7;--grey-row: #F5F7FC;--dec-light-yellow: #F4E7C3;--dec-light-purple: #DACFF9;--dec-light-green: #E4F5E9;--dec-light-green2: #F1FFF3;--dec-light-pink: #FAE1EA;--dec-: #F4CBC1;--dec-lt-orange: #FAEFED;--dec-light-blue: #CFECF9;--dec-row-selection: #F1FDF8;--dec-row-selection2: #F2FBFF;--dec-row-lines: #D3E1E9;--text-white: #FFFFFF;--text-muted: #6A737D;--text-black: #181F33;--MR-solid-blue2:#C8D5F6;--MR-solid-purple:#C9C3FB;--MR-solid-orange:#EEAC9F;--MR-solid-green:#ACDADA;--MR-solid-brown:#E8C8AF;--MR-solid-yellow:#FFEFC7;--MR-solid-blue:#BBE6FF;--MR-solid-pink:#FFC6F2;--tr-hover:#F0F3FA;--tr-pressed:#DAE1F3;--brand-primary: #0937B2;--brand-primary-light: #3C68D0;--brand-primary-dark: #062A99;--brand-primary-darker: #041F80;--brand-primary-lighter: #638FE7;--brand-primary-lightest: #CBDDFB;--brand-primary-hover: #F0F3FA;--brand-primary-active: #DAE1F3;--brand-secondary: #ED711C;--brand-secondary-light: #F09E65;--brand-secondary-dark: #B23600;--brand-secondary-lighter: #FFC6F2;--brand-accent: #10ADAE;--brand-accent-light: #16CBBC;--brand-accent-dark: #035F6B;--brand-accent-lighter: #ACDADA;--brand-success: #38AF49;--brand-success-light: #4CAF50;--brand-success-dark: #216531;--brand-success-lighter: #E4F5E9;--brand-success-lightest: #F1FFF3;--brand-error: #B00020;--brand-error-light: #F04E4E;--brand-error-dark: #A60060;--brand-error-lighter: #FAE1EA;--brand-error-lightest: #FDF2F2;--brand-warning: #FF9D00;--brand-warning-light: #D4900C;--brand-warning-dark: #624000;--brand-warning-lighter: #F4E7C3;--brand-warning-lightest: #FAEFED;--brand-info: #0091FF;--brand-info-light: #35A1FF;--brand-info-dark: #0087B2;--brand-info-lighter: #CFECF9;--text-primary: #181F33;--text-secondary: #6A737D;--text-tertiary: #929DAB;--text-disabled: #929DAB;--text-primary-87: rgba(24, 31, 51, .87);--text-primary-60: rgba(24, 31, 51, .6);--text-primary-38: rgba(24, 31, 51, .38);--text-primary-12: rgba(24, 31, 51, .12);--bg-primary: #FFFFFF;--bg-secondary: #FAFAFA;--bg-tertiary: #F5F5F5;--bg-overlay: rgba(0, 0, 0, .32);--bg-overlay-light: rgba(0, 0, 0, .12);--bg-overlay-lighter: rgba(0, 0, 0, .08);--bg-overlay-lightest: rgba(0, 0, 0, .04);--border-primary: #E0E0E0;--border-secondary: #D6DCE2;--border-tertiary: #C8CDD3;--border-light: #F1F4F8;--border-primary-12: rgba(0, 0, 0, .12);--border-primary-08: rgba(0, 0, 0, .08);--border-primary-06: rgba(0, 0, 0, .06);--shadow-primary: rgba(0, 0, 0, .12);--shadow-secondary: rgba(0, 0, 0, .08);--shadow-tertiary: rgba(0, 0, 0, .04);--shadow-light: rgba(0, 0, 0, .06);--status-available: #929DAB;--status-unavailable: #CCD3DA;--status-hotseat: #857BFF;--status-multiteam: #10ADAE;--status-selected: #10ADAE;--status-upcoming: #D4900C;--status-room: #38AF49;--status-room-booked: #B23600;--status-room-unavailable: #181F33;--team-color-1: #F8C52E;--team-color-2: #FA8E20;--team-color-3: #987CDD;--team-color-4: #16CBBC;--team-color-5: #E65010;--team-color-6: #A60060;--team-color-7: #ED323B;--team-color-8: #35A1FF;--team-color-9: #80D348}p[_ngcontent-%COMP%]{margin:0;cursor:default} .main-container{margin:0;max-width:100%}.sub-dynamic-form[_ngcontent-%COMP%]{padding-left:24px;border-bottom:1px solid var(--border-primary, #E0E0E0)}.dynamic-field[_ngcontent-%COMP%] .container{height:32px!important}.single-line-field-container[_ngcontent-%COMP%]{display:flex;justify-content:space-between;align-items:center;padding:28px 16px;border-bottom:1px solid var(--border-primary, #E0E0E0)}.multi-line-field-container[_ngcontent-%COMP%]{display:flex;justify-content:flex-start;align-items:flex-start;padding:28px 16px;flex-wrap:wrap;border-bottom:1px solid var(--border-primary, #E0E0E0)}.field-title-sm[_ngcontent-%COMP%]{margin-bottom:8px;cursor:default}.input-field[_ngcontent-%COMP%]{width:100%;background-color:var(--bg-secondary, #FAFAFA);border:1px solid var(--border-primary, #E0E0E0);border-radius:6px}.ip-text[_ngcontent-%COMP%]{height:44px;padding:8px 12px}.ip-textarea[_ngcontent-%COMP%]{max-height:94px;padding:8px}input[_ngcontent-%COMP%]:focus{outline:none}input[_ngcontent-%COMP%]::placeholder{color:var(--border-primary, #E0E0E0)}textarea[_ngcontent-%COMP%]:focus{outline:none}.date-picker-container[_ngcontent-%COMP%]{position:relative;width:140px}.date-picker-container[_ngcontent-%COMP%] .date-picker[_ngcontent-%COMP%]{cursor:pointer;height:32px;width:100%;font-size:14px;border-radius:6px;padding:0 12px;border:1px solid var(--border-primary, #E0E0E0);inset:10px auto auto 80px;background-color:var(--bg-primary, #FFFFFF)}.date-picker-container[_ngcontent-%COMP%] .date-picker[_ngcontent-%COMP%]:hover{background-color:var(--brand-primary-hover, #F0F3FA)}.date-picker-container[_ngcontent-%COMP%] .date-picker-icon[_ngcontent-%COMP%]{position:absolute;top:50%;right:12px;transform:translateY(-50%);cursor:pointer}form[_ngcontent-%COMP%] .dynamic-field[_ngcontent-%COMP%]:last-child{border-bottom:none!important}#checkboxes-container[_ngcontent-%COMP%]{display:flex;justify-content:flex-start;align-items:center;flex-wrap:wrap}.radio-checkbox-common[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center;cursor:pointer;margin-right:8px;margin-bottom:8px;background-color:var(--bg-primary, #FFFFFF);padding:12px 16px;border:1px solid var(--text-secondary, #6A737D);border-radius:8px}.radio-checkbox-common[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:var(--text-secondary, #6A737D);cursor:pointer}.radio-checkbox-common[_ngcontent-%COMP%] img[_ngcontent-%COMP%]{margin-right:8px}.checkbox-active[_ngcontent-%COMP%]{background-color:var(--brand-primary, #0937B2)}.checkbox-active[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:var(--bg-primary, #FFFFFF)}#error-messages-container[_ngcontent-%COMP%]{margin-top:4px;width:100%;display:flex;justify-content:flex-start;align-items:center;flex-wrap:wrap}#error-messages-container[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{color:var(--brand-error, #B00020)}.removeable-container[_ngcontent-%COMP%]{display:flex;justify-content:center;align-items:center}.removeable-container[_ngcontent-%COMP%] .remove-icon[_ngcontent-%COMP%]{cursor:pointer;margin-left:8px;max-width:24px}span[_ngcontent-%COMP%]{color:var(--brand-error, #B00020)}"] }); }
|
|
1056
1056
|
}
|
|
1057
1057
|
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DynamicFormComponent, [{
|
|
1058
1058
|
type: Component,
|
|
1059
|
-
args: [{ selector: "mis-dynamic-form", template: "<form [formGroup]=\"dynamicForm()\">\n <ng-container formArrayName=\"dynamicFields\">\n <ng-container [formGroupName]=\"i\" *ngFor=\"let fieldControl of getDynamicFieldsControls().controls; let i = index\">\n <ng-container\n [ngTemplateOutlet]=\"dynamicField\"\n [ngTemplateOutletContext]=\"{\n $implicit: formFieldsArray?.[i],\n formGroup: fieldControl,\n control: fieldControl.controls.value\n }\"\n >\n </ng-container>\n <div class=\"sub-dynamic-form\" *ngIf=\"fieldControl?.value && (!!formFieldsArray?.[i]?.subFields && formFieldsArray?.[i]?.subFields?.length > 0 && matchParentConfig(formFieldsArray?.[i]?.subFields, fieldControl?.controls?.value?.value?.value))\">\n <ng-container *ngFor=\"let subFieldControl of fieldControl.controls.subFields.controls; let j = index\">\n <ng-container\n [ngTemplateOutlet]=\"dynamicField\"\n [ngTemplateOutletContext]=\"{\n $implicit: findSelectedSubFieldConfig(formFieldsArray?.[i]?.subFields, fieldControl.controls.value.value.value,j),\n control: subFieldControl\n }\">\n </ng-container>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n</form>\n\n\n<ng-template #dynamicField let-field let-control=\"control\" let-formgroup=\"formGroup\">\n\n <!-- fieldType: 'input' fieldInputType: 'text' | 'number' -->\n <ng-container *ngIf=\"field.fieldType === 'input' && (field.fieldInputType === 'text' || field.fieldInputType === 'number')\">\n <ng-container *ngIf=\"customInputTextNumber; else defaultInputTextNumber\">\n <ng-template\n [ngTemplateOutlet]=\"customInputTextNumber\"\n [ngTemplateOutletContext]=\"{ field: field, control: control, formgroup: formgroup }\"\n ></ng-template>\n </ng-container>\n <ng-template #defaultInputTextNumber>\n <div class=\"dynamic-field multi-line-field-container\"\n [ngStyle]=\"{'border-bottom': (formgroup?.controls?.subFields?.controls?.length && removeSepratorForSubFields) ? 'none':''}\">\n <p class=\"h7 field-title-sm\">\n {{ field?.title }} <span *ngIf=\"field.validators && field.validators.length > 0\"> *</span>\n </p>\n <div style=\"flex-basis: 100%\"></div>\n <input class=\"input-field ip-text\" [type]=\"field.fieldInputType\" [formControl]=\"control\"\n (ngModelChange)=\"updateSubDynamicFields(field, formgroup, $event)\" \n [ngStyle]=\"{'border': control.touched && control.errors ? '1px solid #B00020': ''}\"\n [placeholder]=\"field.placeholderText ? field.placeholderText : 'Input Text'\" \n [min]=\"field.fieldInputType === 'number' ? 0 : '' \"/>\n <ng-container *ngIf=\"control.touched && control.errors\"\n [ngTemplateOutlet]=\"dynamicFieldErrors\" \n [ngTemplateOutletContext]=\"{ $implicit: control.errors }\"\n >\n </ng-container>\n </div>\n </ng-template>\n </ng-container>\n \n <!-- fieldType: 'input' fieldInputType: 'textarea' -->\n <ng-container *ngIf=\"field.fieldType === 'input' && field.fieldInputType === 'textarea'\">\n <ng-container *ngIf=\"customInputTextarea; else defaultInputTextarea\">\n <ng-template\n [ngTemplateOutlet]=\"customInputTextarea\"\n [ngTemplateOutletContext]=\"{ field: field, control: control, formgroup: formgroup }\"\n ></ng-template>\n </ng-container>\n <ng-template #defaultInputTextarea>\n <div class=\"dynamic-field multi-line-field-container\"\n [ngStyle]=\"{'border-bottom': (formgroup?.controls?.subFields?.controls?.length && removeSepratorForSubFields) ? 'none':''}\">\n <p class=\"h7 field-title-sm\">\n {{ field.title }}<span *ngIf=\"field.validators && field.validators.length > 0\"> *</span>\n </p>\n <div style=\"flex-basis: 100%\"></div>\n <textarea class=\"input-field ip-textarea\" type=\"text\"\n [ngStyle]=\"{'border': control.touched && control.errors ? '1px solid #B00020': ''}\"\n [placeholder]=\"field.placeholderText ? field.placeholderText : 'Input Text'\" [formControl]=\"control\" (ngModelChange)=\"updateSubDynamicFields(field, formgroup, $event)\"></textarea>\n <ng-container *ngIf=\"control.touched && control.errors\" [ngTemplateOutlet]=\"dynamicFieldErrors\"\n [ngTemplateOutletContext]=\"{ $implicit: control.errors }\">\n </ng-container>\n </div>\n </ng-template>\n </ng-container>\n \n <!-- fieldType: 'input' fieldInputType: 'date' -->\n <ng-container *ngIf=\"field.fieldType === 'input' && field.fieldInputType === 'date'\">\n <ng-container *ngIf=\"customInputDate; else defaultInputDate\">\n <ng-template\n [ngTemplateOutlet]=\"customInputDate\"\n [ngTemplateOutletContext]=\"{ field: field, control: control, formgroup: formgroup }\"\n ></ng-template>\n </ng-container>\n <ng-template #defaultInputDate>\n <div class=\"dynamic-field single-line-field-container\"\n [ngStyle]=\"{'border-bottom': (formgroup?.controls?.subFields?.controls?.length && removeSepratorForSubFields) ? 'none':''}\"\n *ngIf=\"field.fieldType === 'input' && field.fieldInputType === 'date'\">\n <p class=\"h6\">\n {{ field.title }} <span *ngIf=\"field.validators && field.validators.length > 0\"> *</span>\n </p>\n <div class=\"date-picker-container\">\n <input class=\"date-picker\" readonly misTzDp [dpConfig]=\"field.fieldConfig\"\n (dateChange)=\"control.setValue($event)\" [selectedDate]=\"control.value\" [offsetY]=\"0\"\n [value]=\"control.value\" #dp />\n <img alt=\"data-picker\" *ngIf=\"calendarIconUrl()\" class=\"date-picker-icon\" [src]=\"calendarIconUrl()\"\n (click)=\"dp.click()\" />\n </div>\n <ng-container *ngIf=\"control.touched && control.errors\" [ngTemplateOutlet]=\"dynamicFieldErrors\"\n [ngTemplateOutletContext]=\"{ $implicit: control.errors }\">\n </ng-container>\n </div>\n </ng-template>\n </ng-container>\n\n <!-- fieldType: 'boolean' fieldInputType: 'toggle' -->\n <ng-container *ngIf=\"field.fieldType === 'boolean' && field.fieldInputType === 'toggle'\">\n <ng-container *ngIf=\"customBooleanToggle; else defaultBooleanToggle\">\n <ng-template\n [ngTemplateOutlet]=\"customBooleanToggle\"\n [ngTemplateOutletContext]=\"{ field: field, control: control, formgroup: formgroup }\"\n ></ng-template>\n </ng-container>\n <ng-template #defaultBooleanToggle>\n <div class=\"dynamic-field single-line-field-container\"\n [ngStyle]=\"{'border-bottom': (formgroup?.controls?.subFields?.controls?.length && removeSepratorForSubFields) ? 'none':''}\">\n <p class=\"h6\">\n {{ field.title }}<span *ngIf=\"field.validators && field.validators.length > 0\"> *</span>\n </p>\n <mis-switch [control]=\"control\" (valueChanged)=\"updateSubDynamicFields(field, formgroup, $event)\"></mis-switch>\n <ng-container *ngIf=\"control.touched && control.errors\" [ngTemplateOutlet]=\"dynamicFieldErrors\"\n [ngTemplateOutletContext]=\"{ $implicit: control.errors }\">\n </ng-container>\n </div> \n </ng-template>\n </ng-container>\n\n <!-- fieldType: 'singleSelect' fieldInputType: 'dropdown' -->\n <ng-container *ngIf=\"field.fieldType === 'singleSelect' && field.fieldInputType === 'dropdown'\">\n <ng-container *ngIf=\"customSingleSelectDropdown; else defaultSingleSelectDropdown\">\n <ng-template\n [ngTemplateOutlet]=\"customSingleSelectDropdown\"\n [ngTemplateOutletContext]=\"{ field: field, control: control, formgroup: formgroup }\"\n ></ng-template>\n </ng-container>\n <ng-template #defaultSingleSelectDropdown>\n <div class=\"dynamic-field single-line-field-container\"\n [ngStyle]=\"{'border-bottom': (formgroup?.controls?.subFields?.controls?.length && removeSepratorForSubFields) ? 'none':''}\">\n <p class=\"h6\">\n {{ field.title }}<span *ngIf=\"field.validators && field.validators.length > 0\"> *</span>\n </p>\n <div [ngClass]=\"{'removeable-container' : field?.isRemoveable}\">\n <mis-dropdown [searchEnabled]=\"false\" [width]=\"'140px'\" [data]=\"field.itemsList\" [selectedItem]=\"control.value\"\n (onChange)=\"updateSelectedValueForSingleSelect(field, control, formgroup, $event);\">\n </mis-dropdown>\n <img *ngIf=\"field.isRemoveable && removeIconUrl()\" class=\"remove-icon\" [src]=\"removeIconUrl()\" (click)=\"fieldRemoved.emit(field)\">\n </div>\n <ng-container *ngIf=\"control.touched && control.errors\" [ngTemplateOutlet]=\"dynamicFieldErrors\"\n [ngTemplateOutletContext]=\"{ $implicit: control.errors }\">\n </ng-container>\n </div>\n </ng-template>\n </ng-container >\n \n\n <!-- fieldType: 'singleSelect' fieldInputType: 'radio' -->\n <ng-container *ngIf=\"field.fieldType === 'singleSelect' && field.fieldInputType === 'radio'\">\n <ng-container *ngIf=\"customSingleSelectRadio; else defaultSingleSelectRadio\">\n <ng-template\n [ngTemplateOutlet]=\"customSingleSelectRadio\"\n [ngTemplateOutletContext]=\"{ field: field, control: control, formgroup: formgroup }\"\n ></ng-template>\n </ng-container>\n <ng-template #defaultSingleSelectRadio>\n <div class=\"dynamic-field multi-line-field-container\"\n [ngStyle]=\"{'border-bottom': (formgroup?.controls?.subFields?.controls?.length && removeSepratorForSubFields) ? 'none':''}\">\n <p class=\"h7 field-title-sm\">\n {{ field.title }}<span *ngIf=\"field.validators && field.validators.length > 0\"> *</span>\n </p>\n <div style=\"flex-basis: 100%\"></div>\n <div id=\"checkboxes-container\">\n <div class=\"radio-checkbox-common\" *ngFor=\"let item of field.itemsList\"\n [ngClass]=\"{ 'checkbox-active': item.label === control.value?.label }\"\n (click)=\"updateSelectedValueForSingleSelect(field, control, formgroup, item);\">\n <img *ngIf=\"(item.label === control.value?.label) && activeBtnIconUrl()\" [src]=\"activeBtnIconUrl()\" alt=\"\" />\n <p class=\"h6\">{{ item.label }}</p>\n </div>\n </div>\n <ng-container *ngIf=\"control.touched && control.errors\" [ngTemplateOutlet]=\"dynamicFieldErrors\"\n [ngTemplateOutletContext]=\"{ $implicit: control.errors }\">\n </ng-container>\n </div>\n </ng-template>\n </ng-container>\n \n\n <!-- fieldType: 'multiSelect' fieldInputType: 'checkbox' -->\n <ng-container *ngIf=\"field.fieldType === 'multiSelect' && field.fieldInputType === 'checkbox'\">\n <ng-container *ngIf=\"customMultiSelectCheckbox; else defaultMultiSelectCheckbox\">\n <ng-template\n [ngTemplateOutlet]=\"customMultiSelectCheckbox\"\n [ngTemplateOutletContext]=\"{ field: field, control: control, formgroup: formgroup }\"\n ></ng-template>\n </ng-container>\n <ng-template #defaultMultiSelectCheckbox>\n <div class=\"dynamic-field multi-line-field-container\"\n [ngStyle]=\"{'border-bottom': (formgroup?.controls?.subFields?.controls?.length && removeSepratorForSubFields) ? 'none':''}\">\n <p class=\"h7 field-title-sm\">\n {{ field.title }}<span *ngIf=\"field.validators && field.validators.length > 0\"> *</span>\n </p>\n <div style=\"flex-basis: 100%\"></div>\n <div id=\"checkboxes-container\">\n <div class=\"radio-checkbox-common\" *ngFor=\"let item of field.itemsList\"\n [ngClass]=\"{ 'checkbox-active': isCheckBoxSelected(item.label, control.value) }\"\n (click)=\"updateSelectedValueForMultiSelect(field, control, formgroup, [item])\">\n <img *ngIf=\"isCheckBoxSelected(item.label, control.value) && activeBtnIconUrl()\" [src]=\"activeBtnIconUrl()\"\n alt=\"\" />\n <p class=\"h6\">{{ item.label }}</p>\n </div>\n </div>\n <ng-container *ngIf=\"control.touched && control.errors\" [ngTemplateOutlet]=\"dynamicFieldErrors\"\n [ngTemplateOutletContext]=\"{ $implicit: control.errors }\">\n </ng-container>\n </div>\n </ng-template>\n </ng-container>\n\n\n <!-- fieldType: 'multiSelect' fieldInputType: 'dropdown' -->\n <ng-container *ngIf=\"field.fieldType === 'multiSelect' && field.fieldInputType === 'dropdown'\">\n <ng-container *ngIf=\"customMultiSelectDropdown; else defaultMultiSelectDropdown\">\n <ng-template\n [ngTemplateOutlet]=\"customMultiSelectDropdown\"\n [ngTemplateOutletContext]=\"{ field: field, control: control, formgroup: formgroup }\"\n ></ng-template>\n </ng-container>\n <ng-template #defaultMultiSelectDropdown>\n <div class=\"dynamic-field single-line-field-container\"\n [ngStyle]=\"{'border-bottom': (formgroup?.controls?.subFields?.controls?.length && removeSepratorForSubFields) ? 'none':''}\">\n <p class=\"h6\">\n {{ field.title }}<span *ngIf=\"field.validators && field.validators.length > 0\"> *</span>\n </p>\n <mis-multi-select-dropdown [width]=\"'140px'\" [showSelectedCount]=\"true\" [dropdownListWidth]=\"'256px'\"\n [searchEnabled]=\"false\" [hideApplyButton]=\"true\" [data]=\"field.itemsList\"\n [selectedItems]=\"control.value\" (onChange)=\"updateSelectedValueForMultiSelect(field, control, formgroup, $event);\"></mis-multi-select-dropdown>\n <ng-container *ngIf=\"control.touched && control.errors\" [ngTemplateOutlet]=\"dynamicFieldErrors\"\n [ngTemplateOutletContext]=\"{ $implicit: control.errors }\">\n </ng-container>\n </div>\n </ng-template>\n </ng-container>\n\n</ng-template>\n\n<ng-template #dynamicFieldErrors let-errors>\n <div id=\"error-messages-container\">\n <ng-container *ngFor=\"let error of errors | keyvalue\">\n <p class=\"h8\">\n {{\" \u2022 \" + error.value}}\n </p>\n <div [ngStyle]=\"{ 'flex-basis': '100%', 'height': '0' }\"></div>\n </ng-container>\n </div>\n</ng-template>", styles: ["p{margin:0;cursor:default}::ng-deep .main-container{margin:0;max-width:100%}.sub-dynamic-form{padding-left:24px;border-bottom:1px solid var(--grey-seperators)}.dynamic-field ::ng-deep .container{height:32px!important}.single-line-field-container{display:flex;justify-content:space-between;align-items:center;padding:28px 16px;border-bottom:1px solid var(--grey-seperators)}.multi-line-field-container{display:flex;justify-content:flex-start;align-items:flex-start;padding:28px 16px;flex-wrap:wrap;border-bottom:1px solid var(--grey-seperators)}.field-title-sm{margin-bottom:8px;cursor:default}.input-field{width:100%;background-color:var(--grey-bg-1);border:1px solid var(--grey-seperators);border-radius:6px}.ip-text{height:44px;padding:8px 12px}.ip-textarea{max-height:94px;padding:8px}input:focus{outline:none}input::placeholder{color:var(--grey-seperators)}textarea:focus{outline:none}.date-picker-container{position:relative;width:140px}.date-picker-container .date-picker{cursor:pointer;height:32px;width:100%;font-size:14px;border-radius:6px;padding:0 12px;border:1px solid var(--grey-seperators);inset:10px auto auto 80px;background-color:var(--text-white)}.date-picker-container .date-picker:hover{background-color:var(--grey-hover)}.date-picker-container .date-picker-icon{position:absolute;top:50%;right:12px;transform:translateY(-50%);cursor:pointer}form .dynamic-field:last-child{border-bottom:none!important}#checkboxes-container{display:flex;justify-content:flex-start;align-items:center;flex-wrap:wrap}.radio-checkbox-common{display:flex;justify-content:center;align-items:center;cursor:pointer;margin-right:8px;margin-bottom:8px;background-color:var(--text-white);padding:12px 16px;border:1px solid var(--text-muted);border-radius:8px}.radio-checkbox-common p{color:var(--text-muted);cursor:pointer}.radio-checkbox-common img{margin-right:8px}.checkbox-active{background-color:var(--pmry-500)}.checkbox-active p{color:var(--text-white)}#error-messages-container{margin-top:4px;width:100%;display:flex;justify-content:flex-start;align-items:center;flex-wrap:wrap}#error-messages-container p{color:var(--sem-error)}.removeable-container{display:flex;justify-content:center;align-items:center}.removeable-container .remove-icon{cursor:pointer;margin-left:8px;max-width:24px}span{color:var(--sem-error)}\n"] }]
|
|
1059
|
+
args: [{ selector: "mis-dynamic-form", template: "<form [formGroup]=\"dynamicForm()\">\n <ng-container formArrayName=\"dynamicFields\">\n <ng-container [formGroupName]=\"i\" *ngFor=\"let fieldControl of getDynamicFieldsControls().controls; let i = index\">\n <ng-container\n [ngTemplateOutlet]=\"dynamicField\"\n [ngTemplateOutletContext]=\"{\n $implicit: formFieldsArray?.[i],\n formGroup: fieldControl,\n control: fieldControl.controls.value\n }\"\n >\n </ng-container>\n <div class=\"sub-dynamic-form\" *ngIf=\"fieldControl?.value && (!!formFieldsArray?.[i]?.subFields && formFieldsArray?.[i]?.subFields?.length > 0 && matchParentConfig(formFieldsArray?.[i]?.subFields, fieldControl?.controls?.value?.value?.value))\">\n <ng-container *ngFor=\"let subFieldControl of fieldControl.controls.subFields.controls; let j = index\">\n <ng-container\n [ngTemplateOutlet]=\"dynamicField\"\n [ngTemplateOutletContext]=\"{\n $implicit: findSelectedSubFieldConfig(formFieldsArray?.[i]?.subFields, fieldControl.controls.value.value.value,j),\n control: subFieldControl\n }\">\n </ng-container>\n </ng-container>\n </div>\n </ng-container>\n </ng-container>\n</form>\n\n\n<ng-template #dynamicField let-field let-control=\"control\" let-formgroup=\"formGroup\">\n\n <!-- fieldType: 'input' fieldInputType: 'text' | 'number' -->\n <ng-container *ngIf=\"field.fieldType === 'input' && (field.fieldInputType === 'text' || field.fieldInputType === 'number')\">\n <ng-container *ngIf=\"customInputTextNumber; else defaultInputTextNumber\">\n <ng-template\n [ngTemplateOutlet]=\"customInputTextNumber\"\n [ngTemplateOutletContext]=\"{ field: field, control: control, formgroup: formgroup }\"\n ></ng-template>\n </ng-container>\n <ng-template #defaultInputTextNumber>\n <div class=\"dynamic-field multi-line-field-container\"\n [ngStyle]=\"{'border-bottom': (formgroup?.controls?.subFields?.controls?.length && removeSepratorForSubFields) ? 'none':''}\">\n <p class=\"h7 field-title-sm\">\n {{ field?.title }} <span *ngIf=\"field.validators && field.validators.length > 0\"> *</span>\n </p>\n <div style=\"flex-basis: 100%\"></div>\n <input class=\"input-field ip-text\" [type]=\"field.fieldInputType\" [formControl]=\"control\"\n (ngModelChange)=\"updateSubDynamicFields(field, formgroup, $event)\" \n [ngStyle]=\"{'border': control.touched && control.errors ? '1px solid #B00020': ''}\"\n [placeholder]=\"field.placeholderText ? field.placeholderText : 'Input Text'\" \n [min]=\"field.fieldInputType === 'number' ? 0 : '' \"/>\n <ng-container *ngIf=\"control.touched && control.errors\"\n [ngTemplateOutlet]=\"dynamicFieldErrors\" \n [ngTemplateOutletContext]=\"{ $implicit: control.errors }\"\n >\n </ng-container>\n </div>\n </ng-template>\n </ng-container>\n \n <!-- fieldType: 'input' fieldInputType: 'textarea' -->\n <ng-container *ngIf=\"field.fieldType === 'input' && field.fieldInputType === 'textarea'\">\n <ng-container *ngIf=\"customInputTextarea; else defaultInputTextarea\">\n <ng-template\n [ngTemplateOutlet]=\"customInputTextarea\"\n [ngTemplateOutletContext]=\"{ field: field, control: control, formgroup: formgroup }\"\n ></ng-template>\n </ng-container>\n <ng-template #defaultInputTextarea>\n <div class=\"dynamic-field multi-line-field-container\"\n [ngStyle]=\"{'border-bottom': (formgroup?.controls?.subFields?.controls?.length && removeSepratorForSubFields) ? 'none':''}\">\n <p class=\"h7 field-title-sm\">\n {{ field.title }}<span *ngIf=\"field.validators && field.validators.length > 0\"> *</span>\n </p>\n <div style=\"flex-basis: 100%\"></div>\n <textarea class=\"input-field ip-textarea\" type=\"text\"\n [ngStyle]=\"{'border': control.touched && control.errors ? '1px solid #B00020': ''}\"\n [placeholder]=\"field.placeholderText ? field.placeholderText : 'Input Text'\" [formControl]=\"control\" (ngModelChange)=\"updateSubDynamicFields(field, formgroup, $event)\"></textarea>\n <ng-container *ngIf=\"control.touched && control.errors\" [ngTemplateOutlet]=\"dynamicFieldErrors\"\n [ngTemplateOutletContext]=\"{ $implicit: control.errors }\">\n </ng-container>\n </div>\n </ng-template>\n </ng-container>\n \n <!-- fieldType: 'input' fieldInputType: 'date' -->\n <ng-container *ngIf=\"field.fieldType === 'input' && field.fieldInputType === 'date'\">\n <ng-container *ngIf=\"customInputDate; else defaultInputDate\">\n <ng-template\n [ngTemplateOutlet]=\"customInputDate\"\n [ngTemplateOutletContext]=\"{ field: field, control: control, formgroup: formgroup }\"\n ></ng-template>\n </ng-container>\n <ng-template #defaultInputDate>\n <div class=\"dynamic-field single-line-field-container\"\n [ngStyle]=\"{'border-bottom': (formgroup?.controls?.subFields?.controls?.length && removeSepratorForSubFields) ? 'none':''}\"\n *ngIf=\"field.fieldType === 'input' && field.fieldInputType === 'date'\">\n <p class=\"h6\">\n {{ field.title }} <span *ngIf=\"field.validators && field.validators.length > 0\"> *</span>\n </p>\n <div class=\"date-picker-container\">\n <input class=\"date-picker\" readonly misTzDp [dpConfig]=\"field.fieldConfig\"\n (dateChange)=\"control.setValue($event)\" [selectedDate]=\"control.value\" [offsetY]=\"0\"\n [value]=\"control.value\" #dp />\n <img alt=\"data-picker\" *ngIf=\"calendarIconUrl()\" class=\"date-picker-icon\" [src]=\"calendarIconUrl()\"\n (click)=\"dp.click()\" />\n </div>\n <ng-container *ngIf=\"control.touched && control.errors\" [ngTemplateOutlet]=\"dynamicFieldErrors\"\n [ngTemplateOutletContext]=\"{ $implicit: control.errors }\">\n </ng-container>\n </div>\n </ng-template>\n </ng-container>\n\n <!-- fieldType: 'boolean' fieldInputType: 'toggle' -->\n <ng-container *ngIf=\"field.fieldType === 'boolean' && field.fieldInputType === 'toggle'\">\n <ng-container *ngIf=\"customBooleanToggle; else defaultBooleanToggle\">\n <ng-template\n [ngTemplateOutlet]=\"customBooleanToggle\"\n [ngTemplateOutletContext]=\"{ field: field, control: control, formgroup: formgroup }\"\n ></ng-template>\n </ng-container>\n <ng-template #defaultBooleanToggle>\n <div class=\"dynamic-field single-line-field-container\"\n [ngStyle]=\"{'border-bottom': (formgroup?.controls?.subFields?.controls?.length && removeSepratorForSubFields) ? 'none':''}\">\n <p class=\"h6\">\n {{ field.title }}<span *ngIf=\"field.validators && field.validators.length > 0\"> *</span>\n </p>\n <mis-switch [control]=\"control\" (valueChanged)=\"updateSubDynamicFields(field, formgroup, $event)\"></mis-switch>\n <ng-container *ngIf=\"control.touched && control.errors\" [ngTemplateOutlet]=\"dynamicFieldErrors\"\n [ngTemplateOutletContext]=\"{ $implicit: control.errors }\">\n </ng-container>\n </div> \n </ng-template>\n </ng-container>\n\n <!-- fieldType: 'singleSelect' fieldInputType: 'dropdown' -->\n <ng-container *ngIf=\"field.fieldType === 'singleSelect' && field.fieldInputType === 'dropdown'\">\n <ng-container *ngIf=\"customSingleSelectDropdown; else defaultSingleSelectDropdown\">\n <ng-template\n [ngTemplateOutlet]=\"customSingleSelectDropdown\"\n [ngTemplateOutletContext]=\"{ field: field, control: control, formgroup: formgroup }\"\n ></ng-template>\n </ng-container>\n <ng-template #defaultSingleSelectDropdown>\n <div class=\"dynamic-field single-line-field-container\"\n [ngStyle]=\"{'border-bottom': (formgroup?.controls?.subFields?.controls?.length && removeSepratorForSubFields) ? 'none':''}\">\n <p class=\"h6\">\n {{ field.title }}<span *ngIf=\"field.validators && field.validators.length > 0\"> *</span>\n </p>\n <div [ngClass]=\"{'removeable-container' : field?.isRemoveable}\">\n <mis-dropdown [searchEnabled]=\"false\" [width]=\"'140px'\" [data]=\"field.itemsList\" [selectedItem]=\"control.value\"\n (onChange)=\"updateSelectedValueForSingleSelect(field, control, formgroup, $event);\">\n </mis-dropdown>\n <img *ngIf=\"field.isRemoveable && removeIconUrl()\" class=\"remove-icon\" [src]=\"removeIconUrl()\" (click)=\"fieldRemoved.emit(field)\">\n </div>\n <ng-container *ngIf=\"control.touched && control.errors\" [ngTemplateOutlet]=\"dynamicFieldErrors\"\n [ngTemplateOutletContext]=\"{ $implicit: control.errors }\">\n </ng-container>\n </div>\n </ng-template>\n </ng-container >\n \n\n <!-- fieldType: 'singleSelect' fieldInputType: 'radio' -->\n <ng-container *ngIf=\"field.fieldType === 'singleSelect' && field.fieldInputType === 'radio'\">\n <ng-container *ngIf=\"customSingleSelectRadio; else defaultSingleSelectRadio\">\n <ng-template\n [ngTemplateOutlet]=\"customSingleSelectRadio\"\n [ngTemplateOutletContext]=\"{ field: field, control: control, formgroup: formgroup }\"\n ></ng-template>\n </ng-container>\n <ng-template #defaultSingleSelectRadio>\n <div class=\"dynamic-field multi-line-field-container\"\n [ngStyle]=\"{'border-bottom': (formgroup?.controls?.subFields?.controls?.length && removeSepratorForSubFields) ? 'none':''}\">\n <p class=\"h7 field-title-sm\">\n {{ field.title }}<span *ngIf=\"field.validators && field.validators.length > 0\"> *</span>\n </p>\n <div style=\"flex-basis: 100%\"></div>\n <div id=\"checkboxes-container\">\n <div class=\"radio-checkbox-common\" *ngFor=\"let item of field.itemsList\"\n [ngClass]=\"{ 'checkbox-active': item.label === control.value?.label }\"\n (click)=\"updateSelectedValueForSingleSelect(field, control, formgroup, item);\">\n <img *ngIf=\"(item.label === control.value?.label) && activeBtnIconUrl()\" [src]=\"activeBtnIconUrl()\" alt=\"\" />\n <p class=\"h6\">{{ item.label }}</p>\n </div>\n </div>\n <ng-container *ngIf=\"control.touched && control.errors\" [ngTemplateOutlet]=\"dynamicFieldErrors\"\n [ngTemplateOutletContext]=\"{ $implicit: control.errors }\">\n </ng-container>\n </div>\n </ng-template>\n </ng-container>\n \n\n <!-- fieldType: 'multiSelect' fieldInputType: 'checkbox' -->\n <ng-container *ngIf=\"field.fieldType === 'multiSelect' && field.fieldInputType === 'checkbox'\">\n <ng-container *ngIf=\"customMultiSelectCheckbox; else defaultMultiSelectCheckbox\">\n <ng-template\n [ngTemplateOutlet]=\"customMultiSelectCheckbox\"\n [ngTemplateOutletContext]=\"{ field: field, control: control, formgroup: formgroup }\"\n ></ng-template>\n </ng-container>\n <ng-template #defaultMultiSelectCheckbox>\n <div class=\"dynamic-field multi-line-field-container\"\n [ngStyle]=\"{'border-bottom': (formgroup?.controls?.subFields?.controls?.length && removeSepratorForSubFields) ? 'none':''}\">\n <p class=\"h7 field-title-sm\">\n {{ field.title }}<span *ngIf=\"field.validators && field.validators.length > 0\"> *</span>\n </p>\n <div style=\"flex-basis: 100%\"></div>\n <div id=\"checkboxes-container\">\n <div class=\"radio-checkbox-common\" *ngFor=\"let item of field.itemsList\"\n [ngClass]=\"{ 'checkbox-active': isCheckBoxSelected(item.label, control.value) }\"\n (click)=\"updateSelectedValueForMultiSelect(field, control, formgroup, [item])\">\n <img *ngIf=\"isCheckBoxSelected(item.label, control.value) && activeBtnIconUrl()\" [src]=\"activeBtnIconUrl()\"\n alt=\"\" />\n <p class=\"h6\">{{ item.label }}</p>\n </div>\n </div>\n <ng-container *ngIf=\"control.touched && control.errors\" [ngTemplateOutlet]=\"dynamicFieldErrors\"\n [ngTemplateOutletContext]=\"{ $implicit: control.errors }\">\n </ng-container>\n </div>\n </ng-template>\n </ng-container>\n\n\n <!-- fieldType: 'multiSelect' fieldInputType: 'dropdown' -->\n <ng-container *ngIf=\"field.fieldType === 'multiSelect' && field.fieldInputType === 'dropdown'\">\n <ng-container *ngIf=\"customMultiSelectDropdown; else defaultMultiSelectDropdown\">\n <ng-template\n [ngTemplateOutlet]=\"customMultiSelectDropdown\"\n [ngTemplateOutletContext]=\"{ field: field, control: control, formgroup: formgroup }\"\n ></ng-template>\n </ng-container>\n <ng-template #defaultMultiSelectDropdown>\n <div class=\"dynamic-field single-line-field-container\"\n [ngStyle]=\"{'border-bottom': (formgroup?.controls?.subFields?.controls?.length && removeSepratorForSubFields) ? 'none':''}\">\n <p class=\"h6\">\n {{ field.title }}<span *ngIf=\"field.validators && field.validators.length > 0\"> *</span>\n </p>\n <mis-multi-select-dropdown [width]=\"'140px'\" [showSelectedCount]=\"true\" [dropdownListWidth]=\"'256px'\"\n [searchEnabled]=\"false\" [hideApplyButton]=\"true\" [data]=\"field.itemsList\"\n [selectedItems]=\"control.value\" (onChange)=\"updateSelectedValueForMultiSelect(field, control, formgroup, $event);\"></mis-multi-select-dropdown>\n <ng-container *ngIf=\"control.touched && control.errors\" [ngTemplateOutlet]=\"dynamicFieldErrors\"\n [ngTemplateOutletContext]=\"{ $implicit: control.errors }\">\n </ng-container>\n </div>\n </ng-template>\n </ng-container>\n\n</ng-template>\n\n<ng-template #dynamicFieldErrors let-errors>\n <div id=\"error-messages-container\">\n <ng-container *ngFor=\"let error of errors | keyvalue\">\n <p class=\"h8\">\n {{\" \u2022 \" + error.value}}\n </p>\n <div [ngStyle]=\"{ 'flex-basis': '100%', 'height': '0' }\"></div>\n </ng-container>\n </div>\n</ng-template>", styles: [":root{--pmry-200: #99BAF7;--pmry-100: #CBDDFB;--pmry-500: #0937B2;--pmry-400: #3C68D0;--pmry-600: #062A99;--pmry-700: #041F80;--pmry-300: #638FE7;--pmry-800: #021567;--pmry-900: #010F55;--sec-d-purple: #40447F;--sec-maroon: #6B034E;--sec-mud-red: #B23600;--sec-orange: #ED711C;--sec-purple: #815FD5;--sec-teal: #10ADAE;--sec-yellow: #D4900C;--sec-green: #547F40;--sec-bright-green: #27D22E;--sec-dark-teal: #035F6B;--sec-chocolate: #7C2F33;--sec-rube-pink: #C13D6D;--sec-cerulean: #0087B2;--sem-error: #B00020;--sem-info: #0091FF;--sem-warning: #FF9D00;--sem-success: #38AF49;--grey-bg-1: #FAFAFA;--grey-bg: #F5F5F5;--grey-seperators: #E0E0E0;--grey-disabled: #C8CDD3;--grey-hover: #F5F7FC;--grey-pressed: #E6EBF7;--grey-row: #F5F7FC;--dec-light-yellow: #F4E7C3;--dec-light-purple: #DACFF9;--dec-light-green: #E4F5E9;--dec-light-green2: #F1FFF3;--dec-light-pink: #FAE1EA;--dec-: #F4CBC1;--dec-lt-orange: #FAEFED;--dec-light-blue: #CFECF9;--dec-row-selection: #F1FDF8;--dec-row-selection2: #F2FBFF;--dec-row-lines: #D3E1E9;--text-white: #FFFFFF;--text-muted: #6A737D;--text-black: #181F33;--MR-solid-blue2:#C8D5F6;--MR-solid-purple:#C9C3FB;--MR-solid-orange:#EEAC9F;--MR-solid-green:#ACDADA;--MR-solid-brown:#E8C8AF;--MR-solid-yellow:#FFEFC7;--MR-solid-blue:#BBE6FF;--MR-solid-pink:#FFC6F2;--tr-hover:#F0F3FA;--tr-pressed:#DAE1F3;--brand-primary: #0937B2;--brand-primary-light: #3C68D0;--brand-primary-dark: #062A99;--brand-primary-darker: #041F80;--brand-primary-lighter: #638FE7;--brand-primary-lightest: #CBDDFB;--brand-primary-hover: #F0F3FA;--brand-primary-active: #DAE1F3;--brand-secondary: #ED711C;--brand-secondary-light: #F09E65;--brand-secondary-dark: #B23600;--brand-secondary-lighter: #FFC6F2;--brand-accent: #10ADAE;--brand-accent-light: #16CBBC;--brand-accent-dark: #035F6B;--brand-accent-lighter: #ACDADA;--brand-success: #38AF49;--brand-success-light: #4CAF50;--brand-success-dark: #216531;--brand-success-lighter: #E4F5E9;--brand-success-lightest: #F1FFF3;--brand-error: #B00020;--brand-error-light: #F04E4E;--brand-error-dark: #A60060;--brand-error-lighter: #FAE1EA;--brand-error-lightest: #FDF2F2;--brand-warning: #FF9D00;--brand-warning-light: #D4900C;--brand-warning-dark: #624000;--brand-warning-lighter: #F4E7C3;--brand-warning-lightest: #FAEFED;--brand-info: #0091FF;--brand-info-light: #35A1FF;--brand-info-dark: #0087B2;--brand-info-lighter: #CFECF9;--text-primary: #181F33;--text-secondary: #6A737D;--text-tertiary: #929DAB;--text-disabled: #929DAB;--text-primary-87: rgba(24, 31, 51, .87);--text-primary-60: rgba(24, 31, 51, .6);--text-primary-38: rgba(24, 31, 51, .38);--text-primary-12: rgba(24, 31, 51, .12);--bg-primary: #FFFFFF;--bg-secondary: #FAFAFA;--bg-tertiary: #F5F5F5;--bg-overlay: rgba(0, 0, 0, .32);--bg-overlay-light: rgba(0, 0, 0, .12);--bg-overlay-lighter: rgba(0, 0, 0, .08);--bg-overlay-lightest: rgba(0, 0, 0, .04);--border-primary: #E0E0E0;--border-secondary: #D6DCE2;--border-tertiary: #C8CDD3;--border-light: #F1F4F8;--border-primary-12: rgba(0, 0, 0, .12);--border-primary-08: rgba(0, 0, 0, .08);--border-primary-06: rgba(0, 0, 0, .06);--shadow-primary: rgba(0, 0, 0, .12);--shadow-secondary: rgba(0, 0, 0, .08);--shadow-tertiary: rgba(0, 0, 0, .04);--shadow-light: rgba(0, 0, 0, .06);--status-available: #929DAB;--status-unavailable: #CCD3DA;--status-hotseat: #857BFF;--status-multiteam: #10ADAE;--status-selected: #10ADAE;--status-upcoming: #D4900C;--status-room: #38AF49;--status-room-booked: #B23600;--status-room-unavailable: #181F33;--team-color-1: #F8C52E;--team-color-2: #FA8E20;--team-color-3: #987CDD;--team-color-4: #16CBBC;--team-color-5: #E65010;--team-color-6: #A60060;--team-color-7: #ED323B;--team-color-8: #35A1FF;--team-color-9: #80D348}p{margin:0;cursor:default}::ng-deep .main-container{margin:0;max-width:100%}.sub-dynamic-form{padding-left:24px;border-bottom:1px solid var(--border-primary, #E0E0E0)}.dynamic-field ::ng-deep .container{height:32px!important}.single-line-field-container{display:flex;justify-content:space-between;align-items:center;padding:28px 16px;border-bottom:1px solid var(--border-primary, #E0E0E0)}.multi-line-field-container{display:flex;justify-content:flex-start;align-items:flex-start;padding:28px 16px;flex-wrap:wrap;border-bottom:1px solid var(--border-primary, #E0E0E0)}.field-title-sm{margin-bottom:8px;cursor:default}.input-field{width:100%;background-color:var(--bg-secondary, #FAFAFA);border:1px solid var(--border-primary, #E0E0E0);border-radius:6px}.ip-text{height:44px;padding:8px 12px}.ip-textarea{max-height:94px;padding:8px}input:focus{outline:none}input::placeholder{color:var(--border-primary, #E0E0E0)}textarea:focus{outline:none}.date-picker-container{position:relative;width:140px}.date-picker-container .date-picker{cursor:pointer;height:32px;width:100%;font-size:14px;border-radius:6px;padding:0 12px;border:1px solid var(--border-primary, #E0E0E0);inset:10px auto auto 80px;background-color:var(--bg-primary, #FFFFFF)}.date-picker-container .date-picker:hover{background-color:var(--brand-primary-hover, #F0F3FA)}.date-picker-container .date-picker-icon{position:absolute;top:50%;right:12px;transform:translateY(-50%);cursor:pointer}form .dynamic-field:last-child{border-bottom:none!important}#checkboxes-container{display:flex;justify-content:flex-start;align-items:center;flex-wrap:wrap}.radio-checkbox-common{display:flex;justify-content:center;align-items:center;cursor:pointer;margin-right:8px;margin-bottom:8px;background-color:var(--bg-primary, #FFFFFF);padding:12px 16px;border:1px solid var(--text-secondary, #6A737D);border-radius:8px}.radio-checkbox-common p{color:var(--text-secondary, #6A737D);cursor:pointer}.radio-checkbox-common img{margin-right:8px}.checkbox-active{background-color:var(--brand-primary, #0937B2)}.checkbox-active p{color:var(--bg-primary, #FFFFFF)}#error-messages-container{margin-top:4px;width:100%;display:flex;justify-content:flex-start;align-items:center;flex-wrap:wrap}#error-messages-container p{color:var(--brand-error, #B00020)}.removeable-container{display:flex;justify-content:center;align-items:center}.removeable-container .remove-icon{cursor:pointer;margin-left:8px;max-width:24px}span{color:var(--brand-error, #B00020)}\n"] }]
|
|
1060
1060
|
}], () => [], { customInputTextNumber: [{
|
|
1061
1061
|
type: ContentChild,
|
|
1062
1062
|
args: ["customInputTextNumber", { static: false }]
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
export var BrandingTypes;
|
|
2
|
+
(function (BrandingTypes) {
|
|
3
|
+
BrandingTypes.defaultTheme = {
|
|
4
|
+
// Brand
|
|
5
|
+
brandPrimary: "#0937B2",
|
|
6
|
+
brandPrimaryLight: "#3C68D0",
|
|
7
|
+
brandPrimaryDark: "#062A99",
|
|
8
|
+
brandPrimaryDarker: "#041F80",
|
|
9
|
+
brandPrimaryLighter: "#638FE7",
|
|
10
|
+
brandPrimaryLightest: "#CBDDFB",
|
|
11
|
+
brandPrimaryHover: "#F0F3FA",
|
|
12
|
+
brandPrimaryActive: "#DAE1F3",
|
|
13
|
+
brandSecondary: "#ED711C",
|
|
14
|
+
brandSecondaryLight: "#F09E65",
|
|
15
|
+
brandSecondaryDark: "#B23600",
|
|
16
|
+
brandSecondaryLighter: "#FFC6F2",
|
|
17
|
+
brandAccent: "#10ADAE",
|
|
18
|
+
brandAccentLight: "#16CBBC",
|
|
19
|
+
brandAccentDark: "#035F6B",
|
|
20
|
+
brandAccentLighter: "#ACDADA",
|
|
21
|
+
// Semantic
|
|
22
|
+
brandSuccess: "#38AF49",
|
|
23
|
+
brandSuccessLight: "#4CAF50",
|
|
24
|
+
brandSuccessDark: "#216531",
|
|
25
|
+
brandSuccessLighter: "#E4F5E9",
|
|
26
|
+
brandSuccessLightest: "#F1FFF3",
|
|
27
|
+
brandError: "#B00020",
|
|
28
|
+
brandErrorLight: "#F04E4E",
|
|
29
|
+
brandErrorDark: "#A60060",
|
|
30
|
+
brandErrorLighter: "#FAE1EA",
|
|
31
|
+
brandErrorLightest: "#FDF2F2",
|
|
32
|
+
brandWarning: "#FF9D00",
|
|
33
|
+
brandWarningLight: "#D4900C",
|
|
34
|
+
brandWarningDark: "#624000",
|
|
35
|
+
brandWarningLighter: "#F4E7C3",
|
|
36
|
+
brandWarningLightest: "#FAEFED",
|
|
37
|
+
brandInfo: "#0091FF",
|
|
38
|
+
brandInfoLight: "#35A1FF",
|
|
39
|
+
brandInfoDark: "#0087B2",
|
|
40
|
+
brandInfoLighter: "#CFECF9",
|
|
41
|
+
// Text
|
|
42
|
+
textPrimary: "#181F33",
|
|
43
|
+
textSecondary: "#6A737D",
|
|
44
|
+
textTertiary: "#929DAB",
|
|
45
|
+
textDisabled: "#C8CDD3",
|
|
46
|
+
textPrimary87: "rgba(24, 31, 51, 0.87)",
|
|
47
|
+
textPrimary60: "rgba(24, 31, 51, 0.60)",
|
|
48
|
+
textPrimary38: "rgba(24, 31, 51, 0.38)",
|
|
49
|
+
textPrimary12: "rgba(24, 31, 51, 0.12)",
|
|
50
|
+
// Background
|
|
51
|
+
bgPrimary: "#FFFFFF",
|
|
52
|
+
bgSecondary: "#FAFAFA",
|
|
53
|
+
bgTertiary: "#F5F5F5",
|
|
54
|
+
bgOverlay: "rgba(0, 0, 0, 0.32)",
|
|
55
|
+
bgOverlayLight: "rgba(0, 0, 0, 0.12)",
|
|
56
|
+
bgOverlayLighter: "rgba(0, 0, 0, 0.08)",
|
|
57
|
+
bgOverlayLightest: "rgba(0, 0, 0, 0.04)",
|
|
58
|
+
// Border
|
|
59
|
+
borderPrimary: "#E0E0E0",
|
|
60
|
+
borderSecondary: "#D6DCE2",
|
|
61
|
+
borderTertiary: "#C8CDD3",
|
|
62
|
+
borderLight: "#F1F4F8",
|
|
63
|
+
borderPrimary12: "rgba(0, 0, 0, 0.12)",
|
|
64
|
+
borderPrimary08: "rgba(0, 0, 0, 0.08)",
|
|
65
|
+
borderPrimary06: "rgba(0, 0, 0, 0.06)",
|
|
66
|
+
// Shadows
|
|
67
|
+
shadowPrimary: "rgba(0, 0, 0, 0.12)",
|
|
68
|
+
shadowSecondary: "rgba(0, 0, 0, 0.08)",
|
|
69
|
+
shadowTertiary: "rgba(0, 0, 0, 0.04)",
|
|
70
|
+
shadowLight: "rgba(0, 0, 0, 0.06)",
|
|
71
|
+
// Status
|
|
72
|
+
statusAvailable: "#929DAB",
|
|
73
|
+
statusUnavailable: "#CCD3DA",
|
|
74
|
+
statusHotseat: "#857BFF",
|
|
75
|
+
statusMultiteam: "#10ADAE",
|
|
76
|
+
statusSelected: "#10ADAE",
|
|
77
|
+
statusUpcoming: "#D4900C",
|
|
78
|
+
statusRoom: "#38AF49",
|
|
79
|
+
statusRoomBooked: "#B23600",
|
|
80
|
+
statusRoomUnavailable: "#181F33",
|
|
81
|
+
// Team
|
|
82
|
+
teamColor1: "#F8C52E",
|
|
83
|
+
teamColor2: "#FA8E20",
|
|
84
|
+
teamColor3: "#987CDD",
|
|
85
|
+
teamColor4: "#16CBBC",
|
|
86
|
+
teamColor5: "#E65010",
|
|
87
|
+
teamColor6: "#A60060",
|
|
88
|
+
teamColor7: "#ED323B",
|
|
89
|
+
teamColor8: "#35A1FF",
|
|
90
|
+
teamColor9: "#80D348",
|
|
91
|
+
};
|
|
92
|
+
})(BrandingTypes || (BrandingTypes = {}));
|
|
93
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnJhbmRpbmcudHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9taXMtY29tcG9uZW50cy9keW5hbWljLXRoZW1lL2JyYW5kaW5nLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sS0FBVyxhQUFhLENBK003QjtBQS9NRCxXQUFpQixhQUFhO0lBeUdmLDBCQUFZLEdBQWdCO1FBQ3ZDLFFBQVE7UUFDUixZQUFZLEVBQUUsU0FBUztRQUN2QixpQkFBaUIsRUFBRSxTQUFTO1FBQzVCLGdCQUFnQixFQUFFLFNBQVM7UUFDM0Isa0JBQWtCLEVBQUUsU0FBUztRQUM3QixtQkFBbUIsRUFBRSxTQUFTO1FBQzlCLG9CQUFvQixFQUFFLFNBQVM7UUFDL0IsaUJBQWlCLEVBQUUsU0FBUztRQUM1QixrQkFBa0IsRUFBRSxTQUFTO1FBRTdCLGNBQWMsRUFBRSxTQUFTO1FBQ3pCLG1CQUFtQixFQUFFLFNBQVM7UUFDOUIsa0JBQWtCLEVBQUUsU0FBUztRQUM3QixxQkFBcUIsRUFBRSxTQUFTO1FBRWhDLFdBQVcsRUFBRSxTQUFTO1FBQ3RCLGdCQUFnQixFQUFFLFNBQVM7UUFDM0IsZUFBZSxFQUFFLFNBQVM7UUFDMUIsa0JBQWtCLEVBQUUsU0FBUztRQUU3QixXQUFXO1FBQ1gsWUFBWSxFQUFFLFNBQVM7UUFDdkIsaUJBQWlCLEVBQUUsU0FBUztRQUM1QixnQkFBZ0IsRUFBRSxTQUFTO1FBQzNCLG1CQUFtQixFQUFFLFNBQVM7UUFDOUIsb0JBQW9CLEVBQUUsU0FBUztRQUUvQixVQUFVLEVBQUUsU0FBUztRQUNyQixlQUFlLEVBQUUsU0FBUztRQUMxQixjQUFjLEVBQUUsU0FBUztRQUN6QixpQkFBaUIsRUFBRSxTQUFTO1FBQzVCLGtCQUFrQixFQUFFLFNBQVM7UUFFN0IsWUFBWSxFQUFFLFNBQVM7UUFDdkIsaUJBQWlCLEVBQUUsU0FBUztRQUM1QixnQkFBZ0IsRUFBRSxTQUFTO1FBQzNCLG1CQUFtQixFQUFFLFNBQVM7UUFDOUIsb0JBQW9CLEVBQUUsU0FBUztRQUUvQixTQUFTLEVBQUUsU0FBUztRQUNwQixjQUFjLEVBQUUsU0FBUztRQUN6QixhQUFhLEVBQUUsU0FBUztRQUN4QixnQkFBZ0IsRUFBRSxTQUFTO1FBRTNCLE9BQU87UUFDUCxXQUFXLEVBQUUsU0FBUztRQUN0QixhQUFhLEVBQUUsU0FBUztRQUN4QixZQUFZLEVBQUUsU0FBUztRQUN2QixZQUFZLEVBQUUsU0FBUztRQUV2QixhQUFhLEVBQUUsd0JBQXdCO1FBQ3ZDLGFBQWEsRUFBRSx3QkFBd0I7UUFDdkMsYUFBYSxFQUFFLHdCQUF3QjtRQUN2QyxhQUFhLEVBQUUsd0JBQXdCO1FBRXZDLGFBQWE7UUFDYixTQUFTLEVBQUUsU0FBUztRQUNwQixXQUFXLEVBQUUsU0FBUztRQUN0QixVQUFVLEVBQUUsU0FBUztRQUNyQixTQUFTLEVBQUUscUJBQXFCO1FBQ2hDLGNBQWMsRUFBRSxxQkFBcUI7UUFDckMsZ0JBQWdCLEVBQUUscUJBQXFCO1FBQ3ZDLGlCQUFpQixFQUFFLHFCQUFxQjtRQUV4QyxTQUFTO1FBQ1QsYUFBYSxFQUFFLFNBQVM7UUFDeEIsZUFBZSxFQUFFLFNBQVM7UUFDMUIsY0FBYyxFQUFFLFNBQVM7UUFDekIsV0FBVyxFQUFFLFNBQVM7UUFDdEIsZUFBZSxFQUFFLHFCQUFxQjtRQUN0QyxlQUFlLEVBQUUscUJBQXFCO1FBQ3RDLGVBQWUsRUFBRSxxQkFBcUI7UUFFdEMsVUFBVTtRQUNWLGFBQWEsRUFBRSxxQkFBcUI7UUFDcEMsZUFBZSxFQUFFLHFCQUFxQjtRQUN0QyxjQUFjLEVBQUUscUJBQXFCO1FBQ3JDLFdBQVcsRUFBRSxxQkFBcUI7UUFFbEMsU0FBUztRQUNULGVBQWUsRUFBRSxTQUFTO1FBQzFCLGlCQUFpQixFQUFFLFNBQVM7UUFDNUIsYUFBYSxFQUFFLFNBQVM7UUFDeEIsZUFBZSxFQUFFLFNBQVM7UUFDMUIsY0FBYyxFQUFFLFNBQVM7UUFDekIsY0FBYyxFQUFFLFNBQVM7UUFDekIsVUFBVSxFQUFFLFNBQVM7UUFDckIsZ0JBQWdCLEVBQUUsU0FBUztRQUMzQixxQkFBcUIsRUFBRSxTQUFTO1FBRWhDLE9BQU87UUFDUCxVQUFVLEVBQUUsU0FBUztRQUNyQixVQUFVLEVBQUUsU0FBUztRQUNyQixVQUFVLEVBQUUsU0FBUztRQUNyQixVQUFVLEVBQUUsU0FBUztRQUNyQixVQUFVLEVBQUUsU0FBUztRQUNyQixVQUFVLEVBQUUsU0FBUztRQUNyQixVQUFVLEVBQUUsU0FBUztRQUNyQixVQUFVLEVBQUUsU0FBUztRQUNyQixVQUFVLEVBQUUsU0FBUztLQUN0QixDQUFDO0FBQ0osQ0FBQyxFQS9NZ0IsYUFBYSxLQUFiLGFBQWEsUUErTTdCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IG5hbWVzcGFjZSBCcmFuZGluZ1R5cGVzIHtcblxuICBleHBvcnQgaW50ZXJmYWNlIFRoZW1lQ29sb3JzIHtcbiAgICAvLyBCcmFuZFxuICAgIGJyYW5kUHJpbWFyeTogc3RyaW5nO1xuICAgIGJyYW5kUHJpbWFyeUxpZ2h0OiBzdHJpbmc7XG4gICAgYnJhbmRQcmltYXJ5RGFyazogc3RyaW5nO1xuICAgIGJyYW5kUHJpbWFyeURhcmtlcjogc3RyaW5nO1xuICAgIGJyYW5kUHJpbWFyeUxpZ2h0ZXI6IHN0cmluZztcbiAgICBicmFuZFByaW1hcnlMaWdodGVzdDogc3RyaW5nO1xuICAgIGJyYW5kUHJpbWFyeUhvdmVyOiBzdHJpbmc7XG4gICAgYnJhbmRQcmltYXJ5QWN0aXZlOiBzdHJpbmc7XG5cbiAgICBicmFuZFNlY29uZGFyeTogc3RyaW5nO1xuICAgIGJyYW5kU2Vjb25kYXJ5TGlnaHQ6IHN0cmluZztcbiAgICBicmFuZFNlY29uZGFyeURhcms6IHN0cmluZztcbiAgICBicmFuZFNlY29uZGFyeUxpZ2h0ZXI6IHN0cmluZztcblxuICAgIGJyYW5kQWNjZW50OiBzdHJpbmc7XG4gICAgYnJhbmRBY2NlbnRMaWdodDogc3RyaW5nO1xuICAgIGJyYW5kQWNjZW50RGFyazogc3RyaW5nO1xuICAgIGJyYW5kQWNjZW50TGlnaHRlcjogc3RyaW5nO1xuXG4gICAgLy8gU2VtYW50aWNcbiAgICBicmFuZFN1Y2Nlc3M6IHN0cmluZztcbiAgICBicmFuZFN1Y2Nlc3NMaWdodDogc3RyaW5nO1xuICAgIGJyYW5kU3VjY2Vzc0Rhcms6IHN0cmluZztcbiAgICBicmFuZFN1Y2Nlc3NMaWdodGVyOiBzdHJpbmc7XG4gICAgYnJhbmRTdWNjZXNzTGlnaHRlc3Q6IHN0cmluZztcblxuICAgIGJyYW5kRXJyb3I6IHN0cmluZztcbiAgICBicmFuZEVycm9yTGlnaHQ6IHN0cmluZztcbiAgICBicmFuZEVycm9yRGFyazogc3RyaW5nO1xuICAgIGJyYW5kRXJyb3JMaWdodGVyOiBzdHJpbmc7XG4gICAgYnJhbmRFcnJvckxpZ2h0ZXN0OiBzdHJpbmc7XG5cbiAgICBicmFuZFdhcm5pbmc6IHN0cmluZztcbiAgICBicmFuZFdhcm5pbmdMaWdodDogc3RyaW5nO1xuICAgIGJyYW5kV2FybmluZ0Rhcms6IHN0cmluZztcbiAgICBicmFuZFdhcm5pbmdMaWdodGVyOiBzdHJpbmc7XG4gICAgYnJhbmRXYXJuaW5nTGlnaHRlc3Q6IHN0cmluZztcblxuICAgIGJyYW5kSW5mbzogc3RyaW5nO1xuICAgIGJyYW5kSW5mb0xpZ2h0OiBzdHJpbmc7XG4gICAgYnJhbmRJbmZvRGFyazogc3RyaW5nO1xuICAgIGJyYW5kSW5mb0xpZ2h0ZXI6IHN0cmluZztcblxuICAgIC8vIFRleHRcbiAgICB0ZXh0UHJpbWFyeTogc3RyaW5nO1xuICAgIHRleHRTZWNvbmRhcnk6IHN0cmluZztcbiAgICB0ZXh0VGVydGlhcnk6IHN0cmluZztcbiAgICB0ZXh0RGlzYWJsZWQ6IHN0cmluZztcblxuICAgIHRleHRQcmltYXJ5ODc6IHN0cmluZztcbiAgICB0ZXh0UHJpbWFyeTYwOiBzdHJpbmc7XG4gICAgdGV4dFByaW1hcnkzODogc3RyaW5nO1xuICAgIHRleHRQcmltYXJ5MTI6IHN0cmluZztcblxuICAgIC8vIEJhY2tncm91bmRcbiAgICBiZ1ByaW1hcnk6IHN0cmluZztcbiAgICBiZ1NlY29uZGFyeTogc3RyaW5nO1xuICAgIGJnVGVydGlhcnk6IHN0cmluZztcbiAgICBiZ092ZXJsYXk6IHN0cmluZztcbiAgICBiZ092ZXJsYXlMaWdodDogc3RyaW5nO1xuICAgIGJnT3ZlcmxheUxpZ2h0ZXI6IHN0cmluZztcbiAgICBiZ092ZXJsYXlMaWdodGVzdDogc3RyaW5nO1xuXG4gICAgLy8gQm9yZGVyXG4gICAgYm9yZGVyUHJpbWFyeTogc3RyaW5nO1xuICAgIGJvcmRlclNlY29uZGFyeTogc3RyaW5nO1xuICAgIGJvcmRlclRlcnRpYXJ5OiBzdHJpbmc7XG4gICAgYm9yZGVyTGlnaHQ6IHN0cmluZztcbiAgICBib3JkZXJQcmltYXJ5MTI6IHN0cmluZztcbiAgICBib3JkZXJQcmltYXJ5MDg6IHN0cmluZztcbiAgICBib3JkZXJQcmltYXJ5MDY6IHN0cmluZztcblxuICAgIC8vIFNoYWRvd3NcbiAgICBzaGFkb3dQcmltYXJ5OiBzdHJpbmc7XG4gICAgc2hhZG93U2Vjb25kYXJ5OiBzdHJpbmc7XG4gICAgc2hhZG93VGVydGlhcnk6IHN0cmluZztcbiAgICBzaGFkb3dMaWdodDogc3RyaW5nO1xuXG4gICAgLy8gU3RhdHVzXG4gICAgc3RhdHVzQXZhaWxhYmxlOiBzdHJpbmc7XG4gICAgc3RhdHVzVW5hdmFpbGFibGU6IHN0cmluZztcbiAgICBzdGF0dXNIb3RzZWF0OiBzdHJpbmc7XG4gICAgc3RhdHVzTXVsdGl0ZWFtOiBzdHJpbmc7XG4gICAgc3RhdHVzU2VsZWN0ZWQ6IHN0cmluZztcbiAgICBzdGF0dXNVcGNvbWluZzogc3RyaW5nO1xuICAgIHN0YXR1c1Jvb206IHN0cmluZztcbiAgICBzdGF0dXNSb29tQm9va2VkOiBzdHJpbmc7XG4gICAgc3RhdHVzUm9vbVVuYXZhaWxhYmxlOiBzdHJpbmc7XG5cbiAgICAvLyBUZWFtXG4gICAgdGVhbUNvbG9yMTogc3RyaW5nO1xuICAgIHRlYW1Db2xvcjI6IHN0cmluZztcbiAgICB0ZWFtQ29sb3IzOiBzdHJpbmc7XG4gICAgdGVhbUNvbG9yNDogc3RyaW5nO1xuICAgIHRlYW1Db2xvcjU6IHN0cmluZztcbiAgICB0ZWFtQ29sb3I2OiBzdHJpbmc7XG4gICAgdGVhbUNvbG9yNzogc3RyaW5nO1xuICAgIHRlYW1Db2xvcjg6IHN0cmluZztcbiAgICB0ZWFtQ29sb3I5OiBzdHJpbmc7XG4gIH1cbiAgXG4gIGV4cG9ydCBjb25zdCBkZWZhdWx0VGhlbWU6IFRoZW1lQ29sb3JzID0ge1xuICAgIC8vIEJyYW5kXG4gICAgYnJhbmRQcmltYXJ5OiBcIiMwOTM3QjJcIixcbiAgICBicmFuZFByaW1hcnlMaWdodDogXCIjM0M2OEQwXCIsXG4gICAgYnJhbmRQcmltYXJ5RGFyazogXCIjMDYyQTk5XCIsXG4gICAgYnJhbmRQcmltYXJ5RGFya2VyOiBcIiMwNDFGODBcIixcbiAgICBicmFuZFByaW1hcnlMaWdodGVyOiBcIiM2MzhGRTdcIixcbiAgICBicmFuZFByaW1hcnlMaWdodGVzdDogXCIjQ0JEREZCXCIsXG4gICAgYnJhbmRQcmltYXJ5SG92ZXI6IFwiI0YwRjNGQVwiLFxuICAgIGJyYW5kUHJpbWFyeUFjdGl2ZTogXCIjREFFMUYzXCIsXG4gIFxuICAgIGJyYW5kU2Vjb25kYXJ5OiBcIiNFRDcxMUNcIixcbiAgICBicmFuZFNlY29uZGFyeUxpZ2h0OiBcIiNGMDlFNjVcIixcbiAgICBicmFuZFNlY29uZGFyeURhcms6IFwiI0IyMzYwMFwiLFxuICAgIGJyYW5kU2Vjb25kYXJ5TGlnaHRlcjogXCIjRkZDNkYyXCIsXG4gIFxuICAgIGJyYW5kQWNjZW50OiBcIiMxMEFEQUVcIixcbiAgICBicmFuZEFjY2VudExpZ2h0OiBcIiMxNkNCQkNcIixcbiAgICBicmFuZEFjY2VudERhcms6IFwiIzAzNUY2QlwiLFxuICAgIGJyYW5kQWNjZW50TGlnaHRlcjogXCIjQUNEQURBXCIsXG4gIFxuICAgIC8vIFNlbWFudGljXG4gICAgYnJhbmRTdWNjZXNzOiBcIiMzOEFGNDlcIixcbiAgICBicmFuZFN1Y2Nlc3NMaWdodDogXCIjNENBRjUwXCIsXG4gICAgYnJhbmRTdWNjZXNzRGFyazogXCIjMjE2NTMxXCIsXG4gICAgYnJhbmRTdWNjZXNzTGlnaHRlcjogXCIjRTRGNUU5XCIsXG4gICAgYnJhbmRTdWNjZXNzTGlnaHRlc3Q6IFwiI0YxRkZGM1wiLFxuICBcbiAgICBicmFuZEVycm9yOiBcIiNCMDAwMjBcIixcbiAgICBicmFuZEVycm9yTGlnaHQ6IFwiI0YwNEU0RVwiLFxuICAgIGJyYW5kRXJyb3JEYXJrOiBcIiNBNjAwNjBcIixcbiAgICBicmFuZEVycm9yTGlnaHRlcjogXCIjRkFFMUVBXCIsXG4gICAgYnJhbmRFcnJvckxpZ2h0ZXN0OiBcIiNGREYyRjJcIixcbiAgXG4gICAgYnJhbmRXYXJuaW5nOiBcIiNGRjlEMDBcIixcbiAgICBicmFuZFdhcm5pbmdMaWdodDogXCIjRDQ5MDBDXCIsXG4gICAgYnJhbmRXYXJuaW5nRGFyazogXCIjNjI0MDAwXCIsXG4gICAgYnJhbmRXYXJuaW5nTGlnaHRlcjogXCIjRjRFN0MzXCIsXG4gICAgYnJhbmRXYXJuaW5nTGlnaHRlc3Q6IFwiI0ZBRUZFRFwiLFxuICBcbiAgICBicmFuZEluZm86IFwiIzAwOTFGRlwiLFxuICAgIGJyYW5kSW5mb0xpZ2h0OiBcIiMzNUExRkZcIixcbiAgICBicmFuZEluZm9EYXJrOiBcIiMwMDg3QjJcIixcbiAgICBicmFuZEluZm9MaWdodGVyOiBcIiNDRkVDRjlcIixcbiAgXG4gICAgLy8gVGV4dFxuICAgIHRleHRQcmltYXJ5OiBcIiMxODFGMzNcIixcbiAgICB0ZXh0U2Vjb25kYXJ5OiBcIiM2QTczN0RcIixcbiAgICB0ZXh0VGVydGlhcnk6IFwiIzkyOURBQlwiLFxuICAgIHRleHREaXNhYmxlZDogXCIjQzhDREQzXCIsXG4gIFxuICAgIHRleHRQcmltYXJ5ODc6IFwicmdiYSgyNCwgMzEsIDUxLCAwLjg3KVwiLFxuICAgIHRleHRQcmltYXJ5NjA6IFwicmdiYSgyNCwgMzEsIDUxLCAwLjYwKVwiLFxuICAgIHRleHRQcmltYXJ5Mzg6IFwicmdiYSgyNCwgMzEsIDUxLCAwLjM4KVwiLFxuICAgIHRleHRQcmltYXJ5MTI6IFwicmdiYSgyNCwgMzEsIDUxLCAwLjEyKVwiLFxuICBcbiAgICAvLyBCYWNrZ3JvdW5kXG4gICAgYmdQcmltYXJ5OiBcIiNGRkZGRkZcIixcbiAgICBiZ1NlY29uZGFyeTogXCIjRkFGQUZBXCIsXG4gICAgYmdUZXJ0aWFyeTogXCIjRjVGNUY1XCIsXG4gICAgYmdPdmVybGF5OiBcInJnYmEoMCwgMCwgMCwgMC4zMilcIixcbiAgICBiZ092ZXJsYXlMaWdodDogXCJyZ2JhKDAsIDAsIDAsIDAuMTIpXCIsXG4gICAgYmdPdmVybGF5TGlnaHRlcjogXCJyZ2JhKDAsIDAsIDAsIDAuMDgpXCIsXG4gICAgYmdPdmVybGF5TGlnaHRlc3Q6IFwicmdiYSgwLCAwLCAwLCAwLjA0KVwiLFxuICBcbiAgICAvLyBCb3JkZXJcbiAgICBib3JkZXJQcmltYXJ5OiBcIiNFMEUwRTBcIixcbiAgICBib3JkZXJTZWNvbmRhcnk6IFwiI0Q2RENFMlwiLFxuICAgIGJvcmRlclRlcnRpYXJ5OiBcIiNDOENERDNcIixcbiAgICBib3JkZXJMaWdodDogXCIjRjFGNEY4XCIsXG4gICAgYm9yZGVyUHJpbWFyeTEyOiBcInJnYmEoMCwgMCwgMCwgMC4xMilcIixcbiAgICBib3JkZXJQcmltYXJ5MDg6IFwicmdiYSgwLCAwLCAwLCAwLjA4KVwiLFxuICAgIGJvcmRlclByaW1hcnkwNjogXCJyZ2JhKDAsIDAsIDAsIDAuMDYpXCIsXG4gIFxuICAgIC8vIFNoYWRvd3NcbiAgICBzaGFkb3dQcmltYXJ5OiBcInJnYmEoMCwgMCwgMCwgMC4xMilcIixcbiAgICBzaGFkb3dTZWNvbmRhcnk6IFwicmdiYSgwLCAwLCAwLCAwLjA4KVwiLFxuICAgIHNoYWRvd1RlcnRpYXJ5OiBcInJnYmEoMCwgMCwgMCwgMC4wNClcIixcbiAgICBzaGFkb3dMaWdodDogXCJyZ2JhKDAsIDAsIDAsIDAuMDYpXCIsXG4gIFxuICAgIC8vIFN0YXR1c1xuICAgIHN0YXR1c0F2YWlsYWJsZTogXCIjOTI5REFCXCIsXG4gICAgc3RhdHVzVW5hdmFpbGFibGU6IFwiI0NDRDNEQVwiLFxuICAgIHN0YXR1c0hvdHNlYXQ6IFwiIzg1N0JGRlwiLFxuICAgIHN0YXR1c011bHRpdGVhbTogXCIjMTBBREFFXCIsXG4gICAgc3RhdHVzU2VsZWN0ZWQ6IFwiIzEwQURBRVwiLFxuICAgIHN0YXR1c1VwY29taW5nOiBcIiNENDkwMENcIixcbiAgICBzdGF0dXNSb29tOiBcIiMzOEFGNDlcIixcbiAgICBzdGF0dXNSb29tQm9va2VkOiBcIiNCMjM2MDBcIixcbiAgICBzdGF0dXNSb29tVW5hdmFpbGFibGU6IFwiIzE4MUYzM1wiLFxuICBcbiAgICAvLyBUZWFtXG4gICAgdGVhbUNvbG9yMTogXCIjRjhDNTJFXCIsXG4gICAgdGVhbUNvbG9yMjogXCIjRkE4RTIwXCIsXG4gICAgdGVhbUNvbG9yMzogXCIjOTg3Q0REXCIsXG4gICAgdGVhbUNvbG9yNDogXCIjMTZDQkJDXCIsXG4gICAgdGVhbUNvbG9yNTogXCIjRTY1MDEwXCIsXG4gICAgdGVhbUNvbG9yNjogXCIjQTYwMDYwXCIsXG4gICAgdGVhbUNvbG9yNzogXCIjRUQzMjNCXCIsXG4gICAgdGVhbUNvbG9yODogXCIjMzVBMUZGXCIsXG4gICAgdGVhbUNvbG9yOTogXCIjODBEMzQ4XCIsXG4gIH07XG59Il19
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { DynamicThemeService } from './dynamic-theme.service';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "./dynamic-theme.service";
|
|
5
|
+
export class DynamicThemeModule {
|
|
6
|
+
constructor(themeService) {
|
|
7
|
+
this.themeService = themeService;
|
|
8
|
+
// Initialize the theme service when module is loaded
|
|
9
|
+
// This ensures the default theme is applied
|
|
10
|
+
}
|
|
11
|
+
static { this.ɵfac = function DynamicThemeModule_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || DynamicThemeModule)(i0.ɵɵinject(i1.DynamicThemeService)); }; }
|
|
12
|
+
static { this.ɵmod = /*@__PURE__*/ i0.ɵɵdefineNgModule({ type: DynamicThemeModule }); }
|
|
13
|
+
static { this.ɵinj = /*@__PURE__*/ i0.ɵɵdefineInjector({ providers: [
|
|
14
|
+
DynamicThemeService
|
|
15
|
+
] }); }
|
|
16
|
+
}
|
|
17
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DynamicThemeModule, [{
|
|
18
|
+
type: NgModule,
|
|
19
|
+
args: [{
|
|
20
|
+
providers: [
|
|
21
|
+
DynamicThemeService
|
|
22
|
+
]
|
|
23
|
+
}]
|
|
24
|
+
}], () => [{ type: i1.DynamicThemeService }], null); })();
|
|
25
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy10aGVtZS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9taXMtY29tcG9uZW50cy9keW5hbWljLXRoZW1lL2R5bmFtaWMtdGhlbWUubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7OztBQU85RCxNQUFNLE9BQU8sa0JBQWtCO0lBQzdCLFlBQW9CLFlBQWlDO1FBQWpDLGlCQUFZLEdBQVosWUFBWSxDQUFxQjtRQUNuRCxxREFBcUQ7UUFDckQsNENBQTRDO0lBQzlDLENBQUM7bUhBSlUsa0JBQWtCO21FQUFsQixrQkFBa0I7d0VBSmxCO1lBQ1QsbUJBQW1CO1NBQ3BCOztpRkFFVSxrQkFBa0I7Y0FMOUIsUUFBUTtlQUFDO2dCQUNSLFNBQVMsRUFBRTtvQkFDVCxtQkFBbUI7aUJBQ3BCO2FBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRHluYW1pY1RoZW1lU2VydmljZSB9IGZyb20gJy4vZHluYW1pYy10aGVtZS5zZXJ2aWNlJztcblxuQE5nTW9kdWxlKHtcbiAgcHJvdmlkZXJzOiBbXG4gICAgRHluYW1pY1RoZW1lU2VydmljZVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIER5bmFtaWNUaGVtZU1vZHVsZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgdGhlbWVTZXJ2aWNlOiBEeW5hbWljVGhlbWVTZXJ2aWNlKSB7XG4gICAgLy8gSW5pdGlhbGl6ZSB0aGUgdGhlbWUgc2VydmljZSB3aGVuIG1vZHVsZSBpcyBsb2FkZWRcbiAgICAvLyBUaGlzIGVuc3VyZXMgdGhlIGRlZmF1bHQgdGhlbWUgaXMgYXBwbGllZFxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { BehaviorSubject } from 'rxjs';
|
|
3
|
+
import { BrandingTypes } from './branding.types';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class DynamicThemeService {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.currentThemeSubject = new BehaviorSubject(BrandingTypes.defaultTheme);
|
|
8
|
+
this.currentTheme$ = this.currentThemeSubject.asObservable();
|
|
9
|
+
// Initialize with default theme on service creation
|
|
10
|
+
this.applyTheme(BrandingTypes.defaultTheme);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Apply a complete theme configuration to the root element
|
|
14
|
+
* @param theme - ThemeColors object containing all color values
|
|
15
|
+
*/
|
|
16
|
+
applyTheme(theme) {
|
|
17
|
+
const root = document.documentElement;
|
|
18
|
+
Object.entries(theme).forEach(([camelName, value]) => {
|
|
19
|
+
const cssVar = `--${this.camelToKebabCase(camelName)}`;
|
|
20
|
+
root.style.setProperty(cssVar, String(value));
|
|
21
|
+
});
|
|
22
|
+
// Update the current theme subject
|
|
23
|
+
this.currentThemeSubject.next(theme);
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Apply partial theme updates (only specified colors will be updated)
|
|
27
|
+
* @param partialTheme - Partial ThemeColors object with only the colors to update
|
|
28
|
+
*/
|
|
29
|
+
applyPartialTheme(partialTheme) {
|
|
30
|
+
const root = document.documentElement;
|
|
31
|
+
Object.entries(partialTheme).forEach(([camelName, value]) => {
|
|
32
|
+
if (value !== undefined) {
|
|
33
|
+
const cssVar = `--${this.camelToKebabCase(camelName)}`;
|
|
34
|
+
root.style.setProperty(cssVar, String(value));
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
// Update the current theme with merged values
|
|
38
|
+
const currentTheme = this.currentThemeSubject.value;
|
|
39
|
+
const updatedTheme = { ...currentTheme, ...partialTheme };
|
|
40
|
+
this.currentThemeSubject.next(updatedTheme);
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Set a single color property
|
|
44
|
+
* @param colorKey - The camelCase key of the color property
|
|
45
|
+
* @param colorValue - The color value (hex, rgb, rgba, etc.)
|
|
46
|
+
*/
|
|
47
|
+
setColorProperty(colorKey, colorValue) {
|
|
48
|
+
const root = document.documentElement;
|
|
49
|
+
const cssVar = `--${this.camelToKebabCase(colorKey)}`;
|
|
50
|
+
root.style.setProperty(cssVar, colorValue);
|
|
51
|
+
// Update the current theme
|
|
52
|
+
const currentTheme = this.currentThemeSubject.value;
|
|
53
|
+
const updatedTheme = { ...currentTheme, [colorKey]: colorValue };
|
|
54
|
+
this.currentThemeSubject.next(updatedTheme);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Get the current theme colors
|
|
58
|
+
* @returns Current ThemeColors object
|
|
59
|
+
*/
|
|
60
|
+
getCurrentTheme() {
|
|
61
|
+
return this.currentThemeSubject.value;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Get a specific color value from the current theme
|
|
65
|
+
* @param colorKey - The camelCase key of the color property
|
|
66
|
+
* @returns The color value as string
|
|
67
|
+
*/
|
|
68
|
+
getColorProperty(colorKey) {
|
|
69
|
+
return this.currentThemeSubject.value[colorKey];
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Reset theme to default values
|
|
73
|
+
*/
|
|
74
|
+
resetToDefault() {
|
|
75
|
+
this.applyTheme(BrandingTypes.defaultTheme);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Remove a specific CSS custom property from the root element
|
|
79
|
+
* @param colorKey - The camelCase key of the color property to remove
|
|
80
|
+
*/
|
|
81
|
+
removeColorProperty(colorKey) {
|
|
82
|
+
const root = document.documentElement;
|
|
83
|
+
const cssVar = `--${this.camelToKebabCase(colorKey)}`;
|
|
84
|
+
root.style.removeProperty(cssVar);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Get all CSS custom properties currently set on the root element
|
|
88
|
+
* @returns Object with CSS variable names as keys and their values
|
|
89
|
+
*/
|
|
90
|
+
getAllCSSVariables() {
|
|
91
|
+
const root = document.documentElement;
|
|
92
|
+
const computedStyle = getComputedStyle(root);
|
|
93
|
+
const cssVars = {};
|
|
94
|
+
// Get all CSS custom properties that start with our prefix
|
|
95
|
+
for (let i = 0; i < computedStyle.length; i++) {
|
|
96
|
+
const property = computedStyle[i];
|
|
97
|
+
if (property.startsWith('--brand-') ||
|
|
98
|
+
property.startsWith('--text-') ||
|
|
99
|
+
property.startsWith('--bg-') ||
|
|
100
|
+
property.startsWith('--border-') ||
|
|
101
|
+
property.startsWith('--shadow-') ||
|
|
102
|
+
property.startsWith('--status-') ||
|
|
103
|
+
property.startsWith('--team-color-')) {
|
|
104
|
+
cssVars[property] = computedStyle.getPropertyValue(property).trim();
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return cssVars;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Apply theme with validation
|
|
111
|
+
* @param theme - ThemeColors object to validate and apply
|
|
112
|
+
* @returns boolean indicating if the theme was successfully applied
|
|
113
|
+
*/
|
|
114
|
+
applyThemeWithValidation(theme) {
|
|
115
|
+
try {
|
|
116
|
+
// Basic validation - check if all required properties exist
|
|
117
|
+
const requiredKeys = Object.keys(BrandingTypes.defaultTheme);
|
|
118
|
+
const themeKeys = Object.keys(theme);
|
|
119
|
+
const missingKeys = requiredKeys.filter(key => !themeKeys.includes(key));
|
|
120
|
+
if (missingKeys.length > 0) {
|
|
121
|
+
console.warn('DynamicThemeService: Missing theme properties:', missingKeys);
|
|
122
|
+
// Apply with default values for missing keys
|
|
123
|
+
const completeTheme = { ...BrandingTypes.defaultTheme, ...theme };
|
|
124
|
+
this.applyTheme(completeTheme);
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
this.applyTheme(theme);
|
|
128
|
+
return true;
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
console.error('DynamicThemeService: Error applying theme:', error);
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
/**
|
|
136
|
+
* Convert camelCase to kebab-case for CSS custom properties
|
|
137
|
+
* @param camelCase - The camelCase string to convert
|
|
138
|
+
* @returns kebab-case string
|
|
139
|
+
*/
|
|
140
|
+
camelToKebabCase(camelCase) {
|
|
141
|
+
return camelCase.replace(/([A-Z])/g, '-$1').toLowerCase();
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Convert kebab-case to camelCase
|
|
145
|
+
* @param kebabCase - The kebab-case string to convert
|
|
146
|
+
* @returns camelCase string
|
|
147
|
+
*/
|
|
148
|
+
kebabToCamelCase(kebabCase) {
|
|
149
|
+
return kebabCase.replace(/-([a-z])/g, (match, letter) => letter.toUpperCase());
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Create a theme preset from current applied theme
|
|
153
|
+
* @param presetName - Name for the theme preset
|
|
154
|
+
* @returns Theme preset object
|
|
155
|
+
*/
|
|
156
|
+
createThemePreset(presetName) {
|
|
157
|
+
return {
|
|
158
|
+
name: presetName,
|
|
159
|
+
theme: { ...this.getCurrentTheme() }
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Export current theme as JSON string
|
|
164
|
+
* @returns JSON string representation of current theme
|
|
165
|
+
*/
|
|
166
|
+
exportThemeAsJSON() {
|
|
167
|
+
return JSON.stringify(this.getCurrentTheme(), null, 2);
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Import theme from JSON string
|
|
171
|
+
* @param jsonString - JSON string representation of theme
|
|
172
|
+
* @returns boolean indicating success
|
|
173
|
+
*/
|
|
174
|
+
importThemeFromJSON(jsonString) {
|
|
175
|
+
try {
|
|
176
|
+
const theme = JSON.parse(jsonString);
|
|
177
|
+
return this.applyThemeWithValidation(theme);
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
console.error('DynamicThemeService: Error importing theme from JSON:', error);
|
|
181
|
+
return false;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
static { this.ɵfac = function DynamicThemeService_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || DynamicThemeService)(); }; }
|
|
185
|
+
static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: DynamicThemeService, factory: DynamicThemeService.ɵfac, providedIn: 'root' }); }
|
|
186
|
+
}
|
|
187
|
+
(() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(DynamicThemeService, [{
|
|
188
|
+
type: Injectable,
|
|
189
|
+
args: [{
|
|
190
|
+
providedIn: 'root'
|
|
191
|
+
}]
|
|
192
|
+
}], () => [], null); })();
|
|
193
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy10aGVtZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvZHluYW1pYy10aGVtZS9keW5hbWljLXRoZW1lLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUFLakQsTUFBTSxPQUFPLG1CQUFtQjtJQUk5QjtRQUhRLHdCQUFtQixHQUFHLElBQUksZUFBZSxDQUE0QixhQUFhLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDbEcsa0JBQWEsR0FBMEMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBRSxDQUFDO1FBR3BHLG9EQUFvRDtRQUNwRCxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM5QyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsVUFBVSxDQUFDLEtBQWdDO1FBQ3pDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUM7UUFFdEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQ25ELE1BQU0sTUFBTSxHQUFHLEtBQUssSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUM7WUFDdkQsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2hELENBQUMsQ0FBQyxDQUFDO1FBRUgsbUNBQW1DO1FBQ25DLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVEOzs7T0FHRztJQUNILGlCQUFpQixDQUFDLFlBQWdEO1FBQ2hFLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUM7UUFFdEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsRUFBRSxFQUFFO1lBQzFELElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRSxDQUFDO2dCQUN4QixNQUFNLE1BQU0sR0FBRyxLQUFLLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUN2RCxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDaEQsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsOENBQThDO1FBQzlDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUM7UUFDcEQsTUFBTSxZQUFZLEdBQUcsRUFBRSxHQUFHLFlBQVksRUFBRSxHQUFHLFlBQVksRUFBRSxDQUFDO1FBQzFELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxnQkFBZ0IsQ0FBQyxRQUF5QyxFQUFFLFVBQWtCO1FBQzVFLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxlQUFlLENBQUM7UUFDdEMsTUFBTSxNQUFNLEdBQUcsS0FBSyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUN0RCxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLENBQUM7UUFFM0MsMkJBQTJCO1FBQzNCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUM7UUFDcEQsTUFBTSxZQUFZLEdBQUcsRUFBRSxHQUFHLFlBQVksRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDO1FBQ2pFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDOUMsQ0FBQztJQUVEOzs7T0FHRztJQUNILGVBQWU7UUFDYixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxnQkFBZ0IsQ0FBQyxRQUF5QztRQUN4RCxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVEOztPQUVHO0lBQ0gsY0FBYztRQUNaLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxtQkFBbUIsQ0FBQyxRQUF5QztRQUMzRCxNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLEtBQUssSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUM7UUFDdEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILGtCQUFrQjtRQUNoQixNQUFNLElBQUksR0FBRyxRQUFRLENBQUMsZUFBZSxDQUFDO1FBQ3RDLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdDLE1BQU0sT0FBTyxHQUEyQixFQUFFLENBQUM7UUFFM0MsMkRBQTJEO1FBQzNELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7WUFDOUMsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xDLElBQUksUUFBUSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUM7Z0JBQy9CLFFBQVEsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDO2dCQUM5QixRQUFRLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQztnQkFDNUIsUUFBUSxDQUFDLFVBQVUsQ0FBQyxXQUFXLENBQUM7Z0JBQ2hDLFFBQVEsQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO2dCQUNoQyxRQUFRLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQztnQkFDaEMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO2dCQUN6QyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsYUFBYSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3RFLENBQUM7UUFDSCxDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCx3QkFBd0IsQ0FBQyxLQUFnQztRQUN2RCxJQUFJLENBQUM7WUFDSCw0REFBNEQ7WUFDNUQsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUF3QyxDQUFDO1lBQ3BHLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUF3QyxDQUFDO1lBRTVFLE1BQU0sV0FBVyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUV6RSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQzNCLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0RBQWdELEVBQUUsV0FBVyxDQUFDLENBQUM7Z0JBQzVFLDZDQUE2QztnQkFDN0MsTUFBTSxhQUFhLEdBQUcsRUFBRSxHQUFHLGFBQWEsQ0FBQyxZQUFZLEVBQUUsR0FBRyxLQUFLLEVBQUUsQ0FBQztnQkFDbEUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztnQkFDL0IsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBRUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyw0Q0FBNEMsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUNuRSxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLGdCQUFnQixDQUFDLFNBQWlCO1FBQ3hDLE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDNUQsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxnQkFBZ0IsQ0FBQyxTQUFpQjtRQUN4QyxPQUFPLFNBQVMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDakYsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxpQkFBaUIsQ0FBQyxVQUFrQjtRQUNsQyxPQUFPO1lBQ0wsSUFBSSxFQUFFLFVBQVU7WUFDaEIsS0FBSyxFQUFFLEVBQUUsR0FBRyxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUU7U0FDckMsQ0FBQztJQUNKLENBQUM7SUFFRDs7O09BR0c7SUFDSCxpQkFBaUI7UUFDZixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUN6RCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILG1CQUFtQixDQUFDLFVBQWtCO1FBQ3BDLElBQUksQ0FBQztZQUNILE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUE4QixDQUFDO1lBQ2xFLE9BQU8sSUFBSSxDQUFDLHdCQUF3QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQyx1REFBdUQsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUM5RSxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7SUFDSCxDQUFDO29IQXpNVSxtQkFBbUI7dUVBQW5CLG1CQUFtQixXQUFuQixtQkFBbUIsbUJBRmxCLE1BQU07O2lGQUVQLG1CQUFtQjtjQUgvQixVQUFVO2VBQUM7Z0JBQ1YsVUFBVSxFQUFFLE1BQU07YUFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEJyYW5kaW5nVHlwZXMgfSBmcm9tICcuL2JyYW5kaW5nLnR5cGVzJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRHluYW1pY1RoZW1lU2VydmljZSB7XG4gIHByaXZhdGUgY3VycmVudFRoZW1lU3ViamVjdCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QnJhbmRpbmdUeXBlcy5UaGVtZUNvbG9ycz4oQnJhbmRpbmdUeXBlcy5kZWZhdWx0VGhlbWUpO1xuICBwdWJsaWMgY3VycmVudFRoZW1lJDogT2JzZXJ2YWJsZTxCcmFuZGluZ1R5cGVzLlRoZW1lQ29sb3JzPiA9IHRoaXMuY3VycmVudFRoZW1lU3ViamVjdC5hc09ic2VydmFibGUoKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyBJbml0aWFsaXplIHdpdGggZGVmYXVsdCB0aGVtZSBvbiBzZXJ2aWNlIGNyZWF0aW9uXG4gICAgdGhpcy5hcHBseVRoZW1lKEJyYW5kaW5nVHlwZXMuZGVmYXVsdFRoZW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBhIGNvbXBsZXRlIHRoZW1lIGNvbmZpZ3VyYXRpb24gdG8gdGhlIHJvb3QgZWxlbWVudFxuICAgKiBAcGFyYW0gdGhlbWUgLSBUaGVtZUNvbG9ycyBvYmplY3QgY29udGFpbmluZyBhbGwgY29sb3IgdmFsdWVzXG4gICAqL1xuICBhcHBseVRoZW1lKHRoZW1lOiBCcmFuZGluZ1R5cGVzLlRoZW1lQ29sb3JzKTogdm9pZCB7XG4gICAgY29uc3Qgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICBcbiAgICBPYmplY3QuZW50cmllcyh0aGVtZSkuZm9yRWFjaCgoW2NhbWVsTmFtZSwgdmFsdWVdKSA9PiB7XG4gICAgICBjb25zdCBjc3NWYXIgPSBgLS0ke3RoaXMuY2FtZWxUb0tlYmFiQ2FzZShjYW1lbE5hbWUpfWA7XG4gICAgICByb290LnN0eWxlLnNldFByb3BlcnR5KGNzc1ZhciwgU3RyaW5nKHZhbHVlKSk7XG4gICAgfSk7XG5cbiAgICAvLyBVcGRhdGUgdGhlIGN1cnJlbnQgdGhlbWUgc3ViamVjdFxuICAgIHRoaXMuY3VycmVudFRoZW1lU3ViamVjdC5uZXh0KHRoZW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBwYXJ0aWFsIHRoZW1lIHVwZGF0ZXMgKG9ubHkgc3BlY2lmaWVkIGNvbG9ycyB3aWxsIGJlIHVwZGF0ZWQpXG4gICAqIEBwYXJhbSBwYXJ0aWFsVGhlbWUgLSBQYXJ0aWFsIFRoZW1lQ29sb3JzIG9iamVjdCB3aXRoIG9ubHkgdGhlIGNvbG9ycyB0byB1cGRhdGVcbiAgICovXG4gIGFwcGx5UGFydGlhbFRoZW1lKHBhcnRpYWxUaGVtZTogUGFydGlhbDxCcmFuZGluZ1R5cGVzLlRoZW1lQ29sb3JzPik6IHZvaWQge1xuICAgIGNvbnN0IHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgXG4gICAgT2JqZWN0LmVudHJpZXMocGFydGlhbFRoZW1lKS5mb3JFYWNoKChbY2FtZWxOYW1lLCB2YWx1ZV0pID0+IHtcbiAgICAgIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGNzc1ZhciA9IGAtLSR7dGhpcy5jYW1lbFRvS2ViYWJDYXNlKGNhbWVsTmFtZSl9YDtcbiAgICAgICAgcm9vdC5zdHlsZS5zZXRQcm9wZXJ0eShjc3NWYXIsIFN0cmluZyh2YWx1ZSkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBjdXJyZW50IHRoZW1lIHdpdGggbWVyZ2VkIHZhbHVlc1xuICAgIGNvbnN0IGN1cnJlbnRUaGVtZSA9IHRoaXMuY3VycmVudFRoZW1lU3ViamVjdC52YWx1ZTtcbiAgICBjb25zdCB1cGRhdGVkVGhlbWUgPSB7IC4uLmN1cnJlbnRUaGVtZSwgLi4ucGFydGlhbFRoZW1lIH07XG4gICAgdGhpcy5jdXJyZW50VGhlbWVTdWJqZWN0Lm5leHQodXBkYXRlZFRoZW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYSBzaW5nbGUgY29sb3IgcHJvcGVydHlcbiAgICogQHBhcmFtIGNvbG9yS2V5IC0gVGhlIGNhbWVsQ2FzZSBrZXkgb2YgdGhlIGNvbG9yIHByb3BlcnR5XG4gICAqIEBwYXJhbSBjb2xvclZhbHVlIC0gVGhlIGNvbG9yIHZhbHVlIChoZXgsIHJnYiwgcmdiYSwgZXRjLilcbiAgICovXG4gIHNldENvbG9yUHJvcGVydHkoY29sb3JLZXk6IGtleW9mIEJyYW5kaW5nVHlwZXMuVGhlbWVDb2xvcnMsIGNvbG9yVmFsdWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHJvb3QgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gICAgY29uc3QgY3NzVmFyID0gYC0tJHt0aGlzLmNhbWVsVG9LZWJhYkNhc2UoY29sb3JLZXkpfWA7XG4gICAgcm9vdC5zdHlsZS5zZXRQcm9wZXJ0eShjc3NWYXIsIGNvbG9yVmFsdWUpO1xuXG4gICAgLy8gVXBkYXRlIHRoZSBjdXJyZW50IHRoZW1lXG4gICAgY29uc3QgY3VycmVudFRoZW1lID0gdGhpcy5jdXJyZW50VGhlbWVTdWJqZWN0LnZhbHVlO1xuICAgIGNvbnN0IHVwZGF0ZWRUaGVtZSA9IHsgLi4uY3VycmVudFRoZW1lLCBbY29sb3JLZXldOiBjb2xvclZhbHVlIH07XG4gICAgdGhpcy5jdXJyZW50VGhlbWVTdWJqZWN0Lm5leHQodXBkYXRlZFRoZW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGN1cnJlbnQgdGhlbWUgY29sb3JzXG4gICAqIEByZXR1cm5zIEN1cnJlbnQgVGhlbWVDb2xvcnMgb2JqZWN0XG4gICAqL1xuICBnZXRDdXJyZW50VGhlbWUoKTogQnJhbmRpbmdUeXBlcy5UaGVtZUNvbG9ycyB7XG4gICAgcmV0dXJuIHRoaXMuY3VycmVudFRoZW1lU3ViamVjdC52YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYSBzcGVjaWZpYyBjb2xvciB2YWx1ZSBmcm9tIHRoZSBjdXJyZW50IHRoZW1lXG4gICAqIEBwYXJhbSBjb2xvcktleSAtIFRoZSBjYW1lbENhc2Uga2V5IG9mIHRoZSBjb2xvciBwcm9wZXJ0eVxuICAgKiBAcmV0dXJucyBUaGUgY29sb3IgdmFsdWUgYXMgc3RyaW5nXG4gICAqL1xuICBnZXRDb2xvclByb3BlcnR5KGNvbG9yS2V5OiBrZXlvZiBCcmFuZGluZ1R5cGVzLlRoZW1lQ29sb3JzKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5jdXJyZW50VGhlbWVTdWJqZWN0LnZhbHVlW2NvbG9yS2V5XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldCB0aGVtZSB0byBkZWZhdWx0IHZhbHVlc1xuICAgKi9cbiAgcmVzZXRUb0RlZmF1bHQoKTogdm9pZCB7XG4gICAgdGhpcy5hcHBseVRoZW1lKEJyYW5kaW5nVHlwZXMuZGVmYXVsdFRoZW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYSBzcGVjaWZpYyBDU1MgY3VzdG9tIHByb3BlcnR5IGZyb20gdGhlIHJvb3QgZWxlbWVudFxuICAgKiBAcGFyYW0gY29sb3JLZXkgLSBUaGUgY2FtZWxDYXNlIGtleSBvZiB0aGUgY29sb3IgcHJvcGVydHkgdG8gcmVtb3ZlXG4gICAqL1xuICByZW1vdmVDb2xvclByb3BlcnR5KGNvbG9yS2V5OiBrZXlvZiBCcmFuZGluZ1R5cGVzLlRoZW1lQ29sb3JzKTogdm9pZCB7XG4gICAgY29uc3Qgcm9vdCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICBjb25zdCBjc3NWYXIgPSBgLS0ke3RoaXMuY2FtZWxUb0tlYmFiQ2FzZShjb2xvcktleSl9YDtcbiAgICByb290LnN0eWxlLnJlbW92ZVByb3BlcnR5KGNzc1Zhcik7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFsbCBDU1MgY3VzdG9tIHByb3BlcnRpZXMgY3VycmVudGx5IHNldCBvbiB0aGUgcm9vdCBlbGVtZW50XG4gICAqIEByZXR1cm5zIE9iamVjdCB3aXRoIENTUyB2YXJpYWJsZSBuYW1lcyBhcyBrZXlzIGFuZCB0aGVpciB2YWx1ZXNcbiAgICovXG4gIGdldEFsbENTU1ZhcmlhYmxlcygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCByb290ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgIGNvbnN0IGNvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKHJvb3QpO1xuICAgIGNvbnN0IGNzc1ZhcnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7fTtcblxuICAgIC8vIEdldCBhbGwgQ1NTIGN1c3RvbSBwcm9wZXJ0aWVzIHRoYXQgc3RhcnQgd2l0aCBvdXIgcHJlZml4XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb21wdXRlZFN0eWxlLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBwcm9wZXJ0eSA9IGNvbXB1dGVkU3R5bGVbaV07XG4gICAgICBpZiAocHJvcGVydHkuc3RhcnRzV2l0aCgnLS1icmFuZC0nKSB8fCBcbiAgICAgICAgICBwcm9wZXJ0eS5zdGFydHNXaXRoKCctLXRleHQtJykgfHwgXG4gICAgICAgICAgcHJvcGVydHkuc3RhcnRzV2l0aCgnLS1iZy0nKSB8fCBcbiAgICAgICAgICBwcm9wZXJ0eS5zdGFydHNXaXRoKCctLWJvcmRlci0nKSB8fCBcbiAgICAgICAgICBwcm9wZXJ0eS5zdGFydHNXaXRoKCctLXNoYWRvdy0nKSB8fCBcbiAgICAgICAgICBwcm9wZXJ0eS5zdGFydHNXaXRoKCctLXN0YXR1cy0nKSB8fCBcbiAgICAgICAgICBwcm9wZXJ0eS5zdGFydHNXaXRoKCctLXRlYW0tY29sb3ItJykpIHtcbiAgICAgICAgY3NzVmFyc1twcm9wZXJ0eV0gPSBjb21wdXRlZFN0eWxlLmdldFByb3BlcnR5VmFsdWUocHJvcGVydHkpLnRyaW0oKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY3NzVmFycztcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSB0aGVtZSB3aXRoIHZhbGlkYXRpb25cbiAgICogQHBhcmFtIHRoZW1lIC0gVGhlbWVDb2xvcnMgb2JqZWN0IHRvIHZhbGlkYXRlIGFuZCBhcHBseVxuICAgKiBAcmV0dXJucyBib29sZWFuIGluZGljYXRpbmcgaWYgdGhlIHRoZW1lIHdhcyBzdWNjZXNzZnVsbHkgYXBwbGllZFxuICAgKi9cbiAgYXBwbHlUaGVtZVdpdGhWYWxpZGF0aW9uKHRoZW1lOiBCcmFuZGluZ1R5cGVzLlRoZW1lQ29sb3JzKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEJhc2ljIHZhbGlkYXRpb24gLSBjaGVjayBpZiBhbGwgcmVxdWlyZWQgcHJvcGVydGllcyBleGlzdFxuICAgICAgY29uc3QgcmVxdWlyZWRLZXlzID0gT2JqZWN0LmtleXMoQnJhbmRpbmdUeXBlcy5kZWZhdWx0VGhlbWUpIGFzIChrZXlvZiBCcmFuZGluZ1R5cGVzLlRoZW1lQ29sb3JzKVtdO1xuICAgICAgY29uc3QgdGhlbWVLZXlzID0gT2JqZWN0LmtleXModGhlbWUpIGFzIChrZXlvZiBCcmFuZGluZ1R5cGVzLlRoZW1lQ29sb3JzKVtdO1xuICAgICAgXG4gICAgICBjb25zdCBtaXNzaW5nS2V5cyA9IHJlcXVpcmVkS2V5cy5maWx0ZXIoa2V5ID0+ICF0aGVtZUtleXMuaW5jbHVkZXMoa2V5KSk7XG4gICAgICBcbiAgICAgIGlmIChtaXNzaW5nS2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIGNvbnNvbGUud2FybignRHluYW1pY1RoZW1lU2VydmljZTogTWlzc2luZyB0aGVtZSBwcm9wZXJ0aWVzOicsIG1pc3NpbmdLZXlzKTtcbiAgICAgICAgLy8gQXBwbHkgd2l0aCBkZWZhdWx0IHZhbHVlcyBmb3IgbWlzc2luZyBrZXlzXG4gICAgICAgIGNvbnN0IGNvbXBsZXRlVGhlbWUgPSB7IC4uLkJyYW5kaW5nVHlwZXMuZGVmYXVsdFRoZW1lLCAuLi50aGVtZSB9O1xuICAgICAgICB0aGlzLmFwcGx5VGhlbWUoY29tcGxldGVUaGVtZSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hcHBseVRoZW1lKHRoZW1lKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdEeW5hbWljVGhlbWVTZXJ2aWNlOiBFcnJvciBhcHBseWluZyB0aGVtZTonLCBlcnJvcik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnQgY2FtZWxDYXNlIHRvIGtlYmFiLWNhc2UgZm9yIENTUyBjdXN0b20gcHJvcGVydGllc1xuICAgKiBAcGFyYW0gY2FtZWxDYXNlIC0gVGhlIGNhbWVsQ2FzZSBzdHJpbmcgdG8gY29udmVydFxuICAgKiBAcmV0dXJucyBrZWJhYi1jYXNlIHN0cmluZ1xuICAgKi9cbiAgcHJpdmF0ZSBjYW1lbFRvS2ViYWJDYXNlKGNhbWVsQ2FzZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gY2FtZWxDYXNlLnJlcGxhY2UoLyhbQS1aXSkvZywgJy0kMScpLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydCBrZWJhYi1jYXNlIHRvIGNhbWVsQ2FzZVxuICAgKiBAcGFyYW0ga2ViYWJDYXNlIC0gVGhlIGtlYmFiLWNhc2Ugc3RyaW5nIHRvIGNvbnZlcnRcbiAgICogQHJldHVybnMgY2FtZWxDYXNlIHN0cmluZ1xuICAgKi9cbiAgcHJpdmF0ZSBrZWJhYlRvQ2FtZWxDYXNlKGtlYmFiQ2FzZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4ga2ViYWJDYXNlLnJlcGxhY2UoLy0oW2Etel0pL2csIChtYXRjaCwgbGV0dGVyKSA9PiBsZXR0ZXIudG9VcHBlckNhc2UoKSk7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIGEgdGhlbWUgcHJlc2V0IGZyb20gY3VycmVudCBhcHBsaWVkIHRoZW1lXG4gICAqIEBwYXJhbSBwcmVzZXROYW1lIC0gTmFtZSBmb3IgdGhlIHRoZW1lIHByZXNldFxuICAgKiBAcmV0dXJucyBUaGVtZSBwcmVzZXQgb2JqZWN0XG4gICAqL1xuICBjcmVhdGVUaGVtZVByZXNldChwcmVzZXROYW1lOiBzdHJpbmcpOiB7IG5hbWU6IHN0cmluZzsgdGhlbWU6IEJyYW5kaW5nVHlwZXMuVGhlbWVDb2xvcnMgfSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHByZXNldE5hbWUsXG4gICAgICB0aGVtZTogeyAuLi50aGlzLmdldEN1cnJlbnRUaGVtZSgpIH1cbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEV4cG9ydCBjdXJyZW50IHRoZW1lIGFzIEpTT04gc3RyaW5nXG4gICAqIEByZXR1cm5zIEpTT04gc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGN1cnJlbnQgdGhlbWVcbiAgICovXG4gIGV4cG9ydFRoZW1lQXNKU09OKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHRoaXMuZ2V0Q3VycmVudFRoZW1lKCksIG51bGwsIDIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCB0aGVtZSBmcm9tIEpTT04gc3RyaW5nXG4gICAqIEBwYXJhbSBqc29uU3RyaW5nIC0gSlNPTiBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlbWVcbiAgICogQHJldHVybnMgYm9vbGVhbiBpbmRpY2F0aW5nIHN1Y2Nlc3NcbiAgICovXG4gIGltcG9ydFRoZW1lRnJvbUpTT04oanNvblN0cmluZzogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHRoZW1lID0gSlNPTi5wYXJzZShqc29uU3RyaW5nKSBhcyBCcmFuZGluZ1R5cGVzLlRoZW1lQ29sb3JzO1xuICAgICAgcmV0dXJuIHRoaXMuYXBwbHlUaGVtZVdpdGhWYWxpZGF0aW9uKHRoZW1lKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRHluYW1pY1RoZW1lU2VydmljZTogRXJyb3IgaW1wb3J0aW5nIHRoZW1lIGZyb20gSlNPTjonLCBlcnJvcik7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export * from "./public_api";
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9taXMtY29tcG9uZW50cy9keW5hbWljLXRoZW1lL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSBcIi4vcHVibGljX2FwaVwiOyJdfQ==
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlzLWNyeXN0YWwtZGVzaWduLXN5c3RlbS1keW5hbWljLXRoZW1lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbWlzLWNvbXBvbmVudHMvZHluYW1pYy10aGVtZS9taXMtY3J5c3RhbC1kZXNpZ24tc3lzdGVtLWR5bmFtaWMtdGhlbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { BrandingTypes } from './branding.types';
|
|
2
|
+
export { DynamicThemeService } from './dynamic-theme.service';
|
|
3
|
+
export { DynamicThemeModule } from './dynamic-theme.module';
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL21pcy1jb21wb25lbnRzL2R5bmFtaWMtdGhlbWUvcHVibGljX2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBCcmFuZGluZ1R5cGVzIH0gZnJvbSAnLi9icmFuZGluZy50eXBlcyc7XG5leHBvcnQgeyBEeW5hbWljVGhlbWVTZXJ2aWNlIH0gZnJvbSAnLi9keW5hbWljLXRoZW1lLnNlcnZpY2UnO1xuZXhwb3J0IHsgRHluYW1pY1RoZW1lTW9kdWxlIH0gZnJvbSAnLi9keW5hbWljLXRoZW1lLm1vZHVsZSc7Il19
|