@capitalos/angular 0.1.0-rc.1 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,139 @@
1
+ import { inject, Input, Output, EventEmitter, ViewChild, Directive, } from '@angular/core';
2
+ import { IframeManager, CapitalOSError, } from '@capitalos/core';
3
+ import { CapitalOsAuthService } from './capitalos-auth.service';
4
+ import { CAPITALOS_CONFIG } from './provide-capitalos';
5
+ import { SDK_VERSION } from './version';
6
+ import * as i0 from "@angular/core";
7
+ /**
8
+ * Common template for all iframe components.
9
+ * Angular doesn't support inheriting templates, so subclasses must use this constant.
10
+ */
11
+ export const IFRAME_COMPONENT_TEMPLATE = `<div #iframeContainer class="capitalos-iframe-container"></div>`;
12
+ /**
13
+ * Common styles for all iframe components.
14
+ * Angular doesn't support inheriting styles, so subclasses must use this constant.
15
+ *
16
+ * Why Angular needs these styles (unlike React/Vue):
17
+ * Angular component selectors (e.g., <capitalos-cards-app>) remain in the DOM as real elements.
18
+ * Without :host styling, the component element may collapse or not fill its container.
19
+ * In React/Vue, component tags are replaced by rendered content, so no wrapper styling is needed.
20
+ */
21
+ export const IFRAME_COMPONENT_STYLES = [
22
+ `
23
+ :host {
24
+ display: block;
25
+ width: 100%;
26
+ }
27
+
28
+ .capitalos-iframe-container {
29
+ width: 100%;
30
+ }
31
+ `,
32
+ ];
33
+ /**
34
+ * Abstract base class for CapitalOS iframe components.
35
+ *
36
+ * Handles common functionality:
37
+ * - Token subscription and iframe initialization
38
+ * - Common inputs (theme, heightOffsetPx, enableLogging)
39
+ * - Common outputs (loaded, error)
40
+ * - Lifecycle management (cleanup on destroy)
41
+ *
42
+ * Subclasses must implement:
43
+ * - `getRenderingContext()` - returns the component-specific rendering context
44
+ *
45
+ * Subclasses may override:
46
+ * - `getComponentCallbacks()` - returns component-specific Penpal callbacks
47
+ *
48
+ * Note: Rendering context inputs (e.g., entryPoint, exitPoint for Onboarding) are read once
49
+ * at iframe initialization. Changes to these inputs after the iframe loads will NOT trigger
50
+ * re-initialization. This matches the behavior of the React SDK.
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * @Component({ selector: 'my-component', ... })
55
+ * export class MyComponent extends BaseIframeComponent {
56
+ * protected getRenderingContext(): RenderingContext {
57
+ * return { entryPoint: 'myComponent' }
58
+ * }
59
+ * }
60
+ * ```
61
+ */
62
+ export class BaseIframeComponent {
63
+ constructor() {
64
+ // Injected services
65
+ this.authService = inject(CapitalOsAuthService);
66
+ this.config = inject(CAPITALOS_CONFIG);
67
+ this.heightOffsetPx = 12;
68
+ // Common outputs
69
+ this.loaded = new EventEmitter();
70
+ this.error = new EventEmitter();
71
+ }
72
+ ngAfterViewInit() {
73
+ // Subscribe to tokenData$ and initialize iframe when ready
74
+ this.tokenDataSubscription = this.authService.tokenData$.subscribe((tokenData) => {
75
+ if (tokenData && this.iframeContainer) {
76
+ this.initializeIframe(tokenData, this.iframeContainer.nativeElement);
77
+ }
78
+ });
79
+ }
80
+ ngOnDestroy() {
81
+ this.tokenDataSubscription?.unsubscribe();
82
+ this.iframeManager?.destroy();
83
+ }
84
+ /**
85
+ * Returns component-specific Penpal callbacks.
86
+ * Override in subclasses that need callbacks (e.g., Onboarding, TokenExchange).
87
+ */
88
+ getComponentCallbacks() {
89
+ return {};
90
+ }
91
+ initializeIframe(tokenData, container) {
92
+ // Destroy previous iframe if exists
93
+ this.iframeManager?.destroy();
94
+ const resolvedEnableLogging = this.enableLogging ?? this.config.enableLogging ?? false;
95
+ const resolvedTheme = this.theme ?? this.config.theme;
96
+ this.iframeManager = new IframeManager({
97
+ container,
98
+ tokenData,
99
+ renderingContext: this.getRenderingContext(),
100
+ theme: resolvedTheme,
101
+ enableLogging: resolvedEnableLogging,
102
+ logger: this.config.logger,
103
+ sdkVersion: SDK_VERSION,
104
+ heightOffsetPx: this.heightOffsetPx,
105
+ callbacks: {
106
+ onLoad: () => {
107
+ this.loaded.emit();
108
+ },
109
+ onError: (rawError) => {
110
+ const capitalOsError = new CapitalOSError(rawError);
111
+ this.error.emit(capitalOsError);
112
+ },
113
+ onTokenExpired: () => {
114
+ this.authService.invalidateToken();
115
+ },
116
+ ...this.getComponentCallbacks(),
117
+ },
118
+ });
119
+ }
120
+ }
121
+ BaseIframeComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BaseIframeComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
122
+ BaseIframeComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: BaseIframeComponent, inputs: { theme: "theme", heightOffsetPx: "heightOffsetPx", enableLogging: "enableLogging" }, outputs: { loaded: "loaded", error: "error" }, viewQueries: [{ propertyName: "iframeContainer", first: true, predicate: ["iframeContainer"], descendants: true }], ngImport: i0 });
123
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BaseIframeComponent, decorators: [{
124
+ type: Directive
125
+ }], propDecorators: { theme: [{
126
+ type: Input
127
+ }], heightOffsetPx: [{
128
+ type: Input
129
+ }], enableLogging: [{
130
+ type: Input
131
+ }], loaded: [{
132
+ type: Output
133
+ }], error: [{
134
+ type: Output
135
+ }], iframeContainer: [{
136
+ type: ViewChild,
137
+ args: ['iframeContainer']
138
+ }] } });
139
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1pZnJhbWUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY2FwaXRhbG9zLWFuZ3VsYXIvc3JjL2xpYi9iYXNlLWlmcmFtZS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixTQUFTLEVBSVQsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFBO0FBRXRCLE9BQU8sRUFDTCxhQUFhLEVBQ2IsY0FBYyxHQU1mLE1BQU0saUJBQWlCLENBQUE7QUFDeEIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFDL0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDdEQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQTs7QUFFdkM7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsaUVBQWlFLENBQUE7QUFFMUc7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsTUFBTSx1QkFBdUIsR0FBRztJQUNyQzs7Ozs7Ozs7O0dBU0M7Q0FDRixDQUFBO0FBUUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0Qkc7QUFFSCxNQUFNLE9BQWdCLG1CQUFtQjtJQUR6QztRQUVFLG9CQUFvQjtRQUNELGdCQUFXLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLENBQUE7UUFDMUMsV0FBTSxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO1FBSTNDLG1CQUFjLEdBQUcsRUFBRSxDQUFBO1FBRzVCLGlCQUFpQjtRQUNQLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFBO1FBQ2pDLFVBQUssR0FBRyxJQUFJLFlBQVksRUFBa0IsQ0FBQTtLQW9FckQ7SUEzREMsZUFBZTtRQUNiLDJEQUEyRDtRQUMzRCxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDL0UsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDckMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFBO2FBQ3JFO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxxQkFBcUIsRUFBRSxXQUFXLEVBQUUsQ0FBQTtRQUN6QyxJQUFJLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxDQUFBO0lBQy9CLENBQUM7SUFRRDs7O09BR0c7SUFDTyxxQkFBcUI7UUFDN0IsT0FBTyxFQUFFLENBQUE7SUFDWCxDQUFDO0lBRU8sZ0JBQWdCLENBQUMsU0FBb0IsRUFBRSxTQUFzQjtRQUNuRSxvQ0FBb0M7UUFDcEMsSUFBSSxDQUFDLGFBQWEsRUFBRSxPQUFPLEVBQUUsQ0FBQTtRQUU3QixNQUFNLHFCQUFxQixHQUFHLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFBO1FBQ3RGLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxLQUFLLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUE7UUFFckQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGFBQWEsQ0FBQztZQUNyQyxTQUFTO1lBQ1QsU0FBUztZQUNULGdCQUFnQixFQUFFLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUM1QyxLQUFLLEVBQUUsYUFBYTtZQUNwQixhQUFhLEVBQUUscUJBQXFCO1lBQ3BDLE1BQU0sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU07WUFDMUIsVUFBVSxFQUFFLFdBQVc7WUFDdkIsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO1lBQ25DLFNBQVMsRUFBRTtnQkFDVCxNQUFNLEVBQUUsR0FBRyxFQUFFO29CQUNYLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUE7Z0JBQ3BCLENBQUM7Z0JBQ0QsT0FBTyxFQUFFLENBQUMsUUFBeUIsRUFBRSxFQUFFO29CQUNyQyxNQUFNLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQTtvQkFDbkQsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUE7Z0JBQ2pDLENBQUM7Z0JBQ0QsY0FBYyxFQUFFLEdBQUcsRUFBRTtvQkFDbkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLEVBQUUsQ0FBQTtnQkFDcEMsQ0FBQztnQkFDRCxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRTthQUNoQztTQUNGLENBQUMsQ0FBQTtJQUNKLENBQUM7O2dIQS9FbUIsbUJBQW1CO29HQUFuQixtQkFBbUI7MkZBQW5CLG1CQUFtQjtrQkFEeEMsU0FBUzs4QkFPQyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUdJLE1BQU07c0JBQWYsTUFBTTtnQkFDRyxLQUFLO3NCQUFkLE1BQU07Z0JBR3VCLGVBQWU7c0JBQTVDLFNBQVM7dUJBQUMsaUJBQWlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgaW5qZWN0LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFZpZXdDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgT25EZXN0cm95LFxuICBEaXJlY3RpdmUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHtcbiAgSWZyYW1lTWFuYWdlcixcbiAgQ2FwaXRhbE9TRXJyb3IsXG4gIFRva2VuRGF0YSxcbiAgUmF3RXJyb3JEZXRhaWxzLFxuICBUaGVtZUNvbG9yU2NoZW1lLFxuICBSZW5kZXJpbmdDb250ZXh0LFxuICBJZnJhbWVNYW5hZ2VyQ29uZmlnLFxufSBmcm9tICdAY2FwaXRhbG9zL2NvcmUnXG5pbXBvcnQgeyBDYXBpdGFsT3NBdXRoU2VydmljZSB9IGZyb20gJy4vY2FwaXRhbG9zLWF1dGguc2VydmljZSdcbmltcG9ydCB7IENBUElUQUxPU19DT05GSUcgfSBmcm9tICcuL3Byb3ZpZGUtY2FwaXRhbG9zJ1xuaW1wb3J0IHsgU0RLX1ZFUlNJT04gfSBmcm9tICcuL3ZlcnNpb24nXG5cbi8qKlxuICogQ29tbW9uIHRlbXBsYXRlIGZvciBhbGwgaWZyYW1lIGNvbXBvbmVudHMuXG4gKiBBbmd1bGFyIGRvZXNuJ3Qgc3VwcG9ydCBpbmhlcml0aW5nIHRlbXBsYXRlcywgc28gc3ViY2xhc3NlcyBtdXN0IHVzZSB0aGlzIGNvbnN0YW50LlxuICovXG5leHBvcnQgY29uc3QgSUZSQU1FX0NPTVBPTkVOVF9URU1QTEFURSA9IGA8ZGl2ICNpZnJhbWVDb250YWluZXIgY2xhc3M9XCJjYXBpdGFsb3MtaWZyYW1lLWNvbnRhaW5lclwiPjwvZGl2PmBcblxuLyoqXG4gKiBDb21tb24gc3R5bGVzIGZvciBhbGwgaWZyYW1lIGNvbXBvbmVudHMuXG4gKiBBbmd1bGFyIGRvZXNuJ3Qgc3VwcG9ydCBpbmhlcml0aW5nIHN0eWxlcywgc28gc3ViY2xhc3NlcyBtdXN0IHVzZSB0aGlzIGNvbnN0YW50LlxuICpcbiAqIFdoeSBBbmd1bGFyIG5lZWRzIHRoZXNlIHN0eWxlcyAodW5saWtlIFJlYWN0L1Z1ZSk6XG4gKiBBbmd1bGFyIGNvbXBvbmVudCBzZWxlY3RvcnMgKGUuZy4sIDxjYXBpdGFsb3MtY2FyZHMtYXBwPikgcmVtYWluIGluIHRoZSBET00gYXMgcmVhbCBlbGVtZW50cy5cbiAqIFdpdGhvdXQgOmhvc3Qgc3R5bGluZywgdGhlIGNvbXBvbmVudCBlbGVtZW50IG1heSBjb2xsYXBzZSBvciBub3QgZmlsbCBpdHMgY29udGFpbmVyLlxuICogSW4gUmVhY3QvVnVlLCBjb21wb25lbnQgdGFncyBhcmUgcmVwbGFjZWQgYnkgcmVuZGVyZWQgY29udGVudCwgc28gbm8gd3JhcHBlciBzdHlsaW5nIGlzIG5lZWRlZC5cbiAqL1xuZXhwb3J0IGNvbnN0IElGUkFNRV9DT01QT05FTlRfU1RZTEVTID0gW1xuICBgXG4gICAgOmhvc3Qge1xuICAgICAgZGlzcGxheTogYmxvY2s7XG4gICAgICB3aWR0aDogMTAwJTtcbiAgICB9XG5cbiAgICAuY2FwaXRhbG9zLWlmcmFtZS1jb250YWluZXIge1xuICAgICAgd2lkdGg6IDEwMCU7XG4gICAgfVxuICBgLFxuXVxuXG4vKipcbiAqIENvbXBvbmVudC1zcGVjaWZpYyBjYWxsYmFja3MgdG8gcGFzcyB0byBJZnJhbWVNYW5hZ2VyLlxuICogRXhjbHVkZXMgY29tbW9uIGNhbGxiYWNrcyAob25Mb2FkLCBvbkVycm9yLCBvblRva2VuRXhwaXJlZCkgd2hpY2ggdGhlIGJhc2UgY2xhc3MgaGFuZGxlcy5cbiAqL1xuZXhwb3J0IHR5cGUgQ29tcG9uZW50Q2FsbGJhY2tzID0gT21pdDxJZnJhbWVNYW5hZ2VyQ29uZmlnWydjYWxsYmFja3MnXSwgJ29uTG9hZCcgfCAnb25FcnJvcicgfCAnb25Ub2tlbkV4cGlyZWQnPlxuXG4vKipcbiAqIEFic3RyYWN0IGJhc2UgY2xhc3MgZm9yIENhcGl0YWxPUyBpZnJhbWUgY29tcG9uZW50cy5cbiAqXG4gKiBIYW5kbGVzIGNvbW1vbiBmdW5jdGlvbmFsaXR5OlxuICogLSBUb2tlbiBzdWJzY3JpcHRpb24gYW5kIGlmcmFtZSBpbml0aWFsaXphdGlvblxuICogLSBDb21tb24gaW5wdXRzICh0aGVtZSwgaGVpZ2h0T2Zmc2V0UHgsIGVuYWJsZUxvZ2dpbmcpXG4gKiAtIENvbW1vbiBvdXRwdXRzIChsb2FkZWQsIGVycm9yKVxuICogLSBMaWZlY3ljbGUgbWFuYWdlbWVudCAoY2xlYW51cCBvbiBkZXN0cm95KVxuICpcbiAqIFN1YmNsYXNzZXMgbXVzdCBpbXBsZW1lbnQ6XG4gKiAtIGBnZXRSZW5kZXJpbmdDb250ZXh0KClgIC0gcmV0dXJucyB0aGUgY29tcG9uZW50LXNwZWNpZmljIHJlbmRlcmluZyBjb250ZXh0XG4gKlxuICogU3ViY2xhc3NlcyBtYXkgb3ZlcnJpZGU6XG4gKiAtIGBnZXRDb21wb25lbnRDYWxsYmFja3MoKWAgLSByZXR1cm5zIGNvbXBvbmVudC1zcGVjaWZpYyBQZW5wYWwgY2FsbGJhY2tzXG4gKlxuICogTm90ZTogUmVuZGVyaW5nIGNvbnRleHQgaW5wdXRzIChlLmcuLCBlbnRyeVBvaW50LCBleGl0UG9pbnQgZm9yIE9uYm9hcmRpbmcpIGFyZSByZWFkIG9uY2VcbiAqIGF0IGlmcmFtZSBpbml0aWFsaXphdGlvbi4gQ2hhbmdlcyB0byB0aGVzZSBpbnB1dHMgYWZ0ZXIgdGhlIGlmcmFtZSBsb2FkcyB3aWxsIE5PVCB0cmlnZ2VyXG4gKiByZS1pbml0aWFsaXphdGlvbi4gVGhpcyBtYXRjaGVzIHRoZSBiZWhhdmlvciBvZiB0aGUgUmVhY3QgU0RLLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBAQ29tcG9uZW50KHsgc2VsZWN0b3I6ICdteS1jb21wb25lbnQnLCAuLi4gfSlcbiAqIGV4cG9ydCBjbGFzcyBNeUNvbXBvbmVudCBleHRlbmRzIEJhc2VJZnJhbWVDb21wb25lbnQge1xuICogICBwcm90ZWN0ZWQgZ2V0UmVuZGVyaW5nQ29udGV4dCgpOiBSZW5kZXJpbmdDb250ZXh0IHtcbiAqICAgICByZXR1cm4geyBlbnRyeVBvaW50OiAnbXlDb21wb25lbnQnIH1cbiAqICAgfVxuICogfVxuICogYGBgXG4gKi9cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VJZnJhbWVDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICAvLyBJbmplY3RlZCBzZXJ2aWNlc1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXV0aFNlcnZpY2UgPSBpbmplY3QoQ2FwaXRhbE9zQXV0aFNlcnZpY2UpXG4gIHByb3RlY3RlZCByZWFkb25seSBjb25maWcgPSBpbmplY3QoQ0FQSVRBTE9TX0NPTkZJRylcblxuICAvLyBDb21tb24gaW5wdXRzXG4gIEBJbnB1dCgpIHRoZW1lPzogVGhlbWVDb2xvclNjaGVtZVxuICBASW5wdXQoKSBoZWlnaHRPZmZzZXRQeCA9IDEyXG4gIEBJbnB1dCgpIGVuYWJsZUxvZ2dpbmc/OiBib29sZWFuXG5cbiAgLy8gQ29tbW9uIG91dHB1dHNcbiAgQE91dHB1dCgpIGxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKVxuICBAT3V0cHV0KCkgZXJyb3IgPSBuZXcgRXZlbnRFbWl0dGVyPENhcGl0YWxPU0Vycm9yPigpXG5cbiAgLy8gVmlldyBjaGlsZHJlblxuICBAVmlld0NoaWxkKCdpZnJhbWVDb250YWluZXInKSBpZnJhbWVDb250YWluZXI/OiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PlxuXG4gIC8vIEludGVybmFsIHN0YXRlXG4gIHByaXZhdGUgaWZyYW1lTWFuYWdlcj86IElmcmFtZU1hbmFnZXJcbiAgcHJpdmF0ZSB0b2tlbkRhdGFTdWJzY3JpcHRpb24/OiBTdWJzY3JpcHRpb25cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgLy8gU3Vic2NyaWJlIHRvIHRva2VuRGF0YSQgYW5kIGluaXRpYWxpemUgaWZyYW1lIHdoZW4gcmVhZHlcbiAgICB0aGlzLnRva2VuRGF0YVN1YnNjcmlwdGlvbiA9IHRoaXMuYXV0aFNlcnZpY2UudG9rZW5EYXRhJC5zdWJzY3JpYmUoKHRva2VuRGF0YSkgPT4ge1xuICAgICAgaWYgKHRva2VuRGF0YSAmJiB0aGlzLmlmcmFtZUNvbnRhaW5lcikge1xuICAgICAgICB0aGlzLmluaXRpYWxpemVJZnJhbWUodG9rZW5EYXRhLCB0aGlzLmlmcmFtZUNvbnRhaW5lci5uYXRpdmVFbGVtZW50KVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnRva2VuRGF0YVN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKVxuICAgIHRoaXMuaWZyYW1lTWFuYWdlcj8uZGVzdHJveSgpXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgcmVuZGVyaW5nIGNvbnRleHQgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKiBNdXN0IGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzZXMuXG4gICAqL1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0UmVuZGVyaW5nQ29udGV4dCgpOiBSZW5kZXJpbmdDb250ZXh0XG5cbiAgLyoqXG4gICAqIFJldHVybnMgY29tcG9uZW50LXNwZWNpZmljIFBlbnBhbCBjYWxsYmFja3MuXG4gICAqIE92ZXJyaWRlIGluIHN1YmNsYXNzZXMgdGhhdCBuZWVkIGNhbGxiYWNrcyAoZS5nLiwgT25ib2FyZGluZywgVG9rZW5FeGNoYW5nZSkuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0Q29tcG9uZW50Q2FsbGJhY2tzKCk6IENvbXBvbmVudENhbGxiYWNrcyB7XG4gICAgcmV0dXJuIHt9XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVJZnJhbWUodG9rZW5EYXRhOiBUb2tlbkRhdGEsIGNvbnRhaW5lcjogSFRNTEVsZW1lbnQpOiB2b2lkIHtcbiAgICAvLyBEZXN0cm95IHByZXZpb3VzIGlmcmFtZSBpZiBleGlzdHNcbiAgICB0aGlzLmlmcmFtZU1hbmFnZXI/LmRlc3Ryb3koKVxuXG4gICAgY29uc3QgcmVzb2x2ZWRFbmFibGVMb2dnaW5nID0gdGhpcy5lbmFibGVMb2dnaW5nID8/IHRoaXMuY29uZmlnLmVuYWJsZUxvZ2dpbmcgPz8gZmFsc2VcbiAgICBjb25zdCByZXNvbHZlZFRoZW1lID0gdGhpcy50aGVtZSA/PyB0aGlzLmNvbmZpZy50aGVtZVxuXG4gICAgdGhpcy5pZnJhbWVNYW5hZ2VyID0gbmV3IElmcmFtZU1hbmFnZXIoe1xuICAgICAgY29udGFpbmVyLFxuICAgICAgdG9rZW5EYXRhLFxuICAgICAgcmVuZGVyaW5nQ29udGV4dDogdGhpcy5nZXRSZW5kZXJpbmdDb250ZXh0KCksXG4gICAgICB0aGVtZTogcmVzb2x2ZWRUaGVtZSxcbiAgICAgIGVuYWJsZUxvZ2dpbmc6IHJlc29sdmVkRW5hYmxlTG9nZ2luZyxcbiAgICAgIGxvZ2dlcjogdGhpcy5jb25maWcubG9nZ2VyLFxuICAgICAgc2RrVmVyc2lvbjogU0RLX1ZFUlNJT04sXG4gICAgICBoZWlnaHRPZmZzZXRQeDogdGhpcy5oZWlnaHRPZmZzZXRQeCxcbiAgICAgIGNhbGxiYWNrczoge1xuICAgICAgICBvbkxvYWQ6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLmxvYWRlZC5lbWl0KClcbiAgICAgICAgfSxcbiAgICAgICAgb25FcnJvcjogKHJhd0Vycm9yOiBSYXdFcnJvckRldGFpbHMpID0+IHtcbiAgICAgICAgICBjb25zdCBjYXBpdGFsT3NFcnJvciA9IG5ldyBDYXBpdGFsT1NFcnJvcihyYXdFcnJvcilcbiAgICAgICAgICB0aGlzLmVycm9yLmVtaXQoY2FwaXRhbE9zRXJyb3IpXG4gICAgICAgIH0sXG4gICAgICAgIG9uVG9rZW5FeHBpcmVkOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5hdXRoU2VydmljZS5pbnZhbGlkYXRlVG9rZW4oKVxuICAgICAgICB9LFxuICAgICAgICAuLi50aGlzLmdldENvbXBvbmVudENhbGxiYWNrcygpLFxuICAgICAgfSxcbiAgICB9KVxuICB9XG59XG4iXX0=
@@ -0,0 +1,30 @@
1
+ import { Component } from '@angular/core';
2
+ import { BaseIframeComponent, IFRAME_COMPONENT_TEMPLATE, IFRAME_COMPONENT_STYLES } from './base-iframe.component';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * BillPayApp component that renders the CapitalOS bill payment interface in an iframe.
6
+ *
7
+ * The component emits events for loading state - consumers should handle their own loading UI:
8
+ *
9
+ * ```html
10
+ * <div *ngIf="!billPayLoaded">
11
+ * <my-loading-spinner></my-loading-spinner>
12
+ * </div>
13
+ * <capitalos-billpay-app
14
+ * (loaded)="billPayLoaded = true"
15
+ * (error)="onBillPayError($event)"
16
+ * ></capitalos-billpay-app>
17
+ * ```
18
+ */
19
+ export class BillPayAppComponent extends BaseIframeComponent {
20
+ getRenderingContext() {
21
+ return { entryPoint: 'billPayApp' };
22
+ }
23
+ }
24
+ BillPayAppComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BillPayAppComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
25
+ BillPayAppComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: BillPayAppComponent, isStandalone: true, selector: "capitalos-billpay-app", usesInheritance: true, ngImport: i0, template: "<div #iframeContainer class=\"capitalos-iframe-container\"></div>", isInline: true, styles: [":host{display:block;width:100%}.capitalos-iframe-container{width:100%}\n"] });
26
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BillPayAppComponent, decorators: [{
27
+ type: Component,
28
+ args: [{ selector: 'capitalos-billpay-app', standalone: true, template: IFRAME_COMPONENT_TEMPLATE, styles: [":host{display:block;width:100%}.capitalos-iframe-container{width:100%}\n"] }]
29
+ }] });
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmlsbHBheS1hcHAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvY2FwaXRhbG9zLWFuZ3VsYXIvc3JjL2xpYi9iaWxscGF5LWFwcC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUV6QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUseUJBQXlCLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTs7QUFFakg7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFPSCxNQUFNLE9BQU8sbUJBQW9CLFNBQVEsbUJBQW1CO0lBQ2hELG1CQUFtQjtRQUMzQixPQUFPLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxDQUFBO0lBQ3JDLENBQUM7O2dIQUhVLG1CQUFtQjtvR0FBbkIsbUJBQW1COzJGQUFuQixtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0UsdUJBQXVCLGNBQ3JCLElBQUksWUFDTix5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgUmVuZGVyaW5nQ29udGV4dCB9IGZyb20gJ0BjYXBpdGFsb3MvY29yZSdcbmltcG9ydCB7IEJhc2VJZnJhbWVDb21wb25lbnQsIElGUkFNRV9DT01QT05FTlRfVEVNUExBVEUsIElGUkFNRV9DT01QT05FTlRfU1RZTEVTIH0gZnJvbSAnLi9iYXNlLWlmcmFtZS5jb21wb25lbnQnXG5cbi8qKlxuICogQmlsbFBheUFwcCBjb21wb25lbnQgdGhhdCByZW5kZXJzIHRoZSBDYXBpdGFsT1MgYmlsbCBwYXltZW50IGludGVyZmFjZSBpbiBhbiBpZnJhbWUuXG4gKlxuICogVGhlIGNvbXBvbmVudCBlbWl0cyBldmVudHMgZm9yIGxvYWRpbmcgc3RhdGUgLSBjb25zdW1lcnMgc2hvdWxkIGhhbmRsZSB0aGVpciBvd24gbG9hZGluZyBVSTpcbiAqXG4gKiBgYGBodG1sXG4gKiA8ZGl2ICpuZ0lmPVwiIWJpbGxQYXlMb2FkZWRcIj5cbiAqICAgPG15LWxvYWRpbmctc3Bpbm5lcj48L215LWxvYWRpbmctc3Bpbm5lcj5cbiAqIDwvZGl2PlxuICogPGNhcGl0YWxvcy1iaWxscGF5LWFwcFxuICogICAobG9hZGVkKT1cImJpbGxQYXlMb2FkZWQgPSB0cnVlXCJcbiAqICAgKGVycm9yKT1cIm9uQmlsbFBheUVycm9yKCRldmVudClcIlxuICogPjwvY2FwaXRhbG9zLWJpbGxwYXktYXBwPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NhcGl0YWxvcy1iaWxscGF5LWFwcCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHRlbXBsYXRlOiBJRlJBTUVfQ09NUE9ORU5UX1RFTVBMQVRFLFxuICBzdHlsZXM6IElGUkFNRV9DT01QT05FTlRfU1RZTEVTLFxufSlcbmV4cG9ydCBjbGFzcyBCaWxsUGF5QXBwQ29tcG9uZW50IGV4dGVuZHMgQmFzZUlmcmFtZUNvbXBvbmVudCB7XG4gIHByb3RlY3RlZCBnZXRSZW5kZXJpbmdDb250ZXh0KCk6IFJlbmRlcmluZ0NvbnRleHQge1xuICAgIHJldHVybiB7IGVudHJ5UG9pbnQ6ICdiaWxsUGF5QXBwJyB9XG4gIH1cbn1cbiJdfQ==
@@ -1,5 +1,7 @@
1
1
  import { NgModule } from '@angular/core';
2
2
  import { CardsAppComponent } from './cards-app.component';
3
+ import { BillPayAppComponent } from './billpay-app.component';
4
+ import { OnboardingComponent } from './onboarding.component';
3
5
  import { CAPITALOS_CONFIG } from './provide-capitalos';
4
6
  import { CapitalOsAuthService } from './capitalos-auth.service';
5
7
  import { TokenExchangeService } from './token-exchange.service';
@@ -36,13 +38,13 @@ export class CapitalOsModule {
36
38
  }
37
39
  }
38
40
  CapitalOsModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CapitalOsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
39
- CapitalOsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: CapitalOsModule, imports: [CardsAppComponent], exports: [CardsAppComponent] });
40
- CapitalOsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CapitalOsModule, imports: [CardsAppComponent] });
41
+ CapitalOsModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: CapitalOsModule, imports: [CardsAppComponent, BillPayAppComponent, OnboardingComponent], exports: [CardsAppComponent, BillPayAppComponent, OnboardingComponent] });
42
+ CapitalOsModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CapitalOsModule, imports: [CardsAppComponent, BillPayAppComponent, OnboardingComponent] });
41
43
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CapitalOsModule, decorators: [{
42
44
  type: NgModule,
43
45
  args: [{
44
- imports: [CardsAppComponent],
45
- exports: [CardsAppComponent],
46
+ imports: [CardsAppComponent, BillPayAppComponent, OnboardingComponent],
47
+ exports: [CardsAppComponent, BillPayAppComponent, OnboardingComponent],
46
48
  }]
47
49
  }] });
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwaXRhbG9zLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NhcGl0YWxvcy1hbmd1bGFyL3NyYy9saWIvY2FwaXRhbG9zLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVCLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUN6RCxPQUFPLEVBQW1CLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDdkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFDL0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUE7O0FBRS9EOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBS0gsTUFBTSxPQUFPLGVBQWU7SUFDMUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUF1QjtRQUNwQyxPQUFPO1lBQ0wsUUFBUSxFQUFFLGVBQWU7WUFDekIsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixDQUFDO1NBQ3pHLENBQUE7SUFDSCxDQUFDOzs0R0FOVSxlQUFlOzZHQUFmLGVBQWUsWUFIaEIsaUJBQWlCLGFBQ2pCLGlCQUFpQjs2R0FFaEIsZUFBZSxZQUhoQixpQkFBaUI7MkZBR2hCLGVBQWU7a0JBSjNCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsaUJBQWlCLENBQUM7b0JBQzVCLE9BQU8sRUFBRSxDQUFDLGlCQUFpQixDQUFDO2lCQUM3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IENhcmRzQXBwQ29tcG9uZW50IH0gZnJvbSAnLi9jYXJkcy1hcHAuY29tcG9uZW50J1xuaW1wb3J0IHsgQ2FwaXRhbE9zQ29uZmlnLCBDQVBJVEFMT1NfQ09ORklHIH0gZnJvbSAnLi9wcm92aWRlLWNhcGl0YWxvcydcbmltcG9ydCB7IENhcGl0YWxPc0F1dGhTZXJ2aWNlIH0gZnJvbSAnLi9jYXBpdGFsb3MtYXV0aC5zZXJ2aWNlJ1xuaW1wb3J0IHsgVG9rZW5FeGNoYW5nZVNlcnZpY2UgfSBmcm9tICcuL3Rva2VuLWV4Y2hhbmdlLnNlcnZpY2UnXG5cbi8qKlxuICogTmdNb2R1bGUgZm9yIENhcGl0YWxPUyBTREsuXG4gKlxuICogVXNlIHRoaXMgbW9kdWxlIGZvciBOZ01vZHVsZS1iYXNlZCBBbmd1bGFyIGFwcGxpY2F0aW9ucy5cbiAqIEZvciBzdGFuZGFsb25lIGFwcGxpY2F0aW9ucywgdXNlIHByb3ZpZGVDYXBpdGFsT3MoKSBpbnN0ZWFkLlxuICpcbiAqIFVzYWdlOlxuICogYGBgdHlwZXNjcmlwdFxuICogQE5nTW9kdWxlKHtcbiAqICAgaW1wb3J0czogW1xuICogICAgIENhcGl0YWxPc01vZHVsZS5mb3JSb290KHtcbiAqICAgICAgIGdldFRva2VuOiBhc3luYyAoKSA9PiB7XG4gKiAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goJy9hcGkvY2FwaXRhbG9zL3Rva2VuJyk7XG4gKiAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7XG4gKiAgICAgICAgIHJldHVybiBkYXRhLnRva2VuO1xuICogICAgICAgfSxcbiAqICAgICAgIGVuYWJsZUxvZ2dpbmc6IHRydWUsXG4gKiAgICAgfSksXG4gKiAgIF0sXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIEFwcE1vZHVsZSB7fVxuICogYGBgXG4gKi9cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IFtDYXJkc0FwcENvbXBvbmVudF0sXG4gIGV4cG9ydHM6IFtDYXJkc0FwcENvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIENhcGl0YWxPc01vZHVsZSB7XG4gIHN0YXRpYyBmb3JSb290KGNvbmZpZzogQ2FwaXRhbE9zQ29uZmlnKTogTW9kdWxlV2l0aFByb3ZpZGVyczxDYXBpdGFsT3NNb2R1bGU+IHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IENhcGl0YWxPc01vZHVsZSxcbiAgICAgIHByb3ZpZGVyczogW3sgcHJvdmlkZTogQ0FQSVRBTE9TX0NPTkZJRywgdXNlVmFsdWU6IGNvbmZpZyB9LCBUb2tlbkV4Y2hhbmdlU2VydmljZSwgQ2FwaXRhbE9zQXV0aFNlcnZpY2VdLFxuICAgIH1cbiAgfVxufVxuIl19
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FwaXRhbG9zLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NhcGl0YWxvcy1hbmd1bGFyL3NyYy9saWIvY2FwaXRhbG9zLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVCLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUN6RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUM1RCxPQUFPLEVBQW1CLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFDdkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFDL0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUE7O0FBRS9EOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBS0gsTUFBTSxPQUFPLGVBQWU7SUFDMUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUF1QjtRQUNwQyxPQUFPO1lBQ0wsUUFBUSxFQUFFLGVBQWU7WUFDekIsU0FBUyxFQUFFLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxFQUFFLG9CQUFvQixFQUFFLG9CQUFvQixDQUFDO1NBQ3pHLENBQUE7SUFDSCxDQUFDOzs0R0FOVSxlQUFlOzZHQUFmLGVBQWUsWUFIaEIsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLGFBQzNELGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLG1CQUFtQjs2R0FFMUQsZUFBZSxZQUhoQixpQkFBaUIsRUFBRSxtQkFBbUIsRUFBRSxtQkFBbUI7MkZBRzFELGVBQWU7a0JBSjNCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsbUJBQW1CLENBQUM7b0JBQ3RFLE9BQU8sRUFBRSxDQUFDLGlCQUFpQixFQUFFLG1CQUFtQixFQUFFLG1CQUFtQixDQUFDO2lCQUN2RSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE1vZHVsZVdpdGhQcm92aWRlcnMsIE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IENhcmRzQXBwQ29tcG9uZW50IH0gZnJvbSAnLi9jYXJkcy1hcHAuY29tcG9uZW50J1xuaW1wb3J0IHsgQmlsbFBheUFwcENvbXBvbmVudCB9IGZyb20gJy4vYmlsbHBheS1hcHAuY29tcG9uZW50J1xuaW1wb3J0IHsgT25ib2FyZGluZ0NvbXBvbmVudCB9IGZyb20gJy4vb25ib2FyZGluZy5jb21wb25lbnQnXG5pbXBvcnQgeyBDYXBpdGFsT3NDb25maWcsIENBUElUQUxPU19DT05GSUcgfSBmcm9tICcuL3Byb3ZpZGUtY2FwaXRhbG9zJ1xuaW1wb3J0IHsgQ2FwaXRhbE9zQXV0aFNlcnZpY2UgfSBmcm9tICcuL2NhcGl0YWxvcy1hdXRoLnNlcnZpY2UnXG5pbXBvcnQgeyBUb2tlbkV4Y2hhbmdlU2VydmljZSB9IGZyb20gJy4vdG9rZW4tZXhjaGFuZ2Uuc2VydmljZSdcblxuLyoqXG4gKiBOZ01vZHVsZSBmb3IgQ2FwaXRhbE9TIFNESy5cbiAqXG4gKiBVc2UgdGhpcyBtb2R1bGUgZm9yIE5nTW9kdWxlLWJhc2VkIEFuZ3VsYXIgYXBwbGljYXRpb25zLlxuICogRm9yIHN0YW5kYWxvbmUgYXBwbGljYXRpb25zLCB1c2UgcHJvdmlkZUNhcGl0YWxPcygpIGluc3RlYWQuXG4gKlxuICogVXNhZ2U6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBATmdNb2R1bGUoe1xuICogICBpbXBvcnRzOiBbXG4gKiAgICAgQ2FwaXRhbE9zTW9kdWxlLmZvclJvb3Qoe1xuICogICAgICAgZ2V0VG9rZW46IGFzeW5jICgpID0+IHtcbiAqICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCgnL2FwaS9jYXBpdGFsb3MvdG9rZW4nKTtcbiAqICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTtcbiAqICAgICAgICAgcmV0dXJuIGRhdGEudG9rZW47XG4gKiAgICAgICB9LFxuICogICAgICAgZW5hYmxlTG9nZ2luZzogdHJ1ZSxcbiAqICAgICB9KSxcbiAqICAgXSxcbiAqIH0pXG4gKiBleHBvcnQgY2xhc3MgQXBwTW9kdWxlIHt9XG4gKiBgYGBcbiAqL1xuQE5nTW9kdWxlKHtcbiAgaW1wb3J0czogW0NhcmRzQXBwQ29tcG9uZW50LCBCaWxsUGF5QXBwQ29tcG9uZW50LCBPbmJvYXJkaW5nQ29tcG9uZW50XSxcbiAgZXhwb3J0czogW0NhcmRzQXBwQ29tcG9uZW50LCBCaWxsUGF5QXBwQ29tcG9uZW50LCBPbmJvYXJkaW5nQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgQ2FwaXRhbE9zTW9kdWxlIHtcbiAgc3RhdGljIGZvclJvb3QoY29uZmlnOiBDYXBpdGFsT3NDb25maWcpOiBNb2R1bGVXaXRoUHJvdmlkZXJzPENhcGl0YWxPc01vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogQ2FwaXRhbE9zTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbeyBwcm92aWRlOiBDQVBJVEFMT1NfQ09ORklHLCB1c2VWYWx1ZTogY29uZmlnIH0sIFRva2VuRXhjaGFuZ2VTZXJ2aWNlLCBDYXBpdGFsT3NBdXRoU2VydmljZV0sXG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,10 +1,6 @@
1
- import { Component, inject, Input, Output, EventEmitter, ViewChild, } from '@angular/core';
2
- import { IframeManager, CapitalOSError } from '@capitalos/core';
3
- import { CapitalOsAuthService } from './capitalos-auth.service';
4
- import { CAPITALOS_CONFIG } from './provide-capitalos';
1
+ import { Component } from '@angular/core';
2
+ import { BaseIframeComponent, IFRAME_COMPONENT_TEMPLATE, IFRAME_COMPONENT_STYLES } from './base-iframe.component';
5
3
  import * as i0 from "@angular/core";
6
- // TODO: Automate version injection at build time
7
- const SDK_VERSION = '0.1.0-rc.1';
8
4
  /**
9
5
  * CardsApp component that renders the CapitalOS cards interface in an iframe.
10
6
  *
@@ -20,74 +16,15 @@ const SDK_VERSION = '0.1.0-rc.1';
20
16
  * ></capitalos-cards-app>
21
17
  * ```
22
18
  */
23
- export class CardsAppComponent {
24
- constructor() {
25
- // Injected services
26
- this.authService = inject(CapitalOsAuthService);
27
- this.config = inject(CAPITALOS_CONFIG);
28
- this.heightOffsetPx = 12;
29
- // Outputs
30
- this.loaded = new EventEmitter();
31
- this.error = new EventEmitter();
32
- }
33
- ngAfterViewInit() {
34
- // Subscribe to tokenData$ and initialize iframe when ready
35
- this.tokenDataSubscription = this.authService.tokenData$.subscribe((tokenData) => {
36
- if (tokenData && this.iframeContainer) {
37
- this.initializeIframe(tokenData, this.iframeContainer.nativeElement);
38
- }
39
- });
40
- }
41
- ngOnDestroy() {
42
- this.tokenDataSubscription?.unsubscribe();
43
- this.iframeManager?.destroy();
44
- }
45
- initializeIframe(tokenData, container) {
46
- // Destroy previous iframe if exists
47
- this.iframeManager?.destroy();
48
- const resolvedEnableLogging = this.enableLogging ?? this.config.enableLogging ?? false;
49
- const resolvedTheme = this.theme ?? this.config.theme;
50
- this.iframeManager = new IframeManager({
51
- container,
52
- tokenData,
53
- renderingContext: { entryPoint: 'cardsApp' },
54
- theme: resolvedTheme,
55
- enableLogging: resolvedEnableLogging,
56
- logger: this.config.logger,
57
- sdkVersion: SDK_VERSION,
58
- heightOffsetPx: this.heightOffsetPx,
59
- callbacks: {
60
- onLoad: () => {
61
- this.loaded.emit();
62
- },
63
- onError: (rawError) => {
64
- const capitalOsError = new CapitalOSError(rawError);
65
- this.error.emit(capitalOsError);
66
- },
67
- onTokenExpired: () => {
68
- this.authService.invalidateToken();
69
- },
70
- },
71
- });
19
+ export class CardsAppComponent extends BaseIframeComponent {
20
+ getRenderingContext() {
21
+ return { entryPoint: 'cardsApp' };
72
22
  }
73
23
  }
74
- CardsAppComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CardsAppComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
75
- CardsAppComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CardsAppComponent, isStandalone: true, selector: "capitalos-cards-app", inputs: { theme: "theme", heightOffsetPx: "heightOffsetPx", enableLogging: "enableLogging" }, outputs: { loaded: "loaded", error: "error" }, viewQueries: [{ propertyName: "iframeContainer", first: true, predicate: ["iframeContainer"], descendants: true }], ngImport: i0, template: `<div #iframeContainer class="capitalos-iframe-container"></div>`, isInline: true, styles: [":host{display:block;width:100%}.capitalos-iframe-container{width:100%}\n"] });
24
+ CardsAppComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CardsAppComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
25
+ CardsAppComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CardsAppComponent, isStandalone: true, selector: "capitalos-cards-app", usesInheritance: true, ngImport: i0, template: "<div #iframeContainer class=\"capitalos-iframe-container\"></div>", isInline: true, styles: [":host{display:block;width:100%}.capitalos-iframe-container{width:100%}\n"] });
76
26
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CardsAppComponent, decorators: [{
77
27
  type: Component,
78
- args: [{ selector: 'capitalos-cards-app', standalone: true, template: `<div #iframeContainer class="capitalos-iframe-container"></div>`, styles: [":host{display:block;width:100%}.capitalos-iframe-container{width:100%}\n"] }]
79
- }], propDecorators: { theme: [{
80
- type: Input
81
- }], heightOffsetPx: [{
82
- type: Input
83
- }], enableLogging: [{
84
- type: Input
85
- }], loaded: [{
86
- type: Output
87
- }], error: [{
88
- type: Output
89
- }], iframeContainer: [{
90
- type: ViewChild,
91
- args: ['iframeContainer']
92
- }] } });
93
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZHMtYXBwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NhcGl0YWxvcy1hbmd1bGFyL3NyYy9saWIvY2FyZHMtYXBwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULE1BQU0sRUFDTixLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDWixTQUFTLEdBSVYsTUFBTSxlQUFlLENBQUE7QUFFdEIsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQWdELE1BQU0saUJBQWlCLENBQUE7QUFDN0csT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMEJBQTBCLENBQUE7QUFDL0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUE7O0FBRXRELGlEQUFpRDtBQUNqRCxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUE7QUFFaEM7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFrQkgsTUFBTSxPQUFPLGlCQUFpQjtJQWpCOUI7UUFrQkUsb0JBQW9CO1FBQ0gsZ0JBQVcsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtRQUMxQyxXQUFNLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUE7UUFJekMsbUJBQWMsR0FBRyxFQUFFLENBQUE7UUFHNUIsVUFBVTtRQUNBLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFBO1FBQ2pDLFVBQUssR0FBRyxJQUFJLFlBQVksRUFBa0IsQ0FBQTtLQXFEckQ7SUE1Q0MsZUFBZTtRQUNiLDJEQUEyRDtRQUMzRCxJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDL0UsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDckMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsZUFBZSxDQUFDLGFBQWEsQ0FBQyxDQUFBO2FBQ3JFO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxxQkFBcUIsRUFBRSxXQUFXLEVBQUUsQ0FBQTtRQUN6QyxJQUFJLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxDQUFBO0lBQy9CLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxTQUFvQixFQUFFLFNBQXNCO1FBQ25FLG9DQUFvQztRQUNwQyxJQUFJLENBQUMsYUFBYSxFQUFFLE9BQU8sRUFBRSxDQUFBO1FBRTdCLE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLGFBQWEsSUFBSSxLQUFLLENBQUE7UUFDdEYsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQTtRQUVyRCxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksYUFBYSxDQUFDO1lBQ3JDLFNBQVM7WUFDVCxTQUFTO1lBQ1QsZ0JBQWdCLEVBQUUsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFO1lBQzVDLEtBQUssRUFBRSxhQUFhO1lBQ3BCLGFBQWEsRUFBRSxxQkFBcUI7WUFDcEMsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTtZQUMxQixVQUFVLEVBQUUsV0FBVztZQUN2QixjQUFjLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDbkMsU0FBUyxFQUFFO2dCQUNULE1BQU0sRUFBRSxHQUFHLEVBQUU7b0JBQ1gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQTtnQkFDcEIsQ0FBQztnQkFDRCxPQUFPLEVBQUUsQ0FBQyxRQUF5QixFQUFFLEVBQUU7b0JBQ3JDLE1BQU0sY0FBYyxHQUFHLElBQUksY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFBO29CQUNuRCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQTtnQkFDakMsQ0FBQztnQkFDRCxjQUFjLEVBQUUsR0FBRyxFQUFFO29CQUNuQixJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsRUFBRSxDQUFBO2dCQUNwQyxDQUFDO2FBQ0Y7U0FDRixDQUFDLENBQUE7SUFDSixDQUFDOzs4R0FoRVUsaUJBQWlCO2tHQUFqQixpQkFBaUIsZ1ZBZGxCLGlFQUFpRTsyRkFjaEUsaUJBQWlCO2tCQWpCN0IsU0FBUzsrQkFDRSxxQkFBcUIsY0FDbkIsSUFBSSxZQUNOLGlFQUFpRTs4QkFvQmxFLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0ksTUFBTTtzQkFBZixNQUFNO2dCQUNHLEtBQUs7c0JBQWQsTUFBTTtnQkFHdUIsZUFBZTtzQkFBNUMsU0FBUzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIGluamVjdCxcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBWaWV3Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIEFmdGVyVmlld0luaXQsXG4gIE9uRGVzdHJveSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnXG5pbXBvcnQgeyBJZnJhbWVNYW5hZ2VyLCBDYXBpdGFsT1NFcnJvciwgVG9rZW5EYXRhLCBSYXdFcnJvckRldGFpbHMsIFRoZW1lQ29sb3JTY2hlbWUgfSBmcm9tICdAY2FwaXRhbG9zL2NvcmUnXG5pbXBvcnQgeyBDYXBpdGFsT3NBdXRoU2VydmljZSB9IGZyb20gJy4vY2FwaXRhbG9zLWF1dGguc2VydmljZSdcbmltcG9ydCB7IENBUElUQUxPU19DT05GSUcgfSBmcm9tICcuL3Byb3ZpZGUtY2FwaXRhbG9zJ1xuXG4vLyBUT0RPOiBBdXRvbWF0ZSB2ZXJzaW9uIGluamVjdGlvbiBhdCBidWlsZCB0aW1lXG5jb25zdCBTREtfVkVSU0lPTiA9ICcwLjEuMC1yYy4xJ1xuXG4vKipcbiAqIENhcmRzQXBwIGNvbXBvbmVudCB0aGF0IHJlbmRlcnMgdGhlIENhcGl0YWxPUyBjYXJkcyBpbnRlcmZhY2UgaW4gYW4gaWZyYW1lLlxuICpcbiAqIFRoZSBjb21wb25lbnQgZW1pdHMgZXZlbnRzIGZvciBsb2FkaW5nIHN0YXRlIC0gY29uc3VtZXJzIHNob3VsZCBoYW5kbGUgdGhlaXIgb3duIGxvYWRpbmcgVUk6XG4gKlxuICogYGBgaHRtbFxuICogPGRpdiAqbmdJZj1cIiFjYXJkc0xvYWRlZFwiPlxuICogICA8bXktbG9hZGluZy1zcGlubmVyPjwvbXktbG9hZGluZy1zcGlubmVyPlxuICogPC9kaXY+XG4gKiA8Y2FwaXRhbG9zLWNhcmRzLWFwcFxuICogICAobG9hZGVkKT1cImNhcmRzTG9hZGVkID0gdHJ1ZVwiXG4gKiAgIChlcnJvcik9XCJvbkNhcmRzRXJyb3IoJGV2ZW50KVwiXG4gKiA+PC9jYXBpdGFsb3MtY2FyZHMtYXBwPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NhcGl0YWxvcy1jYXJkcy1hcHAnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICB0ZW1wbGF0ZTogYDxkaXYgI2lmcmFtZUNvbnRhaW5lciBjbGFzcz1cImNhcGl0YWxvcy1pZnJhbWUtY29udGFpbmVyXCI+PC9kaXY+YCxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgICAgd2lkdGg6IDEwMCU7XG4gICAgICB9XG5cbiAgICAgIC5jYXBpdGFsb3MtaWZyYW1lLWNvbnRhaW5lciB7XG4gICAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgfVxuICAgIGAsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIENhcmRzQXBwQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgLy8gSW5qZWN0ZWQgc2VydmljZXNcbiAgcHJpdmF0ZSByZWFkb25seSBhdXRoU2VydmljZSA9IGluamVjdChDYXBpdGFsT3NBdXRoU2VydmljZSlcbiAgcHJpdmF0ZSByZWFkb25seSBjb25maWcgPSBpbmplY3QoQ0FQSVRBTE9TX0NPTkZJRylcblxuICAvLyBJbnB1dHNcbiAgQElucHV0KCkgdGhlbWU/OiBUaGVtZUNvbG9yU2NoZW1lXG4gIEBJbnB1dCgpIGhlaWdodE9mZnNldFB4ID0gMTJcbiAgQElucHV0KCkgZW5hYmxlTG9nZ2luZz86IGJvb2xlYW5cblxuICAvLyBPdXRwdXRzXG4gIEBPdXRwdXQoKSBsb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KClcbiAgQE91dHB1dCgpIGVycm9yID0gbmV3IEV2ZW50RW1pdHRlcjxDYXBpdGFsT1NFcnJvcj4oKVxuXG4gIC8vIFZpZXcgY2hpbGRyZW5cbiAgQFZpZXdDaGlsZCgnaWZyYW1lQ29udGFpbmVyJykgaWZyYW1lQ29udGFpbmVyPzogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD5cblxuICAvLyBJbnRlcm5hbCBzdGF0ZVxuICBwcml2YXRlIGlmcmFtZU1hbmFnZXI/OiBJZnJhbWVNYW5hZ2VyXG4gIHByaXZhdGUgdG9rZW5EYXRhU3Vic2NyaXB0aW9uPzogU3Vic2NyaXB0aW9uXG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIC8vIFN1YnNjcmliZSB0byB0b2tlbkRhdGEkIGFuZCBpbml0aWFsaXplIGlmcmFtZSB3aGVuIHJlYWR5XG4gICAgdGhpcy50b2tlbkRhdGFTdWJzY3JpcHRpb24gPSB0aGlzLmF1dGhTZXJ2aWNlLnRva2VuRGF0YSQuc3Vic2NyaWJlKCh0b2tlbkRhdGEpID0+IHtcbiAgICAgIGlmICh0b2tlbkRhdGEgJiYgdGhpcy5pZnJhbWVDb250YWluZXIpIHtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplSWZyYW1lKHRva2VuRGF0YSwgdGhpcy5pZnJhbWVDb250YWluZXIubmF0aXZlRWxlbWVudClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy50b2tlbkRhdGFTdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKClcbiAgICB0aGlzLmlmcmFtZU1hbmFnZXI/LmRlc3Ryb3koKVxuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplSWZyYW1lKHRva2VuRGF0YTogVG9rZW5EYXRhLCBjb250YWluZXI6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgLy8gRGVzdHJveSBwcmV2aW91cyBpZnJhbWUgaWYgZXhpc3RzXG4gICAgdGhpcy5pZnJhbWVNYW5hZ2VyPy5kZXN0cm95KClcblxuICAgIGNvbnN0IHJlc29sdmVkRW5hYmxlTG9nZ2luZyA9IHRoaXMuZW5hYmxlTG9nZ2luZyA/PyB0aGlzLmNvbmZpZy5lbmFibGVMb2dnaW5nID8/IGZhbHNlXG4gICAgY29uc3QgcmVzb2x2ZWRUaGVtZSA9IHRoaXMudGhlbWUgPz8gdGhpcy5jb25maWcudGhlbWVcblxuICAgIHRoaXMuaWZyYW1lTWFuYWdlciA9IG5ldyBJZnJhbWVNYW5hZ2VyKHtcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIHRva2VuRGF0YSxcbiAgICAgIHJlbmRlcmluZ0NvbnRleHQ6IHsgZW50cnlQb2ludDogJ2NhcmRzQXBwJyB9LFxuICAgICAgdGhlbWU6IHJlc29sdmVkVGhlbWUsXG4gICAgICBlbmFibGVMb2dnaW5nOiByZXNvbHZlZEVuYWJsZUxvZ2dpbmcsXG4gICAgICBsb2dnZXI6IHRoaXMuY29uZmlnLmxvZ2dlcixcbiAgICAgIHNka1ZlcnNpb246IFNES19WRVJTSU9OLFxuICAgICAgaGVpZ2h0T2Zmc2V0UHg6IHRoaXMuaGVpZ2h0T2Zmc2V0UHgsXG4gICAgICBjYWxsYmFja3M6IHtcbiAgICAgICAgb25Mb2FkOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5sb2FkZWQuZW1pdCgpXG4gICAgICAgIH0sXG4gICAgICAgIG9uRXJyb3I6IChyYXdFcnJvcjogUmF3RXJyb3JEZXRhaWxzKSA9PiB7XG4gICAgICAgICAgY29uc3QgY2FwaXRhbE9zRXJyb3IgPSBuZXcgQ2FwaXRhbE9TRXJyb3IocmF3RXJyb3IpXG4gICAgICAgICAgdGhpcy5lcnJvci5lbWl0KGNhcGl0YWxPc0Vycm9yKVxuICAgICAgICB9LFxuICAgICAgICBvblRva2VuRXhwaXJlZDogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuYXV0aFNlcnZpY2UuaW52YWxpZGF0ZVRva2VuKClcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfSlcbiAgfVxufVxuIl19
28
+ args: [{ selector: 'capitalos-cards-app', standalone: true, template: IFRAME_COMPONENT_TEMPLATE, styles: [":host{display:block;width:100%}.capitalos-iframe-container{width:100%}\n"] }]
29
+ }] });
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZHMtYXBwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NhcGl0YWxvcy1hbmd1bGFyL3NyYy9saWIvY2FyZHMtYXBwLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBRXpDLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSx5QkFBeUIsRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHlCQUF5QixDQUFBOztBQUVqSDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQU9ILE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxtQkFBbUI7SUFDOUMsbUJBQW1CO1FBQzNCLE9BQU8sRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLENBQUE7SUFDbkMsQ0FBQzs7OEdBSFUsaUJBQWlCO2tHQUFqQixpQkFBaUI7MkZBQWpCLGlCQUFpQjtrQkFON0IsU0FBUzsrQkFDRSxxQkFBcUIsY0FDbkIsSUFBSSxZQUNOLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBSZW5kZXJpbmdDb250ZXh0IH0gZnJvbSAnQGNhcGl0YWxvcy9jb3JlJ1xuaW1wb3J0IHsgQmFzZUlmcmFtZUNvbXBvbmVudCwgSUZSQU1FX0NPTVBPTkVOVF9URU1QTEFURSwgSUZSQU1FX0NPTVBPTkVOVF9TVFlMRVMgfSBmcm9tICcuL2Jhc2UtaWZyYW1lLmNvbXBvbmVudCdcblxuLyoqXG4gKiBDYXJkc0FwcCBjb21wb25lbnQgdGhhdCByZW5kZXJzIHRoZSBDYXBpdGFsT1MgY2FyZHMgaW50ZXJmYWNlIGluIGFuIGlmcmFtZS5cbiAqXG4gKiBUaGUgY29tcG9uZW50IGVtaXRzIGV2ZW50cyBmb3IgbG9hZGluZyBzdGF0ZSAtIGNvbnN1bWVycyBzaG91bGQgaGFuZGxlIHRoZWlyIG93biBsb2FkaW5nIFVJOlxuICpcbiAqIGBgYGh0bWxcbiAqIDxkaXYgKm5nSWY9XCIhY2FyZHNMb2FkZWRcIj5cbiAqICAgPG15LWxvYWRpbmctc3Bpbm5lcj48L215LWxvYWRpbmctc3Bpbm5lcj5cbiAqIDwvZGl2PlxuICogPGNhcGl0YWxvcy1jYXJkcy1hcHBcbiAqICAgKGxvYWRlZCk9XCJjYXJkc0xvYWRlZCA9IHRydWVcIlxuICogICAoZXJyb3IpPVwib25DYXJkc0Vycm9yKCRldmVudClcIlxuICogPjwvY2FwaXRhbG9zLWNhcmRzLWFwcD5cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjYXBpdGFsb3MtY2FyZHMtYXBwJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgdGVtcGxhdGU6IElGUkFNRV9DT01QT05FTlRfVEVNUExBVEUsXG4gIHN0eWxlczogSUZSQU1FX0NPTVBPTkVOVF9TVFlMRVMsXG59KVxuZXhwb3J0IGNsYXNzIENhcmRzQXBwQ29tcG9uZW50IGV4dGVuZHMgQmFzZUlmcmFtZUNvbXBvbmVudCB7XG4gIHByb3RlY3RlZCBnZXRSZW5kZXJpbmdDb250ZXh0KCk6IFJlbmRlcmluZ0NvbnRleHQge1xuICAgIHJldHVybiB7IGVudHJ5UG9pbnQ6ICdjYXJkc0FwcCcgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1,60 @@
1
+ import { Component, Input, Output, EventEmitter } from '@angular/core';
2
+ import { BaseIframeComponent, IFRAME_COMPONENT_TEMPLATE, IFRAME_COMPONENT_STYLES, } from './base-iframe.component';
3
+ import * as i0 from "@angular/core";
4
+ /**
5
+ * Onboarding component that renders the CapitalOS onboarding flow in an iframe.
6
+ *
7
+ * The component emits events for loading state and completion - consumers should handle their own loading UI:
8
+ *
9
+ * ```html
10
+ * <div *ngIf="!onboardingLoaded">
11
+ * <my-loading-spinner></my-loading-spinner>
12
+ * </div>
13
+ * <capitalos-onboarding
14
+ * [entryPoint]="'welcome'"
15
+ * [exitPoint]="'activation'"
16
+ * (loaded)="onboardingLoaded = true"
17
+ * (error)="onOnboardingError($event)"
18
+ * (done)="onOnboardingComplete($event)"
19
+ * ></capitalos-onboarding>
20
+ * ```
21
+ */
22
+ export class OnboardingComponent extends BaseIframeComponent {
23
+ constructor() {
24
+ super(...arguments);
25
+ // Onboarding-specific outputs
26
+ this.done = new EventEmitter();
27
+ }
28
+ getRenderingContext() {
29
+ return {
30
+ entryPoint: 'onboarding',
31
+ onboardingEntryPoint: this.entryPoint,
32
+ onboardingExitPoint: this.exitPoint,
33
+ allowExitOnNonApproved: this.allowExitOnNonApproved,
34
+ };
35
+ }
36
+ getComponentCallbacks() {
37
+ return {
38
+ onboarding: {
39
+ onDone: (account) => {
40
+ this.done.emit(account);
41
+ },
42
+ },
43
+ };
44
+ }
45
+ }
46
+ OnboardingComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: OnboardingComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
47
+ OnboardingComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: OnboardingComponent, isStandalone: true, selector: "capitalos-onboarding", inputs: { entryPoint: "entryPoint", exitPoint: "exitPoint", allowExitOnNonApproved: "allowExitOnNonApproved" }, outputs: { done: "done" }, usesInheritance: true, ngImport: i0, template: "<div #iframeContainer class=\"capitalos-iframe-container\"></div>", isInline: true, styles: [":host{display:block;width:100%}.capitalos-iframe-container{width:100%}\n"] });
48
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: OnboardingComponent, decorators: [{
49
+ type: Component,
50
+ args: [{ selector: 'capitalos-onboarding', standalone: true, template: IFRAME_COMPONENT_TEMPLATE, styles: [":host{display:block;width:100%}.capitalos-iframe-container{width:100%}\n"] }]
51
+ }], propDecorators: { entryPoint: [{
52
+ type: Input
53
+ }], exitPoint: [{
54
+ type: Input
55
+ }], allowExitOnNonApproved: [{
56
+ type: Input
57
+ }], done: [{
58
+ type: Output
59
+ }] } });
60
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib25ib2FyZGluZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jYXBpdGFsb3MtYW5ndWxhci9zcmMvbGliL29uYm9hcmRpbmcuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFFdEUsT0FBTyxFQUNMLG1CQUFtQixFQUVuQix5QkFBeUIsRUFDekIsdUJBQXVCLEdBQ3hCLE1BQU0seUJBQXlCLENBQUE7O0FBRWhDOzs7Ozs7Ozs7Ozs7Ozs7OztHQWlCRztBQU9ILE1BQU0sT0FBTyxtQkFBb0IsU0FBUSxtQkFBbUI7SUFONUQ7O1FBWUUsOEJBQThCO1FBQ3BCLFNBQUksR0FBRyxJQUFJLFlBQVksRUFBVyxDQUFBO0tBb0I3QztJQWxCVyxtQkFBbUI7UUFDM0IsT0FBTztZQUNMLFVBQVUsRUFBRSxZQUFZO1lBQ3hCLG9CQUFvQixFQUFFLElBQUksQ0FBQyxVQUFVO1lBQ3JDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ25DLHNCQUFzQixFQUFFLElBQUksQ0FBQyxzQkFBc0I7U0FDcEQsQ0FBQTtJQUNILENBQUM7SUFFa0IscUJBQXFCO1FBQ3RDLE9BQU87WUFDTCxVQUFVLEVBQUU7Z0JBQ1YsTUFBTSxFQUFFLENBQUMsT0FBZ0IsRUFBRSxFQUFFO29CQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtnQkFDekIsQ0FBQzthQUNGO1NBQ0YsQ0FBQTtJQUNILENBQUM7O2dIQTFCVSxtQkFBbUI7b0dBQW5CLG1CQUFtQjsyRkFBbkIsbUJBQW1CO2tCQU4vQixTQUFTOytCQUNFLHNCQUFzQixjQUNwQixJQUFJLFlBQ04seUJBQXlCOzhCQUsxQixVQUFVO3NCQUFsQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csc0JBQXNCO3NCQUE5QixLQUFLO2dCQUdJLElBQUk7c0JBQWIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE91dHB1dCwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IFJlbmRlcmluZ0NvbnRleHQsIEFjY291bnQsIE9uYm9hcmRpbmdFbnRyeVBvaW50LCBPbmJvYXJkaW5nRXhpdFBvaW50IH0gZnJvbSAnQGNhcGl0YWxvcy9jb3JlJ1xuaW1wb3J0IHtcbiAgQmFzZUlmcmFtZUNvbXBvbmVudCxcbiAgQ29tcG9uZW50Q2FsbGJhY2tzLFxuICBJRlJBTUVfQ09NUE9ORU5UX1RFTVBMQVRFLFxuICBJRlJBTUVfQ09NUE9ORU5UX1NUWUxFUyxcbn0gZnJvbSAnLi9iYXNlLWlmcmFtZS5jb21wb25lbnQnXG5cbi8qKlxuICogT25ib2FyZGluZyBjb21wb25lbnQgdGhhdCByZW5kZXJzIHRoZSBDYXBpdGFsT1Mgb25ib2FyZGluZyBmbG93IGluIGFuIGlmcmFtZS5cbiAqXG4gKiBUaGUgY29tcG9uZW50IGVtaXRzIGV2ZW50cyBmb3IgbG9hZGluZyBzdGF0ZSBhbmQgY29tcGxldGlvbiAtIGNvbnN1bWVycyBzaG91bGQgaGFuZGxlIHRoZWlyIG93biBsb2FkaW5nIFVJOlxuICpcbiAqIGBgYGh0bWxcbiAqIDxkaXYgKm5nSWY9XCIhb25ib2FyZGluZ0xvYWRlZFwiPlxuICogICA8bXktbG9hZGluZy1zcGlubmVyPjwvbXktbG9hZGluZy1zcGlubmVyPlxuICogPC9kaXY+XG4gKiA8Y2FwaXRhbG9zLW9uYm9hcmRpbmdcbiAqICAgW2VudHJ5UG9pbnRdPVwiJ3dlbGNvbWUnXCJcbiAqICAgW2V4aXRQb2ludF09XCInYWN0aXZhdGlvbidcIlxuICogICAobG9hZGVkKT1cIm9uYm9hcmRpbmdMb2FkZWQgPSB0cnVlXCJcbiAqICAgKGVycm9yKT1cIm9uT25ib2FyZGluZ0Vycm9yKCRldmVudClcIlxuICogICAoZG9uZSk9XCJvbk9uYm9hcmRpbmdDb21wbGV0ZSgkZXZlbnQpXCJcbiAqID48L2NhcGl0YWxvcy1vbmJvYXJkaW5nPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2NhcGl0YWxvcy1vbmJvYXJkaW5nJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgdGVtcGxhdGU6IElGUkFNRV9DT01QT05FTlRfVEVNUExBVEUsXG4gIHN0eWxlczogSUZSQU1FX0NPTVBPTkVOVF9TVFlMRVMsXG59KVxuZXhwb3J0IGNsYXNzIE9uYm9hcmRpbmdDb21wb25lbnQgZXh0ZW5kcyBCYXNlSWZyYW1lQ29tcG9uZW50IHtcbiAgLy8gT25ib2FyZGluZy1zcGVjaWZpYyBpbnB1dHNcbiAgQElucHV0KCkgZW50cnlQb2ludD86IE9uYm9hcmRpbmdFbnRyeVBvaW50XG4gIEBJbnB1dCgpIGV4aXRQb2ludD86IE9uYm9hcmRpbmdFeGl0UG9pbnRcbiAgQElucHV0KCkgYWxsb3dFeGl0T25Ob25BcHByb3ZlZD86IGJvb2xlYW5cblxuICAvLyBPbmJvYXJkaW5nLXNwZWNpZmljIG91dHB1dHNcbiAgQE91dHB1dCgpIGRvbmUgPSBuZXcgRXZlbnRFbWl0dGVyPEFjY291bnQ+KClcblxuICBwcm90ZWN0ZWQgZ2V0UmVuZGVyaW5nQ29udGV4dCgpOiBSZW5kZXJpbmdDb250ZXh0IHtcbiAgICByZXR1cm4ge1xuICAgICAgZW50cnlQb2ludDogJ29uYm9hcmRpbmcnLFxuICAgICAgb25ib2FyZGluZ0VudHJ5UG9pbnQ6IHRoaXMuZW50cnlQb2ludCxcbiAgICAgIG9uYm9hcmRpbmdFeGl0UG9pbnQ6IHRoaXMuZXhpdFBvaW50LFxuICAgICAgYWxsb3dFeGl0T25Ob25BcHByb3ZlZDogdGhpcy5hbGxvd0V4aXRPbk5vbkFwcHJvdmVkLFxuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBnZXRDb21wb25lbnRDYWxsYmFja3MoKTogQ29tcG9uZW50Q2FsbGJhY2tzIHtcbiAgICByZXR1cm4ge1xuICAgICAgb25ib2FyZGluZzoge1xuICAgICAgICBvbkRvbmU6IChhY2NvdW50OiBBY2NvdW50KSA9PiB7XG4gICAgICAgICAgdGhpcy5kb25lLmVtaXQoYWNjb3VudClcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1,5 @@
1
+ // AUTO-GENERATED FILE - DO NOT EDIT
2
+ // Generated by: scripts/generate-version.js
3
+ // Source: projects/capitalos-angular/package.json
4
+ export const SDK_VERSION = '0.1.0';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NhcGl0YWxvcy1hbmd1bGFyL3NyYy9saWIvdmVyc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvQ0FBb0M7QUFDcEMsNENBQTRDO0FBQzVDLGtEQUFrRDtBQUVsRCxNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQVVUTy1HRU5FUkFURUQgRklMRSAtIERPIE5PVCBFRElUXG4vLyBHZW5lcmF0ZWQgYnk6IHNjcmlwdHMvZ2VuZXJhdGUtdmVyc2lvbi5qc1xuLy8gU291cmNlOiBwcm9qZWN0cy9jYXBpdGFsb3MtYW5ndWxhci9wYWNrYWdlLmpzb25cblxuZXhwb3J0IGNvbnN0IFNES19WRVJTSU9OID0gJzAuMS4wJ1xuIl19
@@ -3,6 +3,8 @@
3
3
  */
4
4
  // Components
5
5
  export { CardsAppComponent } from './lib/cards-app.component';
6
+ export { BillPayAppComponent } from './lib/billpay-app.component';
7
+ export { OnboardingComponent } from './lib/onboarding.component';
6
8
  // Services
7
9
  export { CapitalOsAuthService } from './lib/capitalos-auth.service';
8
10
  // Provider (standalone)
@@ -10,4 +12,4 @@ export { provideCapitalOs, CAPITALOS_CONFIG } from './lib/provide-capitalos';
10
12
  // Module (NgModule-based apps)
11
13
  export { CapitalOsModule } from './lib/capitalos.module';
12
14
  export { CapitalOSError, ErrorCode } from '@capitalos/core';
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2NhcGl0YWxvcy1hbmd1bGFyL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsYUFBYTtBQUNiLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBRTdELFdBQVc7QUFDWCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTtBQUduRSx3QkFBd0I7QUFDeEIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFHNUUsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUt4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBAY2FwaXRhbG9zL2FuZ3VsYXJcbiAqL1xuXG4vLyBDb21wb25lbnRzXG5leHBvcnQgeyBDYXJkc0FwcENvbXBvbmVudCB9IGZyb20gJy4vbGliL2NhcmRzLWFwcC5jb21wb25lbnQnXG5cbi8vIFNlcnZpY2VzXG5leHBvcnQgeyBDYXBpdGFsT3NBdXRoU2VydmljZSB9IGZyb20gJy4vbGliL2NhcGl0YWxvcy1hdXRoLnNlcnZpY2UnXG5leHBvcnQgdHlwZSB7IEF1dGhTdGF0ZSB9IGZyb20gJy4vbGliL2NhcGl0YWxvcy1hdXRoLnNlcnZpY2UnXG5cbi8vIFByb3ZpZGVyIChzdGFuZGFsb25lKVxuZXhwb3J0IHsgcHJvdmlkZUNhcGl0YWxPcywgQ0FQSVRBTE9TX0NPTkZJRyB9IGZyb20gJy4vbGliL3Byb3ZpZGUtY2FwaXRhbG9zJ1xuZXhwb3J0IHR5cGUgeyBDYXBpdGFsT3NDb25maWcgfSBmcm9tICcuL2xpYi9wcm92aWRlLWNhcGl0YWxvcydcblxuLy8gTW9kdWxlIChOZ01vZHVsZS1iYXNlZCBhcHBzKVxuZXhwb3J0IHsgQ2FwaXRhbE9zTW9kdWxlIH0gZnJvbSAnLi9saWIvY2FwaXRhbG9zLm1vZHVsZSdcblxuLy8gUmUtZXhwb3J0IGNvbW1vbmx5IHVzZWQgdHlwZXMgZnJvbSBjb3JlXG5leHBvcnQgdHlwZSB7IFRoZW1lQ29sb3JTY2hlbWUsIExvZ2dlciwgVG9rZW5EYXRhLCBSYXdFcnJvckRldGFpbHMgfSBmcm9tICdAY2FwaXRhbG9zL2NvcmUnXG5cbmV4cG9ydCB7IENhcGl0YWxPU0Vycm9yLCBFcnJvckNvZGUgfSBmcm9tICdAY2FwaXRhbG9zL2NvcmUnXG4iXX0=
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2NhcGl0YWxvcy1hbmd1bGFyL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsYUFBYTtBQUNiLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDJCQUEyQixDQUFBO0FBQzdELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDZCQUE2QixDQUFBO0FBQ2pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDRCQUE0QixDQUFBO0FBRWhFLFdBQVc7QUFDWCxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTtBQUduRSx3QkFBd0I7QUFDeEIsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFHNUUsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUt4RCxPQUFPLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxNQUFNLGlCQUFpQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIFB1YmxpYyBBUEkgU3VyZmFjZSBvZiBAY2FwaXRhbG9zL2FuZ3VsYXJcbiAqL1xuXG4vLyBDb21wb25lbnRzXG5leHBvcnQgeyBDYXJkc0FwcENvbXBvbmVudCB9IGZyb20gJy4vbGliL2NhcmRzLWFwcC5jb21wb25lbnQnXG5leHBvcnQgeyBCaWxsUGF5QXBwQ29tcG9uZW50IH0gZnJvbSAnLi9saWIvYmlsbHBheS1hcHAuY29tcG9uZW50J1xuZXhwb3J0IHsgT25ib2FyZGluZ0NvbXBvbmVudCB9IGZyb20gJy4vbGliL29uYm9hcmRpbmcuY29tcG9uZW50J1xuXG4vLyBTZXJ2aWNlc1xuZXhwb3J0IHsgQ2FwaXRhbE9zQXV0aFNlcnZpY2UgfSBmcm9tICcuL2xpYi9jYXBpdGFsb3MtYXV0aC5zZXJ2aWNlJ1xuZXhwb3J0IHR5cGUgeyBBdXRoU3RhdGUgfSBmcm9tICcuL2xpYi9jYXBpdGFsb3MtYXV0aC5zZXJ2aWNlJ1xuXG4vLyBQcm92aWRlciAoc3RhbmRhbG9uZSlcbmV4cG9ydCB7IHByb3ZpZGVDYXBpdGFsT3MsIENBUElUQUxPU19DT05GSUcgfSBmcm9tICcuL2xpYi9wcm92aWRlLWNhcGl0YWxvcydcbmV4cG9ydCB0eXBlIHsgQ2FwaXRhbE9zQ29uZmlnIH0gZnJvbSAnLi9saWIvcHJvdmlkZS1jYXBpdGFsb3MnXG5cbi8vIE1vZHVsZSAoTmdNb2R1bGUtYmFzZWQgYXBwcylcbmV4cG9ydCB7IENhcGl0YWxPc01vZHVsZSB9IGZyb20gJy4vbGliL2NhcGl0YWxvcy5tb2R1bGUnXG5cbi8vIFJlLWV4cG9ydCBjb21tb25seSB1c2VkIHR5cGVzIGZyb20gY29yZVxuZXhwb3J0IHR5cGUgeyBUaGVtZUNvbG9yU2NoZW1lLCBMb2dnZXIsIFRva2VuRGF0YSwgUmF3RXJyb3JEZXRhaWxzLCBBY2NvdW50LCBBY2NvdW50U3RhdHVzIH0gZnJvbSAnQGNhcGl0YWxvcy9jb3JlJ1xuXG5leHBvcnQgeyBDYXBpdGFsT1NFcnJvciwgRXJyb3JDb2RlIH0gZnJvbSAnQGNhcGl0YWxvcy9jb3JlJ1xuIl19