@sitecore-jss/sitecore-jss-angular 18.0.2-canary.0 → 18.0.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.
- package/dist/bundles/sitecore-jss-sitecore-jss-angular.umd.js +1421 -1421
- package/dist/components/date.directive.d.ts +17 -17
- package/dist/components/file.directive.d.ts +14 -14
- package/dist/components/generic-link.directive.d.ts +14 -14
- package/dist/components/image.directive.d.ts +28 -28
- package/dist/components/link.directive.d.ts +18 -18
- package/dist/components/missing-component.component.d.ts +3 -3
- package/dist/components/placeholder-loading.directive.d.ts +5 -5
- package/dist/components/placeholder.component.d.ts +45 -45
- package/dist/components/placeholder.token.d.ts +30 -30
- package/dist/components/raw.component.d.ts +9 -9
- package/dist/components/render-component.component.d.ts +29 -29
- package/dist/components/render-each.directive.d.ts +5 -5
- package/dist/components/render-empty.directive.d.ts +5 -5
- package/dist/components/rendering-field.d.ts +20 -20
- package/dist/components/rendering.d.ts +5 -5
- package/dist/components/rich-text.directive.d.ts +12 -12
- package/dist/components/router-link.directive.d.ts +12 -12
- package/dist/components/text.directive.d.ts +13 -13
- package/dist/esm2015/components/date.directive.js +52 -52
- package/dist/esm2015/components/file.directive.js +42 -42
- package/dist/esm2015/components/generic-link.directive.js +57 -57
- package/dist/esm2015/components/image.directive.js +122 -122
- package/dist/esm2015/components/link.directive.js +98 -98
- package/dist/esm2015/components/missing-component.component.js +12 -12
- package/dist/esm2015/components/placeholder-loading.directive.js +14 -14
- package/dist/esm2015/components/placeholder.component.js +191 -191
- package/dist/esm2015/components/placeholder.token.js +20 -20
- package/dist/esm2015/components/raw.component.js +36 -36
- package/dist/esm2015/components/render-component.component.js +88 -88
- package/dist/esm2015/components/render-each.directive.js +14 -14
- package/dist/esm2015/components/render-empty.directive.js +14 -14
- package/dist/esm2015/components/rendering-field.js +1 -1
- package/dist/esm2015/components/rendering.js +7 -7
- package/dist/esm2015/components/rich-text.directive.js +40 -40
- package/dist/esm2015/components/router-link.directive.js +43 -43
- package/dist/esm2015/components/text.directive.js +53 -53
- package/dist/esm2015/jss-component-factory.service.js +86 -86
- package/dist/esm2015/layout-service-error.js +2 -2
- package/dist/esm2015/layout.service.js +28 -28
- package/dist/esm2015/lib.module.js +111 -111
- package/dist/esm2015/public_api.js +16 -16
- package/dist/esm2015/sitecore-jss-sitecore-jss-angular.js +12 -12
- package/dist/esm2015/utils.js +37 -37
- package/dist/fesm2015/sitecore-jss-sitecore-jss-angular.js +1079 -1079
- package/dist/jss-component-factory.service.d.ts +21 -21
- package/dist/layout-service-error.d.ts +8 -8
- package/dist/layout.service.d.ts +8 -8
- package/dist/lib.module.d.ts +24 -24
- package/dist/package.json +2 -2
- package/dist/public_api.d.ts +17 -17
- package/dist/sitecore-jss-sitecore-jss-angular.d.ts +12 -12
- package/dist/utils.d.ts +10 -10
- package/package.json +3 -3
|
@@ -1,201 +1,201 @@
|
|
|
1
|
-
/* eslint-disable @angular-eslint/no-conflicting-lifecycle */
|
|
2
|
-
import { ChangeDetectorRef, Component, ComponentFactoryResolver, ContentChild, ElementRef, EventEmitter, Inject, Input, KeyValueDiffers, Output, Renderer2, Type, ViewChild, ViewContainerRef, } from '@angular/core';
|
|
3
|
-
import { Observable } from 'rxjs';
|
|
4
|
-
import { takeWhile } from 'rxjs/operators';
|
|
5
|
-
import { JssComponentFactoryService, } from '../jss-component-factory.service';
|
|
6
|
-
import { PlaceholderLoadingDirective } from './placeholder-loading.directive';
|
|
7
|
-
import { PLACEHOLDER_MISSING_COMPONENT_COMPONENT } from './placeholder.token';
|
|
8
|
-
import { RenderEachDirective } from './render-each.directive';
|
|
9
|
-
import { RenderEmptyDirective } from './render-empty.directive';
|
|
10
|
-
import { isRawRendering } from './rendering';
|
|
11
|
-
/**
|
|
12
|
-
* @param {ComponentRendering} rendering
|
|
13
|
-
* @param {string} name
|
|
14
|
-
*/
|
|
15
|
-
function getPlaceholder(rendering, name) {
|
|
16
|
-
if (rendering && rendering.placeholders && Object.keys(rendering.placeholders).length > 0) {
|
|
17
|
-
return rendering.placeholders[name];
|
|
18
|
-
}
|
|
19
|
-
return null;
|
|
20
|
-
}
|
|
21
|
-
export class PlaceholderComponent {
|
|
22
|
-
constructor(componentFactoryResolver, differs, componentFactory, changeDetectorRef, elementRef, renderer, missingComponentComponent) {
|
|
23
|
-
this.componentFactoryResolver = componentFactoryResolver;
|
|
24
|
-
this.differs = differs;
|
|
25
|
-
this.componentFactory = componentFactory;
|
|
26
|
-
this.changeDetectorRef = changeDetectorRef;
|
|
27
|
-
this.elementRef = elementRef;
|
|
28
|
-
this.renderer = renderer;
|
|
29
|
-
this.missingComponentComponent = missingComponentComponent;
|
|
30
|
-
this._componentInstances = [];
|
|
31
|
-
this.destroyed = false;
|
|
32
|
-
this.parentStyleAttribute = '';
|
|
33
|
-
this.isLoading = true;
|
|
34
|
-
this.loaded = new EventEmitter();
|
|
35
|
-
}
|
|
36
|
-
set inputs(value) {
|
|
37
|
-
this._inputs = value;
|
|
38
|
-
if (!this._differ && value) {
|
|
39
|
-
this._differ = this.differs.find(value).create();
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
ngOnInit() {
|
|
43
|
-
// just to ensure the element exists
|
|
44
|
-
const elem = this.elementRef.nativeElement;
|
|
45
|
-
if (elem) {
|
|
46
|
-
const attributes = elem.attributes;
|
|
47
|
-
for (let i = 0; i < attributes.length; i++) {
|
|
48
|
-
const attr = attributes.item(i);
|
|
49
|
-
if (attr && attr.name.indexOf('_ngcontent') !== -1) {
|
|
50
|
-
this.parentStyleAttribute = attr.name;
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
ngOnDestroy() {
|
|
56
|
-
this.destroyed = true;
|
|
57
|
-
this._componentInstances = [];
|
|
58
|
-
}
|
|
59
|
-
ngOnChanges(changes) {
|
|
60
|
-
if (changes.rendering || changes.renderings) {
|
|
61
|
-
this._render();
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
ngDoCheck() {
|
|
65
|
-
if (!this._differ || !this._inputs || this._componentInstances.length === 0) {
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
const changes = this._differ.diff(this._inputs);
|
|
69
|
-
if (!changes) {
|
|
70
|
-
return;
|
|
71
|
-
}
|
|
72
|
-
const updates = {};
|
|
73
|
-
changes.forEachRemovedItem((change) => (updates[change.key] = null));
|
|
74
|
-
changes.forEachAddedItem((change) => (updates[change.key] = change.currentValue));
|
|
75
|
-
changes.forEachChangedItem((change) => (updates[change.key] = change.currentValue));
|
|
76
|
-
this._componentInstances.forEach((componentInstance) => this._setComponentInputs(componentInstance, updates));
|
|
77
|
-
}
|
|
78
|
-
_setComponentInputs(componentInstance, inputs) {
|
|
79
|
-
Object.entries(inputs).forEach(([input, inputValue]) => (componentInstance[input] = inputValue));
|
|
80
|
-
}
|
|
81
|
-
_subscribeComponentOutputs(componentInstance, outputs) {
|
|
82
|
-
Object.keys(outputs)
|
|
83
|
-
.filter((output) => componentInstance[output] && componentInstance[output] instanceof Observable)
|
|
84
|
-
.forEach((output) => componentInstance[output]
|
|
85
|
-
.pipe(takeWhile(() => !this.destroyed))
|
|
86
|
-
.subscribe(outputs[output]));
|
|
87
|
-
}
|
|
88
|
-
_render() {
|
|
89
|
-
this._componentInstances = [];
|
|
90
|
-
this.view.clear();
|
|
91
|
-
if (!this.rendering && !this.renderings) {
|
|
92
|
-
return;
|
|
93
|
-
}
|
|
94
|
-
if (!this.name && !this.renderings) {
|
|
95
|
-
console.warn('Placeholder name was not specified, and explicit renderings array was not passed. Placeholder requires either name and rendering, or renderings.');
|
|
96
|
-
this.isLoading = false;
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
const placeholder = this.renderings || getPlaceholder(this.rendering, this.name || '');
|
|
100
|
-
if (!placeholder) {
|
|
101
|
-
console.warn(`Placeholder '${this.name}' was not found in the current rendering data`, JSON.stringify(this.rendering, null, 2));
|
|
102
|
-
this.isLoading = false;
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
// if the placeholder is empty (contains only raw renderings), then we may need to use the empty template if it's defined
|
|
106
|
-
const placeholderIsEmpty = placeholder.every((rendering) => isRawRendering(rendering));
|
|
107
|
-
if (this.renderEmptyTemplate && placeholderIsEmpty) {
|
|
108
|
-
this.view.createEmbeddedView(this.renderEmptyTemplate.templateRef, {
|
|
109
|
-
renderings: placeholder,
|
|
110
|
-
});
|
|
111
|
-
this.isLoading = false;
|
|
112
|
-
}
|
|
113
|
-
else {
|
|
114
|
-
this.componentFactory
|
|
115
|
-
.getComponents(placeholder)
|
|
116
|
-
.then((components) => components.forEach((rendering, index) => {
|
|
117
|
-
if (this.renderEachTemplate && !isRawRendering(rendering.componentDefinition)) {
|
|
118
|
-
this._renderTemplatedComponent(rendering.componentDefinition, index);
|
|
119
|
-
}
|
|
120
|
-
else {
|
|
121
|
-
this._renderEmbeddedComponent(rendering, index);
|
|
122
|
-
}
|
|
123
|
-
this.isLoading = false;
|
|
124
|
-
}))
|
|
125
|
-
.then(() => {
|
|
126
|
-
this.changeDetectorRef.markForCheck();
|
|
127
|
-
this.loaded.emit(this.name);
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
_renderTemplatedComponent(rendering, index) {
|
|
132
|
-
// the render-each template takes care of all component mapping etc
|
|
133
|
-
// generally using <sc-render-component> which is about like _renderEmbeddedComponent()
|
|
134
|
-
// as a separate component
|
|
135
|
-
this.view.createEmbeddedView(this.renderEachTemplate.templateRef, {
|
|
136
|
-
rendering,
|
|
137
|
-
index,
|
|
138
|
-
});
|
|
139
|
-
}
|
|
140
|
-
_renderEmbeddedComponent(rendering, index) {
|
|
141
|
-
if (!rendering.componentImplementation) {
|
|
142
|
-
const componentName = rendering.componentDefinition.componentName;
|
|
1
|
+
/* eslint-disable @angular-eslint/no-conflicting-lifecycle */
|
|
2
|
+
import { ChangeDetectorRef, Component, ComponentFactoryResolver, ContentChild, ElementRef, EventEmitter, Inject, Input, KeyValueDiffers, Output, Renderer2, Type, ViewChild, ViewContainerRef, } from '@angular/core';
|
|
3
|
+
import { Observable } from 'rxjs';
|
|
4
|
+
import { takeWhile } from 'rxjs/operators';
|
|
5
|
+
import { JssComponentFactoryService, } from '../jss-component-factory.service';
|
|
6
|
+
import { PlaceholderLoadingDirective } from './placeholder-loading.directive';
|
|
7
|
+
import { PLACEHOLDER_MISSING_COMPONENT_COMPONENT } from './placeholder.token';
|
|
8
|
+
import { RenderEachDirective } from './render-each.directive';
|
|
9
|
+
import { RenderEmptyDirective } from './render-empty.directive';
|
|
10
|
+
import { isRawRendering } from './rendering';
|
|
11
|
+
/**
|
|
12
|
+
* @param {ComponentRendering} rendering
|
|
13
|
+
* @param {string} name
|
|
14
|
+
*/
|
|
15
|
+
function getPlaceholder(rendering, name) {
|
|
16
|
+
if (rendering && rendering.placeholders && Object.keys(rendering.placeholders).length > 0) {
|
|
17
|
+
return rendering.placeholders[name];
|
|
18
|
+
}
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
export class PlaceholderComponent {
|
|
22
|
+
constructor(componentFactoryResolver, differs, componentFactory, changeDetectorRef, elementRef, renderer, missingComponentComponent) {
|
|
23
|
+
this.componentFactoryResolver = componentFactoryResolver;
|
|
24
|
+
this.differs = differs;
|
|
25
|
+
this.componentFactory = componentFactory;
|
|
26
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
27
|
+
this.elementRef = elementRef;
|
|
28
|
+
this.renderer = renderer;
|
|
29
|
+
this.missingComponentComponent = missingComponentComponent;
|
|
30
|
+
this._componentInstances = [];
|
|
31
|
+
this.destroyed = false;
|
|
32
|
+
this.parentStyleAttribute = '';
|
|
33
|
+
this.isLoading = true;
|
|
34
|
+
this.loaded = new EventEmitter();
|
|
35
|
+
}
|
|
36
|
+
set inputs(value) {
|
|
37
|
+
this._inputs = value;
|
|
38
|
+
if (!this._differ && value) {
|
|
39
|
+
this._differ = this.differs.find(value).create();
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
ngOnInit() {
|
|
43
|
+
// just to ensure the element exists
|
|
44
|
+
const elem = this.elementRef.nativeElement;
|
|
45
|
+
if (elem) {
|
|
46
|
+
const attributes = elem.attributes;
|
|
47
|
+
for (let i = 0; i < attributes.length; i++) {
|
|
48
|
+
const attr = attributes.item(i);
|
|
49
|
+
if (attr && attr.name.indexOf('_ngcontent') !== -1) {
|
|
50
|
+
this.parentStyleAttribute = attr.name;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
ngOnDestroy() {
|
|
56
|
+
this.destroyed = true;
|
|
57
|
+
this._componentInstances = [];
|
|
58
|
+
}
|
|
59
|
+
ngOnChanges(changes) {
|
|
60
|
+
if (changes.rendering || changes.renderings) {
|
|
61
|
+
this._render();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
ngDoCheck() {
|
|
65
|
+
if (!this._differ || !this._inputs || this._componentInstances.length === 0) {
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const changes = this._differ.diff(this._inputs);
|
|
69
|
+
if (!changes) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const updates = {};
|
|
73
|
+
changes.forEachRemovedItem((change) => (updates[change.key] = null));
|
|
74
|
+
changes.forEachAddedItem((change) => (updates[change.key] = change.currentValue));
|
|
75
|
+
changes.forEachChangedItem((change) => (updates[change.key] = change.currentValue));
|
|
76
|
+
this._componentInstances.forEach((componentInstance) => this._setComponentInputs(componentInstance, updates));
|
|
77
|
+
}
|
|
78
|
+
_setComponentInputs(componentInstance, inputs) {
|
|
79
|
+
Object.entries(inputs).forEach(([input, inputValue]) => (componentInstance[input] = inputValue));
|
|
80
|
+
}
|
|
81
|
+
_subscribeComponentOutputs(componentInstance, outputs) {
|
|
82
|
+
Object.keys(outputs)
|
|
83
|
+
.filter((output) => componentInstance[output] && componentInstance[output] instanceof Observable)
|
|
84
|
+
.forEach((output) => componentInstance[output]
|
|
85
|
+
.pipe(takeWhile(() => !this.destroyed))
|
|
86
|
+
.subscribe(outputs[output]));
|
|
87
|
+
}
|
|
88
|
+
_render() {
|
|
89
|
+
this._componentInstances = [];
|
|
90
|
+
this.view.clear();
|
|
91
|
+
if (!this.rendering && !this.renderings) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
if (!this.name && !this.renderings) {
|
|
95
|
+
console.warn('Placeholder name was not specified, and explicit renderings array was not passed. Placeholder requires either name and rendering, or renderings.');
|
|
96
|
+
this.isLoading = false;
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
const placeholder = this.renderings || getPlaceholder(this.rendering, this.name || '');
|
|
100
|
+
if (!placeholder) {
|
|
101
|
+
console.warn(`Placeholder '${this.name}' was not found in the current rendering data`, JSON.stringify(this.rendering, null, 2));
|
|
102
|
+
this.isLoading = false;
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
// if the placeholder is empty (contains only raw renderings), then we may need to use the empty template if it's defined
|
|
106
|
+
const placeholderIsEmpty = placeholder.every((rendering) => isRawRendering(rendering));
|
|
107
|
+
if (this.renderEmptyTemplate && placeholderIsEmpty) {
|
|
108
|
+
this.view.createEmbeddedView(this.renderEmptyTemplate.templateRef, {
|
|
109
|
+
renderings: placeholder,
|
|
110
|
+
});
|
|
111
|
+
this.isLoading = false;
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
this.componentFactory
|
|
115
|
+
.getComponents(placeholder)
|
|
116
|
+
.then((components) => components.forEach((rendering, index) => {
|
|
117
|
+
if (this.renderEachTemplate && !isRawRendering(rendering.componentDefinition)) {
|
|
118
|
+
this._renderTemplatedComponent(rendering.componentDefinition, index);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
this._renderEmbeddedComponent(rendering, index);
|
|
122
|
+
}
|
|
123
|
+
this.isLoading = false;
|
|
124
|
+
}))
|
|
125
|
+
.then(() => {
|
|
126
|
+
this.changeDetectorRef.markForCheck();
|
|
127
|
+
this.loaded.emit(this.name);
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
_renderTemplatedComponent(rendering, index) {
|
|
132
|
+
// the render-each template takes care of all component mapping etc
|
|
133
|
+
// generally using <sc-render-component> which is about like _renderEmbeddedComponent()
|
|
134
|
+
// as a separate component
|
|
135
|
+
this.view.createEmbeddedView(this.renderEachTemplate.templateRef, {
|
|
136
|
+
rendering,
|
|
137
|
+
index,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
_renderEmbeddedComponent(rendering, index) {
|
|
141
|
+
if (!rendering.componentImplementation) {
|
|
142
|
+
const componentName = rendering.componentDefinition.componentName;
|
|
143
143
|
console.error(`Placeholder ${this.name} contains unknown component ${componentName}.`, `Ensure component is mapped, like:
|
|
144
144
|
JssModule.withComponents([
|
|
145
145
|
{ name: '${componentName}', type: ${componentName}Component }
|
|
146
|
-
])`);
|
|
147
|
-
rendering.componentImplementation = this.missingComponentComponent;
|
|
148
|
-
}
|
|
149
|
-
const componentFactory = rendering.componentFactory ||
|
|
150
|
-
this.componentFactoryResolver.resolveComponentFactory(rendering.componentImplementation);
|
|
151
|
-
// apply the parent style attribute _ngcontent
|
|
152
|
-
// work-around for https://github.com/angular/angular/issues/12215
|
|
153
|
-
const createdComponentRef = this.view.createComponent(componentFactory, index);
|
|
154
|
-
if (this.parentStyleAttribute) {
|
|
155
|
-
this.renderer.setAttribute(createdComponentRef.location.nativeElement, this.parentStyleAttribute, '');
|
|
156
|
-
}
|
|
157
|
-
const componentInstance = createdComponentRef.instance;
|
|
158
|
-
componentInstance.rendering = rendering.componentDefinition;
|
|
159
|
-
if (this._inputs) {
|
|
160
|
-
this._setComponentInputs(componentInstance, this._inputs);
|
|
161
|
-
}
|
|
162
|
-
if (this.outputs) {
|
|
163
|
-
this._subscribeComponentOutputs(componentInstance, this.outputs);
|
|
164
|
-
}
|
|
165
|
-
this._componentInstances.push(componentInstance);
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
PlaceholderComponent.decorators = [
|
|
169
|
-
{ type: Component, args: [{
|
|
170
|
-
selector: 'sc-placeholder,[sc-placeholder]',
|
|
146
|
+
])`);
|
|
147
|
+
rendering.componentImplementation = this.missingComponentComponent;
|
|
148
|
+
}
|
|
149
|
+
const componentFactory = rendering.componentFactory ||
|
|
150
|
+
this.componentFactoryResolver.resolveComponentFactory(rendering.componentImplementation);
|
|
151
|
+
// apply the parent style attribute _ngcontent
|
|
152
|
+
// work-around for https://github.com/angular/angular/issues/12215
|
|
153
|
+
const createdComponentRef = this.view.createComponent(componentFactory, index);
|
|
154
|
+
if (this.parentStyleAttribute) {
|
|
155
|
+
this.renderer.setAttribute(createdComponentRef.location.nativeElement, this.parentStyleAttribute, '');
|
|
156
|
+
}
|
|
157
|
+
const componentInstance = createdComponentRef.instance;
|
|
158
|
+
componentInstance.rendering = rendering.componentDefinition;
|
|
159
|
+
if (this._inputs) {
|
|
160
|
+
this._setComponentInputs(componentInstance, this._inputs);
|
|
161
|
+
}
|
|
162
|
+
if (this.outputs) {
|
|
163
|
+
this._subscribeComponentOutputs(componentInstance, this.outputs);
|
|
164
|
+
}
|
|
165
|
+
this._componentInstances.push(componentInstance);
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
PlaceholderComponent.decorators = [
|
|
169
|
+
{ type: Component, args: [{
|
|
170
|
+
selector: 'sc-placeholder,[sc-placeholder]',
|
|
171
171
|
template: `
|
|
172
172
|
<ng-template
|
|
173
173
|
*ngIf="isLoading"
|
|
174
174
|
[ngTemplateOutlet]="placeholderLoading?.templateRef"
|
|
175
175
|
></ng-template>
|
|
176
176
|
<ng-template #view></ng-template>
|
|
177
|
-
`
|
|
178
|
-
},] }
|
|
179
|
-
];
|
|
180
|
-
PlaceholderComponent.ctorParameters = () => [
|
|
181
|
-
{ type: ComponentFactoryResolver },
|
|
182
|
-
{ type: KeyValueDiffers },
|
|
183
|
-
{ type: JssComponentFactoryService },
|
|
184
|
-
{ type: ChangeDetectorRef },
|
|
185
|
-
{ type: ElementRef },
|
|
186
|
-
{ type: Renderer2 },
|
|
187
|
-
{ type: Type, decorators: [{ type: Inject, args: [PLACEHOLDER_MISSING_COMPONENT_COMPONENT,] }] }
|
|
188
|
-
];
|
|
189
|
-
PlaceholderComponent.propDecorators = {
|
|
190
|
-
name: [{ type: Input }],
|
|
191
|
-
rendering: [{ type: Input }],
|
|
192
|
-
renderings: [{ type: Input }],
|
|
193
|
-
outputs: [{ type: Input }],
|
|
194
|
-
loaded: [{ type: Output }],
|
|
195
|
-
view: [{ type: ViewChild, args: ['view', { read: ViewContainerRef, static: true },] }],
|
|
196
|
-
renderEachTemplate: [{ type: ContentChild, args: [RenderEachDirective, { static: true },] }],
|
|
197
|
-
renderEmptyTemplate: [{ type: ContentChild, args: [RenderEmptyDirective, { static: true },] }],
|
|
198
|
-
placeholderLoading: [{ type: ContentChild, args: [PlaceholderLoadingDirective, { static: true },] }],
|
|
199
|
-
inputs: [{ type: Input }]
|
|
200
|
-
};
|
|
177
|
+
`
|
|
178
|
+
},] }
|
|
179
|
+
];
|
|
180
|
+
PlaceholderComponent.ctorParameters = () => [
|
|
181
|
+
{ type: ComponentFactoryResolver },
|
|
182
|
+
{ type: KeyValueDiffers },
|
|
183
|
+
{ type: JssComponentFactoryService },
|
|
184
|
+
{ type: ChangeDetectorRef },
|
|
185
|
+
{ type: ElementRef },
|
|
186
|
+
{ type: Renderer2 },
|
|
187
|
+
{ type: Type, decorators: [{ type: Inject, args: [PLACEHOLDER_MISSING_COMPONENT_COMPONENT,] }] }
|
|
188
|
+
];
|
|
189
|
+
PlaceholderComponent.propDecorators = {
|
|
190
|
+
name: [{ type: Input }],
|
|
191
|
+
rendering: [{ type: Input }],
|
|
192
|
+
renderings: [{ type: Input }],
|
|
193
|
+
outputs: [{ type: Input }],
|
|
194
|
+
loaded: [{ type: Output }],
|
|
195
|
+
view: [{ type: ViewChild, args: ['view', { read: ViewContainerRef, static: true },] }],
|
|
196
|
+
renderEachTemplate: [{ type: ContentChild, args: [RenderEachDirective, { static: true },] }],
|
|
197
|
+
renderEmptyTemplate: [{ type: ContentChild, args: [RenderEmptyDirective, { static: true },] }],
|
|
198
|
+
placeholderLoading: [{ type: ContentChild, args: [PlaceholderLoadingDirective, { static: true },] }],
|
|
199
|
+
inputs: [{ type: Input }]
|
|
200
|
+
};
|
|
201
201
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Vob2xkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvcGxhY2Vob2xkZXIuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDZEQUE2RDtBQUM3RCxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCx3QkFBd0IsRUFDeEIsWUFBWSxFQUVaLFVBQVUsRUFDVixZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFFTCxlQUFlLEVBSWYsTUFBTSxFQUNOLFNBQVMsRUFFVCxJQUFJLEVBQ0osU0FBUyxFQUNULGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBRUwsMEJBQTBCLEdBQzNCLE1BQU0sa0NBQWtDLENBQUM7QUFDMUMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDOUUsT0FBTyxFQUFFLHVDQUF1QyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDOUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDOUQsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUU3Qzs7O0dBR0c7QUFDSCxTQUFTLGNBQWMsQ0FBQyxTQUE2QixFQUFFLElBQVk7SUFDakUsSUFBSSxTQUFTLElBQUksU0FBUyxDQUFDLFlBQVksSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ3pGLE9BQU8sU0FBUyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNyQztJ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QixDQUFDLENBQUM7SUFDbkQsQ0FBQzs7O1lBL05GLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsaUNBQWlDO2dCQUMzQyxRQUFRLEVBQUU7Ozs7OztHQU1UO2FBQ0Y7OztZQXBEQyx3QkFBd0I7WUFReEIsZUFBZTtZQWdCZiwwQkFBMEI7WUExQjFCLGlCQUFpQjtZQUtqQixVQUFVO1lBVVYsU0FBUztZQUVULElBQUksdUJBMkVELE1BQU0sU0FBQyx1Q0FBdUM7OzttQkE3QmhELEtBQUs7d0JBQ0wsS0FBSzt5QkFDTCxLQUFLO3NCQUNMLEtBQUs7cUJBRUwsTUFBTTttQkFHTixTQUFTLFNBQUMsTUFBTSxFQUFFLEVBQUUsSUFBSSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7aUNBQzFELFlBQVksU0FBQyxtQkFBbUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7a0NBQ2xELFlBQVksU0FBQyxvQkFBb0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7aUNBQ25ELFlBQVksU0FBQywyQkFBMkIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7cUJBRzFELEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAYW5ndWxhci1lc2xpbnQvbm8tY29uZmxpY3RpbmctbGlmZWN5Y2xlICovXHJcbmltcG9ydCB7XHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgQ29tcG9uZW50LFxyXG4gIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcclxuICBDb250ZW50Q2hpbGQsXHJcbiAgRG9DaGVjayxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgS2V5VmFsdWVEaWZmZXIsXHJcbiAgS2V5VmFsdWVEaWZmZXJzLFxyXG4gIE9uQ2hhbmdlcyxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBSZW5kZXJlcjIsXHJcbiAgU2ltcGxlQ2hhbmdlcyxcclxuICBUeXBlLFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3Q29udGFpbmVyUmVmLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21wb25lbnRSZW5kZXJpbmcsIEh0bWxFbGVtZW50UmVuZGVyaW5nIH0gZnJvbSAnQHNpdGVjb3JlLWpzcy9zaXRlY29yZS1qc3MnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2VXaGlsZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtcclxuICBDb21wb25lbnRGYWN0b3J5UmVzdWx0LFxyXG4gIEpzc0NvbXBvbmVudEZhY3RvcnlTZXJ2aWNlLFxyXG59IGZyb20gJy4uL2pzcy1jb21wb25lbnQtZmFjdG9yeS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGxhY2Vob2xkZXJMb2FkaW5nRGlyZWN0aXZlIH0gZnJvbSAnLi9wbGFjZWhvbGRlci1sb2FkaW5nLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFBMQUNFSE9MREVSX01JU1NJTkdfQ09NUE9ORU5UX0NPTVBPTkVOVCB9IGZyb20gJy4vcGxhY2Vob2xkZXIudG9rZW4nO1xyXG5pbXBvcnQgeyBSZW5kZXJFYWNoRGlyZWN0aXZlIH0gZnJvbSAnLi9yZW5kZXItZWFjaC5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBSZW5kZXJFbXB0eURpcmVjdGl2ZSB9IGZyb20gJy4vcmVuZGVyLWVtcHR5LmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IGlzUmF3UmVuZGVyaW5nIH0gZnJvbSAnLi9yZW5kZXJpbmcnO1xyXG5cclxuLyoqXHJcbiAqIEBwYXJhbSB7Q29tcG9uZW50UmVuZGVyaW5nfSByZW5kZXJpbmdcclxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcclxuICovXHJcbmZ1bmN0aW9uIGdldFBsYWNlaG9sZGVyKHJlbmRlcmluZzogQ29tcG9uZW50UmVuZGVyaW5nLCBuYW1lOiBzdHJpbmcpIHtcclxuICBpZiAocmVuZGVyaW5nICYmIHJlbmRlcmluZy5wbGFjZWhvbGRlcnMgJiYgT2JqZWN0LmtleXMocmVuZGVyaW5nLnBsYWNlaG9sZGVycykubGVuZ3RoID4gMCkge1xyXG4gICAgcmV0dXJuIHJlbmRlcmluZy5wbGFjZWhvbGRlcnNbbmFtZV07XHJcbiAgfVxyXG4gIHJldHVybiBudWxsO1xyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3NjLXBsYWNlaG9sZGVyLFtzYy1wbGFjZWhvbGRlcl0nLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8bmctdGVtcGxhdGVcclxuICAgICAgKm5nSWY9XCJpc0xvYWRpbmdcIlxyXG4gICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJwbGFjZWhvbGRlckxvYWRpbmc/LnRlbXBsYXRlUmVmXCJcclxuICAgID48L25nLXRlbXBsYXRlPlxyXG4gICAgPG5nLXRlbXBsYXRlICN2aWV3PjwvbmctdGVtcGxhdGU+XHJcbiAgYCxcclxufSlcclxuZXhwb3J0IGNsYXNzIFBsYWNlaG9sZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIERvQ2hlY2ssIE9uRGVzdHJveSB7XHJcbiAgcHJpdmF0ZSBfaW5wdXRzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9O1xyXG4gIHByaXZhdGUgX2RpZmZlcjogS2V5VmFsdWVEaWZmZXI8c3RyaW5nLCBhbnk+O1xyXG4gIHByaXZhdGUgX2NvbXBvbmVudEluc3RhbmNlczogYW55W10gPSBbXTtcclxuICBwcml2YXRlIGRlc3Ryb3llZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgcGFyZW50U3R5bGVBdHRyaWJ1dGUgPSAnJztcclxuICBwdWJsaWMgaXNMb2FkaW5nID0gdHJ1ZTtcclxuXHJcbiAgQElucHV0KCkgbmFtZT86IHN0cmluZztcclxuICBASW5wdXQoKSByZW5kZXJpbmc6IENvbXBvbmVudFJlbmRlcmluZztcclxuICBASW5wdXQoKSByZW5kZXJpbmdzPzogQXJyYXk8Q29tcG9uZW50UmVuZGVyaW5nIHwgSHRtbEVsZW1lbnRSZW5kZXJpbmc+O1xyXG4gIEBJbnB1dCgpIG91dHB1dHM6IHsgW2s6IHN0cmluZ106IChldmVudFR5cGU6IGFueSkgPT4gdm9pZCB9O1xyXG5cclxuICBAT3V0cHV0KClcclxuICBsb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgndmlldycsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgdmlldzogVmlld0NvbnRhaW5lclJlZjtcclxuICBAQ29udGVudENoaWxkKFJlbmRlckVhY2hEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIHJlbmRlckVhY2hUZW1wbGF0ZTogUmVuZGVyRWFjaERpcmVjdGl2ZTtcclxuICBAQ29udGVudENoaWxkKFJlbmRlckVtcHR5RGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSByZW5kZXJFbXB0eVRlbXBsYXRlOiBSZW5kZXJFbXB0eURpcmVjdGl2ZTtcclxuICBAQ29udGVudENoaWxkKFBsYWNlaG9sZGVyTG9hZGluZ0RpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSlcclxuICBwbGFjZWhvbGRlckxvYWRpbmc/OiBQbGFjZWhvbGRlckxvYWRpbmdEaXJlY3RpdmU7XHJcblxyXG4gIEBJbnB1dCgpXHJcbiAgc2V0IGlucHV0cyh2YWx1ZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkge1xyXG4gICAgdGhpcy5faW5wdXRzID0gdmFsdWU7XHJcbiAgICBpZiAoIXRoaXMuX2RpZmZlciAmJiB2YWx1ZSkge1xyXG4gICAgICB0aGlzLl9kaWZmZXIgPSB0aGlzLmRpZmZlcnMuZmluZCh2YWx1ZSkuY3JlYXRlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXHJcbiAgICBwcml2YXRlIGRpZmZlcnM6IEtleVZhbHVlRGlmZmVycyxcclxuICAgIHByaXZhdGUgY29tcG9uZW50RmFjdG9yeTogSnNzQ29tcG9uZW50RmFjdG9yeVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIHByaXZhdGUgZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcclxuICAgIEBJbmplY3QoUExBQ0VIT0xERVJfTUlTU0lOR19DT01QT05FTlRfQ09NUE9ORU5UKSBwcml2YXRlIG1pc3NpbmdDb21wb25lbnRDb21wb25lbnQ6IFR5cGU8YW55PlxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICAvLyBqdXN0IHRvIGVuc3VyZSB0aGUgZWxlbWVudCBleGlzdHNcclxuICAgIGNvbnN0IGVsZW0gPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcclxuXHJcbiAgICBpZiAoZWxlbSkge1xyXG4gICAgICBjb25zdCBhdHRyaWJ1dGVzOiBOYW1lZE5vZGVNYXAgPSBlbGVtLmF0dHJpYnV0ZXM7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXR0cmlidXRlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIGNvbnN0IGF0dHI6IEF0dHIgfCBudWxsID0gYXR0cmlidXRlcy5pdGVtKGkpO1xyXG4gICAgICAgIGlmIChhdHRyICYmIGF0dHIubmFtZS5pbmRleE9mKCdfbmdjb250ZW50JykgIT09IC0xKSB7XHJcbiAgICAgICAgICB0aGlzLnBhcmVudFN0eWxlQXR0cmlidXRlID0gYXR0ci5uYW1lO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKSB7XHJcbiAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWU7XHJcbiAgICB0aGlzLl9jb21wb25lbnRJbnN0YW5jZXMgPSBbXTtcclxuICB9XHJcblxyXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcclxuICAgIGlmIChjaGFuZ2VzLnJlbmRlcmluZyB8fCBjaGFuZ2VzLnJlbmRlcmluZ3MpIHtcclxuICAgICAgdGhpcy5fcmVuZGVyKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0RvQ2hlY2soKSB7XHJcbiAgICBpZiAoIXRoaXMuX2RpZmZlciB8fCAhdGhpcy5faW5wdXRzIHx8IHRoaXMuX2NvbXBvbmVudEluc3RhbmNlcy5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLl9kaWZmZXIuZGlmZih0aGlzLl9pbnB1dHMpO1xyXG4gICAgaWYgKCFjaGFuZ2VzKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHVwZGF0ZXM6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcclxuICAgIGNoYW5nZXMuZm9yRWFjaFJlbW92ZWRJdGVtKChjaGFuZ2UpID0+ICh1cGRhdGVzW2NoYW5nZS5rZXldID0gbnVsbCkpO1xyXG4gICAgY2hhbmdlcy5mb3JFYWNoQWRkZWRJdGVtKChjaGFuZ2UpID0+ICh1cGRhdGVzW2NoYW5nZS5rZXldID0gY2hhbmdlLmN1cnJlbnRWYWx1ZSkpO1xyXG4gICAgY2hhbmdlcy5mb3JFYWNoQ2hhbmdlZEl0ZW0oKGNoYW5nZSkgPT4gKHVwZGF0ZXNbY2hhbmdlLmtleV0gPSBjaGFuZ2UuY3VycmVudFZhbHVlKSk7XHJcbiAgICB0aGlzLl9jb21wb25lbnRJbnN0YW5jZXMuZm9yRWFjaCgoY29tcG9uZW50SW5zdGFuY2UpID0+XHJcbiAgICAgIHRoaXMuX3NldENvbXBvbmVudElucHV0cyhjb21wb25lbnRJbnN0YW5jZSwgdXBkYXRlcylcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZXRDb21wb25lbnRJbnB1dHMoY29tcG9uZW50SW5zdGFuY2U6IGFueSwgaW5wdXRzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSB7XHJcbiAgICBPYmplY3QuZW50cmllcyhpbnB1dHMpLmZvckVhY2goXHJcbiAgICAgIChbaW5wdXQsIGlucHV0VmFsdWVdKSA9PiAoY29tcG9uZW50SW5zdGFuY2VbaW5wdXRdID0gaW5wdXRWYWx1ZSlcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zdWJzY3JpYmVDb21wb25lbnRPdXRwdXRzKFxyXG4gICAgY29tcG9uZW50SW5zdGFuY2U6IGFueSxcclxuICAgIG91dHB1dHM6IHsgW2s6IHN0cmluZ106IChldmVudFR5cGU6IGFueSkgPT4gdm9pZCB9XHJcbiAgKSB7XHJcbiAgICBPYmplY3Qua2V5cyhvdXRwdXRzKVxyXG4gICAgICAuZmlsdGVyKFxyXG4gICAgICAgIChvdXRwdXQpID0+IGNvbXBvbmVudEluc3RhbmNlW291dHB1dF0gJiYgY29tcG9uZW50SW5zdGFuY2Vbb3V0cHV0XSBpbnN0YW5jZW9mIE9ic2VydmFibGVcclxuICAgICAgKVxyXG4gICAgICAuZm9yRWFjaCgob3V0cHV0KSA9PlxyXG4gICAgICAgIChjb21wb25lbnRJbnN0YW5jZVtvdXRwdXRdIGFzIE9ic2VydmFibGU8YW55PilcclxuICAgICAgICAgIC5waXBlKHRha2VXaGlsZSgoKSA9PiAhdGhpcy5kZXN0cm95ZWQpKVxyXG4gICAgICAgICAgLnN1YnNjcmliZShvdXRwdXRzW291dHB1dF0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZW5kZXIoKSB7XHJcbiAgICB0aGlzLl9jb21wb25lbnRJbnN0YW5jZXMgPSBbXTtcclxuICAgIHRoaXMudmlldy5jbGVhcigpO1xyXG5cclxuICAgIGlmICghdGhpcy5yZW5kZXJpbmcgJiYgIXRoaXMucmVuZGVyaW5ncykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCF0aGlzLm5hbWUgJiYgIXRoaXMucmVuZGVyaW5ncykge1xyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgJ1BsYWNlaG9sZGVyIG5hbWUgd2FzIG5vdCBzcGVjaWZpZWQsIGFuZCBleHBsaWNpdCByZW5kZXJpbmdzIGFycmF5IHdhcyBub3QgcGFzc2VkLiBQbGFjZWhvbGRlciByZXF1aXJlcyBlaXRoZXIgbmFtZSBhbmQgcmVuZGVyaW5nLCBvciByZW5kZXJpbmdzLidcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gdGhpcy5yZW5kZXJpbmdzIHx8IGdldFBsYWNlaG9sZGVyKHRoaXMucmVuZGVyaW5nLCB0aGlzLm5hbWUgfHwgJycpO1xyXG5cclxuICAgIGlmICghcGxhY2Vob2xkZXIpIHtcclxuICAgICAgY29uc29sZS53YXJuKFxyXG4gICAgICAgIGBQbGFjZWhvbGRlciAnJHt0aGlzLm5hbWV9JyB3YXMgbm90IGZvdW5kIGluIHRoZSBjdXJyZW50IHJlbmRlcmluZyBkYXRhYCxcclxuICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLnJlbmRlcmluZywgbnVsbCwgMilcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGlmIHRoZSBwbGFjZWhvbGRlciBpcyBlbXB0eSAoY29udGFpbnMgb25seSByYXcgcmVuZGVyaW5ncyksIHRoZW4gd2UgbWF5IG5lZWQgdG8gdXNlIHRoZSBlbXB0eSB0ZW1wbGF0ZSBpZiBpdCdzIGRlZmluZWRcclxuICAgIGNvbnN0IHBsYWNlaG9sZGVySXNFbXB0eSA9IHBsYWNlaG9sZGVyLmV2ZXJ5KFxyXG4gICAgICAocmVuZGVyaW5nOiBDb21wb25lbnRSZW5kZXJpbmcgfCBIdG1sRWxlbWVudFJlbmRlcmluZykgPT4gaXNSYXdSZW5kZXJpbmcocmVuZGVyaW5nKVxyXG4gICAgKTtcclxuXHJcbiAgICBpZiAodGhpcy5yZW5kZXJFbXB0eVRlbXBsYXRlICYmIHBsYWNlaG9sZGVySXNFbXB0eSkge1xyXG4gICAgICB0aGlzLnZpZXcuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMucmVuZGVyRW1wdHlUZW1wbGF0ZS50ZW1wbGF0ZVJlZiwge1xyXG4gICAgICAgIHJlbmRlcmluZ3M6IHBsYWNlaG9sZGVyLFxyXG4gICAgICB9KTtcclxuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29tcG9uZW50RmFjdG9yeVxyXG4gICAgICAgIC5nZXRDb21wb25lbnRzKHBsYWNlaG9sZGVyKVxyXG4gICAgICAgIC50aGVuKChjb21wb25lbnRzKSA9PlxyXG4gICAgICAgICAgY29tcG9uZW50cy5mb3JFYWNoKChyZW5kZXJpbmcsIGluZGV4KSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnJlbmRlckVhY2hUZW1wbGF0ZSAmJiAhaXNSYXdSZW5kZXJpbmcocmVuZGVyaW5nLmNvbXBvbmVudERlZmluaXRpb24pKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyVGVtcGxhdGVkQ29tcG9uZW50KHJlbmRlcmluZy5jb21wb25lbnREZWZpbml0aW9uLCBpbmRleCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fcmVuZGVyRW1iZWRkZWRDb21wb25lbnQocmVuZGVyaW5nLCBpbmRleCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC50aGVuKCgpID0+IHtcclxuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYubWFya0ZvckNoZWNrKCk7XHJcbiAgICAgICAgICB0aGlzLmxvYWRlZC5lbWl0KHRoaXMubmFtZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZW5kZXJUZW1wbGF0ZWRDb21wb25lbnQoXHJcbiAgICByZW5kZXJpbmc6IENvbXBvbmVudFJlbmRlcmluZyB8IEh0bWxFbGVtZW50UmVuZGVyaW5nLFxyXG4gICAgaW5kZXg6IG51bWJlclxyXG4gICkge1xyXG4gICAgLy8gdGhlIHJlbmRlci1lYWNoIHRlbXBsYXRlIHRha2VzIGNhcmUgb2YgYWxsIGNvbXBvbmVudCBtYXBwaW5nIGV0Y1xyXG4gICAgLy8gZ2VuZXJhbGx5IHVzaW5nIDxzYy1yZW5kZXItY29tcG9uZW50PiB3aGljaCBpcyBhYm91dCBsaWtlIF9yZW5kZXJFbWJlZGRlZENvbXBvbmVudCgpXHJcbiAgICAvLyBhcyBhIHNlcGFyYXRlIGNvbXBvbmVudFxyXG4gICAgdGhpcy52aWV3LmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnJlbmRlckVhY2hUZW1wbGF0ZS50ZW1wbGF0ZVJlZiwge1xyXG4gICAgICByZW5kZXJpbmcsXHJcbiAgICAgIGluZGV4LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZW5kZXJFbWJlZGRlZENvbXBvbmVudChyZW5kZXJpbmc6IENvbXBvbmVudEZhY3RvcnlSZXN1bHQsIGluZGV4OiBudW1iZXIpIHtcclxuICAgIGlmICghcmVuZGVyaW5nLmNvbXBvbmVudEltcGxlbWVudGF0aW9uKSB7XHJcbiAgICAgIGNvbnN0IGNvbXBvbmVudE5hbWUgPSAocmVuZGVyaW5nLmNvbXBvbmVudERlZmluaXRpb24gYXMgQ29tcG9uZW50UmVuZGVyaW5nKS5jb21wb25lbnROYW1lO1xyXG4gICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgIGBQbGFjZWhvbGRlciAke3RoaXMubmFtZX0gY29udGFpbnMgdW5rbm93biBjb21wb25lbnQgJHtjb21wb25lbnROYW1lfS5gLFxyXG4gICAgICAgIGBFbnN1cmUgY29tcG9uZW50IGlzIG1hcHBlZCwgbGlrZTpcclxuICAgICAgICBKc3NNb2R1bGUud2l0aENvbXBvbmVudHMoW1xyXG4gICAgICAgICAgeyBuYW1lOiAnJHtjb21wb25lbnROYW1lfScsIHR5cGU6ICR7Y29tcG9uZW50TmFtZX1Db21wb25lbnQgfVxyXG4gICAgICAgIF0pYFxyXG4gICAgICApO1xyXG5cclxuICAgICAgcmVuZGVyaW5nLmNvbXBvbmVudEltcGxlbWVudGF0aW9uID0gdGhpcy5taXNzaW5nQ29tcG9uZW50Q29tcG9uZW50O1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGNvbXBvbmVudEZhY3RvcnkgPVxyXG4gICAgICByZW5kZXJpbmcuY29tcG9uZW50RmFjdG9yeSB8fFxyXG4gICAgICB0aGlzLmNvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeShyZW5kZXJpbmcuY29tcG9uZW50SW1wbGVtZW50YXRpb24pO1xyXG5cclxuICAgIC8vIGFwcGx5IHRoZSBwYXJlbnQgc3R5bGUgYXR0cmlidXRlIF9uZ2NvbnRlbnRcclxuICAgIC8vIHdvcmstYXJvdW5kIGZvciBodHRwczovL2dpdGh1Yi5jb20vYW5ndWxhci9hbmd1bGFyL2lzc3Vlcy8xMjIxNVxyXG4gICAgY29uc3QgY3JlYXRlZENvbXBvbmVudFJlZiA9IHRoaXMudmlldy5jcmVhdGVDb21wb25lbnQoY29tcG9uZW50RmFjdG9yeSwgaW5kZXgpO1xyXG4gICAgaWYgKHRoaXMucGFyZW50U3R5bGVBdHRyaWJ1dGUpIHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUoXHJcbiAgICAgICAgY3JlYXRlZENvbXBvbmVudFJlZi5sb2NhdGlvbi5uYXRpdmVFbGVtZW50LFxyXG4gICAgICAgIHRoaXMucGFyZW50U3R5bGVBdHRyaWJ1dGUsXHJcbiAgICAgICAgJydcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBjb21wb25lbnRJbnN0YW5jZSA9IGNyZWF0ZWRDb21wb25lbnRSZWYuaW5zdGFuY2U7XHJcbiAgICBjb21wb25lbnRJbnN0YW5jZS5yZW5kZXJpbmcgPSByZW5kZXJpbmcuY29tcG9uZW50RGVmaW5pdGlvbjtcclxuICAgIGlmICh0aGlzLl9pbnB1dHMpIHtcclxuICAgICAgdGhpcy5fc2V0Q29tcG9uZW50SW5wdXRzKGNvbXBvbmVudEluc3RhbmNlLCB0aGlzLl9pbnB1dHMpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMub3V0cHV0cykge1xyXG4gICAgICB0aGlzLl9zdWJzY3JpYmVDb21wb25lbnRPdXRwdXRzKGNvbXBvbmVudEluc3RhbmNlLCB0aGlzLm91dHB1dHMpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fY29tcG9uZW50SW5zdGFuY2VzLnB1c2goY29tcG9uZW50SW5zdGFuY2UpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import { InjectionToken } from '@angular/core';
|
|
2
|
-
/** Registers a statically loaded component */
|
|
3
|
-
export class ComponentNameAndType {
|
|
4
|
-
}
|
|
5
|
-
/**
|
|
6
|
-
* @param {any} object
|
|
7
|
-
*/
|
|
8
|
-
export function instanceOfComponentNameAndType(object) {
|
|
9
|
-
return 'type' in object;
|
|
10
|
-
}
|
|
11
|
-
/**
|
|
12
|
-
* @param {any} object
|
|
13
|
-
*/
|
|
14
|
-
export function instanceOfComponentNameAndModule(object) {
|
|
15
|
-
return 'module' in object;
|
|
16
|
-
}
|
|
17
|
-
export const PLACEHOLDER_COMPONENTS = new InjectionToken('Sc.placeholder.components');
|
|
18
|
-
export const PLACEHOLDER_LAZY_COMPONENTS = new InjectionToken('Sc.placeholder.lazyComponents');
|
|
19
|
-
export const PLACEHOLDER_MISSING_COMPONENT_COMPONENT = new InjectionToken('Sc.placeholder.missingComponentComponent');
|
|
20
|
-
export const DYNAMIC_COMPONENT = new InjectionToken('Sc.placeholder.dynamicComponent');
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
/** Registers a statically loaded component */
|
|
3
|
+
export class ComponentNameAndType {
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* @param {any} object
|
|
7
|
+
*/
|
|
8
|
+
export function instanceOfComponentNameAndType(object) {
|
|
9
|
+
return 'type' in object;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* @param {any} object
|
|
13
|
+
*/
|
|
14
|
+
export function instanceOfComponentNameAndModule(object) {
|
|
15
|
+
return 'module' in object;
|
|
16
|
+
}
|
|
17
|
+
export const PLACEHOLDER_COMPONENTS = new InjectionToken('Sc.placeholder.components');
|
|
18
|
+
export const PLACEHOLDER_LAZY_COMPONENTS = new InjectionToken('Sc.placeholder.lazyComponents');
|
|
19
|
+
export const PLACEHOLDER_MISSING_COMPONENT_COMPONENT = new InjectionToken('Sc.placeholder.missingComponentComponent');
|
|
20
|
+
export const DYNAMIC_COMPONENT = new InjectionToken('Sc.placeholder.dynamicComponent');
|
|
21
21
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhY2Vob2xkZXIudG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9wbGFjZWhvbGRlci50b2tlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFRLE1BQU0sZUFBZSxDQUFDO0FBRXJELDhDQUE4QztBQUM5QyxNQUFNLE9BQU8sb0JBQW9CO0NBR2hDO0FBYUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsOEJBQThCLENBQUMsTUFBVztJQUN4RCxPQUFPLE1BQU0sSUFBSSxNQUFNLENBQUM7QUFDMUIsQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGdDQUFnQyxDQUFDLE1BQVc7SUFDMUQsT0FBTyxRQUFRLElBQUksTUFBTSxDQUFDO0FBQzVCLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLGNBQWMsQ0FDdEQsMkJBQTJCLENBQzVCLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSwyQkFBMkIsR0FBRyxJQUFJLGNBQWMsQ0FDM0QsK0JBQStCLENBQ2hDLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSx1Q0FBdUMsR0FBRyxJQUFJLGNBQWMsQ0FDdkUsMENBQTBDLENBQzNDLENBQUM7QUFDRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLGNBQWMsQ0FDakQsaUNBQWlDLENBQ2xDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuLyoqIFJlZ2lzdGVycyBhIHN0YXRpY2FsbHkgbG9hZGVkIGNvbXBvbmVudCAqL1xyXG5leHBvcnQgY2xhc3MgQ29tcG9uZW50TmFtZUFuZFR5cGUge1xyXG4gIG5hbWU6IHN0cmluZztcclxuICB0eXBlOiBUeXBlPGFueT47XHJcbn1cclxuXHJcbi8qKiBSZWdpc3RlcnMgYSBsYXppbHkgbG9hZGVkIGNvbXBvbmVudCBieSBuYW1lIGFuZCBtb2R1bGUgdG8gbGF6eSBsb2FkIHdoZW4gaXQncyBuZWVkZWQgKi9cclxuZXhwb3J0IGludGVyZmFjZSBDb21wb25lbnROYW1lQW5kTW9kdWxlIHtcclxuICAvKiogTmFtZSBvZiB0aGUgY29tcG9uZW50ICovXHJcbiAgcGF0aDogc3RyaW5nO1xyXG4gIC8qKlxyXG4gICAqIER5bmFtaWMgaW1wb3J0IG9mIHRoZSBjb21wb25lbnQsXHJcbiAgICogZS5nLiAoKSA9PiBpbXBvcnQoJy4vcGF0aC90by9sYXp5bG9hZGVkY29tcG9uZW50Lm1vZHVsZScpLnRoZW4obSA9PiBtLkxhenlMb2FkZWRDb21wb25lbnRNb2R1bGVFeHBvcnROYW1lKVxyXG4gICAqL1xyXG4gIGxvYWRDaGlsZHJlbjogKCkgPT4gUHJvbWlzZTxhbnk+O1xyXG59XHJcblxyXG4vKipcclxuICogQHBhcmFtIHthbnl9IG9iamVjdFxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbmNlT2ZDb21wb25lbnROYW1lQW5kVHlwZShvYmplY3Q6IGFueSk6IG9iamVjdCBpcyBDb21wb25lbnROYW1lQW5kVHlwZSB7XHJcbiAgcmV0dXJuICd0eXBlJyBpbiBvYmplY3Q7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcGFyYW0ge2FueX0gb2JqZWN0XHJcbiAqL1xyXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFuY2VPZkNvbXBvbmVudE5hbWVBbmRNb2R1bGUob2JqZWN0OiBhbnkpOiBvYmplY3QgaXMgQ29tcG9uZW50TmFtZUFuZE1vZHVsZSB7XHJcbiAgcmV0dXJuICdtb2R1bGUnIGluIG9iamVjdDtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IFBMQUNFSE9MREVSX0NPTVBPTkVOVFMgPSBuZXcgSW5qZWN0aW9uVG9rZW48Q29tcG9uZW50TmFtZUFuZFR5cGVbXT4oXHJcbiAgJ1NjLnBsYWNlaG9sZGVyLmNvbXBvbmVudHMnXHJcbik7XHJcbmV4cG9ydCBjb25zdCBQTEFDRUhPTERFUl9MQVpZX0NPTVBPTkVOVFMgPSBuZXcgSW5qZWN0aW9uVG9rZW48Q29tcG9uZW50TmFtZUFuZFR5cGVbXT4oXHJcbiAgJ1NjLnBsYWNlaG9sZGVyLmxhenlDb21wb25lbnRzJ1xyXG4pO1xyXG5leHBvcnQgY29uc3QgUExBQ0VIT0xERVJfTUlTU0lOR19DT01QT05FTlRfQ09NUE9ORU5UID0gbmV3IEluamVjdGlvblRva2VuPFR5cGU8YW55Pj4oXHJcbiAgJ1NjLnBsYWNlaG9sZGVyLm1pc3NpbmdDb21wb25lbnRDb21wb25lbnQnXHJcbik7XHJcbmV4cG9ydCBjb25zdCBEWU5BTUlDX0NPTVBPTkVOVCA9IG5ldyBJbmplY3Rpb25Ub2tlbjxUeXBlPGFueT4gfCB7IFtzOiBzdHJpbmddOiBhbnkgfT4oXHJcbiAgJ1NjLnBsYWNlaG9sZGVyLmR5bmFtaWNDb21wb25lbnQnXHJcbik7XHJcbiJdfQ==
|
|
@@ -1,37 +1,37 @@
|
|
|
1
|
-
import { Component, ElementRef, Input, Renderer2 } from '@angular/core';
|
|
2
|
-
export class RawComponent {
|
|
3
|
-
constructor(renderer, elementRef) {
|
|
4
|
-
this.renderer = renderer;
|
|
5
|
-
this.elementRef = elementRef;
|
|
6
|
-
}
|
|
7
|
-
ngOnInit() {
|
|
8
|
-
const el = this.renderer.createElement(this.rendering.name);
|
|
9
|
-
const contents = this.renderer.createText(this.rendering.contents || '');
|
|
10
|
-
const attributes = this.rendering.attributes;
|
|
11
|
-
for (const attr in attributes) {
|
|
12
|
-
// eslint-disable-next-line no-prototype-builtins
|
|
13
|
-
if (attributes.hasOwnProperty(attr)) {
|
|
14
|
-
const value = attributes[attr];
|
|
15
|
-
this.renderer.setAttribute(el, attr, value || '');
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
this.renderer.appendChild(el, contents);
|
|
19
|
-
const parentNode = this.renderer.parentNode(this.elementRef.nativeElement);
|
|
20
|
-
this.renderer.insertBefore(parentNode, el, this.elementRef.nativeElement);
|
|
21
|
-
parentNode.removeChild(this.elementRef.nativeElement);
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
RawComponent.decorators = [
|
|
25
|
-
{ type: Component, args: [{
|
|
26
|
-
selector: 'sc-raw',
|
|
27
|
-
template: ''
|
|
28
|
-
},] }
|
|
29
|
-
];
|
|
30
|
-
RawComponent.ctorParameters = () => [
|
|
31
|
-
{ type: Renderer2 },
|
|
32
|
-
{ type: ElementRef }
|
|
33
|
-
];
|
|
34
|
-
RawComponent.propDecorators = {
|
|
35
|
-
rendering: [{ type: Input }]
|
|
36
|
-
};
|
|
1
|
+
import { Component, ElementRef, Input, Renderer2 } from '@angular/core';
|
|
2
|
+
export class RawComponent {
|
|
3
|
+
constructor(renderer, elementRef) {
|
|
4
|
+
this.renderer = renderer;
|
|
5
|
+
this.elementRef = elementRef;
|
|
6
|
+
}
|
|
7
|
+
ngOnInit() {
|
|
8
|
+
const el = this.renderer.createElement(this.rendering.name);
|
|
9
|
+
const contents = this.renderer.createText(this.rendering.contents || '');
|
|
10
|
+
const attributes = this.rendering.attributes;
|
|
11
|
+
for (const attr in attributes) {
|
|
12
|
+
// eslint-disable-next-line no-prototype-builtins
|
|
13
|
+
if (attributes.hasOwnProperty(attr)) {
|
|
14
|
+
const value = attributes[attr];
|
|
15
|
+
this.renderer.setAttribute(el, attr, value || '');
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
this.renderer.appendChild(el, contents);
|
|
19
|
+
const parentNode = this.renderer.parentNode(this.elementRef.nativeElement);
|
|
20
|
+
this.renderer.insertBefore(parentNode, el, this.elementRef.nativeElement);
|
|
21
|
+
parentNode.removeChild(this.elementRef.nativeElement);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
RawComponent.decorators = [
|
|
25
|
+
{ type: Component, args: [{
|
|
26
|
+
selector: 'sc-raw',
|
|
27
|
+
template: ''
|
|
28
|
+
},] }
|
|
29
|
+
];
|
|
30
|
+
RawComponent.ctorParameters = () => [
|
|
31
|
+
{ type: Renderer2 },
|
|
32
|
+
{ type: ElementRef }
|
|
33
|
+
];
|
|
34
|
+
RawComponent.propDecorators = {
|
|
35
|
+
rendering: [{ type: Input }]
|
|
36
|
+
};
|
|
37
37
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmF3LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3Jhdy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU9oRixNQUFNLE9BQU8sWUFBWTtJQUd2QixZQUFvQixRQUFtQixFQUFVLFVBQXNCO1FBQW5ELGFBQVEsR0FBUixRQUFRLENBQVc7UUFBVSxlQUFVLEdBQVYsVUFBVSxDQUFZO0lBQUcsQ0FBQztJQUUzRSxRQUFRO1FBQ04sTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM1RCxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUN6RSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQztRQUM3QyxLQUFLLE1BQU0sSUFBSSxJQUFJLFVBQVUsRUFBRTtZQUM3QixpREFBaUQ7WUFDakQsSUFBSyxVQUFrQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDNUMsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUMvQixJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQUUsSUFBSSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUMsQ0FBQzthQUNuRDtTQUNGO1FBRUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDM0UsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzFFLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUN4RCxDQUFDOzs7WUF6QkYsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSxRQUFRO2dCQUNsQixRQUFRLEVBQUUsRUFBRTthQUNiOzs7WUFOOEMsU0FBUztZQUFwQyxVQUFVOzs7d0JBUTNCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkluaXQsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBIdG1sRWxlbWVudFJlbmRlcmluZyB9IGZyb20gJ0BzaXRlY29yZS1qc3Mvc2l0ZWNvcmUtanNzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2MtcmF3JyxcclxuICB0ZW1wbGF0ZTogJycsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSYXdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xyXG4gIEBJbnB1dCgpIHJlbmRlcmluZzogSHRtbEVsZW1lbnRSZW5kZXJpbmc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7fVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIGNvbnN0IGVsID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KHRoaXMucmVuZGVyaW5nLm5hbWUpO1xyXG4gICAgY29uc3QgY29udGVudHMgPSB0aGlzLnJlbmRlcmVyLmNyZWF0ZVRleHQodGhpcy5yZW5kZXJpbmcuY29udGVudHMgfHwgJycpO1xyXG4gICAgY29uc3QgYXR0cmlidXRlcyA9IHRoaXMucmVuZGVyaW5nLmF0dHJpYnV0ZXM7XHJcbiAgICBmb3IgKGNvbnN0IGF0dHIgaW4gYXR0cmlidXRlcykge1xyXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXHJcbiAgICAgIGlmICgoYXR0cmlidXRlcyBhcyBhbnkpLmhhc093blByb3BlcnR5KGF0dHIpKSB7XHJcbiAgICAgICAgY29uc3QgdmFsdWUgPSBhdHRyaWJ1dGVzW2F0dHJdO1xyXG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGVsLCBhdHRyLCB2YWx1ZSB8fCAnJyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbmRlcmVyLmFwcGVuZENoaWxkKGVsLCBjb250ZW50cyk7XHJcbiAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5yZW5kZXJlci5wYXJlbnROb2RlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcclxuICAgIHRoaXMucmVuZGVyZXIuaW5zZXJ0QmVmb3JlKHBhcmVudE5vZGUsIGVsLCB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCk7XHJcbiAgICBwYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50KTtcclxuICB9XHJcbn1cclxuIl19
|