@ng-formworks/cssframework 18.4.0 → 18.5.2

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.
@@ -1,17 +1,17 @@
1
- import { Component, Input, ViewEncapsulation } from '@angular/core';
2
- import { addClasses, inArray } from '@ng-formworks/core';
1
+ import { ChangeDetectorRef, Component, ViewEncapsulation, inject, input, signal } from '@angular/core';
2
+ import { FrameworkLibraryService, JsonSchemaFormService, addClasses, inArray } from '@ng-formworks/core';
3
3
  import _, { cloneDeep, map } from 'lodash';
4
+ import { CssframeworkService } from './css-framework.service';
4
5
  import * as i0 from "@angular/core";
5
6
  import * as i1 from "@ng-formworks/core";
6
- import * as i2 from "./css-framework.service";
7
- import * as i3 from "@angular/common";
7
+ import * as i2 from "@angular/common";
8
8
  export class CssFrameworkComponent {
9
9
  //TODO-move to ng-formworks/core utility.functions.ts
10
10
  applyCssClasses(type, widgetOptions, styleOptions) {
11
11
  //console.log("applyCssClasses for type:"+type);
12
- let cssClasses = this.widgetStyles[type];
12
+ let cssClasses = this.widgetStyles()[type];
13
13
  if (!cssClasses || _.isEmpty(cssClasses)) {
14
- cssClasses = this.widgetStyles.default;
14
+ cssClasses = this.widgetStyles().default;
15
15
  }
16
16
  Object.keys(cssClasses).forEach(catName => {
17
17
  let classList = cssClasses[catName];
@@ -53,19 +53,21 @@ export class CssFrameworkComponent {
53
53
  });
54
54
  return flattened;
55
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;
56
+ constructor() {
57
+ this.changeDetector = inject(ChangeDetectorRef);
58
+ this.jsf = inject(JsonSchemaFormService);
59
+ this.jsfFLService = inject(FrameworkLibraryService);
60
+ this.cssFWService = inject(CssframeworkService);
63
61
  this.frameworkInitialized = false;
64
62
  this.formControl = null;
65
63
  this.debugOutput = '';
66
64
  this.debug = '';
67
65
  this.parentArray = null;
68
66
  this.isOrderable = false;
67
+ this.layoutNode = input(undefined);
68
+ this.layoutIndex = input(undefined);
69
+ this.dataIndex = input(undefined);
70
+ this.widgetStyles = signal(undefined);
69
71
  this.defaultStyling = {
70
72
  array: {},
71
73
  default: { fieldHtmlClass: "cssfw-form-control" },
@@ -84,10 +86,11 @@ export class CssFrameworkComponent {
84
86
  __required_asterisk__: "cssfw-required-astersisk",
85
87
  __screen_reader__: "cssfw-screen-reader"
86
88
  };
89
+ const cssFWService = this.cssFWService;
87
90
  let activeFramework = this.jsfFLService.activeFramework;
88
91
  let fwcfg = activeFramework.config || {};
89
- this.widgetStyles = Object.assign(this.defaultStyling, fwcfg.widgetstyles);
90
- let defaultTheme = this.widgetStyles.__themes__[0];
92
+ this.widgetStyles.set(Object.assign(this.defaultStyling, fwcfg.widgetstyles));
93
+ let defaultTheme = this.widgetStyles().__themes__[0];
91
94
  let defaultThemeName = cssFWService.activeRequestedTheme || defaultTheme.name;
92
95
  this.theme = this.options?.theme || defaultThemeName;
93
96
  this.frameworkThemeSubs = cssFWService.frameworkTheme$.subscribe(newTheme => {
@@ -99,29 +102,31 @@ export class CssFrameworkComponent {
99
102
  this.frameworkThemeSubs = null;
100
103
  }
101
104
  get showRemoveButton() {
105
+ const layoutNode = this.layoutNode();
102
106
  if (!this.options.removable || this.options.readonly ||
103
- this.layoutNode.type === '$ref') {
107
+ layoutNode.type === '$ref') {
104
108
  return false;
105
109
  }
106
- if (this.layoutNode.recursiveReference) {
110
+ if (layoutNode.recursiveReference) {
107
111
  return true;
108
112
  }
109
- if (!this.layoutNode.arrayItem || !this.parentArray) {
113
+ if (!layoutNode.arrayItem || !this.parentArray) {
110
114
  return false;
111
115
  }
112
116
  // If array length <= minItems, don't allow removing any items
113
117
  return this.parentArray.items.length - 1 <= this.parentArray.options.minItems ? false :
114
118
  // For removable list items, allow removing any item
115
- this.layoutNode.arrayItemType === 'list' ? true :
119
+ layoutNode.arrayItemType === 'list' ? true :
116
120
  // For removable tuple items, only allow removing last item in list
117
- this.layoutIndex[this.layoutIndex.length - 1] === this.parentArray.items.length - 2;
121
+ this.layoutIndex()[this.layoutIndex().length - 1] === this.parentArray.items.length - 2;
118
122
  }
119
123
  ngOnInit() {
120
124
  this.initializeFramework();
121
- if (this.layoutNode.arrayItem && this.layoutNode.type !== '$ref') {
125
+ const layoutNode = this.layoutNode();
126
+ if (layoutNode.arrayItem && layoutNode.type !== '$ref') {
122
127
  this.parentArray = this.jsf.getParentNode(this);
123
128
  if (this.parentArray) {
124
- this.isOrderable = this.layoutNode.arrayItemType === 'list' &&
129
+ this.isOrderable = layoutNode.arrayItemType === 'list' &&
125
130
  !this.options.readonly && this.parentArray.options.orderable;
126
131
  }
127
132
  }
@@ -132,15 +137,16 @@ export class CssFrameworkComponent {
132
137
  }
133
138
  }
134
139
  initializeFramework() {
135
- if (this.layoutNode) {
136
- this.options = cloneDeep(this.layoutNode.options);
140
+ const layoutNode = this.layoutNode();
141
+ if (layoutNode) {
142
+ this.options = cloneDeep(layoutNode.options);
137
143
  this.widgetLayoutNode = {
138
- ...this.layoutNode,
139
- options: cloneDeep(this.layoutNode.options)
144
+ ...layoutNode,
145
+ options: cloneDeep(layoutNode.options)
140
146
  };
141
147
  this.widgetOptions = this.widgetLayoutNode.options;
142
148
  this.formControl = this.jsf.getFormControl(this);
143
- this.options.isInputWidget = inArray(this.layoutNode.type, [
149
+ this.options.isInputWidget = inArray(layoutNode.type, [
144
150
  'button', 'checkbox', 'checkboxes-inline', 'checkboxes', 'color',
145
151
  'date', 'datetime-local', 'datetime', 'email', 'file', 'hidden',
146
152
  'image', 'integer', 'month', 'number', 'password', 'radio',
@@ -149,15 +155,15 @@ export class CssFrameworkComponent {
149
155
  ]);
150
156
  this.options.title = this.setTitle();
151
157
  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);
158
+ addClasses(this.options.htmlClass, 'schema-form-' + layoutNode.type);
159
+ if (layoutNode.type === 'array') {
160
+ this.options.htmlClass = addClasses(this.options.htmlClass, this.widgetStyles().__array__.htmlClass);
155
161
  }
156
- else if (this.layoutNode.arrayItem && this.layoutNode.type !== '$ref') {
157
- this.options.htmlClass = addClasses(this.options.htmlClass, this.widgetStyles.__array_item_nonref__.htmlClass);
162
+ else if (layoutNode.arrayItem && layoutNode.type !== '$ref') {
163
+ this.options.htmlClass = addClasses(this.options.htmlClass, this.widgetStyles().__array_item_nonref__.htmlClass);
158
164
  }
159
165
  else {
160
- this.options.htmlClass = addClasses(this.options.htmlClass, this.widgetStyles.__form_group__.htmlClass);
166
+ this.options.htmlClass = addClasses(this.options.htmlClass, this.widgetStyles().__form_group__.htmlClass);
161
167
  }
162
168
  /*
163
169
  this.options.htmlClass =
@@ -177,25 +183,25 @@ export class CssFrameworkComponent {
177
183
  */
178
184
  this.widgetOptions.htmlClass = '';
179
185
  this.options.labelHtmlClass =
180
- addClasses(this.options.labelHtmlClass, this.widgetStyles.__control_label__.labelHtmlClass);
186
+ addClasses(this.options.labelHtmlClass, this.widgetStyles().__control_label__.labelHtmlClass);
181
187
  this.widgetOptions.activeClass =
182
- addClasses(this.widgetOptions.activeClass, this.widgetStyles.__active__.activeClass);
188
+ addClasses(this.widgetOptions.activeClass, this.widgetStyles().__active__.activeClass);
183
189
  this.options.fieldAddonLeft =
184
190
  this.options.fieldAddonLeft || this.options.prepend;
185
191
  this.options.fieldAddonRight =
186
192
  this.options.fieldAddonRight || this.options.append;
187
193
  // Add asterisk to titles if required
188
- if (this.options.title && this.layoutNode.type !== 'tab' &&
194
+ if (this.options.title && layoutNode.type !== 'tab' &&
189
195
  !this.options.notitle && this.options.required &&
190
196
  !this.options.title.includes('*')) {
191
- let required_asterisk_class = this.widgetStyles.__required_asterisk__ || 'text-danger';
197
+ let required_asterisk_class = this.widgetStyles().__required_asterisk__ || 'text-danger';
192
198
  this.options.title += ` <strong class="${required_asterisk_class}">*</strong>`;
193
199
  }
194
- if (this.layoutNode.type == 'optionfieldset') {
200
+ if (layoutNode.type == 'optionfieldset') {
195
201
  this.options.messageLocation = 'top';
196
202
  }
197
203
  // Set miscelaneous styles and settings for each control type
198
- this.applyCssClasses(this.layoutNode.type, this.widgetOptions, this.options.style);
204
+ this.applyCssClasses(layoutNode.type, this.widgetOptions, this.options.style);
199
205
  if (this.formControl) {
200
206
  this.updateHelpBlock(this.formControl.status);
201
207
  this.formControl.statusChanges.subscribe(status => this.updateHelpBlock(status));
@@ -215,7 +221,7 @@ export class CssFrameworkComponent {
215
221
  this.options.description || this.options.help || null;
216
222
  }
217
223
  setTitle() {
218
- switch (this.layoutNode.type) {
224
+ switch (this.layoutNode().type) {
219
225
  case 'button':
220
226
  case 'checkbox':
221
227
  case 'section':
@@ -246,19 +252,11 @@ export class CssFrameworkComponent {
246
252
  removeItem() {
247
253
  this.jsf.removeItem(this);
248
254
  }
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 }); }
255
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CssFrameworkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
256
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: CssFrameworkComponent, selector: "css-framework", inputs: { layoutNode: { classPropertyName: "layoutNode", publicName: "layoutNode", isSignal: true, isRequired: false, transformFunction: null }, layoutIndex: { classPropertyName: "layoutIndex", publicName: "layoutIndex", isSignal: true, isRequired: false, transformFunction: null }, dataIndex: { classPropertyName: "dataIndex", publicName: "dataIndex", isSignal: true, isRequired: false, transformFunction: null } }, 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: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None }); }
251
257
  }
252
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CssFrameworkComponent, decorators: [{
258
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CssFrameworkComponent, decorators: [{
253
259
  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==
260
+ 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"] }]
261
+ }], ctorParameters: () => [] });
262
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzLWZyYW1ld29yay5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1mb3Jtd29ya3MtY3NzZnJhbWV3b3JrL3NyYy9saWIvY3NzLWZyYW1ld29yay5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1mb3Jtd29ya3MtY3NzZnJhbWV3b3JrL3NyYy9saWIvY3NzLWZyYW1ld29yay5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFnQyxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNySSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUscUJBQXFCLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3pHLE9BQU8sQ0FBQyxFQUFFLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUczQyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7OztBQVE5RCxNQUFNLE9BQU8scUJBQXFCO0lBeUJoQyxxREFBcUQ7SUFDckQsZUFBZSxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsWUFBWTtRQUMvQyxnREFBZ0Q7UUFDaEQsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzNDLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRyxDQUFDO1lBQzFDLFVBQVUsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsT0FBTyxDQUFDO1FBQzNDLENBQUM7UUFDRCxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFB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QUFNLENBQUM7WUFDWixLQUFLLEtBQUssQ0FBQztZQUNYLEtBQUssUUFBUSxDQUFDO1lBQ2QsS0FBSyxTQUFTLENBQUM7WUFDZixLQUFLLFVBQVUsQ0FBQztZQUNoQixLQUFLLE1BQU0sQ0FBQztZQUNaLEtBQUssTUFBTTtnQkFDVCxPQUFPLElBQUksQ0FBQztZQUNkLEtBQUssa0JBQWtCO2dCQUNyQixJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLGtCQUFrQixDQUFDO2dCQUM5QyxPQUFPLElBQUksQ0FBQztZQUNkLEtBQUssY0FBYztnQkFDakIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2dCQUNyQyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyx5QkFBeUIsQ0FBQztnQkFDckQsT0FBTyxJQUFJLENBQUM7WUFDZCxLQUFLLFVBQVU7Z0JBQ2IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQzlDLE9BQU8sSUFBSSxDQUFDO1lBQ2Q7Z0JBQ0UsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO2dCQUNoQyxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7SUFDSCxDQUFDO0lBRUQsVUFBVTtRQUNSLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7K0dBclNVLHFCQUFxQjttR0FBckIscUJBQXFCLDJlQ2JsQyxvckdBa0UrRzs7NEZEckRsRyxxQkFBcUI7a0JBTmpDLFNBQVM7K0JBQ0UsZUFBZSxpQkFHVixpQkFBaUIsQ0FBQyxJQUFJIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgVmlld0VuY2Fwc3VsYXRpb24sIGluamVjdCwgaW5wdXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGcmFtZXdvcmtMaWJyYXJ5U2VydmljZSwgSnNvblNjaGVtYUZvcm1TZXJ2aWNlLCBhZGRDbGFzc2VzLCBpbkFycmF5IH0gZnJvbSAnQG5nLWZvcm13b3Jrcy9jb3JlJztcclxuaW1wb3J0IF8sIHsgY2xvbmVEZWVwLCBtYXAgfSBmcm9tICdsb2Rhc2gnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY3NzX2Z3IH0gZnJvbSAnLi9jc3MtZnJhbWV3b3JrLmRlZnMnO1xyXG5pbXBvcnQgeyBDc3NmcmFtZXdvcmtTZXJ2aWNlIH0gZnJvbSAnLi9jc3MtZnJhbWV3b3JrLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdjc3MtZnJhbWV3b3JrJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vY3NzLWZyYW1ld29yay5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vY3NzLWZyYW1ld29yay5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIENzc0ZyYW1ld29ya0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLE9uRGVzdHJveSB7XHJcbiAgY2hhbmdlRGV0ZWN0b3IgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xyXG4gIGpzZiA9IGluamVjdChKc29uU2NoZW1hRm9ybVNlcnZpY2UpO1xyXG4gIGpzZkZMU2VydmljZSA9IGluamVjdChGcmFtZXdvcmtMaWJyYXJ5U2VydmljZSk7XHJcbiAgY3NzRldTZXJ2aWNlID0gaW5qZWN0KENzc2ZyYW1ld29ya1NlcnZpY2UpO1xyXG5cclxuICBmcmFtZXdvcmtJbml0aWFsaXplZCA9IGZhbHNlO1xyXG4gIHdpZGdldE9wdGlvbnM6IGFueTsgLy8gT3B0aW9ucyBwYXNzZWQgdG8gY2hpbGQgd2lkZ2V0XHJcbiAgd2lkZ2V0TGF5b3V0Tm9kZTogYW55OyAvLyBsYXlvdXROb2RlIHBhc3NlZCB0byBjaGlsZCB3aWRnZXRcclxuICBvcHRpb25zOiBhbnk7IC8vIE9wdGlvbnMgdXNlZCBpbiB0aGlzIGZyYW1ld29ya1xyXG4gIGZvcm1Db250cm9sOiBhbnkgPSBudWxsO1xyXG4gIGRlYnVnT3V0cHV0OiBhbnkgPSAnJztcclxuICBkZWJ1ZzogYW55ID0gJyc7XHJcbiAgcGFyZW50QXJyYXk6IGFueSA9IG51bGw7XHJcbiAgaXNPcmRlcmFibGUgPSBmYWxzZTtcclxuICByZWFkb25seSBsYXlvdXROb2RlID0gaW5wdXQ8YW55Pih1bmRlZmluZWQpO1xyXG4gIHJlYWRvbmx5IGxheW91dEluZGV4ID0gaW5wdXQ8bnVtYmVyW10+KHVuZGVmaW5lZCk7XHJcbiAgcmVhZG9ubHkgZGF0YUluZGV4ID0gaW5wdXQ8bnVtYmVyW10+KHVuZGVmaW5lZCk7XHJcblxyXG4gIHJlYWRvbmx5IHdpZGdldFN0eWxlcyA9IHNpZ25hbDxjc3NfZncud2lkZ2V0c3R5bGVzPih1bmRlZmluZWQpO1xyXG5cclxuXHJcblxyXG5cclxuXHJcbiAgLy9UT0RPLW1vdmUgdG8gbmctZm9ybXdvcmtzL2NvcmUgdXRpbGl0eS5mdW5jdGlvbnMudHNcclxuICBhcHBseUNzc0NsYXNzZXModHlwZSwgd2lkZ2V0T3B0aW9ucywgc3R5bGVPcHRpb25zKSB7XHJcbiAgICAvL2NvbnNvbGUubG9nKFwiYXBwbHlDc3NDbGFzc2VzIGZvciB0eXBlOlwiK3R5cGUpO1xyXG4gICAgbGV0IGNzc0NsYXNzZXMgPSB0aGlzLndpZGdldFN0eWxlcygpW3R5cGVdO1xyXG4gICAgaWYgKCFjc3NDbGFzc2VzIHx8IF8uaXNFbXB0eShjc3NDbGFzc2VzKSApIHtcclxuICAgICAgY3NzQ2xhc3NlcyA9IHRoaXMud2lkZ2V0U3R5bGVzKCkuZGVmYXVsdDtcclxuICAgIH1cclxuICAgIE9iamVjdC5rZXlzKGNzc0NsYXNzZXMpLmZvckVhY2goY2F0TmFtZSA9PiB7XHJcbiAgICAgIGxldCBjbGFzc0xpc3QgPSBjc3NDbGFzc2VzW2NhdE5hbWVdO1xyXG5cclxuICAgICAgaWYgKGNsYXNzTGlzdC5sZW5ndGgpIHtcclxuICAgICAgICB3aWRnZXRPcHRpb25zW2NhdE5hbWVdID0gYWRkQ2xhc3Nlcyh3aWRnZXRPcHRpb25zW2NhdE5hbWVdLCBjbGFzc0xpc3QpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChzdHlsZU9wdGlvbnMpIHtcclxuICAgICAgICB3aWRnZXRPcHRpb25zW2NhdE5hbWVdID0gYWRkQ2xhc3Nlcyh3aWRnZXRPcHRpb25zW2NhdE5hbWVdLCBzdHlsZU9wdGlvbnMpO1xyXG4gICAgICB9XHJcblxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIGZsYXR0ZW5XaWRnZXRTdHlsZXMod3N0eWxlczpjc3NfZncud2lkZ2V0c3R5bGVzKXtcclxuICAgIHZhciBmbGF0dGVuZWQ6YW55PXt9O1xyXG4gICAgbGV0IGlnbm9yZT1bJ19fdGhlbWVzX18nXTtcclxuICAgIE9iamVjdC5rZXlzKHdzdHlsZXMpLmZvckVhY2god2tleT0+e1xyXG4gICAgICBsZXQgd3N0eWxlPXdzdHlsZXNbd2tleV07XHJcbiAgICAgIGlmKGlnbm9yZS5pbmRleE9mKHdrZXkpPj0wKXtcclxuICAgICAgICBmbGF0dGVuZWRbd2tleV09d3N0eWxlO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZihfLmlzQXJyYXkod3N0eWxlKSl7XHJcbiAgICAgICAgXHJcbiAgICAgICAgZmxhdHRlbmVkW3drZXldPXdzdHlsZS5qb2luKFwiIFwiKTtcclxuICAgICAgfVxyXG4gICAgICBpZihfLmlzT2JqZWN0KHdzdHlsZSkpey8vaXMgY3NzY2F0ZWdvcmllc1xyXG4gICAgICAgICAgZmxhdHRlbmVkW3drZXldPWZsYXR0ZW5lZFt3a2V5XXx8e307XHJcbiAgICAgICAgT2JqZWN0LmtleXMod3N0eWxlKS5mb3JFYWNoKGNhdE5hbWU9PntcclxuICAgICAgICAgIGxldCBjc3NDYXQ9d3N0eWxlW2NhdE5hbWVdO1xyXG4gICAgICAgICAgXHJcbiAgICAgICAgICBpZihfLmlzQXJyYXkoY3NzQ2F0KSl7XHJcbiAgICAgICAgICAgIGZsYXR0ZW5lZFt3a2V5XVtjYXROYW1lXT1jc3NDYXQuam9pbihcIiBcIik7XHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgZmxhdHRlbmVkW3drZXldW2NhdE5hbWVdPWNzc0NhdDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICAgIGlmKF8uaXNTdHJpbmcod3N0eWxlKSl7XHJcbiAgICAgICAgZmxhdHRlbmVkW3drZXldPXdzdHlsZTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICAgIHJldHVybiBmbGF0dGVuZWRcclxufVxyXG5cclxuZGVmYXVsdFN0eWxpbmc6Y3NzX2Z3LndpZGdldHN0eWxlcz17XHJcbiAgYXJyYXk6e30sXHJcbiAgZGVmYXVsdDp7ZmllbGRIdG1sQ2xhc3M6IFwiY3NzZnctZm9ybS1jb250cm9sXCJ9LFxyXG4gIF9fdGhlbWVzX186W3tuYW1lOidub3RoZW1lJyx0ZXh0OidOb25lJ31dLFxyXG4gIF9fcmVtb3ZlX2l0ZW1fXzpcImNzc2Z3LXJlbW92ZS1pdGVtXCIsXHJcbiAgICBfX2FycmF5X2l0ZW1fbm9ucmVmX186e1xyXG4gICAgICBcImh0bWxDbGFzc1wiOiAgIFwiY3NzZnctYXJyYXktaXRlbS1ub25yZWZcIlxyXG4gIH0sXHJcbiAgX19hY3RpdmVfXzp7YWN0aXZlQ2xhc3M6XCJjc3Nmdy1hY3RpdmVcIn0sXHJcbiAgX19hcnJheV9fOntodG1sQ2xhc3M6XCJjc3Nmdy1hcnJheVwifSxcclxuICBfX2NvbnRyb2xfbGFiZWxfXzp7bGFiZWxIdG1sQ2xhc3M6XCJjc3Nmdy1jb250cm9sLWxhYmVsXCJ9LFxyXG4gIF9fZm9ybV9ncm91cF9fOntodG1sQ2xhc3M6IFwiY3NzZnctZm9ybS1ncm91cFwifSxcclxuICBfX2ZpZWxkX2FkZG9uX2xlZnRfXzpcImNzc2Z3LWFkZG9uLWxlZnRcIixcclxuICBfX2ZpZWxkX2FkZG9uX3JpZ2h0X186XCJjc3Nmdy1hZGRvbi1yaWdodFwiLFxyXG4gIF9faGVscF9ibG9ja19fOlwiY3NzZnctaGVscC1ibG9ja1wiLFxyXG4gIF9fcmVxdWlyZWRfYXN0ZXJpc2tfXzpcImNzc2Z3LXJlcXVpcmVkLWFzdGVyc2lza1wiLFxyXG4gIF9fc2NyZWVuX3JlYWRlcl9fOiBcImNzc2Z3LXNjcmVlbi1yZWFkZXJcIlxyXG5cclxufVxyXG5cclxuXHJcblxyXG5cclxudGhlbWU6c3RyaW5nXHJcbmZyYW1ld29ya1RoZW1lU3ViczpTdWJzY3JpcHRpb247XHJcbiAgY29uc3RydWN0b3IoKXtcclxuICAgIGNvbnN0IGNzc0ZXU2VydmljZSA9IHRoaXMuY3NzRldTZXJ2aWNlO1xyXG5cclxuICAgIFxyXG4gICAgbGV0IGFjdGl2ZUZyYW1ld29yazphbnk9dGhpcy5qc2ZGTFNlcnZpY2UuYWN0aXZlRnJhbWV3b3JrO1xyXG4gICAgbGV0IGZ3Y2ZnPWFjdGl2ZUZyYW1ld29yay5jb25maWd8fHt9O1xyXG4gICAgXHJcbiAgICB0aGlzLndpZGdldFN0eWxlcy5zZXQoT2JqZWN0LmFzc2lnbih0aGlzLmRlZmF1bHRTdHlsaW5nLGZ3Y2ZnLndpZGdldHN0eWxlcykpO1xyXG4gICAgbGV0IGRlZmF1bHRUaGVtZT10aGlzLndpZGdldFN0eWxlcygpLl9fdGhlbWVzX19bMF07XHJcbiAgICBsZXQgZGVmYXVsdFRoZW1lTmFtZT1jc3NGV1NlcnZpY2UuYWN0aXZlUmVxdWVzdGVkVGhlbWV8fGRlZmF1bHRUaGVtZS5uYW1lO1xyXG4gICAgdGhpcy50aGVtZT10aGlzLm9wdGlvbnM/LnRoZW1lfHwgZGVmYXVsdFRoZW1lTmFtZTtcclxuICAgIHRoaXMuZnJhbWV3b3JrVGhlbWVTdWJzPWNzc0ZXU2VydmljZS5mcmFtZXdvcmtUaGVtZSQuc3Vic2NyaWJlKG5ld1RoZW1lPT57XHJcbiAgICAgICAgdGhpcy50aGVtZT1uZXdUaGVtZTtcclxuICAgIH0pXHJcbiBcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5mcmFtZXdvcmtUaGVtZVN1YnMudW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuZnJhbWV3b3JrVGhlbWVTdWJzPW51bGw7XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0IHNob3dSZW1vdmVCdXR0b24oKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCBsYXlvdXROb2RlID0gdGhpcy5sYXlvdXROb2RlKCk7XHJcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5yZW1vdmFibGUgfHwgdGhpcy5vcHRpb25zLnJlYWRvbmx5IHx8XHJcbiAgICAgIGxheW91dE5vZGUudHlwZSA9PT0gJyRyZWYnXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gICAgaWYgKGxheW91dE5vZGUucmVjdXJzaXZlUmVmZXJlbmNlKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKCFsYXlvdXROb2RlLmFycmF5SXRlbSB8fCAhdGhpcy5wYXJlbnRBcnJheSkge1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICAvLyBJZiBhcnJheSBsZW5ndGggPD0gbWluSXRlbXMsIGRvbid0IGFsbG93IHJlbW92aW5nIGFueSBpdGVtc1xyXG4gICAgcmV0dXJuIHRoaXMucGFyZW50QXJyYXkuaXRlbXMubGVuZ3RoIC0gMSA8PSB0aGlzLnBhcmVudEFycmF5Lm9wdGlvbnMubWluSXRlbXMgPyBmYWxzZSA6XHJcbiAgICAgIC8vIEZvciByZW1vdmFibGUgbGlzdCBpdGVtcywgYWxsb3cgcmVtb3ZpbmcgYW55IGl0ZW1cclxuICAgICAgbGF5b3V0Tm9kZS5hcnJheUl0ZW1UeXBlID09PSAnbGlzdCcgPyB0cnVlIDpcclxuICAgICAgICAvLyBGb3IgcmVtb3ZhYmxlIHR1cGxlIGl0ZW1zLCBvbmx5IGFsbG93IHJlbW92aW5nIGxhc3QgaXRlbSBpbiBsaXN0XHJcbiAgICAgICAgdGhpcy5sYXlvdXRJbmRleCgpW3RoaXMubGF5b3V0SW5kZXgoKS5sZW5ndGggLSAxXSA9PT0gdGhpcy5wYXJlbnRBcnJheS5pdGVtcy5sZW5ndGggLSAyO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmluaXRpYWxpemVGcmFtZXdvcmsoKTtcclxuICAgIGNvbnN0IGxheW91dE5vZGUgPSB0aGlzLmxheW91dE5vZGUoKTtcclxuICAgIGlmIChsYXlvdXROb2RlLmFycmF5SXRlbSAmJiBsYXlvdXROb2RlLnR5cGUgIT09ICckcmVmJykge1xyXG4gICAgICB0aGlzLnBhcmVudEFycmF5ID0gdGhpcy5qc2YuZ2V0UGFyZW50Tm9kZSh0aGlzKTtcclxuICAgICAgaWYgKHRoaXMucGFyZW50QXJyYXkpIHtcclxuICAgICAgICB0aGlzLmlzT3JkZXJhYmxlID0gbGF5b3V0Tm9kZS5hcnJheUl0ZW1UeXBlID09PSAnbGlzdCcgJiZcclxuICAgICAgICAgICF0aGlzLm9wdGlvbnMucmVhZG9ubHkgJiYgdGhpcy5wYXJlbnRBcnJheS5vcHRpb25zLm9yZGVyYWJsZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoKSB7XHJcbiAgICBpZiAoIXRoaXMuZnJhbWV3b3JrSW5pdGlhbGl6ZWQpIHtcclxuICAgICAgdGhpcy5pbml0aWFsaXplRnJhbWV3b3JrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBpbml0aWFsaXplRnJhbWV3b3JrKCkge1xyXG4gICAgY29uc3QgbGF5b3V0Tm9kZSA9IHRoaXMubGF5b3V0Tm9kZSgpO1xyXG4gICAgaWYgKGxheW91dE5vZGUpIHtcclxuICAgICAgdGhpcy5vcHRpb25zID0gY2xvbmVEZWVwKGxheW91dE5vZGUub3B0aW9ucyk7XHJcbiAgICAgIHRoaXMud2lkZ2V0TGF5b3V0Tm9kZSA9IHtcclxuICAgICAgICAuLi5sYXlvdXROb2RlLFxyXG4gICAgICAgIG9wdGlvbnM6IGNsb25lRGVlcChsYXlvdXROb2RlLm9wdGlvbnMpXHJcbiAgICAgIH07XHJcbiAgICAgIHRoaXMud2lkZ2V0T3B0aW9ucyA9IHRoaXMud2lkZ2V0TGF5b3V0Tm9kZS5vcHRpb25zO1xyXG4gICAgICB0aGlzLmZvcm1Db250cm9sID0gdGhpcy5qc2YuZ2V0Rm9ybUNvbnRyb2wodGhpcyk7XHJcblxyXG4gICAgICB0aGlzLm9wdGlvbnMuaXNJbnB1dFdpZGdldCA9IGluQXJyYXkobGF5b3V0Tm9kZS50eXBlLCBbXHJcbiAgICAgICAgJ2J1dHRvbicsICdjaGVja2JveCcsICdjaGVja2JveGVzLWlubGluZScsICdjaGVja2JveGVzJywgJ2NvbG9yJyxcclxuICAgICAgICAnZGF0ZScsICdkYXRldGltZS1sb2NhbCcsICdkYXRldGltZScsICdlbWFpbCcsICdmaWxlJywgJ2hpZGRlbicsXHJcbiAgICAgICAgJ2ltYWdlJywgJ2ludGVnZXInLCAnbW9udGgnLCAnbnVtYmVyJywgJ3Bhc3N3b3JkJywgJ3JhZGlvJyxcclxuICAgICAgICAncmFkaW9idXR0b25zJywgJ3JhZGlvcy1pbmxpbmUnLCAncmFkaW9zJywgJ3JhbmdlJywgJ3Jlc2V0JywgJ3NlYXJjaCcsXHJcbiAgICAgICAgJ3NlbGVjdCcsICdzdWJtaXQnLCAndGVsJywgJ3RleHQnLCAndGV4dGFyZWEnLCAndGltZScsICd1cmwnLCAnd2VlaydcclxuICAgICAgXSk7XHJcblxyXG4gICAgICB0aGlzLm9wdGlvbnMudGl0bGUgPSB0aGlzLnNldFRpdGxlKCk7XHJcblxyXG4gICAgICB0aGlzLm9wdGlvbnMuaHRtbENsYXNzID1cclxuICAgICAgICBhZGRDbGFzc2VzKHRoaXMub3B0aW9ucy5odG1sQ2xhc3MsICdzY2hlbWEtZm9ybS0nICsgbGF5b3V0Tm9kZS50eXBlKTtcclxuXHJcbiAgICAgIFxyXG4gICAgICBpZiAobGF5b3V0Tm9kZS50eXBlID09PSAnYXJyYXknKSB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmh0bWxDbGFzcyA9IGFkZENsYXNzZXModGhpcy5vcHRpb25zLmh0bWxDbGFzcywgdGhpcy53aWRnZXRTdHlsZXMoKS5fX2FycmF5X18uaHRtbENsYXNzKTtcclxuICAgICAgfSBlbHNlIGlmIChsYXlvdXROb2RlLmFycmF5SXRlbSAmJiBsYXlvdXROb2RlLnR5cGUgIT09ICckcmVmJykge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5odG1sQ2xhc3MgPSBhZGRDbGFzc2VzKHRoaXMub3B0aW9ucy5odG1sQ2xhc3MsIHRoaXMud2lkZ2V0U3R5bGVzKCkuX19hcnJheV9pdGVtX25vbnJlZl9fLmh0bWxDbGFzcyk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmh0bWxDbGFzcyA9IGFkZENsYXNzZXModGhpcy5vcHRpb25zLmh0bWxDbGFzcywgdGhpcy53aWRnZXRTdHlsZXMoKS5fX2Zvcm1fZ3JvdXBfXy5odG1sQ2xhc3MpO1xyXG4gICAgICB9XHJcbiAgICAgIFxyXG5cclxuICAgICAgLypcclxuICAgICAgdGhpcy5vcHRpb25zLmh0bWxDbGFzcyA9XHJcbiAgICAgIHRoaXMubGF5b3V0Tm9kZS50eXBlID09PSAnYXJyYXknID9cclxuICAgICAgICBhZGRDbGFzc2VzKHRoaXMub3B0aW9ucy5odG1sQ2xhc3MsIFsnYm9yZGVyJywnc2hhZG93LW1kJywncC0xJ10pIDpcclxuICAgICAgICB0aGlzLmxheW91dE5vZGUuYXJyYXlJdGVtICYmIHRoaXMubGF5b3V0Tm9kZS50eXBlICE9PSAnJHJlZicgP1xyXG4gICAgICAgICAgYWRkQ2xhc3Nlcyh0aGlzLm9wdGlvbnMuaHRtbENsYXNzLCBbJ2JvcmRlcicsJ3NoYWRvdy1tZCcsJ3AtMSddKSA6XHJcbiAgICAgICAgICBhZGRDbGFzc2VzKHRoaXMub3B0aW9ucy5odG1sQ2xhc3MsICdtYi0xJyk7XHJcbiovXHJcblxyXG4vKlxyXG50aGlzLm9wdGlvbnMuaHRtbENsYXNzID1cclxudGhpcy5sYXlvdXROb2RlLnR5cGUgPT09ICdhcnJheScgP1xyXG5hZGRDbGFzc2VzKHRoaXMub3B0aW9ucy5odG1sQ2xhc3MsIHRoaXMud2lkZ2V0U3R5bGVzLmFycmF5Lmh0bWxDbGFzcyk6XHJcbiAgdGhpcy5sYXlvdXROb2RlLmFycmF5SXRlbSAmJiB0aGlzLmxheW91dE5vZGUudHlwZSAhPT0gJyRyZWYnID9cclxuICBhZGRDbGFzc2VzKHRoaXMub3B0aW9ucy5odG1sQ2xhc3MsIHRoaXMud2lkZ2V0U3R5bGVzLl9fYXJyYXlfaXRlbV9ub25yZWZfXy5odG1sQ2xhc3MpOlxyXG4gIGFkZENsYXNzZXModGhpcy5vcHRpb25zLmh0bWxDbGFzcywgdGhpcy53aWRnZXRTdHlsZXMuX19mb3JtX2dyb3VwX18uaHRtbENsYXNzKTtcclxuKi9cclxuICAgICAgICAgIFxyXG4gICAgICB0aGlzLndpZGdldE9wdGlvbnMuaHRtbENsYXNzID0gJyc7XHJcbiAgICAgIHRoaXMub3B0aW9ucy5sYWJlbEh0bWxDbGFzcyA9XHJcbiAgICAgICAgYWRkQ2xhc3Nlcyh0aGlzLm9wdGlvbnMubGFiZWxIdG1sQ2xhc3MsIHRoaXMud2lkZ2V0U3R5bGVzKCkuX19jb250cm9sX2xhYmVsX18ubGFiZWxIdG1sQ2xhc3MpO1xyXG4gICAgICB0aGlzLndpZGdldE9wdGlvbnMuYWN0aXZlQ2xhc3MgPVxyXG4gICAgICAgIGFkZENsYXNzZXModGhpcy53aWRnZXRPcHRpb25zLmFjdGl2ZUNsYXNzLCB0aGlzLndpZGdldFN0eWxlcygpLl9fYWN0aXZlX18uYWN0aXZlQ2xhc3MpO1xyXG4gICAgICB0aGlzLm9wdGlvbnMuZmllbGRBZGRvbkxlZnQgPVxyXG4gICAgICAgIHRoaXMub3B0aW9ucy5maWVsZEFkZG9uTGVmdCB8fCB0aGlzLm9wdGlvbnMucHJlcGVuZDtcclxuICAgICAgdGhpcy5vcHRpb25zLmZpZWxkQWRkb25SaWdodCA9XHJcbiAgICAgICAgdGhpcy5vcHRpb25zLmZpZWxkQWRkb25SaWdodCB8fCB0aGlzLm9wdGlvbnMuYXBwZW5kO1xyXG5cclxuICAgICAgLy8gQWRkIGFzdGVyaXNrIHRvIHRpdGxlcyBpZiByZXF1aXJlZFxyXG4gICAgICBpZiAodGhpcy5vcHRpb25zLnRpdGxlICYmIGxheW91dE5vZGUudHlwZSAhPT0gJ3RhYicgJiZcclxuICAgICAgICAhdGhpcy5vcHRpb25zLm5vdGl0bGUgJiYgdGhpcy5vcHRpb25zLnJlcXVpcmVkICYmXHJcbiAgICAgICAgIXRoaXMub3B0aW9ucy50aXRsZS5pbmNsdWRlcygnKicpXHJcbiAgICAgICkge1xyXG4gICAgICAgIGxldCByZXF1aXJlZF9hc3Rlcmlza19jbGFzcz10aGlzLndpZGdldFN0eWxlcygpLl9fcmVxdWlyZWRfYXN0ZXJpc2tfX3x8J3RleHQtZGFuZ2VyJ1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy50aXRsZSArPSBgIDxzdHJvbmcgY2xhc3M9XCIke3JlcXVpcmVkX2FzdGVyaXNrX2NsYXNzfVwiPio8L3N0cm9uZz5gO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChsYXlvdXROb2RlLnR5cGUgPT0gJ29wdGlvbmZpZWxkc2V0Jykge1xyXG4gICAgICAgIHRoaXMub3B0aW9ucy5tZXNzYWdlTG9jYXRpb24gPSAndG9wJztcclxuICAgICAgfVxyXG4gICAgICAvLyBTZXQgbWlzY2VsYW5lb3VzIHN0eWxlcyBhbmQgc2V0dGluZ3MgZm9yIGVhY2ggY29udHJvbCB0eXBlXHJcbiAgICAgIHRoaXMuYXBwbHlDc3NDbGFzc2VzKGxheW91dE5vZGUudHlwZSwgdGhpcy53aWRnZXRPcHRpb25zLCB0aGlzLm9wdGlvbnMuc3R5bGUpO1xyXG4gICAgICBpZiAodGhpcy5mb3JtQ29udHJvbCkge1xyXG4gICAgICAgIHRoaXMudXBkYXRlSGVscEJsb2NrKHRoaXMuZm9ybUNvbnRyb2wuc3RhdHVzKTtcclxuICAgICAgICB0aGlzLmZvcm1Db250cm9sLnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKHN0YXR1cyA9PiB0aGlzLnVwZGF0ZUhlbHBCbG9jayhzdGF0dXMpKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5kZWJ1Zykge1xyXG4gICAgICAgICAgY29uc3QgdmFyczogYW55W10gPSBbXTtcclxuICAgICAgICAgIHRoaXMuZGVidWdPdXRwdXQgPSBtYXAodmFycywgdGhpc1ZhciA9PiBKU09OLnN0cmluZ2lmeSh0aGlzVmFyLCBudWxsLCAyKSkuam9pbignXFxuJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuZnJhbWV3b3JrSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIHVwZGF0ZUhlbHBCbG9jayhzdGF0dXMpIHtcclxuICAgIHRoaXMub3B0aW9ucy5oZWxwQmxvY2sgPSBzdGF0dXMgPT09ICdJTlZBTElEJyAmJlxyXG4gICAgICB0aGlzLm9wdGlvbnMuZW5hYmxlRXJyb3JTdGF0ZSAmJiB0aGlzLmZvcm1Db250cm9sLmVycm9ycyAmJlxyXG4gICAgICAodGhpcy5mb3JtQ29udHJvbC5kaXJ0eSB8fCB0aGlzLm9wdGlvbnMuZmVlZGJhY2tPblJlbmRlcikgP1xyXG4gICAgICB0aGlzLmpzZi5mb3JtYXRFcnJvcnModGhpcy5mb3JtQ29udHJvbC5lcnJvcnMsIHRoaXMub3B0aW9ucy52YWxpZGF0aW9uTWVzc2FnZXMpIDpcclxuICAgICAgdGhpcy5vcHRpb25zLmRlc2NyaXB0aW9uIHx8IHRoaXMub3B0aW9ucy5oZWxwIHx8IG51bGw7XHJcbiAgfVxyXG5cclxuICBzZXRUaXRsZSgpOiBzdHJpbmcge1xyXG4gICAgc3dpdGNoICh0aGlzLmxheW91dE5vZGUoKS50eXBlKSB7XHJcbiAgICAgIGNhc2UgJ2J1dHRvbic6XHJcbiAgICAgIGNhc2UgJ2NoZWNrYm94JzpcclxuICAgICAgY2FzZSAnc2VjdGlvbic6XHJcbiAgICAgIGNhc2UgJ2hlbHAnOlxyXG4gICAgICBjYXNlICdtc2cnOlxyXG4gICAgICBjYXNlICdzdWJtaXQnOlxyXG4gICAgICBjYXNlICdtZXNzYWdlJzpcclxuICAgICAgY2FzZSAndGFiYXJyYXknOlxyXG4gICAgICBjYXNlICd0YWJzJzpcclxuICAgICAgY2FzZSAnJHJlZic6XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIGNhc2UgJ2FkdmFuY2VkZmllbGRzZXQnOlxyXG4gICAgICAgIHRoaXMud2lkZ2V0T3B0aW9ucy5leHBhbmRhYmxlID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLndpZGdldE9wdGlvbnMudGl0bGUgPSAnQWR2YW5jZWQgb3B0aW9ucyc7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIGNhc2UgJ2F1dGhmaWVsZHNldCc6XHJcbiAgICAgICAgdGhpcy53aWRnZXRPcHRpb25zLmV4cGFuZGFibGUgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMud2lkZ2V0T3B0aW9ucy50aXRsZSA9ICdBdXRoZW50aWNhdGlvbiBzZXR0aW5ncyc7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIGNhc2UgJ2ZpZWxkc2V0JzpcclxuICAgICAgICB0aGlzLndpZGdldE9wdGlvbnMudGl0bGUgPSB0aGlzLm9wdGlvbnMudGl0bGU7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgdGhpcy53aWRnZXRPcHRpb25zLnRpdGxlID0gbnVsbDtcclxuICAgICAgICByZXR1cm4gdGhpcy5qc2Yuc2V0SXRlbVRpdGxlKHRoaXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlSXRlbSgpIHtcclxuICAgIHRoaXMuanNmLnJlbW92ZUl0ZW0odGhpcyk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgW2F0dHIuZGF0YS1icy10aGVtZV09XCJ0aGVtZVwiIFthdHRyLmRhdGEtdGhlbWVdPVwidGhlbWVcIiBbY2xhc3NdPVwib3B0aW9ucz8uaHRtbENsYXNzIHx8ICcnXCIgW2NsYXNzLmhhcy1mZWVkYmFja109XCJvcHRpb25zPy5mZWVkYmFjayAmJiBvcHRpb25zPy5pc0lucHV0V2lkZ2V0ICYmXHJcbiAgICAgICAgKGZvcm1Db250cm9sPy5kaXJ0eSB8fCBvcHRpb25zPy5mZWVkYmFja09uUmVuZGVyKVwiIFtjbGFzcy5oYXMtZXJyb3JdPVwib3B0aW9ucz8uZW5hYmxlRXJyb3JTdGF0ZSAmJiBmb3JtQ29udHJvbD8uZXJyb3JzICYmXHJcbiAgICAgICAgKGZvcm1Db250cm9sPy5kaXJ0eSB8fCBvcHRpb25zPy5mZWVkYmFja09uUmVuZGVyKVwiIFtjbGFzcy5oYXMtc3VjY2Vzc109XCJvcHRpb25zPy5lbmFibGVTdWNjZXNzU3RhdGUgJiYgIWZvcm1Db250cm9sPy5lcnJvcnMgJiZcclxuICAgICAgICAoZm9ybUNvbnRyb2w/LmRpcnR5IHx8IG9wdGlvbnM/LmZlZWRiYWNrT25SZW5kZXIpXCI+XHJcblxyXG4gICAgPGJ1dHRvbiAqbmdJZj1cInNob3dSZW1vdmVCdXR0b25cIiBbY2xhc3NdPVwid2lkZ2V0U3R5bGVzKCkuX19yZW1vdmVfaXRlbV9fXCIgdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJyZW1vdmVJdGVtKClcIj5cclxuICAgIDxzcGFuIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPiZ0aW1lczs8L3NwYW4+XHJcbiAgICA8c3BhbiBbY2xhc3NdPVwid2lkZ2V0U3R5bGVzKCkuX19zY3JlZW5fcmVhZGVyX19cIj5DbG9zZTwvc3Bhbj5cclxuICA8L2J1dHRvbj5cclxuICAgIDxkaXYgKm5nSWY9XCJvcHRpb25zPy5tZXNzYWdlTG9jYXRpb24gPT09ICd0b3AnXCI+XHJcbiAgICAgICAgPHAgKm5nSWY9XCJvcHRpb25zPy5oZWxwQmxvY2tcIiBbY2xhc3NdPVwid2lkZ2V0U3R5bGVzKCkuX19oZWxwX2Jsb2NrX19cIiBbaW5uZXJIVE1MXT1cIm9wdGlvbnM/LmhlbHBCbG9ja1wiPjwvcD5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxsYWJlbCAqbmdJZj1cIm9wdGlvbnM/LnRpdGxlICYmIGxheW91dE5vZGUoKT8udHlwZSAhPT0gJ3RhYidcIiBbYXR0ci5mb3JdPVwiJ2NvbnRyb2wnICsgbGF5b3V0Tm9kZSgpPy5faWRcIiBbY2xhc3NdPVwib3B0aW9ucz8ubGFiZWxIdG1sQ2xhc3MgfHwgJydcIiBbY2xhc3Muc3Itb25seV09XCJvcHRpb25zPy5ub3RpdGxlXCIgW2lubmVySFRNTF09XCJvcHRpb25zPy50aXRsZVwiPjwvbGFiZWw+XHJcbiAgICA8cCAqbmdJZj1cImxheW91dE5vZGUoKT8udHlwZSA9PT0gJ3N1Ym1pdCcgJiYganNmPy5mb3JtT3B0aW9ucz8uZmllbGRzUmVxdWlyZWRcIj5cclxuICAgICAgICA8c3Ryb25nIFtjbGFzc109XCJ3aWRnZXRTdHlsZXMoKS5fX3JlcXVpcmVkX2FzdGVyaXNrX19cIj4qPC9zdHJvbmc+ID0gcmVxdWlyZWQgZmllbGRzXHJcbiAgICA8L3A+XHJcbiAgICA8ZGl2IFtjbGFzcy5pbnB1dC1ncm91cF09XCJvcHRpb25zPy5maWVsZEFkZG9uTGVmdCB8fCBvcHRpb25zPy5maWVsZEFkZG9uUmlnaHRcIj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cIm9wdGlvbnM/LmZpZWxkQWRkb25MZWZ0XCIgW2NsYXNzXT1cIndpZGdldFN0eWxlcygpLl9fZmllbGRfYWRkb25fbGVmdF9fXCIgW2lubmVySFRNTF09XCJvcHRpb25zPy5maWVsZEFkZG9uTGVmdFwiPjwvc3Bhbj5cclxuXHJcbiAgICAgICAgPHNlbGVjdC13aWRnZXQtd2lkZ2V0IFtsYXlvdXROb2RlXT1cIndpZGdldExheW91dE5vZGVcIiBbZGF0YUluZGV4XT1cImRhdGFJbmRleCgpXCIgW2xheW91dEluZGV4XT1cImxheW91dEluZGV4KClcIj48L3NlbGVjdC13aWRnZXQtd2lkZ2V0PlxyXG5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cIm9wdGlvbnM/LmZpZWxkQWRkb25SaWdodFwiIFtjbGFzc109XCJ3aWRnZXRTdHlsZXMoKS5fX2ZpZWxkX2FkZG9uX3JpZ2h0X19cIiBbaW5uZXJIVE1MXT1cIm9wdGlvbnM/LmZpZWxkQWRkb25SaWdodFwiPjwvc3Bhbj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxzcGFuICpuZ0lmPVwib3B0aW9ucz8uZmVlZGJhY2sgJiYgb3B0aW9ucz8uaXNJbnB1dFdpZGdldCAmJlxyXG4gICAgICAgICAgIW9wdGlvbnM/LmZpZWxkQWRkb25SaWdodCAmJiAhbGF5b3V0Tm9kZSgpLmFycmF5SXRlbSAmJlxyXG4gICAgICAgICAgKGZvcm1Db250cm9sPy5kaXJ0eSB8fCBvcHRpb25zPy5mZWVkYmFja09uUmVuZGVyKVwiIFtjbGFzcy5nbHlwaGljb24tb2tdPVwib3B0aW9ucz8uZW5hYmxlU3VjY2Vzc1N0YXRlICYmICFmb3JtQ29udHJvbD8uZXJyb3JzXCIgW2NsYXNzLmdseXBoaWNvbi1yZW1vdmVdPVwib3B0aW9ucz8uZW5hYmxlRXJyb3JTdGF0ZSAmJiBmb3JtQ29udHJvbD8uZXJyb3JzXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wtZmVlZGJhY2sgZ2x5cGhpY29uXCI+PC9zcGFuPlxyXG4gICAgPGRpdiAqbmdJZj1cIm9wdGlvbnM/Lm1lc3NhZ2VMb2NhdGlvbiAhPT0gJ3RvcCdcIj5cclxuICAgICAgICA8cCAqbmdJZj1cIm9wdGlvbnM/LmhlbHBCbG9ja1wiIFtjbGFzc109XCJ3aWRnZXRTdHlsZXMoKS5fX2hlbHBfYmxvY2tfX1wiIFtpbm5lckhUTUxdPVwib3B0aW9ucz8uaGVscEJsb2NrXCI+PC9wPlxyXG4gICAgPC9kaXY+XHJcblxyXG48L2Rpdj5cclxuXHJcbjxkaXYgKm5nSWY9XCJkZWJ1ZyAmJiBkZWJ1Z091dHB1dFwiPmRlYnVnOlxyXG4gICAgPHByZT57e2RlYnVnT3V0cHV0fX08L3ByZT5cclxuPC9kaXY+XHJcblxyXG48IS0tXHJcbjxkaXYgY2xhc3M9XCJidG4gaW5wdXQgaW5wdXQtYm9yZGVyZWQgaW5wdXQtcHJpbWFyeSB3LWZ1bGwgbWF4LXcteHNcclxuYnRuLW5ldXRyYWxcclxuYnRuLXByaW1hcnlcclxuYnRuLXNlY29uZGFyeVxyXG5idG4tYWNjZW50XHJcbmJ0bi1pbmZvXHJcbmJ0bi1zdWNjZXNzXHJcbmJ0bi13YXJuaW5nXHJcbmJ0bi1lcnJvclxyXG5idG4tZ2hvc3RcclxuYnRuLWxpbmtcclxuYnRuLW91dGxpbmVcclxuYnRuLWFjdGl2ZVxyXG5idG4tZGlzYWJsZWRcclxuZ2xhc3Ncclxubm8tYW5pbWF0aW9uXHJcbmJ0bi1sZ1xyXG5idG4tbWRcclxuYnRuLXNtXHJcbmJ0bi14c1xyXG5idG4td2lkZVxyXG5idG4tYmxvY2tcclxuYnRuLWNpcmNsZVxyXG5idG4tc3F1YXJlXHJcbmhpZGRlblxyXG5cIj5kZWZzIGFsPC9kaXY+XHJcbi0tPlxyXG48IS0tPGlucHV0IHR5cGU9XCJ0ZXh0XCIgcGxhY2Vob2xkZXI9XCJUeXBlIGhlcmVcIiBjbGFzcz1cImlucHV0IGlucHV0LWJvcmRlcmVkIGlucHV0LXByaW1hcnkgdy1mdWxsIG1heC13LXhzXCIgLz4tLT4iXX0=
@@ -5,11 +5,11 @@ import { CssFrameworkComponent } from './css-framework.component';
5
5
  import { CssframeworkService } from './css-framework.service';
6
6
  import * as i0 from "@angular/core";
7
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,
8
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CssFrameworkModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
9
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: CssFrameworkModule, declarations: [CssFrameworkComponent], imports: [JsonSchemaFormModule,
10
10
  CommonModule,
11
11
  WidgetLibraryModule], exports: [CssFrameworkComponent] }); }
12
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CssFrameworkModule, providers: [
12
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CssFrameworkModule, providers: [
13
13
  JsonSchemaFormService,
14
14
  FrameworkLibraryService,
15
15
  WidgetLibraryService,
@@ -19,7 +19,7 @@ export class CssFrameworkModule {
19
19
  CommonModule,
20
20
  WidgetLibraryModule] }); }
21
21
  }
22
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CssFrameworkModule, decorators: [{
22
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CssFrameworkModule, decorators: [{
23
23
  type: NgModule,
24
24
  args: [{
25
25
  declarations: [
@@ -42,4 +42,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
42
42
  ]
43
43
  }]
44
44
  }] });
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzLWZyYW1ld29yay5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1mb3Jtd29ya3MtY3NzZnJhbWV3b3JrL3NyYy9saWIvY3NzLWZyYW1ld29yay5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLG9CQUFvQixFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckosT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBd0I5RCxNQUFNLE9BQU8sa0JBQWtCOzhHQUFsQixrQkFBa0I7K0dBQWxCLGtCQUFrQixpQkFsQjNCLHFCQUFxQixhQUdyQixvQkFBb0I7WUFDcEIsWUFBWTtZQUNaLG1CQUFtQixhQUduQixxQkFBcUI7K0dBVVosa0JBQWtCLGFBUmxCO1lBQ1QscUJBQXFCO1lBQ3JCLHVCQUF1QjtZQUN2QixvQkFBb0I7WUFDcEIsbUJBQW1CO1lBQ3BCLCtEQUErRDtTQUMvRCxZQWJDLG9CQUFvQjtZQUNwQixZQUFZO1lBQ1osbUJBQW1COzsyRkFhVixrQkFBa0I7a0JBcEI5QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWixxQkFBcUI7cUJBQ3RCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxvQkFBb0I7d0JBQ3BCLFlBQVk7d0JBQ1osbUJBQW1CO3FCQUNwQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AscUJBQXFCO3FCQUN0QjtvQkFDRCxTQUFTLEVBQUU7d0JBQ1QscUJBQXFCO3dCQUNyQix1QkFBdUI7d0JBQ3ZCLG9CQUFvQjt3QkFDcEIsbUJBQW1CO3dCQUNwQiwrREFBK0Q7cUJBQy9EO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRnJhbWV3b3JrTGlicmFyeVNlcnZpY2UsIEpzb25TY2hlbWFGb3JtTW9kdWxlLCBKc29uU2NoZW1hRm9ybVNlcnZpY2UsIFdpZGdldExpYnJhcnlNb2R1bGUsIFdpZGdldExpYnJhcnlTZXJ2aWNlIH0gZnJvbSAnQG5nLWZvcm13b3Jrcy9jb3JlJztcclxuaW1wb3J0IHsgQ3NzRnJhbWV3b3JrQ29tcG9uZW50IH0gZnJvbSAnLi9jc3MtZnJhbWV3b3JrLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENzc2ZyYW1ld29ya1NlcnZpY2UgfSBmcm9tICcuL2Nzcy1mcmFtZXdvcmsuc2VydmljZSc7XHJcblxyXG5cclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBDc3NGcmFtZXdvcmtDb21wb25lbnRcclxuICBdLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIEpzb25TY2hlbWFGb3JtTW9kdWxlLFxyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgV2lkZ2V0TGlicmFyeU1vZHVsZSxcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtcclxuICAgIENzc0ZyYW1ld29ya0NvbXBvbmVudFxyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICBKc29uU2NoZW1hRm9ybVNlcnZpY2UsXHJcbiAgICBGcmFtZXdvcmtMaWJyYXJ5U2VydmljZSxcclxuICAgIFdpZGdldExpYnJhcnlTZXJ2aWNlLFxyXG4gICAgQ3NzZnJhbWV3b3JrU2VydmljZVxyXG4gICAvLyB7IHByb3ZpZGU6IEZyYW1ld29yaywgdXNlQ2xhc3M6IENzc0ZyYW1ld29yaywgbXVsdGk6IHRydWUgfSxcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDc3NGcmFtZXdvcmtNb2R1bGUgeyB9XHJcbiJdfQ==
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzLWZyYW1ld29yay5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1mb3Jtd29ya3MtY3NzZnJhbWV3b3JrL3NyYy9saWIvY3NzLWZyYW1ld29yay5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLG9CQUFvQixFQUFFLHFCQUFxQixFQUFFLG1CQUFtQixFQUFFLG9CQUFvQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckosT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBd0I5RCxNQUFNLE9BQU8sa0JBQWtCOytHQUFsQixrQkFBa0I7Z0hBQWxCLGtCQUFrQixpQkFsQjNCLHFCQUFxQixhQUdyQixvQkFBb0I7WUFDcEIsWUFBWTtZQUNaLG1CQUFtQixhQUduQixxQkFBcUI7Z0hBVVosa0JBQWtCLGFBUmxCO1lBQ1QscUJBQXFCO1lBQ3JCLHVCQUF1QjtZQUN2QixvQkFBb0I7WUFDcEIsbUJBQW1CO1lBQ3BCLCtEQUErRDtTQUMvRCxZQWJDLG9CQUFvQjtZQUNwQixZQUFZO1lBQ1osbUJBQW1COzs0RkFhVixrQkFBa0I7a0JBcEI5QixRQUFRO21CQUFDO29CQUNSLFlBQVksRUFBRTt3QkFDWixxQkFBcUI7cUJBQ3RCO29CQUNELE9BQU8sRUFBRTt3QkFDUCxvQkFBb0I7d0JBQ3BCLFlBQVk7d0JBQ1osbUJBQW1CO3FCQUNwQjtvQkFDRCxPQUFPLEVBQUU7d0JBQ1AscUJBQXFCO3FCQUN0QjtvQkFDRCxTQUFTLEVBQUU7d0JBQ1QscUJBQXFCO3dCQUNyQix1QkFBdUI7d0JBQ3ZCLG9CQUFvQjt3QkFDcEIsbUJBQW1CO3dCQUNwQiwrREFBK0Q7cUJBQy9EO2lCQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRnJhbWV3b3JrTGlicmFyeVNlcnZpY2UsIEpzb25TY2hlbWFGb3JtTW9kdWxlLCBKc29uU2NoZW1hRm9ybVNlcnZpY2UsIFdpZGdldExpYnJhcnlNb2R1bGUsIFdpZGdldExpYnJhcnlTZXJ2aWNlIH0gZnJvbSAnQG5nLWZvcm13b3Jrcy9jb3JlJztcclxuaW1wb3J0IHsgQ3NzRnJhbWV3b3JrQ29tcG9uZW50IH0gZnJvbSAnLi9jc3MtZnJhbWV3b3JrLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENzc2ZyYW1ld29ya1NlcnZpY2UgfSBmcm9tICcuL2Nzcy1mcmFtZXdvcmsuc2VydmljZSc7XHJcblxyXG5cclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBDc3NGcmFtZXdvcmtDb21wb25lbnRcclxuICBdLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIEpzb25TY2hlbWFGb3JtTW9kdWxlLFxyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgV2lkZ2V0TGlicmFyeU1vZHVsZSxcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtcclxuICAgIENzc0ZyYW1ld29ya0NvbXBvbmVudFxyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICBKc29uU2NoZW1hRm9ybVNlcnZpY2UsXHJcbiAgICBGcmFtZXdvcmtMaWJyYXJ5U2VydmljZSxcclxuICAgIFdpZGdldExpYnJhcnlTZXJ2aWNlLFxyXG4gICAgQ3NzZnJhbWV3b3JrU2VydmljZVxyXG4gICAvLyB7IHByb3ZpZGU6IEZyYW1ld29yaywgdXNlQ2xhc3M6IENzc0ZyYW1ld29yaywgbXVsdGk6IHRydWUgfSxcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDc3NGcmFtZXdvcmtNb2R1bGUgeyB9XHJcbiJdfQ==
@@ -21,13 +21,13 @@ export class CssframeworkService {
21
21
  getActiveRequestedTheme() {
22
22
  return this.activeRequestedTheme;
23
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' }); }
24
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CssframeworkService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
25
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CssframeworkService, providedIn: 'root' }); }
26
26
  }
27
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CssframeworkService, decorators: [{
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CssframeworkService, decorators: [{
28
28
  type: Injectable,
29
29
  args: [{
30
30
  providedIn: 'root'
31
31
  }]
32
32
  }], ctorParameters: () => [] });
33
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzLWZyYW1ld29yay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZm9ybXdvcmtzLWNzc2ZyYW1ld29yay9zcmMvbGliL2Nzcy1mcmFtZXdvcmsuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBSzNDLE1BQU0sT0FBTyxtQkFBbUI7SUFLOUI7UUFDRSxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztRQUNuRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNsRSxDQUFDO0lBRUQsNERBQTREO0lBQzVELHlEQUF5RDtJQUN6RCx3REFBd0Q7SUFDeEQscUNBQXFDO0lBQ3JDLGtCQUFrQixDQUFDLFNBQWdCO1FBQ2hDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLG9CQUFvQixHQUFDLFNBQVMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsOEVBQThFO0lBQzlFLGtGQUFrRjtJQUNsRix3RUFBd0U7SUFDeEUsK0JBQStCO0lBQy9CLHVCQUF1QjtRQUNwQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztJQUNwQyxDQUFDOzhHQXpCUyxtQkFBbUI7a0hBQW5CLG1CQUFtQixjQUZsQixNQUFNOzsyRkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDc3NmcmFtZXdvcmtTZXJ2aWNlIHtcclxuXHJcbiAgZnJhbWV3b3JrVGhlbWUkOiBPYnNlcnZhYmxlPHN0cmluZz47XHJcbiAgYWN0aXZlUmVxdWVzdGVkVGhlbWU6c3RyaW5nO1xyXG4gIGZyYW1ld29ya1RoZW1lU3ViamVjdDogU3ViamVjdDxzdHJpbmc+O1xyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5mcmFtZXdvcmtUaGVtZVN1YmplY3QgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgICB0aGlzLmZyYW1ld29ya1RoZW1lJCA9IHRoaXMuZnJhbWV3b3JrVGhlbWVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICB9XHJcblxyXG4gICAvL1RPRE8tcmV2aWV3OiB0aGlzIGFjdHMgYXMgYSBwdWJsaWMgYXBpIHRvIGNoYW5nZSB0aGUgdGhlbWVcclxuICAgLy9idXQgZG9lc24ndCBkbyB0aGUgYWN0dWFsIGNoYW5nZSwgaW5zdGVhZCBpdCByZWxpZXMgb24gXHJcbiAgIC8vdGhlIENzc0ZyYW1ld2tDb3JvbXBvbmVudCBoYXZpbmcgc3Vic2NyaWJlZCB0byBsaXN0ZW4gXHJcbiAgIC8vYW5kIHBlcmZvcm0gdGhlIGFjdHVhbCB0aGVtZSBjaGFuZ2VcclxuICAgcmVxdWVzdFRoZW1lQ2hhbmdlKHRoZW1lTmFtZTpzdHJpbmcpe1xyXG4gICAgICB0aGlzLmZyYW1ld29ya1RoZW1lU3ViamVjdC5uZXh0KHRoZW1lTmFtZSk7XHJcbiAgICAgIHRoaXMuYWN0aXZlUmVxdWVzdGVkVGhlbWU9dGhlbWVOYW1lO1xyXG4gICB9XHJcblxyXG4gICAvL1RPRE8tcmV2aWV3OnRoZXJlJ3Mgbm8gd2F5IG9mIGtub3dpbmcgd2hhdCB0aGUgaW5kaXZpZHVhbCBjb21wb25lbnQgaW5zdGFuY2VcclxuICAgLy9oYXMgc2V0IGl0cyB0aGVtZSB0bywgdGhpcyBpcyBqdXN0IHRoZSB0aGVtZSBtYWRlIHRocm91Z2ggdGhlIHJlcXVlc3RUaGVtZUNoYW5nZVxyXG4gICAvL2NhbGxzIGFuZCBub3QgZ3VhcmFudGVlZCB0byBjb3JyZXNwb25kIHRvIHRoZSBhY3R1YWwgdGhlbWUgc2V0IGJ5IHRoZSBcclxuICAgLy9jb21wb25lbnQgaW5zdGFuY2UgdGhlbXNlbHZlc1xyXG4gICBnZXRBY3RpdmVSZXF1ZXN0ZWRUaGVtZSgpOnN0cmluZ3tcclxuICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlUmVxdWVzdGVkVGhlbWU7XHJcbiAgIH1cclxufVxyXG4iXX0=
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzLWZyYW1ld29yay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZm9ybXdvcmtzLWNzc2ZyYW1ld29yay9zcmMvbGliL2Nzcy1mcmFtZXdvcmsuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7O0FBSzNDLE1BQU0sT0FBTyxtQkFBbUI7SUFLOUI7UUFDRSxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxPQUFPLEVBQVUsQ0FBQztRQUNuRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNsRSxDQUFDO0lBRUQsNERBQTREO0lBQzVELHlEQUF5RDtJQUN6RCx3REFBd0Q7SUFDeEQscUNBQXFDO0lBQ3JDLGtCQUFrQixDQUFDLFNBQWdCO1FBQ2hDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLG9CQUFvQixHQUFDLFNBQVMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsOEVBQThFO0lBQzlFLGtGQUFrRjtJQUNsRix3RUFBd0U7SUFDeEUsK0JBQStCO0lBQy9CLHVCQUF1QjtRQUNwQixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztJQUNwQyxDQUFDOytHQXpCUyxtQkFBbUI7bUhBQW5CLG1CQUFtQixjQUZsQixNQUFNOzs0RkFFUCxtQkFBbUI7a0JBSC9CLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDc3NmcmFtZXdvcmtTZXJ2aWNlIHtcclxuXHJcbiAgZnJhbWV3b3JrVGhlbWUkOiBPYnNlcnZhYmxlPHN0cmluZz47XHJcbiAgYWN0aXZlUmVxdWVzdGVkVGhlbWU6c3RyaW5nO1xyXG4gIGZyYW1ld29ya1RoZW1lU3ViamVjdDogU3ViamVjdDxzdHJpbmc+O1xyXG4gIGNvbnN0cnVjdG9yKCkge1xyXG4gICAgdGhpcy5mcmFtZXdvcmtUaGVtZVN1YmplY3QgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcbiAgICB0aGlzLmZyYW1ld29ya1RoZW1lJCA9IHRoaXMuZnJhbWV3b3JrVGhlbWVTdWJqZWN0LmFzT2JzZXJ2YWJsZSgpO1xyXG4gICB9XHJcblxyXG4gICAvL1RPRE8tcmV2aWV3OiB0aGlzIGFjdHMgYXMgYSBwdWJsaWMgYXBpIHRvIGNoYW5nZSB0aGUgdGhlbWVcclxuICAgLy9idXQgZG9lc24ndCBkbyB0aGUgYWN0dWFsIGNoYW5nZSwgaW5zdGVhZCBpdCByZWxpZXMgb24gXHJcbiAgIC8vdGhlIENzc0ZyYW1ld2tDb3JvbXBvbmVudCBoYXZpbmcgc3Vic2NyaWJlZCB0byBsaXN0ZW4gXHJcbiAgIC8vYW5kIHBlcmZvcm0gdGhlIGFjdHVhbCB0aGVtZSBjaGFuZ2VcclxuICAgcmVxdWVzdFRoZW1lQ2hhbmdlKHRoZW1lTmFtZTpzdHJpbmcpe1xyXG4gICAgICB0aGlzLmZyYW1ld29ya1RoZW1lU3ViamVjdC5uZXh0KHRoZW1lTmFtZSk7XHJcbiAgICAgIHRoaXMuYWN0aXZlUmVxdWVzdGVkVGhlbWU9dGhlbWVOYW1lO1xyXG4gICB9XHJcblxyXG4gICAvL1RPRE8tcmV2aWV3OnRoZXJlJ3Mgbm8gd2F5IG9mIGtub3dpbmcgd2hhdCB0aGUgaW5kaXZpZHVhbCBjb21wb25lbnQgaW5zdGFuY2VcclxuICAgLy9oYXMgc2V0IGl0cyB0aGVtZSB0bywgdGhpcyBpcyBqdXN0IHRoZSB0aGVtZSBtYWRlIHRocm91Z2ggdGhlIHJlcXVlc3RUaGVtZUNoYW5nZVxyXG4gICAvL2NhbGxzIGFuZCBub3QgZ3VhcmFudGVlZCB0byBjb3JyZXNwb25kIHRvIHRoZSBhY3R1YWwgdGhlbWUgc2V0IGJ5IHRoZSBcclxuICAgLy9jb21wb25lbnQgaW5zdGFuY2UgdGhlbXNlbHZlc1xyXG4gICBnZXRBY3RpdmVSZXF1ZXN0ZWRUaGVtZSgpOnN0cmluZ3tcclxuICAgICAgcmV0dXJuIHRoaXMuYWN0aXZlUmVxdWVzdGVkVGhlbWU7XHJcbiAgIH1cclxufVxyXG4iXX0=
@@ -1,13 +1,15 @@
1
- import { Inject, Injectable } from '@angular/core';
1
+ import { Inject, Injectable, inject } from '@angular/core';
2
2
  import { Framework } from '@ng-formworks/core';
3
3
  import { CssFrameworkComponent } from './css-framework.component';
4
4
  import { CSS_FRAMEWORK_CFG } from './css-framework.defs';
5
+ import { CssframeworkService } from './css-framework.service';
5
6
  import * as i0 from "@angular/core";
6
- import * as i1 from "./css-framework.service";
7
7
  export class CssFramework extends Framework {
8
- constructor(cfg, cssFWService) {
8
+ constructor(cfg) {
9
+ //reverted to use @Inject for other child classes
10
+ //const cfg = inject<css_fw.frameworkcfg>(CSS_FRAMEWORK_CFG);
9
11
  super();
10
- this.cssFWService = cssFWService;
12
+ this.cssFWService = inject(CssframeworkService);
11
13
  this.name = 'css';
12
14
  this.framework = CssFrameworkComponent;
13
15
  this.name = cfg.name;
@@ -73,13 +75,13 @@ export class CssFramework extends Framework {
73
75
  getConfig() {
74
76
  return this.config;
75
77
  }
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
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CssFramework, deps: [{ token: CSS_FRAMEWORK_CFG }], target: i0.ɵɵFactoryTarget.Injectable }); }
79
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CssFramework }); }
78
80
  }
79
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CssFramework, decorators: [{
81
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CssFramework, decorators: [{
80
82
  type: Injectable
81
83
  }], ctorParameters: () => [{ type: undefined, decorators: [{
82
84
  type: Inject,
83
85
  args: [CSS_FRAMEWORK_CFG]
84
- }] }, { type: i1.CssframeworkService }] });
85
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzLmZyYW1ld29yay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWZvcm13b3Jrcy1jc3NmcmFtZXdvcmsvc3JjL2xpYi9jc3MuZnJhbWV3b3JrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUMvQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNsRSxPQUFPLEVBQUUsaUJBQWlCLEVBQVUsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBTWpFLE1BQU0sT0FBTyxZQUFhLFNBQVEsU0FBUztJQUt6QyxZQUF3QyxHQUF1QixFQUFRLFlBQWdDO1FBQ2pHLEtBQUssRUFBRSxDQUFDO1FBRHlELGlCQUFZLEdBQVosWUFBWSxDQUFvQjtRQUp2RyxTQUFJLEdBQUcsS0FBSyxDQUFDO1FBRWIsY0FBUyxHQUFPLHFCQUFxQixDQUFDO1FBS2hDLElBQUksQ0FBQyxJQUFJLEdBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztRQUNuQixJQUFJLENBQUMsSUFBSSxHQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUUsSUFBSSxDQUFDLElBQUksQ0FBQztRQUM5QixJQUFJLENBQUMsV0FBVyxHQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7UUFDakMsSUFBSSxDQUFDLE9BQU8sR0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUMsR0FBRyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxPQUFPLEdBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztJQUMvQixDQUFDO0lBQ0QsY0FBYztRQUNaLElBQUksd0JBQXdCLEdBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO1FBQ3pFLElBQUksZUFBZSxHQUFD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QUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQzs4R0EzRVUsWUFBWSxrQkFLSCxpQkFBaUI7a0hBTDFCLFlBQVk7OzJGQUFaLFlBQVk7a0JBRHhCLFVBQVU7OzBCQU1JLE1BQU07MkJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZyYW1ld29yayB9IGZyb20gJ0BuZy1mb3Jtd29ya3MvY29yZSc7XHJcbmltcG9ydCB7IENzc0ZyYW1ld29ya0NvbXBvbmVudCB9IGZyb20gJy4vY3NzLWZyYW1ld29yay5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDU1NfRlJBTUVXT1JLX0NGRywgY3NzX2Z3IH0gZnJvbSAnLi9jc3MtZnJhbWV3b3JrLmRlZnMnO1xyXG5pbXBvcnQgeyBDc3NmcmFtZXdvcmtTZXJ2aWNlIH0gZnJvbSAnLi9jc3MtZnJhbWV3b3JrLnNlcnZpY2UnO1xyXG5cclxuXHJcblxyXG5ASW5qZWN0YWJsZSgpXHJcbmV4cG9ydCBjbGFzcyBDc3NGcmFtZXdvcmsgZXh0ZW5kcyBGcmFtZXdvcmsge1xyXG4gIG5hbWUgPSAnY3NzJztcclxuXHJcbiAgZnJhbWV3b3JrOmFueSA9IENzc0ZyYW1ld29ya0NvbXBvbmVudDtcclxuICBjb25maWc6Y3NzX2Z3LmZyYW1ld29ya2NmZ1xyXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoQ1NTX0ZSQU1FV09SS19DRkcgKSBjZmc6Y3NzX2Z3LmZyYW1ld29ya2NmZyxwdWJsaWMgY3NzRldTZXJ2aWNlOkNzc2ZyYW1ld29ya1NlcnZpY2Upe1xyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5uYW1lPWNmZy5uYW1lO1xyXG4gICAgICAgIHRoaXMudGV4dD1jZmcudGV4dHx8dGhpcy5uYW1lO1xyXG4gICAgICAgIHRoaXMuc3R5bGVzaGVldHM9Y2ZnLnN0eWxlc2hlZXRzO1xyXG4gICAgICAgIHRoaXMuc2NyaXB0cz1jZmcuc2NyaXB0cztcclxuICAgICAgICB0aGlzLmNvbmZpZz1jZmc7XHJcbiAgICAgICAgdGhpcy53aWRnZXRzPWNmZy53aWRnZXRzO1xyXG4gIH1cclxuICBnZXRBY3RpdmVUaGVtZSgpOmNzc19mdy50aGVtZUtWe1xyXG4gICAgbGV0IGFjdGl2ZVJlcXVlc3RlZFRoZW1lTmFtZT10aGlzLmNzc0ZXU2VydmljZS5nZXRBY3RpdmVSZXF1ZXN0ZWRUaGVtZSgpO1xyXG4gICAgbGV0IGZyYW1lV29ya1RoZW1lcz10aGlzLmNvbmZpZz8ud2lkZ2V0c3R5bGVzPy5fX3RoZW1lc19fO1xyXG4gICAgXHJcbiAgICBsZXQgdGhlbWU9ZnJhbWVXb3JrVGhlbWVzICYmIGZyYW1lV29ya1RoZW1lc1swXVxyXG4gICAgaWYoYWN0aXZlUmVxdWVzdGVkVGhlbWVOYW1lKXsvL2lmIG5vdCBzZXQgcmV0dXJuIGZpcnN0IHRoZW1lIGluIGNvbmZpZztcclxuICAgICAgdGhlbWU9e25hbWU6YWN0aXZlUmVxdWVzdGVkVGhlbWVOYW1lLHRleHQ6YWN0aXZlUmVxdWVzdGVkVGhlbWVOYW1lfTtcclxuICAgICAgaWYoZnJhbWVXb3JrVGhlbWVzKXtcclxuICAgICAgICBsZXQgZmlsdGVyZWQ9ZnJhbWVXb3JrVGhlbWVzLmZpbHRlcih0aGVtZT0+e3JldHVybiB0aGVtZS5uYW1lPT1hY3RpdmVSZXF1ZXN0ZWRUaGVtZU5hbWV9KTtcclxuICAgICAgICB0aGVtZT0oZmlsdGVyZWQgJiYgZmlsdGVyZWRbMF0pfHx0aGVtZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuICB0aGVtZTtcclxuICB9XHJcblxyXG4gIHJlcXVlc3RUaGVtZUNoYW5nZShuYW1lOnN0cmluZyl7XHJcbiAgICB0aGlzLmNzc0ZXU2VydmljZS5yZXF1ZXN0VGhlbWVDaGFuZ2UobmFtZSk7XHJcbiAgfVxyXG5cclxuICByZWdpc3RlclRoZW1lKG5ld1RoZW1lOmNzc19mdy50aGVtZUtWLG92ZXJ3cml0ZTpib29sZWFuPXRydWUpOmJvb2xlYW57XHJcbiAgICBsZXQgdGhlbWVMaXN0PXRoaXMuY29uZmlnPy53aWRnZXRzdHlsZXM/Ll9fdGhlbWVzX198fFtdO1xyXG4gICAgbGV0IG1hdGNoZWRUaGVtZXM9dGhlbWVMaXN0LmZpbHRlcih0aGVtZT0+e3JldHVybiBuZXdUaGVtZS5uYW1lPT10aGVtZS5uYW1lfSk7XHJcbiAgICBpZihtYXRjaGVkVGhlbWVzICYmIG1hdGNoZWRUaGVtZXNbMF0pe1xyXG4gICAgICBpZihvdmVyd3JpdGUpe1xyXG4gICAgICAgIG1hdGNoZWRUaGVtZXNbMF0udGV4dD1uZXdUaGVtZS50ZXh0O1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKCFvdmVyd3JpdGUpe1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgIH1cclxuICAgIGlmKCFtYXRjaGVkVGhlbWVzIHx8IG1hdGNoZWRUaGVtZXMubGVuZ3RoPT0wKXtcclxuICAgICAgbGV0IGNmZzphbnk9dGhpcy5jb25maWdcclxuICAgICAgY2ZnLndpZGdldHN0eWxlcz0gdGhpcy5jb25maWcud2lkZ2V0c3R5bGVzfHx7fTtcclxuICAgICAgY2ZnLndpZGdldHN0eWxlcy5fX3RoZW1lc19fPWNmZy53aWRnZXRzdHlsZXMuX190aGVtZXNfX3x8W107XHJcbiAgICAgIGNmZy53aWRnZXRzdHlsZXMuX190aGVtZXNfXy5wdXNoKG5ld1RoZW1lKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgdW5yZWdpc3RlclRoZW1lKG5hbWU6c3RyaW5nKTpib29sZWFue1xyXG4gICAgbGV0IHRoZW1lTGlzdD10aGlzLmNvbmZpZz8ud2lkZ2V0c3R5bGVzPy5fX3RoZW1lc19fO1xyXG4gICAgbGV0IGZvdW5kSW5kPS0xO1xyXG4gICAgaWYodGhlbWVMaXN0KXtcclxuICAgICAgICB0aGVtZUxpc3QuZm9yRWFjaCgodGhlbWUsaW5kKT0+e1xyXG4gICAgICAgICAgaWYobmFtZT09dGhlbWUubmFtZSl7XHJcbiAgICAgICAgICAgIGZvdW5kSW5kPWluZDtcclxuICAgICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGlmKGZvdW5kSW5kPj0wKXtcclxuICAgICAgICB0aGVtZUxpc3Quc3BsaWNlKGZvdW5kSW5kLDEpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnZXRDb25maWcoKTpjc3NfZncuZnJhbWV3b3JrY2Zne1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICBzdHlsZXNoZWV0cyA9IFtcclxuICAgIC8vVE9ETy1lbmFibGUgZm9yIGRldiBvbmx5XHJcbiAgICBjZG4udGFpbHdpbmRjc3MuY29tLzMuMy4zJ1xyXG4gIF07XHJcblxyXG5cclxuICBzY3JpcHRzID0gW1xyXG5cclxuICBdO1xyXG4gICovXHJcblxyXG59XHJcbiJdfQ==
86
+ }] }] });
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3NzLmZyYW1ld29yay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWZvcm13b3Jrcy1jc3NmcmFtZXdvcmsvc3JjL2xpYi9jc3MuZnJhbWV3b3JrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0MsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDbEUsT0FBTyxFQUFFLGlCQUFpQixFQUFVLE1BQU0sc0JBQXNCLENBQUM7QUFDakUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7O0FBSzlELE1BQU0sT0FBTyxZQUFhLFNBQVEsU0FBUztJQU96QyxZQUF3QyxHQUF1QjtRQUN6RCxpREFBaUQ7UUFDakQsNkRBQTZEO1FBRTdELEtBQUssRUFBRSxDQUFDO1FBVmQsaUJBQVksR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUUzQyxTQUFJLEdBQUcsS0FBSyxDQUFDO1FBRWIsY0FBUyxHQUFPLHFCQUFxQixDQUFDO1FBUWhDLElBQUksQ0FBQyxJQUFJLEdBQUMsR0FBRyxDQUFDLElBQUksQ0FBQztRQUNuQixJQUFJLENBQUMsSUFBSSxHQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUUsSUFBSSxDQUFDLElBQUksQ0FBQztRQUM5QixJQUFJLENBQUMsV0FBVyxHQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7UUFDakMsSUFBSSxDQUFDLE9BQU8sR0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUMsR0FBRyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxPQUFPLEdBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztJQUMvQixDQUFDO0lBQ0Qs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QUFDLEVBQUMsQ0FBQztnQkFDZCxTQUFTLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBQyxDQUFDLENBQUMsQ0FBQztnQkFDN0IsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELFNBQVM7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQzsrR0FoRlUsWUFBWSxrQkFPSCxpQkFBaUI7bUhBUDFCLFlBQVk7OzRGQUFaLFlBQVk7a0JBRHhCLFVBQVU7OzBCQVFJLE1BQU07MkJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRnJhbWV3b3JrIH0gZnJvbSAnQG5nLWZvcm13b3Jrcy9jb3JlJztcclxuaW1wb3J0IHsgQ3NzRnJhbWV3b3JrQ29tcG9uZW50IH0gZnJvbSAnLi9jc3MtZnJhbWV3b3JrLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENTU19GUkFNRVdPUktfQ0ZHLCBjc3NfZncgfSBmcm9tICcuL2Nzcy1mcmFtZXdvcmsuZGVmcyc7XHJcbmltcG9ydCB7IENzc2ZyYW1ld29ya1NlcnZpY2UgfSBmcm9tICcuL2Nzcy1mcmFtZXdvcmsuc2VydmljZSc7XHJcblxyXG5cclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIENzc0ZyYW1ld29yayBleHRlbmRzIEZyYW1ld29yayB7XHJcbiAgY3NzRldTZXJ2aWNlID0gaW5qZWN0KENzc2ZyYW1ld29ya1NlcnZpY2UpO1xyXG5cclxuICBuYW1lID0gJ2Nzcyc7XHJcblxyXG4gIGZyYW1ld29yazphbnkgPSBDc3NGcmFtZXdvcmtDb21wb25lbnQ7XHJcbiAgY29uZmlnOmNzc19mdy5mcmFtZXdvcmtjZmdcclxuICBjb25zdHJ1Y3RvcihASW5qZWN0KENTU19GUkFNRVdPUktfQ0ZHICkgY2ZnOmNzc19mdy5mcmFtZXdvcmtjZmcpe1xyXG4gICAgICAgIC8vcmV2ZXJ0ZWQgdG8gdXNlIEBJbmplY3QgZm9yIG90aGVyIGNoaWxkIGNsYXNzZXNcclxuICAgICAgICAvL2NvbnN0IGNmZyA9IGluamVjdDxjc3NfZncuZnJhbWV3b3JrY2ZnPihDU1NfRlJBTUVXT1JLX0NGRyk7XHJcblxyXG4gICAgICAgIHN1cGVyKCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgdGhpcy5uYW1lPWNmZy5uYW1lO1xyXG4gICAgICAgIHRoaXMudGV4dD1jZmcudGV4dHx8dGhpcy5uYW1lO1xyXG4gICAgICAgIHRoaXMuc3R5bGVzaGVldHM9Y2ZnLnN0eWxlc2hlZXRzO1xyXG4gICAgICAgIHRoaXMuc2NyaXB0cz1jZmcuc2NyaXB0cztcclxuICAgICAgICB0aGlzLmNvbmZpZz1jZmc7XHJcbiAgICAgICAgdGhpcy53aWRnZXRzPWNmZy53aWRnZXRzO1xyXG4gIH1cclxuICBnZXRBY3RpdmVUaGVtZSgpOmNzc19mdy50aGVtZUtWe1xyXG4gICAgbGV0IGFjdGl2ZVJlcXVlc3RlZFRoZW1lTmFtZT10aGlzLmNzc0ZXU2VydmljZS5nZXRBY3RpdmVSZXF1ZXN0ZWRUaGVtZSgpO1xyXG4gICAgbGV0IGZyYW1lV29ya1RoZW1lcz10aGlzLmNvbmZpZz8ud2lkZ2V0c3R5bGVzPy5fX3RoZW1lc19fO1xyXG4gICAgXHJcbiAgICBsZXQgdGhlbWU9ZnJhbWVXb3JrVGhlbWVzICYmIGZyYW1lV29ya1RoZW1lc1swXVxyXG4gICAgaWYoYWN0aXZlUmVxdWVzdGVkVGhlbWVOYW1lKXsvL2lmIG5vdCBzZXQgcmV0dXJuIGZpcnN0IHRoZW1lIGluIGNvbmZpZztcclxuICAgICAgdGhlbWU9e25hbWU6YWN0aXZlUmVxdWVzdGVkVGhlbWVOYW1lLHRleHQ6YWN0aXZlUmVxdWVzdGVkVGhlbWVOYW1lfTtcclxuICAgICAgaWYoZnJhbWVXb3JrVGhlbWVzKXtcclxuICAgICAgICBsZXQgZmlsdGVyZWQ9ZnJhbWVXb3JrVGhlbWVzLmZpbHRlcih0aGVtZT0+e3JldHVybiB0aGVtZS5uYW1lPT1hY3RpdmVSZXF1ZXN0ZWRUaGVtZU5hbWV9KTtcclxuICAgICAgICB0aGVtZT0oZmlsdGVyZWQgJiYgZmlsdGVyZWRbMF0pfHx0aGVtZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuICB0aGVtZTtcclxuICB9XHJcblxyXG4gIHJlcXVlc3RUaGVtZUNoYW5nZShuYW1lOnN0cmluZyl7XHJcbiAgICB0aGlzLmNzc0ZXU2VydmljZS5yZXF1ZXN0VGhlbWVDaGFuZ2UobmFtZSk7XHJcbiAgfVxyXG5cclxuICByZWdpc3RlclRoZW1lKG5ld1RoZW1lOmNzc19mdy50aGVtZUtWLG92ZXJ3cml0ZTpib29sZWFuPXRydWUpOmJvb2xlYW57XHJcbiAgICBsZXQgdGhlbWVMaXN0PXRoaXMuY29uZmlnPy53aWRnZXRzdHlsZXM/Ll9fdGhlbWVzX198fFtdO1xyXG4gICAgbGV0IG1hdGNoZWRUaGVtZXM9dGhlbWVMaXN0LmZpbHRlcih0aGVtZT0+e3JldHVybiBuZXdUaGVtZS5uYW1lPT10aGVtZS5uYW1lfSk7XHJcbiAgICBpZihtYXRjaGVkVGhlbWVzICYmIG1hdGNoZWRUaGVtZXNbMF0pe1xyXG4gICAgICBpZihvdmVyd3JpdGUpe1xyXG4gICAgICAgIG1hdGNoZWRUaGVtZXNbMF0udGV4dD1uZXdUaGVtZS50ZXh0O1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmKCFvdmVyd3JpdGUpe1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgICBcclxuICAgIH1cclxuICAgIGlmKCFtYXRjaGVkVGhlbWVzIHx8IG1hdGNoZWRUaGVtZXMubGVuZ3RoPT0wKXtcclxuICAgICAgbGV0IGNmZzphbnk9dGhpcy5jb25maWdcclxuICAgICAgY2ZnLndpZGdldHN0eWxlcz0gdGhpcy5jb25maWcud2lkZ2V0c3R5bGVzfHx7fTtcclxuICAgICAgY2ZnLndpZGdldHN0eWxlcy5fX3RoZW1lc19fPWNmZy53aWRnZXRzdHlsZXMuX190aGVtZXNfX3x8W107XHJcbiAgICAgIGNmZy53aWRnZXRzdHlsZXMuX190aGVtZXNfXy5wdXNoKG5ld1RoZW1lKTtcclxuICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgdW5yZWdpc3RlclRoZW1lKG5hbWU6c3RyaW5nKTpib29sZWFue1xyXG4gICAgbGV0IHRoZW1lTGlzdD10aGlzLmNvbmZpZz8ud2lkZ2V0c3R5bGVzPy5fX3RoZW1lc19fO1xyXG4gICAgbGV0IGZvdW5kSW5kPS0xO1xyXG4gICAgaWYodGhlbWVMaXN0KXtcclxuICAgICAgICB0aGVtZUxpc3QuZm9yRWFjaCgodGhlbWUsaW5kKT0+e1xyXG4gICAgICAgICAgaWYobmFtZT09dGhlbWUubmFtZSl7XHJcbiAgICAgICAgICAgIGZvdW5kSW5kPWluZDtcclxuICAgICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICAgIGlmKGZvdW5kSW5kPj0wKXtcclxuICAgICAgICB0aGVtZUxpc3Quc3BsaWNlKGZvdW5kSW5kLDEpO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBnZXRDb25maWcoKTpjc3NfZncuZnJhbWV3b3JrY2Zne1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnO1xyXG4gIH1cclxuXHJcbiAgLypcclxuICBzdHlsZXNoZWV0cyA9IFtcclxuICAgIC8vVE9ETy1lbmFibGUgZm9yIGRldiBvbmx5XHJcbiAgICBjZG4udGFpbHdpbmRjc3MuY29tLzMuMy4zJ1xyXG4gIF07XHJcblxyXG5cclxuICBzY3JpcHRzID0gW1xyXG5cclxuICBdO1xyXG4gICovXHJcblxyXG59XHJcbiJdfQ==
@@ -1,10 +1,10 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, Component, ViewEncapsulation, Input, InjectionToken, NgModule, Inject } from '@angular/core';
2
+ import { Injectable, inject, ChangeDetectorRef, input, signal, Component, ViewEncapsulation, InjectionToken, NgModule, Inject } from '@angular/core';
3
3
  import * as i1 from '@ng-formworks/core';
4
- import { addClasses, inArray, JsonSchemaFormModule, WidgetLibraryModule, JsonSchemaFormService, FrameworkLibraryService, WidgetLibraryService, Framework } from '@ng-formworks/core';
4
+ import { addClasses, JsonSchemaFormService, FrameworkLibraryService, inArray, JsonSchemaFormModule, WidgetLibraryModule, WidgetLibraryService, Framework } from '@ng-formworks/core';
5
5
  import _, { cloneDeep, map } from 'lodash';
6
6
  import { Subject } from 'rxjs';
7
- import * as i3 from '@angular/common';
7
+ import * as i2 from '@angular/common';
8
8
  import { CommonModule } from '@angular/common';
9
9
 
10
10
  class CssframeworkService {
@@ -27,10 +27,10 @@ class CssframeworkService {
27
27
  getActiveRequestedTheme() {
28
28
  return this.activeRequestedTheme;
29
29
  }
30
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CssframeworkService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
31
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CssframeworkService, providedIn: 'root' }); }
30
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CssframeworkService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
31
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CssframeworkService, providedIn: 'root' }); }
32
32
  }
33
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CssframeworkService, decorators: [{
33
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CssframeworkService, decorators: [{
34
34
  type: Injectable,
35
35
  args: [{
36
36
  providedIn: 'root'
@@ -41,9 +41,9 @@ class CssFrameworkComponent {
41
41
  //TODO-move to ng-formworks/core utility.functions.ts
42
42
  applyCssClasses(type, widgetOptions, styleOptions) {
43
43
  //console.log("applyCssClasses for type:"+type);
44
- let cssClasses = this.widgetStyles[type];
44
+ let cssClasses = this.widgetStyles()[type];
45
45
  if (!cssClasses || _.isEmpty(cssClasses)) {
46
- cssClasses = this.widgetStyles.default;
46
+ cssClasses = this.widgetStyles().default;
47
47
  }
48
48
  Object.keys(cssClasses).forEach(catName => {
49
49
  let classList = cssClasses[catName];
@@ -85,19 +85,21 @@ class CssFrameworkComponent {
85
85
  });
86
86
  return flattened;
87
87
  }
88
- constructor(changeDetector, jsf, jsfFLService, cssFWService
89
- /*@Inject(CSS_FRAMEWORK_CFG ) fwcfg: css_fw.frameworkcfg*/
90
- ) {
91
- this.changeDetector = changeDetector;
92
- this.jsf = jsf;
93
- this.jsfFLService = jsfFLService;
94
- this.cssFWService = cssFWService;
88
+ constructor() {
89
+ this.changeDetector = inject(ChangeDetectorRef);
90
+ this.jsf = inject(JsonSchemaFormService);
91
+ this.jsfFLService = inject(FrameworkLibraryService);
92
+ this.cssFWService = inject(CssframeworkService);
95
93
  this.frameworkInitialized = false;
96
94
  this.formControl = null;
97
95
  this.debugOutput = '';
98
96
  this.debug = '';
99
97
  this.parentArray = null;
100
98
  this.isOrderable = false;
99
+ this.layoutNode = input(undefined);
100
+ this.layoutIndex = input(undefined);
101
+ this.dataIndex = input(undefined);
102
+ this.widgetStyles = signal(undefined);
101
103
  this.defaultStyling = {
102
104
  array: {},
103
105
  default: { fieldHtmlClass: "cssfw-form-control" },
@@ -116,10 +118,11 @@ class CssFrameworkComponent {
116
118
  __required_asterisk__: "cssfw-required-astersisk",
117
119
  __screen_reader__: "cssfw-screen-reader"
118
120
  };
121
+ const cssFWService = this.cssFWService;
119
122
  let activeFramework = this.jsfFLService.activeFramework;
120
123
  let fwcfg = activeFramework.config || {};
121
- this.widgetStyles = Object.assign(this.defaultStyling, fwcfg.widgetstyles);
122
- let defaultTheme = this.widgetStyles.__themes__[0];
124
+ this.widgetStyles.set(Object.assign(this.defaultStyling, fwcfg.widgetstyles));
125
+ let defaultTheme = this.widgetStyles().__themes__[0];
123
126
  let defaultThemeName = cssFWService.activeRequestedTheme || defaultTheme.name;
124
127
  this.theme = this.options?.theme || defaultThemeName;
125
128
  this.frameworkThemeSubs = cssFWService.frameworkTheme$.subscribe(newTheme => {
@@ -131,29 +134,31 @@ class CssFrameworkComponent {
131
134
  this.frameworkThemeSubs = null;
132
135
  }
133
136
  get showRemoveButton() {
137
+ const layoutNode = this.layoutNode();
134
138
  if (!this.options.removable || this.options.readonly ||
135
- this.layoutNode.type === '$ref') {
139
+ layoutNode.type === '$ref') {
136
140
  return false;
137
141
  }
138
- if (this.layoutNode.recursiveReference) {
142
+ if (layoutNode.recursiveReference) {
139
143
  return true;
140
144
  }
141
- if (!this.layoutNode.arrayItem || !this.parentArray) {
145
+ if (!layoutNode.arrayItem || !this.parentArray) {
142
146
  return false;
143
147
  }
144
148
  // If array length <= minItems, don't allow removing any items
145
149
  return this.parentArray.items.length - 1 <= this.parentArray.options.minItems ? false :
146
150
  // For removable list items, allow removing any item
147
- this.layoutNode.arrayItemType === 'list' ? true :
151
+ layoutNode.arrayItemType === 'list' ? true :
148
152
  // For removable tuple items, only allow removing last item in list
149
- this.layoutIndex[this.layoutIndex.length - 1] === this.parentArray.items.length - 2;
153
+ this.layoutIndex()[this.layoutIndex().length - 1] === this.parentArray.items.length - 2;
150
154
  }
151
155
  ngOnInit() {
152
156
  this.initializeFramework();
153
- if (this.layoutNode.arrayItem && this.layoutNode.type !== '$ref') {
157
+ const layoutNode = this.layoutNode();
158
+ if (layoutNode.arrayItem && layoutNode.type !== '$ref') {
154
159
  this.parentArray = this.jsf.getParentNode(this);
155
160
  if (this.parentArray) {
156
- this.isOrderable = this.layoutNode.arrayItemType === 'list' &&
161
+ this.isOrderable = layoutNode.arrayItemType === 'list' &&
157
162
  !this.options.readonly && this.parentArray.options.orderable;
158
163
  }
159
164
  }
@@ -164,15 +169,16 @@ class CssFrameworkComponent {
164
169
  }
165
170
  }
166
171
  initializeFramework() {
167
- if (this.layoutNode) {
168
- this.options = cloneDeep(this.layoutNode.options);
172
+ const layoutNode = this.layoutNode();
173
+ if (layoutNode) {
174
+ this.options = cloneDeep(layoutNode.options);
169
175
  this.widgetLayoutNode = {
170
- ...this.layoutNode,
171
- options: cloneDeep(this.layoutNode.options)
176
+ ...layoutNode,
177
+ options: cloneDeep(layoutNode.options)
172
178
  };
173
179
  this.widgetOptions = this.widgetLayoutNode.options;
174
180
  this.formControl = this.jsf.getFormControl(this);
175
- this.options.isInputWidget = inArray(this.layoutNode.type, [
181
+ this.options.isInputWidget = inArray(layoutNode.type, [
176
182
  'button', 'checkbox', 'checkboxes-inline', 'checkboxes', 'color',
177
183
  'date', 'datetime-local', 'datetime', 'email', 'file', 'hidden',
178
184
  'image', 'integer', 'month', 'number', 'password', 'radio',
@@ -181,15 +187,15 @@ class CssFrameworkComponent {
181
187
  ]);
182
188
  this.options.title = this.setTitle();
183
189
  this.options.htmlClass =
184
- addClasses(this.options.htmlClass, 'schema-form-' + this.layoutNode.type);
185
- if (this.layoutNode.type === 'array') {
186
- this.options.htmlClass = addClasses(this.options.htmlClass, this.widgetStyles.__array__.htmlClass);
190
+ addClasses(this.options.htmlClass, 'schema-form-' + layoutNode.type);
191
+ if (layoutNode.type === 'array') {
192
+ this.options.htmlClass = addClasses(this.options.htmlClass, this.widgetStyles().__array__.htmlClass);
187
193
  }
188
- else if (this.layoutNode.arrayItem && this.layoutNode.type !== '$ref') {
189
- this.options.htmlClass = addClasses(this.options.htmlClass, this.widgetStyles.__array_item_nonref__.htmlClass);
194
+ else if (layoutNode.arrayItem && layoutNode.type !== '$ref') {
195
+ this.options.htmlClass = addClasses(this.options.htmlClass, this.widgetStyles().__array_item_nonref__.htmlClass);
190
196
  }
191
197
  else {
192
- this.options.htmlClass = addClasses(this.options.htmlClass, this.widgetStyles.__form_group__.htmlClass);
198
+ this.options.htmlClass = addClasses(this.options.htmlClass, this.widgetStyles().__form_group__.htmlClass);
193
199
  }
194
200
  /*
195
201
  this.options.htmlClass =
@@ -209,25 +215,25 @@ class CssFrameworkComponent {
209
215
  */
210
216
  this.widgetOptions.htmlClass = '';
211
217
  this.options.labelHtmlClass =
212
- addClasses(this.options.labelHtmlClass, this.widgetStyles.__control_label__.labelHtmlClass);
218
+ addClasses(this.options.labelHtmlClass, this.widgetStyles().__control_label__.labelHtmlClass);
213
219
  this.widgetOptions.activeClass =
214
- addClasses(this.widgetOptions.activeClass, this.widgetStyles.__active__.activeClass);
220
+ addClasses(this.widgetOptions.activeClass, this.widgetStyles().__active__.activeClass);
215
221
  this.options.fieldAddonLeft =
216
222
  this.options.fieldAddonLeft || this.options.prepend;
217
223
  this.options.fieldAddonRight =
218
224
  this.options.fieldAddonRight || this.options.append;
219
225
  // Add asterisk to titles if required
220
- if (this.options.title && this.layoutNode.type !== 'tab' &&
226
+ if (this.options.title && layoutNode.type !== 'tab' &&
221
227
  !this.options.notitle && this.options.required &&
222
228
  !this.options.title.includes('*')) {
223
- let required_asterisk_class = this.widgetStyles.__required_asterisk__ || 'text-danger';
229
+ let required_asterisk_class = this.widgetStyles().__required_asterisk__ || 'text-danger';
224
230
  this.options.title += ` <strong class="${required_asterisk_class}">*</strong>`;
225
231
  }
226
- if (this.layoutNode.type == 'optionfieldset') {
232
+ if (layoutNode.type == 'optionfieldset') {
227
233
  this.options.messageLocation = 'top';
228
234
  }
229
235
  // Set miscelaneous styles and settings for each control type
230
- this.applyCssClasses(this.layoutNode.type, this.widgetOptions, this.options.style);
236
+ this.applyCssClasses(layoutNode.type, this.widgetOptions, this.options.style);
231
237
  if (this.formControl) {
232
238
  this.updateHelpBlock(this.formControl.status);
233
239
  this.formControl.statusChanges.subscribe(status => this.updateHelpBlock(status));
@@ -247,7 +253,7 @@ class CssFrameworkComponent {
247
253
  this.options.description || this.options.help || null;
248
254
  }
249
255
  setTitle() {
250
- switch (this.layoutNode.type) {
256
+ switch (this.layoutNode().type) {
251
257
  case 'button':
252
258
  case 'checkbox':
253
259
  case 'section':
@@ -278,21 +284,13 @@ class CssFrameworkComponent {
278
284
  removeItem() {
279
285
  this.jsf.removeItem(this);
280
286
  }
281
- 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: CssframeworkService }], target: i0.ɵɵFactoryTarget.Component }); }
282
- 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 }); }
287
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CssFrameworkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
288
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: CssFrameworkComponent, selector: "css-framework", inputs: { layoutNode: { classPropertyName: "layoutNode", publicName: "layoutNode", isSignal: true, isRequired: false, transformFunction: null }, layoutIndex: { classPropertyName: "layoutIndex", publicName: "layoutIndex", isSignal: true, isRequired: false, transformFunction: null }, dataIndex: { classPropertyName: "dataIndex", publicName: "dataIndex", isSignal: true, isRequired: false, transformFunction: null } }, 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: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], encapsulation: i0.ViewEncapsulation.None }); }
283
289
  }
284
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CssFrameworkComponent, decorators: [{
290
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CssFrameworkComponent, decorators: [{
285
291
  type: Component,
286
- 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"] }]
287
- }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1.JsonSchemaFormService }, { type: i1.FrameworkLibraryService }, { type: CssframeworkService }], propDecorators: { layoutNode: [{
288
- type: Input
289
- }], layoutIndex: [{
290
- type: Input
291
- }], dataIndex: [{
292
- type: Input
293
- }], widgetStyles: [{
294
- type: Input
295
- }] } });
292
+ 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"] }]
293
+ }], ctorParameters: () => [] });
296
294
 
297
295
  const CSS_FRAMEWORK_CFG = new InjectionToken('CSS_FRAMEWORK_CFG');
298
296
  var css_fw;
@@ -303,11 +301,11 @@ var css_fw;
303
301
  })(css_fw || (css_fw = {}));
304
302
 
305
303
  class CssFrameworkModule {
306
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CssFrameworkModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
307
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.7", ngImport: i0, type: CssFrameworkModule, declarations: [CssFrameworkComponent], imports: [JsonSchemaFormModule,
304
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CssFrameworkModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
305
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: CssFrameworkModule, declarations: [CssFrameworkComponent], imports: [JsonSchemaFormModule,
308
306
  CommonModule,
309
307
  WidgetLibraryModule], exports: [CssFrameworkComponent] }); }
310
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CssFrameworkModule, providers: [
308
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CssFrameworkModule, providers: [
311
309
  JsonSchemaFormService,
312
310
  FrameworkLibraryService,
313
311
  WidgetLibraryService,
@@ -317,7 +315,7 @@ class CssFrameworkModule {
317
315
  CommonModule,
318
316
  WidgetLibraryModule] }); }
319
317
  }
320
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CssFrameworkModule, decorators: [{
318
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CssFrameworkModule, decorators: [{
321
319
  type: NgModule,
322
320
  args: [{
323
321
  declarations: [
@@ -342,9 +340,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
342
340
  }] });
343
341
 
344
342
  class CssFramework extends Framework {
345
- constructor(cfg, cssFWService) {
343
+ constructor(cfg) {
344
+ //reverted to use @Inject for other child classes
345
+ //const cfg = inject<css_fw.frameworkcfg>(CSS_FRAMEWORK_CFG);
346
346
  super();
347
- this.cssFWService = cssFWService;
347
+ this.cssFWService = inject(CssframeworkService);
348
348
  this.name = 'css';
349
349
  this.framework = CssFrameworkComponent;
350
350
  this.name = cfg.name;
@@ -410,15 +410,15 @@ class CssFramework extends Framework {
410
410
  getConfig() {
411
411
  return this.config;
412
412
  }
413
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CssFramework, deps: [{ token: CSS_FRAMEWORK_CFG }, { token: CssframeworkService }], target: i0.ɵɵFactoryTarget.Injectable }); }
414
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CssFramework }); }
413
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CssFramework, deps: [{ token: CSS_FRAMEWORK_CFG }], target: i0.ɵɵFactoryTarget.Injectable }); }
414
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CssFramework }); }
415
415
  }
416
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: CssFramework, decorators: [{
416
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CssFramework, decorators: [{
417
417
  type: Injectable
418
418
  }], ctorParameters: () => [{ type: undefined, decorators: [{
419
419
  type: Inject,
420
420
  args: [CSS_FRAMEWORK_CFG]
421
- }] }, { type: CssframeworkService }] });
421
+ }] }] });
422
422
 
423
423
  /*
424
424
  * Public API Surface of ng-formworks-cssframework
@@ -1 +1 @@
1
- {"version":3,"file":"ng-formworks-cssframework.mjs","sources":["../../../../projects/ng-formworks-cssframework/src/lib/css-framework.service.ts","../../../../projects/ng-formworks-cssframework/src/lib/css-framework.component.ts","../../../../projects/ng-formworks-cssframework/src/lib/css-framework.component.html","../../../../projects/ng-formworks-cssframework/src/lib/css-framework.defs.ts","../../../../projects/ng-formworks-cssframework/src/lib/css-framework.module.ts","../../../../projects/ng-formworks-cssframework/src/lib/css.framework.ts","../../../../projects/ng-formworks-cssframework/src/public-api.ts","../../../../projects/ng-formworks-cssframework/src/ng-formworks-cssframework.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CssframeworkService {\r\n\r\n frameworkTheme$: Observable<string>;\r\n activeRequestedTheme:string;\r\n frameworkThemeSubject: Subject<string>;\r\n constructor() {\r\n this.frameworkThemeSubject = new Subject<string>();\r\n this.frameworkTheme$ = this.frameworkThemeSubject.asObservable();\r\n }\r\n\r\n //TODO-review: this acts as a public api to change the theme\r\n //but doesn't do the actual change, instead it relies on \r\n //the CssFramewkCoromponent having subscribed to listen \r\n //and perform the actual theme change\r\n requestThemeChange(themeName:string){\r\n this.frameworkThemeSubject.next(themeName);\r\n this.activeRequestedTheme=themeName;\r\n }\r\n\r\n //TODO-review:there's no way of knowing what the individual component instance\r\n //has set its theme to, this is just the theme made through the requestThemeChange\r\n //calls and not guaranteed to correspond to the actual theme set by the \r\n //component instance themselves\r\n getActiveRequestedTheme():string{\r\n return this.activeRequestedTheme;\r\n }\r\n}\r\n","import { ChangeDetectorRef, Component, Input, OnChanges, OnDestroy, OnInit, ViewEncapsulation } from '@angular/core';\r\nimport { FrameworkLibraryService, JsonSchemaFormService, addClasses, inArray } from '@ng-formworks/core';\r\nimport _, { cloneDeep, map } from 'lodash';\r\nimport { Subscription } from 'rxjs';\r\nimport { css_fw } from './css-framework.defs';\r\nimport { CssframeworkService } from './css-framework.service';\r\n\r\n@Component({\r\n selector: 'css-framework',\r\n templateUrl: './css-framework.component.html',\r\n styleUrls: ['./css-framework.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class CssFrameworkComponent implements OnInit, OnChanges,OnDestroy {\r\n frameworkInitialized = false;\r\n widgetOptions: any; // Options passed to child widget\r\n widgetLayoutNode: any; // layoutNode passed to child widget\r\n options: any; // Options used in this framework\r\n formControl: any = null;\r\n debugOutput: any = '';\r\n debug: any = '';\r\n parentArray: any = null;\r\n isOrderable = false;\r\n @Input() layoutNode: any;\r\n @Input() layoutIndex: number[];\r\n @Input() dataIndex: number[];\r\n\r\n @Input() widgetStyles: css_fw.widgetstyles;\r\n\r\n\r\n\r\n\r\n\r\n //TODO-move to ng-formworks/core utility.functions.ts\r\n applyCssClasses(type, widgetOptions, styleOptions) {\r\n //console.log(\"applyCssClasses for type:\"+type);\r\n let cssClasses = this.widgetStyles[type];\r\n if (!cssClasses || _.isEmpty(cssClasses) ) {\r\n cssClasses = this.widgetStyles.default;\r\n }\r\n Object.keys(cssClasses).forEach(catName => {\r\n let classList = cssClasses[catName];\r\n\r\n if (classList.length) {\r\n widgetOptions[catName] = addClasses(widgetOptions[catName], classList);\r\n }\r\n if (styleOptions) {\r\n widgetOptions[catName] = addClasses(widgetOptions[catName], styleOptions);\r\n }\r\n\r\n })\r\n }\r\n\r\n flattenWidgetStyles(wstyles:css_fw.widgetstyles){\r\n var flattened:any={};\r\n let ignore=['__themes__'];\r\n Object.keys(wstyles).forEach(wkey=>{\r\n let wstyle=wstyles[wkey];\r\n if(ignore.indexOf(wkey)>=0){\r\n flattened[wkey]=wstyle;\r\n return;\r\n }\r\n if(_.isArray(wstyle)){\r\n \r\n flattened[wkey]=wstyle.join(\" \");\r\n }\r\n if(_.isObject(wstyle)){//is csscategories\r\n flattened[wkey]=flattened[wkey]||{};\r\n Object.keys(wstyle).forEach(catName=>{\r\n let cssCat=wstyle[catName];\r\n \r\n if(_.isArray(cssCat)){\r\n flattened[wkey][catName]=cssCat.join(\" \");\r\n }else{\r\n flattened[wkey][catName]=cssCat;\r\n }\r\n })\r\n }\r\n if(_.isString(wstyle)){\r\n flattened[wkey]=wstyle;\r\n }\r\n })\r\n return flattened\r\n}\r\n\r\ndefaultStyling:css_fw.widgetstyles={\r\n array:{},\r\n default:{fieldHtmlClass: \"cssfw-form-control\"},\r\n __themes__:[{name:'notheme',text:'None'}],\r\n __remove_item__:\"cssfw-remove-item\",\r\n __array_item_nonref__:{\r\n \"htmlClass\": \"cssfw-array-item-nonref\"\r\n },\r\n __active__:{activeClass:\"cssfw-active\"},\r\n __array__:{htmlClass:\"cssfw-array\"},\r\n __control_label__:{labelHtmlClass:\"cssfw-control-label\"},\r\n __form_group__:{htmlClass: \"cssfw-form-group\"},\r\n __field_addon_left__:\"cssfw-addon-left\",\r\n __field_addon_right__:\"cssfw-addon-right\",\r\n __help_block__:\"cssfw-help-block\",\r\n __required_asterisk__:\"cssfw-required-astersisk\",\r\n __screen_reader__: \"cssfw-screen-reader\"\r\n\r\n}\r\n\r\n\r\n\r\n\r\ntheme:string\r\nframeworkThemeSubs:Subscription;\r\n constructor(\r\n public changeDetector: ChangeDetectorRef,\r\n public jsf: JsonSchemaFormService,\r\n public jsfFLService:FrameworkLibraryService,\r\n public cssFWService:CssframeworkService\r\n /*@Inject(CSS_FRAMEWORK_CFG ) fwcfg: css_fw.frameworkcfg*/\r\n\r\n ) {\r\n \r\n let activeFramework:any=this.jsfFLService.activeFramework;\r\n let fwcfg=activeFramework.config||{};\r\n this.widgetStyles = Object.assign(this.defaultStyling,fwcfg.widgetstyles);\r\n let defaultTheme=this.widgetStyles.__themes__[0];\r\n let defaultThemeName=cssFWService.activeRequestedTheme||defaultTheme.name;\r\n this.theme=this.options?.theme|| defaultThemeName;\r\n this.frameworkThemeSubs=cssFWService.frameworkTheme$.subscribe(newTheme=>{\r\n this.theme=newTheme;\r\n })\r\n \r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.frameworkThemeSubs.unsubscribe();\r\n this.frameworkThemeSubs=null;\r\n }\r\n\r\n\r\n get showRemoveButton(): boolean {\r\n if (!this.options.removable || this.options.readonly ||\r\n this.layoutNode.type === '$ref'\r\n ) {\r\n return false;\r\n }\r\n if (this.layoutNode.recursiveReference) {\r\n return true;\r\n }\r\n if (!this.layoutNode.arrayItem || !this.parentArray) {\r\n return false;\r\n }\r\n // If array length <= minItems, don't allow removing any items\r\n return this.parentArray.items.length - 1 <= this.parentArray.options.minItems ? false :\r\n // For removable list items, allow removing any item\r\n this.layoutNode.arrayItemType === 'list' ? true :\r\n // For removable tuple items, only allow removing last item in list\r\n this.layoutIndex[this.layoutIndex.length - 1] === this.parentArray.items.length - 2;\r\n }\r\n\r\n ngOnInit() {\r\n this.initializeFramework();\r\n if (this.layoutNode.arrayItem && this.layoutNode.type !== '$ref') {\r\n this.parentArray = this.jsf.getParentNode(this);\r\n if (this.parentArray) {\r\n this.isOrderable = this.layoutNode.arrayItemType === 'list' &&\r\n !this.options.readonly && this.parentArray.options.orderable;\r\n }\r\n }\r\n }\r\n\r\n ngOnChanges() {\r\n if (!this.frameworkInitialized) {\r\n this.initializeFramework();\r\n }\r\n }\r\n\r\n initializeFramework() {\r\n if (this.layoutNode) {\r\n this.options = cloneDeep(this.layoutNode.options);\r\n this.widgetLayoutNode = {\r\n ...this.layoutNode,\r\n options: cloneDeep(this.layoutNode.options)\r\n };\r\n this.widgetOptions = this.widgetLayoutNode.options;\r\n this.formControl = this.jsf.getFormControl(this);\r\n\r\n this.options.isInputWidget = inArray(this.layoutNode.type, [\r\n 'button', 'checkbox', 'checkboxes-inline', 'checkboxes', 'color',\r\n 'date', 'datetime-local', 'datetime', 'email', 'file', 'hidden',\r\n 'image', 'integer', 'month', 'number', 'password', 'radio',\r\n 'radiobuttons', 'radios-inline', 'radios', 'range', 'reset', 'search',\r\n 'select', 'submit', 'tel', 'text', 'textarea', 'time', 'url', 'week'\r\n ]);\r\n\r\n this.options.title = this.setTitle();\r\n\r\n this.options.htmlClass =\r\n addClasses(this.options.htmlClass, 'schema-form-' + this.layoutNode.type);\r\n\r\n \r\n if (this.layoutNode.type === 'array') {\r\n this.options.htmlClass = addClasses(this.options.htmlClass, this.widgetStyles.__array__.htmlClass);\r\n } else if (this.layoutNode.arrayItem && this.layoutNode.type !== '$ref') {\r\n this.options.htmlClass = addClasses(this.options.htmlClass, this.widgetStyles.__array_item_nonref__.htmlClass);\r\n } else {\r\n this.options.htmlClass = addClasses(this.options.htmlClass, this.widgetStyles.__form_group__.htmlClass);\r\n }\r\n \r\n\r\n /*\r\n this.options.htmlClass =\r\n this.layoutNode.type === 'array' ?\r\n addClasses(this.options.htmlClass, ['border','shadow-md','p-1']) :\r\n this.layoutNode.arrayItem && this.layoutNode.type !== '$ref' ?\r\n addClasses(this.options.htmlClass, ['border','shadow-md','p-1']) :\r\n addClasses(this.options.htmlClass, 'mb-1');\r\n*/\r\n\r\n/*\r\nthis.options.htmlClass =\r\nthis.layoutNode.type === 'array' ?\r\naddClasses(this.options.htmlClass, this.widgetStyles.array.htmlClass):\r\n this.layoutNode.arrayItem && this.layoutNode.type !== '$ref' ?\r\n addClasses(this.options.htmlClass, this.widgetStyles.__array_item_nonref__.htmlClass):\r\n addClasses(this.options.htmlClass, this.widgetStyles.__form_group__.htmlClass);\r\n*/\r\n \r\n this.widgetOptions.htmlClass = '';\r\n this.options.labelHtmlClass =\r\n addClasses(this.options.labelHtmlClass, this.widgetStyles.__control_label__.labelHtmlClass);\r\n this.widgetOptions.activeClass =\r\n addClasses(this.widgetOptions.activeClass, this.widgetStyles.__active__.activeClass);\r\n this.options.fieldAddonLeft =\r\n this.options.fieldAddonLeft || this.options.prepend;\r\n this.options.fieldAddonRight =\r\n this.options.fieldAddonRight || this.options.append;\r\n\r\n // Add asterisk to titles if required\r\n if (this.options.title && this.layoutNode.type !== 'tab' &&\r\n !this.options.notitle && this.options.required &&\r\n !this.options.title.includes('*')\r\n ) {\r\n let required_asterisk_class=this.widgetStyles.__required_asterisk__||'text-danger'\r\n this.options.title += ` <strong class=\"${required_asterisk_class}\">*</strong>`;\r\n }\r\n if (this.layoutNode.type == 'optionfieldset') {\r\n this.options.messageLocation = 'top';\r\n }\r\n // Set miscelaneous styles and settings for each control type\r\n this.applyCssClasses(this.layoutNode.type, this.widgetOptions, this.options.style);\r\n if (this.formControl) {\r\n this.updateHelpBlock(this.formControl.status);\r\n this.formControl.statusChanges.subscribe(status => this.updateHelpBlock(status));\r\n\r\n if (this.options.debug) {\r\n const vars: any[] = [];\r\n this.debugOutput = map(vars, thisVar => JSON.stringify(thisVar, null, 2)).join('\\n');\r\n }\r\n }\r\n this.frameworkInitialized = true;\r\n }\r\n\r\n }\r\n\r\n updateHelpBlock(status) {\r\n this.options.helpBlock = status === 'INVALID' &&\r\n this.options.enableErrorState && this.formControl.errors &&\r\n (this.formControl.dirty || this.options.feedbackOnRender) ?\r\n this.jsf.formatErrors(this.formControl.errors, this.options.validationMessages) :\r\n this.options.description || this.options.help || null;\r\n }\r\n\r\n setTitle(): string {\r\n switch (this.layoutNode.type) {\r\n case 'button':\r\n case 'checkbox':\r\n case 'section':\r\n case 'help':\r\n case 'msg':\r\n case 'submit':\r\n case 'message':\r\n case 'tabarray':\r\n case 'tabs':\r\n case '$ref':\r\n return null;\r\n case 'advancedfieldset':\r\n this.widgetOptions.expandable = true;\r\n this.widgetOptions.title = 'Advanced options';\r\n return null;\r\n case 'authfieldset':\r\n this.widgetOptions.expandable = true;\r\n this.widgetOptions.title = 'Authentication settings';\r\n return null;\r\n case 'fieldset':\r\n this.widgetOptions.title = this.options.title;\r\n return null;\r\n default:\r\n this.widgetOptions.title = null;\r\n return this.jsf.setItemTitle(this);\r\n }\r\n }\r\n\r\n removeItem() {\r\n this.jsf.removeItem(this);\r\n }\r\n}\r\n","<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\" />-->","import { InjectionToken } from \"@angular/core\";\r\n\r\nexport const CSS_FRAMEWORK_CFG = new InjectionToken<css_fw.frameworkcfg>('CSS_FRAMEWORK_CFG');\r\n\r\nexport namespace css_fw{\r\n\r\n export type themeKV=\r\n { \r\n name:string,\r\n text:string\r\n }\r\n\r\n export class csscategories{\r\n fieldHtmlClass?:string|string[]\r\n labelHtmlClass?:string|string[]\r\n htmlClass?:string|string[]\r\n itemLabelHtmlClass?:string|string[]\r\n activeClass?:string|string[]\r\n }\r\n\r\n export type widgetstyles={\r\n '$ref'?:csscategories,\r\n 'alt-date'?:csscategories,\r\n 'alt-datetime'?:csscategories,\r\n __themes__?:themeKV[],\r\n __array_item_nonref__:csscategories,\r\n __form_group__:csscategories,\r\n __control_label__:csscategories,\r\n __active__:csscategories,\r\n __required_asterisk__:string,\r\n __array__:csscategories,\r\n '__remove_item__':string,\r\n __help_block__:string,\r\n __field_addon_left__:string\r\n __field_addon_right__:string,\r\n __screen_reader__:string,\r\n array:csscategories,\r\n authfieldset?:csscategories,\r\n advancedfieldset?:csscategories,\r\n button?:csscategories,\r\n checkbox?:csscategories,\r\n checkboxes?:csscategories,\r\n checkboxbuttons?:csscategories,\r\n 'checkboxes-inline'?:csscategories,\r\n date?:csscategories,\r\n 'datetime-local'?:csscategories,\r\n fieldset?:csscategories,\r\n integer?:csscategories,\r\n number?:csscategories,\r\n optionfieldset?:csscategories,\r\n password?:csscategories,\r\n radiobuttons?:csscategories,\r\n radio?:csscategories,\r\n radios?:csscategories,\r\n \"radios-inline\"?:csscategories,\r\n 'range'?:csscategories,\r\n section?:csscategories,\r\n selectfieldset?:csscategories,\r\n select?:csscategories,\r\n submit?:csscategories,\r\n text?:csscategories,\r\n tabs?:csscategories,\r\n tabarray?:csscategories,\r\n textarea?:csscategories,\r\n default:csscategories\r\n }\r\n export type frameworkcfg={\r\n name:string,\r\n text:string;\r\n stylesheets:string[],\r\n scripts?:string[],\r\n widgetstyles:widgetstyles,\r\n widgets?:any;\r\n }\r\n\r\n \r\n\r\n}","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FrameworkLibraryService, JsonSchemaFormModule, JsonSchemaFormService, WidgetLibraryModule, WidgetLibraryService } from '@ng-formworks/core';\r\nimport { CssFrameworkComponent } from './css-framework.component';\r\nimport { CssframeworkService } from './css-framework.service';\r\n\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n CssFrameworkComponent\r\n ],\r\n imports: [\r\n JsonSchemaFormModule,\r\n CommonModule,\r\n WidgetLibraryModule,\r\n ],\r\n exports: [\r\n CssFrameworkComponent\r\n ],\r\n providers: [\r\n JsonSchemaFormService,\r\n FrameworkLibraryService,\r\n WidgetLibraryService,\r\n CssframeworkService\r\n // { provide: Framework, useClass: CssFramework, multi: true },\r\n ]\r\n})\r\nexport class CssFrameworkModule { }\r\n","import { Inject, Injectable } from '@angular/core';\r\nimport { Framework } from '@ng-formworks/core';\r\nimport { CssFrameworkComponent } from './css-framework.component';\r\nimport { CSS_FRAMEWORK_CFG, css_fw } from './css-framework.defs';\r\nimport { CssframeworkService } from './css-framework.service';\r\n\r\n\r\n\r\n@Injectable()\r\nexport class CssFramework extends Framework {\r\n name = 'css';\r\n\r\n framework:any = CssFrameworkComponent;\r\n config:css_fw.frameworkcfg\r\n constructor(@Inject(CSS_FRAMEWORK_CFG ) cfg:css_fw.frameworkcfg,public cssFWService:CssframeworkService){\r\n super();\r\n \r\n this.name=cfg.name;\r\n this.text=cfg.text||this.name;\r\n this.stylesheets=cfg.stylesheets;\r\n this.scripts=cfg.scripts;\r\n this.config=cfg;\r\n this.widgets=cfg.widgets;\r\n }\r\n getActiveTheme():css_fw.themeKV{\r\n let activeRequestedThemeName=this.cssFWService.getActiveRequestedTheme();\r\n let frameWorkThemes=this.config?.widgetstyles?.__themes__;\r\n \r\n let theme=frameWorkThemes && frameWorkThemes[0]\r\n if(activeRequestedThemeName){//if not set return first theme in config;\r\n theme={name:activeRequestedThemeName,text:activeRequestedThemeName};\r\n if(frameWorkThemes){\r\n let filtered=frameWorkThemes.filter(theme=>{return theme.name==activeRequestedThemeName});\r\n theme=(filtered && filtered[0])||theme;\r\n }\r\n }\r\n return theme;\r\n }\r\n\r\n requestThemeChange(name:string){\r\n this.cssFWService.requestThemeChange(name);\r\n }\r\n\r\n registerTheme(newTheme:css_fw.themeKV,overwrite:boolean=true):boolean{\r\n let themeList=this.config?.widgetstyles?.__themes__||[];\r\n let matchedThemes=themeList.filter(theme=>{return newTheme.name==theme.name});\r\n if(matchedThemes && matchedThemes[0]){\r\n if(overwrite){\r\n matchedThemes[0].text=newTheme.text;\r\n return true;\r\n }\r\n if(!overwrite){\r\n return false;\r\n }\r\n \r\n }\r\n if(!matchedThemes || matchedThemes.length==0){\r\n let cfg:any=this.config\r\n cfg.widgetstyles= this.config.widgetstyles||{};\r\n cfg.widgetstyles.__themes__=cfg.widgetstyles.__themes__||[];\r\n cfg.widgetstyles.__themes__.push(newTheme);\r\n return true;\r\n }\r\n };\r\n\r\n unregisterTheme(name:string):boolean{\r\n let themeList=this.config?.widgetstyles?.__themes__;\r\n let foundInd=-1;\r\n if(themeList){\r\n themeList.forEach((theme,ind)=>{\r\n if(name==theme.name){\r\n foundInd=ind;\r\n }\r\n });\r\n if(foundInd>=0){\r\n themeList.splice(foundInd,1);\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n getConfig():css_fw.frameworkcfg{\r\n return this.config;\r\n }\r\n\r\n /*\r\n stylesheets = [\r\n //TODO-enable for dev only\r\n cdn.tailwindcss.com/3.3.3'\r\n ];\r\n\r\n\r\n scripts = [\r\n\r\n ];\r\n */\r\n\r\n}\r\n","/*\r\n * Public API Surface of ng-formworks-cssframework\r\n */\r\n\r\nexport * from './lib/css-framework.component';\r\nexport * from './lib/css-framework.defs';\r\nexport * from './lib/css-framework.module';\r\nexport * from './lib/css-framework.service';\r\nexport * from './lib/css.framework';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.CssframeworkService","i1.CssframeworkService"],"mappings":"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"}
1
+ {"version":3,"file":"ng-formworks-cssframework.mjs","sources":["../../../../projects/ng-formworks-cssframework/src/lib/css-framework.service.ts","../../../../projects/ng-formworks-cssframework/src/lib/css-framework.component.ts","../../../../projects/ng-formworks-cssframework/src/lib/css-framework.component.html","../../../../projects/ng-formworks-cssframework/src/lib/css-framework.defs.ts","../../../../projects/ng-formworks-cssframework/src/lib/css-framework.module.ts","../../../../projects/ng-formworks-cssframework/src/lib/css.framework.ts","../../../../projects/ng-formworks-cssframework/src/public-api.ts","../../../../projects/ng-formworks-cssframework/src/ng-formworks-cssframework.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { Observable, Subject } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CssframeworkService {\r\n\r\n frameworkTheme$: Observable<string>;\r\n activeRequestedTheme:string;\r\n frameworkThemeSubject: Subject<string>;\r\n constructor() {\r\n this.frameworkThemeSubject = new Subject<string>();\r\n this.frameworkTheme$ = this.frameworkThemeSubject.asObservable();\r\n }\r\n\r\n //TODO-review: this acts as a public api to change the theme\r\n //but doesn't do the actual change, instead it relies on \r\n //the CssFramewkCoromponent having subscribed to listen \r\n //and perform the actual theme change\r\n requestThemeChange(themeName:string){\r\n this.frameworkThemeSubject.next(themeName);\r\n this.activeRequestedTheme=themeName;\r\n }\r\n\r\n //TODO-review:there's no way of knowing what the individual component instance\r\n //has set its theme to, this is just the theme made through the requestThemeChange\r\n //calls and not guaranteed to correspond to the actual theme set by the \r\n //component instance themselves\r\n getActiveRequestedTheme():string{\r\n return this.activeRequestedTheme;\r\n }\r\n}\r\n","import { ChangeDetectorRef, Component, OnChanges, OnDestroy, OnInit, ViewEncapsulation, inject, input, signal } from '@angular/core';\r\nimport { FrameworkLibraryService, JsonSchemaFormService, addClasses, inArray } from '@ng-formworks/core';\r\nimport _, { cloneDeep, map } from 'lodash';\r\nimport { Subscription } from 'rxjs';\r\nimport { css_fw } from './css-framework.defs';\r\nimport { CssframeworkService } from './css-framework.service';\r\n\r\n@Component({\r\n selector: 'css-framework',\r\n templateUrl: './css-framework.component.html',\r\n styleUrls: ['./css-framework.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class CssFrameworkComponent implements OnInit, OnChanges,OnDestroy {\r\n changeDetector = inject(ChangeDetectorRef);\r\n jsf = inject(JsonSchemaFormService);\r\n jsfFLService = inject(FrameworkLibraryService);\r\n cssFWService = inject(CssframeworkService);\r\n\r\n frameworkInitialized = false;\r\n widgetOptions: any; // Options passed to child widget\r\n widgetLayoutNode: any; // layoutNode passed to child widget\r\n options: any; // Options used in this framework\r\n formControl: any = null;\r\n debugOutput: any = '';\r\n debug: any = '';\r\n parentArray: any = null;\r\n isOrderable = false;\r\n readonly layoutNode = input<any>(undefined);\r\n readonly layoutIndex = input<number[]>(undefined);\r\n readonly dataIndex = input<number[]>(undefined);\r\n\r\n readonly widgetStyles = signal<css_fw.widgetstyles>(undefined);\r\n\r\n\r\n\r\n\r\n\r\n //TODO-move to ng-formworks/core utility.functions.ts\r\n applyCssClasses(type, widgetOptions, styleOptions) {\r\n //console.log(\"applyCssClasses for type:\"+type);\r\n let cssClasses = this.widgetStyles()[type];\r\n if (!cssClasses || _.isEmpty(cssClasses) ) {\r\n cssClasses = this.widgetStyles().default;\r\n }\r\n Object.keys(cssClasses).forEach(catName => {\r\n let classList = cssClasses[catName];\r\n\r\n if (classList.length) {\r\n widgetOptions[catName] = addClasses(widgetOptions[catName], classList);\r\n }\r\n if (styleOptions) {\r\n widgetOptions[catName] = addClasses(widgetOptions[catName], styleOptions);\r\n }\r\n\r\n })\r\n }\r\n\r\n flattenWidgetStyles(wstyles:css_fw.widgetstyles){\r\n var flattened:any={};\r\n let ignore=['__themes__'];\r\n Object.keys(wstyles).forEach(wkey=>{\r\n let wstyle=wstyles[wkey];\r\n if(ignore.indexOf(wkey)>=0){\r\n flattened[wkey]=wstyle;\r\n return;\r\n }\r\n if(_.isArray(wstyle)){\r\n \r\n flattened[wkey]=wstyle.join(\" \");\r\n }\r\n if(_.isObject(wstyle)){//is csscategories\r\n flattened[wkey]=flattened[wkey]||{};\r\n Object.keys(wstyle).forEach(catName=>{\r\n let cssCat=wstyle[catName];\r\n \r\n if(_.isArray(cssCat)){\r\n flattened[wkey][catName]=cssCat.join(\" \");\r\n }else{\r\n flattened[wkey][catName]=cssCat;\r\n }\r\n })\r\n }\r\n if(_.isString(wstyle)){\r\n flattened[wkey]=wstyle;\r\n }\r\n })\r\n return flattened\r\n}\r\n\r\ndefaultStyling:css_fw.widgetstyles={\r\n array:{},\r\n default:{fieldHtmlClass: \"cssfw-form-control\"},\r\n __themes__:[{name:'notheme',text:'None'}],\r\n __remove_item__:\"cssfw-remove-item\",\r\n __array_item_nonref__:{\r\n \"htmlClass\": \"cssfw-array-item-nonref\"\r\n },\r\n __active__:{activeClass:\"cssfw-active\"},\r\n __array__:{htmlClass:\"cssfw-array\"},\r\n __control_label__:{labelHtmlClass:\"cssfw-control-label\"},\r\n __form_group__:{htmlClass: \"cssfw-form-group\"},\r\n __field_addon_left__:\"cssfw-addon-left\",\r\n __field_addon_right__:\"cssfw-addon-right\",\r\n __help_block__:\"cssfw-help-block\",\r\n __required_asterisk__:\"cssfw-required-astersisk\",\r\n __screen_reader__: \"cssfw-screen-reader\"\r\n\r\n}\r\n\r\n\r\n\r\n\r\ntheme:string\r\nframeworkThemeSubs:Subscription;\r\n constructor(){\r\n const cssFWService = this.cssFWService;\r\n\r\n \r\n let activeFramework:any=this.jsfFLService.activeFramework;\r\n let fwcfg=activeFramework.config||{};\r\n \r\n this.widgetStyles.set(Object.assign(this.defaultStyling,fwcfg.widgetstyles));\r\n let defaultTheme=this.widgetStyles().__themes__[0];\r\n let defaultThemeName=cssFWService.activeRequestedTheme||defaultTheme.name;\r\n this.theme=this.options?.theme|| defaultThemeName;\r\n this.frameworkThemeSubs=cssFWService.frameworkTheme$.subscribe(newTheme=>{\r\n this.theme=newTheme;\r\n })\r\n \r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.frameworkThemeSubs.unsubscribe();\r\n this.frameworkThemeSubs=null;\r\n }\r\n\r\n\r\n get showRemoveButton(): boolean {\r\n const layoutNode = this.layoutNode();\r\n if (!this.options.removable || this.options.readonly ||\r\n layoutNode.type === '$ref'\r\n ) {\r\n return false;\r\n }\r\n if (layoutNode.recursiveReference) {\r\n return true;\r\n }\r\n if (!layoutNode.arrayItem || !this.parentArray) {\r\n return false;\r\n }\r\n // If array length <= minItems, don't allow removing any items\r\n return this.parentArray.items.length - 1 <= this.parentArray.options.minItems ? false :\r\n // For removable list items, allow removing any item\r\n layoutNode.arrayItemType === 'list' ? true :\r\n // For removable tuple items, only allow removing last item in list\r\n this.layoutIndex()[this.layoutIndex().length - 1] === this.parentArray.items.length - 2;\r\n }\r\n\r\n ngOnInit() {\r\n this.initializeFramework();\r\n const layoutNode = this.layoutNode();\r\n if (layoutNode.arrayItem && layoutNode.type !== '$ref') {\r\n this.parentArray = this.jsf.getParentNode(this);\r\n if (this.parentArray) {\r\n this.isOrderable = layoutNode.arrayItemType === 'list' &&\r\n !this.options.readonly && this.parentArray.options.orderable;\r\n }\r\n }\r\n }\r\n\r\n ngOnChanges() {\r\n if (!this.frameworkInitialized) {\r\n this.initializeFramework();\r\n }\r\n }\r\n\r\n initializeFramework() {\r\n const layoutNode = this.layoutNode();\r\n if (layoutNode) {\r\n this.options = cloneDeep(layoutNode.options);\r\n this.widgetLayoutNode = {\r\n ...layoutNode,\r\n options: cloneDeep(layoutNode.options)\r\n };\r\n this.widgetOptions = this.widgetLayoutNode.options;\r\n this.formControl = this.jsf.getFormControl(this);\r\n\r\n this.options.isInputWidget = inArray(layoutNode.type, [\r\n 'button', 'checkbox', 'checkboxes-inline', 'checkboxes', 'color',\r\n 'date', 'datetime-local', 'datetime', 'email', 'file', 'hidden',\r\n 'image', 'integer', 'month', 'number', 'password', 'radio',\r\n 'radiobuttons', 'radios-inline', 'radios', 'range', 'reset', 'search',\r\n 'select', 'submit', 'tel', 'text', 'textarea', 'time', 'url', 'week'\r\n ]);\r\n\r\n this.options.title = this.setTitle();\r\n\r\n this.options.htmlClass =\r\n addClasses(this.options.htmlClass, 'schema-form-' + layoutNode.type);\r\n\r\n \r\n if (layoutNode.type === 'array') {\r\n this.options.htmlClass = addClasses(this.options.htmlClass, this.widgetStyles().__array__.htmlClass);\r\n } else if (layoutNode.arrayItem && layoutNode.type !== '$ref') {\r\n this.options.htmlClass = addClasses(this.options.htmlClass, this.widgetStyles().__array_item_nonref__.htmlClass);\r\n } else {\r\n this.options.htmlClass = addClasses(this.options.htmlClass, this.widgetStyles().__form_group__.htmlClass);\r\n }\r\n \r\n\r\n /*\r\n this.options.htmlClass =\r\n this.layoutNode.type === 'array' ?\r\n addClasses(this.options.htmlClass, ['border','shadow-md','p-1']) :\r\n this.layoutNode.arrayItem && this.layoutNode.type !== '$ref' ?\r\n addClasses(this.options.htmlClass, ['border','shadow-md','p-1']) :\r\n addClasses(this.options.htmlClass, 'mb-1');\r\n*/\r\n\r\n/*\r\nthis.options.htmlClass =\r\nthis.layoutNode.type === 'array' ?\r\naddClasses(this.options.htmlClass, this.widgetStyles.array.htmlClass):\r\n this.layoutNode.arrayItem && this.layoutNode.type !== '$ref' ?\r\n addClasses(this.options.htmlClass, this.widgetStyles.__array_item_nonref__.htmlClass):\r\n addClasses(this.options.htmlClass, this.widgetStyles.__form_group__.htmlClass);\r\n*/\r\n \r\n this.widgetOptions.htmlClass = '';\r\n this.options.labelHtmlClass =\r\n addClasses(this.options.labelHtmlClass, this.widgetStyles().__control_label__.labelHtmlClass);\r\n this.widgetOptions.activeClass =\r\n addClasses(this.widgetOptions.activeClass, this.widgetStyles().__active__.activeClass);\r\n this.options.fieldAddonLeft =\r\n this.options.fieldAddonLeft || this.options.prepend;\r\n this.options.fieldAddonRight =\r\n this.options.fieldAddonRight || this.options.append;\r\n\r\n // Add asterisk to titles if required\r\n if (this.options.title && layoutNode.type !== 'tab' &&\r\n !this.options.notitle && this.options.required &&\r\n !this.options.title.includes('*')\r\n ) {\r\n let required_asterisk_class=this.widgetStyles().__required_asterisk__||'text-danger'\r\n this.options.title += ` <strong class=\"${required_asterisk_class}\">*</strong>`;\r\n }\r\n if (layoutNode.type == 'optionfieldset') {\r\n this.options.messageLocation = 'top';\r\n }\r\n // Set miscelaneous styles and settings for each control type\r\n this.applyCssClasses(layoutNode.type, this.widgetOptions, this.options.style);\r\n if (this.formControl) {\r\n this.updateHelpBlock(this.formControl.status);\r\n this.formControl.statusChanges.subscribe(status => this.updateHelpBlock(status));\r\n\r\n if (this.options.debug) {\r\n const vars: any[] = [];\r\n this.debugOutput = map(vars, thisVar => JSON.stringify(thisVar, null, 2)).join('\\n');\r\n }\r\n }\r\n this.frameworkInitialized = true;\r\n }\r\n\r\n }\r\n\r\n updateHelpBlock(status) {\r\n this.options.helpBlock = status === 'INVALID' &&\r\n this.options.enableErrorState && this.formControl.errors &&\r\n (this.formControl.dirty || this.options.feedbackOnRender) ?\r\n this.jsf.formatErrors(this.formControl.errors, this.options.validationMessages) :\r\n this.options.description || this.options.help || null;\r\n }\r\n\r\n setTitle(): string {\r\n switch (this.layoutNode().type) {\r\n case 'button':\r\n case 'checkbox':\r\n case 'section':\r\n case 'help':\r\n case 'msg':\r\n case 'submit':\r\n case 'message':\r\n case 'tabarray':\r\n case 'tabs':\r\n case '$ref':\r\n return null;\r\n case 'advancedfieldset':\r\n this.widgetOptions.expandable = true;\r\n this.widgetOptions.title = 'Advanced options';\r\n return null;\r\n case 'authfieldset':\r\n this.widgetOptions.expandable = true;\r\n this.widgetOptions.title = 'Authentication settings';\r\n return null;\r\n case 'fieldset':\r\n this.widgetOptions.title = this.options.title;\r\n return null;\r\n default:\r\n this.widgetOptions.title = null;\r\n return this.jsf.setItemTitle(this);\r\n }\r\n }\r\n\r\n removeItem() {\r\n this.jsf.removeItem(this);\r\n }\r\n}\r\n","<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\" />-->","import { InjectionToken } from \"@angular/core\";\r\n\r\nexport const CSS_FRAMEWORK_CFG = new InjectionToken<css_fw.frameworkcfg>('CSS_FRAMEWORK_CFG');\r\n\r\nexport namespace css_fw{\r\n\r\n export type themeKV=\r\n { \r\n name:string,\r\n text:string\r\n }\r\n\r\n export class csscategories{\r\n fieldHtmlClass?:string|string[]\r\n labelHtmlClass?:string|string[]\r\n htmlClass?:string|string[]\r\n itemLabelHtmlClass?:string|string[]\r\n activeClass?:string|string[]\r\n }\r\n\r\n export type widgetstyles={\r\n '$ref'?:csscategories,\r\n 'alt-date'?:csscategories,\r\n 'alt-datetime'?:csscategories,\r\n __themes__?:themeKV[],\r\n __array_item_nonref__:csscategories,\r\n __form_group__:csscategories,\r\n __control_label__:csscategories,\r\n __active__:csscategories,\r\n __required_asterisk__:string,\r\n __array__:csscategories,\r\n '__remove_item__':string,\r\n __help_block__:string,\r\n __field_addon_left__:string\r\n __field_addon_right__:string,\r\n __screen_reader__:string,\r\n array:csscategories,\r\n authfieldset?:csscategories,\r\n advancedfieldset?:csscategories,\r\n button?:csscategories,\r\n checkbox?:csscategories,\r\n checkboxes?:csscategories,\r\n checkboxbuttons?:csscategories,\r\n 'checkboxes-inline'?:csscategories,\r\n date?:csscategories,\r\n 'datetime-local'?:csscategories,\r\n fieldset?:csscategories,\r\n integer?:csscategories,\r\n number?:csscategories,\r\n optionfieldset?:csscategories,\r\n password?:csscategories,\r\n radiobuttons?:csscategories,\r\n radio?:csscategories,\r\n radios?:csscategories,\r\n \"radios-inline\"?:csscategories,\r\n 'range'?:csscategories,\r\n section?:csscategories,\r\n selectfieldset?:csscategories,\r\n select?:csscategories,\r\n submit?:csscategories,\r\n text?:csscategories,\r\n tabs?:csscategories,\r\n tabarray?:csscategories,\r\n textarea?:csscategories,\r\n default:csscategories\r\n }\r\n export type frameworkcfg={\r\n name:string,\r\n text:string;\r\n stylesheets:string[],\r\n scripts?:string[],\r\n widgetstyles:widgetstyles,\r\n widgets?:any;\r\n }\r\n\r\n \r\n\r\n}","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FrameworkLibraryService, JsonSchemaFormModule, JsonSchemaFormService, WidgetLibraryModule, WidgetLibraryService } from '@ng-formworks/core';\r\nimport { CssFrameworkComponent } from './css-framework.component';\r\nimport { CssframeworkService } from './css-framework.service';\r\n\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n CssFrameworkComponent\r\n ],\r\n imports: [\r\n JsonSchemaFormModule,\r\n CommonModule,\r\n WidgetLibraryModule,\r\n ],\r\n exports: [\r\n CssFrameworkComponent\r\n ],\r\n providers: [\r\n JsonSchemaFormService,\r\n FrameworkLibraryService,\r\n WidgetLibraryService,\r\n CssframeworkService\r\n // { provide: Framework, useClass: CssFramework, multi: true },\r\n ]\r\n})\r\nexport class CssFrameworkModule { }\r\n","import { Inject, Injectable, inject } from '@angular/core';\r\nimport { Framework } from '@ng-formworks/core';\r\nimport { CssFrameworkComponent } from './css-framework.component';\r\nimport { CSS_FRAMEWORK_CFG, css_fw } from './css-framework.defs';\r\nimport { CssframeworkService } from './css-framework.service';\r\n\r\n\r\n\r\n@Injectable()\r\nexport class CssFramework extends Framework {\r\n cssFWService = inject(CssframeworkService);\r\n\r\n name = 'css';\r\n\r\n framework:any = CssFrameworkComponent;\r\n config:css_fw.frameworkcfg\r\n constructor(@Inject(CSS_FRAMEWORK_CFG ) cfg:css_fw.frameworkcfg){\r\n //reverted to use @Inject for other child classes\r\n //const cfg = inject<css_fw.frameworkcfg>(CSS_FRAMEWORK_CFG);\r\n\r\n super();\r\n \r\n this.name=cfg.name;\r\n this.text=cfg.text||this.name;\r\n this.stylesheets=cfg.stylesheets;\r\n this.scripts=cfg.scripts;\r\n this.config=cfg;\r\n this.widgets=cfg.widgets;\r\n }\r\n getActiveTheme():css_fw.themeKV{\r\n let activeRequestedThemeName=this.cssFWService.getActiveRequestedTheme();\r\n let frameWorkThemes=this.config?.widgetstyles?.__themes__;\r\n \r\n let theme=frameWorkThemes && frameWorkThemes[0]\r\n if(activeRequestedThemeName){//if not set return first theme in config;\r\n theme={name:activeRequestedThemeName,text:activeRequestedThemeName};\r\n if(frameWorkThemes){\r\n let filtered=frameWorkThemes.filter(theme=>{return theme.name==activeRequestedThemeName});\r\n theme=(filtered && filtered[0])||theme;\r\n }\r\n }\r\n return theme;\r\n }\r\n\r\n requestThemeChange(name:string){\r\n this.cssFWService.requestThemeChange(name);\r\n }\r\n\r\n registerTheme(newTheme:css_fw.themeKV,overwrite:boolean=true):boolean{\r\n let themeList=this.config?.widgetstyles?.__themes__||[];\r\n let matchedThemes=themeList.filter(theme=>{return newTheme.name==theme.name});\r\n if(matchedThemes && matchedThemes[0]){\r\n if(overwrite){\r\n matchedThemes[0].text=newTheme.text;\r\n return true;\r\n }\r\n if(!overwrite){\r\n return false;\r\n }\r\n \r\n }\r\n if(!matchedThemes || matchedThemes.length==0){\r\n let cfg:any=this.config\r\n cfg.widgetstyles= this.config.widgetstyles||{};\r\n cfg.widgetstyles.__themes__=cfg.widgetstyles.__themes__||[];\r\n cfg.widgetstyles.__themes__.push(newTheme);\r\n return true;\r\n }\r\n };\r\n\r\n unregisterTheme(name:string):boolean{\r\n let themeList=this.config?.widgetstyles?.__themes__;\r\n let foundInd=-1;\r\n if(themeList){\r\n themeList.forEach((theme,ind)=>{\r\n if(name==theme.name){\r\n foundInd=ind;\r\n }\r\n });\r\n if(foundInd>=0){\r\n themeList.splice(foundInd,1);\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n getConfig():css_fw.frameworkcfg{\r\n return this.config;\r\n }\r\n\r\n /*\r\n stylesheets = [\r\n //TODO-enable for dev only\r\n cdn.tailwindcss.com/3.3.3'\r\n ];\r\n\r\n\r\n scripts = [\r\n\r\n ];\r\n */\r\n\r\n}\r\n","/*\r\n * Public API Surface of ng-formworks-cssframework\r\n */\r\n\r\nexport * from './lib/css-framework.component';\r\nexport * from './lib/css-framework.defs';\r\nexport * from './lib/css-framework.module';\r\nexport * from './lib/css-framework.service';\r\nexport * from './lib/css.framework';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -18,16 +18,16 @@ export declare class CssFrameworkComponent implements OnInit, OnChanges, OnDestr
18
18
  debug: any;
19
19
  parentArray: any;
20
20
  isOrderable: boolean;
21
- layoutNode: any;
22
- layoutIndex: number[];
23
- dataIndex: number[];
24
- widgetStyles: css_fw.widgetstyles;
21
+ readonly layoutNode: import("@angular/core").InputSignal<any>;
22
+ readonly layoutIndex: import("@angular/core").InputSignal<number[]>;
23
+ readonly dataIndex: import("@angular/core").InputSignal<number[]>;
24
+ readonly widgetStyles: import("@angular/core").WritableSignal<css_fw.widgetstyles>;
25
25
  applyCssClasses(type: any, widgetOptions: any, styleOptions: any): void;
26
26
  flattenWidgetStyles(wstyles: css_fw.widgetstyles): any;
27
27
  defaultStyling: css_fw.widgetstyles;
28
28
  theme: string;
29
29
  frameworkThemeSubs: Subscription;
30
- constructor(changeDetector: ChangeDetectorRef, jsf: JsonSchemaFormService, jsfFLService: FrameworkLibraryService, cssFWService: CssframeworkService);
30
+ constructor();
31
31
  ngOnDestroy(): void;
32
32
  get showRemoveButton(): boolean;
33
33
  ngOnInit(): void;
@@ -37,5 +37,5 @@ export declare class CssFrameworkComponent implements OnInit, OnChanges, OnDestr
37
37
  setTitle(): string;
38
38
  removeItem(): void;
39
39
  static ɵfac: i0.ɵɵFactoryDeclaration<CssFrameworkComponent, never>;
40
- static ɵcmp: i0.ɵɵComponentDeclaration<CssFrameworkComponent, "css-framework", never, { "layoutNode": { "alias": "layoutNode"; "required": false; }; "layoutIndex": { "alias": "layoutIndex"; "required": false; }; "dataIndex": { "alias": "dataIndex"; "required": false; }; "widgetStyles": { "alias": "widgetStyles"; "required": false; }; }, {}, never, never, false, never>;
40
+ static ɵcmp: i0.ɵɵComponentDeclaration<CssFrameworkComponent, "css-framework", never, { "layoutNode": { "alias": "layoutNode"; "required": false; "isSignal": true; }; "layoutIndex": { "alias": "layoutIndex"; "required": false; "isSignal": true; }; "dataIndex": { "alias": "dataIndex"; "required": false; "isSignal": true; }; }, {}, never, never, false, never>;
41
41
  }
@@ -7,7 +7,7 @@ export declare class CssFramework extends Framework {
7
7
  name: string;
8
8
  framework: any;
9
9
  config: css_fw.frameworkcfg;
10
- constructor(cfg: css_fw.frameworkcfg, cssFWService: CssframeworkService);
10
+ constructor(cfg: css_fw.frameworkcfg);
11
11
  getActiveTheme(): css_fw.themeKV;
12
12
  requestThemeChange(name: string): void;
13
13
  registerTheme(newTheme: css_fw.themeKV, overwrite?: boolean): boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ng-formworks/cssframework",
3
- "version": "18.4.0",
3
+ "version": "18.5.2",
4
4
  "description": "Angular ng-formworks - JSON Schema Form builder cssframework",
5
5
  "author": "https://github.com/zahmo/ng-formworks/graphs/contributors",
6
6
  "keywords": [
@@ -44,7 +44,7 @@
44
44
  },
45
45
  "dependencies": {
46
46
  "tslib": "^2.7.0",
47
- "@ng-formworks/core": "~18.4.0"
47
+ "@ng-formworks/core": "~18.5.2"
48
48
  },
49
49
  "sideEffects": false,
50
50
  "module": "fesm2022/ng-formworks-cssframework.mjs",