{"version":3,"file":"ng-doc-app-components-playground.mjs","sources":["../tmp-esm2022/components/playground/playground-demo/playground-demo.component.js","../tmp-esm2022/components/playground/playground-property/playground-property.component.js","../tmp-esm2022/components/playground/playground-properties/playground-properties.component.js","../tmp-esm2022/components/playground/playground.component.js","../tmp-esm2022/components/playground/base-playground.js","../tmp-esm2022/components/playground/ng-doc-app-components-playground.js"],"sourcesContent":["import { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, inject, Injector, Input, ViewChild, ViewContainerRef, } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormGroup } from '@angular/forms';\nimport { NgDocDemoDisplayerComponent } from '@ng-doc/app/components/demo-displayer';\nimport { formatHtml } from '@ng-doc/app/helpers';\nimport { getPlaygroundDemoToken } from '@ng-doc/app/providers/playground-demo';\nimport { buildPlaygroundDemoPipeTemplate, buildPlaygroundDemoTemplate, } from '@ng-doc/core/helpers/build-playground-demo-template';\nimport { objectKeys } from '@ng-doc/core/helpers/object-keys';\nimport { stringify } from '@ng-doc/core/helpers/stringify';\nimport { NgDocSmoothResizeComponent } from '@ng-doc/ui-kit';\nimport { Subject } from 'rxjs';\nimport { startWith, takeUntil } from 'rxjs/operators';\nimport * as i0 from \"@angular/core\";\nexport class NgDocPlaygroundDemoComponent {\n    constructor() {\n        this.id = '';\n        this.pipeName = '';\n        this.selector = '';\n        this.recreateDemo = false;\n        this.expanded = false;\n        this.code = '';\n        this.injector = inject(Injector);\n        this.changeDetectorRef = inject(ChangeDetectorRef);\n        this.destroyRef = inject(DestroyRef);\n        this.unsubscribe$ = new Subject();\n    }\n    async ngOnChanges({ form, id }) {\n        if (form || id) {\n            this.unsubscribe$.next();\n            const demoInjector = getPlaygroundDemoToken(this.id);\n            if (demoInjector) {\n                const demos = this.injector.get(demoInjector, []);\n                this.playgroundDemo = demos.find((demo) => demo.selector === this.selector || demo.selector === this.pipeName);\n            }\n            await this.updateDemo();\n            this.form?.valueChanges\n                .pipe(takeUntil(this.unsubscribe$), startWith(this.form?.value), takeUntilDestroyed(this.destroyRef))\n                .subscribe((data) => this.updateDemo(data));\n        }\n    }\n    async updateDemo(data) {\n        if (this.recreateDemo || !this.demoRef) {\n            this.createDemo();\n        }\n        if (data) {\n            this.demoRef?.setInput('properties', data.properties ?? {});\n            this.demoRef?.setInput('content', data.content ?? {});\n            this.demoRef?.setInput('actionData', this.configuration?.data ?? {});\n            if (this.recreateDemo) {\n                this.demoRef?.instance.onReattached.subscribe(() => {\n                    this.demoRef?.changeDetectorRef.detectChanges();\n                });\n            }\n        }\n        await this.updateCodeView();\n    }\n    createDemo() {\n        if (this.playgroundDemo) {\n            this.demoRef?.destroy();\n            this.demoRef = this.demoOutlet?.createComponent(this.playgroundDemo);\n            this.demoRef?.changeDetectorRef.markForCheck();\n        }\n    }\n    async updateCodeView() {\n        const template = this.pipeName\n            ? buildPlaygroundDemoPipeTemplate(this.configuration?.template ?? '', this.pipeName, this.getActiveContent(), this.getPipeActiveInputs())\n            : buildPlaygroundDemoTemplate(this.configuration?.template ?? '', this.selector, this.getActiveContent(), this.getActiveInputs());\n        this.code = await formatHtml(template);\n        this.changeDetectorRef.markForCheck();\n    }\n    getActiveContent() {\n        const formData = this.form?.controls.content.value ?? {};\n        return objectKeys(formData).reduce((result, key) => {\n            result[key] = formData[key] ? this.configuration?.content?.[key].template ?? '' : '';\n            return result;\n        }, {});\n    }\n    getActiveInputs() {\n        const formData = this.form?.controls.properties.value ?? {};\n        return objectKeys(formData).reduce((result, key) => {\n            const inputName = this.properties?.[key]?.inputName ?? key;\n            const value = formData[key];\n            const property = this.demoRef?.instance?.defaultValues[key];\n            if (property !== value) {\n                result[inputName] = stringify(value).replace(/\"/g, `'`);\n            }\n            return result;\n        }, {});\n    }\n    getPipeActiveInputs() {\n        const formData = this.form?.controls.properties.value ?? {};\n        let changedInputIndex = -1;\n        return objectKeys(formData)\n            .map((key, i) => {\n            const value = formData[key];\n            const defaultValue = this.demoRef?.instance?.defaultValues[key];\n            if (defaultValue !== value) {\n                changedInputIndex = i;\n            }\n            return key;\n        })\n            .slice(0, changedInputIndex + 1)\n            .reduce((result, key) => {\n            result[key] = stringify(formData[key]).replace(/\"/g, `'`);\n            return result;\n        }, {});\n    }\n    ngOnDestroy() {\n        this.unsubscribe$.next();\n        this.unsubscribe$.complete();\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: NgDocPlaygroundDemoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n    static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.0.3\", type: NgDocPlaygroundDemoComponent, isStandalone: true, selector: \"ng-doc-playground-demo\", inputs: { id: \"id\", pipeName: \"pipeName\", selector: \"selector\", configuration: \"configuration\", properties: \"properties\", recreateDemo: \"recreateDemo\", form: \"form\", expanded: \"expanded\" }, viewQueries: [{ propertyName: \"demoOutlet\", first: true, predicate: [\"demoOutlet\"], descendants: true, read: ViewContainerRef, static: true }], usesOnChanges: true, ngImport: i0, template: \"<ng-doc-smooth-resize [trigger]=\\\"code\\\">\\n  <ng-doc-demo-displayer\\n    [code]=\\\"code\\\"\\n    [border]=\\\"false\\\"\\n    [expanded]=\\\"expanded\\\"\\n    language=\\\"angular-html\\\">\\n    <ng-container #demoOutlet></ng-container>\\n  </ng-doc-demo-displayer>\\n</ng-doc-smooth-resize>\\n\", styles: [\":host{display:block;border:var(--ng-doc-demo-displayer-border);border-radius:var(--ng-doc-demo-displayer-border-radius);overflow:hidden}:host:not(:last-child){border-bottom:0;border-bottom-left-radius:0;border-bottom-right-radius:0}:host:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}\\n\"], dependencies: [{ kind: \"component\", type: NgDocDemoDisplayerComponent, selector: \"ng-doc-demo-displayer\", inputs: [\"codeContent\", \"code\", \"language\", \"container\", \"border\", \"expanded\"] }, { kind: \"component\", type: NgDocSmoothResizeComponent, selector: \"ng-doc-smooth-resize\", inputs: [\"trigger\", \"animateOpacity\"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: NgDocPlaygroundDemoComponent, decorators: [{\n            type: Component,\n            args: [{ selector: 'ng-doc-playground-demo', changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgDocDemoDisplayerComponent, NgDocSmoothResizeComponent], template: \"<ng-doc-smooth-resize [trigger]=\\\"code\\\">\\n  <ng-doc-demo-displayer\\n    [code]=\\\"code\\\"\\n    [border]=\\\"false\\\"\\n    [expanded]=\\\"expanded\\\"\\n    language=\\\"angular-html\\\">\\n    <ng-container #demoOutlet></ng-container>\\n  </ng-doc-demo-displayer>\\n</ng-doc-smooth-resize>\\n\", styles: [\":host{display:block;border:var(--ng-doc-demo-displayer-border);border-radius:var(--ng-doc-demo-displayer-border-radius);overflow:hidden}:host:not(:last-child){border-bottom:0;border-bottom-left-radius:0;border-bottom-right-radius:0}:host:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}\\n\"] }]\n        }], propDecorators: { id: [{\n                type: Input\n            }], pipeName: [{\n                type: Input\n            }], selector: [{\n                type: Input\n            }], configuration: [{\n                type: Input\n            }], properties: [{\n                type: Input\n            }], recreateDemo: [{\n                type: Input\n            }], form: [{\n                type: Input\n            }], expanded: [{\n                type: Input\n            }], demoOutlet: [{\n                type: ViewChild,\n                args: ['demoOutlet', { static: true, read: ViewContainerRef }]\n            }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxheWdyb3VuZC1kZW1vLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXBwL2NvbXBvbmVudHMvcGxheWdyb3VuZC9wbGF5Z3JvdW5kLWRlbW8vcGxheWdyb3VuZC1kZW1vLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXBwL2NvbXBvbmVudHMvcGxheWdyb3VuZC9wbGF5Z3JvdW5kLWRlbW8vcGxheWdyb3VuZC1kZW1vLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFFVCxVQUFVLEVBQ1YsTUFBTSxFQUVOLFFBQVEsRUFDUixLQUFLLEVBS0wsU0FBUyxFQUNULGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDcEYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBRS9FLE9BQU8sRUFDTCwrQkFBK0IsRUFDL0IsMkJBQTJCLEdBQzVCLE1BQU0scURBQXFELENBQUM7QUFDN0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUUzRCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxT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UUFBUTtzQkFEUCxLQUFLO2dCQUlOLFFBQVE7c0JBRFAsS0FBSztnQkFJTixhQUFhO3NCQURaLEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLFlBQVk7c0JBRFgsS0FBSztnQkFJTixJQUFJO3NCQURILEtBQUs7Z0JBSU4sUUFBUTtzQkFEUCxLQUFLO2dCQUlOLFVBQVU7c0JBRFQsU0FBUzt1QkFBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb21wb25lbnRSZWYsXG4gIERlc3Ryb3lSZWYsXG4gIGluamVjdCxcbiAgSW5qZWN0aW9uVG9rZW4sXG4gIEluamVjdG9yLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFR5cGUsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBOZ0RvY0RlbW9EaXNwbGF5ZXJDb21wb25lbnQgfSBmcm9tICdAbmctZG9jL2FwcC9jb21wb25lbnRzL2RlbW8tZGlzcGxheWVyJztcbmltcG9ydCB7IGZvcm1hdEh0bWwgfSBmcm9tICdAbmctZG9jL2FwcC9oZWxwZXJzJztcbmltcG9ydCB7IGdldFBsYXlncm91bmREZW1vVG9rZW4gfSBmcm9tICdAbmctZG9jL2FwcC9wcm92aWRlcnMvcGxheWdyb3VuZC1kZW1vJztcbmltcG9ydCB7IE5nRG9jRm9ybVBhcnRpYWxWYWx1ZSB9IGZyb20gJ0BuZy1kb2MvYXBwL3R5cGVzJztcbmltcG9ydCB7XG4gIGJ1aWxkUGxheWdyb3VuZERlbW9QaXBlVGVtcGxhdGUsXG4gIGJ1aWxkUGxheWdyb3VuZERlbW9UZW1wbGF0ZSxcbn0gZnJvbSAnQG5nLWRvYy9jb3JlL2hlbHBlcnMvYnVpbGQtcGxheWdyb3VuZC1kZW1vLXRlbXBsYXRlJztcbmltcG9ydCB7IG9iamVjdEtleXMgfSBmcm9tICdAbmctZG9jL2NvcmUvaGVscGVycy9vYmplY3Qta2V5cyc7XG5pbXBvcnQgeyBzdHJpbmdpZnkgfSBmcm9tICdAbmctZG9jL2NvcmUvaGVscGVycy9zdHJpbmdpZnknO1xuaW1wb3J0IHsgTmdEb2NQbGF5Z3JvdW5kQ29uZmlnLCBOZ0RvY1BsYXlncm91bmRQcm9wZXJ0aWVzIH0gZnJvbSAnQG5nLWRvYy9jb3JlL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTmdEb2NTbW9vdGhSZXNpemVDb21wb25lbnQgfSBmcm9tICdAbmctZG9jL3VpLWtpdCc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBzdGFydFdpdGgsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgTmdEb2NCYXNlUGxheWdyb3VuZCB9IGZyb20gJy4uL2Jhc2UtcGxheWdyb3VuZCc7XG5pbXBvcnQgeyBOZ0RvY1BsYXlncm91bmRGb3JtIH0gZnJvbSAnLi4vcGxheWdyb3VuZC1mb3JtJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmctZG9jLXBsYXlncm91bmQtZGVtbycsXG4gIHRlbXBsYXRlVXJsOiAnLi9wbGF5Z3JvdW5kLWRlbW8uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wbGF5Z3JvdW5kLWRlbW8uY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtOZ0RvY0RlbW9EaXNwbGF5ZXJDb21wb25lbnQsIE5nRG9jU21vb3RoUmVzaXplQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgTmdEb2NQbGF5Z3JvdW5kRGVtb0NvbXBvbmVudDxcbiAgICBUIGV4dGVuZHMgTmdEb2NQbGF5Z3JvdW5kUHJvcGVydGllcyA9IE5nRG9jUGxheWdyb3VuZFByb3BlcnRpZXMsXG4gID5cbiAgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uRGVzdHJveVxue1xuICBASW5wdXQoKVxuICBpZDogc3RyaW5nID0gJyc7XG5cbiAgQElucHV0KClcbiAgcGlwZU5hbWU6IHN0cmluZyA9ICcnO1xuXG4gIEBJbnB1dCgpXG4gIHNlbGVjdG9yOiBzdHJpbmcgPSAnJztcblxuICBASW5wdXQoKVxuICBjb25maWd1cmF0aW9uPzogTmdEb2NQbGF5Z3JvdW5kQ29uZmlnO1xuXG4gIEBJbnB1dCgpXG4gIHByb3BlcnRpZXM/OiBUO1xuXG4gIEBJbnB1dCgpXG4gIHJlY3JlYXRlRGVtbzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGZvcm0hOiBGb3JtR3JvdXA8TmdEb2NQbGF5Z3JvdW5kRm9ybT47XG5cbiAgQElucHV0KClcbiAgZXhwYW5kZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAVmlld0NoaWxkKCdkZW1vT3V0bGV0JywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSlcbiAgZGVtb091dGxldD86IFZpZXdDb250YWluZXJSZWY7XG5cbiAgcGxheWdyb3VuZERlbW8/OiB0eXBlb2YgTmdEb2NCYXNlUGxheWdyb3VuZDtcblxuICBwcm90ZWN0ZWQgY29kZSA9ICcnO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG4gIHByb3RlY3RlZCByZWFkb25seSBjaGFuZ2VEZXRlY3RvclJlZiA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gIHByb3RlY3RlZCByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gIHByaXZhdGUgZGVtb1JlZj86IENvbXBvbmVudFJlZjxOZ0RvY0Jhc2VQbGF5Z3JvdW5kPjtcbiAgcHJpdmF0ZSByZWFkb25seSB1bnN1YnNjcmliZSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGFzeW5jIG5nT25DaGFuZ2VzKHsgZm9ybSwgaWQgfTogU2ltcGxlQ2hhbmdlcyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChmb3JtIHx8IGlkKSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlJC5uZXh0KCk7XG5cbiAgICAgIGNvbnN0IGRlbW9JbmplY3RvcjogSW5qZWN0aW9uVG9rZW48QXJyYXk8dHlwZW9mIE5nRG9jQmFzZVBsYXlncm91bmQ+PiB8IHVuZGVmaW5lZCA9XG4gICAgICAgIGdldFBsYXlncm91bmREZW1vVG9rZW4odGhpcy5pZCk7XG5cbiAgICAgIGlmIChkZW1vSW5qZWN0b3IpIHtcbiAgICAgICAgY29uc3QgZGVtb3M6IEFycmF5PHR5cGVvZiBOZ0RvY0Jhc2VQbGF5Z3JvdW5kPiA9IHRoaXMuaW5qZWN0b3IuZ2V0KGRlbW9JbmplY3RvciwgW10pO1xuXG4gICAgICAgIHRoaXMucGxheWdyb3VuZERlbW8gPSBkZW1vcy5maW5kKFxuICAgICAgICAgIChkZW1vOiB0eXBlb2YgTmdEb2NCYXNlUGxheWdyb3VuZCkgPT5cbiAgICAgICAgICAgIGRlbW8uc2VsZWN0b3IgPT09IHRoaXMuc2VsZWN0b3IgfHwgZGVtby5zZWxlY3RvciA9PT0gdGhpcy5waXBlTmFtZSxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgYXdhaXQgdGhpcy51cGRhdGVEZW1vKCk7XG5cbiAgICAgIHRoaXMuZm9ybT8udmFsdWVDaGFuZ2VzXG4gICAgICAgIC5waXBlKFxuICAgICAgICAgIHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlJCksXG4gICAgICAgICAgc3RhcnRXaXRoKHRoaXMuZm9ybT8udmFsdWUpLFxuICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpLFxuICAgICAgICApXG4gICAgICAgIC5zdWJzY3JpYmUoKGRhdGE6IE5nRG9jRm9ybVBhcnRpYWxWYWx1ZTx0eXBlb2YgdGhpcy5mb3JtPikgPT4gdGhpcy51cGRhdGVEZW1vKGRhdGEpKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHVwZGF0ZURlbW8oZGF0YT86IE5nRG9jRm9ybVBhcnRpYWxWYWx1ZTx0eXBlb2YgdGhpcy5mb3JtPik6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmICh0aGlzLnJlY3JlYXRlRGVtbyB8fCAhdGhpcy5kZW1vUmVmKSB7XG4gICAgICB0aGlzLmNyZWF0ZURlbW8oKTtcbiAgICB9XG5cbiAgICBpZiAoZGF0YSkge1xuICAgICAgdGhpcy5kZW1vUmVmPy5zZXRJbnB1dCgncHJvcGVydGllcycsIGRhdGEucHJvcGVydGllcyA/PyB7fSk7XG4gICAgICB0aGlzLmRlbW9SZWY/LnNldElucHV0KCdjb250ZW50JywgZGF0YS5jb250ZW50ID8/IHt9KTtcbiAgICAgIHRoaXMuZGVtb1JlZj8uc2V0SW5wdXQoJ2FjdGlvbkRhdGEnLCB0aGlzLmNvbmZpZ3VyYXRpb24/LmRhdGEgPz8ge30pO1xuXG4gICAgICBpZiAodGhpcy5yZWNyZWF0ZURlbW8pIHtcbiAgICAgICAgdGhpcy5kZW1vUmVmPy5pbnN0YW5jZS5vblJlYXR0YWNoZWQuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICB0aGlzLmRlbW9SZWY/LmNoYW5nZURldGVjdG9yUmVmLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy51cGRhdGVDb2RlVmlldygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVEZW1vKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnBsYXlncm91bmREZW1vKSB7XG4gICAgICB0aGlzLmRlbW9SZWY/LmRlc3Ryb3koKTtcbiAgICAgIHRoaXMuZGVtb1JlZiA9IHRoaXMuZGVtb091dGxldD8uY3JlYXRlQ29tcG9uZW50KFxuICAgICAgICB0aGlzLnBsYXlncm91bmREZW1vIGFzIHVua25vd24gYXMgVHlwZTxOZ0RvY0Jhc2VQbGF5Z3JvdW5kPixcbiAgICAgICk7XG4gICAgICB0aGlzLmRlbW9SZWY/LmNoYW5nZURldGVjdG9yUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdXBkYXRlQ29kZVZpZXcoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgdGVtcGxhdGU6IHN0cmluZyA9IHRoaXMucGlwZU5hbWVcbiAgICAgID8gYnVpbGRQbGF5Z3JvdW5kRGVtb1BpcGVUZW1wbGF0ZShcbiAgICAgICAgICB0aGlzLmNvbmZpZ3VyYXRpb24/LnRlbXBsYXRlID8/ICcnLFxuICAgICAgICAgIHRoaXMucGlwZU5hbWUsXG4gICAgICAgICAgdGhpcy5nZXRBY3RpdmVDb250ZW50KCksXG4gICAgICAgICAgdGhpcy5nZXRQaXBlQWN0aXZlSW5wdXRzKCksXG4gICAgICAgIClcbiAgICAgIDogYnVpbGRQbGF5Z3JvdW5kRGVtb1RlbXBsYXRlKFxuICAgICAgICAgIHRoaXMuY29uZmlndXJhdGlvbj8udGVtcGxhdGUgPz8gJycsXG4gICAgICAgICAgdGhpcy5zZWxlY3RvcixcbiAgICAgICAgICB0aGlzLmdldEFjdGl2ZUNvbnRlbnQoKSxcbiAgICAgICAgICB0aGlzLmdldEFjdGl2ZUlucHV0cygpLFxuICAgICAgICApO1xuXG4gICAgdGhpcy5jb2RlID0gYXdhaXQgZm9ybWF0SHRtbCh0ZW1wbGF0ZSk7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWN0aXZlQ29udGVudCgpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCBmb3JtRGF0YTogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4gPVxuICAgICAgKHRoaXMuZm9ybT8uY29udHJvbHMuY29udGVudC52YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPikgPz8ge307XG5cbiAgICByZXR1cm4gb2JqZWN0S2V5cyhmb3JtRGF0YSkucmVkdWNlKChyZXN1bHQ6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sIGtleTogc3RyaW5nKSA9PiB7XG4gICAgICByZXN1bHRba2V5XSA9IGZvcm1EYXRhW2tleV0gPyB0aGlzLmNvbmZpZ3VyYXRpb24/LmNvbnRlbnQ/LltrZXldLnRlbXBsYXRlID8/ICcnIDogJyc7XG5cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfSwge30pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBY3RpdmVJbnB1dHMoKTogUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gICAgY29uc3QgZm9ybURhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID1cbiAgICAgICh0aGlzLmZvcm0/LmNvbnRyb2xzLnByb3BlcnRpZXMudmFsdWUgYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID8/IHt9O1xuXG4gICAgcmV0dXJuIG9iamVjdEtleXMoZm9ybURhdGEpLnJlZHVjZSgocmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LCBrZXk6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgaW5wdXROYW1lID0gdGhpcy5wcm9wZXJ0aWVzPy5ba2V5XT8uaW5wdXROYW1lID8/IGtleTtcbiAgICAgIGNvbnN0IHZhbHVlOiB1bmtub3duID0gZm9ybURhdGFba2V5XTtcbiAgICAgIGNvbnN0IHByb3BlcnR5OiB1bmtub3duIHwgdW5kZWZpbmVkID0gdGhpcy5kZW1vUmVmPy5pbnN0YW5jZT8uZGVmYXVsdFZhbHVlc1trZXldO1xuXG4gICAgICBpZiAocHJvcGVydHkgIT09IHZhbHVlKSB7XG4gICAgICAgIHJlc3VsdFtpbnB1dE5hbWVdID0gc3RyaW5naWZ5KHZhbHVlKS5yZXBsYWNlKC9cIi9nLCBgJ2ApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIHt9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0UGlwZUFjdGl2ZUlucHV0cygpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgICBjb25zdCBmb3JtRGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPVxuICAgICAgKHRoaXMuZm9ybT8uY29udHJvbHMucHJvcGVydGllcy52YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPz8ge307XG4gICAgbGV0IGNoYW5nZWRJbnB1dEluZGV4OiBudW1iZXIgPSAtMTtcblxuICAgIHJldHVybiBvYmplY3RLZXlzKGZvcm1EYXRhKVxuICAgICAgLm1hcCgoa2V5OiBzdHJpbmcsIGk6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZTogdW5rbm93biA9IGZvcm1EYXRhW2tleV07XG4gICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZTogdW5rbm93biB8IHVuZGVmaW5lZCA9IHRoaXMuZGVtb1JlZj8uaW5zdGFuY2U/LmRlZmF1bHRWYWx1ZXNba2V5XTtcblxuICAgICAgICBpZiAoZGVmYXVsdFZhbHVlICE9PSB2YWx1ZSkge1xuICAgICAgICAgIGNoYW5nZWRJbnB1dEluZGV4ID0gaTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBrZXk7XG4gICAgICB9KVxuICAgICAgLnNsaWNlKDAsIGNoYW5nZWRJbnB1dEluZGV4ICsgMSlcbiAgICAgIC5yZWR1Y2UoKHJlc3VsdDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiwga2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmVzdWx0W2tleV0gPSBzdHJpbmdpZnkoZm9ybURhdGFba2V5XSkucmVwbGFjZSgvXCIvZywgYCdgKTtcblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSwge30pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy51bnN1YnNjcmliZSQubmV4dCgpO1xuICAgIHRoaXMudW5zdWJzY3JpYmUkLmNvbXBsZXRlKCk7XG4gIH1cbn1cbiIsIjxuZy1kb2Mtc21vb3RoLXJlc2l6ZSBbdHJpZ2dlcl09XCJjb2RlXCI+XG4gIDxuZy1kb2MtZGVtby1kaXNwbGF5ZXJcbiAgICBbY29kZV09XCJjb2RlXCJcbiAgICBbYm9yZGVyXT1cImZhbHNlXCJcbiAgICBbZXhwYW5kZWRdPVwiZXhwYW5kZWRcIlxuICAgIGxhbmd1YWdlPVwiYW5ndWxhci1odG1sXCI+XG4gICAgPG5nLWNvbnRhaW5lciAjZGVtb091dGxldD48L25nLWNvbnRhaW5lcj5cbiAgPC9uZy1kb2MtZGVtby1kaXNwbGF5ZXI+XG48L25nLWRvYy1zbW9vdGgtcmVzaXplPlxuIl19","import { ChangeDetectionStrategy, Component, HostBinding, Input, ViewChild, ViewContainerRef, } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { isPlaygroundProperty } from '@ng-doc/app/helpers';\nimport { NgDocSanitizeHtmlPipe } from '@ng-doc/app/pipes';\nimport { NgDocLabelComponent, NgDocTooltipDirective } from '@ng-doc/ui-kit';\nimport * as i0 from \"@angular/core\";\nexport class NgDocPlaygroundPropertyComponent {\n    constructor() {\n        this.name = '';\n    }\n    ngOnChanges({ property, control, typeControl, defaultValue }) {\n        if ((property || control || typeControl || defaultValue) && this.property && this.typeControl) {\n            this.propertyTypeControl?.destroy();\n            this.propertyTypeControl = undefined;\n            if (this.typeControl && this.propertyOutlet) {\n                this.propertyTypeControl = this.propertyOutlet.createComponent(this.typeControl.control);\n                this.propertyTypeControl.instance.name = this.name;\n                this.propertyTypeControl.instance.description = this.tooltipContent;\n                this.propertyTypeControl.instance.options = isPlaygroundProperty(this.property)\n                    ? this.property.options\n                    : undefined;\n                this.propertyTypeControl.instance.default = this.defaultValue;\n                this.propertyTypeControl.instance.isManual = isPlaygroundProperty(this.property)\n                    ? this.property.isManual\n                    : undefined;\n                this.propertyTypeControl.instance.writeValue(this.control?.value);\n                this.option = this.typeControl.options;\n            }\n            if (this.control) {\n                this.control?.registerOnChange((value) => this.propertyTypeControl?.instance?.writeValue(value));\n                this.propertyTypeControl?.instance.registerOnChange((value) => this.control?.setValue(value));\n                this.propertyTypeControl?.instance.registerOnTouched(() => this.control?.markAsTouched());\n            }\n        }\n    }\n    get hasPropertyControl() {\n        return !!this.propertyTypeControl;\n    }\n    get tooltipContent() {\n        return this.property && isPlaygroundProperty(this.property)\n            ? this.property.description ?? ''\n            : '';\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: NgDocPlaygroundPropertyComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n    static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"14.0.0\", version: \"20.0.3\", type: NgDocPlaygroundPropertyComponent, isStandalone: true, selector: \"ng-doc-playground-property\", inputs: { name: \"name\", property: \"property\", typeControl: \"typeControl\", control: \"control\", defaultValue: \"defaultValue\" }, host: { properties: { \"attr.data-has-property-control\": \"this.hasPropertyControl\" } }, viewQueries: [{ propertyName: \"propertyOutlet\", first: true, predicate: [\"propertyOutlet\"], descendants: true, read: ViewContainerRef, static: true }], usesOnChanges: true, ngImport: i0, template: \"<label [ng-doc-label]=\\\"option?.hideLabel ? '' : labelContent\\\">\\n\\t<ng-template #labelContent>\\n\\t\\t<span\\n\\t\\t\\t[ngDocTooltip]=\\\"tooltipTemplate\\\"\\n\\t\\t\\t[canOpen]=\\\"!!tooltipContent\\\"\\n\\t\\t\\t[positions]=\\\"['left-center', 'top-right', 'bottom-right']\\\"\\n\\t\\t\\t>{{ name }}</span\\n\\t\\t>\\n\\t\\t<ng-template #tooltipTemplate>\\n\\t\\t\\t<div [innerHTML]=\\\"tooltipContent | ngDocSanitizeHtml\\\"></div>\\n\\t\\t</ng-template>\\n\\t</ng-template>\\n\\t<ng-container #propertyOutlet></ng-container>\\n</label>\\n\", styles: [\":host{display:block}:host[data-has-property-control=false]{display:none}\\n\"], dependencies: [{ kind: \"component\", type: NgDocLabelComponent, selector: \"label[ng-doc-label]\", inputs: [\"ng-doc-label\", \"align\"] }, { kind: \"directive\", type: NgDocTooltipDirective, selector: \"[ngDocTooltip]\", inputs: [\"ngDocTooltip\", \"delay\", \"displayOrigin\", \"pointerOrigin\", \"positions\", \"canOpen\", \"panelClass\", \"minHeight\", \"maxHeight\", \"height\", \"minWidth\", \"maxWidth\", \"width\"], outputs: [\"beforeOpen\", \"afterOpen\", \"beforeClose\", \"afterClose\"], exportAs: [\"ngDocTooltip\"] }, { kind: \"pipe\", type: NgDocSanitizeHtmlPipe, name: \"ngDocSanitizeHtml\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: NgDocPlaygroundPropertyComponent, decorators: [{\n            type: Component,\n            args: [{ selector: 'ng-doc-playground-property', changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgDocLabelComponent, NgDocTooltipDirective, NgDocSanitizeHtmlPipe], template: \"<label [ng-doc-label]=\\\"option?.hideLabel ? '' : labelContent\\\">\\n\\t<ng-template #labelContent>\\n\\t\\t<span\\n\\t\\t\\t[ngDocTooltip]=\\\"tooltipTemplate\\\"\\n\\t\\t\\t[canOpen]=\\\"!!tooltipContent\\\"\\n\\t\\t\\t[positions]=\\\"['left-center', 'top-right', 'bottom-right']\\\"\\n\\t\\t\\t>{{ name }}</span\\n\\t\\t>\\n\\t\\t<ng-template #tooltipTemplate>\\n\\t\\t\\t<div [innerHTML]=\\\"tooltipContent | ngDocSanitizeHtml\\\"></div>\\n\\t\\t</ng-template>\\n\\t</ng-template>\\n\\t<ng-container #propertyOutlet></ng-container>\\n</label>\\n\", styles: [\":host{display:block}:host[data-has-property-control=false]{display:none}\\n\"] }]\n        }], propDecorators: { name: [{\n                type: Input\n            }], property: [{\n                type: Input\n            }], typeControl: [{\n                type: Input\n            }], control: [{\n                type: Input\n            }], defaultValue: [{\n                type: Input\n            }], propertyOutlet: [{\n                type: ViewChild,\n                args: ['propertyOutlet', { read: ViewContainerRef, static: true }]\n            }], hasPropertyControl: [{\n                type: HostBinding,\n                args: ['attr.data-has-property-control']\n            }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxheWdyb3VuZC1wcm9wZXJ0eS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwcC9jb21wb25lbnRzL3BsYXlncm91bmQvcGxheWdyb3VuZC1wcm9wZXJ0eS9wbGF5Z3JvdW5kLXByb3BlcnR5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXBwL2NvbXBvbmVudHMvcGxheWdyb3VuZC9wbGF5Z3JvdW5kLXByb3BlcnR5L3BsYXlncm91bmQtcHJvcGVydHkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUN2QixTQUFTLEVBRVQsV0FBVyxFQUNYLEtBQUssRUFHTCxTQUFTLEVBQ1QsZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQU0zRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFTNUUsTUFBTSxPQUFPLGdDQUFnQztJQVA3QztRQVNFLFNBQUksR0FBVyxFQUFFLENBQUM7S0ErRG5CO0lBM0NDLFdBQVcsQ0FBQyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBaUI7UUFDekUsSUFBSSxDQUFDLFFBQVEsSUFBSSxPQUFPLElBQUksV0FBVyxJQUFJLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzlGLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUNwQyxJQUFJLENBQUMsbUJB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S0FBSztnQkFJTixjQUFjO3NCQURiLFNBQVM7dUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkF3Q2pFLGtCQUFrQjtzQkFEckIsV0FBVzt1QkFBQyxnQ0FBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb21wb25lbnRSZWYsXG4gIEhvc3RCaW5kaW5nLFxuICBJbnB1dCxcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBpc1BsYXlncm91bmRQcm9wZXJ0eSB9IGZyb20gJ0BuZy1kb2MvYXBwL2hlbHBlcnMnO1xuaW1wb3J0IHtcbiAgTmdEb2NQcm92aWRlZFR5cGVDb250cm9sLFxuICBOZ0RvY1R5cGVDb250cm9sLFxuICBOZ0RvY1R5cGVDb250cm9sUHJvdmlkZXJPcHRpb25zLFxufSBmcm9tICdAbmctZG9jL2FwcC9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE5nRG9jU2FuaXRpemVIdG1sUGlwZSB9IGZyb20gJ0BuZy1kb2MvYXBwL3BpcGVzJztcbmltcG9ydCB7IE5nRG9jUGxheWdyb3VuZENvbnRlbnQsIE5nRG9jUGxheWdyb3VuZFByb3BlcnR5IH0gZnJvbSAnQG5nLWRvYy9jb3JlL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTmdEb2NMYWJlbENvbXBvbmVudCwgTmdEb2NUb29sdGlwRGlyZWN0aXZlIH0gZnJvbSAnQG5nLWRvYy91aS1raXQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICduZy1kb2MtcGxheWdyb3VuZC1wcm9wZXJ0eScsXG4gIHRlbXBsYXRlVXJsOiAnLi9wbGF5Z3JvdW5kLXByb3BlcnR5LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcGxheWdyb3VuZC1wcm9wZXJ0eS5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW05nRG9jTGFiZWxDb21wb25lbnQsIE5nRG9jVG9vbHRpcERpcmVjdGl2ZSwgTmdEb2NTYW5pdGl6ZUh0bWxQaXBlXSxcbn0pXG5leHBvcnQgY2xhc3MgTmdEb2NQbGF5Z3JvdW5kUHJvcGVydHlDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICBASW5wdXQoKVxuICBuYW1lOiBzdHJpbmcgPSAnJztcblxuICBASW5wdXQoKVxuICBwcm9wZXJ0eT86IE5nRG9jUGxheWdyb3VuZFByb3BlcnR5IHwgTmdEb2NQbGF5Z3JvdW5kQ29udGVudDtcblxuICBASW5wdXQoKVxuICB0eXBlQ29udHJvbD86IE5nRG9jUHJvdmlkZWRUeXBlQ29udHJvbDtcblxuICBASW5wdXQoKVxuICBjb250cm9sPzogRm9ybUNvbnRyb2w7XG5cbiAgQElucHV0KClcbiAgZGVmYXVsdFZhbHVlPzogdW5rbm93bjtcblxuICBAVmlld0NoaWxkKCdwcm9wZXJ0eU91dGxldCcsIHsgcmVhZDogVmlld0NvbnRhaW5lclJlZiwgc3RhdGljOiB0cnVlIH0pXG4gIHByb3BlcnR5T3V0bGV0PzogVmlld0NvbnRhaW5lclJlZjtcblxuICBwcm90ZWN0ZWQgb3B0aW9uPzogTmdEb2NUeXBlQ29udHJvbFByb3ZpZGVyT3B0aW9ucztcbiAgcHJpdmF0ZSBwcm9wZXJ0eVR5cGVDb250cm9sPzogQ29tcG9uZW50UmVmPE5nRG9jVHlwZUNvbnRyb2w+O1xuXG4gIG5nT25DaGFuZ2VzKHsgcHJvcGVydHksIGNvbnRyb2wsIHR5cGVDb250cm9sLCBkZWZhdWx0VmFsdWUgfTogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmICgocHJvcGVydHkgfHwgY29udHJvbCB8fCB0eXBlQ29udHJvbCB8fCBkZWZhdWx0VmFsdWUpICYmIHRoaXMucHJvcGVydHkgJiYgdGhpcy50eXBlQ29udHJvbCkge1xuICAgICAgdGhpcy5wcm9wZXJ0eVR5cGVDb250cm9sPy5kZXN0cm95KCk7XG4gICAgICB0aGlzLnByb3BlcnR5VHlwZUNvbnRyb2wgPSB1bmRlZmluZWQ7XG5cbiAgICAgIGlmICh0aGlzLnR5cGVDb250cm9sICYmIHRoaXMucHJvcGVydHlPdXRsZXQpIHtcbiAgICAgICAgdGhpcy5wcm9wZXJ0eVR5cGVDb250cm9sID0gdGhpcy5wcm9wZXJ0eU91dGxldC5jcmVhdGVDb21wb25lbnQodGhpcy50eXBlQ29udHJvbC5jb250cm9sKTtcbiAgICAgICAgdGhpcy5wcm9wZXJ0eVR5cGVDb250cm9sLmluc3RhbmNlLm5hbWUgPSB0aGlzLm5hbWU7XG4gICAgICAgIHRoaXMucHJvcGVydHlUeXBlQ29udHJvbC5pbnN0YW5jZS5kZXNjcmlwdGlvbiA9IHRoaXMudG9vbHRpcENvbnRlbnQ7XG4gICAgICAgIHRoaXMucHJvcGVydHlUeXBlQ29udHJvbC5pbnN0YW5jZS5vcHRpb25zID0gaXNQbGF5Z3JvdW5kUHJvcGVydHkodGhpcy5wcm9wZXJ0eSlcbiAgICAgICAgICA/IHRoaXMucHJvcGVydHkub3B0aW9uc1xuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnByb3BlcnR5VHlwZUNvbnRyb2wuaW5zdGFuY2UuZGVmYXVsdCA9IHRoaXMuZGVmYXVsdFZhbHVlO1xuICAgICAgICB0aGlzLnByb3BlcnR5VHlwZUNvbnRyb2wuaW5zdGFuY2UuaXNNYW51YWwgPSBpc1BsYXlncm91bmRQcm9wZXJ0eSh0aGlzLnByb3BlcnR5KVxuICAgICAgICAgID8gdGhpcy5wcm9wZXJ0eS5pc01hbnVhbFxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICB0aGlzLnByb3BlcnR5VHlwZUNvbnRyb2wuaW5zdGFuY2Uud3JpdGVWYWx1ZSh0aGlzLmNvbnRyb2w/LnZhbHVlKTtcblxuICAgICAgICB0aGlzLm9wdGlvbiA9IHRoaXMudHlwZUNvbnRyb2wub3B0aW9ucztcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY29udHJvbCkge1xuICAgICAgICB0aGlzLmNvbnRyb2w/LnJlZ2lzdGVyT25DaGFuZ2UoKHZhbHVlOiBzdHJpbmcpID0+XG4gICAgICAgICAgdGhpcy5wcm9wZXJ0eVR5cGVDb250cm9sPy5pbnN0YW5jZT8ud3JpdGVWYWx1ZSh2YWx1ZSksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucHJvcGVydHlUeXBlQ29udHJvbD8uaW5zdGFuY2UucmVnaXN0ZXJPbkNoYW5nZSgodmFsdWU6IHVua25vd24pID0+XG4gICAgICAgICAgdGhpcy5jb250cm9sPy5zZXRWYWx1ZSh2YWx1ZSksXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMucHJvcGVydHlUeXBlQ29udHJvbD8uaW5zdGFuY2UucmVnaXN0ZXJPblRvdWNoZWQoKCkgPT4gdGhpcy5jb250cm9sPy5tYXJrQXNUb3VjaGVkKCkpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLWhhcy1wcm9wZXJ0eS1jb250cm9sJylcbiAgZ2V0IGhhc1Byb3BlcnR5Q29udHJvbCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLnByb3BlcnR5VHlwZUNvbnRyb2w7XG4gIH1cblxuICBnZXQgdG9vbHRpcENvbnRlbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9wZXJ0eSAmJiBpc1BsYXlncm91bmRQcm9wZXJ0eSh0aGlzLnByb3BlcnR5KVxuICAgICAgPyB0aGlzLnByb3BlcnR5LmRlc2NyaXB0aW9uID8/ICcnXG4gICAgICA6ICcnO1xuICB9XG59XG4iLCI8bGFiZWwgW25nLWRvYy1sYWJlbF09XCJvcHRpb24/LmhpZGVMYWJlbCA/ICcnIDogbGFiZWxDb250ZW50XCI+XG5cdDxuZy10ZW1wbGF0ZSAjbGFiZWxDb250ZW50PlxuXHRcdDxzcGFuXG5cdFx0XHRbbmdEb2NUb29sdGlwXT1cInRvb2x0aXBUZW1wbGF0ZVwiXG5cdFx0XHRbY2FuT3Blbl09XCIhIXRvb2x0aXBDb250ZW50XCJcblx0XHRcdFtwb3NpdGlvbnNdPVwiWydsZWZ0LWNlbnRlcicsICd0b3AtcmlnaHQnLCAnYm90dG9tLXJpZ2h0J11cIlxuXHRcdFx0Pnt7IG5hbWUgfX08L3NwYW5cblx0XHQ+XG5cdFx0PG5nLXRlbXBsYXRlICN0b29sdGlwVGVtcGxhdGU+XG5cdFx0XHQ8ZGl2IFtpbm5lckhUTUxdPVwidG9vbHRpcENvbnRlbnQgfCBuZ0RvY1Nhbml0aXplSHRtbFwiPjwvZGl2PlxuXHRcdDwvbmctdGVtcGxhdGU+XG5cdDwvbmctdGVtcGxhdGU+XG5cdDxuZy1jb250YWluZXIgI3Byb3BlcnR5T3V0bGV0PjwvbmctY29udGFpbmVyPlxuPC9sYWJlbD5cbiJdfQ==","import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\nimport { AsyncPipe, KeyValuePipe } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, EventEmitter, inject, Injector, Input, isDevMode, Output, } from '@angular/core';\nimport { FormGroup, FormsModule } from '@angular/forms';\nimport { isPlaygroundProperty } from '@ng-doc/app/helpers';\nimport { getTokenForType } from '@ng-doc/app/providers/type-control';\nimport { extractValueOrThrow } from '@ng-doc/core/helpers/extract-value';\nimport { isPresent } from '@ng-doc/core/helpers/is-present';\nimport { objectKeys } from '@ng-doc/core/helpers/object-keys';\nimport { NgDocBindPipe, NgDocButtonComponent, NgDocCheckboxComponent, NgDocExecutePipe, NgDocIconComponent, NgDocTextComponent, NgDocTextRightDirective, NgDocTooltipDirective, } from '@ng-doc/ui-kit';\nimport { map } from 'rxjs/operators';\nimport { NgDocPlaygroundPropertyComponent } from '../playground-property/playground-property.component';\nimport * as i0 from \"@angular/core\";\nimport * as i1 from \"@angular/forms\";\nexport class NgDocPlaygroundPropertiesComponent {\n    constructor() {\n        this.breakpointObserver = inject(BreakpointObserver);\n        this.injector = inject(Injector);\n        this.ignoreInputs = [];\n        this.hideSidePanel = false;\n        this.recreateDemo = false;\n        this.showResetButton = false;\n        this.recreateDemoChange = new EventEmitter();\n        this.resetForm = new EventEmitter();\n        this.breakpoints = [Breakpoints.XSmall];\n        this.propertyControls = [];\n        this.contentTypeControl = this.getControlForType('boolean');\n        this.observer = this.breakpointObserver\n            .observe(this.breakpoints)\n            .pipe(map((state) => state.matches));\n    }\n    ngOnChanges({ properties }) {\n        if (properties && this.properties) {\n            this.propertyControls = objectKeys(this.properties)\n                .filter((key) => this.ignoreInputs?.includes(String(key)) !== true)\n                .map((key) => {\n                if (this.properties) {\n                    const property = this.properties[key];\n                    const typeControl = this.getTypeControl(property);\n                    if (typeControl) {\n                        return {\n                            propertyName: String(key),\n                            property,\n                            typeControl,\n                        };\n                    }\n                }\n                return null;\n            })\n                .filter(isPresent)\n                .sort((a, b) => {\n                const aOrder = a.typeControl.options?.order;\n                const bOrder = b.typeControl.options?.order;\n                if (isPresent(aOrder) && isPresent(bOrder)) {\n                    return aOrder - bOrder;\n                }\n                if (isPresent(aOrder)) {\n                    return -1;\n                }\n                if (isPresent(bOrder)) {\n                    return 1;\n                }\n                return a.property.inputName.localeCompare(b.property.inputName);\n            });\n        }\n    }\n    getFormControl(controlType, key) {\n        return this.form.get(controlType)?.get(key);\n    }\n    getTypeControl(property) {\n        const type = property.type;\n        const typeControl = this.getControlForType(type) ??\n            this.getControlForTypeAlias(isPlaygroundProperty(property) ? property.options : undefined, property.isManual);\n        if (!typeControl && isDevMode()) {\n            console.warn(`NgDocPlayground didn't find the control for the @Input \"${property.inputName}\", the type \"${type}\" was not recognized'`);\n        }\n        return typeControl;\n    }\n    getControlForType(type) {\n        const token = getTokenForType(type);\n        return token ? this.injector.get(token) : undefined;\n    }\n    getControlForTypeAlias(options, isManual) {\n        if (options && options.length) {\n            let optionsIsValid = true;\n            if (!isManual) {\n                try {\n                    // checking that all values are extractable\n                    options.forEach((item) => extractValueOrThrow(item));\n                }\n                catch {\n                    optionsIsValid = false;\n                }\n            }\n            if (optionsIsValid) {\n                const token = getTokenForType('NgDocTypeAlias');\n                return token ? this.injector.get(token) : undefined;\n            }\n        }\n        return undefined;\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: NgDocPlaygroundPropertiesComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n    static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.3\", type: NgDocPlaygroundPropertiesComponent, isStandalone: true, selector: \"ng-doc-playground-properties\", inputs: { form: \"form\", properties: \"properties\", ignoreInputs: \"ignoreInputs\", dynamicContent: \"dynamicContent\", defaultValues: \"defaultValues\", hideSidePanel: \"hideSidePanel\", recreateDemo: \"recreateDemo\", showResetButton: \"showResetButton\" }, outputs: { recreateDemoChange: \"recreateDemoChange\", resetForm: \"resetForm\" }, usesOnChanges: true, ngImport: i0, template: \"@if (defaultValues) {\\n  <div class=\\\"ng-doc-playground-properties-wrapper\\\" [class.vertical]=\\\"observer | async\\\">\\n    <div class=\\\"ng-doc-playground-demos\\\">\\n      <ng-content></ng-content>\\n    </div>\\n    @if (!hideSidePanel) {\\n      <div class=\\\"ng-doc-playground-properties\\\">\\n        <div class=\\\"ng-doc-playground-header\\\">\\n          <h4 ng-doc-text>Playground</h4>\\n          @if (showResetButton) {\\n            <button ng-doc-button color=\\\"alert\\\" (click)=\\\"resetForm.emit()\\\">Reset</button>\\n          }\\n        </div>\\n        <div class=\\\"ng-doc-playground-setting\\\">\\n          <ng-doc-checkbox\\n            [(ngModel)]=\\\"recreateDemo\\\"\\n            (ngModelChange)=\\\"recreateDemoChange.emit($event)\\\">\\n            <span\\n              ng-doc-text\\n              [ngDocTooltip]=\\\"'Recreates demo everytime\\\\none of the input has changed'\\\"\\n              [positions]=\\\"['bottom-right', 'left-center']\\\">\\n              Recreate\\n              <ng-doc-icon icon=\\\"info\\\" ngDocTextRight></ng-doc-icon>\\n            </span>\\n          </ng-doc-checkbox>\\n        </div>\\n        <div class=\\\"ng-doc-playground-divider\\\"></div>\\n        @if (propertyControls.length) {\\n          <h5 class=\\\"ng-doc-title\\\" ng-doc-text>Settings</h5>\\n          @for (propertyControl of propertyControls; track propertyControl) {\\n            <ng-doc-playground-property\\n              [name]=\\\"propertyControl.property.inputName\\\"\\n              [property]=\\\"propertyControl.property\\\"\\n              [typeControl]=\\\"propertyControl.typeControl\\\"\\n              [defaultValue]=\\\"defaultValues[propertyControl.propertyName]\\\"\\n              [control]=\\\"\\n                getFormControl | bind: this | execute: 'properties' : propertyControl.propertyName\\n              \\\">\\n            </ng-doc-playground-property>\\n          }\\n        }\\n        @if ((dynamicContent | keyvalue)?.length) {\\n          <h5 class=\\\"ng-doc-title\\\" ng-doc-text>Content</h5>\\n          @for (content of dynamicContent | keyvalue; track content) {\\n            <ng-doc-playground-property\\n              [name]=\\\"content.value.label\\\"\\n              [property]=\\\"content.value\\\"\\n              [typeControl]=\\\"contentTypeControl\\\"\\n              [control]=\\\"getFormControl | bind: this | execute: 'content' : content.key\\\">\\n            </ng-doc-playground-property>\\n          }\\n        }\\n      </div>\\n    }\\n  </div>\\n}\\n\", styles: [\":host .ng-doc-playground-properties-wrapper{position:relative;display:flex;align-items:flex-start;gap:calc(var(--ng-doc-base-gutter) * 2)}:host .ng-doc-playground-properties-wrapper.vertical{flex-direction:column}:host .ng-doc-playground-properties-wrapper.vertical .ng-doc-playground-demos{margin-right:0;margin-bottom:calc(var(--ng-doc-base-gutter) * 2)}:host .ng-doc-playground-properties-wrapper.vertical .ng-doc-playground-properties{width:100%}:host .ng-doc-playground-properties-wrapper .ng-doc-playground-demos{position:sticky;display:flex;flex-direction:column;width:100%;min-width:0;z-index:4;top:calc(var(--ng-doc-page-sticky-offset) + var(--ng-doc-base-gutter))}:host .ng-doc-playground-properties-wrapper .ng-doc-playground-properties{flex-shrink:0;align-self:normal;width:300px;padding:calc(var(--ng-doc-base-gutter) * 2) calc(var(--ng-doc-base-gutter) * 3);background-color:var(--ng-doc-base-1);border-radius:var(--ng-doc-base-gutter);border:1px solid var(--ng-doc-border-color)}:host .ng-doc-playground-properties-wrapper .ng-doc-playground-properties ng-doc-playground-property:not(:last-child){margin-bottom:calc(var(--ng-doc-base-gutter) * 2)}:host .ng-doc-playground-properties-wrapper .ng-doc-playground-properties .ng-doc-playground-controls{display:flex;justify-content:flex-end}:host .ng-doc-playground-properties-wrapper .ng-doc-playground-properties .ng-doc-playground-header{display:flex;align-items:center;justify-content:space-between;height:40px;margin-bottom:calc(var(--ng-doc-base-gutter) * 2)}:host .ng-doc-playground-properties-wrapper .ng-doc-playground-properties .ng-doc-playground-header h4{margin:0}:host .ng-doc-playground-properties-wrapper .ng-doc-playground-properties .ng-doc-playground-setting{display:flex;flex-direction:column}:host .ng-doc-playground-properties-wrapper .ng-doc-title{margin-top:0;margin-bottom:calc(var(--ng-doc-base-gutter) + var(--ng-doc-base-gutter) / 2)}:host .ng-doc-playground-divider{margin:calc(var(--ng-doc-base-gutter) * 2) 0;height:1px;background-color:var(--ng-doc-base-2)}\\n\"], dependencies: [{ kind: \"component\", type: NgDocTextComponent, selector: \"[ng-doc-text]\", inputs: [\"size\", \"color\", \"align\", \"absoluteContent\"] }, { kind: \"component\", type: NgDocButtonComponent, selector: \"button[ng-doc-button], a[ng-doc-button], button[ng-doc-button-flat], a[ng-doc-button-flat], button[ng-doc-button-text], a[ng-doc-button-text]\", inputs: [\"size\", \"color\", \"rounded\"] }, { kind: \"component\", type: NgDocCheckboxComponent, selector: \"ng-doc-checkbox\", inputs: [\"color\"] }, { kind: \"ngmodule\", type: FormsModule }, { kind: \"directive\", type: i1.NgControlStatus, selector: \"[formControlName],[ngModel],[formControl]\" }, { kind: \"directive\", type: i1.NgModel, selector: \"[ngModel]:not([formControlName]):not([formControl])\", inputs: [\"name\", \"disabled\", \"ngModel\", \"ngModelOptions\"], outputs: [\"ngModelChange\"], exportAs: [\"ngModel\"] }, { kind: \"directive\", type: NgDocTooltipDirective, selector: \"[ngDocTooltip]\", inputs: [\"ngDocTooltip\", \"delay\", \"displayOrigin\", \"pointerOrigin\", \"positions\", \"canOpen\", \"panelClass\", \"minHeight\", \"maxHeight\", \"height\", \"minWidth\", \"maxWidth\", \"width\"], outputs: [\"beforeOpen\", \"afterOpen\", \"beforeClose\", \"afterClose\"], exportAs: [\"ngDocTooltip\"] }, { kind: \"component\", type: NgDocIconComponent, selector: \"ng-doc-icon\", inputs: [\"icon\", \"customIcon\", \"size\"] }, { kind: \"directive\", type: NgDocTextRightDirective, selector: \"[ngDocTextRight]\" }, { kind: \"component\", type: NgDocPlaygroundPropertyComponent, selector: \"ng-doc-playground-property\", inputs: [\"name\", \"property\", \"typeControl\", \"control\", \"defaultValue\"] }, { kind: \"pipe\", type: AsyncPipe, name: \"async\" }, { kind: \"pipe\", type: KeyValuePipe, name: \"keyvalue\" }, { kind: \"pipe\", type: NgDocBindPipe, name: \"bind\" }, { kind: \"pipe\", type: NgDocExecutePipe, name: \"execute\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: NgDocPlaygroundPropertiesComponent, decorators: [{\n            type: Component,\n            args: [{ selector: 'ng-doc-playground-properties', changeDetection: ChangeDetectionStrategy.OnPush, imports: [\n                        NgDocTextComponent,\n                        NgDocButtonComponent,\n                        NgDocCheckboxComponent,\n                        FormsModule,\n                        NgDocTooltipDirective,\n                        NgDocIconComponent,\n                        NgDocTextRightDirective,\n                        NgDocPlaygroundPropertyComponent,\n                        AsyncPipe,\n                        KeyValuePipe,\n                        NgDocBindPipe,\n                        NgDocExecutePipe,\n                    ], template: \"@if (defaultValues) {\\n  <div class=\\\"ng-doc-playground-properties-wrapper\\\" [class.vertical]=\\\"observer | async\\\">\\n    <div class=\\\"ng-doc-playground-demos\\\">\\n      <ng-content></ng-content>\\n    </div>\\n    @if (!hideSidePanel) {\\n      <div class=\\\"ng-doc-playground-properties\\\">\\n        <div class=\\\"ng-doc-playground-header\\\">\\n          <h4 ng-doc-text>Playground</h4>\\n          @if (showResetButton) {\\n            <button ng-doc-button color=\\\"alert\\\" (click)=\\\"resetForm.emit()\\\">Reset</button>\\n          }\\n        </div>\\n        <div class=\\\"ng-doc-playground-setting\\\">\\n          <ng-doc-checkbox\\n            [(ngModel)]=\\\"recreateDemo\\\"\\n            (ngModelChange)=\\\"recreateDemoChange.emit($event)\\\">\\n            <span\\n              ng-doc-text\\n              [ngDocTooltip]=\\\"'Recreates demo everytime\\\\none of the input has changed'\\\"\\n              [positions]=\\\"['bottom-right', 'left-center']\\\">\\n              Recreate\\n              <ng-doc-icon icon=\\\"info\\\" ngDocTextRight></ng-doc-icon>\\n            </span>\\n          </ng-doc-checkbox>\\n        </div>\\n        <div class=\\\"ng-doc-playground-divider\\\"></div>\\n        @if (propertyControls.length) {\\n          <h5 class=\\\"ng-doc-title\\\" ng-doc-text>Settings</h5>\\n          @for (propertyControl of propertyControls; track propertyControl) {\\n            <ng-doc-playground-property\\n              [name]=\\\"propertyControl.property.inputName\\\"\\n              [property]=\\\"propertyControl.property\\\"\\n              [typeControl]=\\\"propertyControl.typeControl\\\"\\n              [defaultValue]=\\\"defaultValues[propertyControl.propertyName]\\\"\\n              [control]=\\\"\\n                getFormControl | bind: this | execute: 'properties' : propertyControl.propertyName\\n              \\\">\\n            </ng-doc-playground-property>\\n          }\\n        }\\n        @if ((dynamicContent | keyvalue)?.length) {\\n          <h5 class=\\\"ng-doc-title\\\" ng-doc-text>Content</h5>\\n          @for (content of dynamicContent | keyvalue; track content) {\\n            <ng-doc-playground-property\\n              [name]=\\\"content.value.label\\\"\\n              [property]=\\\"content.value\\\"\\n              [typeControl]=\\\"contentTypeControl\\\"\\n              [control]=\\\"getFormControl | bind: this | execute: 'content' : content.key\\\">\\n            </ng-doc-playground-property>\\n          }\\n        }\\n      </div>\\n    }\\n  </div>\\n}\\n\", styles: [\":host .ng-doc-playground-properties-wrapper{position:relative;display:flex;align-items:flex-start;gap:calc(var(--ng-doc-base-gutter) * 2)}:host .ng-doc-playground-properties-wrapper.vertical{flex-direction:column}:host .ng-doc-playground-properties-wrapper.vertical .ng-doc-playground-demos{margin-right:0;margin-bottom:calc(var(--ng-doc-base-gutter) * 2)}:host .ng-doc-playground-properties-wrapper.vertical .ng-doc-playground-properties{width:100%}:host .ng-doc-playground-properties-wrapper .ng-doc-playground-demos{position:sticky;display:flex;flex-direction:column;width:100%;min-width:0;z-index:4;top:calc(var(--ng-doc-page-sticky-offset) + var(--ng-doc-base-gutter))}:host .ng-doc-playground-properties-wrapper .ng-doc-playground-properties{flex-shrink:0;align-self:normal;width:300px;padding:calc(var(--ng-doc-base-gutter) * 2) calc(var(--ng-doc-base-gutter) * 3);background-color:var(--ng-doc-base-1);border-radius:var(--ng-doc-base-gutter);border:1px solid var(--ng-doc-border-color)}:host .ng-doc-playground-properties-wrapper .ng-doc-playground-properties ng-doc-playground-property:not(:last-child){margin-bottom:calc(var(--ng-doc-base-gutter) * 2)}:host .ng-doc-playground-properties-wrapper .ng-doc-playground-properties .ng-doc-playground-controls{display:flex;justify-content:flex-end}:host .ng-doc-playground-properties-wrapper .ng-doc-playground-properties .ng-doc-playground-header{display:flex;align-items:center;justify-content:space-between;height:40px;margin-bottom:calc(var(--ng-doc-base-gutter) * 2)}:host .ng-doc-playground-properties-wrapper .ng-doc-playground-properties .ng-doc-playground-header h4{margin:0}:host .ng-doc-playground-properties-wrapper .ng-doc-playground-properties .ng-doc-playground-setting{display:flex;flex-direction:column}:host .ng-doc-playground-properties-wrapper .ng-doc-title{margin-top:0;margin-bottom:calc(var(--ng-doc-base-gutter) + var(--ng-doc-base-gutter) / 2)}:host .ng-doc-playground-divider{margin:calc(var(--ng-doc-base-gutter) * 2) 0;height:1px;background-color:var(--ng-doc-base-2)}\\n\"] }]\n        }], ctorParameters: () => [], propDecorators: { form: [{\n                type: Input\n            }], properties: [{\n                type: Input\n            }], ignoreInputs: [{\n                type: Input\n            }], dynamicContent: [{\n                type: Input\n            }], defaultValues: [{\n                type: Input\n            }], hideSidePanel: [{\n                type: Input\n            }], recreateDemo: [{\n                type: Input\n            }], showResetButton: [{\n                type: Input\n            }], recreateDemoChange: [{\n                type: Output\n            }], resetForm: [{\n                type: Output\n            }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxheWdyb3VuZC1wcm9wZXJ0aWVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXBwL2NvbXBvbmVudHMvcGxheWdyb3VuZC9wbGF5Z3JvdW5kLXByb3BlcnRpZXMvcGxheWdyb3VuZC1wcm9wZXJ0aWVzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvYXBwL2NvbXBvbmVudHMvcGxheWdyb3VuZC9wbGF5Z3JvdW5kLXByb3BlcnRpZXMvcGxheWdyb3VuZC1wcm9wZXJ0aWVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQW1CLE1BQU0scUJBQXFCLENBQUM7QUFDdkYsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxRCxPQUFPLEVBQ0wsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUVOLFFBQVEsRUFDUixLQUFLLEVBQ0wsU0FBUyxFQUVULE1BQU0sR0FFUCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQWUsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRTNELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNyRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDNUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBTTlELE9BQU8sRUFDTCxhQUFhLEVBQ2Isb0JBQW9CLEVBQ3BCLHNCQUFzQixFQUN0QixnQkFBZ0IsRUFDaEIsa0JBQWtCLEVB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QUNoQyxTQUFTO3dCQUNULFlBQVk7d0JBQ1osYUFBYTt3QkFDYixnQkFBZ0I7cUJBQ2pCO3dEQVdELElBQUk7c0JBREgsS0FBSztnQkFJTixVQUFVO3NCQURULEtBQUs7Z0JBSU4sWUFBWTtzQkFEWCxLQUFLO2dCQUlOLGNBQWM7c0JBRGIsS0FBSztnQkFJTixhQUFhO3NCQURaLEtBQUs7Z0JBSU4sYUFBYTtzQkFEWixLQUFLO2dCQUlOLFlBQVk7c0JBRFgsS0FBSztnQkFJTixlQUFlO3NCQURkLEtBQUs7Z0JBSU4sa0JBQWtCO3NCQURqQixNQUFNO2dCQUlQLFNBQVM7c0JBRFIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJyZWFrcG9pbnRPYnNlcnZlciwgQnJlYWtwb2ludHMsIEJyZWFrcG9pbnRTdGF0ZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xuaW1wb3J0IHsgQXN5bmNQaXBlLCBLZXlWYWx1ZVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgRXZlbnRFbWl0dGVyLFxuICBpbmplY3QsXG4gIEluamVjdGlvblRva2VuLFxuICBJbmplY3RvcixcbiAgSW5wdXQsXG4gIGlzRGV2TW9kZSxcbiAgT25DaGFuZ2VzLFxuICBPdXRwdXQsXG4gIFNpbXBsZUNoYW5nZXMsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBpc1BsYXlncm91bmRQcm9wZXJ0eSB9IGZyb20gJ0BuZy1kb2MvYXBwL2hlbHBlcnMnO1xuaW1wb3J0IHsgTmdEb2NQcm92aWRlZFR5cGVDb250cm9sIH0gZnJvbSAnQG5nLWRvYy9hcHAvaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBnZXRUb2tlbkZvclR5cGUgfSBmcm9tICdAbmctZG9jL2FwcC9wcm92aWRlcnMvdHlwZS1jb250cm9sJztcbmltcG9ydCB7IGV4dHJhY3RWYWx1ZU9yVGhyb3cgfSBmcm9tICdAbmctZG9jL2NvcmUvaGVscGVycy9leHRyYWN0LXZhbHVlJztcbmltcG9ydCB7IGlzUHJlc2VudCB9IGZyb20gJ0BuZy1kb2MvY29yZS9oZWxwZXJzL2lzLXByZXNlbnQnO1xuaW1wb3J0IHsgb2JqZWN0S2V5cyB9IGZyb20gJ0BuZy1kb2MvY29yZS9oZWxwZXJzL29iamVjdC1rZXlzJztcbmltcG9ydCB7XG4gIE5nRG9jUGxheWdyb3VuZENvbnRlbnQsXG4gIE5nRG9jUGxheWdyb3VuZFByb3BlcnRpZXMsXG4gIE5nRG9jUGxheWdyb3VuZFByb3BlcnR5LFxufSBmcm9tICdAbmctZG9jL2NvcmUvaW50ZXJmYWNlcyc7XG5pbXBvcnQge1xuICBOZ0RvY0JpbmRQaXBlLFxuICBOZ0RvY0J1dHRvbkNvbXBvbmVudCxcbiAgTmdEb2NDaGVja2JveENvbXBvbmVudCxcbiAgTmdEb2NFeGVjdXRlUGlwZSxcbiAgTmdEb2NJY29uQ29tcG9uZW50LFxuICBOZ0RvY1RleHRDb21wb25lbnQsXG4gIE5nRG9jVGV4dFJpZ2h0RGlyZWN0aXZlLFxuICBOZ0RvY1Rvb2x0aXBEaXJlY3RpdmUsXG59IGZyb20gJ0BuZy1kb2MvdWkta2l0JztcbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgTmdEb2NQbGF5Z3JvdW5kRm9ybSB9IGZyb20gJy4uL3BsYXlncm91bmQtZm9ybSc7XG5pbXBvcnQgeyBOZ0RvY1BsYXlncm91bmRQcm9wZXJ0eUNvbXBvbmVudCB9IGZyb20gJy4uL3BsYXlncm91bmQtcHJvcGVydHkvcGxheWdyb3VuZC1wcm9wZXJ0eS5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmdEb2NQbGF5Z3JvdW5kUHJvcGVydHlDb250cm9sIH0gZnJvbSAnLi4vcGxheWdyb3VuZC1wcm9wZXJ0eS1jb250cm9sJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmctZG9jLXBsYXlncm91bmQtcHJvcGVydGllcycsXG4gIHRlbXBsYXRlVXJsOiAnLi9wbGF5Z3JvdW5kLXByb3BlcnRpZXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wbGF5Z3JvdW5kLXByb3BlcnRpZXMuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGltcG9ydHM6IFtcbiAgICBOZ0RvY1RleHRDb21wb25lbnQsXG4gICAgTmdEb2NCdXR0b25Db21wb25lbnQsXG4gICAgTmdEb2NDaGVja2JveENvbXBvbmVudCxcbiAgICBGb3Jtc01vZHVsZSxcbiAgICBOZ0RvY1Rvb2x0aXBEaXJlY3RpdmUsXG4gICAgTmdEb2NJY29uQ29tcG9uZW50LFxuICAgIE5nRG9jVGV4dFJpZ2h0RGlyZWN0aXZlLFxuICAgIE5nRG9jUGxheWdyb3VuZFByb3BlcnR5Q29tcG9uZW50LFxuICAgIEFzeW5jUGlwZSxcbiAgICBLZXlWYWx1ZVBpcGUsXG4gICAgTmdEb2NCaW5kUGlwZSxcbiAgICBOZ0RvY0V4ZWN1dGVQaXBlLFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ0RvY1BsYXlncm91bmRQcm9wZXJ0aWVzQ29tcG9uZW50PFxuICBQIGV4dGVuZHMgTmdEb2NQbGF5Z3JvdW5kUHJvcGVydGllcyxcbiAgQyBleHRlbmRzIFJlY29yZDxzdHJpbmcsIE5nRG9jUGxheWdyb3VuZENvbnRlbnQ+LFxuPiBpbXBsZW1lbnRzIE9uQ2hhbmdlc1xue1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYnJlYWtwb2ludE9ic2VydmVyID0gaW5qZWN0KEJyZWFrcG9pbnRPYnNlcnZlcik7XG4gIHByaXZhdGUgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG4gIEBJbnB1dCgpXG4gIGZvcm0hOiBGb3JtR3JvdXA8TmdEb2NQbGF5Z3JvdW5kRm9ybT47XG5cbiAgQElucHV0KClcbiAgcHJvcGVydGllcz86IFA7XG5cbiAgQElucHV0KClcbiAgaWdub3JlSW5wdXRzPzogc3RyaW5nW10gPSBbXTtcblxuICBASW5wdXQoKVxuICBkeW5hbWljQ29udGVudD86IEM7XG5cbiAgQElucHV0KClcbiAgZGVmYXVsdFZhbHVlcz86IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIEBJbnB1dCgpXG4gIGhpZGVTaWRlUGFuZWw6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICByZWNyZWF0ZURlbW86IGJvb2xlYW4gPSBmYWxzZTtcblxuICBASW5wdXQoKVxuICBzaG93UmVzZXRCdXR0b246IGJvb2xlYW4gPSBmYWxzZTtcblxuICBAT3V0cHV0KClcbiAgcmVjcmVhdGVEZW1vQ2hhbmdlOiBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4gPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG5cbiAgQE91dHB1dCgpXG4gIHJlc2V0Rm9ybTogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gIHJlYWRvbmx5IGJyZWFrcG9pbnRzOiBzdHJpbmdbXSA9IFtCcmVha3BvaW50cy5YU21hbGxdO1xuICByZWFkb25seSBvYnNlcnZlcjogT2JzZXJ2YWJsZTxib29sZWFuPjtcblxuICBwcm90ZWN0ZWQgcHJvcGVydHlDb250cm9sczogTmdEb2NQbGF5Z3JvdW5kUHJvcGVydHlDb250cm9sW10gPSBbXTtcbiAgcHJvdGVjdGVkIGNvbnRlbnRUeXBlQ29udHJvbD86IE5nRG9jUHJvdmlkZWRUeXBlQ29udHJvbCA9IHRoaXMuZ2V0Q29udHJvbEZvclR5cGUoJ2Jvb2xlYW4nKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLm9ic2VydmVyID0gdGhpcy5icmVha3BvaW50T2JzZXJ2ZXJcbiAgICAgIC5vYnNlcnZlKHRoaXMuYnJlYWtwb2ludHMpXG4gICAgICAucGlwZShtYXAoKHN0YXRlOiBCcmVha3BvaW50U3RhdGUpID0+IHN0YXRlLm1hdGNoZXMpKTtcbiAgfVxuXG4gIG5nT25DaGFuZ2VzKHsgcHJvcGVydGllcyB9OiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKHByb3BlcnRpZXMgJiYgdGhpcy5wcm9wZXJ0aWVzKSB7XG4gICAgICB0aGlzLnByb3BlcnR5Q29udHJvbHMgPSBvYmplY3RLZXlzKHRoaXMucHJvcGVydGllcylcbiAgICAgICAgLmZpbHRlcigoa2V5OiBrZXlvZiBQKSA9PiB0aGlzLmlnbm9yZUlucHV0cz8uaW5jbHVkZXMoU3RyaW5nKGtleSkpICE9PSB0cnVlKVxuICAgICAgICAubWFwKChrZXk6IGtleW9mIFApID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5wcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eTogTmdEb2NQbGF5Z3JvdW5kUHJvcGVydHkgPSB0aGlzLnByb3BlcnRpZXNba2V5XTtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVDb250cm9sOiBOZ0RvY1Byb3ZpZGVkVHlwZUNvbnRyb2wgfCB1bmRlZmluZWQgPSB0aGlzLmdldFR5cGVDb250cm9sKHByb3BlcnR5KTtcblxuICAgICAgICAgICAgaWYgKHR5cGVDb250cm9sKSB7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcHJvcGVydHlOYW1lOiBTdHJpbmcoa2V5KSxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eSxcbiAgICAgICAgICAgICAgICB0eXBlQ29udHJvbCxcbiAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfSlcbiAgICAgICAgLmZpbHRlcihpc1ByZXNlbnQpXG4gICAgICAgIC5zb3J0KChhOiBOZ0RvY1BsYXlncm91bmRQcm9wZXJ0eUNvbnRyb2wsIGI6IE5nRG9jUGxheWdyb3VuZFByb3BlcnR5Q29udHJvbCkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFPcmRlcjogbnVtYmVyIHwgdW5kZWZpbmVkID0gYS50eXBlQ29udHJvbC5vcHRpb25zPy5vcmRlcjtcbiAgICAgICAgICBjb25zdCBiT3JkZXI6IG51bWJlciB8IHVuZGVmaW5lZCA9IGIudHlwZUNvbnRyb2wub3B0aW9ucz8ub3JkZXI7XG5cbiAgICAgICAgICBpZiAoaXNQcmVzZW50KGFPcmRlcikgJiYgaXNQcmVzZW50KGJPcmRlcikpIHtcbiAgICAgICAgICAgIHJldHVybiBhT3JkZXIgLSBiT3JkZXI7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpc1ByZXNlbnQoYU9yZGVyKSkge1xuICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXNQcmVzZW50KGJPcmRlcikpIHtcbiAgICAgICAgICAgIHJldHVybiAxO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYS5wcm9wZXJ0eS5pbnB1dE5hbWUubG9jYWxlQ29tcGFyZShiLnByb3BlcnR5LmlucHV0TmFtZSk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGdldEZvcm1Db250cm9sKGNvbnRyb2xUeXBlOiBrZXlvZiB0eXBlb2YgdGhpcy5mb3JtLmNvbnRyb2xzLCBrZXk6IHN0cmluZyk6IEZvcm1Db250cm9sIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtLmdldChjb250cm9sVHlwZSk/LmdldChrZXkpIGFzIEZvcm1Db250cm9sO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRUeXBlQ29udHJvbChwcm9wZXJ0eTogTmdEb2NQbGF5Z3JvdW5kUHJvcGVydHkpOiBOZ0RvY1Byb3ZpZGVkVHlwZUNvbnRyb2wgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHR5cGU6IHN0cmluZyA9IHByb3BlcnR5LnR5cGU7XG4gICAgY29uc3QgdHlwZUNvbnRyb2w6IE5nRG9jUHJvdmlkZWRUeXBlQ29udHJvbCB8IHVuZGVmaW5lZCA9XG4gICAgICB0aGlzLmdldENvbnRyb2xGb3JUeXBlKHR5cGUpID8/XG4gICAgICB0aGlzLmdldENvbnRyb2xGb3JUeXBlQWxpYXMoXG4gICAgICAgIGlzUGxheWdyb3VuZFByb3BlcnR5KHByb3BlcnR5KSA/IHByb3BlcnR5Lm9wdGlvbnMgOiB1bmRlZmluZWQsXG4gICAgICAgIHByb3BlcnR5LmlzTWFudWFsLFxuICAgICAgKTtcblxuICAgIGlmICghdHlwZUNvbnRyb2wgJiYgaXNEZXZNb2RlKCkpIHtcbiAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgYE5nRG9jUGxheWdyb3VuZCBkaWRuJ3QgZmluZCB0aGUgY29udHJvbCBmb3IgdGhlIEBJbnB1dCBcIiR7cHJvcGVydHkuaW5wdXROYW1lfVwiLCB0aGUgdHlwZSBcIiR7dHlwZX1cIiB3YXMgbm90IHJlY29nbml6ZWQnYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHR5cGVDb250cm9sO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb250cm9sRm9yVHlwZSh0eXBlOiBzdHJpbmcpOiBOZ0RvY1Byb3ZpZGVkVHlwZUNvbnRyb2wgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHRva2VuOiBJbmplY3Rpb25Ub2tlbjxOZ0RvY1Byb3ZpZGVkVHlwZUNvbnRyb2w+IHwgdW5kZWZpbmVkID0gZ2V0VG9rZW5Gb3JUeXBlKHR5cGUpO1xuXG4gICAgcmV0dXJuIHRva2VuID8gdGhpcy5pbmplY3Rvci5nZXQodG9rZW4pIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb250cm9sRm9yVHlwZUFsaWFzKFxuICAgIG9wdGlvbnM/OiBzdHJpbmdbXSxcbiAgICBpc01hbnVhbD86IGJvb2xlYW4sXG4gICk6IE5nRG9jUHJvdmlkZWRUeXBlQ29udHJvbCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIGxldCBvcHRpb25zSXNWYWxpZDogYm9vbGVhbiA9IHRydWU7XG5cbiAgICAgIGlmICghaXNNYW51YWwpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBjaGVja2luZyB0aGF0IGFsbCB2YWx1ZXMgYXJlIGV4dHJhY3RhYmxlXG4gICAgICAgICAgb3B0aW9ucy5mb3JFYWNoKChpdGVtOiBzdHJpbmcpID0+IGV4dHJhY3RWYWx1ZU9yVGhyb3coaXRlbSkpO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICBvcHRpb25zSXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zSXNWYWxpZCkge1xuICAgICAgICBjb25zdCB0b2tlbjogSW5qZWN0aW9uVG9rZW48TmdEb2NQcm92aWRlZFR5cGVDb250cm9sPiB8IHVuZGVmaW5lZCA9XG4gICAgICAgICAgZ2V0VG9rZW5Gb3JUeXBlKCdOZ0RvY1R5cGVBbGlhcycpO1xuXG4gICAgICAgIHJldHVybiB0b2tlbiA/IHRoaXMuaW5qZWN0b3IuZ2V0KHRva2VuKSA6IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG4iLCJAaWYgKGRlZmF1bHRWYWx1ZXMpIHtcbiAgPGRpdiBjbGFzcz1cIm5nLWRvYy1wbGF5Z3JvdW5kLXByb3BlcnRpZXMtd3JhcHBlclwiIFtjbGFzcy52ZXJ0aWNhbF09XCJvYnNlcnZlciB8IGFzeW5jXCI+XG4gICAgPGRpdiBjbGFzcz1cIm5nLWRvYy1wbGF5Z3JvdW5kLWRlbW9zXCI+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gICAgQGlmICghaGlkZVNpZGVQYW5lbCkge1xuICAgICAgPGRpdiBjbGFzcz1cIm5nLWRvYy1wbGF5Z3JvdW5kLXByb3BlcnRpZXNcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm5nLWRvYy1wbGF5Z3JvdW5kLWhlYWRlclwiPlxuICAgICAgICAgIDxoNCBuZy1kb2MtdGV4dD5QbGF5Z3JvdW5kPC9oND5cbiAgICAgICAgICBAaWYgKHNob3dSZXNldEJ1dHRvbikge1xuICAgICAgICAgICAgPGJ1dHRvbiBuZy1kb2MtYnV0dG9uIGNvbG9yPVwiYWxlcnRcIiAoY2xpY2spPVwicmVzZXRGb3JtLmVtaXQoKVwiPlJlc2V0PC9idXR0b24+XG4gICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm5nLWRvYy1wbGF5Z3JvdW5kLXNldHRpbmdcIj5cbiAgICAgICAgICA8bmctZG9jLWNoZWNrYm94XG4gICAgICAgICAgICBbKG5nTW9kZWwpXT1cInJlY3JlYXRlRGVtb1wiXG4gICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJyZWNyZWF0ZURlbW9DaGFuZ2UuZW1pdCgkZXZlbnQpXCI+XG4gICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICBuZy1kb2MtdGV4dFxuICAgICAgICAgICAgICBbbmdEb2NUb29sdGlwXT1cIidSZWNyZWF0ZXMgZGVtbyBldmVyeXRpbWVcXG5vbmUgb2YgdGhlIGlucHV0IGhhcyBjaGFuZ2VkJ1wiXG4gICAgICAgICAgICAgIFtwb3NpdGlvbnNdPVwiWydib3R0b20tcmlnaHQnLCAnbGVmdC1jZW50ZXInXVwiPlxuICAgICAgICAgICAgICBSZWNyZWF0ZVxuICAgICAgICAgICAgICA8bmctZG9jLWljb24gaWNvbj1cImluZm9cIiBuZ0RvY1RleHRSaWdodD48L25nLWRvYy1pY29uPlxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvbmctZG9jLWNoZWNrYm94PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm5nLWRvYy1wbGF5Z3JvdW5kLWRpdmlkZXJcIj48L2Rpdj5cbiAgICAgICAgQGlmIChwcm9wZXJ0eUNvbnRyb2xzLmxlbmd0aCkge1xuICAgICAgICAgIDxoNSBjbGFzcz1cIm5nLWRvYy10aXRsZVwiIG5nLWRvYy10ZXh0PlNldHRpbmdzPC9oNT5cbiAgICAgICAgICBAZm9yIChwcm9wZXJ0eUNvbnRyb2wgb2YgcHJvcGVydHlDb250cm9sczsgdHJhY2sgcHJvcGVydHlDb250cm9sKSB7XG4gICAgICAgICAgICA8bmctZG9jLXBsYXlncm91bmQtcHJvcGVydHlcbiAgICAgICAgICAgICAgW25hbWVdPVwicHJvcGVydHlDb250cm9sLnByb3BlcnR5LmlucHV0TmFtZVwiXG4gICAgICAgICAgICAgIFtwcm9wZXJ0eV09XCJwcm9wZXJ0eUNvbnRyb2wucHJvcGVydHlcIlxuICAgICAgICAgICAgICBbdHlwZUNvbnRyb2xdPVwicHJvcGVydHlDb250cm9sLnR5cGVDb250cm9sXCJcbiAgICAgICAgICAgICAgW2RlZmF1bHRWYWx1ZV09XCJkZWZhdWx0VmFsdWVzW3Byb3BlcnR5Q29udHJvbC5wcm9wZXJ0eU5hbWVdXCJcbiAgICAgICAgICAgICAgW2NvbnRyb2xdPVwiXG4gICAgICAgICAgICAgICAgZ2V0Rm9ybUNvbnRyb2wgfCBiaW5kOiB0aGlzIHwgZXhlY3V0ZTogJ3Byb3BlcnRpZXMnIDogcHJvcGVydHlDb250cm9sLnByb3BlcnR5TmFtZVxuICAgICAgICAgICAgICBcIj5cbiAgICAgICAgICAgIDwvbmctZG9jLXBsYXlncm91bmQtcHJvcGVydHk+XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIEBpZiAoKGR5bmFtaWNDb250ZW50IHwga2V5dmFsdWUpPy5sZW5ndGgpIHtcbiAgICAgICAgICA8aDUgY2xhc3M9XCJuZy1kb2MtdGl0bGVcIiBuZy1kb2MtdGV4dD5Db250ZW50PC9oNT5cbiAgICAgICAgICBAZm9yIChjb250ZW50IG9mIGR5bmFtaWNDb250ZW50IHwga2V5dmFsdWU7IHRyYWNrIGNvbnRlbnQpIHtcbiAgICAgICAgICAgIDxuZy1kb2MtcGxheWdyb3VuZC1wcm9wZXJ0eVxuICAgICAgICAgICAgICBbbmFtZV09XCJjb250ZW50LnZhbHVlLmxhYmVsXCJcbiAgICAgICAgICAgICAgW3Byb3BlcnR5XT1cImNvbnRlbnQudmFsdWVcIlxuICAgICAgICAgICAgICBbdHlwZUNvbnRyb2xdPVwiY29udGVudFR5cGVDb250cm9sXCJcbiAgICAgICAgICAgICAgW2NvbnRyb2xdPVwiZ2V0Rm9ybUNvbnRyb2wgfCBiaW5kOiB0aGlzIHwgZXhlY3V0ZTogJ2NvbnRlbnQnIDogY29udGVudC5rZXlcIj5cbiAgICAgICAgICAgIDwvbmctZG9jLXBsYXlncm91bmQtcHJvcGVydHk+XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICB9XG4gIDwvZGl2PlxufVxuIl19","import { ChangeDetectionStrategy, Component, inject, Input, } from '@angular/core';\nimport { FormBuilder } from '@angular/forms';\nimport { NgDocRootPage } from '@ng-doc/app/classes/root-page';\nimport { isSameObject } from '@ng-doc/core/helpers/is-same-object';\nimport { objectKeys } from '@ng-doc/core/helpers/object-keys';\nimport { NgDocAsArrayPipe } from '@ng-doc/ui-kit';\nimport { NgDocPlaygroundDemoComponent } from './playground-demo/playground-demo.component';\nimport { NgDocPlaygroundPropertiesComponent } from './playground-properties/playground-properties.component';\nimport * as i0 from \"@angular/core\";\nexport class NgDocPlaygroundComponent {\n    constructor() {\n        this.rootPage = inject(NgDocRootPage);\n        this.formBuilder = inject(FormBuilder);\n        this.id = '';\n        this.pipeName = '';\n        this.selectors = [];\n        this.options = {};\n        this.recreateDemo = false;\n        this.defaultProperties = {};\n        this.defaultContent = {};\n    }\n    ngOnChanges({ options }) {\n        if (options) {\n            // Join configuration with options\n            this.configuration = Object.assign({}, this.rootPage.page?.playgrounds?.[this.id], this.options);\n        }\n    }\n    ngAfterViewInit() {\n        this.defaultProperties = this.getPropertiesFormValues();\n        this.defaultContent = this.getContentFormValues();\n        const propertiesForm = this.formBuilder.group(this.defaultProperties);\n        const contentForm = this.formBuilder.group(this.defaultContent);\n        this.formGroup = this.formBuilder.group({\n            properties: propertiesForm,\n            content: contentForm,\n        });\n        // `patchValue` is needed to set `undefined` values, otherwise they will be ignored by the Angular form\n        this.formGroup.patchValue({\n            properties: Object.assign({}, this.defaultProperties, this.configuration.inputs),\n            content: this.defaultContent,\n        });\n    }\n    isDefaultState() {\n        if (!this.formGroup) {\n            return false;\n        }\n        return (isSameObject(this.formGroup.value.properties ?? {}, this.defaultValues ?? {}) &&\n            isSameObject(this.formGroup.value.content ?? {}, this.defaultContent ?? {}));\n    }\n    getPropertiesFormValues() {\n        const formValues = objectKeys(this.properties ?? {}).reduce((controls, key) => {\n            if (this.properties) {\n                controls[key] = this.defaultValues ? this.defaultValues[key] : undefined;\n            }\n            return controls;\n        }, {});\n        return Object.assign({}, formValues, this.configuration.defaults);\n    }\n    getContentFormValues() {\n        return objectKeys(this.configuration?.content ?? {}).reduce((controls, key) => {\n            if (this.configuration?.content) {\n                controls[key] = false;\n            }\n            return controls;\n        }, {});\n    }\n    resetForm() {\n        this.formGroup.reset({}, { emitEvent: false });\n        this.formGroup?.patchValue({\n            properties: this.defaultProperties,\n            content: this.defaultContent,\n        });\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: NgDocPlaygroundComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }\n    static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: \"17.0.0\", version: \"20.0.3\", type: NgDocPlaygroundComponent, isStandalone: true, selector: \"ng-doc-playground\", inputs: { id: \"id\", pipeName: \"pipeName\", selectors: \"selectors\", properties: \"properties\", options: \"options\" }, usesOnChanges: true, ngImport: i0, template: \"@if (configuration) {\\n  <ng-doc-playground-properties\\n    [form]=\\\"formGroup\\\"\\n    [properties]=\\\"properties\\\"\\n    [ignoreInputs]=\\\"configuration.hiddenInputs\\\"\\n    [dynamicContent]=\\\"configuration.content\\\"\\n    [hideSidePanel]=\\\"configuration.hideSidePanel ?? false\\\"\\n    [defaultValues]=\\\"defaultValues\\\"\\n    [showResetButton]=\\\"!isDefaultState()\\\"\\n    [(recreateDemo)]=\\\"recreateDemo\\\"\\n    (resetForm)=\\\"resetForm()\\\">\\n    @for (selector of configuration.selectors ?? selectors | asArray; track selector) {\\n      <ng-doc-playground-demo\\n        [id]=\\\"id\\\"\\n        [selector]=\\\"selector\\\"\\n        [properties]=\\\"properties\\\"\\n        [configuration]=\\\"configuration\\\"\\n        [recreateDemo]=\\\"recreateDemo\\\"\\n        [form]=\\\"formGroup\\\"\\n        [expanded]=\\\"configuration.expanded ?? false\\\">\\n      </ng-doc-playground-demo>\\n    }\\n    @if (pipeName) {\\n      <ng-doc-playground-demo\\n        [id]=\\\"id\\\"\\n        [pipeName]=\\\"pipeName\\\"\\n        [properties]=\\\"properties\\\"\\n        [configuration]=\\\"configuration\\\"\\n        [recreateDemo]=\\\"recreateDemo\\\"\\n        [form]=\\\"formGroup\\\">\\n      </ng-doc-playground-demo>\\n    }\\n  </ng-doc-playground-properties>\\n}\\n\", styles: [\":host{display:block;margin:var(--ng-doc-playground-margin)}\\n\"], dependencies: [{ kind: \"component\", type: NgDocPlaygroundPropertiesComponent, selector: \"ng-doc-playground-properties\", inputs: [\"form\", \"properties\", \"ignoreInputs\", \"dynamicContent\", \"defaultValues\", \"hideSidePanel\", \"recreateDemo\", \"showResetButton\"], outputs: [\"recreateDemoChange\", \"resetForm\"] }, { kind: \"component\", type: NgDocPlaygroundDemoComponent, selector: \"ng-doc-playground-demo\", inputs: [\"id\", \"pipeName\", \"selector\", \"configuration\", \"properties\", \"recreateDemo\", \"form\", \"expanded\"] }, { kind: \"pipe\", type: NgDocAsArrayPipe, name: \"asArray\" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: NgDocPlaygroundComponent, decorators: [{\n            type: Component,\n            args: [{ selector: 'ng-doc-playground', changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgDocPlaygroundPropertiesComponent, NgDocPlaygroundDemoComponent, NgDocAsArrayPipe], template: \"@if (configuration) {\\n  <ng-doc-playground-properties\\n    [form]=\\\"formGroup\\\"\\n    [properties]=\\\"properties\\\"\\n    [ignoreInputs]=\\\"configuration.hiddenInputs\\\"\\n    [dynamicContent]=\\\"configuration.content\\\"\\n    [hideSidePanel]=\\\"configuration.hideSidePanel ?? false\\\"\\n    [defaultValues]=\\\"defaultValues\\\"\\n    [showResetButton]=\\\"!isDefaultState()\\\"\\n    [(recreateDemo)]=\\\"recreateDemo\\\"\\n    (resetForm)=\\\"resetForm()\\\">\\n    @for (selector of configuration.selectors ?? selectors | asArray; track selector) {\\n      <ng-doc-playground-demo\\n        [id]=\\\"id\\\"\\n        [selector]=\\\"selector\\\"\\n        [properties]=\\\"properties\\\"\\n        [configuration]=\\\"configuration\\\"\\n        [recreateDemo]=\\\"recreateDemo\\\"\\n        [form]=\\\"formGroup\\\"\\n        [expanded]=\\\"configuration.expanded ?? false\\\">\\n      </ng-doc-playground-demo>\\n    }\\n    @if (pipeName) {\\n      <ng-doc-playground-demo\\n        [id]=\\\"id\\\"\\n        [pipeName]=\\\"pipeName\\\"\\n        [properties]=\\\"properties\\\"\\n        [configuration]=\\\"configuration\\\"\\n        [recreateDemo]=\\\"recreateDemo\\\"\\n        [form]=\\\"formGroup\\\">\\n      </ng-doc-playground-demo>\\n    }\\n  </ng-doc-playground-properties>\\n}\\n\", styles: [\":host{display:block;margin:var(--ng-doc-playground-margin)}\\n\"] }]\n        }], ctorParameters: () => [], propDecorators: { id: [{\n                type: Input,\n                args: [{ required: true }]\n            }], pipeName: [{\n                type: Input\n            }], selectors: [{\n                type: Input\n            }], properties: [{\n                type: Input\n            }], options: [{\n                type: Input\n            }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxheWdyb3VuZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwcC9jb21wb25lbnRzL3BsYXlncm91bmQvcGxheWdyb3VuZC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwcC9jb21wb25lbnRzL3BsYXlncm91bmQvcGxheWdyb3VuZC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxNQUFNLEVBQ04sS0FBSyxHQUdOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxXQUFXLEVBQWEsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQU05RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRCxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUUzRixPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSx5REFBeUQsQ0FBQzs7QUFTN0csTUFBTSxPQUFPLHdCQUF3QjtJQStCbkM7UUExQmlCLGFBQVEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDakMsZ0JBQVcsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7UUFHbkQsT0FBRSxHQUFXLEVBQUUsQ0FBQztRQUdoQixhQUFRLEdBQVcsRUFBRSxDQUFDO1FBR3RCLGNBQVMsR0FBYSxFQUFFLENBQUM7UUFNekIsWUFBTyxHQUEyQixFQUFFLENBQUM7UUFFckMsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFLdEIsc0JBQWlCLEdBQTRCLEVBQUUsQ0FBQztRQUNoRCxtQkFBYyxHQUE0QixFQUFFLENBQUM7SUFFdEMsQ0FBQztJQUVoQixXQUFXLENBQUMsRUFBRSxPQUFPLEVBQWlCO1FBQ3BDLElBQUksT0FBTyxFQUFFLENBQUM7WUFDWixrQ0FBa0M7WUFDbEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUNoQyxFQUFFLEVBQ0YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUMxQyxJQUFJLENBQUMsT0FBTyxDQUNiLENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWU7UUFDYixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7UUFDeEQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUVsRCxNQUFNLGNBQWMsR0FBYyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNqRixNQUFNLFdBQVcsR0FBYyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFM0UsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQztZQUN0QyxVQUFVLEVBQUUsY0FBYztZQUMxQixPQUFPLEVBQUUsV0FBVztTQUNyQixDQUFDLENBQUM7UUFDSCx1R0FBdUc7UUFDdkcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUM7WUFDeEIsVUFBVSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQztZQUNoRixPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWM7U0FDN0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVTLGNBQWM7UUFDdEIsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNwQixPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFFRCxPQUFPLENBQ0wsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLGFBQWEsSUFBSSxFQUFFLENBQUM7WUFDN0UsWUFBWSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSxFQUFFLEVBQUUsSUFBSSxDQUFDLGNBQWMsSUFBSSxFQUFFLENBQUMsQ0FDNUUsQ0FBQztJQUNKLENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsTUFBTSxVQUFVLEdBQTRCLFVBQVUsQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FDbEYsQ0FBQyxRQUFpQyxFQUFFLEdBQVcsRUFBRSxFQUFFO1lBQ2pELElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO2dCQUNwQixRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzNFLENBQUM7WUFFRCxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDLEVBQ0QsRUFBNkIsQ0FDOUIsQ0FBQztRQUVGLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUVPLG9CQUFvQjtRQUMxQixPQUFPLFVBQVUsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQ3pELENBQUMsUUFBaUMsRUFBRSxHQUFXLEVBQUUsRUFBRTtZQUNqRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsT0FBTyxFQUFFLENBQUM7Z0JBQ2hDLFFBQVEsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7WUFDeEIsQ0FBQztZQUVELE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUMsRUFDRCxFQUE4QixDQUMvQixDQUFDO0lBQ0osQ0FBQztJQUVELFNBQVM7UUFDUCxJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQztZQUN6QixVQUFVLEVBQUUsSUFBSSxDQUFDLGlCQUFpQjtZQUNsQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGNBQWM7U0FDN0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs4R0EzR1Usd0JBQXdCO2tHQUF4Qix3QkFBd0Isb05DL0JyQywwcUNBa0NBLHVIRExZLGtDQUFrQyw4UEFBRSw0QkFBNEIseUtBQUUsZ0JBQWdCOzsyRkFFakYsd0JBQXdCO2tCQVBwQyxTQUFTOytCQUNFLG1CQUFtQixtQkFHWix1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDLENBQUMsa0NBQWtDLEVBQUUsNEJBQTRCLEVBQUUsZ0JBQWdCLENBQUM7d0RBVzdGLEVBQUU7c0JBREQsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Z0JBSXpCLFFBQVE7c0JBRFAsS0FBSztnQkFJTixTQUFTO3NCQURSLEtBQUs7Z0JBSU4sVUFBVTtzQkFEVCxLQUFLO2dCQUlOLE9BQU87c0JBRE4sS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDb21wb25lbnQsXG4gIGluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgU2ltcGxlQ2hhbmdlcyxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgTmdEb2NSb290UGFnZSB9IGZyb20gJ0BuZy1kb2MvYXBwL2NsYXNzZXMvcm9vdC1wYWdlJztcbmltcG9ydCB7IGlzU2FtZU9iamVjdCB9IGZyb20gJ0BuZy1kb2MvY29yZS9oZWxwZXJzL2lzLXNhbWUtb2JqZWN0JztcbmltcG9ydCB7IG9iamVjdEtleXMgfSBmcm9tICdAbmctZG9jL2NvcmUvaGVscGVycy9vYmplY3Qta2V5cyc7XG5pbXBvcnQge1xuICBOZ0RvY1BsYXlncm91bmRDb25maWcsXG4gIE5nRG9jUGxheWdyb3VuZE9wdGlvbnMsXG4gIE5nRG9jUGxheWdyb3VuZFByb3BlcnRpZXMsXG59IGZyb20gJ0BuZy1kb2MvY29yZS9pbnRlcmZhY2VzJztcbmltcG9ydCB7IE5nRG9jQXNBcnJheVBpcGUgfSBmcm9tICdAbmctZG9jL3VpLWtpdCc7XG5cbmltcG9ydCB7IE5nRG9jUGxheWdyb3VuZERlbW9Db21wb25lbnQgfSBmcm9tICcuL3BsYXlncm91bmQtZGVtby9wbGF5Z3JvdW5kLWRlbW8uY29tcG9uZW50JztcbmltcG9ydCB7IE5nRG9jUGxheWdyb3VuZEZvcm0gfSBmcm9tICcuL3BsYXlncm91bmQtZm9ybSc7XG5pbXBvcnQgeyBOZ0RvY1BsYXlncm91bmRQcm9wZXJ0aWVzQ29tcG9uZW50IH0gZnJvbSAnLi9wbGF5Z3JvdW5kLXByb3BlcnRpZXMvcGxheWdyb3VuZC1wcm9wZXJ0aWVzLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ25nLWRvYy1wbGF5Z3JvdW5kJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BsYXlncm91bmQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wbGF5Z3JvdW5kLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbTmdEb2NQbGF5Z3JvdW5kUHJvcGVydGllc0NvbXBvbmVudCwgTmdEb2NQbGF5Z3JvdW5kRGVtb0NvbXBvbmVudCwgTmdEb2NBc0FycmF5UGlwZV0sXG59KVxuZXhwb3J0IGNsYXNzIE5nRG9jUGxheWdyb3VuZENvbXBvbmVudDxcbiAgICBUIGV4dGVuZHMgTmdEb2NQbGF5Z3JvdW5kUHJvcGVydGllcyA9IE5nRG9jUGxheWdyb3VuZFByb3BlcnRpZXMsXG4gID5cbiAgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXRcbntcbiAgcHJpdmF0ZSByZWFkb25seSByb290UGFnZSA9IGluamVjdChOZ0RvY1Jvb3RQYWdlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBmb3JtQnVpbGRlciA9IGluamVjdChGb3JtQnVpbGRlcik7XG5cbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgaWQ6IHN0cmluZyA9ICcnO1xuXG4gIEBJbnB1dCgpXG4gIHBpcGVOYW1lOiBzdHJpbmcgPSAnJztcblxuICBASW5wdXQoKVxuICBzZWxlY3RvcnM6IHN0cmluZ1tdID0gW107XG5cbiAgQElucHV0KClcbiAgcHJvcGVydGllcz86IFQ7XG5cbiAgQElucHV0KClcbiAgb3B0aW9uczogTmdEb2NQbGF5Z3JvdW5kT3B0aW9ucyA9IHt9O1xuXG4gIHJlY3JlYXRlRGVtbzogYm9vbGVhbiA9IGZhbHNlO1xuICBmb3JtR3JvdXAhOiBGb3JtR3JvdXA8TmdEb2NQbGF5Z3JvdW5kRm9ybT47XG4gIGRlZmF1bHRWYWx1ZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgY29uZmlndXJhdGlvbiE6IE5nRG9jUGxheWdyb3VuZENvbmZpZztcblxuICBwcml2YXRlIGRlZmF1bHRQcm9wZXJ0aWVzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuICBwcml2YXRlIGRlZmF1bHRDb250ZW50OiBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPiA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBuZ09uQ2hhbmdlcyh7IG9wdGlvbnMgfTogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChvcHRpb25zKSB7XG4gICAgICAvLyBKb2luIGNvbmZpZ3VyYXRpb24gd2l0aCBvcHRpb25zXG4gICAgICB0aGlzLmNvbmZpZ3VyYXRpb24gPSBPYmplY3QuYXNzaWduKFxuICAgICAgICB7fSxcbiAgICAgICAgdGhpcy5yb290UGFnZS5wYWdlPy5wbGF5Z3JvdW5kcz8uW3RoaXMuaWRdLFxuICAgICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmRlZmF1bHRQcm9wZXJ0aWVzID0gdGhpcy5nZXRQcm9wZXJ0aWVzRm9ybVZhbHVlcygpO1xuICAgIHRoaXMuZGVmYXVsdENvbnRlbnQgPSB0aGlzLmdldENvbnRlbnRGb3JtVmFsdWVzKCk7XG5cbiAgICBjb25zdCBwcm9wZXJ0aWVzRm9ybTogRm9ybUdyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh0aGlzLmRlZmF1bHRQcm9wZXJ0aWVzKTtcbiAgICBjb25zdCBjb250ZW50Rm9ybTogRm9ybUdyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh0aGlzLmRlZmF1bHRDb250ZW50KTtcblxuICAgIHRoaXMuZm9ybUdyb3VwID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7XG4gICAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzRm9ybSxcbiAgICAgIGNvbnRlbnQ6IGNvbnRlbnRGb3JtLFxuICAgIH0pO1xuICAgIC8vIGBwYXRjaFZhbHVlYCBpcyBuZWVkZWQgdG8gc2V0IGB1bmRlZmluZWRgIHZhbHVlcywgb3RoZXJ3aXNlIHRoZXkgd2lsbCBiZSBpZ25vcmVkIGJ5IHRoZSBBbmd1bGFyIGZvcm1cbiAgICB0aGlzLmZvcm1Hcm91cC5wYXRjaFZhbHVlKHtcbiAgICAgIHByb3BlcnRpZXM6IE9iamVjdC5hc3NpZ24oe30sIHRoaXMuZGVmYXVsdFByb3BlcnRpZXMsIHRoaXMuY29uZmlndXJhdGlvbi5pbnB1dHMpLFxuICAgICAgY29udGVudDogdGhpcy5kZWZhdWx0Q29udGVudCxcbiAgICB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBpc0RlZmF1bHRTdGF0ZSgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMuZm9ybUdyb3VwKSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIChcbiAgICAgIGlzU2FtZU9iamVjdCh0aGlzLmZvcm1Hcm91cC52YWx1ZS5wcm9wZXJ0aWVzID8/IHt9LCB0aGlzLmRlZmF1bHRWYWx1ZXMgPz8ge30pICYmXG4gICAgICBpc1NhbWVPYmplY3QodGhpcy5mb3JtR3JvdXAudmFsdWUuY29udGVudCA/PyB7fSwgdGhpcy5kZWZhdWx0Q29udGVudCA/PyB7fSlcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRQcm9wZXJ0aWVzRm9ybVZhbHVlcygpOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiB7XG4gICAgY29uc3QgZm9ybVZhbHVlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSBvYmplY3RLZXlzKHRoaXMucHJvcGVydGllcyA/PyB7fSkucmVkdWNlKFxuICAgICAgKGNvbnRyb2xzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiwga2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKHRoaXMucHJvcGVydGllcykge1xuICAgICAgICAgIGNvbnRyb2xzW2tleV0gPSB0aGlzLmRlZmF1bHRWYWx1ZXMgPyB0aGlzLmRlZmF1bHRWYWx1ZXNba2V5XSA6IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250cm9scztcbiAgICAgIH0sXG4gICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgICApO1xuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGZvcm1WYWx1ZXMsIHRoaXMuY29uZmlndXJhdGlvbi5kZWZhdWx0cyk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbnRlbnRGb3JtVmFsdWVzKCk6IFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+IHtcbiAgICByZXR1cm4gb2JqZWN0S2V5cyh0aGlzLmNvbmZpZ3VyYXRpb24/LmNvbnRlbnQgPz8ge30pLnJlZHVjZShcbiAgICAgIChjb250cm9sczogUmVjb3JkPHN0cmluZywgYm9vbGVhbj4sIGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNvbmZpZ3VyYXRpb24/LmNvbnRlbnQpIHtcbiAgICAgICAgICBjb250cm9sc1trZXldID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gY29udHJvbHM7XG4gICAgICB9LFxuICAgICAge30gYXMgUmVjb3JkPGtleW9mIFQsIGJvb2xlYW4+LFxuICAgICk7XG4gIH1cblxuICByZXNldEZvcm0oKTogdm9pZCB7XG4gICAgdGhpcy5mb3JtR3JvdXAucmVzZXQoe30sIHsgZW1pdEV2ZW50OiBmYWxzZSB9KTtcbiAgICB0aGlzLmZvcm1Hcm91cD8ucGF0Y2hWYWx1ZSh7XG4gICAgICBwcm9wZXJ0aWVzOiB0aGlzLmRlZmF1bHRQcm9wZXJ0aWVzLFxuICAgICAgY29udGVudDogdGhpcy5kZWZhdWx0Q29udGVudCxcbiAgICB9KTtcbiAgfVxufVxuIiwiQGlmIChjb25maWd1cmF0aW9uKSB7XG4gIDxuZy1kb2MtcGxheWdyb3VuZC1wcm9wZXJ0aWVzXG4gICAgW2Zvcm1dPVwiZm9ybUdyb3VwXCJcbiAgICBbcHJvcGVydGllc109XCJwcm9wZXJ0aWVzXCJcbiAgICBbaWdub3JlSW5wdXRzXT1cImNvbmZpZ3VyYXRpb24uaGlkZGVuSW5wdXRzXCJcbiAgICBbZHluYW1pY0NvbnRlbnRdPVwiY29uZmlndXJhdGlvbi5jb250ZW50XCJcbiAgICBbaGlkZVNpZGVQYW5lbF09XCJjb25maWd1cmF0aW9uLmhpZGVTaWRlUGFuZWwgPz8gZmFsc2VcIlxuICAgIFtkZWZhdWx0VmFsdWVzXT1cImRlZmF1bHRWYWx1ZXNcIlxuICAgIFtzaG93UmVzZXRCdXR0b25dPVwiIWlzRGVmYXVsdFN0YXRlKClcIlxuICAgIFsocmVjcmVhdGVEZW1vKV09XCJyZWNyZWF0ZURlbW9cIlxuICAgIChyZXNldEZvcm0pPVwicmVzZXRGb3JtKClcIj5cbiAgICBAZm9yIChzZWxlY3RvciBvZiBjb25maWd1cmF0aW9uLnNlbGVjdG9ycyA/PyBzZWxlY3RvcnMgfCBhc0FycmF5OyB0cmFjayBzZWxlY3Rvcikge1xuICAgICAgPG5nLWRvYy1wbGF5Z3JvdW5kLWRlbW9cbiAgICAgICAgW2lkXT1cImlkXCJcbiAgICAgICAgW3NlbGVjdG9yXT1cInNlbGVjdG9yXCJcbiAgICAgICAgW3Byb3BlcnRpZXNdPVwicHJvcGVydGllc1wiXG4gICAgICAgIFtjb25maWd1cmF0aW9uXT1cImNvbmZpZ3VyYXRpb25cIlxuICAgICAgICBbcmVjcmVhdGVEZW1vXT1cInJlY3JlYXRlRGVtb1wiXG4gICAgICAgIFtmb3JtXT1cImZvcm1Hcm91cFwiXG4gICAgICAgIFtleHBhbmRlZF09XCJjb25maWd1cmF0aW9uLmV4cGFuZGVkID8/IGZhbHNlXCI+XG4gICAgICA8L25nLWRvYy1wbGF5Z3JvdW5kLWRlbW8+XG4gICAgfVxuICAgIEBpZiAocGlwZU5hbWUpIHtcbiAgICAgIDxuZy1kb2MtcGxheWdyb3VuZC1kZW1vXG4gICAgICAgIFtpZF09XCJpZFwiXG4gICAgICAgIFtwaXBlTmFtZV09XCJwaXBlTmFtZVwiXG4gICAgICAgIFtwcm9wZXJ0aWVzXT1cInByb3BlcnRpZXNcIlxuICAgICAgICBbY29uZmlndXJhdGlvbl09XCJjb25maWd1cmF0aW9uXCJcbiAgICAgICAgW3JlY3JlYXRlRGVtb109XCJyZWNyZWF0ZURlbW9cIlxuICAgICAgICBbZm9ybV09XCJmb3JtR3JvdXBcIj5cbiAgICAgIDwvbmctZG9jLXBsYXlncm91bmQtZGVtbz5cbiAgICB9XG4gIDwvbmctZG9jLXBsYXlncm91bmQtcHJvcGVydGllcz5cbn1cbiJdfQ==","import { ChangeDetectorRef, Directive, inject, Input, } from '@angular/core';\nimport { extractFunctionDefaults } from '@ng-doc/core/helpers/extract-function-defaults';\nimport { Subject, take } from 'rxjs';\nimport { NgDocPlaygroundComponent } from './playground.component';\nimport * as i0 from \"@angular/core\";\n/**\n * Base class for playgrounds components.\n */\nexport class NgDocBasePlayground {\n    static { this.selector = 'unknown'; }\n    constructor(playgroundInstance) {\n        this.playgroundInstance = playgroundInstance;\n        this.properties = {};\n        this.actionData = {};\n        this.content = {};\n        this.defaultValues = {};\n        this.reattached = new Subject();\n        this.playgroundContainer = inject(NgDocPlaygroundComponent);\n        this.changeDetectorRef = inject(ChangeDetectorRef);\n        this.changeDetectorRef.detach();\n    }\n    get onReattached() {\n        return this.reattached.pipe(take(1));\n    }\n    ngOnInit() {\n        /*\n         * Extract default values from playground properties. We do this in `ngOnInit` because in this case\n         * input values provided from the template are not initialized yet, and we can read default values instead.\n         */\n        if (this.playground) {\n            this.defaultValues = Object.keys(this.playground).reduce((values, key) => {\n                if (this.playground) {\n                    try {\n                        values[key] =\n                            // @ts-expect-error we do not know the type of the playground\n                            typeof this.playground[key] === 'function'\n                                ? // @ts-expect-error we do not know the type of the playground\n                                    this.playground[key]()\n                                : // @ts-expect-error we do not know the type of the playground\n                                    this.playground[key];\n                    }\n                    catch (e) {\n                        // we do catch here because some of the playground properties can be getters and throw an error\n                    }\n                }\n                return values;\n            }, {});\n        }\n        else if (this.playgroundInstance) {\n            const defaults = extractFunctionDefaults(this.playgroundInstance.prototype.transform);\n            this.defaultValues = Object.keys(this.playgroundContainer.properties ?? {}).reduce((def, key, i) => {\n                // we do +1 because the first argument is the `value` of the transform function\n                def[key] = defaults[i + 1];\n                return def;\n            }, {});\n        }\n        else {\n            throw new Error('Playground is not defined or initialized');\n        }\n        if (!this.playgroundContainer.defaultValues) {\n            this.playgroundContainer.defaultValues = this.defaultValues;\n        }\n        /*\n                 This is a hack just to wait for the playground container to be initialized and only then\n                 attach the change detector to have correct inputs values.\n             */\n        Promise.resolve().then(() => {\n            this.changeDetectorRef.reattach();\n            this.reattached.next();\n        });\n    }\n    get data() {\n        return Object.assign({}, this.configData, this.actionData);\n    }\n    static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: NgDocBasePlayground, deps: \"invalid\", target: i0.ɵɵFactoryTarget.Directive }); }\n    static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: \"14.0.0\", version: \"20.0.3\", type: NgDocBasePlayground, isStandalone: true, inputs: { properties: \"properties\", actionData: \"actionData\", content: \"content\" }, ngImport: i0 }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.0.3\", ngImport: i0, type: NgDocBasePlayground, decorators: [{\n            type: Directive\n        }], ctorParameters: () => [{ type: undefined }], propDecorators: { properties: [{\n                type: Input\n            }], actionData: [{\n                type: Input\n            }], content: [{\n                type: Input\n            }] } });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1wbGF5Z3JvdW5kLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9hcHAvY29tcG9uZW50cy9wbGF5Z3JvdW5kL2Jhc2UtcGxheWdyb3VuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxNQUFNLEVBQ04sS0FBSyxHQUlOLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGdEQUFnRCxDQUFDO0FBR3pGLE9BQU8sRUFBYyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRWpELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQUVsRTs7R0FFRztBQUVILE1BQU0sT0FBZ0IsbUJBQW1CO2FBQ3ZCLGFBQVEsR0FBVyxTQUFTLEFBQXBCLENBQXFCO0lBcUI3QyxZQUE4QixrQkFBeUM7UUFBekMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUF1QjtRQWZ2RSxlQUFVLEdBQXdCLEVBQUUsQ0FBQztRQUdyQyxlQUFVLEdBQTRCLEVBQUUsQ0FBQztRQUd6QyxZQUFPLEdBQVEsRUFBRSxDQUFDO1FBRWxCLGtCQUFhLEdBQTRCLEVBQUUsQ0FBQztRQUVwQyxlQUFVLEdBQWtCLElBQUksT0FBTyxFQUFRLENBQUM7UUFFaEQsd0JBQW1CLEdBQTZCLE1BQU0sQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO1FBQy9FLHNCQUFpQixHQUFzQixNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUd6RSxJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbEMsQ0FBQztJQUVELElBQUksWUFBWTtRQUNkLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELFFBQVE7UUFDTjs7O1dBR0c7UUFDSCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLE1BQU0sQ0FDdEQsQ0FBQyxNQUErQixFQUFFLEdBQVcsRUFBRSxFQUFFO2dCQUMvQyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFDcEIsSUFBSSxDQUFDO3dCQUNILE1BQU0sQ0FBQyxHQUFHLENBQUM7NEJBQ1QsNkRBQTZEOzRCQUM3RCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEtBQUssVUFBVTtnQ0FDeEMsQ0FBQyxDQUFDLDZEQUE2RDtvQ0FDN0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQ0FDeEIsQ0FBQyxDQUFDLDZEQUE2RDtvQ0FDN0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztvQkFDN0IsQ0FBQztvQkFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO3dCQUNYLCtGQUErRjtvQkFDakcsQ0FBQztnQkFDSCxDQUFDO2dCQUVELE9BQU8sTUFBTSxDQUFDO1lBQ2hCLENBQUMsRUFDRCxFQUFFLENBQ0gsQ0FBQztRQUNKLENBQUM7YUFBTSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQ25DLE1BQU0sUUFBUSxHQUFHLHVCQUF1QixDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsU0FBUyxDQUFDLENBQUM7WUFFdEYsSUFBSSxDQUFDLGFBQWEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUNoRixDQUFDLEdBQTRCLEVBQUUsR0FBVyxFQUFFLENBQVMsRUFBRSxFQUFFO2dCQUN2RCwrRUFBK0U7Z0JBQy9FLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUUzQixPQUFPLEdBQUcsQ0FBQztZQUNiLENBQUMsRUFDRCxFQUFFLENBQ0gsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO1FBQzlELENBQUM7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzVDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztRQUM5RCxDQUFDO1FBRUQ7OztlQUdPO1FBQ1AsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDMUIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xDLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDekIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM3RCxDQUFDOzhHQXhGbUIsbUJBQW1CO2tHQUFuQixtQkFBbUI7OzJGQUFuQixtQkFBbUI7a0JBRHhDLFNBQVM7MkVBUVIsVUFBVTtzQkFEVCxLQUFLO2dCQUlOLFVBQVU7c0JBRFQsS0FBSztnQkFJTixPQUFPO3NCQUROLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgRGlyZWN0aXZlLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBPbkluaXQsXG4gIFR5cGUsXG4gIFZpZXdDb250YWluZXJSZWYsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZXh0cmFjdEZ1bmN0aW9uRGVmYXVsdHMgfSBmcm9tICdAbmctZG9jL2NvcmUvaGVscGVycy9leHRyYWN0LWZ1bmN0aW9uLWRlZmF1bHRzJztcbmltcG9ydCB7IE5nRG9jUGxheWdyb3VuZENvbmZpZyB9IGZyb20gJ0BuZy1kb2MvY29yZS9pbnRlcmZhY2VzJztcbmltcG9ydCB7IENvbnN0cnVjdG9yIH0gZnJvbSAnQG5nLWRvYy9jb3JlL3R5cGVzJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YmplY3QsIHRha2UgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgTmdEb2NQbGF5Z3JvdW5kQ29tcG9uZW50IH0gZnJvbSAnLi9wbGF5Z3JvdW5kLmNvbXBvbmVudCc7XG5cbi8qKlxuICogQmFzZSBjbGFzcyBmb3IgcGxheWdyb3VuZHMgY29tcG9uZW50cy5cbiAqL1xuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTmdEb2NCYXNlUGxheWdyb3VuZCBpbXBsZW1lbnRzIFBpY2s8TmdEb2NQbGF5Z3JvdW5kQ29uZmlnLCAnZGF0YSc+LCBPbkluaXQge1xuICBzdGF0aWMgcmVhZG9ubHkgc2VsZWN0b3I6IHN0cmluZyA9ICd1bmtub3duJztcbiAgYWJzdHJhY3QgcmVhZG9ubHkgcGxheWdyb3VuZD86IFR5cGU8YW55PjtcbiAgYWJzdHJhY3QgcmVhZG9ubHkgdmlld0NvbnRhaW5lclJlZj86IFZpZXdDb250YWluZXJSZWY7XG4gIGFic3RyYWN0IHJlYWRvbmx5IGNvbmZpZ0RhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuXG4gIEBJbnB1dCgpXG4gIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICBASW5wdXQoKVxuICBhY3Rpb25EYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHt9O1xuXG4gIEBJbnB1dCgpXG4gIGNvbnRlbnQ6IGFueSA9IHt9O1xuXG4gIGRlZmF1bHRWYWx1ZXM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+ID0ge307XG5cbiAgcHJpdmF0ZSByZWF0dGFjaGVkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwcml2YXRlIHBsYXlncm91bmRDb250YWluZXI6IE5nRG9jUGxheWdyb3VuZENvbXBvbmVudCA9IGluamVjdChOZ0RvY1BsYXlncm91bmRDb21wb25lbnQpO1xuICBwcm90ZWN0ZWQgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IocHJpdmF0ZSBwbGF5Z3JvdW5kSW5zdGFuY2U/OiBDb25zdHJ1Y3Rvcjx1bmtub3duPikge1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3JSZWYuZGV0YWNoKCk7XG4gIH1cblxuICBnZXQgb25SZWF0dGFjaGVkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLnJlYXR0YWNoZWQucGlwZSh0YWtlKDEpKTtcbiAgfVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8qXG4gICAgICogRXh0cmFjdCBkZWZhdWx0IHZhbHVlcyBmcm9tIHBsYXlncm91bmQgcHJvcGVydGllcy4gV2UgZG8gdGhpcyBpbiBgbmdPbkluaXRgIGJlY2F1c2UgaW4gdGhpcyBjYXNlXG4gICAgICogaW5wdXQgdmFsdWVzIHByb3ZpZGVkIGZyb20gdGhlIHRlbXBsYXRlIGFyZSBub3QgaW5pdGlhbGl6ZWQgeWV0LCBhbmQgd2UgY2FuIHJlYWQgZGVmYXVsdCB2YWx1ZXMgaW5zdGVhZC5cbiAgICAgKi9cbiAgICBpZiAodGhpcy5wbGF5Z3JvdW5kKSB7XG4gICAgICB0aGlzLmRlZmF1bHRWYWx1ZXMgPSBPYmplY3Qua2V5cyh0aGlzLnBsYXlncm91bmQpLnJlZHVjZShcbiAgICAgICAgKHZhbHVlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sIGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMucGxheWdyb3VuZCkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdmFsdWVzW2tleV0gPVxuICAgICAgICAgICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3Igd2UgZG8gbm90IGtub3cgdGhlIHR5cGUgb2YgdGhlIHBsYXlncm91bmRcbiAgICAgICAgICAgICAgICB0eXBlb2YgdGhpcy5wbGF5Z3JvdW5kW2tleV0gPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgICAgICAgID8gLy8gQHRzLWV4cGVjdC1lcnJvciB3ZSBkbyBub3Qga25vdyB0aGUgdHlwZSBvZiB0aGUgcGxheWdyb3VuZFxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsYXlncm91bmRba2V5XSgpXG4gICAgICAgICAgICAgICAgICA6IC8vIEB0cy1leHBlY3QtZXJyb3Igd2UgZG8gbm90IGtub3cgdGhlIHR5cGUgb2YgdGhlIHBsYXlncm91bmRcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wbGF5Z3JvdW5kW2tleV07XG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgIC8vIHdlIGRvIGNhdGNoIGhlcmUgYmVjYXVzZSBzb21lIG9mIHRoZSBwbGF5Z3JvdW5kIHByb3BlcnRpZXMgY2FuIGJlIGdldHRlcnMgYW5kIHRocm93IGFuIGVycm9yXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICAgICAgfSxcbiAgICAgICAge30sXG4gICAgICApO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wbGF5Z3JvdW5kSW5zdGFuY2UpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRzID0gZXh0cmFjdEZ1bmN0aW9uRGVmYXVsdHModGhpcy5wbGF5Z3JvdW5kSW5zdGFuY2UucHJvdG90eXBlLnRyYW5zZm9ybSk7XG5cbiAgICAgIHRoaXMuZGVmYXVsdFZhbHVlcyA9IE9iamVjdC5rZXlzKHRoaXMucGxheWdyb3VuZENvbnRhaW5lci5wcm9wZXJ0aWVzID8/IHt9KS5yZWR1Y2UoXG4gICAgICAgIChkZWY6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LCBrZXk6IHN0cmluZywgaTogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgLy8gd2UgZG8gKzEgYmVjYXVzZSB0aGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIGB2YWx1ZWAgb2YgdGhlIHRyYW5zZm9ybSBmdW5jdGlvblxuICAgICAgICAgIGRlZltrZXldID0gZGVmYXVsdHNbaSArIDFdO1xuXG4gICAgICAgICAgcmV0dXJuIGRlZjtcbiAgICAgICAgfSxcbiAgICAgICAge30sXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsYXlncm91bmQgaXMgbm90IGRlZmluZWQgb3IgaW5pdGlhbGl6ZWQnKTtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMucGxheWdyb3VuZENvbnRhaW5lci5kZWZhdWx0VmFsdWVzKSB7XG4gICAgICB0aGlzLnBsYXlncm91bmRDb250YWluZXIuZGVmYXVsdFZhbHVlcyA9IHRoaXMuZGVmYXVsdFZhbHVlcztcbiAgICB9XG5cbiAgICAvKlxuICAgICAgICAgICAgIFRoaXMgaXMgYSBoYWNrIGp1c3QgdG8gd2FpdCBmb3IgdGhlIHBsYXlncm91bmQgY29udGFpbmVyIHRvIGJlIGluaXRpYWxpemVkIGFuZCBvbmx5IHRoZW5cbiAgICAgICAgICAgICBhdHRhY2ggdGhlIGNoYW5nZSBkZXRlY3RvciB0byBoYXZlIGNvcnJlY3QgaW5wdXRzIHZhbHVlcy5cbiAgICAgICAgICovXG4gICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yUmVmLnJlYXR0YWNoKCk7XG4gICAgICB0aGlzLnJlYXR0YWNoZWQubmV4dCgpO1xuICAgIH0pO1xuICB9XG5cbiAgZ2V0IGRhdGEoKTogYW55IHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5jb25maWdEYXRhLCB0aGlzLmFjdGlvbkRhdGEpO1xuICB9XG59XG4iXX0=","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmctZG9jLWFwcC1jb21wb25lbnRzLXBsYXlncm91bmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FwcC9jb21wb25lbnRzL3BsYXlncm91bmQvbmctZG9jLWFwcC1jb21wb25lbnRzLXBsYXlncm91bmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0="],"names":[],"mappings":"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"}