@ng-formworks/core 18.5.1 → 19.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/README.md +2 -1
  2. package/fesm2022/ng-formworks-core.mjs +130 -110
  3. package/fesm2022/ng-formworks-core.mjs.map +1 -1
  4. package/package.json +3 -3
  5. package/esm2022/lib/framework-library/framework-library.service.mjs +0 -172
  6. package/esm2022/lib/framework-library/framework.mjs +0 -15
  7. package/esm2022/lib/framework-library/no-framework.component.mjs +0 -17
  8. package/esm2022/lib/framework-library/no-framework.module.mjs +0 -27
  9. package/esm2022/lib/framework-library/no.framework.mjs +0 -19
  10. package/esm2022/lib/json-schema-form.component.mjs +0 -759
  11. package/esm2022/lib/json-schema-form.module.mjs +0 -26
  12. package/esm2022/lib/json-schema-form.service.mjs +0 -695
  13. package/esm2022/lib/locale/de-validation-messages.mjs +0 -60
  14. package/esm2022/lib/locale/en-validation-messages.mjs +0 -60
  15. package/esm2022/lib/locale/es-validation-messages.mjs +0 -57
  16. package/esm2022/lib/locale/fr-validation-messages.mjs +0 -60
  17. package/esm2022/lib/locale/index.mjs +0 -8
  18. package/esm2022/lib/locale/it-validation-messages.mjs +0 -60
  19. package/esm2022/lib/locale/pt-validation-messages.mjs +0 -60
  20. package/esm2022/lib/locale/zh-validation-messages.mjs +0 -60
  21. package/esm2022/lib/shared/convert-schema-to-draft6.function.mjs +0 -300
  22. package/esm2022/lib/shared/form-group.functions.mjs +0 -444
  23. package/esm2022/lib/shared/format-regex.constants.mjs +0 -54
  24. package/esm2022/lib/shared/index.mjs +0 -12
  25. package/esm2022/lib/shared/json-schema.functions.mjs +0 -784
  26. package/esm2022/lib/shared/json.validators.mjs +0 -884
  27. package/esm2022/lib/shared/jsonpointer.functions.mjs +0 -1026
  28. package/esm2022/lib/shared/layout.functions.mjs +0 -1158
  29. package/esm2022/lib/shared/merge-schemas.function.mjs +0 -345
  30. package/esm2022/lib/shared/utility.functions.mjs +0 -380
  31. package/esm2022/lib/shared/validator.functions.mjs +0 -584
  32. package/esm2022/lib/widget-library/add-reference.component.mjs +0 -58
  33. package/esm2022/lib/widget-library/button.component.mjs +0 -69
  34. package/esm2022/lib/widget-library/checkbox.component.mjs +0 -102
  35. package/esm2022/lib/widget-library/checkboxes.component.mjs +0 -145
  36. package/esm2022/lib/widget-library/file.component.mjs +0 -32
  37. package/esm2022/lib/widget-library/hidden.component.mjs +0 -51
  38. package/esm2022/lib/widget-library/index.mjs +0 -55
  39. package/esm2022/lib/widget-library/input.component.mjs +0 -116
  40. package/esm2022/lib/widget-library/message.component.mjs +0 -35
  41. package/esm2022/lib/widget-library/none.component.mjs +0 -20
  42. package/esm2022/lib/widget-library/number.component.mjs +0 -120
  43. package/esm2022/lib/widget-library/one-of.component.mjs +0 -32
  44. package/esm2022/lib/widget-library/orderable.directive.mjs +0 -120
  45. package/esm2022/lib/widget-library/radios.component.mjs +0 -151
  46. package/esm2022/lib/widget-library/root.component.mjs +0 -73
  47. package/esm2022/lib/widget-library/section.component.mjs +0 -196
  48. package/esm2022/lib/widget-library/select-framework.component.mjs +0 -44
  49. package/esm2022/lib/widget-library/select-widget.component.mjs +0 -42
  50. package/esm2022/lib/widget-library/select.component.mjs +0 -147
  51. package/esm2022/lib/widget-library/submit.component.mjs +0 -79
  52. package/esm2022/lib/widget-library/tab.component.mjs +0 -38
  53. package/esm2022/lib/widget-library/tabs.component.mjs +0 -106
  54. package/esm2022/lib/widget-library/template.component.mjs +0 -43
  55. package/esm2022/lib/widget-library/textarea.component.mjs +0 -101
  56. package/esm2022/lib/widget-library/widget-library.module.mjs +0 -42
  57. package/esm2022/lib/widget-library/widget-library.service.mjs +0 -226
  58. package/esm2022/ng-formworks-core.mjs +0 -5
  59. package/esm2022/public_api.mjs +0 -13
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ng-formworks/core",
3
- "version": "18.5.1",
3
+ "version": "19.5.1",
4
4
  "description": "Angular ng-formworks - JSON Schema Form builder core",
5
5
  "author": "https://github.com/zahmo/ng-formworks/graphs/contributors",
6
6
  "keywords": [
@@ -13,10 +13,12 @@
13
13
  "Angular17",
14
14
  "Angular 17",
15
15
  "Angular 18",
16
+ "Angular 19",
16
17
  "ng15",
17
18
  "ng16",
18
19
  "ng17",
19
20
  "ng18",
21
+ "ng19",
20
22
  "JSON Schema",
21
23
  "form",
22
24
  "forms",
@@ -58,8 +60,6 @@
58
60
  },
59
61
  ".": {
60
62
  "types": "./index.d.ts",
61
- "esm2022": "./esm2022/ng-formworks-core.mjs",
62
- "esm": "./esm2022/ng-formworks-core.mjs",
63
63
  "default": "./fesm2022/ng-formworks-core.mjs"
64
64
  }
65
65
  },
@@ -1,172 +0,0 @@
1
- import { HttpClient } from '@angular/common/http';
2
- import { Inject, Injectable, inject } from '@angular/core';
3
- import { Subject, lastValueFrom } from 'rxjs';
4
- import { hasOwn } from '../shared/utility.functions';
5
- import { WidgetLibraryService } from '../widget-library/widget-library.service';
6
- import { Framework } from './framework';
7
- import * as i0 from "@angular/core";
8
- // Possible future frameworks:
9
- // - Foundation 6:
10
- // http://justindavis.co/2017/06/15/using-foundation-6-in-angular-4/
11
- // https://github.com/zurb/foundation-sites
12
- // - Semantic UI:
13
- // https://github.com/edcarroll/ng2-semantic-ui
14
- // https://github.com/vladotesanovic/ngSemantic
15
- export class FrameworkLibraryService {
16
- constructor(frameworks) {
17
- this.frameworks = frameworks;
18
- //private frameworks = inject(Framework);
19
- this.widgetLibrary = inject(WidgetLibraryService);
20
- this.http = inject(HttpClient);
21
- this.activeFramework = null;
22
- this.loadExternalAssets = false;
23
- this.frameworkLibrary = {};
24
- this.frameworks.forEach(framework => this.frameworkLibrary[framework.name] = framework);
25
- this.defaultFramework = this.frameworks[0].name;
26
- //this.setFramework(this.defaultFramework);
27
- this.activeFrameworkName = this.defaultFramework;
28
- this.activeFrameworkNameSubject = new Subject();
29
- this.activeFrameworkName$ = this.activeFrameworkNameSubject.asObservable();
30
- this.setFramework(this.defaultFramework);
31
- }
32
- setLoadExternalAssets(loadExternalAssets = true) {
33
- this.loadExternalAssets = !!loadExternalAssets;
34
- }
35
- setFramework(framework = this.defaultFramework, loadExternalAssets = this.loadExternalAssets) {
36
- this.activeFramework =
37
- typeof framework === 'string' && this.hasFramework(framework) ?
38
- this.frameworkLibrary[framework] :
39
- typeof framework === 'object' && hasOwn(framework, 'framework') ?
40
- framework :
41
- this.frameworkLibrary[this.defaultFramework];
42
- if (this.activeFramework.name != this.activeFrameworkName) {
43
- this.activeFrameworkName = this.activeFramework.name;
44
- this.activeFrameworkNameSubject.next(this.activeFrameworkName);
45
- }
46
- return this.registerFrameworkWidgets(this.activeFramework);
47
- }
48
- registerFrameworkWidgets(framework) {
49
- return hasOwn(framework, 'widgets') ?
50
- this.widgetLibrary.registerFrameworkWidgets(framework.widgets) :
51
- this.widgetLibrary.unRegisterFrameworkWidgets();
52
- }
53
- hasFramework(type) {
54
- return hasOwn(this.frameworkLibrary, type);
55
- }
56
- getFramework() {
57
- if (!this.activeFramework) {
58
- this.setFramework('default', true);
59
- }
60
- return this.activeFramework.framework;
61
- }
62
- getFrameworkList() {
63
- return this.frameworks.map(fw => {
64
- return { name: fw.name, text: fw.text };
65
- });
66
- }
67
- getFrameworkWidgets() {
68
- return this.activeFramework.widgets || {};
69
- }
70
- getFrameworkStylesheets(load = this.loadExternalAssets) {
71
- return (load && this.activeFramework.stylesheets) || [];
72
- }
73
- getFrameworkScripts(load = this.loadExternalAssets) {
74
- return (load && this.activeFramework.scripts) || [];
75
- }
76
- //applies to CssFramework classes
77
- getFrameworkConfig(existingFramework) {
78
- let actFramework = existingFramework || this.activeFramework;
79
- return actFramework.config;
80
- }
81
- //this will load the list of assets to be loaded at runtime in case the dependent framework
82
- //scripts and styles are include locally with the parent app
83
- getFrameworkAssetConfig(existingFramework, useAssetRelPath = true) {
84
- let actFramework = existingFramework || this.activeFramework;
85
- //TODO move this into config
86
- const assetConfigPath = `assets/${actFramework.name}/cssframework`;
87
- const assetConfigURL = `${assetConfigPath}/assets.json`;
88
- let subs = this.http
89
- .get(assetConfigURL, { responseType: 'text' });
90
- //.subscribe(assetConfig => {
91
- // assetConfig
92
- //})
93
- return lastValueFrom(subs).then(assetCfgText => {
94
- let assetCfg = JSON.parse(assetCfgText);
95
- if (useAssetRelPath) {
96
- assetCfg.stylesheets = assetCfg.stylesheets.map(styleLink => {
97
- //ignore relative path if url starts with known protocol or //
98
- let nonRelPrefixes = ["/", "//", "http:", "https:"]; //"//" list for completeness
99
- let isNonRel = false;
100
- nonRelPrefixes.forEach(prefix => {
101
- isNonRel = isNonRel || styleLink.indexOf(prefix) == 0;
102
- });
103
- if (isNonRel) {
104
- return styleLink;
105
- }
106
- return `${assetConfigPath}/${styleLink}`;
107
- });
108
- assetCfg.scripts = assetCfg.scripts.map(scriptLink => {
109
- return `${assetConfigPath}/${scriptLink}`;
110
- });
111
- }
112
- return assetCfg;
113
- });
114
- }
115
- //applies to CssFramework classes
116
- getFrameworkThemes() {
117
- let cssfwConfig = this.getFrameworkConfig();
118
- let themes;
119
- if (cssfwConfig) {
120
- themes = cssfwConfig?.widgetstyles?.__themes__ || [];
121
- }
122
- return themes;
123
- }
124
- //applies to CssFramework classes
125
- requestThemeChange(name, validateThemeExists = false, existingFramework) {
126
- let actFramework = existingFramework || this.activeFramework;
127
- if (actFramework.requestThemeChange) {
128
- if (validateThemeExists) {
129
- let themes = this.getFrameworkThemes();
130
- let foundThemes = themes.filter(thm => { return thm.name == name; });
131
- if (!foundThemes || foundThemes.length == 0) {
132
- return false;
133
- }
134
- }
135
- actFramework.requestThemeChange(name);
136
- return true;
137
- }
138
- }
139
- //applies to CssFramework classes
140
- getActiveTheme(existingFramework) {
141
- let actFramework = existingFramework || this.activeFramework;
142
- if (actFramework.getActiveTheme) {
143
- return actFramework.getActiveTheme();
144
- }
145
- }
146
- //applies to CssFramework classes
147
- registerTheme(newTheme, existingFramework) {
148
- let actFramework = existingFramework || this.activeFramework;
149
- if (actFramework.registerTheme) {
150
- return actFramework.registerTheme(newTheme);
151
- }
152
- }
153
- //applies to CssFramework classes
154
- unregisterTheme(name, existingFramework) {
155
- let actFramework = existingFramework || this.activeFramework;
156
- if (actFramework.registerTheme) {
157
- return actFramework.unregisterTheme(name);
158
- }
159
- }
160
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FrameworkLibraryService, deps: [{ token: Framework }], target: i0.ɵɵFactoryTarget.Injectable }); }
161
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FrameworkLibraryService, providedIn: 'root' }); }
162
- }
163
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FrameworkLibraryService, decorators: [{
164
- type: Injectable,
165
- args: [{
166
- providedIn: 'root',
167
- }]
168
- }], ctorParameters: () => [{ type: undefined, decorators: [{
169
- type: Inject,
170
- args: [Framework]
171
- }] }] });
172
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWV3b3JrLWxpYnJhcnkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWZvcm13b3Jrcy1jb3JlL3NyYy9saWIvZnJhbWV3b3JrLWxpYnJhcnkvZnJhbWV3b3JrLWxpYnJhcnkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBYyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNoRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDOztBQUV4Qyw4QkFBOEI7QUFDOUIsa0JBQWtCO0FBQ2xCLHNFQUFzRTtBQUN0RSw2Q0FBNkM7QUFDN0MsaUJBQWlCO0FBQ2pCLGlEQUFpRDtBQUNqRCxpREFBaUQ7QUFLakQsTUFBTSxPQUFPLHVCQUF1QjtJQWdCbEMsWUFBdUMsVUFBaUI7UUFBakIsZUFBVSxHQUFWLFVBQVUsQ0FBTztRQWZ4RCx5Q0FBeUM7UUFDakMsa0JBQWEsR0FBRyxNQUFNLENBQXVCLG9CQUFvQixDQUFDLENBQUM7UUFDbkUsU0FBSSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUVsQyxvQkFBZSxHQUFjLElBQUksQ0FBQztRQUdsQyx1QkFBa0IsR0FBRyxLQUFLLENBQUM7UUFFM0IscUJBQWdCLEdBQWtDLEVBQUUsQ0FBQztRQU9uRCxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUNsQyxJQUFJLENBQUMsZ0JB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QUMsaUJBQXNCO1FBQ3ZELElBQUksWUFBWSxHQUFvQyxpQkFBaUIsSUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDO1FBQzVGLElBQUcsWUFBWSxDQUFDLGFBQWEsRUFBQyxDQUFDO1lBQzdCLE9BQU8sWUFBWSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1QyxDQUFDO0lBQ0gsQ0FBQzsrR0EvS1EsdUJBQXVCLGtCQWdCZCxTQUFTO21IQWhCbEIsdUJBQXVCLGNBRnRCLE1BQU07OzRGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQWlCYyxNQUFNOzJCQUFDLFNBQVMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIGluamVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBTdWJqZWN0LCBsYXN0VmFsdWVGcm9tIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGhhc093biB9IGZyb20gJy4uL3NoYXJlZC91dGlsaXR5LmZ1bmN0aW9ucyc7XHJcbmltcG9ydCB7IFdpZGdldExpYnJhcnlTZXJ2aWNlIH0gZnJvbSAnLi4vd2lkZ2V0LWxpYnJhcnkvd2lkZ2V0LWxpYnJhcnkuc2VydmljZSc7XHJcbmltcG9ydCB7IEZyYW1ld29yayB9IGZyb20gJy4vZnJhbWV3b3JrJztcclxuXHJcbi8vIFBvc3NpYmxlIGZ1dHVyZSBmcmFtZXdvcmtzOlxyXG4vLyAtIEZvdW5kYXRpb24gNjpcclxuLy8gICBodHRwOi8vanVzdGluZGF2aXMuY28vMjAxNy8wNi8xNS91c2luZy1mb3VuZGF0aW9uLTYtaW4tYW5ndWxhci00L1xyXG4vLyAgIGh0dHBzOi8vZ2l0aHViLmNvbS96dXJiL2ZvdW5kYXRpb24tc2l0ZXNcclxuLy8gLSBTZW1hbnRpYyBVSTpcclxuLy8gICBodHRwczovL2dpdGh1Yi5jb20vZWRjYXJyb2xsL25nMi1zZW1hbnRpYy11aVxyXG4vLyAgIGh0dHBzOi8vZ2l0aHViLmNvbS92bGFkb3Rlc2Fub3ZpYy9uZ1NlbWFudGljXHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgRnJhbWV3b3JrTGlicmFyeVNlcnZpY2Uge1xyXG4gIC8vcHJpdmF0ZSBmcmFtZXdvcmtzID0gaW5qZWN0KEZyYW1ld29yayk7XHJcbiAgcHJpdmF0ZSB3aWRnZXRMaWJyYXJ5ID0gaW5qZWN0PFdpZGdldExpYnJhcnlTZXJ2aWNlPihXaWRnZXRMaWJyYXJ5U2VydmljZSk7XHJcbiAgcHJpdmF0ZSBodHRwID0gaW5qZWN0KEh0dHBDbGllbnQpO1xyXG5cclxuICBhY3RpdmVGcmFtZXdvcms6IEZyYW1ld29yayA9IG51bGw7XHJcbiAgc3R5bGVzaGVldHM6IChIVE1MU3R5bGVFbGVtZW50fEhUTUxMaW5rRWxlbWVudClbXTtcclxuICBzY3JpcHRzOiBIVE1MU2NyaXB0RWxlbWVudFtdO1xyXG4gIGxvYWRFeHRlcm5hbEFzc2V0cyA9IGZhbHNlO1xyXG4gIGRlZmF1bHRGcmFtZXdvcms6IHN0cmluZztcclxuICBmcmFtZXdvcmtMaWJyYXJ5OiB7IFtuYW1lOiBzdHJpbmddOiBGcmFtZXdvcmsgfSA9IHt9O1xyXG5cclxuICBhY3RpdmVGcmFtZXdvcmtOYW1lJDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xyXG4gIHByaXZhdGUgYWN0aXZlRnJhbWV3b3JrTmFtZVN1YmplY3Q6IFN1YmplY3Q8c3RyaW5nPjtcclxuICBwcml2YXRlIGFjdGl2ZUZyYW1ld29ya05hbWU6c3RyaW5nO1xyXG5cclxuICBjb25zdHJ1Y3RvcihASW5qZWN0KEZyYW1ld29yaykgcHJpdmF0ZSBmcmFtZXdvcmtzOiBhbnlbXSwpIHtcclxuICAgIHRoaXMuZnJhbWV3b3Jrcy5mb3JFYWNoKGZyYW1ld29yayA9PlxyXG4gICAgICB0aGlzLmZyYW1ld29ya0xpYnJhcnlbZnJhbWV3b3JrLm5hbWVdID0gZnJhbWV3b3JrXHJcbiAgICApO1xyXG4gICAgdGhpcy5kZWZhdWx0RnJhbWV3b3JrID0gdGhpcy5mcmFtZXdvcmtzWzBdLm5hbWU7XHJcbiAgICAvL3RoaXMuc2V0RnJhbWV3b3JrKHRoaXMuZGVmYXVsdEZyYW1ld29yayk7XHJcbiAgICBcclxuICAgIHRoaXMuYWN0aXZlRnJhbWV3b3JrTmFtZT10aGlzLmRlZmF1bHRGcmFtZXdvcms7XHJcbiAgICB0aGlzLmFjdGl2ZUZyYW1ld29ya05hbWVTdWJqZWN0ID0gbmV3IFN1YmplY3Q8c3RyaW5nPigpO1xyXG4gICAgdGhpcy5hY3RpdmVGcmFtZXdvcmtOYW1lJCA9IHRoaXMuYWN0aXZlRnJhbWV3b3JrTmFtZVN1YmplY3QuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICB0aGlzLnNldEZyYW1ld29yayh0aGlzLmRlZmF1bHRGcmFtZXdvcmspO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldExvYWRFeHRlcm5hbEFzc2V0cyhsb2FkRXh0ZXJuYWxBc3NldHMgPSB0cnVlKTogdm9pZCB7XHJcbiAgICB0aGlzLmxvYWRFeHRlcm5hbEFzc2V0cyA9ICEhbG9hZEV4dGVybmFsQXNzZXRzO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldEZyYW1ld29yayhcclxuICAgIGZyYW1ld29yazogc3RyaW5nfEZyYW1ld29yayA9IHRoaXMuZGVmYXVsdEZyYW1ld29yayxcclxuICAgIGxvYWRFeHRlcm5hbEFzc2V0cyA9IHRoaXMubG9hZEV4dGVybmFsQXNzZXRzXHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICB0aGlzLmFjdGl2ZUZyYW1ld29yayA9XHJcbiAgICAgIHR5cGVvZiBmcmFtZXdvcmsgPT09ICdzdHJpbmcnICYmIHRoaXMuaGFzRnJhbWV3b3JrKGZyYW1ld29yaykgP1xyXG4gICAgICAgIHRoaXMuZnJhbWV3b3JrTGlicmFyeVtmcmFtZXdvcmtdIDpcclxuICAgICAgdHlwZW9mIGZyYW1ld29yayA9PT0gJ29iamVjdCcgJiYgaGFzT3duKGZyYW1ld29yaywgJ2ZyYW1ld29yaycpID9cclxuICAgICAgICBmcmFtZXdvcmsgOlxyXG4gICAgICAgIHRoaXMuZnJhbWV3b3JrTGlicmFyeVt0aGlzLmRlZmF1bHRGcmFtZXdvcmtdO1xyXG4gICAgaWYodGhpcy5hY3RpdmVGcmFtZXdvcmsubmFtZSAhPXRoaXMuYWN0aXZlRnJhbWV3b3JrTmFtZSl7XHJcbiAgICAgIHRoaXMuYWN0aXZlRnJhbWV3b3JrTmFtZT10aGlzLmFjdGl2ZUZyYW1ld29yay5uYW1lO1xyXG4gICAgICB0aGlzLmFjdGl2ZUZyYW1ld29ya05hbWVTdWJqZWN0Lm5leHQodGhpcy5hY3RpdmVGcmFtZXdvcmtOYW1lKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLnJlZ2lzdGVyRnJhbWV3b3JrV2lkZ2V0cyh0aGlzLmFjdGl2ZUZyYW1ld29yayk7XHJcbiAgfVxyXG5cclxuICByZWdpc3RlckZyYW1ld29ya1dpZGdldHMoZnJhbWV3b3JrOiBGcmFtZXdvcmspOiBib29sZWFuIHtcclxuICAgIHJldHVybiBoYXNPd24oZnJhbWV3b3JrLCAnd2lkZ2V0cycpID9cclxuICAgICAgdGhpcy53aWRnZXRMaWJyYXJ5LnJlZ2lzdGVyRnJhbWV3b3JrV2lkZ2V0cyhmcmFtZXdvcmsud2lkZ2V0cykgOlxyXG4gICAgICB0aGlzLndpZGdldExpYnJhcnkudW5SZWdpc3RlckZyYW1ld29ya1dpZGdldHMoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoYXNGcmFtZXdvcmsodHlwZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gaGFzT3duKHRoaXMuZnJhbWV3b3JrTGlicmFyeSwgdHlwZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0RnJhbWV3b3JrKCk6IGFueSB7XHJcbiAgICBpZiAoIXRoaXMuYWN0aXZlRnJhbWV3b3JrKSB7IHRoaXMuc2V0RnJhbWV3b3JrKCdkZWZhdWx0JywgdHJ1ZSk7IH1cclxuICAgIHJldHVybiB0aGlzLmFjdGl2ZUZyYW1ld29yay5mcmFtZXdvcms7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0RnJhbWV3b3JrTGlzdCgpOntuYW1lOnN0cmluZyx0ZXh0OnN0cmluZ31bXSB7XHJcbiAgICByZXR1cm4gdGhpcy5mcmFtZXdvcmtzLm1hcChmdz0+e1xyXG4gICAgICByZXR1cm4ge25hbWU6ZncubmFtZSx0ZXh0OmZ3LnRleHR9O1xyXG4gICAgfSlcclxuICAgIFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZyYW1ld29ya1dpZGdldHMoKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLmFjdGl2ZUZyYW1ld29yay53aWRnZXRzIHx8IHt9O1xyXG4gIH1cclxuXHJcbiAgXHJcblxyXG4gIHB1YmxpYyBnZXRGcmFtZXdvcmtTdHlsZXNoZWV0cyhsb2FkOiBib29sZWFuID0gdGhpcy5sb2FkRXh0ZXJuYWxBc3NldHMpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gKGxvYWQgJiYgdGhpcy5hY3RpdmVGcmFtZXdvcmsuc3R5bGVzaGVldHMpIHx8IFtdO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldEZyYW1ld29ya1NjcmlwdHMobG9hZDogYm9vbGVhbiA9IHRoaXMubG9hZEV4dGVybmFsQXNzZXRzKTogc3RyaW5nW10ge1xyXG4gICAgcmV0dXJuIChsb2FkICYmIHRoaXMuYWN0aXZlRnJhbWV3b3JrLnNjcmlwdHMpIHx8IFtdO1xyXG4gIH1cclxuXHJcbiAgLy9hcHBsaWVzIHRvIENzc0ZyYW1ld29yayBjbGFzc2VzXHJcbiAgcHVibGljIGdldEZyYW1ld29ya0NvbmZpZyhleGlzdGluZ0ZyYW1ld29yaz86YW55KTogYW55IHtcclxuICAgIGxldCBhY3RGcmFtZXdvcms6RnJhbWV3b3JrJiB7IFtrZXk6IHN0cmluZ106IGFueTsgfT1leGlzdGluZ0ZyYW1ld29ya3x8dGhpcy5hY3RpdmVGcmFtZXdvcms7XHJcbiAgICByZXR1cm4gYWN0RnJhbWV3b3JrLmNvbmZpZztcclxuICB9XHJcblxyXG4gIC8vdGhpcyB3aWxsIGxvYWQgdGhlIGxpc3Qgb2YgYXNzZXRzIHRvIGJlIGxvYWRlZCBhdCBydW50aW1lIGluIGNhc2UgdGhlIGRlcGVuZGVudCBmcmFtZXdvcmtcclxuICAvL3NjcmlwdHMgYW5kIHN0eWxlcyBhcmUgaW5jbHVkZSBsb2NhbGx5IHdpdGggdGhlIHBhcmVudCBhcHBcclxuICBwdWJsaWMgZ2V0RnJhbWV3b3JrQXNzZXRDb25maWcoZXhpc3RpbmdGcmFtZXdvcms/OmFueSx1c2VBc3NldFJlbFBhdGg9dHJ1ZSk6UHJvbWlzZTx7c3R5bGVzaGVldHM6c3RyaW5nW10sc2NyaXB0czpzdHJpbmdbXX0+e1xyXG4gICAgbGV0IGFjdEZyYW1ld29yazpGcmFtZXdvcmsmIHsgW2tleTogc3RyaW5nXTogYW55OyB9PWV4aXN0aW5nRnJhbWV3b3JrfHx0aGlzLmFjdGl2ZUZyYW1ld29yaztcclxuICAgIC8vVE9ETyBtb3ZlIHRoaXMgaW50byBjb25maWdcclxuICAgIGNvbnN0IGFzc2V0Q29uZmlnUGF0aCA9IGBhc3NldHMvJHthY3RGcmFtZXdvcmsubmFtZX0vY3NzZnJhbWV3b3JrYFxyXG4gICAgY29uc3QgYXNzZXRDb25maWdVUkwgPSBgJHthc3NldENvbmZpZ1BhdGh9L2Fzc2V0cy5qc29uYDtcclxuICAgIGxldCBzdWJzPXRoaXMuaHR0cFxyXG4gICAgICAuZ2V0KGFzc2V0Q29uZmlnVVJMLCB7IHJlc3BvbnNlVHlwZTogJ3RleHQnIH0pXHJcbiAgICAgIC8vLnN1YnNjcmliZShhc3NldENvbmZpZyA9PiB7XHJcbiAgICAgIC8vICBhc3NldENvbmZpZ1xyXG4gICAgICAvL30pXHJcbiAgICAgIFxyXG4gICAgICByZXR1cm4gbGFzdFZhbHVlRnJvbShzdWJzKS50aGVuKGFzc2V0Q2ZnVGV4dD0+e1xyXG4gICAgICAgIGxldCBhc3NldENmZz1KU09OLnBhcnNlKGFzc2V0Q2ZnVGV4dCk7XHJcbiAgICAgICAgaWYodXNlQXNzZXRSZWxQYXRoKXtcclxuICAgICAgICAgIGFzc2V0Q2ZnLnN0eWxlc2hlZXRzPWFzc2V0Q2ZnLnN0eWxlc2hlZXRzLm1hcChzdHlsZUxpbms9PntcclxuICAgICAgICAgICAgLy9pZ25vcmUgcmVsYXRpdmUgcGF0aCBpZiB1cmwgc3RhcnRzIHdpdGgga25vd24gcHJvdG9jb2wgb3IgLy9cclxuICAgICAgICAgICAgbGV0IG5vblJlbFByZWZpeGVzPVtcIi9cIixcIi8vXCIsXCJodHRwOlwiLFwiaHR0cHM6XCJdOy8vXCIvL1wiIGxpc3QgZm9yIGNvbXBsZXRlbmVzcyBcclxuICAgICAgICAgICAgbGV0IGlzTm9uUmVsPWZhbHNlO1xyXG4gICAgICAgICAgICBub25SZWxQcmVmaXhlcy5mb3JFYWNoKHByZWZpeD0+e1xyXG4gICAgICAgICAgICAgIGlzTm9uUmVsPWlzTm9uUmVsfHxzdHlsZUxpbmsuaW5kZXhPZihwcmVmaXgpPT0wO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICBpZihpc05vblJlbCl7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHN0eWxlTGluaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gYCR7YXNzZXRDb25maWdQYXRofS8ke3N0eWxlTGlua31gO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgICAgIGFzc2V0Q2ZnLnNjcmlwdHM9YXNzZXRDZmcuc2NyaXB0cy5tYXAoc2NyaXB0TGluaz0+e1xyXG4gICAgICAgICAgICByZXR1cm4gYCR7YXNzZXRDb25maWdQYXRofS8ke3NjcmlwdExpbmt9YDtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgfSAgIFxyXG4gICAgICAgIHJldHVybiBhc3NldENmZ1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8vYXBwbGllcyB0byBDc3NGcmFtZXdvcmsgY2xhc3Nlc1xyXG4gIHB1YmxpYyBnZXRGcmFtZXdvcmtUaGVtZXMoKTp7bmFtZTpzdHJpbmcsdGV4dDpzdHJpbmd9W10ge1xyXG4gICAgbGV0IGNzc2Z3Q29uZmlnPXRoaXMuZ2V0RnJhbWV3b3JrQ29uZmlnKCk7XHJcbiAgICBsZXQgdGhlbWVzO1xyXG4gICAgaWYoY3NzZndDb25maWcpe1xyXG4gICAgICB0aGVtZXM9Y3NzZndDb25maWc/LndpZGdldHN0eWxlcz8uX190aGVtZXNfX3x8W11cclxuICAgIH1cclxuICAgIHJldHVybiB0aGVtZXNcclxuICB9XHJcblxyXG4gIC8vYXBwbGllcyB0byBDc3NGcmFtZXdvcmsgY2xhc3Nlc1xyXG4gIHB1YmxpYyByZXF1ZXN0VGhlbWVDaGFuZ2UobmFtZTpzdHJpbmcsdmFsaWRhdGVUaGVtZUV4aXN0czpib29sZWFuPWZhbHNlLGV4aXN0aW5nRnJhbWV3b3JrPzphbnkpe1xyXG4gICAgbGV0IGFjdEZyYW1ld29yazpGcmFtZXdvcmsmIHsgW2tleTogc3RyaW5nXTogYW55OyB9PWV4aXN0aW5nRnJhbWV3b3JrfHx0aGlzLmFjdGl2ZUZyYW1ld29yaztcclxuICAgIGlmKGFjdEZyYW1ld29yay5yZXF1ZXN0VGhlbWVDaGFuZ2Upe1xyXG4gICAgICBpZih2YWxpZGF0ZVRoZW1lRXhpc3RzKXsgIFxyXG4gICAgICAgIGxldCB0aGVtZXM9dGhpcy5nZXRGcmFtZXdvcmtUaGVtZXMoKTtcclxuICAgICAgICBsZXQgZm91bmRUaGVtZXM9dGhlbWVzLmZpbHRlcih0aG09PntyZXR1cm4gdGhtLm5hbWU9PW5hbWV9KTtcclxuICAgICAgICBpZighZm91bmRUaGVtZXN8fCBmb3VuZFRoZW1lcy5sZW5ndGg9PTApe1xyXG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBhY3RGcmFtZXdvcmsucmVxdWVzdFRoZW1lQ2hhbmdlKG5hbWUpO1xyXG4gICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbiAgLy9hcHBsaWVzIHRvIENzc0ZyYW1ld29yayBjbGFzc2VzXHJcbiAgcHVibGljIGdldEFjdGl2ZVRoZW1lKGV4aXN0aW5nRnJhbWV3b3JrPzphbnkpOntuYW1lOnN0cmluZyx0ZXh0OnN0cmluZ317XHJcbiAgICBsZXQgYWN0RnJhbWV3b3JrOkZyYW1ld29yayYgeyBba2V5OiBzdHJpbmddOiBhbnk7IH09ZXhpc3RpbmdGcmFtZXdvcmt8fHRoaXMuYWN0aXZlRnJhbWV3b3JrO1xyXG4gICAgaWYoYWN0RnJhbWV3b3JrLmdldEFjdGl2ZVRoZW1lKXtcclxuICAgICAgcmV0dXJuIGFjdEZyYW1ld29yay5nZXRBY3RpdmVUaGVtZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy9hcHBsaWVzIHRvIENzc0ZyYW1ld29yayBjbGFzc2VzXHJcbiAgcHVibGljIHJlZ2lzdGVyVGhlbWUobmV3VGhlbWU6e25hbWU6c3RyaW5nLHRleHQ6c3RyaW5nfSxleGlzdGluZ0ZyYW1ld29yaz86YW55KTpib29sZWFue1xyXG4gICAgbGV0IGFjdEZyYW1ld29yazpGcmFtZXdvcmsmIHsgW2tleTogc3RyaW5nXTogYW55OyB9PWV4aXN0aW5nRnJhbWV3b3JrfHx0aGlzLmFjdGl2ZUZyYW1ld29yaztcclxuICAgIGlmKGFjdEZyYW1ld29yay5yZWdpc3RlclRoZW1lKXtcclxuICAgICAgcmV0dXJuIGFjdEZyYW1ld29yay5yZWdpc3RlclRoZW1lKG5ld1RoZW1lKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gICAgLy9hcHBsaWVzIHRvIENzc0ZyYW1ld29yayBjbGFzc2VzXHJcbiAgICBwdWJsaWMgdW5yZWdpc3RlclRoZW1lKG5hbWU6c3RyaW5nLGV4aXN0aW5nRnJhbWV3b3JrPzphbnkpOmJvb2xlYW57XHJcbiAgICAgIGxldCBhY3RGcmFtZXdvcms6RnJhbWV3b3JrJiB7IFtrZXk6IHN0cmluZ106IGFueTsgfT1leGlzdGluZ0ZyYW1ld29ya3x8dGhpcy5hY3RpdmVGcmFtZXdvcms7XHJcbiAgICAgIGlmKGFjdEZyYW1ld29yay5yZWdpc3RlclRoZW1lKXtcclxuICAgICAgICByZXR1cm4gYWN0RnJhbWV3b3JrLnVucmVnaXN0ZXJUaGVtZShuYW1lKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -1,15 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- export class Framework {
4
- constructor() {
5
- this.widgets = {};
6
- this.stylesheets = [];
7
- this.scripts = [];
8
- }
9
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: Framework, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
10
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: Framework }); }
11
- }
12
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: Framework, decorators: [{
13
- type: Injectable
14
- }] });
15
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWV3b3JrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZm9ybXdvcmtzLWNvcmUvc3JjL2xpYi9mcmFtZXdvcmstbGlicmFyeS9mcmFtZXdvcmsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFHM0MsTUFBTSxPQUFPLFNBQVM7SUFEdEI7UUFLRSxZQUFPLEdBQTRCLEVBQUUsQ0FBQztRQUN0QyxnQkFBVyxHQUFjLEVBQUUsQ0FBQztRQUM1QixZQUFPLEdBQWMsRUFBRSxDQUFDO0tBQ3pCOytHQVBZLFNBQVM7bUhBQVQsU0FBUzs7NEZBQVQsU0FBUztrQkFEckIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEZyYW1ld29yayB7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIHRleHQ6c3RyaW5nO1xyXG4gIGZyYW1ld29yazogYW55O1xyXG4gIHdpZGdldHM/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9ID0ge307XHJcbiAgc3R5bGVzaGVldHM/OiBzdHJpbmdbXSA9IFtdO1xyXG4gIHNjcmlwdHM/OiBzdHJpbmdbXSA9IFtdO1xyXG59XHJcbiJdfQ==
@@ -1,17 +0,0 @@
1
- import { Component, input } from '@angular/core';
2
- import * as i0 from "@angular/core";
3
- import * as i1 from "../widget-library/select-widget.component";
4
- export class NoFrameworkComponent {
5
- constructor() {
6
- this.layoutNode = input(undefined);
7
- this.layoutIndex = input(undefined);
8
- this.dataIndex = input(undefined);
9
- }
10
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NoFrameworkComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
11
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: NoFrameworkComponent, selector: "no-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 } }, ngImport: i0, template: "<select-widget-widget [dataIndex]=\"dataIndex()\" [layoutIndex]=\"layoutIndex()\" [layoutNode]=\"layoutNode()\">\r\n</select-widget-widget>", dependencies: [{ kind: "component", type: i1.SelectWidgetComponent, selector: "select-widget-widget", inputs: ["layoutNode", "layoutIndex", "dataIndex"] }] }); }
12
- }
13
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NoFrameworkComponent, decorators: [{
14
- type: Component,
15
- args: [{ selector: 'no-framework', template: "<select-widget-widget [dataIndex]=\"dataIndex()\" [layoutIndex]=\"layoutIndex()\" [layoutNode]=\"layoutNode()\">\r\n</select-widget-widget>" }]
16
- }] });
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tZnJhbWV3b3JrLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWZvcm13b3Jrcy1jb3JlL3NyYy9saWIvZnJhbWV3b3JrLWxpYnJhcnkvbm8tZnJhbWV3b3JrLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWZvcm13b3Jrcy1jb3JlL3NyYy9saWIvZnJhbWV3b3JrLWxpYnJhcnkvbm8tZnJhbWV3b3JrLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFNakQsTUFBTSxPQUFPLG9CQUFvQjtJQUpqQztRQUtXLGVBQVUsR0FBRyxLQUFLLENBQU0sU0FBUyxDQUFDLENBQUM7UUFDbkMsZ0JBQVcsR0FBRyxLQUFLLENBQVcsU0FBUyxDQUFDLENBQUM7UUFDekMsY0FBUyxHQUFHLEtBQUssQ0FBVyxTQUFTLENBQUMsQ0FBQztLQUNqRDsrR0FKWSxvQkFBb0I7bUdBQXBCLG9CQUFvQixxZENOakMsNklBQ3VCOzs0RkRLVixvQkFBb0I7a0JBSmhDLFNBQVM7K0JBQ0UsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbm8tZnJhbWV3b3JrJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbm8tZnJhbWV3b3JrLmNvbXBvbmVudC5odG1sJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIE5vRnJhbWV3b3JrQ29tcG9uZW50IHtcclxuICByZWFkb25seSBsYXlvdXROb2RlID0gaW5wdXQ8YW55Pih1bmRlZmluZWQpO1xyXG4gIHJlYWRvbmx5IGxheW91dEluZGV4ID0gaW5wdXQ8bnVtYmVyW10+KHVuZGVmaW5lZCk7XHJcbiAgcmVhZG9ubHkgZGF0YUluZGV4ID0gaW5wdXQ8bnVtYmVyW10+KHVuZGVmaW5lZCk7XHJcbn1cclxuIiwiPHNlbGVjdC13aWRnZXQtd2lkZ2V0IFtkYXRhSW5kZXhdPVwiZGF0YUluZGV4KClcIiBbbGF5b3V0SW5kZXhdPVwibGF5b3V0SW5kZXgoKVwiIFtsYXlvdXROb2RlXT1cImxheW91dE5vZGUoKVwiPlxyXG48L3NlbGVjdC13aWRnZXQtd2lkZ2V0PiJdfQ==
@@ -1,27 +0,0 @@
1
- import { CommonModule } from '@angular/common';
2
- import { Framework } from './framework';
3
- import { NgModule } from '@angular/core';
4
- import { NoFramework } from './no.framework';
5
- import { NoFrameworkComponent } from './no-framework.component';
6
- import { WidgetLibraryModule } from '../widget-library/widget-library.module';
7
- import * as i0 from "@angular/core";
8
- // No framework - plain HTML controls (styles from form layout only)
9
- export class NoFrameworkModule {
10
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NoFrameworkModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
11
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: NoFrameworkModule, declarations: [NoFrameworkComponent], imports: [CommonModule, WidgetLibraryModule], exports: [NoFrameworkComponent] }); }
12
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NoFrameworkModule, providers: [
13
- { provide: Framework, useClass: NoFramework, multi: true }
14
- ], imports: [CommonModule, WidgetLibraryModule] }); }
15
- }
16
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NoFrameworkModule, decorators: [{
17
- type: NgModule,
18
- args: [{
19
- imports: [CommonModule, WidgetLibraryModule],
20
- declarations: [NoFrameworkComponent],
21
- exports: [NoFrameworkComponent],
22
- providers: [
23
- { provide: Framework, useClass: NoFramework, multi: true }
24
- ]
25
- }]
26
- }] });
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8tZnJhbWV3b3JrLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWZvcm13b3Jrcy1jb3JlL3NyYy9saWIvZnJhbWV3b3JrLWxpYnJhcnkvbm8tZnJhbWV3b3JrLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUN4QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQzs7QUFFOUUsb0VBQW9FO0FBVXBFLE1BQU0sT0FBTyxpQkFBaUI7K0dBQWpCLGlCQUFpQjtnSEFBakIsaUJBQWlCLGlCQU5YLG9CQUFvQixhQUR6QixZQUFZLEVBQUUsbUJBQW1CLGFBRWpDLG9CQUFvQjtnSEFLckIsaUJBQWlCLGFBSmY7WUFDUCxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO1NBQzdELFlBTFMsWUFBWSxFQUFFLG1CQUFtQjs7NEZBT2xDLGlCQUFpQjtrQkFSN0IsUUFBUTttQkFBQztvQkFDTixPQUFPLEVBQUUsQ0FBQyxZQUFZLEVBQUUsbUJBQW1CLENBQUM7b0JBQzVDLFlBQVksRUFBRSxDQUFDLG9CQUFvQixDQUFDO29CQUNwQyxPQUFPLEVBQUUsQ0FBQyxvQkFBb0IsQ0FBQztvQkFDL0IsU0FBUyxFQUFFO3dCQUNQLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7cUJBQzdEO2lCQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgRnJhbWV3b3JrIH0gZnJvbSAnLi9mcmFtZXdvcmsnO1xyXG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBOb0ZyYW1ld29yayB9IGZyb20gJy4vbm8uZnJhbWV3b3JrJztcclxuaW1wb3J0IHsgTm9GcmFtZXdvcmtDb21wb25lbnQgfSBmcm9tICcuL25vLWZyYW1ld29yay5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBXaWRnZXRMaWJyYXJ5TW9kdWxlIH0gZnJvbSAnLi4vd2lkZ2V0LWxpYnJhcnkvd2lkZ2V0LWxpYnJhcnkubW9kdWxlJztcclxuXHJcbi8vIE5vIGZyYW1ld29yayAtIHBsYWluIEhUTUwgY29udHJvbHMgKHN0eWxlcyBmcm9tIGZvcm0gbGF5b3V0IG9ubHkpXHJcblxyXG5ATmdNb2R1bGUoe1xyXG4gICAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgV2lkZ2V0TGlicmFyeU1vZHVsZV0sXHJcbiAgICBkZWNsYXJhdGlvbnM6IFtOb0ZyYW1ld29ya0NvbXBvbmVudF0sXHJcbiAgICBleHBvcnRzOiBbTm9GcmFtZXdvcmtDb21wb25lbnRdLFxyXG4gICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAgeyBwcm92aWRlOiBGcmFtZXdvcmssIHVzZUNsYXNzOiBOb0ZyYW1ld29yaywgbXVsdGk6IHRydWUgfVxyXG4gICAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTm9GcmFtZXdvcmtNb2R1bGUgeyB9XHJcbiJdfQ==
@@ -1,19 +0,0 @@
1
- import { Injectable } from '@angular/core';
2
- import { Framework } from './framework';
3
- import { NoFrameworkComponent } from './no-framework.component';
4
- import * as i0 from "@angular/core";
5
- // No framework - plain HTML controls (styles from form layout only)
6
- export class NoFramework extends Framework {
7
- constructor() {
8
- super(...arguments);
9
- this.name = 'no-framework';
10
- this.text = 'None (plain HTML)';
11
- this.framework = NoFrameworkComponent;
12
- }
13
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NoFramework, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
14
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NoFramework }); }
15
- }
16
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: NoFramework, decorators: [{
17
- type: Injectable
18
- }] });
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm8uZnJhbWV3b3JrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctZm9ybXdvcmtzLWNvcmUvc3JjL2xpYi9mcmFtZXdvcmstbGlicmFyeS9uby5mcmFtZXdvcmsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDBCQUEwQixDQUFDOztBQUNoRSxvRUFBb0U7QUFHcEUsTUFBTSxPQUFPLFdBQVksU0FBUSxTQUFTO0lBRDFDOztRQUVFLFNBQUksR0FBRyxjQUFjLENBQUM7UUFDdEIsU0FBSSxHQUFFLG1CQUFtQixDQUFDO1FBQzFCLGNBQVMsR0FBRyxvQkFBb0IsQ0FBQztLQUNsQzsrR0FKWSxXQUFXO21IQUFYLFdBQVc7OzRGQUFYLFdBQVc7a0JBRHZCLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZyYW1ld29yayB9IGZyb20gJy4vZnJhbWV3b3JrJztcclxuaW1wb3J0IHsgTm9GcmFtZXdvcmtDb21wb25lbnQgfSBmcm9tICcuL25vLWZyYW1ld29yay5jb21wb25lbnQnO1xyXG4vLyBObyBmcmFtZXdvcmsgLSBwbGFpbiBIVE1MIGNvbnRyb2xzIChzdHlsZXMgZnJvbSBmb3JtIGxheW91dCBvbmx5KVxyXG5cclxuQEluamVjdGFibGUoKVxyXG5leHBvcnQgY2xhc3MgTm9GcmFtZXdvcmsgZXh0ZW5kcyBGcmFtZXdvcmsge1xyXG4gIG5hbWUgPSAnbm8tZnJhbWV3b3JrJztcclxuICB0ZXh0ID0nTm9uZSAocGxhaW4gSFRNTCknO1xyXG4gIGZyYW1ld29yayA9IE5vRnJhbWV3b3JrQ29tcG9uZW50O1xyXG59XHJcbiJdfQ==