@pillar-ai/angular 0.1.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +357 -0
- package/dist/LICENSE +21 -0
- package/dist/README.md +357 -0
- package/dist/esm2022/lib/inject-help-panel.mjs +59 -0
- package/dist/esm2022/lib/inject-pillar-tool.mjs +111 -0
- package/dist/esm2022/lib/inject-pillar.mjs +79 -0
- package/dist/esm2022/lib/pillar-panel.component.mjs +80 -0
- package/dist/esm2022/lib/pillar.service.mjs +308 -0
- package/dist/esm2022/lib/types.mjs +5 -0
- package/dist/esm2022/pillar-ai-angular.mjs +5 -0
- package/dist/esm2022/public-api.mjs +67 -0
- package/dist/fesm2022/pillar-ai-angular.mjs +695 -0
- package/dist/fesm2022/pillar-ai-angular.mjs.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/lib/inject-help-panel.d.ts +34 -0
- package/dist/lib/inject-pillar-tool.d.ts +89 -0
- package/dist/lib/inject-pillar.d.ts +96 -0
- package/dist/lib/pillar-panel.component.d.ts +58 -0
- package/dist/lib/pillar.service.d.ts +126 -0
- package/dist/lib/types.d.ts +119 -0
- package/dist/public-api.d.ts +77 -0
- package/package.json +73 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PillarPanelComponent
|
|
3
|
+
* Renders the Pillar help panel at a custom location in the DOM
|
|
4
|
+
*/
|
|
5
|
+
import { Component, ViewChild, inject, effect, input, ChangeDetectionStrategy, } from '@angular/core';
|
|
6
|
+
import { PillarService } from './pillar.service';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
/**
|
|
9
|
+
* Renders the Pillar help panel at a custom location in the DOM.
|
|
10
|
+
* Use this when you want to control where the panel is rendered instead of
|
|
11
|
+
* having it automatically appended to document.body.
|
|
12
|
+
*
|
|
13
|
+
* **Important**: When using this component, set `panel.container: 'manual'` in your
|
|
14
|
+
* Pillar configuration to prevent automatic mounting.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* // app.config.ts
|
|
19
|
+
* function initPillar() {
|
|
20
|
+
* const pillar = inject(PillarService);
|
|
21
|
+
* return () => pillar.init({
|
|
22
|
+
* productKey: 'your-product-key',
|
|
23
|
+
* config: { panel: { container: 'manual' } }
|
|
24
|
+
* });
|
|
25
|
+
* }
|
|
26
|
+
*
|
|
27
|
+
* // layout.component.ts
|
|
28
|
+
* @Component({
|
|
29
|
+
* selector: 'app-layout',
|
|
30
|
+
* standalone: true,
|
|
31
|
+
* imports: [PillarPanelComponent],
|
|
32
|
+
* template: `
|
|
33
|
+
* <div class="layout">
|
|
34
|
+
* <app-sidebar />
|
|
35
|
+
* <pillar-panel class="help-panel-container" />
|
|
36
|
+
* <main>
|
|
37
|
+
* <router-outlet />
|
|
38
|
+
* </main>
|
|
39
|
+
* </div>
|
|
40
|
+
* `,
|
|
41
|
+
* })
|
|
42
|
+
* export class LayoutComponent {}
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export class PillarPanelComponent {
|
|
46
|
+
containerRef;
|
|
47
|
+
pillarService = inject(PillarService);
|
|
48
|
+
hasMounted = false;
|
|
49
|
+
effectRef = null;
|
|
50
|
+
/**
|
|
51
|
+
* Optional class to add to the container element.
|
|
52
|
+
* Use host binding for styling instead if possible.
|
|
53
|
+
*/
|
|
54
|
+
containerClass = input('');
|
|
55
|
+
ngAfterViewInit() {
|
|
56
|
+
// Use effect to react to isReady signal changes
|
|
57
|
+
this.effectRef = effect(() => {
|
|
58
|
+
const isReady = this.pillarService.isReady();
|
|
59
|
+
if (isReady && !this.hasMounted && this.containerRef?.nativeElement) {
|
|
60
|
+
this.pillarService.mountPanelTo(this.containerRef.nativeElement);
|
|
61
|
+
this.hasMounted = true;
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
ngOnDestroy() {
|
|
66
|
+
// Effect is automatically cleaned up when component is destroyed
|
|
67
|
+
// Panel cleanup is handled by PillarService
|
|
68
|
+
this.effectRef?.destroy();
|
|
69
|
+
}
|
|
70
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PillarPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
71
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.3.12", type: PillarPanelComponent, isStandalone: true, selector: "pillar-panel", inputs: { containerClass: { classPropertyName: "containerClass", publicName: "containerClass", isSignal: true, isRequired: false, transformFunction: null } }, viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["container"], descendants: true, static: true }], ngImport: i0, template: '<div #container data-pillar-panel-container></div>', isInline: true, styles: [":host{display:block}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
72
|
+
}
|
|
73
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PillarPanelComponent, decorators: [{
|
|
74
|
+
type: Component,
|
|
75
|
+
args: [{ selector: 'pillar-panel', standalone: true, template: '<div #container data-pillar-panel-container></div>', changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block}\n"] }]
|
|
76
|
+
}], propDecorators: { containerRef: [{
|
|
77
|
+
type: ViewChild,
|
|
78
|
+
args: ['container', { static: true }]
|
|
79
|
+
}] } });
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlsbGFyLXBhbmVsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9saWIvcGlsbGFyLXBhbmVsLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQ0wsU0FBUyxFQUVULFNBQVMsRUFHVCxNQUFNLEVBQ04sTUFBTSxFQUNOLEtBQUssRUFDTCx1QkFBdUIsR0FDeEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDOztBQUVqRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBb0NHO0FBY0gsTUFBTSxPQUFPLG9CQUFvQjtJQUV2QixZQUFZLENBQThCO0lBRWpDLGFBQWEsR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDL0MsVUFBVSxHQUFHLEtBQUssQ0FBQztJQUNuQixTQUFTLEdBQXFDLElBQUksQ0FBQztJQUUzRDs7O09BR0c7SUFDTSxjQUFjLEdBQUcsS0FBSyxDQUFTLEVBQUUsQ0FBQyxDQUFDO0lBRTVDLGVBQWU7UUFDYixnREFBZ0Q7UUFDaEQsSUFBSSxDQUFDLFNBQVMsR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQzNCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUM7WUFFN0MsSUFBSSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUUsYUFBYSxFQUFFLENBQUM7Z0JBQ3BFLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ2pFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3pCLENBQUM7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxXQUFXO1FBQ1QsaUVBQWlFO1FBQ2pFLDRDQUE0QztRQUM1QyxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDO0lBQzVCLENBQUM7d0dBOUJVLG9CQUFvQjs0RkFBcEIsb0JBQW9CLGdXQVZyQixvREFBb0Q7OzRGQVVuRCxvQkFBb0I7a0JBYmhDLFNBQVM7K0JBQ0UsY0FBYyxjQUNaLElBQUksWUFDTixvREFBb0QsbUJBUTdDLHVCQUF1QixDQUFDLE1BQU07OEJBSXZDLFlBQVk7c0JBRG5CLFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGlsbGFyUGFuZWxDb21wb25lbnRcbiAqIFJlbmRlcnMgdGhlIFBpbGxhciBoZWxwIHBhbmVsIGF0IGEgY3VzdG9tIGxvY2F0aW9uIGluIHRoZSBET01cbiAqL1xuXG5pbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIFZpZXdDaGlsZCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgT25EZXN0cm95LFxuICBpbmplY3QsXG4gIGVmZmVjdCxcbiAgaW5wdXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFBpbGxhclNlcnZpY2UgfSBmcm9tICcuL3BpbGxhci5zZXJ2aWNlJztcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBQaWxsYXIgaGVscCBwYW5lbCBhdCBhIGN1c3RvbSBsb2NhdGlvbiBpbiB0aGUgRE9NLlxuICogVXNlIHRoaXMgd2hlbiB5b3Ugd2FudCB0byBjb250cm9sIHdoZXJlIHRoZSBwYW5lbCBpcyByZW5kZXJlZCBpbnN0ZWFkIG9mXG4gKiBoYXZpbmcgaXQgYXV0b21hdGljYWxseSBhcHBlbmRlZCB0byBkb2N1bWVudC5ib2R5LlxuICpcbiAqICoqSW1wb3J0YW50Kio6IFdoZW4gdXNpbmcgdGhpcyBjb21wb25lbnQsIHNldCBgcGFuZWwuY29udGFpbmVyOiAnbWFudWFsJ2AgaW4geW91clxuICogUGlsbGFyIGNvbmZpZ3VyYXRpb24gdG8gcHJldmVudCBhdXRvbWF0aWMgbW91bnRpbmcuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIC8vIGFwcC5jb25maWcudHNcbiAqIGZ1bmN0aW9uIGluaXRQaWxsYXIoKSB7XG4gKiAgIGNvbnN0IHBpbGxhciA9IGluamVjdChQaWxsYXJTZXJ2aWNlKTtcbiAqICAgcmV0dXJuICgpID0+IHBpbGxhci5pbml0KHtcbiAqICAgICBwcm9kdWN0S2V5OiAneW91ci1wcm9kdWN0LWtleScsXG4gKiAgICAgY29uZmlnOiB7IHBhbmVsOiB7IGNvbnRhaW5lcjogJ21hbnVhbCcgfSB9XG4gKiAgIH0pO1xuICogfVxuICpcbiAqIC8vIGxheW91dC5jb21wb25lbnQudHNcbiAqIEBDb21wb25lbnQoe1xuICogICBzZWxlY3RvcjogJ2FwcC1sYXlvdXQnLFxuICogICBzdGFuZGFsb25lOiB0cnVlLFxuICogICBpbXBvcnRzOiBbUGlsbGFyUGFuZWxDb21wb25lbnRdLFxuICogICB0ZW1wbGF0ZTogYFxuICogICAgIDxkaXYgY2xhc3M9XCJsYXlvdXRcIj5cbiAqICAgICAgIDxhcHAtc2lkZWJhciAvPlxuICogICAgICAgPHBpbGxhci1wYW5lbCBjbGFzcz1cImhlbHAtcGFuZWwtY29udGFpbmVyXCIgLz5cbiAqICAgICAgIDxtYWluPlxuICogICAgICAgICA8cm91dGVyLW91dGxldCAvPlxuICogICAgICAgPC9tYWluPlxuICogICAgIDwvZGl2PlxuICogICBgLFxuICogfSlcbiAqIGV4cG9ydCBjbGFzcyBMYXlvdXRDb21wb25lbnQge31cbiAqIGBgYFxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwaWxsYXItcGFuZWwnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICB0ZW1wbGF0ZTogJzxkaXYgI2NvbnRhaW5lciBkYXRhLXBpbGxhci1wYW5lbC1jb250YWluZXI+PC9kaXY+JyxcbiAgc3R5bGVzOiBbXG4gICAgYFxuICAgICAgOmhvc3Qge1xuICAgICAgICBkaXNwbGF5OiBibG9jaztcbiAgICAgIH1cbiAgICBgLFxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgUGlsbGFyUGFuZWxDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuICBAVmlld0NoaWxkKCdjb250YWluZXInLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBwcml2YXRlIGNvbnRhaW5lclJlZiE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcGlsbGFyU2VydmljZSA9IGluamVjdChQaWxsYXJTZXJ2aWNlKTtcbiAgcHJpdmF0ZSBoYXNNb3VudGVkID0gZmFsc2U7XG4gIHByaXZhdGUgZWZmZWN0UmVmOiBSZXR1cm5UeXBlPHR5cGVvZiBlZmZlY3Q+IHwgbnVsbCA9IG51bGw7XG5cbiAgLyoqXG4gICAqIE9wdGlvbmFsIGNsYXNzIHRvIGFkZCB0byB0aGUgY29udGFpbmVyIGVsZW1lbnQuXG4gICAqIFVzZSBob3N0IGJpbmRpbmcgZm9yIHN0eWxpbmcgaW5zdGVhZCBpZiBwb3NzaWJsZS5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRhaW5lckNsYXNzID0gaW5wdXQ8c3RyaW5nPignJyk7XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIC8vIFVzZSBlZmZlY3QgdG8gcmVhY3QgdG8gaXNSZWFkeSBzaWduYWwgY2hhbmdlc1xuICAgIHRoaXMuZWZmZWN0UmVmID0gZWZmZWN0KCgpID0+IHtcbiAgICAgIGNvbnN0IGlzUmVhZHkgPSB0aGlzLnBpbGxhclNlcnZpY2UuaXNSZWFkeSgpO1xuXG4gICAgICBpZiAoaXNSZWFkeSAmJiAhdGhpcy5oYXNNb3VudGVkICYmIHRoaXMuY29udGFpbmVyUmVmPy5uYXRpdmVFbGVtZW50KSB7XG4gICAgICAgIHRoaXMucGlsbGFyU2VydmljZS5tb3VudFBhbmVsVG8odGhpcy5jb250YWluZXJSZWYubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIHRoaXMuaGFzTW91bnRlZCA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAvLyBFZmZlY3QgaXMgYXV0b21hdGljYWxseSBjbGVhbmVkIHVwIHdoZW4gY29tcG9uZW50IGlzIGRlc3Ryb3llZFxuICAgIC8vIFBhbmVsIGNsZWFudXAgaXMgaGFuZGxlZCBieSBQaWxsYXJTZXJ2aWNlXG4gICAgdGhpcy5lZmZlY3RSZWY/LmRlc3Ryb3koKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PillarService
|
|
3
|
+
* Angular service that initializes and manages the Pillar SDK
|
|
4
|
+
*/
|
|
5
|
+
import { Injectable, NgZone, signal, computed, inject, createComponent, ApplicationRef, EnvironmentInjector, } from '@angular/core';
|
|
6
|
+
import { Pillar, } from '@pillar-ai/sdk';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
export class PillarService {
|
|
9
|
+
ngZone = inject(NgZone);
|
|
10
|
+
appRef = inject(ApplicationRef);
|
|
11
|
+
environmentInjector = inject(EnvironmentInjector);
|
|
12
|
+
// Internal state
|
|
13
|
+
_pillar = signal(null);
|
|
14
|
+
cleanupFns = [];
|
|
15
|
+
cardRefs = new Map();
|
|
16
|
+
onTaskCallback = null;
|
|
17
|
+
registeredCards = null;
|
|
18
|
+
// Public signals
|
|
19
|
+
state = signal('uninitialized');
|
|
20
|
+
isReady = computed(() => this.state() === 'ready');
|
|
21
|
+
isPanelOpen = signal(false);
|
|
22
|
+
/**
|
|
23
|
+
* Get the Pillar SDK instance.
|
|
24
|
+
*/
|
|
25
|
+
getInstance() {
|
|
26
|
+
return this._pillar();
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Initialize the Pillar SDK.
|
|
30
|
+
* Call this in your app's initialization (e.g., APP_INITIALIZER).
|
|
31
|
+
*
|
|
32
|
+
* @param initConfig - Configuration options
|
|
33
|
+
*/
|
|
34
|
+
async init(initConfig) {
|
|
35
|
+
const { productKey, helpCenter, config, onTask, cards } = initConfig;
|
|
36
|
+
// Support both productKey (new) and helpCenter (deprecated)
|
|
37
|
+
const resolvedKey = productKey ?? helpCenter;
|
|
38
|
+
if (helpCenter && !productKey) {
|
|
39
|
+
console.warn('[Pillar Angular] "helpCenter" is deprecated. Use "productKey" instead.');
|
|
40
|
+
}
|
|
41
|
+
// Store callbacks for later use
|
|
42
|
+
this.onTaskCallback = onTask ?? null;
|
|
43
|
+
this.registeredCards = cards ?? null;
|
|
44
|
+
try {
|
|
45
|
+
// Pillar is a singleton - check if already initialized
|
|
46
|
+
const existingInstance = Pillar.getInstance();
|
|
47
|
+
if (existingInstance) {
|
|
48
|
+
// Reuse existing instance (preserves chat history, panel state, etc.)
|
|
49
|
+
this._pillar.set(existingInstance);
|
|
50
|
+
this.state.set(existingInstance.state);
|
|
51
|
+
this.subscribeToEvents(existingInstance);
|
|
52
|
+
this.registerCards(existingInstance);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
// Initialize new instance
|
|
56
|
+
const instance = await Pillar.init({
|
|
57
|
+
productKey: resolvedKey,
|
|
58
|
+
...config,
|
|
59
|
+
});
|
|
60
|
+
this.ngZone.run(() => {
|
|
61
|
+
this._pillar.set(instance);
|
|
62
|
+
this.state.set(instance.state);
|
|
63
|
+
});
|
|
64
|
+
this.subscribeToEvents(instance);
|
|
65
|
+
this.registerCards(instance);
|
|
66
|
+
}
|
|
67
|
+
catch (error) {
|
|
68
|
+
console.error('[Pillar Angular] Failed to initialize:', error);
|
|
69
|
+
this.ngZone.run(() => {
|
|
70
|
+
this.state.set('error');
|
|
71
|
+
});
|
|
72
|
+
throw error;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Subscribe to SDK events and sync to Angular signals.
|
|
77
|
+
*/
|
|
78
|
+
subscribeToEvents(instance) {
|
|
79
|
+
// Panel open/close events
|
|
80
|
+
const unsubOpen = instance.on('panel:open', () => {
|
|
81
|
+
this.ngZone.run(() => {
|
|
82
|
+
this.isPanelOpen.set(true);
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
this.cleanupFns.push(unsubOpen);
|
|
86
|
+
const unsubClose = instance.on('panel:close', () => {
|
|
87
|
+
this.ngZone.run(() => {
|
|
88
|
+
this.isPanelOpen.set(false);
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
this.cleanupFns.push(unsubClose);
|
|
92
|
+
// State change events
|
|
93
|
+
const unsubReady = instance.on('ready', () => {
|
|
94
|
+
this.ngZone.run(() => {
|
|
95
|
+
this.state.set('ready');
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
this.cleanupFns.push(unsubReady);
|
|
99
|
+
const unsubError = instance.on('error', () => {
|
|
100
|
+
this.ngZone.run(() => {
|
|
101
|
+
this.state.set('error');
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
this.cleanupFns.push(unsubError);
|
|
105
|
+
// Task execution events
|
|
106
|
+
if (this.onTaskCallback) {
|
|
107
|
+
const callback = this.onTaskCallback;
|
|
108
|
+
const unsubTask = instance.on('task:execute', (task) => {
|
|
109
|
+
this.ngZone.run(() => {
|
|
110
|
+
callback(task);
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
this.cleanupFns.push(unsubTask);
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Register custom card components.
|
|
118
|
+
*/
|
|
119
|
+
registerCards(instance) {
|
|
120
|
+
if (!this.registeredCards)
|
|
121
|
+
return;
|
|
122
|
+
Object.entries(this.registeredCards).forEach(([cardType, CardComponent]) => {
|
|
123
|
+
const unsubscribe = instance.registerCard(cardType, (container, data, callbacks) => {
|
|
124
|
+
// Create an Angular component dynamically
|
|
125
|
+
const componentRef = createComponent(CardComponent, {
|
|
126
|
+
environmentInjector: this.environmentInjector,
|
|
127
|
+
});
|
|
128
|
+
// Set inputs
|
|
129
|
+
componentRef.setInput('data', data);
|
|
130
|
+
componentRef.setInput('onConfirm', callbacks.onConfirm);
|
|
131
|
+
componentRef.setInput('onCancel', callbacks.onCancel);
|
|
132
|
+
componentRef.setInput('onStateChange', callbacks.onStateChange);
|
|
133
|
+
// Attach to the application
|
|
134
|
+
this.appRef.attachView(componentRef.hostView);
|
|
135
|
+
// Append to container
|
|
136
|
+
container.appendChild(componentRef.location.nativeElement);
|
|
137
|
+
this.cardRefs.set(container, componentRef);
|
|
138
|
+
// Return cleanup function
|
|
139
|
+
return () => {
|
|
140
|
+
const ref = this.cardRefs.get(container);
|
|
141
|
+
if (ref) {
|
|
142
|
+
this.appRef.detachView(ref.hostView);
|
|
143
|
+
ref.destroy();
|
|
144
|
+
this.cardRefs.delete(container);
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
});
|
|
148
|
+
this.cleanupFns.push(unsubscribe);
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Open the help panel.
|
|
153
|
+
*/
|
|
154
|
+
open(options) {
|
|
155
|
+
this._pillar()?.open(options);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Close the help panel.
|
|
159
|
+
*/
|
|
160
|
+
close() {
|
|
161
|
+
this._pillar()?.close();
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Toggle the help panel.
|
|
165
|
+
*/
|
|
166
|
+
toggle() {
|
|
167
|
+
this._pillar()?.toggle();
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Open a specific article.
|
|
171
|
+
*/
|
|
172
|
+
openArticle(slug) {
|
|
173
|
+
this._pillar()?.open({ article: slug });
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Open a specific category.
|
|
177
|
+
*/
|
|
178
|
+
async openCategory(slug) {
|
|
179
|
+
this._pillar()?.navigate('category', { slug });
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Perform a search.
|
|
183
|
+
*/
|
|
184
|
+
search(query) {
|
|
185
|
+
this._pillar()?.open({ search: query });
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Navigate to a specific view.
|
|
189
|
+
*/
|
|
190
|
+
navigate(view, params) {
|
|
191
|
+
this._pillar()?.navigate(view, params);
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Update the panel theme at runtime.
|
|
195
|
+
*/
|
|
196
|
+
setTheme(theme) {
|
|
197
|
+
this._pillar()?.setTheme(theme);
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* Enable or disable the text selection "Ask AI" popover.
|
|
201
|
+
*/
|
|
202
|
+
setTextSelectionEnabled(enabled) {
|
|
203
|
+
this._pillar()?.setTextSelectionEnabled(enabled);
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Subscribe to SDK events.
|
|
207
|
+
*/
|
|
208
|
+
on(event, callback) {
|
|
209
|
+
const pillar = this._pillar();
|
|
210
|
+
if (!pillar) {
|
|
211
|
+
return () => { };
|
|
212
|
+
}
|
|
213
|
+
// Wrap callback to run in Angular zone
|
|
214
|
+
const wrappedCallback = (data) => {
|
|
215
|
+
this.ngZone.run(() => callback(data));
|
|
216
|
+
};
|
|
217
|
+
return pillar.on(event, wrappedCallback);
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Register a task handler.
|
|
221
|
+
*/
|
|
222
|
+
onTask(taskName, handler) {
|
|
223
|
+
const pillar = this._pillar();
|
|
224
|
+
if (!pillar) {
|
|
225
|
+
return () => { };
|
|
226
|
+
}
|
|
227
|
+
// Wrap handler to run in Angular zone
|
|
228
|
+
const wrappedHandler = (data) => {
|
|
229
|
+
this.ngZone.run(() => handler(data));
|
|
230
|
+
};
|
|
231
|
+
return pillar.onTask(taskName, wrappedHandler);
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Define a tool with metadata and handler.
|
|
235
|
+
* Returns an unsubscribe function to remove the tool.
|
|
236
|
+
*
|
|
237
|
+
* @example
|
|
238
|
+
* ```typescript
|
|
239
|
+
* const unsubscribe = pillarService.defineTool({
|
|
240
|
+
* name: 'add_to_cart',
|
|
241
|
+
* description: 'Add a product to the shopping cart',
|
|
242
|
+
* inputSchema: {
|
|
243
|
+
* type: 'object',
|
|
244
|
+
* properties: {
|
|
245
|
+
* productId: { type: 'string' },
|
|
246
|
+
* quantity: { type: 'number' },
|
|
247
|
+
* },
|
|
248
|
+
* required: ['productId', 'quantity'],
|
|
249
|
+
* },
|
|
250
|
+
* execute: async ({ productId, quantity }) => {
|
|
251
|
+
* await this.cartService.add(productId, quantity);
|
|
252
|
+
* return { content: [{ type: 'text', text: 'Added to cart' }] };
|
|
253
|
+
* },
|
|
254
|
+
* });
|
|
255
|
+
*
|
|
256
|
+
* // Later, to unregister:
|
|
257
|
+
* unsubscribe();
|
|
258
|
+
* ```
|
|
259
|
+
*/
|
|
260
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
261
|
+
defineTool(schema) {
|
|
262
|
+
const pillar = this._pillar();
|
|
263
|
+
if (!pillar) {
|
|
264
|
+
console.warn('[Pillar Angular] Cannot define tool - SDK not initialized');
|
|
265
|
+
return () => { };
|
|
266
|
+
}
|
|
267
|
+
// Wrap execute to run in Angular zone
|
|
268
|
+
const wrappedSchema = {
|
|
269
|
+
...schema,
|
|
270
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
271
|
+
execute: async (input) => {
|
|
272
|
+
return this.ngZone.run(() => schema.execute(input));
|
|
273
|
+
},
|
|
274
|
+
};
|
|
275
|
+
return pillar.defineTool(wrappedSchema);
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Mount the panel to a specific container element.
|
|
279
|
+
* Used for manual panel placement with PillarPanelComponent.
|
|
280
|
+
*/
|
|
281
|
+
mountPanelTo(container) {
|
|
282
|
+
this._pillar()?.mountPanelTo(container);
|
|
283
|
+
}
|
|
284
|
+
/**
|
|
285
|
+
* Cleanup resources.
|
|
286
|
+
* Note: We intentionally don't call Pillar.destroy() here to preserve
|
|
287
|
+
* conversation history across route changes. Call Pillar.destroy()
|
|
288
|
+
* explicitly if you need to fully reset the SDK.
|
|
289
|
+
*/
|
|
290
|
+
ngOnDestroy() {
|
|
291
|
+
// Run all cleanup functions
|
|
292
|
+
this.cleanupFns.forEach((cleanup) => cleanup());
|
|
293
|
+
this.cleanupFns.length = 0;
|
|
294
|
+
// Destroy all card component refs
|
|
295
|
+
this.cardRefs.forEach((ref) => {
|
|
296
|
+
this.appRef.detachView(ref.hostView);
|
|
297
|
+
ref.destroy();
|
|
298
|
+
});
|
|
299
|
+
this.cardRefs.clear();
|
|
300
|
+
}
|
|
301
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PillarService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
302
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PillarService, providedIn: 'root' });
|
|
303
|
+
}
|
|
304
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PillarService, decorators: [{
|
|
305
|
+
type: Injectable,
|
|
306
|
+
args: [{ providedIn: 'root' }]
|
|
307
|
+
}] });
|
|
308
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlsbGFyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3BpbGxhci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFDTCxVQUFVLEVBQ1YsTUFBTSxFQUNOLE1BQU0sRUFDTixRQUFRLEVBQ1IsTUFBTSxFQUNOLGVBQWUsRUFDZixjQUFjLEVBQ2QsbUJBQW1CLEdBRXBCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxNQUFNLEdBUVAsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFJeEIsTUFBTSxPQUFPLGFBQWE7SUFDUCxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3hCLE1BQU0sR0FBRyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDaEMsbUJBQW1CLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFFbkUsaUJBQWlCO0lBQ0EsT0FBTyxHQUFHLE1BQU0sQ0FBZ0IsSUFBSSxDQUFDLENBQUM7SUFDdEMsVUFBVSxHQUFzQixFQUFFLENBQUM7SUFDbkMsUUFBUSxHQUEwQixJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ3JELGNBQWMsR0FBZ0QsSUFBSSxDQUFDO0lBQ25FLGVBQWUsR0FBeUMsSUFBSSxDQUFDO0lBRXJFLGlCQUFpQjtJQUNSLEtBQUssR0FBRyxNQUFNLENBQWMsZUFBZSxDQUFDLENBQUM7SUFDN0MsT0FBTyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssT0FBTyxDQUFDLENBQUM7SUFDbkQsV0FBVyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVyQzs7T0FFRztJQUNILFdBQVc7UUFDVCxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLENBQUMsSUFBSSxDQUFDLFVB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UUFDVCw0QkFBNEI7UUFDNUIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7UUFDaEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBRTNCLGtDQUFrQztRQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUNyQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ3hCLENBQUM7d0dBOVZVLGFBQWE7NEdBQWIsYUFBYSxjQURBLE1BQU07OzRGQUNuQixhQUFhO2tCQUR6QixVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUGlsbGFyU2VydmljZVxuICogQW5ndWxhciBzZXJ2aWNlIHRoYXQgaW5pdGlhbGl6ZXMgYW5kIG1hbmFnZXMgdGhlIFBpbGxhciBTREtcbiAqL1xuXG5pbXBvcnQge1xuICBJbmplY3RhYmxlLFxuICBOZ1pvbmUsXG4gIHNpZ25hbCxcbiAgY29tcHV0ZWQsXG4gIGluamVjdCxcbiAgY3JlYXRlQ29tcG9uZW50LFxuICBBcHBsaWNhdGlvblJlZixcbiAgRW52aXJvbm1lbnRJbmplY3RvcixcbiAgdHlwZSBUeXBlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIFBpbGxhcixcbiAgdHlwZSBDYXJkQ2FsbGJhY2tzLFxuICB0eXBlIFBpbGxhckNvbmZpZyxcbiAgdHlwZSBQaWxsYXJFdmVudHMsXG4gIHR5cGUgUGlsbGFyU3RhdGUsXG4gIHR5cGUgVGFza0V4ZWN1dGVQYXlsb2FkLFxuICB0eXBlIFRoZW1lQ29uZmlnLFxuICB0eXBlIFRvb2xTY2hlbWEsXG59IGZyb20gJ0BwaWxsYXItYWkvc2RrJztcbmltcG9ydCB0eXBlIHsgQ2FyZENvbXBvbmVudCwgUGlsbGFySW5pdENvbmZpZyB9IGZyb20gJy4vdHlwZXMnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIFBpbGxhclNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IG5nWm9uZSA9IGluamVjdChOZ1pvbmUpO1xuICBwcml2YXRlIHJlYWRvbmx5IGFwcFJlZiA9IGluamVjdChBcHBsaWNhdGlvblJlZik7XG4gIHByaXZhdGUgcmVhZG9ubHkgZW52aXJvbm1lbnRJbmplY3RvciA9IGluamVjdChFbnZpcm9ubWVudEluamVjdG9yKTtcblxuICAvLyBJbnRlcm5hbCBzdGF0ZVxuICBwcml2YXRlIHJlYWRvbmx5IF9waWxsYXIgPSBzaWduYWw8UGlsbGFyIHwgbnVsbD4obnVsbCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgY2xlYW51cEZuczogQXJyYXk8KCkgPT4gdm9pZD4gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBjYXJkUmVmczogTWFwPEhUTUxFbGVtZW50LCBhbnk+ID0gbmV3IE1hcCgpO1xuICBwcml2YXRlIG9uVGFza0NhbGxiYWNrOiAoKHRhc2s6IFRhc2tFeGVjdXRlUGF5bG9hZCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSByZWdpc3RlcmVkQ2FyZHM6IFJlY29yZDxzdHJpbmcsIENhcmRDb21wb25lbnQ+IHwgbnVsbCA9IG51bGw7XG5cbiAgLy8gUHVibGljIHNpZ25hbHNcbiAgcmVhZG9ubHkgc3RhdGUgPSBzaWduYWw8UGlsbGFyU3RhdGU+KCd1bmluaXRpYWxpemVkJyk7XG4gIHJlYWRvbmx5IGlzUmVhZHkgPSBjb21wdXRlZCgoKSA9PiB0aGlzLnN0YXRlKCkgPT09ICdyZWFkeScpO1xuICByZWFkb25seSBpc1BhbmVsT3BlbiA9IHNpZ25hbChmYWxzZSk7XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgUGlsbGFyIFNESyBpbnN0YW5jZS5cbiAgICovXG4gIGdldEluc3RhbmNlKCk6IFBpbGxhciB8IG51bGwge1xuICAgIHJldHVybiB0aGlzLl9waWxsYXIoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIHRoZSBQaWxsYXIgU0RLLlxuICAgKiBDYWxsIHRoaXMgaW4geW91ciBhcHAncyBpbml0aWFsaXphdGlvbiAoZS5nLiwgQVBQX0lOSVRJQUxJWkVSKS5cbiAgICpcbiAgICogQHBhcmFtIGluaXRDb25maWcgLSBDb25maWd1cmF0aW9uIG9wdGlvbnNcbiAgICovXG4gIGFzeW5jIGluaXQoaW5pdENvbmZpZzogUGlsbGFySW5pdENvbmZpZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgcHJvZHVjdEtleSwgaGVscENlbnRlciwgY29uZmlnLCBvblRhc2ssIGNhcmRzIH0gPSBpbml0Q29uZmlnO1xuXG4gICAgLy8gU3VwcG9ydCBib3RoIHByb2R1Y3RLZXkgKG5ldykgYW5kIGhlbHBDZW50ZXIgKGRlcHJlY2F0ZWQpXG4gICAgY29uc3QgcmVzb2x2ZWRLZXkgPSBwcm9kdWN0S2V5ID8/IGhlbHBDZW50ZXI7XG5cbiAgICBpZiAoaGVscENlbnRlciAmJiAhcHJvZHVjdEtleSkge1xuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAnW1BpbGxhciBBbmd1bGFyXSBcImhlbHBDZW50ZXJcIiBpcyBkZXByZWNhdGVkLiBVc2UgXCJwcm9kdWN0S2V5XCIgaW5zdGVhZC4nXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIFN0b3JlIGNhbGxiYWNrcyBmb3IgbGF0ZXIgdXNlXG4gICAgdGhpcy5vblRhc2tDYWxsYmFjayA9IG9uVGFzayA/PyBudWxsO1xuICAgIHRoaXMucmVnaXN0ZXJlZENhcmRzID0gY2FyZHMgPz8gbnVsbDtcblxuICAgIHRyeSB7XG4gICAgICAvLyBQaWxsYXIgaXMgYSBzaW5nbGV0b24gLSBjaGVjayBpZiBhbHJlYWR5IGluaXRpYWxpemVkXG4gICAgICBjb25zdCBleGlzdGluZ0luc3RhbmNlID0gUGlsbGFyLmdldEluc3RhbmNlKCk7XG4gICAgICBpZiAoZXhpc3RpbmdJbnN0YW5jZSkge1xuICAgICAgICAvLyBSZXVzZSBleGlzdGluZyBpbnN0YW5jZSAocHJlc2VydmVzIGNoYXQgaGlzdG9yeSwgcGFuZWwgc3RhdGUsIGV0Yy4pXG4gICAgICAgIHRoaXMuX3BpbGxhci5zZXQoZXhpc3RpbmdJbnN0YW5jZSk7XG4gICAgICAgIHRoaXMuc3RhdGUuc2V0KGV4aXN0aW5nSW5zdGFuY2Uuc3RhdGUpO1xuICAgICAgICB0aGlzLnN1YnNjcmliZVRvRXZlbnRzKGV4aXN0aW5nSW5zdGFuY2UpO1xuICAgICAgICB0aGlzLnJlZ2lzdGVyQ2FyZHMoZXhpc3RpbmdJbnN0YW5jZSk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgLy8gSW5pdGlhbGl6ZSBuZXcgaW5zdGFuY2VcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gYXdhaXQgUGlsbGFyLmluaXQoe1xuICAgICAgICBwcm9kdWN0S2V5OiByZXNvbHZlZEtleSxcbiAgICAgICAgLi4uY29uZmlnLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgIHRoaXMuX3BpbGxhci5zZXQoaW5zdGFuY2UpO1xuICAgICAgICB0aGlzLnN0YXRlLnNldChpbnN0YW5jZS5zdGF0ZSk7XG4gICAgICB9KTtcblxuICAgICAgdGhpcy5zdWJzY3JpYmVUb0V2ZW50cyhpbnN0YW5jZSk7XG4gICAgICB0aGlzLnJlZ2lzdGVyQ2FyZHMoaW5zdGFuY2UpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdbUGlsbGFyIEFuZ3VsYXJdIEZhaWxlZCB0byBpbml0aWFsaXplOicsIGVycm9yKTtcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgIHRoaXMuc3RhdGUuc2V0KCdlcnJvcicpO1xuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIFNESyBldmVudHMgYW5kIHN5bmMgdG8gQW5ndWxhciBzaWduYWxzLlxuICAgKi9cbiAgcHJpdmF0ZSBzdWJzY3JpYmVUb0V2ZW50cyhpbnN0YW5jZTogUGlsbGFyKTogdm9pZCB7XG4gICAgLy8gUGFuZWwgb3Blbi9jbG9zZSBldmVudHNcbiAgICBjb25zdCB1bnN1Yk9wZW4gPSBpbnN0YW5jZS5vbigncGFuZWw6b3BlbicsICgpID0+IHtcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNQYW5lbE9wZW4uc2V0KHRydWUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgdGhpcy5jbGVhbnVwRm5zLnB1c2godW5zdWJPcGVuKTtcblxuICAgIGNvbnN0IHVuc3ViQ2xvc2UgPSBpbnN0YW5jZS5vbigncGFuZWw6Y2xvc2UnLCAoKSA9PiB7XG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICB0aGlzLmlzUGFuZWxPcGVuLnNldChmYWxzZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLmNsZWFudXBGbnMucHVzaCh1bnN1YkNsb3NlKTtcblxuICAgIC8vIFN0YXRlIGNoYW5nZSBldmVudHNcbiAgICBjb25zdCB1bnN1YlJlYWR5ID0gaW5zdGFuY2Uub24oJ3JlYWR5JywgKCkgPT4ge1xuICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5zdGF0ZS5zZXQoJ3JlYWR5Jyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICB0aGlzLmNsZWFudXBGbnMucHVzaCh1bnN1YlJlYWR5KTtcblxuICAgIGNvbnN0IHVuc3ViRXJyb3IgPSBpbnN0YW5jZS5vbignZXJyb3InLCAoKSA9PiB7XG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICB0aGlzLnN0YXRlLnNldCgnZXJyb3InKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHRoaXMuY2xlYW51cEZucy5wdXNoKHVuc3ViRXJyb3IpO1xuXG4gICAgLy8gVGFzayBleGVjdXRpb24gZXZlbnRzXG4gICAgaWYgKHRoaXMub25UYXNrQ2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5vblRhc2tDYWxsYmFjaztcbiAgICAgIGNvbnN0IHVuc3ViVGFzayA9IGluc3RhbmNlLm9uKCd0YXNrOmV4ZWN1dGUnLCAodGFzaykgPT4ge1xuICAgICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgIGNhbGxiYWNrKHRhc2spO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5jbGVhbnVwRm5zLnB1c2godW5zdWJUYXNrKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgY3VzdG9tIGNhcmQgY29tcG9uZW50cy5cbiAgICovXG4gIHByaXZhdGUgcmVnaXN0ZXJDYXJkcyhpbnN0YW5jZTogUGlsbGFyKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnJlZ2lzdGVyZWRDYXJkcykgcmV0dXJuO1xuXG4gICAgT2JqZWN0LmVudHJpZXModGhpcy5yZWdpc3RlcmVkQ2FyZHMpLmZvckVhY2goKFtjYXJkVHlwZSwgQ2FyZENvbXBvbmVudF0pID0+IHtcbiAgICAgIGNvbnN0IHVuc3Vic2NyaWJlID0gaW5zdGFuY2UucmVnaXN0ZXJDYXJkKFxuICAgICAgICBjYXJkVHlwZSxcbiAgICAgICAgKGNvbnRhaW5lciwgZGF0YSwgY2FsbGJhY2tzOiBDYXJkQ2FsbGJhY2tzKSA9PiB7XG4gICAgICAgICAgLy8gQ3JlYXRlIGFuIEFuZ3VsYXIgY29tcG9uZW50IGR5bmFtaWNhbGx5XG4gICAgICAgICAgY29uc3QgY29tcG9uZW50UmVmID0gY3JlYXRlQ29tcG9uZW50KENhcmRDb21wb25lbnQgYXMgVHlwZTxhbnk+LCB7XG4gICAgICAgICAgICBlbnZpcm9ubWVudEluamVjdG9yOiB0aGlzLmVudmlyb25tZW50SW5qZWN0b3IsXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICAvLyBTZXQgaW5wdXRzXG4gICAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KCdkYXRhJywgZGF0YSk7XG4gICAgICAgICAgY29tcG9uZW50UmVmLnNldElucHV0KCdvbkNvbmZpcm0nLCBjYWxsYmFja3Mub25Db25maXJtKTtcbiAgICAgICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ29uQ2FuY2VsJywgY2FsbGJhY2tzLm9uQ2FuY2VsKTtcbiAgICAgICAgICBjb21wb25lbnRSZWYuc2V0SW5wdXQoJ29uU3RhdGVDaGFuZ2UnLCBjYWxsYmFja3Mub25TdGF0ZUNoYW5nZSk7XG5cbiAgICAgICAgICAvLyBBdHRhY2ggdG8gdGhlIGFwcGxpY2F0aW9uXG4gICAgICAgICAgdGhpcy5hcHBSZWYuYXR0YWNoVmlldyhjb21wb25lbnRSZWYuaG9zdFZpZXcpO1xuXG4gICAgICAgICAgLy8gQXBwZW5kIHRvIGNvbnRhaW5lclxuICAgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChjb21wb25lbnRSZWYubG9jYXRpb24ubmF0aXZlRWxlbWVudCk7XG4gICAgICAgICAgdGhpcy5jYXJkUmVmcy5zZXQoY29udGFpbmVyLCBjb21wb25lbnRSZWYpO1xuXG4gICAgICAgICAgLy8gUmV0dXJuIGNsZWFudXAgZnVuY3Rpb25cbiAgICAgICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcmVmID0gdGhpcy5jYXJkUmVmcy5nZXQoY29udGFpbmVyKTtcbiAgICAgICAgICAgIGlmIChyZWYpIHtcbiAgICAgICAgICAgICAgdGhpcy5hcHBSZWYuZGV0YWNoVmlldyhyZWYuaG9zdFZpZXcpO1xuICAgICAgICAgICAgICByZWYuZGVzdHJveSgpO1xuICAgICAgICAgICAgICB0aGlzLmNhcmRSZWZzLmRlbGV0ZShjb250YWluZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICk7XG5cbiAgICAgIHRoaXMuY2xlYW51cEZucy5wdXNoKHVuc3Vic2NyaWJlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPcGVuIHRoZSBoZWxwIHBhbmVsLlxuICAgKi9cbiAgb3BlbihvcHRpb25zPzoge1xuICAgIHZpZXc/OiBzdHJpbmc7XG4gICAgYXJ0aWNsZT86IHN0cmluZztcbiAgICBzZWFyY2g/OiBzdHJpbmc7XG4gICAgZm9jdXNJbnB1dD86IGJvb2xlYW47XG4gIH0pOiB2b2lkIHtcbiAgICB0aGlzLl9waWxsYXIoKT8ub3BlbihvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbG9zZSB0aGUgaGVscCBwYW5lbC5cbiAgICovXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX3BpbGxhcigpPy5jbG9zZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB0aGUgaGVscCBwYW5lbC5cbiAgICovXG4gIHRvZ2dsZSgpOiB2b2lkIHtcbiAgICB0aGlzLl9waWxsYXIoKT8udG9nZ2xlKCk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbiBhIHNwZWNpZmljIGFydGljbGUuXG4gICAqL1xuICBvcGVuQXJ0aWNsZShzbHVnOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLl9waWxsYXIoKT8ub3Blbih7IGFydGljbGU6IHNsdWcgfSk7XG4gIH1cblxuICAvKipcbiAgICogT3BlbiBhIHNwZWNpZmljIGNhdGVnb3J5LlxuICAgKi9cbiAgYXN5bmMgb3BlbkNhdGVnb3J5KHNsdWc6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuX3BpbGxhcigpPy5uYXZpZ2F0ZSgnY2F0ZWdvcnknLCB7IHNsdWcgfSk7XG4gIH1cblxuICAvKipcbiAgICogUGVyZm9ybSBhIHNlYXJjaC5cbiAgICovXG4gIHNlYXJjaChxdWVyeTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5fcGlsbGFyKCk/Lm9wZW4oeyBzZWFyY2g6IHF1ZXJ5IH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIE5hdmlnYXRlIHRvIGEgc3BlY2lmaWMgdmlldy5cbiAgICovXG4gIG5hdmlnYXRlKHZpZXc6IHN0cmluZywgcGFyYW1zPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHZvaWQge1xuICAgIHRoaXMuX3BpbGxhcigpPy5uYXZpZ2F0ZSh2aWV3LCBwYXJhbXMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSB0aGUgcGFuZWwgdGhlbWUgYXQgcnVudGltZS5cbiAgICovXG4gIHNldFRoZW1lKHRoZW1lOiBQYXJ0aWFsPFRoZW1lQ29uZmlnPik6IHZvaWQge1xuICAgIHRoaXMuX3BpbGxhcigpPy5zZXRUaGVtZSh0aGVtZSk7XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlIG9yIGRpc2FibGUgdGhlIHRleHQgc2VsZWN0aW9uIFwiQXNrIEFJXCIgcG9wb3Zlci5cbiAgICovXG4gIHNldFRleHRTZWxlY3Rpb25FbmFibGVkKGVuYWJsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICB0aGlzLl9waWxsYXIoKT8uc2V0VGV4dFNlbGVjdGlvbkVuYWJsZWQoZW5hYmxlZCk7XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIFNESyBldmVudHMuXG4gICAqL1xuICBvbjxLIGV4dGVuZHMga2V5b2YgUGlsbGFyRXZlbnRzPihcbiAgICBldmVudDogSyxcbiAgICBjYWxsYmFjazogKGRhdGE6IFBpbGxhckV2ZW50c1tLXSkgPT4gdm9pZFxuICApOiAoKSA9PiB2b2lkIHtcbiAgICBjb25zdCBwaWxsYXIgPSB0aGlzLl9waWxsYXIoKTtcbiAgICBpZiAoIXBpbGxhcikge1xuICAgICAgcmV0dXJuICgpID0+IHt9O1xuICAgIH1cblxuICAgIC8vIFdyYXAgY2FsbGJhY2sgdG8gcnVuIGluIEFuZ3VsYXIgem9uZVxuICAgIGNvbnN0IHdyYXBwZWRDYWxsYmFjayA9IChkYXRhOiBQaWxsYXJFdmVudHNbS10pID0+IHtcbiAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiBjYWxsYmFjayhkYXRhKSk7XG4gICAgfTtcblxuICAgIHJldHVybiBwaWxsYXIub24oZXZlbnQsIHdyYXBwZWRDYWxsYmFjayk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgYSB0YXNrIGhhbmRsZXIuXG4gICAqL1xuICBvblRhc2soXG4gICAgdGFza05hbWU6IHN0cmluZyxcbiAgICBoYW5kbGVyOiAoZGF0YTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHZvaWRcbiAgKTogKCkgPT4gdm9pZCB7XG4gICAgY29uc3QgcGlsbGFyID0gdGhpcy5fcGlsbGFyKCk7XG4gICAgaWYgKCFwaWxsYXIpIHtcbiAgICAgIHJldHVybiAoKSA9PiB7fTtcbiAgICB9XG5cbiAgICAvLyBXcmFwIGhhbmRsZXIgdG8gcnVuIGluIEFuZ3VsYXIgem9uZVxuICAgIGNvbnN0IHdyYXBwZWRIYW5kbGVyID0gKGRhdGE6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB7XG4gICAgICB0aGlzLm5nWm9uZS5ydW4oKCkgPT4gaGFuZGxlcihkYXRhKSk7XG4gICAgfTtcblxuICAgIHJldHVybiBwaWxsYXIub25UYXNrKHRhc2tOYW1lLCB3cmFwcGVkSGFuZGxlcik7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lIGEgdG9vbCB3aXRoIG1ldGFkYXRhIGFuZCBoYW5kbGVyLlxuICAgKiBSZXR1cm5zIGFuIHVuc3Vic2NyaWJlIGZ1bmN0aW9uIHRvIHJlbW92ZSB0aGUgdG9vbC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYGBgdHlwZXNjcmlwdFxuICAgKiBjb25zdCB1bnN1YnNjcmliZSA9IHBpbGxhclNlcnZpY2UuZGVmaW5lVG9vbCh7XG4gICAqICAgbmFtZTogJ2FkZF90b19jYXJ0JyxcbiAgICogICBkZXNjcmlwdGlvbjogJ0FkZCBhIHByb2R1Y3QgdG8gdGhlIHNob3BwaW5nIGNhcnQnLFxuICAgKiAgIGlucHV0U2NoZW1hOiB7XG4gICAqICAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICogICAgIHByb3BlcnRpZXM6IHtcbiAgICogICAgICAgcHJvZHVjdElkOiB7IHR5cGU6ICdzdHJpbmcnIH0sXG4gICAqICAgICAgIHF1YW50aXR5OiB7IHR5cGU6ICdudW1iZXInIH0sXG4gICAqICAgICB9LFxuICAgKiAgICAgcmVxdWlyZWQ6IFsncHJvZHVjdElkJywgJ3F1YW50aXR5J10sXG4gICAqICAgfSxcbiAgICogICBleGVjdXRlOiBhc3luYyAoeyBwcm9kdWN0SWQsIHF1YW50aXR5IH0pID0+IHtcbiAgICogICAgIGF3YWl0IHRoaXMuY2FydFNlcnZpY2UuYWRkKHByb2R1Y3RJZCwgcXVhbnRpdHkpO1xuICAgKiAgICAgcmV0dXJuIHsgY29udGVudDogW3sgdHlwZTogJ3RleHQnLCB0ZXh0OiAnQWRkZWQgdG8gY2FydCcgfV0gfTtcbiAgICogICB9LFxuICAgKiB9KTtcbiAgICpcbiAgICogLy8gTGF0ZXIsIHRvIHVucmVnaXN0ZXI6XG4gICAqIHVuc3Vic2NyaWJlKCk7XG4gICAqIGBgYFxuICAgKi9cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgZGVmaW5lVG9vbChzY2hlbWE6IFRvb2xTY2hlbWE8YW55Pik6ICgpID0+IHZvaWQge1xuICAgIGNvbnN0IHBpbGxhciA9IHRoaXMuX3BpbGxhcigpO1xuICAgIGlmICghcGlsbGFyKSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1tQaWxsYXIgQW5ndWxhcl0gQ2Fubm90IGRlZmluZSB0b29sIC0gU0RLIG5vdCBpbml0aWFsaXplZCcpO1xuICAgICAgcmV0dXJuICgpID0+IHt9O1xuICAgIH1cblxuICAgIC8vIFdyYXAgZXhlY3V0ZSB0byBydW4gaW4gQW5ndWxhciB6b25lXG4gICAgY29uc3Qgd3JhcHBlZFNjaGVtYSA9IHtcbiAgICAgIC4uLnNjaGVtYSxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG4gICAgICBleGVjdXRlOiBhc3luYyAoaW5wdXQ6IGFueSkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5uZ1pvbmUucnVuKCgpID0+IHNjaGVtYS5leGVjdXRlKGlucHV0KSk7XG4gICAgICB9LFxuICAgIH07XG5cbiAgICByZXR1cm4gcGlsbGFyLmRlZmluZVRvb2wod3JhcHBlZFNjaGVtYSk7XG4gIH1cblxuICAvKipcbiAgICogTW91bnQgdGhlIHBhbmVsIHRvIGEgc3BlY2lmaWMgY29udGFpbmVyIGVsZW1lbnQuXG4gICAqIFVzZWQgZm9yIG1hbnVhbCBwYW5lbCBwbGFjZW1lbnQgd2l0aCBQaWxsYXJQYW5lbENvbXBvbmVudC5cbiAgICovXG4gIG1vdW50UGFuZWxUbyhjb250YWluZXI6IEhUTUxFbGVtZW50KTogdm9pZCB7XG4gICAgdGhpcy5fcGlsbGFyKCk/Lm1vdW50UGFuZWxUbyhjb250YWluZXIpO1xuICB9XG5cbiAgLyoqXG4gICAqIENsZWFudXAgcmVzb3VyY2VzLlxuICAgKiBOb3RlOiBXZSBpbnRlbnRpb25hbGx5IGRvbid0IGNhbGwgUGlsbGFyLmRlc3Ryb3koKSBoZXJlIHRvIHByZXNlcnZlXG4gICAqIGNvbnZlcnNhdGlvbiBoaXN0b3J5IGFjcm9zcyByb3V0ZSBjaGFuZ2VzLiBDYWxsIFBpbGxhci5kZXN0cm95KClcbiAgICogZXhwbGljaXRseSBpZiB5b3UgbmVlZCB0byBmdWxseSByZXNldCB0aGUgU0RLLlxuICAgKi9cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgLy8gUnVuIGFsbCBjbGVhbnVwIGZ1bmN0aW9uc1xuICAgIHRoaXMuY2xlYW51cEZucy5mb3JFYWNoKChjbGVhbnVwKSA9PiBjbGVhbnVwKCkpO1xuICAgIHRoaXMuY2xlYW51cEZucy5sZW5ndGggPSAwO1xuXG4gICAgLy8gRGVzdHJveSBhbGwgY2FyZCBjb21wb25lbnQgcmVmc1xuICAgIHRoaXMuY2FyZFJlZnMuZm9yRWFjaCgocmVmKSA9PiB7XG4gICAgICB0aGlzLmFwcFJlZi5kZXRhY2hWaWV3KHJlZi5ob3N0Vmlldyk7XG4gICAgICByZWYuZGVzdHJveSgpO1xuICAgIH0pO1xuICAgIHRoaXMuY2FyZFJlZnMuY2xlYXIoKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types for Pillar Angular SDK
|
|
3
|
+
*/
|
|
4
|
+
export {};
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBTaGFyZWQgdHlwZXMgZm9yIFBpbGxhciBBbmd1bGFyIFNES1xuICovXG5cbmltcG9ydCB0eXBlIHtcbiAgUGlsbGFyLFxuICBQaWxsYXJDb25maWcsXG4gIFBpbGxhckV2ZW50cyxcbiAgUGlsbGFyU3RhdGUsXG4gIFRhc2tFeGVjdXRlUGF5bG9hZCxcbiAgVGhlbWVDb25maWcsXG59IGZyb20gJ0BwaWxsYXItYWkvc2RrJztcbmltcG9ydCB0eXBlIHsgU2lnbmFsLCBXcml0YWJsZVNpZ25hbCwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBDYXJkIFR5cGVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbi8qKlxuICogUHJvcHMgcGFzc2VkIHRvIGN1c3RvbSBjYXJkIGNvbXBvbmVudHMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2FyZENvbXBvbmVudFByb3BzPFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4ge1xuICAvKiogRGF0YSBleHRyYWN0ZWQgYnkgdGhlIEFJIGZvciB0aGlzIGFjdGlvbiAqL1xuICBkYXRhOiBUO1xuICAvKiogQ2FsbGVkIHdoZW4gdXNlciBjb25maXJtcyB0aGUgYWN0aW9uICovXG4gIG9uQ29uZmlybTogKG1vZGlmaWVkRGF0YT86IFJlY29yZDxzdHJpbmcsIHVua25vd24+KSA9PiB2b2lkO1xuICAvKiogQ2FsbGVkIHdoZW4gdXNlciBjYW5jZWxzIHRoZSBhY3Rpb24gKi9cbiAgb25DYW5jZWw6ICgpID0+IHZvaWQ7XG4gIC8qKiBDYWxsZWQgdG8gcmVwb3J0IHN0YXRlIGNoYW5nZXMgKGxvYWRpbmcsIHN1Y2Nlc3MsIGVycm9yKSAqL1xuICBvblN0YXRlQ2hhbmdlPzogKFxuICAgIHN0YXRlOiAnbG9hZGluZycgfCAnc3VjY2VzcycgfCAnZXJyb3InLFxuICAgIG1lc3NhZ2U/OiBzdHJpbmdcbiAgKSA9PiB2b2lkO1xufVxuXG4vKipcbiAqIEFuIEFuZ3VsYXIgY29tcG9uZW50IHRoYXQgY2FuIGJlIHVzZWQgYXMgYSBjdXN0b20gY2FyZCByZW5kZXJlci5cbiAqIFRoZSBjb21wb25lbnQgc2hvdWxkIGFjY2VwdCBDYXJkQ29tcG9uZW50UHJvcHMgYXMgaW5wdXRzLlxuICovXG5leHBvcnQgdHlwZSBDYXJkQ29tcG9uZW50PFQgPSBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4gPSBUeXBlPENhcmRDb21wb25lbnRQcm9wczxUPj47XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNlcnZpY2UgVHlwZXNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuZXhwb3J0IGludGVyZmFjZSBQaWxsYXJTZXJ2aWNlU3RhdGUge1xuICAvKiogVGhlIFBpbGxhciBTREsgaW5zdGFuY2UgKi9cbiAgcGlsbGFyOiBTaWduYWw8UGlsbGFyIHwgbnVsbD47XG5cbiAgLyoqIEN1cnJlbnQgU0RLIHN0YXRlICovXG4gIHN0YXRlOiBXcml0YWJsZVNpZ25hbDxQaWxsYXJTdGF0ZT47XG5cbiAgLyoqIFdoZXRoZXIgdGhlIFNESyBpcyByZWFkeSAqL1xuICBpc1JlYWR5OiBTaWduYWw8Ym9vbGVhbj47XG5cbiAgLyoqIFdoZXRoZXIgdGhlIHBhbmVsIGlzIGN1cnJlbnRseSBvcGVuICovXG4gIGlzUGFuZWxPcGVuOiBXcml0YWJsZVNpZ25hbDxib29sZWFuPjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQaWxsYXJTZXJ2aWNlQWN0aW9ucyB7XG4gIC8qKiBPcGVuIHRoZSBoZWxwIHBhbmVsICovXG4gIG9wZW46IChvcHRpb25zPzoge1xuICAgIHZpZXc/OiBzdHJpbmc7XG4gICAgYXJ0aWNsZT86IHN0cmluZztcbiAgICBzZWFyY2g/OiBzdHJpbmc7XG4gICAgZm9jdXNJbnB1dD86IGJvb2xlYW47XG4gIH0pID0+IHZvaWQ7XG5cbiAgLyoqIENsb3NlIHRoZSBoZWxwIHBhbmVsICovXG4gIGNsb3NlOiAoKSA9PiB2b2lkO1xuXG4gIC8qKiBUb2dnbGUgdGhlIGhlbHAgcGFuZWwgKi9cbiAgdG9nZ2xlOiAoKSA9PiB2b2lkO1xuXG4gIC8qKiBPcGVuIGEgc3BlY2lmaWMgYXJ0aWNsZSAqL1xuICBvcGVuQXJ0aWNsZTogKHNsdWc6IHN0cmluZykgPT4gdm9pZDtcblxuICAvKiogT3BlbiBhIHNwZWNpZmljIGNhdGVnb3J5ICovXG4gIG9wZW5DYXRlZ29yeTogKHNsdWc6IHN0cmluZykgPT4gUHJvbWlzZTx2b2lkPjtcblxuICAvKiogUGVyZm9ybSBhIHNlYXJjaCAqL1xuICBzZWFyY2g6IChxdWVyeTogc3RyaW5nKSA9PiB2b2lkO1xuXG4gIC8qKiBOYXZpZ2F0ZSB0byBhIHNwZWNpZmljIHZpZXcgKi9cbiAgbmF2aWdhdGU6ICh2aWV3OiBzdHJpbmcsIHBhcmFtcz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pID0+IHZvaWQ7XG5cbiAgLyoqIFVwZGF0ZSB0aGUgcGFuZWwgdGhlbWUgYXQgcnVudGltZSAqL1xuICBzZXRUaGVtZTogKHRoZW1lOiBQYXJ0aWFsPFRoZW1lQ29uZmlnPikgPT4gdm9pZDtcblxuICAvKiogRW5hYmxlIG9yIGRpc2FibGUgdGhlIHRleHQgc2VsZWN0aW9uIFwiQXNrIEFJXCIgcG9wb3ZlciAqL1xuICBzZXRUZXh0U2VsZWN0aW9uRW5hYmxlZDogKGVuYWJsZWQ6IGJvb2xlYW4pID0+IHZvaWQ7XG5cbiAgLyoqIFN1YnNjcmliZSB0byBTREsgZXZlbnRzICovXG4gIG9uOiA8SyBleHRlbmRzIGtleW9mIFBpbGxhckV2ZW50cz4oXG4gICAgZXZlbnQ6IEssXG4gICAgY2FsbGJhY2s6IChkYXRhOiBQaWxsYXJFdmVudHNbS10pID0+IHZvaWRcbiAgKSA9PiAoKSA9PiB2b2lkO1xuXG4gIC8qKiBSZWdpc3RlciBhIHRhc2sgaGFuZGxlciAqL1xuICBvblRhc2s6IChcbiAgICB0YXNrTmFtZTogc3RyaW5nLFxuICAgIGhhbmRsZXI6IChkYXRhOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gdm9pZFxuICApID0+ICgpID0+IHZvaWQ7XG5cbiAgLyoqIEdldCB0aGUgUGlsbGFyIFNESyBpbnN0YW5jZSAqL1xuICBnZXRJbnN0YW5jZTogKCkgPT4gUGlsbGFyIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQaWxsYXJDb250ZXh0VmFsdWUgZXh0ZW5kcyBQaWxsYXJTZXJ2aWNlU3RhdGUsIFBpbGxhclNlcnZpY2VBY3Rpb25zIHt9XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFByb3ZpZGVyIFR5cGVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGlsbGFySW5pdENvbmZpZyB7XG4gIC8qKlxuICAgKiBZb3VyIHByb2R1Y3Qga2V5IGZyb20gdGhlIFBpbGxhciBhcHAuXG4gICAqIEdldCBpdCBhdCBhcHAudHJ5cGlsbGFyLmNvbVxuICAgKi9cbiAgcHJvZHVjdEtleT86IHN0cmluZztcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBwcm9kdWN0S2V5YCBpbnN0ZWFkLiBXaWxsIGJlIHJlbW92ZWQgaW4gdjEuMC5cbiAgICovXG4gIGhlbHBDZW50ZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgU0RLIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogTm90YWJsZSBvcHRpb25zOlxuICAgKiAtIGBwYW5lbC51c2VTaGFkb3dET01gOiBXaGV0aGVyIHRvIGlzb2xhdGUgc3R5bGVzIGluIFNoYWRvdyBET00gKGRlZmF1bHQ6IGZhbHNlKS5cbiAgICogICBTZXQgdG8gZmFsc2UgdG8gbGV0IGN1c3RvbSBjYXJkcyBpbmhlcml0IHlvdXIgYXBwJ3MgQ1NTIChUYWlsd2luZCwgZXRjLilcbiAgICovXG4gIGNvbmZpZz86IE9taXQ8UGlsbGFyQ29uZmlnLCAncHJvZHVjdEtleScgfCAnaGVscENlbnRlcic+O1xuXG4gIC8qKlxuICAgKiBIYW5kbGVyIGNhbGxlZCB3aGVuIGEgdGFzayBhY3Rpb24gaXMgdHJpZ2dlcmVkIGZyb20gdGhlIGNoYXQuXG4gICAqIFVzZSB0aGlzIHRvIGhhbmRsZSBBSS1zdWdnZXN0ZWQgYWN0aW9ucyBsaWtlIG9wZW5pbmcgbW9kYWxzLCBuYXZpZ2F0aW5nLCBldGMuXG4gICAqL1xuICBvblRhc2s/OiAodGFzazogVGFza0V4ZWN1dGVQYXlsb2FkKSA9PiB2b2lkO1xuXG4gIC8qKlxuICAgKiBDdXN0b20gY2FyZCBjb21wb25lbnRzIHRvIHJlbmRlciBmb3IgaW5saW5lX3VpIHR5cGUgYWN0aW9ucy5cbiAgICogTWFwIGNhcmQgdHlwZSBuYW1lcyB0byBBbmd1bGFyIGNvbXBvbmVudHMgdGhhdCB3aWxsIHJlbmRlciB0aGUgaW5saW5lIFVJLlxuICAgKi9cbiAgY2FyZHM/OiBSZWNvcmQ8c3RyaW5nLCBDYXJkQ29tcG9uZW50Pjtcbn1cblxuLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuLy8gSW5qZWN0IEZ1bmN0aW9uIFR5cGVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5qZWN0UGlsbGFyUmVzdWx0IGV4dGVuZHMgUGlsbGFyQ29udGV4dFZhbHVlIHt9XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5qZWN0SGVscFBhbmVsUmVzdWx0IHtcbiAgLyoqIFdoZXRoZXIgdGhlIHBhbmVsIGlzIGN1cnJlbnRseSBvcGVuICovXG4gIGlzT3BlbjogU2lnbmFsPGJvb2xlYW4+O1xuXG4gIC8qKiBPcGVuIHRoZSBwYW5lbCAqL1xuICBvcGVuOiAob3B0aW9ucz86IHsgdmlldz86IHN0cmluZzsgYXJ0aWNsZT86IHN0cmluZzsgc2VhcmNoPzogc3RyaW5nIH0pID0+IHZvaWQ7XG5cbiAgLyoqIENsb3NlIHRoZSBwYW5lbCAqL1xuICBjbG9zZTogKCkgPT4gdm9pZDtcblxuICAvKiogVG9nZ2xlIHRoZSBwYW5lbCAqL1xuICB0b2dnbGU6ICgpID0+IHZvaWQ7XG5cbiAgLyoqIE9wZW4gYSBzcGVjaWZpYyBhcnRpY2xlIGluIHRoZSBwYW5lbCAqL1xuICBvcGVuQXJ0aWNsZTogKHNsdWc6IHN0cmluZykgPT4gdm9pZDtcblxuICAvKiogT3BlbiBhIHNwZWNpZmljIGNhdGVnb3J5IGluIHRoZSBwYW5lbCAqL1xuICBvcGVuQ2F0ZWdvcnk6IChzbHVnOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG5cbiAgLyoqIE9wZW4gc2VhcmNoIHdpdGggYSBxdWVyeSAqL1xuICBvcGVuU2VhcmNoOiAocXVlcnk/OiBzdHJpbmcpID0+IHZvaWQ7XG5cbiAgLyoqIE9wZW4gdGhlIEFJIGNoYXQgKi9cbiAgb3BlbkNoYXQ6ICgpID0+IHZvaWQ7XG59XG4iXX0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlsbGFyLWFpLWFuZ3VsYXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvcGlsbGFyLWFpLWFuZ3VsYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @pillar-ai/angular - Angular bindings for Pillar SDK
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* ```typescript
|
|
6
|
+
* // app.config.ts
|
|
7
|
+
* import { ApplicationConfig, APP_INITIALIZER, inject } from '@angular/core';
|
|
8
|
+
* import { PillarService } from '@pillar-ai/angular';
|
|
9
|
+
*
|
|
10
|
+
* function initPillar() {
|
|
11
|
+
* const pillar = inject(PillarService);
|
|
12
|
+
* return () => pillar.init({ productKey: 'your-product-key' });
|
|
13
|
+
* }
|
|
14
|
+
*
|
|
15
|
+
* export const appConfig: ApplicationConfig = {
|
|
16
|
+
* providers: [
|
|
17
|
+
* { provide: APP_INITIALIZER, useFactory: initPillar, multi: true },
|
|
18
|
+
* ],
|
|
19
|
+
* };
|
|
20
|
+
*
|
|
21
|
+
* // help-button.component.ts
|
|
22
|
+
* import { Component } from '@angular/core';
|
|
23
|
+
* import { injectPillar } from '@pillar-ai/angular';
|
|
24
|
+
*
|
|
25
|
+
* @Component({
|
|
26
|
+
* selector: 'app-help-button',
|
|
27
|
+
* standalone: true,
|
|
28
|
+
* template: `
|
|
29
|
+
* <button (click)="toggle()">
|
|
30
|
+
* {{ isPanelOpen() ? 'Close Help' : 'Get Help' }}
|
|
31
|
+
* </button>
|
|
32
|
+
* `,
|
|
33
|
+
* })
|
|
34
|
+
* export class HelpButtonComponent {
|
|
35
|
+
* private pillar = injectPillar();
|
|
36
|
+
* isPanelOpen = this.pillar.isPanelOpen;
|
|
37
|
+
* toggle = this.pillar.toggle;
|
|
38
|
+
* }
|
|
39
|
+
*
|
|
40
|
+
* // Custom panel placement example:
|
|
41
|
+
* // layout.component.ts
|
|
42
|
+
* import { Component } from '@angular/core';
|
|
43
|
+
* import { PillarPanelComponent } from '@pillar-ai/angular';
|
|
44
|
+
*
|
|
45
|
+
* @Component({
|
|
46
|
+
* selector: 'app-layout',
|
|
47
|
+
* standalone: true,
|
|
48
|
+
* imports: [PillarPanelComponent],
|
|
49
|
+
* template: `
|
|
50
|
+
* <div class="layout">
|
|
51
|
+
* <pillar-panel class="custom-panel" />
|
|
52
|
+
* <main>Your content</main>
|
|
53
|
+
* </div>
|
|
54
|
+
* `,
|
|
55
|
+
* })
|
|
56
|
+
* export class LayoutComponent {}
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
// Service
|
|
60
|
+
export { PillarService } from './lib/pillar.service';
|
|
61
|
+
// Components
|
|
62
|
+
export { PillarPanelComponent } from './lib/pillar-panel.component';
|
|
63
|
+
// Inject functions
|
|
64
|
+
export { injectPillar } from './lib/inject-pillar';
|
|
65
|
+
export { injectHelpPanel } from './lib/inject-help-panel';
|
|
66
|
+
export { injectPillarTool, injectPillarAction } from './lib/inject-pillar-tool';
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F5REc7QUFFSCxVQUFVO0FBQ1YsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRXJELGFBQWE7QUFDYixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVwRSxtQkFBbUI7QUFDbkIsT0FBTyxFQUFFLFlBQVksRUFBMkIsTUFBTSxxQkFBcUIsQ0FBQztBQUM1RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBwaWxsYXItYWkvYW5ndWxhciAtIEFuZ3VsYXIgYmluZGluZ3MgZm9yIFBpbGxhciBTREtcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogLy8gYXBwLmNvbmZpZy50c1xuICogaW1wb3J0IHsgQXBwbGljYXRpb25Db25maWcsIEFQUF9JTklUSUFMSVpFUiwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gKiBpbXBvcnQgeyBQaWxsYXJTZXJ2aWNlIH0gZnJvbSAnQHBpbGxhci1haS9hbmd1bGFyJztcbiAqXG4gKiBmdW5jdGlvbiBpbml0UGlsbGFyKCkge1xuICogICBjb25zdCBwaWxsYXIgPSBpbmplY3QoUGlsbGFyU2VydmljZSk7XG4gKiAgIHJldHVybiAoKSA9PiBwaWxsYXIuaW5pdCh7IHByb2R1Y3RLZXk6ICd5b3VyLXByb2R1Y3Qta2V5JyB9KTtcbiAqIH1cbiAqXG4gKiBleHBvcnQgY29uc3QgYXBwQ29uZmlnOiBBcHBsaWNhdGlvbkNvbmZpZyA9IHtcbiAqICAgcHJvdmlkZXJzOiBbXG4gKiAgICAgeyBwcm92aWRlOiBBUFBfSU5JVElBTElaRVIsIHVzZUZhY3Rvcnk6IGluaXRQaWxsYXIsIG11bHRpOiB0cnVlIH0sXG4gKiAgIF0sXG4gKiB9O1xuICpcbiAqIC8vIGhlbHAtYnV0dG9uLmNvbXBvbmVudC50c1xuICogaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gKiBpbXBvcnQgeyBpbmplY3RQaWxsYXIgfSBmcm9tICdAcGlsbGFyLWFpL2FuZ3VsYXInO1xuICpcbiAqIEBDb21wb25lbnQoe1xuICogICBzZWxlY3RvcjogJ2FwcC1oZWxwLWJ1dHRvbicsXG4gKiAgIHN0YW5kYWxvbmU6IHRydWUsXG4gKiAgIHRlbXBsYXRlOiBgXG4gKiAgICAgPGJ1dHRvbiAoY2xpY2spPVwidG9nZ2xlKClcIj5cbiAqICAgICAgIHt7IGlzUGFuZWxPcGVuKCkgPyAnQ2xvc2UgSGVscCcgOiAnR2V0IEhlbHAnIH19XG4gKiAgICAgPC9idXR0b24+XG4gKiAgIGAsXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIEhlbHBCdXR0b25Db21wb25lbnQge1xuICogICBwcml2YXRlIHBpbGxhciA9IGluamVjdFBpbGxhcigpO1xuICogICBpc1BhbmVsT3BlbiA9IHRoaXMucGlsbGFyLmlzUGFuZWxPcGVuO1xuICogICB0b2dnbGUgPSB0aGlzLnBpbGxhci50b2dnbGU7XG4gKiB9XG4gKlxuICogLy8gQ3VzdG9tIHBhbmVsIHBsYWNlbWVudCBleGFtcGxlOlxuICogLy8gbGF5b3V0LmNvbXBvbmVudC50c1xuICogaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG4gKiBpbXBvcnQgeyBQaWxsYXJQYW5lbENvbXBvbmVudCB9IGZyb20gJ0BwaWxsYXItYWkvYW5ndWxhcic7XG4gKlxuICogQENvbXBvbmVudCh7XG4gKiAgIHNlbGVjdG9yOiAnYXBwLWxheW91dCcsXG4gKiAgIHN0YW5kYWxvbmU6IHRydWUsXG4gKiAgIGltcG9ydHM6IFtQaWxsYXJQYW5lbENvbXBvbmVudF0sXG4gKiAgIHRlbXBsYXRlOiBgXG4gKiAgICAgPGRpdiBjbGFzcz1cImxheW91dFwiPlxuICogICAgICAgPHBpbGxhci1wYW5lbCBjbGFzcz1cImN1c3RvbS1wYW5lbFwiIC8+XG4gKiAgICAgICA8bWFpbj5Zb3VyIGNvbnRlbnQ8L21haW4+XG4gKiAgICAgPC9kaXY+XG4gKiAgIGAsXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIExheW91dENvbXBvbmVudCB7fVxuICogYGBgXG4gKi9cblxuLy8gU2VydmljZVxuZXhwb3J0IHsgUGlsbGFyU2VydmljZSB9IGZyb20gJy4vbGliL3BpbGxhci5zZXJ2aWNlJztcblxuLy8gQ29tcG9uZW50c1xuZXhwb3J0IHsgUGlsbGFyUGFuZWxDb21wb25lbnQgfSBmcm9tICcuL2xpYi9waWxsYXItcGFuZWwuY29tcG9uZW50JztcblxuLy8gSW5qZWN0IGZ1bmN0aW9uc1xuZXhwb3J0IHsgaW5qZWN0UGlsbGFyLCB0eXBlIEluamVjdFBpbGxhclJlc3VsdCB9IGZyb20gJy4vbGliL2luamVjdC1waWxsYXInO1xuZXhwb3J0IHsgaW5qZWN0SGVscFBhbmVsIH0gZnJvbSAnLi9saWIvaW5qZWN0LWhlbHAtcGFuZWwnO1xuZXhwb3J0IHsgaW5qZWN0UGlsbGFyVG9vbCwgaW5qZWN0UGlsbGFyQWN0aW9uIH0gZnJvbSAnLi9saWIvaW5qZWN0LXBpbGxhci10b29sJztcblxuLy8gVHlwZXNcbmV4cG9ydCB0eXBlIHtcbiAgQ2FyZENvbXBvbmVudCxcbiAgQ2FyZENvbXBvbmVudFByb3BzLFxuICBQaWxsYXJDb250ZXh0VmFsdWUsXG4gIFBpbGxhckluaXRDb25maWcsXG4gIFBpbGxhclNlcnZpY2VBY3Rpb25zLFxuICBQaWxsYXJTZXJ2aWNlU3RhdGUsXG4gIEluamVjdEhlbHBQYW5lbFJlc3VsdCxcbn0gZnJvbSAnLi9saWIvdHlwZXMnO1xuXG4vLyBSZS1leHBvcnQgdHlwZXMgZnJvbSBjb3JlIFNESyBmb3IgY29udmVuaWVuY2VcbmV4cG9ydCB0eXBlIHtcbiAgLy8gQ29uZmlndXJhdGlvbiB0eXBlc1xuICBFZGdlVHJpZ2dlckNvbmZpZyxcbiAgTW9iaWxlVHJpZ2dlckNvbmZpZyxcbiAgTW9iaWxlVHJpZ2dlclBvc2l0aW9uLFxuICBNb2JpbGVUcmlnZ2VySWNvbixcbiAgTW9iaWxlVHJpZ2dlclNpemUsXG4gIFBhbmVsQ29uZmlnLFxuICBQaWxsYXJDb25maWcsXG4gIFBpbGxhckV2ZW50cyxcbiAgUGlsbGFyU3RhdGUsXG4gIFJlc29sdmVkQ29uZmlnLFxuICBSZXNvbHZlZE1vYmlsZVRyaWdnZXJDb25maWcsXG4gIFJlc29sdmVkVGhlbWVDb25maWcsXG4gIFRhc2tFeGVjdXRlUGF5bG9hZCxcbiAgVGV4dFNlbGVjdGlvbkNvbmZpZyxcbiAgVGhlbWVDb2xvcnMsXG4gIFRoZW1lQ29uZmlnLFxuICBUaGVtZU1vZGUsXG4gIENhcmRDYWxsYmFja3MsXG4gIENhcmRSZW5kZXJlcixcbiAgU2lkZWJhclRhYkNvbmZpZyxcbiAgLy8gVG9vbCB0eXBlcyBmb3IgdHlwZS1zYWZlIG9uVGFzayBhbmQgaW5qZWN0UGlsbGFyVG9vbFxuICBUb29sRGVmaW5pdGlvbnMsXG4gIFN5bmNUb29sRGVmaW5pdGlvbnMsXG4gIFRvb2xEYXRhVHlwZSxcbiAgVG9vbE5hbWVzLFxuICAvLyBVbmlmaWVkIHRvb2wgc2NoZW1hIChuZXcgQVBJKVxuICBUb29sRXhlY3V0ZVJlc3VsdCxcbiAgVG9vbFNjaGVtYSxcbiAgVG9vbFR5cGUsXG4gIC8vIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGFsaWFzZXMgKGRlcHJlY2F0ZWQpXG4gIEFjdGlvbkRlZmluaXRpb25zLFxuICBTeW5jQWN0aW9uRGVmaW5pdGlvbnMsXG4gIEFjdGlvbkRhdGFUeXBlLFxuICBBY3Rpb25OYW1lcyxcbiAgQWN0aW9uUmVzdWx0LFxuICBBY3Rpb25TY2hlbWEsXG4gIEFjdGlvblR5cGUsXG4gIC8vIENoYXQgY29udGV4dCBmb3IgZXNjYWxhdGlvblxuICBDaGF0Q29udGV4dCxcbiAgLy8gRE9NIFNjYW5uaW5nIHR5cGVzIChkZXByZWNhdGVkIC0gZmVhdHVyZSBpcyBkaXNhYmxlZClcbiAgLyoqIEBkZXByZWNhdGVkIERPTSBzY2FubmluZyBpcyBkaXNhYmxlZCAqL1xuICBET01TY2FubmluZ0NvbmZpZyxcbiAgLyoqIEBkZXByZWNhdGVkIERPTSBzY2FubmluZyBpcyBkaXNhYmxlZCAqL1xuICBSZXNvbHZlZERPTVNjYW5uaW5nQ29uZmlnLFxuICAvKiogQGRlcHJlY2F0ZWQgRE9NIHNjYW5uaW5nIGlzIGRpc2FibGVkICovXG4gIFNjYW5PcHRpb25zLFxuICAvKiogQGRlcHJlY2F0ZWQgRE9NIHNjYW5uaW5nIGlzIGRpc2FibGVkICovXG4gIENvbXBhY3RTY2FuUmVzdWx0LFxuICAvKiogQGRlcHJlY2F0ZWQgRE9NIHNjYW5uaW5nIGlzIGRpc2FibGVkICovXG4gIEludGVyYWN0aW9uVHlwZSxcbiAgLy8gRE9NIFNjYW5uZXIgdXRpbGl0aWVzIChkZXByZWNhdGVkIC0gZmVhdHVyZSBpcyBkaXNhYmxlZClcbiAgLyoqIEBkZXByZWNhdGVkIERPTSBzY2FubmluZyBpcyBkaXNhYmxlZCAqL1xuICBzY2FuUGFnZURpcmVjdCxcbn0gZnJvbSAnQHBpbGxhci1haS9zZGsnO1xuIl19
|