@ng-formworks/cssframework 17.2.7 → 18.0.0

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.
@@ -0,0 +1,264 @@
1
+ import { Component, Input, ViewEncapsulation } from '@angular/core';
2
+ import { addClasses, inArray } from '@ng-formworks/core';
3
+ import _, { cloneDeep, map } from 'lodash';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@ng-formworks/core";
6
+ import * as i2 from "./css-framework.service";
7
+ import * as i3 from "@angular/common";
8
+ export class CssFrameworkComponent {
9
+ //TODO-move to ng-formworks/core utility.functions.ts
10
+ applyCssClasses(type, widgetOptions, styleOptions) {
11
+ //console.log("applyCssClasses for type:"+type);
12
+ let cssClasses = this.widgetStyles[type];
13
+ if (!cssClasses || _.isEmpty(cssClasses)) {
14
+ cssClasses = this.widgetStyles.default;
15
+ }
16
+ Object.keys(cssClasses).forEach(catName => {
17
+ let classList = cssClasses[catName];
18
+ if (classList.length) {
19
+ widgetOptions[catName] = addClasses(widgetOptions[catName], classList);
20
+ }
21
+ if (styleOptions) {
22
+ widgetOptions[catName] = addClasses(widgetOptions[catName], styleOptions);
23
+ }
24
+ });
25
+ }
26
+ flattenWidgetStyles(wstyles) {
27
+ var flattened = {};
28
+ let ignore = ['__themes__'];
29
+ Object.keys(wstyles).forEach(wkey => {
30
+ let wstyle = wstyles[wkey];
31
+ if (ignore.indexOf(wkey) >= 0) {
32
+ flattened[wkey] = wstyle;
33
+ return;
34
+ }
35
+ if (_.isArray(wstyle)) {
36
+ flattened[wkey] = wstyle.join(" ");
37
+ }
38
+ if (_.isObject(wstyle)) { //is csscategories
39
+ flattened[wkey] = flattened[wkey] || {};
40
+ Object.keys(wstyle).forEach(catName => {
41
+ let cssCat = wstyle[catName];
42
+ if (_.isArray(cssCat)) {
43
+ flattened[wkey][catName] = cssCat.join(" ");
44
+ }
45
+ else {
46
+ flattened[wkey][catName] = cssCat;
47
+ }
48
+ });
49
+ }
50
+ if (_.isString(wstyle)) {
51
+ flattened[wkey] = wstyle;
52
+ }
53
+ });
54
+ return flattened;
55
+ }
56
+ constructor(changeDetector, jsf, jsfFLService, cssFWService
57
+ /*@Inject(CSS_FRAMEWORK_CFG ) fwcfg: css_fw.frameworkcfg*/
58
+ ) {
59
+ this.changeDetector = changeDetector;
60
+ this.jsf = jsf;
61
+ this.jsfFLService = jsfFLService;
62
+ this.cssFWService = cssFWService;
63
+ this.frameworkInitialized = false;
64
+ this.formControl = null;
65
+ this.debugOutput = '';
66
+ this.debug = '';
67
+ this.parentArray = null;
68
+ this.isOrderable = false;
69
+ this.defaultStyling = {
70
+ array: {},
71
+ default: { fieldHtmlClass: "cssfw-form-control" },
72
+ __themes__: [{ name: 'notheme', text: 'None' }],
73
+ __remove_item__: "cssfw-remove-item",
74
+ __array_item_nonref__: {
75
+ "htmlClass": "cssfw-array-item-nonref"
76
+ },
77
+ __active__: { activeClass: "cssfw-active" },
78
+ __array__: { htmlClass: "cssfw-array" },
79
+ __control_label__: { labelHtmlClass: "cssfw-control-label" },
80
+ __form_group__: { htmlClass: "cssfw-form-group" },
81
+ __field_addon_left__: "cssfw-addon-left",
82
+ __field_addon_right__: "cssfw-addon-right",
83
+ __help_block__: "cssfw-help-block",
84
+ __required_asterisk__: "cssfw-required-astersisk",
85
+ __screen_reader__: "cssfw-screen-reader"
86
+ };
87
+ let activeFramework = this.jsfFLService.activeFramework;
88
+ let fwcfg = activeFramework.config || {};
89
+ this.widgetStyles = Object.assign(this.defaultStyling, fwcfg.widgetstyles);
90
+ let defaultTheme = this.widgetStyles.__themes__[0];
91
+ let defaultThemeName = cssFWService.activeRequestedTheme || defaultTheme.name;
92
+ this.theme = this.options?.theme || defaultThemeName;
93
+ this.frameworkThemeSubs = cssFWService.frameworkTheme$.subscribe(newTheme => {
94
+ this.theme = newTheme;
95
+ });
96
+ }
97
+ ngOnDestroy() {
98
+ this.frameworkThemeSubs.unsubscribe();
99
+ this.frameworkThemeSubs = null;
100
+ }
101
+ get showRemoveButton() {
102
+ if (!this.options.removable || this.options.readonly ||
103
+ this.layoutNode.type === '$ref') {
104
+ return false;
105
+ }
106
+ if (this.layoutNode.recursiveReference) {
107
+ return true;
108
+ }
109
+ if (!this.layoutNode.arrayItem || !this.parentArray) {
110
+ return false;
111
+ }
112
+ // If array length <= minItems, don't allow removing any items
113
+ return this.parentArray.items.length - 1 <= this.parentArray.options.minItems ? false :
114
+ // For removable list items, allow removing any item
115
+ this.layoutNode.arrayItemType === 'list' ? true :
116
+ // For removable tuple items, only allow removing last item in list
117
+ this.layoutIndex[this.layoutIndex.length - 1] === this.parentArray.items.length - 2;
118
+ }
119
+ ngOnInit() {
120
+ this.initializeFramework();
121
+ if (this.layoutNode.arrayItem && this.layoutNode.type !== '$ref') {
122
+ this.parentArray = this.jsf.getParentNode(this);
123
+ if (this.parentArray) {
124
+ this.isOrderable = this.layoutNode.arrayItemType === 'list' &&
125
+ !this.options.readonly && this.parentArray.options.orderable;
126
+ }
127
+ }
128
+ }
129
+ ngOnChanges() {
130
+ if (!this.frameworkInitialized) {
131
+ this.initializeFramework();
132
+ }
133
+ }
134
+ initializeFramework() {
135
+ if (this.layoutNode) {
136
+ this.options = cloneDeep(this.layoutNode.options);
137
+ this.widgetLayoutNode = {
138
+ ...this.layoutNode,
139
+ options: cloneDeep(this.layoutNode.options)
140
+ };
141
+ this.widgetOptions = this.widgetLayoutNode.options;
142
+ this.formControl = this.jsf.getFormControl(this);
143
+ this.options.isInputWidget = inArray(this.layoutNode.type, [
144
+ 'button', 'checkbox', 'checkboxes-inline', 'checkboxes', 'color',
145
+ 'date', 'datetime-local', 'datetime', 'email', 'file', 'hidden',
146
+ 'image', 'integer', 'month', 'number', 'password', 'radio',
147
+ 'radiobuttons', 'radios-inline', 'radios', 'range', 'reset', 'search',
148
+ 'select', 'submit', 'tel', 'text', 'textarea', 'time', 'url', 'week'
149
+ ]);
150
+ this.options.title = this.setTitle();
151
+ this.options.htmlClass =
152
+ addClasses(this.options.htmlClass, 'schema-form-' + this.layoutNode.type);
153
+ if (this.layoutNode.type === 'array') {
154
+ this.options.htmlClass = addClasses(this.options.htmlClass, this.widgetStyles.__array__.htmlClass);
155
+ }
156
+ else if (this.layoutNode.arrayItem && this.layoutNode.type !== '$ref') {
157
+ this.options.htmlClass = addClasses(this.options.htmlClass, this.widgetStyles.__array_item_nonref__.htmlClass);
158
+ }
159
+ else {
160
+ this.options.htmlClass = addClasses(this.options.htmlClass, this.widgetStyles.__form_group__.htmlClass);
161
+ }
162
+ /*
163
+ this.options.htmlClass =
164
+ this.layoutNode.type === 'array' ?
165
+ addClasses(this.options.htmlClass, ['border','shadow-md','p-1']) :
166
+ this.layoutNode.arrayItem && this.layoutNode.type !== '$ref' ?
167
+ addClasses(this.options.htmlClass, ['border','shadow-md','p-1']) :
168
+ addClasses(this.options.htmlClass, 'mb-1');
169
+ */
170
+ /*
171
+ this.options.htmlClass =
172
+ this.layoutNode.type === 'array' ?
173
+ addClasses(this.options.htmlClass, this.widgetStyles.array.htmlClass):
174
+ this.layoutNode.arrayItem && this.layoutNode.type !== '$ref' ?
175
+ addClasses(this.options.htmlClass, this.widgetStyles.__array_item_nonref__.htmlClass):
176
+ addClasses(this.options.htmlClass, this.widgetStyles.__form_group__.htmlClass);
177
+ */
178
+ this.widgetOptions.htmlClass = '';
179
+ this.options.labelHtmlClass =
180
+ addClasses(this.options.labelHtmlClass, this.widgetStyles.__control_label__.labelHtmlClass);
181
+ this.widgetOptions.activeClass =
182
+ addClasses(this.widgetOptions.activeClass, this.widgetStyles.__active__.activeClass);
183
+ this.options.fieldAddonLeft =
184
+ this.options.fieldAddonLeft || this.options.prepend;
185
+ this.options.fieldAddonRight =
186
+ this.options.fieldAddonRight || this.options.append;
187
+ // Add asterisk to titles if required
188
+ if (this.options.title && this.layoutNode.type !== 'tab' &&
189
+ !this.options.notitle && this.options.required &&
190
+ !this.options.title.includes('*')) {
191
+ let required_asterisk_class = this.widgetStyles.__required_asterisk__ || 'text-danger';
192
+ this.options.title += ` <strong class="${required_asterisk_class}">*</strong>`;
193
+ }
194
+ if (this.layoutNode.type == 'optionfieldset') {
195
+ this.options.messageLocation = 'top';
196
+ }
197
+ // Set miscelaneous styles and settings for each control type
198
+ this.applyCssClasses(this.layoutNode.type, this.widgetOptions, this.options.style);
199
+ if (this.formControl) {
200
+ this.updateHelpBlock(this.formControl.status);
201
+ this.formControl.statusChanges.subscribe(status => this.updateHelpBlock(status));
202
+ if (this.options.debug) {
203
+ const vars = [];
204
+ this.debugOutput = map(vars, thisVar => JSON.stringify(thisVar, null, 2)).join('\n');
205
+ }
206
+ }
207
+ this.frameworkInitialized = true;
208
+ }
209
+ }
210
+ updateHelpBlock(status) {
211
+ this.options.helpBlock = status === 'INVALID' &&
212
+ this.options.enableErrorState && this.formControl.errors &&
213
+ (this.formControl.dirty || this.options.feedbackOnRender) ?
214
+ this.jsf.formatErrors(this.formControl.errors, this.options.validationMessages) :
215
+ this.options.description || this.options.help || null;
216
+ }
217
+ setTitle() {
218
+ switch (this.layoutNode.type) {
219
+ case 'button':
220
+ case 'checkbox':
221
+ case 'section':
222
+ case 'help':
223
+ case 'msg':
224
+ case 'submit':
225
+ case 'message':
226
+ case 'tabarray':
227
+ case 'tabs':
228
+ case '$ref':
229
+ return null;
230
+ case 'advancedfieldset':
231
+ this.widgetOptions.expandable = true;
232
+ this.widgetOptions.title = 'Advanced options';
233
+ return null;
234
+ case 'authfieldset':
235
+ this.widgetOptions.expandable = true;
236
+ this.widgetOptions.title = 'Authentication settings';
237
+ return null;
238
+ case 'fieldset':
239
+ this.widgetOptions.title = this.options.title;
240
+ return null;
241
+ default:
242
+ this.widgetOptions.title = null;
243
+ return this.jsf.setItemTitle(this);
244
+ }
245
+ }
246
+ removeItem() {
247
+ this.jsf.removeItem(this);
248
+ }
249
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CssFrameworkComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.JsonSchemaFormService }, { token: i1.FrameworkLibraryService }, { token: i2.CssframeworkService }], target: i0.ɵɵFactoryTarget.Component }); }
250
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: CssFrameworkComponent, selector: "css-framework", inputs: { layoutNode: "layoutNode", layoutIndex: "layoutIndex", dataIndex: "dataIndex", widgetStyles: "widgetStyles" }, usesOnChanges: true, ngImport: i0, template: "<div [attr.data-bs-theme]=\"theme\" [attr.data-theme]=\"theme\" [class]=\"options?.htmlClass || ''\" [class.has-feedback]=\"options?.feedback && options?.isInputWidget &&\r\n (formControl?.dirty || options?.feedbackOnRender)\" [class.has-error]=\"options?.enableErrorState && formControl?.errors &&\r\n (formControl?.dirty || options?.feedbackOnRender)\" [class.has-success]=\"options?.enableSuccessState && !formControl?.errors &&\r\n (formControl?.dirty || options?.feedbackOnRender)\">\r\n\r\n <button *ngIf=\"showRemoveButton\" [class]=\"widgetStyles.__remove_item__\" type=\"button\" (click)=\"removeItem()\">\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span [class]=\"widgetStyles.__screen_reader__\">Close</span>\r\n </button>\r\n <div *ngIf=\"options?.messageLocation === 'top'\">\r\n <p *ngIf=\"options?.helpBlock\" [class]=\"widgetStyles.__help_block__\" [innerHTML]=\"options?.helpBlock\"></p>\r\n </div>\r\n\r\n <label *ngIf=\"options?.title && layoutNode?.type !== 'tab'\" [attr.for]=\"'control' + layoutNode?._id\" [class]=\"options?.labelHtmlClass || ''\" [class.sr-only]=\"options?.notitle\" [innerHTML]=\"options?.title\"></label>\r\n <p *ngIf=\"layoutNode?.type === 'submit' && jsf?.formOptions?.fieldsRequired\">\r\n <strong [class]=\"widgetStyles.__required_asterisk__\">*</strong> = required fields\r\n </p>\r\n <div [class.input-group]=\"options?.fieldAddonLeft || options?.fieldAddonRight\">\r\n <span *ngIf=\"options?.fieldAddonLeft\" [class]=\"widgetStyles.__field_addon_left__\" [innerHTML]=\"options?.fieldAddonLeft\"></span>\r\n\r\n <select-widget-widget [layoutNode]=\"widgetLayoutNode\" [dataIndex]=\"dataIndex\" [layoutIndex]=\"layoutIndex\"></select-widget-widget>\r\n\r\n <span *ngIf=\"options?.fieldAddonRight\" [class]=\"widgetStyles.__field_addon_right__\" [innerHTML]=\"options?.fieldAddonRight\"></span>\r\n </div>\r\n\r\n <span *ngIf=\"options?.feedback && options?.isInputWidget &&\r\n !options?.fieldAddonRight && !layoutNode.arrayItem &&\r\n (formControl?.dirty || options?.feedbackOnRender)\" [class.glyphicon-ok]=\"options?.enableSuccessState && !formControl?.errors\" [class.glyphicon-remove]=\"options?.enableErrorState && formControl?.errors\" aria-hidden=\"true\" class=\"form-control-feedback glyphicon\"></span>\r\n <div *ngIf=\"options?.messageLocation !== 'top'\">\r\n <p *ngIf=\"options?.helpBlock\" [class]=\"widgetStyles.__help_block__\" [innerHTML]=\"options?.helpBlock\"></p>\r\n </div>\r\n\r\n</div>\r\n\r\n<div *ngIf=\"debug && debugOutput\">debug:\r\n <pre>{{debugOutput}}</pre>\r\n</div>\r\n\r\n<!--\r\n<div class=\"btn input input-bordered input-primary w-full max-w-xs\r\nbtn-neutral\r\nbtn-primary\r\nbtn-secondary\r\nbtn-accent\r\nbtn-info\r\nbtn-success\r\nbtn-warning\r\nbtn-error\r\nbtn-ghost\r\nbtn-link\r\nbtn-outline\r\nbtn-active\r\nbtn-disabled\r\nglass\r\nno-animation\r\nbtn-lg\r\nbtn-md\r\nbtn-sm\r\nbtn-xs\r\nbtn-wide\r\nbtn-block\r\nbtn-circle\r\nbtn-square\r\nhidden\r\n\">defs al</div>\r\n-->\r\n<!--<input type=\"text\" placeholder=\"Type here\" class=\"input input-bordered input-primary w-full max-w-xs\" />-->", styles: [":host ::ng-deep .list-group-item .form-control-feedback{top:40px}:host ::ng-deep .checkbox,:host ::ng-deep .radio{margin-top:0;margin-bottom:0}:host ::ng-deep .checkbox-inline,:host ::ng-deep .checkbox-inline+.checkbox-inline,:host ::ng-deep .checkbox-inline+.radio-inline,:host ::ng-deep .radio-inline,:host ::ng-deep .radio-inline+.radio-inline,:host ::ng-deep .radio-inline+.checkbox-inline{margin-left:0;margin-right:10px}:host ::ng-deep .checkbox-inline:last-child,:host ::ng-deep .radio-inline:last-child{margin-right:0}:host ::ng-deep .ng-invalid.ng-touched{border:1px solid #f44336}.checkbox-inline,.checkbox-inline+.checkbox-inline,.checkbox-inline+.radio-inline,.radio-inline,.radio-inline+.radio-inline,.radio-inline+.checkbox-inline{margin-left:0;margin-right:10px}.checkbox-inline:last-child,.radio-inline:last-child{margin-right:0}.ng-invalid.ng-touched{border:1px solid #f44336}\n"], dependencies: [{ kind: "component", type: i1.SelectWidgetComponent, selector: "select-widget-widget", inputs: ["layoutNode", "layoutIndex", "dataIndex"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None }); }
251
+ }
252
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CssFrameworkComponent, decorators: [{
253
+ type: Component,
254
+ args: [{ selector: 'css-framework', encapsulation: ViewEncapsulation.None, template: "<div [attr.data-bs-theme]=\"theme\" [attr.data-theme]=\"theme\" [class]=\"options?.htmlClass || ''\" [class.has-feedback]=\"options?.feedback && options?.isInputWidget &&\r\n (formControl?.dirty || options?.feedbackOnRender)\" [class.has-error]=\"options?.enableErrorState && formControl?.errors &&\r\n (formControl?.dirty || options?.feedbackOnRender)\" [class.has-success]=\"options?.enableSuccessState && !formControl?.errors &&\r\n (formControl?.dirty || options?.feedbackOnRender)\">\r\n\r\n <button *ngIf=\"showRemoveButton\" [class]=\"widgetStyles.__remove_item__\" type=\"button\" (click)=\"removeItem()\">\r\n <span aria-hidden=\"true\">&times;</span>\r\n <span [class]=\"widgetStyles.__screen_reader__\">Close</span>\r\n </button>\r\n <div *ngIf=\"options?.messageLocation === 'top'\">\r\n <p *ngIf=\"options?.helpBlock\" [class]=\"widgetStyles.__help_block__\" [innerHTML]=\"options?.helpBlock\"></p>\r\n </div>\r\n\r\n <label *ngIf=\"options?.title && layoutNode?.type !== 'tab'\" [attr.for]=\"'control' + layoutNode?._id\" [class]=\"options?.labelHtmlClass || ''\" [class.sr-only]=\"options?.notitle\" [innerHTML]=\"options?.title\"></label>\r\n <p *ngIf=\"layoutNode?.type === 'submit' && jsf?.formOptions?.fieldsRequired\">\r\n <strong [class]=\"widgetStyles.__required_asterisk__\">*</strong> = required fields\r\n </p>\r\n <div [class.input-group]=\"options?.fieldAddonLeft || options?.fieldAddonRight\">\r\n <span *ngIf=\"options?.fieldAddonLeft\" [class]=\"widgetStyles.__field_addon_left__\" [innerHTML]=\"options?.fieldAddonLeft\"></span>\r\n\r\n <select-widget-widget [layoutNode]=\"widgetLayoutNode\" [dataIndex]=\"dataIndex\" [layoutIndex]=\"layoutIndex\"></select-widget-widget>\r\n\r\n <span *ngIf=\"options?.fieldAddonRight\" [class]=\"widgetStyles.__field_addon_right__\" [innerHTML]=\"options?.fieldAddonRight\"></span>\r\n </div>\r\n\r\n <span *ngIf=\"options?.feedback && options?.isInputWidget &&\r\n !options?.fieldAddonRight && !layoutNode.arrayItem &&\r\n (formControl?.dirty || options?.feedbackOnRender)\" [class.glyphicon-ok]=\"options?.enableSuccessState && !formControl?.errors\" [class.glyphicon-remove]=\"options?.enableErrorState && formControl?.errors\" aria-hidden=\"true\" class=\"form-control-feedback glyphicon\"></span>\r\n <div *ngIf=\"options?.messageLocation !== 'top'\">\r\n <p *ngIf=\"options?.helpBlock\" [class]=\"widgetStyles.__help_block__\" [innerHTML]=\"options?.helpBlock\"></p>\r\n </div>\r\n\r\n</div>\r\n\r\n<div *ngIf=\"debug && debugOutput\">debug:\r\n <pre>{{debugOutput}}</pre>\r\n</div>\r\n\r\n<!--\r\n<div class=\"btn input input-bordered input-primary w-full max-w-xs\r\nbtn-neutral\r\nbtn-primary\r\nbtn-secondary\r\nbtn-accent\r\nbtn-info\r\nbtn-success\r\nbtn-warning\r\nbtn-error\r\nbtn-ghost\r\nbtn-link\r\nbtn-outline\r\nbtn-active\r\nbtn-disabled\r\nglass\r\nno-animation\r\nbtn-lg\r\nbtn-md\r\nbtn-sm\r\nbtn-xs\r\nbtn-wide\r\nbtn-block\r\nbtn-circle\r\nbtn-square\r\nhidden\r\n\">defs al</div>\r\n-->\r\n<!--<input type=\"text\" placeholder=\"Type here\" class=\"input input-bordered input-primary w-full max-w-xs\" />-->", styles: [":host ::ng-deep .list-group-item .form-control-feedback{top:40px}:host ::ng-deep .checkbox,:host ::ng-deep .radio{margin-top:0;margin-bottom:0}:host ::ng-deep .checkbox-inline,:host ::ng-deep .checkbox-inline+.checkbox-inline,:host ::ng-deep .checkbox-inline+.radio-inline,:host ::ng-deep .radio-inline,:host ::ng-deep .radio-inline+.radio-inline,:host ::ng-deep .radio-inline+.checkbox-inline{margin-left:0;margin-right:10px}:host ::ng-deep .checkbox-inline:last-child,:host ::ng-deep .radio-inline:last-child{margin-right:0}:host ::ng-deep .ng-invalid.ng-touched{border:1px solid #f44336}.checkbox-inline,.checkbox-inline+.checkbox-inline,.checkbox-inline+.radio-inline,.radio-inline,.radio-inline+.radio-inline,.radio-inline+.checkbox-inline{margin-left:0;margin-right:10px}.checkbox-inline:last-child,.radio-inline:last-child{margin-right:0}.ng-invalid.ng-touched{border:1px solid #f44336}\n"] }]
255
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.JsonSchemaFormService }, { type: i1.FrameworkLibraryService }, { type: i2.CssframeworkService }], propDecorators: { layoutNode: [{
256
+ type: Input
257
+ }], layoutIndex: [{
258
+ type: Input
259
+ }], dataIndex: [{
260
+ type: Input
261
+ }], widgetStyles: [{
262
+ type: Input
263
+ }] } });
264
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzLWZyYW1ld29yay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1mb3Jtd29ya3MtY3NzZnJhbWV3b3JrL3NyYy9saWIvY3NzLWZyYW1ld29yay5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1mb3Jtd29ya3MtY3NzZnJhbWV3b3JrL3NyYy9saWIvY3NzLWZyYW1ld29yay5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFNBQVMsRUFBRSxLQUFLLEVBQWdDLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JILE9BQU8sRUFBa0QsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3pHLE9BQU8sQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLFFBQVEsQ0FBQzs7Ozs7QUFXM0MsTUFBTSxPQUFPLHFCQUFxQjtJQW9CaEMscURBQXFEO0lBQ3JELGVBQWUsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLFlBQVk7UUFDL0MsZ0RBQWdEO1FBQ2hELElBQUksVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFHLENBQUM7WUFDMUMsVUFBVSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDO1FBQ3pDLENBQUM7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUN4QyxJQUFJLFNBQVMsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7WUFFcEMsSUFBSSxTQUFTLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ3JCLGFBQWEsQ0FBQyxPQUFPLENB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LEdBQUcsSUFBSSxDQUFDO2dCQUNyQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyx5QkFBeUIsQ0FBQztnQkFDckQsT0FBTyxJQUFJLENBQUM7WUFDZCxLQUFLLFVBQVU7Z0JBQ2IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQzlDLE9BQU8sSUFBSSxDQUFDO1lBQ2Q7Z0JBQ0UsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO2dCQUNoQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7SUFDSCxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7OEdBalNVLHFCQUFxQjtrR0FBckIscUJBQXFCLGtNQ2JsQywwcEdBa0UrRzs7MkZEckRsRyxxQkFBcUI7a0JBTmpDLFNBQVM7K0JBQ0UsZUFBZSxpQkFHVixpQkFBaUIsQ0FBQyxJQUFJO2tNQVk1QixVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFFRyxZQUFZO3NCQUFwQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5wdXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBPbkluaXQsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZyYW1ld29ya0xpYnJhcnlTZXJ2aWNlLCBKc29uU2NoZW1hRm9ybVNlcnZpY2UsIGFkZENsYXNzZXMsIGluQXJyYXkgfSBmcm9tICdAbmctZm9ybXdvcmtzL2NvcmUnO1xyXG5pbXBvcnQgXywgeyBjbG9uZURlZXAsIG1hcCB9IGZyb20gJ2xvZGFzaCc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBjc3NfZncgfSBmcm9tICcuL2Nzcy1mcmFtZXdvcmsuZGVmcyc7XHJcbmltcG9ydCB7IENzc2ZyYW1ld29ya1NlcnZpY2UgfSBmcm9tICcuL2Nzcy1mcmFtZXdvcmsuc2VydmljZSc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2Nzcy1mcmFtZXdvcmsnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9jc3MtZnJhbWV3b3JrLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jc3MtZnJhbWV3b3JrLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3NzRnJhbWV3b3JrQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsT25EZXN0cm95IHtcclxuICBmcmFtZXdvcmtJbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gIHdpZGdldE9wdGlvbnM6IGFueTsgLy8gT3B0aW9ucyBwYXNzZWQgdG8gY2hpbGQgd2lkZ2V0XHJcbiAgd2lkZ2V0TGF5b3V0Tm9kZTogYW55OyAvLyBsYXlvdXROb2RlIHBhc3NlZCB0byBjaGlsZCB3aWRnZXRcclxuICBvcHRpb25zOiBhbnk7IC8vIE9wdGlvbnMgdXNlZCBpbiB0aGlzIGZyYW1ld29ya1xyXG4gIGZvcm1Db250cm9sOiBhbnkgPSBudWxsO1xyXG4gIGRlYnVnT3V0cHV0OiBhbnkgPSAnJztcclxuICBkZWJ1ZzogYW55ID0gJyc7XHJcbiAgcGFyZW50QXJyYXk6IGFueSA9IG51bGw7XHJcbiAgaXNPcmRlcmFibGUgPSBmYWxzZTtcclxuICBASW5wdXQoKSBsYXlvdXROb2RlOiBhbnk7XHJcbiAgQElucHV0KCkgbGF5b3V0SW5kZXg6IG51bWJlcltdO1xyXG4gIEBJbnB1dCgpIGRhdGFJbmRleDogbnVtYmVyW107XHJcblxyXG4gIEBJbnB1dCgpIHdpZGdldFN0eWxlczogY3NzX2Z3LndpZGdldHN0eWxlcztcclxuXHJcblxyXG5cclxuXHJcblxyXG4gIC8vVE9ETy1tb3ZlIHRvIG5nLWZvcm13b3Jrcy9jb3JlIHV0aWxpdHkuZnVuY3Rpb25zLnRzXHJcbiAgYXBwbHlDc3NDbGFzc2VzKHR5cGUsIHdpZGdldE9wdGlvbnMsIHN0eWxlT3B0aW9ucykge1xyXG4gICAgLy9jb25zb2xlLmxvZyhcImFwcGx5Q3NzQ2xhc3NlcyBmb3IgdHlwZTpcIit0eXBlKTtcclxuICAgIGxldCBjc3NDbGFzc2VzID0gdGhpcy53aWRnZXRTdHlsZXNbdHlwZV07XHJcbiAgICBpZiAoIWNzc0NsYXNzZXMgfHwgXy5pc0VtcHR5KGNzc0NsYXNzZXMpICkge1xyXG4gICAgICBjc3NDbGFzc2VzID0gdGhpcy53aWRnZXRTdHlsZXMuZGVmYXVsdDtcclxuICAgIH1cclxuICAgIE9iamVjdC5rZXlzKGNzc0NsYXNzZXMpLmZvckVhY2goY2F0TmFtZSA9PiB7XHJcbiAgICAgIGxldCBjbGFzc0xpc3QgPSBjc3NDbGFzc2VzW2NhdE5hbWVdO1xyXG5cclxuICAgICAgaWYgKGNsYXNzTGlzdC5sZW5ndGgpIHtcclxuICAgICAgICB3aWRnZXRPcHRpb25zW2NhdE5hbWVdID0gYWRkQ2xhc3Nlcyh3aWRnZXRPcHRpb25zW2NhdE5hbWVdLCBjbGFzc0xpc3QpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChzdHlsZU9wdGlvbnMpIHtcclxuICAgICAgICB3aWRnZXRPcHRpb25zW2NhdE5hbWVdID0gYWRkQ2xhc3Nlcyh3aWRnZXRPcHRpb25zW2NhdE5hbWVdLCBzdHlsZU9wdGlvbnMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGZsYXR0ZW5XaWRnZXRTdHlsZXMod3N0eWxlczpjc3NfZncud2lkZ2V0c3R5bGVzKXtcclxuICAgIHZhciBmbGF0dGVuZWQ6YW55PXt9O1xyXG4gICAgbGV0IGlnbm9yZT1bJ19fdGhlbWVzX18nXTtcclxuICAgIE9iamVjdC5rZXlzKHdzdHlsZXMpLmZvckVhY2god2tleT0+e1xyXG4gICAgICBsZXQgd3N0eWxlPXdzdHlsZXNbd2tleV07XHJcbiAgICAgIGlmKGlnbm9yZS5pbmRleE9mKHdrZXkpPj0wKXtcclxuICAgICAgICBmbGF0dGVuZWRbd2tleV09d3N0eWxlO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZihfLmlzQXJyYXkod3N0eWxlKSl7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZmxhdHRlbmVkW3drZXldPXdzdHlsZS5qb2luKFwiIFwiKTtcclxuICAgICAgfVxyXG4gICAgICBpZihfLmlzT2JqZWN0KHdzdHlsZSkpey8vaXMgY3NzY2F0ZWdvcmllc1xyXG4gICAgICAgICAgZmxhdHRlbmVkW3drZXldPWZsYXR0ZW5lZFt3a2V5XXx8e307XHJcbiAgICAgICAgT2JqZWN0LmtleXMod3N0eWxlKS5mb3JFYWNoKGNhdE5hbWU9PntcclxuICAgICAgICAgIGxldCBjc3NDYXQ9d3N0eWxlW2NhdE5hbWVdO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICBpZihfLmlzQXJyYXkoY3NzQ2F0KSl7XHJcbiAgICAgICAgICAgIGZsYXR0ZW5lZFt3a2V5XVtjYXROYW1lXT1jc3NDYXQuam9pbihcIiBcIik7XHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgZmxhdHRlbmVkW3drZXldW2NhdE5hbWVdPWNzc0NhdDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICAgIGlmKF8uaXNTdHJpbmcod3N0eWxlKSl7XHJcbiAgICAgICAgZmxhdHRlbmVkW3drZXldPXdzdHlsZTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIHJldHVybiBmbGF0dGVuZWRcclxufVxyXG5cclxuZGVmYXVsdFN0eWxpbmc6Y3NzX2Z3LndpZGdldHN0eWxlcz17XHJcbiAgYXJyYXk6e30sXHJcbiAgZGVmYXVsdDp7ZmllbGRIdG1sQ2xhc3M6IFwiY3NzZnctZm9ybS1jb250cm9sXCJ9LFxyXG4gIF9fdGhlbWVzX186W3tuYW1lOidub3RoZW1lJyx0ZXh0OidOb25lJ31dLFxyXG4gIF9fcmVtb3ZlX2l0ZW1fXzpcImNzc2Z3LXJlbW92ZS1pdGVtXCIsXHJcbiAgICBfX2FycmF5X2l0ZW1fbm9ucmVmX186e1xyXG4gICAgICBcImh0bWxDbGFzc1wiOiAgIFwiY3NzZnctYXJyYXktaXRlbS1ub25yZWZcIlxyXG4gIH0sXHJcbiAgX19hY3RpdmVfXzp7YWN0aXZlQ2xhc3M6XCJjc3Nmdy1hY3RpdmVcIn0sXHJcbiAgX19hcnJheV9fOntodG1sQ2xhc3M6XCJjc3Nmdy1hcnJheVwifSxcclxuICBfX2NvbnRyb2xfbGFiZWxfXzp7bGFiZWxIdG1sQ2xhc3M6XCJjc3Nmdy1jb250cm9sLWxhYmVsXCJ9LFxyXG4gIF9fZm9ybV9ncm91cF9fOntodG1sQ2xhc3M6IFwiY3NzZnctZm9ybS1ncm91cFwifSxcclxuICBfX2ZpZWxkX2FkZG9uX2xlZnRfXzpcImNzc2Z3LWFkZG9uLWxlZnRcIixcclxuICBfX2ZpZWxkX2FkZG9uX3JpZ2h0X186XCJjc3Nmdy1hZGRvbi1yaWdodFwiLFxyXG4gIF9faGVscF9ibG9ja19fOlwiY3NzZnctaGVscC1ibG9ja1wiLFxyXG4gIF9fcmVxdWlyZWRfYXN0ZXJpc2tfXzpcImNzc2Z3LXJlcXVpcmVkLWFzdGVyc2lza1wiLFxyXG4gIF9fc2NyZWVuX3JlYWRlcl9fOiBcImNzc2Z3LXNjcmVlbi1yZWFkZXJcIlxyXG5cclxufVxyXG5cclxuXHJcblxyXG5cclxudGhlbWU6c3RyaW5nXHJcbmZyYW1ld29ya1RoZW1lU3ViczpTdWJzY3JpcHRpb247XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgcHVibGljIGpzZjogSnNvblNjaGVtYUZvcm1TZXJ2aWNlLFxyXG4gICAgcHVibGljIGpzZkZMU2VydmljZTpGcmFtZXdvcmtMaWJyYXJ5U2VydmljZSxcclxuICAgIHB1YmxpYyBjc3NGV1NlcnZpY2U6Q3NzZnJhbWV3b3JrU2VydmljZVxyXG4gICAgLypASW5qZWN0KENTU19GUkFNRVdPUktfQ0ZHICkgZndjZmc6IGNzc19mdy5mcmFtZXdvcmtjZmcqL1xyXG5cclxuICApIHtcclxuICAgIFxyXG4gICAgbGV0IGFjdGl2ZUZyYW1ld29yazphbnk9dGhpcy5qc2ZGTFNlcnZpY2UuYWN0aXZlRnJhbWV3b3JrO1xyXG4gICAgbGV0IGZ3Y2ZnPWFjdGl2ZUZyYW1ld29yay5jb25maWd8fHt9O1xyXG4gICAgdGhpcy53aWRnZXRTdHlsZXMgPSBPYmplY3QuYXNzaWduKHRoaXMuZGVmYXVsdFN0eWxpbmcsZndjZmcud2lkZ2V0c3R5bGVzKTtcclxuICAgIGxldCBkZWZhdWx0VGhlbWU9dGhpcy53aWRnZXRTdHlsZXMuX190aGVtZXNfX1swXTtcclxuICAgIGxldCBkZWZhdWx0VGhlbWVOYW1lPWNzc0ZXU2VydmljZS5hY3RpdmVSZXF1ZXN0ZWRUaGVtZXx8ZGVmYXVsdFRoZW1lLm5hbWU7XHJcbiAgICB0aGlzLnRoZW1lPXRoaXMub3B0aW9ucz8udGhlbWV8fCBkZWZhdWx0VGhlbWVOYW1lO1xyXG4gICAgdGhpcy5mcmFtZXdvcmtUaGVtZVN1YnM9Y3NzRldTZXJ2aWNlLmZyYW1ld29ya1RoZW1lJC5zdWJzY3JpYmUobmV3VGhlbWU9PntcclxuICAgICAgICB0aGlzLnRoZW1lPW5ld1RoZW1lO1xyXG4gICAgfSlcclxuIFxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmZyYW1ld29ya1RoZW1lU3Vicy51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5mcmFtZXdvcmtUaGVtZVN1YnM9bnVsbDtcclxuICB9XHJcblxyXG5cclxuICBnZXQgc2hvd1JlbW92ZUJ1dHRvbigpOiBib29sZWFuIHtcclxuICAgIGlmICghdGhpcy5vcHRpb25zLnJlbW92YWJsZSB8fCB0aGlzLm9wdGlvbnMucmVhZG9ubHkgfHxcclxuICAgICAgdGhpcy5sYXlvdXROb2RlLnR5cGUgPT09ICckcmVmJ1xyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIGlmICh0aGlzLmxheW91dE5vZGUucmVjdXJzaXZlUmVmZXJlbmNlKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmxheW91dE5vZGUuYXJyYXlJdGVtIHx8ICF0aGlzLnBhcmVudEFycmF5KSB7XHJcbiAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuICAgIC8vIElmIGFycmF5IGxlbmd0aCA8PSBtaW5JdGVtcywgZG9uJ3QgYWxsb3cgcmVtb3ZpbmcgYW55IGl0ZW1zXHJcbiAgICByZXR1cm4gdGhpcy5wYXJlbnRBcnJheS5pdGVtcy5sZW5ndGggLSAxIDw9IHRoaXMucGFyZW50QXJyYXkub3B0aW9ucy5taW5JdGVtcyA/IGZhbHNlIDpcclxuICAgICAgLy8gRm9yIHJlbW92YWJsZSBsaXN0IGl0ZW1zLCBhbGxvdyByZW1vdmluZyBhbnkgaXRlbVxyXG4gICAgICB0aGlzLmxheW91dE5vZGUuYXJyYXlJdGVtVHlwZSA9PT0gJ2xpc3QnID8gdHJ1ZSA6XHJcbiAgICAgICAgLy8gRm9yIHJlbW92YWJsZSB0dXBsZSBpdGVtcywgb25seSBhbGxvdyByZW1vdmluZyBsYXN0IGl0ZW0gaW4gbGlzdFxyXG4gICAgICAgIHRoaXMubGF5b3V0SW5kZXhbdGhpcy5sYXlvdXRJbmRleC5sZW5ndGggLSAxXSA9PT0gdGhpcy5wYXJlbnRBcnJheS5pdGVtcy5sZW5ndGggLSAyO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmluaXRpYWxpemVGcmFtZXdvcmsoKTtcclxuICAgIGlmICh0aGlzLmxheW91dE5vZGUuYXJyYXlJdGVtICYmIHRoaXMubGF5b3V0Tm9kZS50eXBlICE9PSAnJHJlZicpIHtcclxuICAgICAgdGhpcy5wYXJlbnRBcnJheSA9IHRoaXMuanNmLmdldFBhcmVudE5vZGUodGhpcyk7XHJcbiAgICAgIGlmICh0aGlzLnBhcmVudEFycmF5KSB7XHJcbiAgICAgICAgdGhpcy5pc09yZGVyYWJsZSA9IHRoaXMubGF5b3V0Tm9kZS5hcnJheUl0ZW1UeXBlID09PSAnbGlzdCcgJiZcclxuICAgICAgICAgICF0aGlzLm9wdGlvbnMucmVhZG9ubHkgJiYgdGhpcy5wYXJlbnRBcnJheS5vcHRpb25zLm9yZGVyYWJsZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoKSB7XHJcbiAgICBpZiAoIXRoaXMuZnJhbWV3b3JrSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplRnJhbWV3b3JrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplRnJhbWV3b3JrKCkge1xyXG4gICAgaWYgKHRoaXMubGF5b3V0Tm9kZSkge1xyXG4gICAgICB0aGlzLm9wdGlvbnMgPSBjbG9uZURlZXAodGhpcy5sYXlvdXROb2RlLm9wdGlvbnMpO1xyXG4gICAgICB0aGlzLndpZGdldExheW91dE5vZGUgPSB7XHJcbiAgICAgICAgLi4udGhpcy5sYXlvdXROb2RlLFxyXG4gICAgICAgIG9wdGlvbnM6IGNsb25lRGVlcCh0aGlzLmxheW91dE5vZGUub3B0aW9ucylcclxuICAgICAgfTtcclxuICAgICAgdGhpcy53aWRnZXRPcHRpb25zID0gdGhpcy53aWRnZXRMYXlvdXROb2RlLm9wdGlvbnM7XHJcbiAgICAgIHRoaXMuZm9ybUNvbnRyb2wgPSB0aGlzLmpzZi5nZXRGb3JtQ29udHJvbCh0aGlzKTtcclxuXHJcbiAgICAgIHRoaXMub3B0aW9ucy5pc0lucHV0V2lkZ2V0ID0gaW5BcnJheSh0aGlzLmxheW91dE5vZGUudHlwZSwgW1xyXG4gICAgICAgICdidXR0b24nLCAnY2hlY2tib3gnLCAnY2hlY2tib3hlcy1pbmxpbmUnLCAnY2hlY2tib3hlcycsICdjb2xvcicsXHJcbiAgICAgICAgJ2RhdGUnLCAnZGF0ZXRpbWUtbG9jYWwnLCAnZGF0ZXRpbWUnLCAnZW1haWwnLCAnZmlsZScsICdoaWRkZW4nLFxyXG4gICAgICAgICdpbWFnZScsICdpbnRlZ2VyJywgJ21vbnRoJywgJ251bWJlcicsICdwYXNzd29yZCcsICdyYWRpbycsXHJcbiAgICAgICAgJ3JhZGlvYnV0dG9ucycsICdyYWRpb3MtaW5saW5lJywgJ3JhZGlvcycsICdyYW5nZScsICdyZXNldCcsICdzZWFyY2gnLFxyXG4gICAgICAgICdzZWxlY3QnLCAnc3VibWl0JywgJ3RlbCcsICd0ZXh0JywgJ3RleHRhcmVhJywgJ3RpbWUnLCAndXJsJywgJ3dlZWsnXHJcbiAgICAgIF0pO1xyXG5cclxuICAgICAgdGhpcy5vcHRpb25zLnRpdGxlID0gdGhpcy5zZXRUaXRsZSgpO1xyXG5cclxuICAgICAgdGhpcy5vcHRpb25zLmh0bWxDbGFzcyA9XHJcbiAgICAgICAgYWRkQ2xhc3Nlcyh0aGlzLm9wdGlvbnMuaHRtbENsYXNzLCAnc2NoZW1hLWZvcm0tJyArIHRoaXMubGF5b3V0Tm9kZS50eXBlKTtcclxuXHJcbiAgICAgIFxyXG4gICAgICBpZiAodGhpcy5sYXlvdXROb2RlLnR5cGUgPT09ICdhcnJheScpIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuaHRtbENsYXNzID0gYWRkQ2xhc3Nlcyh0aGlzLm9wdGlvbnMuaHRtbENsYXNzLCB0aGlzLndpZGdldFN0eWxlcy5fX2FycmF5X18uaHRtbENsYXNzKTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLmxheW91dE5vZGUuYXJyYXlJdGVtICYmIHRoaXMubGF5b3V0Tm9kZS50eXBlICE9PSAnJHJlZicpIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuaHRtbENsYXNzID0gYWRkQ2xhc3Nlcyh0aGlzLm9wdGlvbnMuaHRtbENsYXNzLCB0aGlzLndpZGdldFN0eWxlcy5fX2FycmF5X2l0ZW1fbm9ucmVmX18uaHRtbENsYXNzKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMuaHRtbENsYXNzID0gYWRkQ2xhc3Nlcyh0aGlzLm9wdGlvbnMuaHRtbENsYXNzLCB0aGlzLndpZGdldFN0eWxlcy5fX2Zvcm1fZ3JvdXBfXy5odG1sQ2xhc3MpO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG5cclxuICAgICAgLypcclxuICAgICAgdGhpcy5vcHRpb25zLmh0bWxDbGFzcyA9XHJcbiAgICAgIHRoaXMubGF5b3V0Tm9kZS50eXBlID09PSAnYXJyYXknID9cclxuICAgICAgICBhZGRDbGFzc2VzKHRoaXMub3B0aW9ucy5odG1sQ2xhc3MsIFsnYm9yZGVyJywnc2hhZG93LW1kJywncC0xJ10pIDpcclxuICAgICAgICB0aGlzLmxheW91dE5vZGUuYXJyYXlJdGVtICYmIHRoaXMubGF5b3V0Tm9kZS50eXBlICE9PSAnJHJlZicgP1xyXG4gICAgICAgICAgYWRkQ2xhc3Nlcyh0aGlzLm9wdGlvbnMuaHRtbENsYXNzLCBbJ2JvcmRlcicsJ3NoYWRvdy1tZCcsJ3AtMSddKSA6XHJcbiAgICAgICAgICBhZGRDbGFzc2VzKHRoaXMub3B0aW9ucy5odG1sQ2xhc3MsICdtYi0xJyk7XHJcbiovXHJcblxyXG4vKlxyXG50aGlzLm9wdGlvbnMuaHRtbENsYXNzID1cclxudGhpcy5sYXlvdXROb2RlLnR5cGUgPT09ICdhcnJheScgP1xyXG5hZGRDbGFzc2VzKHRoaXMub3B0aW9ucy5odG1sQ2xhc3MsIHRoaXMud2lkZ2V0U3R5bGVzLmFycmF5Lmh0bWxDbGFzcyk6XHJcbiAgdGhpcy5sYXlvdXROb2RlLmFycmF5SXRlbSAmJiB0aGlzLmxheW91dE5vZGUudHlwZSAhPT0gJyRyZWYnID9cclxuICBhZGRDbGFzc2VzKHRoaXMub3B0aW9ucy5odG1sQ2xhc3MsIHRoaXMud2lkZ2V0U3R5bGVzLl9fYXJyYXlfaXRlbV9ub25yZWZfXy5odG1sQ2xhc3MpOlxyXG4gIGFkZENsYXNzZXModGhpcy5vcHRpb25zLmh0bWxDbGFzcywgdGhpcy53aWRnZXRTdHlsZXMuX19mb3JtX2dyb3VwX18uaHRtbENsYXNzKTtcclxuKi9cclxuICAgICAgICAgIFxyXG4gICAgICB0aGlzLndpZGdldE9wdGlvbnMuaHRtbENsYXNzID0gJyc7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5sYWJlbEh0bWxDbGFzcyA9XHJcbiAgICAgICAgYWRkQ2xhc3Nlcyh0aGlzLm9wdGlvbnMubGFiZWxIdG1sQ2xhc3MsIHRoaXMud2lkZ2V0U3R5bGVzLl9fY29udHJvbF9sYWJlbF9fLmxhYmVsSHRtbENsYXNzKTtcclxuICAgICAgdGhpcy53aWRnZXRPcHRpb25zLmFjdGl2ZUNsYXNzID1cclxuICAgICAgICBhZGRDbGFzc2VzKHRoaXMud2lkZ2V0T3B0aW9ucy5hY3RpdmVDbGFzcywgdGhpcy53aWRnZXRTdHlsZXMuX19hY3RpdmVfXy5hY3RpdmVDbGFzcyk7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5maWVsZEFkZG9uTGVmdCA9XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpZWxkQWRkb25MZWZ0IHx8IHRoaXMub3B0aW9ucy5wcmVwZW5kO1xyXG4gICAgICB0aGlzLm9wdGlvbnMuZmllbGRBZGRvblJpZ2h0ID1cclxuICAgICAgICB0aGlzLm9wdGlvbnMuZmllbGRBZGRvblJpZ2h0IHx8IHRoaXMub3B0aW9ucy5hcHBlbmQ7XHJcblxyXG4gICAgICAvLyBBZGQgYXN0ZXJpc2sgdG8gdGl0bGVzIGlmIHJlcXVpcmVkXHJcbiAgICAgIGlmICh0aGlzLm9wdGlvbnMudGl0bGUgJiYgdGhpcy5sYXlvdXROb2RlLnR5cGUgIT09ICd0YWInICYmXHJcbiAgICAgICAgIXRoaXMub3B0aW9ucy5ub3RpdGxlICYmIHRoaXMub3B0aW9ucy5yZXF1aXJlZCAmJlxyXG4gICAgICAgICF0aGlzLm9wdGlvbnMudGl0bGUuaW5jbHVkZXMoJyonKVxyXG4gICAgICApIHtcclxuICAgICAgICBsZXQgcmVxdWlyZWRfYXN0ZXJpc2tfY2xhc3M9dGhpcy53aWRnZXRTdHlsZXMuX19yZXF1aXJlZF9hc3Rlcmlza19ffHwndGV4dC1kYW5nZXInXHJcbiAgICAgICAgdGhpcy5vcHRpb25zLnRpdGxlICs9IGAgPHN0cm9uZyBjbGFzcz1cIiR7cmVxdWlyZWRfYXN0ZXJpc2tfY2xhc3N9XCI+Kjwvc3Ryb25nPmA7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRoaXMubGF5b3V0Tm9kZS50eXBlID09ICdvcHRpb25maWVsZHNldCcpIHtcclxuICAgICAgICB0aGlzLm9wdGlvbnMubWVzc2FnZUxvY2F0aW9uID0gJ3RvcCc7XHJcbiAgICAgIH1cclxuICAgICAgLy8gU2V0IG1pc2NlbGFuZW91cyBzdHlsZXMgYW5kIHNldHRpbmdzIGZvciBlYWNoIGNvbnRyb2wgdHlwZVxyXG4gICAgICB0aGlzLmFwcGx5Q3NzQ2xhc3Nlcyh0aGlzLmxheW91dE5vZGUudHlwZSwgdGhpcy53aWRnZXRPcHRpb25zLCB0aGlzLm9wdGlvbnMuc3R5bGUpO1xyXG4gICAgICBpZiAodGhpcy5mb3JtQ29udHJvbCkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlSGVscEJsb2NrKHRoaXMuZm9ybUNvbnRyb2wuc3RhdHVzKTtcclxuICAgICAgICB0aGlzLmZvcm1Db250cm9sLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKHN0YXR1cyA9PiB0aGlzLnVwZGF0ZUhlbHBCbG9jayhzdGF0dXMpKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5kZWJ1Zykge1xyXG4gICAgICAgICAgY29uc3QgdmFyczogYW55W10gPSBbXTtcclxuICAgICAgICAgIHRoaXMuZGVidWdPdXRwdXQgPSBtYXAodmFycywgdGhpc1ZhciA9PiBKU09OLnN0cmluZ2lmeSh0aGlzVmFyLCBudWxsLCAyKSkuam9pbignXFxuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZnJhbWV3b3JrSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHVwZGF0ZUhlbHBCbG9jayhzdGF0dXMpIHtcclxuICAgIHRoaXMub3B0aW9ucy5oZWxwQmxvY2sgPSBzdGF0dXMgPT09ICdJTlZBTElEJyAmJlxyXG4gICAgICB0aGlzLm9wdGlvbnMuZW5hYmxlRXJyb3JTdGF0ZSAmJiB0aGlzLmZvcm1Db250cm9sLmVycm9ycyAmJlxyXG4gICAgICAodGhpcy5mb3JtQ29udHJvbC5kaXJ0eSB8fCB0aGlzLm9wdGlvbnMuZmVlZGJhY2tPblJlbmRlcikgP1xyXG4gICAgICB0aGlzLmpzZi5mb3JtYXRFcnJvcnModGhpcy5mb3JtQ29udHJvbC5lcnJvcnMsIHRoaXMub3B0aW9ucy52YWxpZGF0aW9uTWVzc2FnZXMpIDpcclxuICAgICAgdGhpcy5vcHRpb25zLmRlc2NyaXB0aW9uIHx8IHRoaXMub3B0aW9ucy5oZWxwIHx8IG51bGw7XHJcbiAgfVxyXG5cclxuICBzZXRUaXRsZSgpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh0aGlzLmxheW91dE5vZGUudHlwZSkge1xyXG4gICAgICBjYXNlICdidXR0b24nOlxyXG4gICAgICBjYXNlICdjaGVja2JveCc6XHJcbiAgICAgIGNhc2UgJ3NlY3Rpb24nOlxyXG4gICAgICBjYXNlICdoZWxwJzpcclxuICAgICAgY2FzZSAnbXNnJzpcclxuICAgICAgY2FzZSAnc3VibWl0JzpcclxuICAgICAgY2FzZSAnbWVzc2FnZSc6XHJcbiAgICAgIGNhc2UgJ3RhYmFycmF5JzpcclxuICAgICAgY2FzZSAndGFicyc6XHJcbiAgICAgIGNhc2UgJyRyZWYnOlxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICBjYXNlICdhZHZhbmNlZGZpZWxkc2V0JzpcclxuICAgICAgICB0aGlzLndpZGdldE9wdGlvbnMuZXhwYW5kYWJsZSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy53aWRnZXRPcHRpb25zLnRpdGxlID0gJ0FkdmFuY2VkIG9wdGlvbnMnO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICBjYXNlICdhdXRoZmllbGRzZXQnOlxyXG4gICAgICAgIHRoaXMud2lkZ2V0T3B0aW9ucy5leHBhbmRhYmxlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLndpZGdldE9wdGlvbnMudGl0bGUgPSAnQXV0aGVudGljYXRpb24gc2V0dGluZ3MnO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICBjYXNlICdmaWVsZHNldCc6XHJcbiAgICAgICAgdGhpcy53aWRnZXRPcHRpb25zLnRpdGxlID0gdGhpcy5vcHRpb25zLnRpdGxlO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIHRoaXMud2lkZ2V0T3B0aW9ucy50aXRsZSA9IG51bGw7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuanNmLnNldEl0ZW1UaXRsZSh0aGlzKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZUl0ZW0oKSB7XHJcbiAgICB0aGlzLmpzZi5yZW1vdmVJdGVtKHRoaXMpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2IFthdHRyLmRhdGEtYnMtdGhlbWVdPVwidGhlbWVcIiBbYXR0ci5kYXRhLXRoZW1lXT1cInRoZW1lXCIgW2NsYXNzXT1cIm9wdGlvbnM/Lmh0bWxDbGFzcyB8fCAnJ1wiIFtjbGFzcy5oYXMtZmVlZGJhY2tdPVwib3B0aW9ucz8uZmVlZGJhY2sgJiYgb3B0aW9ucz8uaXNJbnB1dFdpZGdldCAmJlxyXG4gICAgICAgIChmb3JtQ29udHJvbD8uZGlydHkgfHwgb3B0aW9ucz8uZmVlZGJhY2tPblJlbmRlcilcIiBbY2xhc3MuaGFzLWVycm9yXT1cIm9wdGlvbnM/LmVuYWJsZUVycm9yU3RhdGUgJiYgZm9ybUNvbnRyb2w/LmVycm9ycyAmJlxyXG4gICAgICAgIChmb3JtQ29udHJvbD8uZGlydHkgfHwgb3B0aW9ucz8uZmVlZGJhY2tPblJlbmRlcilcIiBbY2xhc3MuaGFzLXN1Y2Nlc3NdPVwib3B0aW9ucz8uZW5hYmxlU3VjY2Vzc1N0YXRlICYmICFmb3JtQ29udHJvbD8uZXJyb3JzICYmXHJcbiAgICAgICAgKGZvcm1Db250cm9sPy5kaXJ0eSB8fCBvcHRpb25zPy5mZWVkYmFja09uUmVuZGVyKVwiPlxyXG5cclxuICAgIDxidXR0b24gKm5nSWY9XCJzaG93UmVtb3ZlQnV0dG9uXCIgW2NsYXNzXT1cIndpZGdldFN0eWxlcy5fX3JlbW92ZV9pdGVtX19cIiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cInJlbW92ZUl0ZW0oKVwiPlxyXG4gICAgPHNwYW4gYXJpYS1oaWRkZW49XCJ0cnVlXCI+JnRpbWVzOzwvc3Bhbj5cclxuICAgIDxzcGFuIFtjbGFzc109XCJ3aWRnZXRTdHlsZXMuX19zY3JlZW5fcmVhZGVyX19cIj5DbG9zZTwvc3Bhbj5cclxuICA8L2J1dHRvbj5cclxuICAgIDxkaXYgKm5nSWY9XCJvcHRpb25zPy5tZXNzYWdlTG9jYXRpb24gPT09ICd0b3AnXCI+XHJcbiAgICAgICAgPHAgKm5nSWY9XCJvcHRpb25zPy5oZWxwQmxvY2tcIiBbY2xhc3NdPVwid2lkZ2V0U3R5bGVzLl9faGVscF9ibG9ja19fXCIgW2lubmVySFRNTF09XCJvcHRpb25zPy5oZWxwQmxvY2tcIj48L3A+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8bGFiZWwgKm5nSWY9XCJvcHRpb25zPy50aXRsZSAmJiBsYXlvdXROb2RlPy50eXBlICE9PSAndGFiJ1wiIFthdHRyLmZvcl09XCInY29udHJvbCcgKyBsYXlvdXROb2RlPy5faWRcIiBbY2xhc3NdPVwib3B0aW9ucz8ubGFiZWxIdG1sQ2xhc3MgfHwgJydcIiBbY2xhc3Muc3Itb25seV09XCJvcHRpb25zPy5ub3RpdGxlXCIgW2lubmVySFRNTF09XCJvcHRpb25zPy50aXRsZVwiPjwvbGFiZWw+XHJcbiAgICA8cCAqbmdJZj1cImxheW91dE5vZGU/LnR5cGUgPT09ICdzdWJtaXQnICYmIGpzZj8uZm9ybU9wdGlvbnM/LmZpZWxkc1JlcXVpcmVkXCI+XHJcbiAgICAgICAgPHN0cm9uZyBbY2xhc3NdPVwid2lkZ2V0U3R5bGVzLl9fcmVxdWlyZWRfYXN0ZXJpc2tfX1wiPio8L3N0cm9uZz4gPSByZXF1aXJlZCBmaWVsZHNcclxuICAgIDwvcD5cclxuICAgIDxkaXYgW2NsYXNzLmlucHV0LWdyb3VwXT1cIm9wdGlvbnM/LmZpZWxkQWRkb25MZWZ0IHx8IG9wdGlvbnM/LmZpZWxkQWRkb25SaWdodFwiPlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwib3B0aW9ucz8uZmllbGRBZGRvbkxlZnRcIiBbY2xhc3NdPVwid2lkZ2V0U3R5bGVzLl9fZmllbGRfYWRkb25fbGVmdF9fXCIgW2lubmVySFRNTF09XCJvcHRpb25zPy5maWVsZEFkZG9uTGVmdFwiPjwvc3Bhbj5cclxuXHJcbiAgICAgICAgPHNlbGVjdC13aWRnZXQtd2lkZ2V0IFtsYXlvdXROb2RlXT1cIndpZGdldExheW91dE5vZGVcIiBbZGF0YUluZGV4XT1cImRhdGFJbmRleFwiIFtsYXlvdXRJbmRleF09XCJsYXlvdXRJbmRleFwiPjwvc2VsZWN0LXdpZGdldC13aWRnZXQ+XHJcblxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwib3B0aW9ucz8uZmllbGRBZGRvblJpZ2h0XCIgW2NsYXNzXT1cIndpZGdldFN0eWxlcy5fX2ZpZWxkX2FkZG9uX3JpZ2h0X19cIiBbaW5uZXJIVE1MXT1cIm9wdGlvbnM/LmZpZWxkQWRkb25SaWdodFwiPjwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxzcGFuICpuZ0lmPVwib3B0aW9ucz8uZmVlZGJhY2sgJiYgb3B0aW9ucz8uaXNJbnB1dFdpZGdldCAmJlxyXG4gICAgICAgICAgIW9wdGlvbnM/LmZpZWxkQWRkb25SaWdodCAmJiAhbGF5b3V0Tm9kZS5hcnJheUl0ZW0gJiZcclxuICAgICAgICAgIChmb3JtQ29udHJvbD8uZGlydHkgfHwgb3B0aW9ucz8uZmVlZGJhY2tPblJlbmRlcilcIiBbY2xhc3MuZ2x5cGhpY29uLW9rXT1cIm9wdGlvbnM/LmVuYWJsZVN1Y2Nlc3NTdGF0ZSAmJiAhZm9ybUNvbnRyb2w/LmVycm9yc1wiIFtjbGFzcy5nbHlwaGljb24tcmVtb3ZlXT1cIm9wdGlvbnM/LmVuYWJsZUVycm9yU3RhdGUgJiYgZm9ybUNvbnRyb2w/LmVycm9yc1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sLWZlZWRiYWNrIGdseXBoaWNvblwiPjwvc3Bhbj5cclxuICAgIDxkaXYgKm5nSWY9XCJvcHRpb25zPy5tZXNzYWdlTG9jYXRpb24gIT09ICd0b3AnXCI+XHJcbiAgICAgICAgPHAgKm5nSWY9XCJvcHRpb25zPy5oZWxwQmxvY2tcIiBbY2xhc3NdPVwid2lkZ2V0U3R5bGVzLl9faGVscF9ibG9ja19fXCIgW2lubmVySFRNTF09XCJvcHRpb25zPy5oZWxwQmxvY2tcIj48L3A+XHJcbiAgICA8L2Rpdj5cclxuXHJcbjwvZGl2PlxyXG5cclxuPGRpdiAqbmdJZj1cImRlYnVnICYmIGRlYnVnT3V0cHV0XCI+ZGVidWc6XHJcbiAgICA8cHJlPnt7ZGVidWdPdXRwdXR9fTwvcHJlPlxyXG48L2Rpdj5cclxuXHJcbjwhLS1cclxuPGRpdiBjbGFzcz1cImJ0biBpbnB1dCBpbnB1dC1ib3JkZXJlZCBpbnB1dC1wcmltYXJ5IHctZnVsbCBtYXgtdy14c1xyXG5idG4tbmV1dHJhbFxyXG5idG4tcHJpbWFyeVxyXG5idG4tc2Vjb25kYXJ5XHJcbmJ0bi1hY2NlbnRcclxuYnRuLWluZm9cclxuYnRuLXN1Y2Nlc3NcclxuYnRuLXdhcm5pbmdcclxuYnRuLWVycm9yXHJcbmJ0bi1naG9zdFxyXG5idG4tbGlua1xyXG5idG4tb3V0bGluZVxyXG5idG4tYWN0aXZlXHJcbmJ0bi1kaXNhYmxlZFxyXG5nbGFzc1xyXG5uby1hbmltYXRpb25cclxuYnRuLWxnXHJcbmJ0bi1tZFxyXG5idG4tc21cclxuYnRuLXhzXHJcbmJ0bi13aWRlXHJcbmJ0bi1ibG9ja1xyXG5idG4tY2lyY2xlXHJcbmJ0bi1zcXVhcmVcclxuaGlkZGVuXHJcblwiPmRlZnMgYWw8L2Rpdj5cclxuLS0+XHJcbjwhLS08aW5wdXQgdHlwZT1cInRleHRcIiBwbGFjZWhvbGRlcj1cIlR5cGUgaGVyZVwiIGNsYXNzPVwiaW5wdXQgaW5wdXQtYm9yZGVyZWQgaW5wdXQtcHJpbWFyeSB3LWZ1bGwgbWF4LXcteHNcIiAvPi0tPiJdfQ==
@@ -0,0 +1,9 @@
1
+ import { InjectionToken } from "@angular/core";
2
+ export const CSS_FRAMEWORK_CFG = new InjectionToken('CSS_FRAMEWORK_CFG');
3
+ export var css_fw;
4
+ (function (css_fw) {
5
+ class csscategories {
6
+ }
7
+ css_fw.csscategories = csscategories;
8
+ })(css_fw || (css_fw = {}));
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzLWZyYW1ld29yay5kZWZzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZm9ybXdvcmtzLWNzc2ZyYW1ld29yay9zcmMvbGliL2Nzcy1mcmFtZXdvcmsuZGVmcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9DLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLElBQUksY0FBYyxDQUFzQixtQkFBbUIsQ0FBQyxDQUFDO0FBRTlGLE1BQU0sS0FBVyxNQUFNLENBeUV0QjtBQXpFRCxXQUFpQixNQUFNO0lBUW5CLE1BQWEsYUFBYTtLQU16QjtJQU5ZLG9CQUFhLGdCQU16QixDQUFBO0FBMkRMLENBQUMsRUF6RWdCLE1BQU0sS0FBTixNQUFNLFFBeUV0QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuXHJcbmV4cG9ydCBjb25zdCBDU1NfRlJBTUVXT1JLX0NGRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxjc3NfZncuZnJhbWV3b3JrY2ZnPignQ1NTX0ZSQU1FV09SS19DRkcnKTtcclxuXHJcbmV4cG9ydCBuYW1lc3BhY2UgY3NzX2Z3e1xyXG5cclxuICAgIGV4cG9ydCB0eXBlIHRoZW1lS1Y9XHJcbiAgICB7IFxyXG4gICAgICAgIG5hbWU6c3RyaW5nLFxyXG4gICAgICAgIHRleHQ6c3RyaW5nXHJcbiAgICAgfVxyXG5cclxuICAgIGV4cG9ydCBjbGFzcyBjc3NjYXRlZ29yaWVze1xyXG4gICAgICAgIGZpZWxkSHRtbENsYXNzPzpzdHJpbmd8c3RyaW5nW11cclxuICAgICAgICBsYWJlbEh0bWxDbGFzcz86c3RyaW5nfHN0cmluZ1tdXHJcbiAgICAgICAgaHRtbENsYXNzPzpzdHJpbmd8c3RyaW5nW11cclxuICAgICAgICBpdGVtTGFiZWxIdG1sQ2xhc3M/OnN0cmluZ3xzdHJpbmdbXVxyXG4gICAgICAgIGFjdGl2ZUNsYXNzPzpzdHJpbmd8c3RyaW5nW11cclxuICAgIH1cclxuXHJcbiAgICBleHBvcnQgdHlwZSB3aWRnZXRzdHlsZXM9e1xyXG4gICAgICAgICckcmVmJz86Y3NzY2F0ZWdvcmllcyxcclxuICAgICAgICAnYWx0LWRhdGUnPzpjc3NjYXRlZ29yaWVzLFxyXG4gICAgICAgICdhbHQtZGF0ZXRpbWUnPzpjc3NjYXRlZ29yaWVzLFxyXG4gICAgICAgIF9fdGhlbWVzX18/OnRoZW1lS1ZbXSxcclxuICAgICAgICBfX2FycmF5X2l0ZW1fbm9ucmVmX186Y3NzY2F0ZWdvcmllcyxcclxuICAgICAgICBfX2Zvcm1fZ3JvdXBfXzpjc3NjYXRlZ29yaWVzLFxyXG4gICAgICAgIF9fY29udHJvbF9sYWJlbF9fOmNzc2NhdGVnb3JpZXMsXHJcbiAgICAgICAgX19hY3RpdmVfXzpjc3NjYXRlZ29yaWVzLFxyXG4gICAgICAgIF9fcmVxdWlyZWRfYXN0ZXJpc2tfXzpzdHJpbmcsXHJcbiAgICAgICAgX19hcnJheV9fOmNzc2NhdGVnb3JpZXMsXHJcbiAgICAgICAgJ19fcmVtb3ZlX2l0ZW1fXyc6c3RyaW5nLFxyXG4gICAgICAgIF9faGVscF9ibG9ja19fOnN0cmluZyxcclxuICAgICAgICBfX2ZpZWxkX2FkZG9uX2xlZnRfXzpzdHJpbmdcclxuICAgICAgICBfX2ZpZWxkX2FkZG9uX3JpZ2h0X186c3RyaW5nLFxyXG4gICAgICAgIF9fc2NyZWVuX3JlYWRlcl9fOnN0cmluZyxcclxuICAgICAgICBhcnJheTpjc3NjYXRlZ29yaWVzLFxyXG4gICAgICAgIGF1dGhmaWVsZHNldD86Y3NzY2F0ZWdvcmllcyxcclxuICAgICAgICBhZHZhbmNlZGZpZWxkc2V0Pzpjc3NjYXRlZ29yaWVzLFxyXG4gICAgICAgIGJ1dHRvbj86Y3NzY2F0ZWdvcmllcyxcclxuICAgICAgICBjaGVja2JveD86Y3NzY2F0ZWdvcmllcyxcclxuICAgICAgICBjaGVja2JveGVzPzpjc3NjYXRlZ29yaWVzLFxyXG4gICAgICAgIGNoZWNrYm94YnV0dG9ucz86Y3NzY2F0ZWdvcmllcyxcclxuICAgICAgICAnY2hlY2tib3hlcy1pbmxpbmUnPzpjc3NjYXRlZ29yaWVzLFxyXG4gICAgICAgIGRhdGU/OmNzc2NhdGVnb3JpZXMsXHJcbiAgICAgICAgJ2RhdGV0aW1lLWxvY2FsJz86Y3NzY2F0ZWdvcmllcyxcclxuICAgICAgICBmaWVsZHNldD86Y3NzY2F0ZWdvcmllcyxcclxuICAgICAgICBpbnRlZ2VyPzpjc3NjYXRlZ29yaWVzLFxyXG4gICAgICAgIG51bWJlcj86Y3NzY2F0ZWdvcmllcyxcclxuICAgICAgICBvcHRpb25maWVsZHNldD86Y3NzY2F0ZWdvcmllcyxcclxuICAgICAgICBwYXNzd29yZD86Y3NzY2F0ZWdvcmllcyxcclxuICAgICAgICByYWRpb2J1dHRvbnM/OmNzc2NhdGVnb3JpZXMsXHJcbiAgICAgICAgcmFkaW8/OmNzc2NhdGVnb3JpZXMsXHJcbiAgICAgICAgcmFkaW9zPzpjc3NjYXRlZ29yaWVzLFxyXG4gICAgICAgIFwicmFkaW9zLWlubGluZVwiPzpjc3NjYXRlZ29yaWVzLFxyXG4gICAgICAgICdyYW5nZSc/OmNzc2NhdGVnb3JpZXMsXHJcbiAgICAgICAgc2VjdGlvbj86Y3NzY2F0ZWdvcmllcyxcclxuICAgICAgICBzZWxlY3RmaWVsZHNldD86Y3NzY2F0ZWdvcmllcyxcclxuICAgICAgICBzZWxlY3Q/OmNzc2NhdGVnb3JpZXMsXHJcbiAgICAgICAgc3VibWl0Pzpjc3NjYXRlZ29yaWVzLFxyXG4gICAgICAgIHRleHQ/OmNzc2NhdGVnb3JpZXMsXHJcbiAgICAgICAgdGFicz86Y3NzY2F0ZWdvcmllcyxcclxuICAgICAgICB0YWJhcnJheT86Y3NzY2F0ZWdvcmllcyxcclxuICAgICAgICB0ZXh0YXJlYT86Y3NzY2F0ZWdvcmllcyxcclxuICAgICAgICBkZWZhdWx0OmNzc2NhdGVnb3JpZXNcclxuICAgIH1cclxuICAgIGV4cG9ydCB0eXBlIGZyYW1ld29ya2NmZz17XHJcbiAgICAgICAgbmFtZTpzdHJpbmcsXHJcbiAgICAgICAgdGV4dDpzdHJpbmc7XHJcbiAgICAgICAgc3R5bGVzaGVldHM6c3RyaW5nW10sXHJcbiAgICAgICAgc2NyaXB0cz86c3RyaW5nW10sXHJcbiAgICAgICAgd2lkZ2V0c3R5bGVzOndpZGdldHN0eWxlcyxcclxuICAgICAgICB3aWRnZXRzPzphbnk7XHJcbiAgICB9XHJcblxyXG4gICAgXHJcblxyXG59Il19
@@ -0,0 +1,45 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { NgModule } from '@angular/core';
3
+ import { FrameworkLibraryService, JsonSchemaFormModule, JsonSchemaFormService, WidgetLibraryModule, WidgetLibraryService } from '@ng-formworks/core';
4
+ import { CssFrameworkComponent } from './css-framework.component';
5
+ import { CssframeworkService } from './css-framework.service';
6
+ import * as i0 from "@angular/core";
7
+ export class CssFrameworkModule {
8
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CssFrameworkModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
9
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.7", ngImport: i0, type: CssFrameworkModule, declarations: [CssFrameworkComponent], imports: [JsonSchemaFormModule,
10
+ CommonModule,
11
+ WidgetLibraryModule], exports: [CssFrameworkComponent] }); }
12
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CssFrameworkModule, providers: [
13
+ JsonSchemaFormService,
14
+ FrameworkLibraryService,
15
+ WidgetLibraryService,
16
+ CssframeworkService
17
+ // { provide: Framework, useClass: CssFramework, multi: true },
18
+ ], imports: [JsonSchemaFormModule,
19
+ CommonModule,
20
+ WidgetLibraryModule] }); }
21
+ }
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CssFrameworkModule, decorators: [{
23
+ type: NgModule,
24
+ args: [{
25
+ declarations: [
26
+ CssFrameworkComponent
27
+ ],
28
+ imports: [
29
+ JsonSchemaFormModule,
30
+ CommonModule,
31
+ WidgetLibraryModule,
32
+ ],
33
+ exports: [
34
+ CssFrameworkComponent
35
+ ],
36
+ providers: [
37
+ JsonSchemaFormService,
38
+ FrameworkLibraryService,
39
+ WidgetLibraryService,
40
+ CssframeworkService
41
+ // { provide: Framework, useClass: CssFramework, multi: true },
42
+ ]
43
+ }]
44
+ }] });
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzLWZyYW1ld29yay5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1mb3Jtd29ya3MtY3NzZnJhbWV3b3JrL3NyYy9saWIvY3NzLWZyYW1ld29yay5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLG9CQUFvQixFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckosT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBd0I5RCxNQUFNLE9BQU8sa0JBQWtCOzhHQUFsQixrQkFBa0I7K0dBQWxCLGtCQUFrQixpQkFsQjNCLHFCQUFxQixhQUdyQixvQkFBb0I7WUFDcEIsWUFBWTtZQUNaLG1CQUFtQixhQUduQixxQkFBcUI7K0dBVVosa0JBQWtCLGFBUmxCO1lBQ1QscUJBQXFCO1lBQ3JCLHVCQUF1QjtZQUN2QixvQkFBb0I7WUFDcEIsbUJBQW1CO1lBQ3BCLCtEQUErRDtTQUMvRCxZQWJDLG9CQUFvQjtZQUNwQixZQUFZO1lBQ1osbUJBQW1COzsyRkFhVixrQkFBa0I7a0JBcEI5QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWixxQkFBcUI7cUJBQ3RCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxvQkFBb0I7d0JBQ3BCLFlBQVk7d0JBQ1osbUJBQW1CO3FCQUNwQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AscUJBQXFCO3FCQUN0QjtvQkFDRCxTQUFTLEVBQUU7d0JBQ1QscUJBQXFCO3dCQUNyQix1QkFBdUI7d0JBQ3ZCLG9CQUFvQjt3QkFDcEIsbUJBQW1CO3dCQUNwQiwrREFBK0Q7cUJBQy9EO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRnJhbWV3b3JrTGlicmFyeVNlcnZpY2UsIEpzb25TY2hlbWFGb3JtTW9kdWxlLCBKc29uU2NoZW1hRm9ybVNlcnZpY2UsIFdpZGdldExpYnJhcnlNb2R1bGUsIFdpZGdldExpYnJhcnlTZXJ2aWNlIH0gZnJvbSAnQG5nLWZvcm13b3Jrcy9jb3JlJztcclxuaW1wb3J0IHsgQ3NzRnJhbWV3b3JrQ29tcG9uZW50IH0gZnJvbSAnLi9jc3MtZnJhbWV3b3JrLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENzc2ZyYW1ld29ya1NlcnZpY2UgfSBmcm9tICcuL2Nzcy1mcmFtZXdvcmsuc2VydmljZSc7XHJcblxyXG5cclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBDc3NGcmFtZXdvcmtDb21wb25lbnRcclxuICBdLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIEpzb25TY2hlbWFGb3JtTW9kdWxlLFxyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgV2lkZ2V0TGlicmFyeU1vZHVsZSxcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtcclxuICAgIENzc0ZyYW1ld29ya0NvbXBvbmVudFxyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICBKc29uU2NoZW1hRm9ybVNlcnZpY2UsXHJcbiAgICBGcmFtZXdvcmtMaWJyYXJ5U2VydmljZSxcclxuICAgIFdpZGdldExpYnJhcnlTZXJ2aWNlLFxyXG4gICAgQ3NzZnJhbWV3b3JrU2VydmljZVxyXG4gICAvLyB7IHByb3ZpZGU6IEZyYW1ld29yaywgdXNlQ2xhc3M6IENzc0ZyYW1ld29yaywgbXVsdGk6IHRydWUgfSxcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDc3NGcmFtZXdvcmtNb2R1bGUgeyB9XHJcbiJdfQ==
@@ -0,0 +1,33 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { Subject } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ export class CssframeworkService {
5
+ constructor() {
6
+ this.frameworkThemeSubject = new Subject();
7
+ this.frameworkTheme$ = this.frameworkThemeSubject.asObservable();
8
+ }
9
+ //TODO-review: this acts as a public api to change the theme
10
+ //but doesn't do the actual change, instead it relies on
11
+ //the CssFramewkCoromponent having subscribed to listen
12
+ //and perform the actual theme change
13
+ requestThemeChange(themeName) {
14
+ this.frameworkThemeSubject.next(themeName);
15
+ this.activeRequestedTheme = themeName;
16
+ }
17
+ //TODO-review:there's no way of knowing what the individual component instance
18
+ //has set its theme to, this is just the theme made through the requestThemeChange
19
+ //calls and not guaranteed to correspond to the actual theme set by the
20
+ //component instance themselves
21
+ getActiveRequestedTheme() {
22
+ return this.activeRequestedTheme;
23
+ }
24
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CssframeworkService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
25
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CssframeworkService, providedIn: 'root' }); }
26
+ }
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CssframeworkService, decorators: [{
28
+ type: Injectable,
29
+ args: [{
30
+ providedIn: 'root'
31
+ }]
32
+ }], ctorParameters: () => [] });
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzLWZyYW1ld29yay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZm9ybXdvcmtzLWNzc2ZyYW1ld29yay9zcmMvbGliL2Nzcy1mcmFtZXdvcmsuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBSzNDLE1BQU0sT0FBTyxtQkFBbUI7SUFLOUI7UUFDRSxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztRQUNuRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNsRSxDQUFDO0lBRUQsNERBQTREO0lBQzVELHlEQUF5RDtJQUN6RCx3REFBd0Q7SUFDeEQscUNBQXFDO0lBQ3JDLGtCQUFrQixDQUFDLFNBQWdCO1FBQ2hDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLG9CQUFvQixHQUFDLFNBQVMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsOEVBQThFO0lBQzlFLGtGQUFrRjtJQUNsRix3RUFBd0U7SUFDeEUsK0JBQStCO0lBQy9CLHVCQUF1QjtRQUNwQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztJQUNwQyxDQUFDOzhHQXpCUyxtQkFBbUI7a0hBQW5CLG1CQUFtQixjQUZsQixNQUFNOzsyRkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDc3NmcmFtZXdvcmtTZXJ2aWNlIHtcclxuXHJcbiAgZnJhbWV3b3JrVGhlbWUkOiBPYnNlcnZhYmxlPHN0cmluZz47XHJcbiAgYWN0aXZlUmVxdWVzdGVkVGhlbWU6c3RyaW5nO1xyXG4gIGZyYW1ld29ya1RoZW1lU3ViamVjdDogU3ViamVjdDxzdHJpbmc+O1xyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5mcmFtZXdvcmtUaGVtZVN1YmplY3QgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgICB0aGlzLmZyYW1ld29ya1RoZW1lJCA9IHRoaXMuZnJhbWV3b3JrVGhlbWVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICB9XHJcblxyXG4gICAvL1RPRE8tcmV2aWV3OiB0aGlzIGFjdHMgYXMgYSBwdWJsaWMgYXBpIHRvIGNoYW5nZSB0aGUgdGhlbWVcclxuICAgLy9idXQgZG9lc24ndCBkbyB0aGUgYWN0dWFsIGNoYW5nZSwgaW5zdGVhZCBpdCByZWxpZXMgb24gXHJcbiAgIC8vdGhlIENzc0ZyYW1ld2tDb3JvbXBvbmVudCBoYXZpbmcgc3Vic2NyaWJlZCB0byBsaXN0ZW4gXHJcbiAgIC8vYW5kIHBlcmZvcm0gdGhlIGFjdHVhbCB0aGVtZSBjaGFuZ2VcclxuICAgcmVxdWVzdFRoZW1lQ2hhbmdlKHRoZW1lTmFtZTpzdHJpbmcpe1xyXG4gICAgICB0aGlzLmZyYW1ld29ya1RoZW1lU3ViamVjdC5uZXh0KHRoZW1lTmFtZSk7XHJcbiAgICAgIHRoaXMuYWN0aXZlUmVxdWVzdGVkVGhlbWU9dGhlbWVOYW1lO1xyXG4gICB9XHJcblxyXG4gICAvL1RPRE8tcmV2aWV3OnRoZXJlJ3Mgbm8gd2F5IG9mIGtub3dpbmcgd2hhdCB0aGUgaW5kaXZpZHVhbCBjb21wb25lbnQgaW5zdGFuY2VcclxuICAgLy9oYXMgc2V0IGl0cyB0aGVtZSB0bywgdGhpcyBpcyBqdXN0IHRoZSB0aGVtZSBtYWRlIHRocm91Z2ggdGhlIHJlcXVlc3RUaGVtZUNoYW5nZVxyXG4gICAvL2NhbGxzIGFuZCBub3QgZ3VhcmFudGVlZCB0byBjb3JyZXNwb25kIHRvIHRoZSBhY3R1YWwgdGhlbWUgc2V0IGJ5IHRoZSBcclxuICAgLy9jb21wb25lbnQgaW5zdGFuY2UgdGhlbXNlbHZlc1xyXG4gICBnZXRBY3RpdmVSZXF1ZXN0ZWRUaGVtZSgpOnN0cmluZ3tcclxuICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlUmVxdWVzdGVkVGhlbWU7XHJcbiAgIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,85 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import { Framework } from '@ng-formworks/core';
3
+ import { CssFrameworkComponent } from './css-framework.component';
4
+ import { CSS_FRAMEWORK_CFG } from './css-framework.defs';
5
+ import * as i0 from "@angular/core";
6
+ import * as i1 from "./css-framework.service";
7
+ export class CssFramework extends Framework {
8
+ constructor(cfg, cssFWService) {
9
+ super();
10
+ this.cssFWService = cssFWService;
11
+ this.name = 'css';
12
+ this.framework = CssFrameworkComponent;
13
+ this.name = cfg.name;
14
+ this.text = cfg.text || this.name;
15
+ this.stylesheets = cfg.stylesheets;
16
+ this.scripts = cfg.scripts;
17
+ this.config = cfg;
18
+ this.widgets = cfg.widgets;
19
+ }
20
+ getActiveTheme() {
21
+ let activeRequestedThemeName = this.cssFWService.getActiveRequestedTheme();
22
+ let frameWorkThemes = this.config?.widgetstyles?.__themes__;
23
+ let theme = frameWorkThemes && frameWorkThemes[0];
24
+ if (activeRequestedThemeName) { //if not set return first theme in config;
25
+ theme = { name: activeRequestedThemeName, text: activeRequestedThemeName };
26
+ if (frameWorkThemes) {
27
+ let filtered = frameWorkThemes.filter(theme => { return theme.name == activeRequestedThemeName; });
28
+ theme = (filtered && filtered[0]) || theme;
29
+ }
30
+ }
31
+ return theme;
32
+ }
33
+ requestThemeChange(name) {
34
+ this.cssFWService.requestThemeChange(name);
35
+ }
36
+ registerTheme(newTheme, overwrite = true) {
37
+ let themeList = this.config?.widgetstyles?.__themes__ || [];
38
+ let matchedThemes = themeList.filter(theme => { return newTheme.name == theme.name; });
39
+ if (matchedThemes && matchedThemes[0]) {
40
+ if (overwrite) {
41
+ matchedThemes[0].text = newTheme.text;
42
+ return true;
43
+ }
44
+ if (!overwrite) {
45
+ return false;
46
+ }
47
+ }
48
+ if (!matchedThemes || matchedThemes.length == 0) {
49
+ let cfg = this.config;
50
+ cfg.widgetstyles = this.config.widgetstyles || {};
51
+ cfg.widgetstyles.__themes__ = cfg.widgetstyles.__themes__ || [];
52
+ cfg.widgetstyles.__themes__.push(newTheme);
53
+ return true;
54
+ }
55
+ }
56
+ ;
57
+ unregisterTheme(name) {
58
+ let themeList = this.config?.widgetstyles?.__themes__;
59
+ let foundInd = -1;
60
+ if (themeList) {
61
+ themeList.forEach((theme, ind) => {
62
+ if (name == theme.name) {
63
+ foundInd = ind;
64
+ }
65
+ });
66
+ if (foundInd >= 0) {
67
+ themeList.splice(foundInd, 1);
68
+ return true;
69
+ }
70
+ }
71
+ return false;
72
+ }
73
+ getConfig() {
74
+ return this.config;
75
+ }
76
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CssFramework, deps: [{ token: CSS_FRAMEWORK_CFG }, { token: i1.CssframeworkService }], target: i0.ɵɵFactoryTarget.Injectable }); }
77
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CssFramework }); }
78
+ }
79
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CssFramework, decorators: [{
80
+ type: Injectable
81
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
82
+ type: Inject,
83
+ args: [CSS_FRAMEWORK_CFG]
84
+ }] }, { type: i1.CssframeworkService }] });
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzLmZyYW1ld29yay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWZvcm13b3Jrcy1jc3NmcmFtZXdvcmsvc3JjL2xpYi9jc3MuZnJhbWV3b3JrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsaUJBQWlCLEVBQVUsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBTWpFLE1BQU0sT0FBTyxZQUFhLFNBQVEsU0FBUztJQUt6QyxZQUF3QyxHQUF1QixFQUFRLFlBQWdDO1FBQ2pHLEtBQUssRUFBRSxDQUFDO1FBRHlELGlCQUFZLEdBQVosWUFBWSxDQUFvQjtRQUp2RyxTQUFJLEdBQUcsS0FBSyxDQUFDO1FBRWIsY0FBUyxHQUFPLHFCQUFxQixDQUFDO1FBS2hDLElBQUksQ0FBQyxJQUFJLEdBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztRQUNuQixJQUFJLENBQUMsSUFBSSxHQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUUsSUFBSSxDQUFDLElBQUksQ0FBQztRQUM5QixJQUFJLENBQUMsV0FBVyxHQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7UUFDakMsSUFBSSxDQUFDLE9BQU8sR0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUMsR0FBRyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxPQUFPLEdBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztJQUMvQixDQUFDO0lBQ0QsY0FBYztRQUNaLElBQUksd0JBQXdCLEdBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ3pFLElBQUksZUFBZSxHQUFD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QUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQzs4R0EzRVUsWUFBWSxrQkFLSCxpQkFBaUI7a0hBTDFCLFlBQVk7OzJGQUFaLFlBQVk7a0JBRHhCLFVBQVU7OzBCQU1JLE1BQU07MkJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZyYW1ld29yayB9IGZyb20gJ0BuZy1mb3Jtd29ya3MvY29yZSc7XHJcbmltcG9ydCB7IENzc0ZyYW1ld29ya0NvbXBvbmVudCB9IGZyb20gJy4vY3NzLWZyYW1ld29yay5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDU1NfRlJBTUVXT1JLX0NGRywgY3NzX2Z3IH0gZnJvbSAnLi9jc3MtZnJhbWV3b3JrLmRlZnMnO1xyXG5pbXBvcnQgeyBDc3NmcmFtZXdvcmtTZXJ2aWNlIH0gZnJvbSAnLi9jc3MtZnJhbWV3b3JrLnNlcnZpY2UnO1xyXG5cclxuXHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBDc3NGcmFtZXdvcmsgZXh0ZW5kcyBGcmFtZXdvcmsge1xyXG4gIG5hbWUgPSAnY3NzJztcclxuXHJcbiAgZnJhbWV3b3JrOmFueSA9IENzc0ZyYW1ld29ya0NvbXBvbmVudDtcclxuICBjb25maWc6Y3NzX2Z3LmZyYW1ld29ya2NmZ1xyXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoQ1NTX0ZSQU1FV09SS19DRkcgKSBjZmc6Y3NzX2Z3LmZyYW1ld29ya2NmZyxwdWJsaWMgY3NzRldTZXJ2aWNlOkNzc2ZyYW1ld29ya1NlcnZpY2Upe1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5uYW1lPWNmZy5uYW1lO1xyXG4gICAgICAgIHRoaXMudGV4dD1jZmcudGV4dHx8dGhpcy5uYW1lO1xyXG4gICAgICAgIHRoaXMuc3R5bGVzaGVldHM9Y2ZnLnN0eWxlc2hlZXRzO1xyXG4gICAgICAgIHRoaXMuc2NyaXB0cz1jZmcuc2NyaXB0cztcclxuICAgICAgICB0aGlzLmNvbmZpZz1jZmc7XHJcbiAgICAgICAgdGhpcy53aWRnZXRzPWNmZy53aWRnZXRzO1xyXG4gIH1cclxuICBnZXRBY3RpdmVUaGVtZSgpOmNzc19mdy50aGVtZUtWe1xyXG4gICAgbGV0IGFjdGl2ZVJlcXVlc3RlZFRoZW1lTmFtZT10aGlzLmNzc0ZXU2VydmljZS5nZXRBY3RpdmVSZXF1ZXN0ZWRUaGVtZSgpO1xyXG4gICAgbGV0IGZyYW1lV29ya1RoZW1lcz10aGlzLmNvbmZpZz8ud2lkZ2V0c3R5bGVzPy5fX3RoZW1lc19fO1xyXG4gICAgXHJcbiAgICBsZXQgdGhlbWU9ZnJhbWVXb3JrVGhlbWVzICYmIGZyYW1lV29ya1RoZW1lc1swXVxyXG4gICAgaWYoYWN0aXZlUmVxdWVzdGVkVGhlbWVOYW1lKXsvL2lmIG5vdCBzZXQgcmV0dXJuIGZpcnN0IHRoZW1lIGluIGNvbmZpZztcclxuICAgICAgdGhlbWU9e25hbWU6YWN0aXZlUmVxdWVzdGVkVGhlbWVOYW1lLHRleHQ6YWN0aXZlUmVxdWVzdGVkVGhlbWVOYW1lfTtcclxuICAgICAgaWYoZnJhbWVXb3JrVGhlbWVzKXtcclxuICAgICAgICBsZXQgZmlsdGVyZWQ9ZnJhbWVXb3JrVGhlbWVzLmZpbHRlcih0aGVtZT0+e3JldHVybiB0aGVtZS5uYW1lPT1hY3RpdmVSZXF1ZXN0ZWRUaGVtZU5hbWV9KTtcclxuICAgICAgICB0aGVtZT0oZmlsdGVyZWQgJiYgZmlsdGVyZWRbMF0pfHx0aGVtZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuICB0aGVtZTtcclxuICB9XHJcblxyXG4gIHJlcXVlc3RUaGVtZUNoYW5nZShuYW1lOnN0cmluZyl7XHJcbiAgICB0aGlzLmNzc0ZXU2VydmljZS5yZXF1ZXN0VGhlbWVDaGFuZ2UobmFtZSk7XHJcbiAgfVxyXG5cclxuICByZWdpc3RlclRoZW1lKG5ld1RoZW1lOmNzc19mdy50aGVtZUtWLG92ZXJ3cml0ZTpib29sZWFuPXRydWUpOmJvb2xlYW57XHJcbiAgICBsZXQgdGhlbWVMaXN0PXRoaXMuY29uZmlnPy53aWRnZXRzdHlsZXM/Ll9fdGhlbWVzX198fFtdO1xyXG4gICAgbGV0IG1hdGNoZWRUaGVtZXM9dGhlbWVMaXN0LmZpbHRlcih0aGVtZT0+e3JldHVybiBuZXdUaGVtZS5uYW1lPT10aGVtZS5uYW1lfSk7XHJcbiAgICBpZihtYXRjaGVkVGhlbWVzICYmIG1hdGNoZWRUaGVtZXNbMF0pe1xyXG4gICAgICBpZihvdmVyd3JpdGUpe1xyXG4gICAgICAgIG1hdGNoZWRUaGVtZXNbMF0udGV4dD1uZXdUaGVtZS50ZXh0O1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKCFvdmVyd3JpdGUpe1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgIH1cclxuICAgIGlmKCFtYXRjaGVkVGhlbWVzIHx8IG1hdGNoZWRUaGVtZXMubGVuZ3RoPT0wKXtcclxuICAgICAgbGV0IGNmZzphbnk9dGhpcy5jb25maWdcclxuICAgICAgY2ZnLndpZGdldHN0eWxlcz0gdGhpcy5jb25maWcud2lkZ2V0c3R5bGVzfHx7fTtcclxuICAgICAgY2ZnLndpZGdldHN0eWxlcy5fX3RoZW1lc19fPWNmZy53aWRnZXRzdHlsZXMuX190aGVtZXNfX3x8W107XHJcbiAgICAgIGNmZy53aWRnZXRzdHlsZXMuX190aGVtZXNfXy5wdXNoKG5ld1RoZW1lKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgdW5yZWdpc3RlclRoZW1lKG5hbWU6c3RyaW5nKTpib29sZWFue1xyXG4gICAgbGV0IHRoZW1lTGlzdD10aGlzLmNvbmZpZz8ud2lkZ2V0c3R5bGVzPy5fX3RoZW1lc19fO1xyXG4gICAgbGV0IGZvdW5kSW5kPS0xO1xyXG4gICAgaWYodGhlbWVMaXN0KXtcclxuICAgICAgICB0aGVtZUxpc3QuZm9yRWFjaCgodGhlbWUsaW5kKT0+e1xyXG4gICAgICAgICAgaWYobmFtZT09dGhlbWUubmFtZSl7XHJcbiAgICAgICAgICAgIGZvdW5kSW5kPWluZDtcclxuICAgICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGlmKGZvdW5kSW5kPj0wKXtcclxuICAgICAgICB0aGVtZUxpc3Quc3BsaWNlKGZvdW5kSW5kLDEpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnZXRDb25maWcoKTpjc3NfZncuZnJhbWV3b3JrY2Zne1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICBzdHlsZXNoZWV0cyA9IFtcclxuICAgIC8vVE9ETy1lbmFibGUgZm9yIGRldiBvbmx5XHJcbiAgICBjZG4udGFpbHdpbmRjc3MuY29tLzMuMy4zJ1xyXG4gIF07XHJcblxyXG5cclxuICBzY3JpcHRzID0gW1xyXG5cclxuICBdO1xyXG4gICovXHJcblxyXG59XHJcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public-api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctZm9ybXdvcmtzLWNzc2ZyYW1ld29yay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWZvcm13b3Jrcy1jc3NmcmFtZXdvcmsvc3JjL25nLWZvcm13b3Jrcy1jc3NmcmFtZXdvcmsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -0,0 +1,9 @@
1
+ /*
2
+ * Public API Surface of ng-formworks-cssframework
3
+ */
4
+ export * from './lib/css-framework.component';
5
+ export * from './lib/css-framework.defs';
6
+ export * from './lib/css-framework.module';
7
+ export * from './lib/css-framework.service';
8
+ export * from './lib/css.framework';
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWZvcm13b3Jrcy1jc3NmcmFtZXdvcmsvc3JjL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMscUJBQXFCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgbmctZm9ybXdvcmtzLWNzc2ZyYW1ld29ya1xyXG4gKi9cclxuXHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL2Nzcy1mcmFtZXdvcmsuY29tcG9uZW50JztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY3NzLWZyYW1ld29yay5kZWZzJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvY3NzLWZyYW1ld29yay5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jc3MtZnJhbWV3b3JrLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi9jc3MuZnJhbWV3b3JrJztcclxuXHJcbiJdfQ==