@sisense/sdk-ui-angular 1.31.0 → 1.33.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.
Files changed (125) hide show
  1. package/dist/ai/lib/component-wrapper-helpers/context-connectors.d.ts +10 -0
  2. package/dist/ai/lib/component-wrapper-helpers/index.d.ts +2 -0
  3. package/dist/ai/lib/component-wrapper-helpers/template.d.ts +2 -0
  4. package/dist/ai/lib/components/chatbot.component.d.ts +132 -0
  5. package/dist/ai/lib/components/get-nlg-insights.component.d.ts +141 -0
  6. package/dist/ai/lib/components/index.d.ts +2 -0
  7. package/dist/ai/lib/sdk-ai.module.d.ts +40 -5
  8. package/dist/ai/lib/sdk-ui-core-exports.d.ts +1 -0
  9. package/dist/ai/lib/services/ai.service.d.ts +88 -0
  10. package/dist/ai/lib/services/index.d.ts +1 -0
  11. package/dist/ai/public-api.d.ts +6 -0
  12. package/dist/esm2020/ai/lib/component-wrapper-helpers/context-connectors.mjs +20 -0
  13. package/dist/esm2020/ai/lib/component-wrapper-helpers/index.mjs +3 -0
  14. package/dist/esm2020/ai/lib/component-wrapper-helpers/template.mjs +5 -0
  15. package/dist/esm2020/ai/lib/components/chatbot.component.mjs +138 -0
  16. package/dist/esm2020/ai/lib/components/get-nlg-insights.component.mjs +145 -0
  17. package/dist/esm2020/ai/lib/components/index.mjs +3 -0
  18. package/dist/esm2020/ai/lib/sdk-ai.module.mjs +40 -6
  19. package/dist/esm2020/ai/lib/sdk-ui-core-exports.mjs +3 -0
  20. package/dist/esm2020/ai/lib/services/ai.service.mjs +137 -0
  21. package/dist/esm2020/ai/lib/services/index.mjs +2 -0
  22. package/dist/esm2020/ai/public-api.mjs +7 -1
  23. package/dist/esm2020/lib/component-wrapper-helpers/index.mjs +2 -1
  24. package/dist/esm2020/lib/components/charts/area-chart.component.mjs +1 -1
  25. package/dist/esm2020/lib/components/charts/area-range-chart.component.mjs +1 -1
  26. package/dist/esm2020/lib/components/charts/areamap-chart.component.mjs +1 -1
  27. package/dist/esm2020/lib/components/charts/bar-chart.component.mjs +1 -1
  28. package/dist/esm2020/lib/components/charts/boxplot-chart.component.mjs +1 -1
  29. package/dist/esm2020/lib/components/charts/chart.component.mjs +1 -1
  30. package/dist/esm2020/lib/components/charts/column-chart.component.mjs +1 -1
  31. package/dist/esm2020/lib/components/charts/funnel-chart.component.mjs +1 -1
  32. package/dist/esm2020/lib/components/charts/indicator-chart.component.mjs +1 -1
  33. package/dist/esm2020/lib/components/charts/line-chart.component.mjs +1 -1
  34. package/dist/esm2020/lib/components/charts/pie-chart.component.mjs +1 -1
  35. package/dist/esm2020/lib/components/charts/pivot-table.component.mjs +1 -1
  36. package/dist/esm2020/lib/components/charts/polar-chart.component.mjs +1 -1
  37. package/dist/esm2020/lib/components/charts/scatter-chart.component.mjs +1 -1
  38. package/dist/esm2020/lib/components/charts/scattermap-chart.component.mjs +1 -1
  39. package/dist/esm2020/lib/components/charts/sunburst-chart.component.mjs +1 -1
  40. package/dist/esm2020/lib/components/charts/table.component.mjs +1 -1
  41. package/dist/esm2020/lib/components/charts/treemap-chart.component.mjs +1 -1
  42. package/dist/esm2020/lib/components/dashboard/dashboard-by-id.component.mjs +4 -4
  43. package/dist/esm2020/lib/components/dashboard/dashboard.component.mjs +1 -1
  44. package/dist/esm2020/lib/components/drilldown-breadcrumbs.component.mjs +1 -1
  45. package/dist/esm2020/lib/components/filters/criteria-filter-tile.component.mjs +1 -1
  46. package/dist/esm2020/lib/components/filters/date-range-filter-tile.component.mjs +1 -1
  47. package/dist/esm2020/lib/components/filters/member-filter-tile.component.mjs +1 -1
  48. package/dist/esm2020/lib/components/filters/relative-date-filter-tile.component.mjs +1 -1
  49. package/dist/esm2020/lib/components/widgets/chart-widget.component.mjs +1 -1
  50. package/dist/esm2020/lib/components/widgets/index.mjs +2 -1
  51. package/dist/esm2020/lib/components/widgets/pivot-table-widget.component.mjs +127 -0
  52. package/dist/esm2020/lib/components/widgets/table-widget.component.mjs +1 -1
  53. package/dist/esm2020/lib/components/widgets/widget-by-id.component.mjs +1 -1
  54. package/dist/esm2020/lib/decorators/index.mjs +3 -0
  55. package/dist/esm2020/lib/decorators/trackable.decorator.mjs +2 -1
  56. package/dist/esm2020/lib/sdk-ui-core-exports.mjs +2 -2
  57. package/dist/esm2020/lib/sdk-ui.module.mjs +10 -6
  58. package/dist/esm2020/lib/services/query.service.mjs +31 -5
  59. package/dist/esm2020/lib/services/sisense-context.service.mjs +3 -3
  60. package/dist/esm2020/lib/services/theme.service.mjs +3 -3
  61. package/dist/esm2020/lib/types/dashboard-config.mjs +2 -0
  62. package/dist/esm2020/lib/types/index.mjs +2 -1
  63. package/dist/esm2020/lib/utilities/dashboard-helpers.mjs +119 -0
  64. package/dist/esm2020/lib/utilities/dashboard-model-translator.mjs +49 -0
  65. package/dist/esm2020/lib/utilities/index.mjs +7 -0
  66. package/dist/esm2020/lib/utilities/widget-model-translator.mjs +304 -0
  67. package/dist/esm2020/public-api.mjs +6 -25
  68. package/dist/esm2020/version.mjs +2 -2
  69. package/dist/fesm2015/sisense-sdk-ui-angular-ai.mjs +471 -8
  70. package/dist/fesm2015/sisense-sdk-ui-angular-ai.mjs.map +1 -1
  71. package/dist/fesm2015/sisense-sdk-ui-angular.mjs +671 -43
  72. package/dist/fesm2015/sisense-sdk-ui-angular.mjs.map +1 -1
  73. package/dist/fesm2020/sisense-sdk-ui-angular-ai.mjs +466 -8
  74. package/dist/fesm2020/sisense-sdk-ui-angular-ai.mjs.map +1 -1
  75. package/dist/fesm2020/sisense-sdk-ui-angular.mjs +668 -42
  76. package/dist/fesm2020/sisense-sdk-ui-angular.mjs.map +1 -1
  77. package/dist/lib/component-wrapper-helpers/index.d.ts +1 -0
  78. package/dist/lib/components/charts/area-chart.component.d.ts +3 -0
  79. package/dist/lib/components/charts/area-range-chart.component.d.ts +3 -0
  80. package/dist/lib/components/charts/areamap-chart.component.d.ts +3 -0
  81. package/dist/lib/components/charts/bar-chart.component.d.ts +3 -0
  82. package/dist/lib/components/charts/boxplot-chart.component.d.ts +3 -0
  83. package/dist/lib/components/charts/chart.component.d.ts +3 -0
  84. package/dist/lib/components/charts/column-chart.component.d.ts +3 -0
  85. package/dist/lib/components/charts/funnel-chart.component.d.ts +3 -0
  86. package/dist/lib/components/charts/indicator-chart.component.d.ts +3 -0
  87. package/dist/lib/components/charts/line-chart.component.d.ts +3 -0
  88. package/dist/lib/components/charts/pie-chart.component.d.ts +3 -0
  89. package/dist/lib/components/charts/pivot-table.component.d.ts +3 -0
  90. package/dist/lib/components/charts/polar-chart.component.d.ts +3 -0
  91. package/dist/lib/components/charts/scatter-chart.component.d.ts +3 -0
  92. package/dist/lib/components/charts/scattermap-chart.component.d.ts +3 -0
  93. package/dist/lib/components/charts/sunburst-chart.component.d.ts +3 -0
  94. package/dist/lib/components/charts/table.component.d.ts +3 -2
  95. package/dist/lib/components/charts/treemap-chart.component.d.ts +3 -0
  96. package/dist/lib/components/dashboard/dashboard-by-id.component.d.ts +11 -5
  97. package/dist/lib/components/dashboard/dashboard.component.d.ts +8 -2
  98. package/dist/lib/components/drilldown-breadcrumbs.component.d.ts +3 -0
  99. package/dist/lib/components/filters/criteria-filter-tile.component.d.ts +3 -0
  100. package/dist/lib/components/filters/date-range-filter-tile.component.d.ts +3 -0
  101. package/dist/lib/components/filters/member-filter-tile.component.d.ts +3 -0
  102. package/dist/lib/components/filters/relative-date-filter-tile.component.d.ts +3 -0
  103. package/dist/lib/components/widgets/chart-widget.component.d.ts +3 -0
  104. package/dist/lib/components/widgets/index.d.ts +1 -0
  105. package/dist/lib/components/widgets/pivot-table-widget.component.d.ts +127 -0
  106. package/dist/lib/components/widgets/table-widget.component.d.ts +5 -0
  107. package/dist/lib/components/widgets/widget-by-id.component.d.ts +3 -2
  108. package/dist/lib/decorators/index.d.ts +2 -0
  109. package/dist/lib/decorators/trackable.decorator.d.ts +1 -0
  110. package/dist/lib/sdk-ui-core-exports.d.ts +2 -2
  111. package/dist/lib/sdk-ui.module.d.ts +6 -5
  112. package/dist/lib/services/plugins.service.d.ts +1 -1
  113. package/dist/lib/services/query.service.d.ts +29 -3
  114. package/dist/lib/services/sisense-context.service.d.ts +2 -2
  115. package/dist/lib/services/theme.service.d.ts +2 -2
  116. package/dist/lib/types/dashboard-config.d.ts +24 -0
  117. package/dist/lib/types/index.d.ts +1 -0
  118. package/dist/lib/utilities/dashboard-helpers.d.ts +105 -0
  119. package/dist/lib/utilities/dashboard-model-translator.d.ts +47 -0
  120. package/dist/lib/utilities/index.d.ts +23 -0
  121. package/dist/lib/utilities/widget-model-translator.d.ts +289 -0
  122. package/dist/package.json +1 -1
  123. package/dist/public-api.d.ts +5 -22
  124. package/dist/version.d.ts +1 -1
  125. package/package.json +4 -4
@@ -1,35 +1,493 @@
1
1
  import * as i0 from '@angular/core';
2
- import { NgModule } from '@angular/core';
2
+ import { InjectionToken, Injectable, Optional, Inject, Component, ViewChild, Input, NgModule } from '@angular/core';
3
3
  import { CommonModule } from '@angular/common';
4
- import { SdkUiModule } from '@sisense/sdk-ui-angular';
4
+ import * as i1 from '@sisense/sdk-ui-angular';
5
+ import { TrackableService, createSisenseContextConnector, createThemeContextConnector, SdkUiModule } from '@sisense/sdk-ui-angular';
6
+ import { createContextProviderRenderer, ComponentAdapter, createElement } from '@sisense/sdk-ui-preact';
7
+ import { CustomAiContextProvider, ChatRestApi, prepareGetNlgInsightsPayload, DEFAULT_RECOMMENDATIONS_COUNT, widgetComposer, prepareGetNlqResultPayload, Chatbot, GetNlgInsights } from '@sisense/sdk-ui-preact/ai';
8
+ import { __decorate } from 'tslib';
9
+
10
+ const rootId = 'preact';
11
+ const template = `
12
+ <div #${rootId} style="width: 100%; height: 100%"></div>
13
+ `;
5
14
 
6
- /* eslint-disable import/no-extraneous-dependencies */
7
15
  /**
8
- * SDK AI Module
16
+ * Creates AI context connector
9
17
  *
18
+ * @param aiService - The AI service
10
19
  * @internal
11
20
  */
21
+ const createAiContextConnector = (aiService) => {
22
+ return {
23
+ async prepareContext() {
24
+ const api = await aiService.getApi();
25
+ return {
26
+ api,
27
+ };
28
+ },
29
+ renderContextProvider: createContextProviderRenderer(CustomAiContextProvider),
30
+ };
31
+ };
32
+
33
+ /**
34
+ * Token used to inject {@link AiContextConfig} into your application.
35
+ *
36
+ * @example
37
+ * Example of importing {@link SdkAiModule} and injecting {@link AiContextConfig} into your application,
38
+ * along with importing dependency {@link SdkUiModule} and injecting {@link SisenseContextConfig} to connect to a Sisense instance:
39
+ *
40
+ * ```ts
41
+ * import { SdkUiModule, SisenseContextConfig } from '@sisense/sdk-ui-angular';
42
+ * import { SdkAiModule, AI_CONTEXT_CONFIG_TOKEN, AiContextConfig } from '@sisense/sdk-ui-angular/ai';
43
+ *
44
+ * const AI_CONTEXT_CONFIG: AiContextConfig = {
45
+ * volatile: true,
46
+ * };
47
+ * const SISENSE_CONTEXT_CONFIG: SisenseContextConfig = {
48
+ * url: "<instance url>", // replace with the URL of your Sisense instance
49
+ * token: "<api token>", // replace with the API token of your user account
50
+ * defaultDataSource: DM.DataSource,
51
+ * };
52
+ *
53
+ * @NgModule({
54
+ * imports: [
55
+ * BrowserModule,
56
+ * SdkUiModule,
57
+ * SdkAiModule,
58
+ * ],
59
+ * declarations: [AppComponent],
60
+ * providers: [
61
+ * { provide: AI_CONTEXT_CONFIG_TOKEN, useValue: AI_CONTEXT_CONFIG },
62
+ * { provide: SISENSE_CONTEXT_CONFIG_TOKEN, useValue: SISENSE_CONTEXT_CONFIG },
63
+ * ],
64
+ * bootstrap: [AppComponent],
65
+ * })
66
+ * ```
67
+ *
68
+ * @group Generative AI
69
+ * @beta
70
+ */
71
+ const AI_CONTEXT_CONFIG_TOKEN = new InjectionToken('AI Context Config');
72
+ /**
73
+ * Service for working with Sisense Fusion Generative AI.
74
+ *
75
+ * ::: warning Note
76
+ * This service is currently under beta release for our managed cloud customers on version L2024.2 or above. It is subject to changes as we make fixes and improvements.
77
+ * :::
78
+ *
79
+ * @group Generative AI
80
+ * @beta
81
+ */
82
+ let AiService = class AiService {
83
+ constructor(sisenseContextService, aiContextConfig) {
84
+ this.sisenseContextService = sisenseContextService;
85
+ this.apiPromise = this.sisenseContextService
86
+ .getApp()
87
+ .then((app) => new ChatRestApi(app.httpClient, aiContextConfig?.volatile));
88
+ }
89
+ /** @internal */
90
+ getApi() {
91
+ return this.apiPromise;
92
+ }
93
+ /**
94
+ * Fetches an analysis of the provided query using natural language generation (NLG).
95
+ * Specifying NLG parameters is similar to providing parameters to the {@link QueryService.executeQuery} service method, using dimensions, measures, and filters.
96
+ *
97
+ * @param params - Parameters for getting NLG insights
98
+ * @returns NLG insights text summary
99
+ */
100
+ async getNlgInsights(params) {
101
+ const api = await this.getApi();
102
+ const payload = prepareGetNlgInsightsPayload(params);
103
+ return api.ai
104
+ .getNlgInsights(payload)
105
+ .then((response) => response?.data?.answer);
106
+ }
107
+ /**
108
+ * Fetches recommended questions for a data model or perspective.
109
+ *
110
+ * @param params - Parameters for recommendations
111
+ * @returns An array of objects, each containing recommended question text and its corresponding `widgetProps`
112
+ */
113
+ async getQueryRecommendations(params) {
114
+ const api = await this.getApi();
115
+ const { contextTitle, count, enableAxisTitlesInWidgetProps } = params;
116
+ const recCount = count ?? DEFAULT_RECOMMENDATIONS_COUNT;
117
+ const rawRecommendations = (await api.ai.getQueryRecommendations(contextTitle, { numOfRecommendations: recCount })) ||
118
+ [];
119
+ return rawRecommendations.map((recommendation) => ({
120
+ ...recommendation,
121
+ widgetProps: recommendation.jaql
122
+ ? widgetComposer.toWidgetProps(recommendation, {
123
+ useCustomizedStyleOptions: enableAxisTitlesInWidgetProps,
124
+ })
125
+ : undefined,
126
+ }));
127
+ }
128
+ /**
129
+ * Executes a natural language query (NLQ) against a data model or perspective
130
+ *
131
+ * @param params - NLQ query parameters
132
+ * @returns The result as WidgetProps
133
+ */
134
+ async getNlqResult(params) {
135
+ const { contextTitle, request } = prepareGetNlqResultPayload(params);
136
+ const api = await this.getApi();
137
+ const data = await api?.ai.getNlqResult(contextTitle, request);
138
+ return data
139
+ ? widgetComposer.toWidgetProps(data, {
140
+ useCustomizedStyleOptions: params.enableAxisTitlesInWidgetProps || false,
141
+ })
142
+ : undefined;
143
+ }
144
+ };
145
+ AiService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AiService, deps: [{ token: i1.SisenseContextService }, { token: AI_CONTEXT_CONFIG_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
146
+ AiService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AiService, providedIn: 'root' });
147
+ AiService = __decorate([
148
+ TrackableService(['getNlgInsights', 'getQueryRecommendations'])
149
+ ], AiService);
150
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AiService, decorators: [{
151
+ type: Injectable,
152
+ args: [{
153
+ providedIn: 'root',
154
+ }]
155
+ }], ctorParameters: function () { return [{ type: i1.SisenseContextService }, { type: undefined, decorators: [{
156
+ type: Optional
157
+ }, {
158
+ type: Inject,
159
+ args: [AI_CONTEXT_CONFIG_TOKEN]
160
+ }] }]; } });
161
+
162
+ /**
163
+ * An Angular component that renders a chatbot with data topic selection.
164
+ *
165
+ * ::: warning Note
166
+ * This component is currently under beta release for our managed cloud customers on version L2024.2 or above. It is subject to changes as we make fixes and improvements.
167
+ * :::
168
+ *
169
+ * @example
170
+ * An example of using the `ChatbotComponent`:
171
+ *
172
+ * ```html
173
+ <!--Component HTML template in example.component.html-->
174
+ <csdk-chatbot
175
+ [width]="chatbot.width"
176
+ [height]="chatbot.height"
177
+ [config]="chatbot.config"
178
+ />
179
+ * ```
180
+ *
181
+ * ```ts
182
+ // Component behavior in example.component.ts
183
+ import { Component } from '@angular/core';
184
+
185
+ @Component({
186
+ selector: 'example',
187
+ templateUrl: './example.component.html',
188
+ styleUrls: ['./example.component.scss'],
189
+ })
190
+ export class ExampleComponent {
191
+ chatbot = {
192
+ width: '500px',
193
+ height: '700px',
194
+ config: {
195
+ numOfRecommendations: 5,
196
+ },
197
+ };
198
+ }
199
+ * ```
200
+ *
201
+ * <img src="media://angular-chatbot-example.png" width="500px" />
202
+ *
203
+ * @group Generative AI
204
+ * @beta
205
+ */
206
+ class ChatbotComponent {
207
+ /**
208
+ * Constructor for the `ChatbotComponent`.
209
+ *
210
+ * @param sisenseContextService - Sisense context service
211
+ * @param themeService - Theme service
212
+ * @param aiService - AI service
213
+ */
214
+ constructor(
215
+ /**
216
+ * Sisense context service
217
+ *
218
+ * @category Constructor
219
+ */
220
+ sisenseContextService,
221
+ /**
222
+ * Theme service
223
+ *
224
+ * @category Constructor
225
+ */
226
+ themeService,
227
+ /**
228
+ * AI service
229
+ *
230
+ * @category Constructor
231
+ */
232
+ aiService) {
233
+ this.sisenseContextService = sisenseContextService;
234
+ this.themeService = themeService;
235
+ this.aiService = aiService;
236
+ this.componentAdapter = new ComponentAdapter(() => this.createPreactComponent(), [
237
+ createSisenseContextConnector(this.sisenseContextService),
238
+ createThemeContextConnector(this.themeService),
239
+ createAiContextConnector(this.aiService),
240
+ ]);
241
+ }
242
+ /**
243
+ * @internal
244
+ */
245
+ ngAfterViewInit() {
246
+ this.componentAdapter.render(this.preactRef.nativeElement);
247
+ }
248
+ /**
249
+ * @internal
250
+ */
251
+ ngOnChanges() {
252
+ if (this.preactRef) {
253
+ this.componentAdapter.render(this.preactRef.nativeElement);
254
+ }
255
+ }
256
+ createPreactComponent() {
257
+ const props = {
258
+ width: this.width,
259
+ height: this.height,
260
+ config: this.config,
261
+ };
262
+ return createElement(Chatbot, props);
263
+ }
264
+ /**
265
+ * @internal
266
+ */
267
+ ngOnDestroy() {
268
+ this.componentAdapter.destroy();
269
+ }
270
+ }
271
+ ChatbotComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ChatbotComponent, deps: [{ token: i1.SisenseContextService }, { token: i1.ThemeService }, { token: AiService }], target: i0.ɵɵFactoryTarget.Component });
272
+ ChatbotComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: ChatbotComponent, selector: "csdk-chatbot", inputs: { width: "width", height: "height", config: "config" }, viewQueries: [{ propertyName: "preactRef", first: true, predicate: ["preact"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "\n <div #preact style=\"width: 100%; height: 100%\"></div>\n", isInline: true });
273
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ChatbotComponent, decorators: [{
274
+ type: Component,
275
+ args: [{
276
+ selector: 'csdk-chatbot',
277
+ template,
278
+ }]
279
+ }], ctorParameters: function () { return [{ type: i1.SisenseContextService }, { type: i1.ThemeService }, { type: AiService }]; }, propDecorators: { preactRef: [{
280
+ type: ViewChild,
281
+ args: [rootId]
282
+ }], width: [{
283
+ type: Input
284
+ }], height: [{
285
+ type: Input
286
+ }], config: [{
287
+ type: Input
288
+ }] } });
289
+
290
+ /**
291
+ * An Angular component that fetches and displays a collapsible analysis of the provided query using natural language generation (NLG).
292
+ * Specifying NLG parameters is similar to providing parameters to the {@link QueryService.executeQuery} service method, using dimensions, measures, and filters.
293
+ *
294
+ * ::: warning Note
295
+ * This component is currently under beta release for our managed cloud customers on version L2024.2 or above. It is subject to changes as we make fixes and improvements.
296
+ * :::
297
+ *
298
+ * @example
299
+ * An example of using the `GetNlgInsightsComponent`:
300
+ *
301
+ * ```html
302
+ <!--Component HTML template in example.component.html-->
303
+ <csdk-get-nlg-insights
304
+ [dataSource]="nlgParams.dataSource"
305
+ [dimensions]="nlgParams.dimensions"
306
+ [measures]="nlgParams.measures"
307
+ />
308
+ * ```
309
+ *
310
+ * ```ts
311
+ // Component behavior in example.component.ts
312
+ import { Component } from '@angular/core';
313
+ import { measureFactory } from '@sisense/sdk-data';
314
+ import * as DM from '../../assets/sample-healthcare-model';
315
+
316
+ @Component({
317
+ selector: 'example',
318
+ templateUrl: './example.component.html',
319
+ styleUrls: ['./example.component.scss'],
320
+ })
321
+ export class ExampleComponent {
322
+ nlgParams = {
323
+ dataSource: DM.DataSource.title,
324
+ dimensions: [DM.Divisions.Divison_name],
325
+ measures: [measureFactory.sum(DM.Admissions.Cost_of_admission)],
326
+ };
327
+ }
328
+ * ```
329
+ *
330
+ * <img src="media://angular-get-nlg-insights-example.png" width="700px" />
331
+ *
332
+ * @group Generative AI
333
+ * @beta
334
+ */
335
+ class GetNlgInsightsComponent {
336
+ /**
337
+ * Constructor for the `GetNlgInsightsProps`.
338
+ *
339
+ * @param sisenseContextService - Sisense context service
340
+ * @param themeService - Theme service
341
+ * @param aiService - AI service
342
+ */
343
+ constructor(
344
+ /**
345
+ * Sisense context service
346
+ *
347
+ * @category Constructor
348
+ */
349
+ sisenseContextService,
350
+ /**
351
+ * Theme service
352
+ *
353
+ * @category Constructor
354
+ */
355
+ themeService,
356
+ /**
357
+ * AI service
358
+ *
359
+ * @category Constructor
360
+ */
361
+ aiService) {
362
+ this.sisenseContextService = sisenseContextService;
363
+ this.themeService = themeService;
364
+ this.aiService = aiService;
365
+ this.componentAdapter = new ComponentAdapter(() => this.createPreactComponent(), [
366
+ createSisenseContextConnector(this.sisenseContextService),
367
+ createThemeContextConnector(this.themeService),
368
+ createAiContextConnector(this.aiService),
369
+ ]);
370
+ }
371
+ /**
372
+ * @internal
373
+ */
374
+ ngAfterViewInit() {
375
+ this.componentAdapter.render(this.preactRef.nativeElement);
376
+ }
377
+ /**
378
+ * @internal
379
+ */
380
+ ngOnChanges() {
381
+ if (this.preactRef) {
382
+ this.componentAdapter.render(this.preactRef.nativeElement);
383
+ }
384
+ }
385
+ createPreactComponent() {
386
+ const props = {
387
+ dataSource: this.dataSource,
388
+ dimensions: this.dimensions,
389
+ measures: this.measures,
390
+ filters: this.filters,
391
+ verbosity: this.verbosity,
392
+ };
393
+ return createElement(GetNlgInsights, props);
394
+ }
395
+ /**
396
+ * @internal
397
+ */
398
+ ngOnDestroy() {
399
+ this.componentAdapter.destroy();
400
+ }
401
+ }
402
+ GetNlgInsightsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GetNlgInsightsComponent, deps: [{ token: i1.SisenseContextService }, { token: i1.ThemeService }, { token: AiService }], target: i0.ɵɵFactoryTarget.Component });
403
+ GetNlgInsightsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: GetNlgInsightsComponent, selector: "csdk-get-nlg-insights", inputs: { dataSource: "dataSource", dimensions: "dimensions", measures: "measures", filters: "filters", verbosity: "verbosity" }, viewQueries: [{ propertyName: "preactRef", first: true, predicate: ["preact"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "\n <div #preact style=\"width: 100%; height: 100%\"></div>\n", isInline: true });
404
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: GetNlgInsightsComponent, decorators: [{
405
+ type: Component,
406
+ args: [{
407
+ selector: 'csdk-get-nlg-insights',
408
+ template,
409
+ }]
410
+ }], ctorParameters: function () { return [{ type: i1.SisenseContextService }, { type: i1.ThemeService }, { type: AiService }]; }, propDecorators: { preactRef: [{
411
+ type: ViewChild,
412
+ args: [rootId]
413
+ }], dataSource: [{
414
+ type: Input
415
+ }], dimensions: [{
416
+ type: Input
417
+ }], measures: [{
418
+ type: Input
419
+ }], filters: [{
420
+ type: Input
421
+ }], verbosity: [{
422
+ type: Input
423
+ }] } });
424
+
425
+ /* eslint-disable import/no-extraneous-dependencies */
426
+ /**
427
+ * SDK AI Module, which is a container for generative AI components and services.
428
+ *
429
+ * @example
430
+ * Example of importing {@link SdkAiModule} and injecting {@link AiContextConfig} into your application,
431
+ * along with importing dependency {@link SdkUiModule} and injecting {@link SisenseContextConfig} to connect to a Sisense instance:
432
+ *
433
+ * ```ts
434
+ * import { SdkUiModule, SisenseContextConfig } from '@sisense/sdk-ui-angular';
435
+ * import { SdkAiModule, AI_CONTEXT_CONFIG_TOKEN, AiContextConfig } from '@sisense/sdk-ui-angular/ai';
436
+ *
437
+ * const AI_CONTEXT_CONFIG: AiContextConfig = {
438
+ * volatile: true,
439
+ * };
440
+ * const SISENSE_CONTEXT_CONFIG: SisenseContextConfig = {
441
+ * url: "<instance url>", // replace with the URL of your Sisense instance
442
+ * token: "<api token>", // replace with the API token of your user account
443
+ * defaultDataSource: DM.DataSource,
444
+ * };
445
+ *
446
+ * @NgModule({
447
+ * imports: [
448
+ * BrowserModule,
449
+ * SdkUiModule,
450
+ * SdkAiModule,
451
+ * ],
452
+ * declarations: [AppComponent],
453
+ * providers: [
454
+ * { provide: AI_CONTEXT_CONFIG_TOKEN, useValue: AI_CONTEXT_CONFIG },
455
+ * { provide: SISENSE_CONTEXT_CONFIG_TOKEN, useValue: SISENSE_CONTEXT_CONFIG },
456
+ * ],
457
+ * bootstrap: [AppComponent],
458
+ * })
459
+ * ```
460
+ *
461
+ * @group Generative AI
462
+ * @beta
463
+ */
12
464
  class SdkAiModule {
13
465
  constructor() {
14
466
  console.log('SdkAiModule loaded');
15
467
  }
16
468
  }
17
469
  SdkAiModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SdkAiModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
18
- SdkAiModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: SdkAiModule, imports: [CommonModule, SdkUiModule] });
470
+ SdkAiModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: SdkAiModule, declarations: [ChatbotComponent, GetNlgInsightsComponent], imports: [CommonModule, SdkUiModule], exports: [ChatbotComponent, GetNlgInsightsComponent] });
19
471
  SdkAiModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SdkAiModule, imports: [CommonModule, SdkUiModule] });
20
472
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SdkAiModule, decorators: [{
21
473
  type: NgModule,
22
474
  args: [{
23
- declarations: [],
475
+ declarations: [ChatbotComponent, GetNlgInsightsComponent],
24
476
  imports: [CommonModule, SdkUiModule],
25
- exports: [],
477
+ exports: [ChatbotComponent, GetNlgInsightsComponent],
26
478
  providers: [],
27
479
  }]
28
480
  }], ctorParameters: function () { return []; } });
29
481
 
482
+ // This file re-exports common types/utils from @sisense/sdk-ui-preact/ai
483
+
484
+ /**
485
+ * Public API Surface of @sisense/sdk-ui-angular/ai
486
+ */
487
+
30
488
  /**
31
489
  * Generated bundle index. Do not edit.
32
490
  */
33
491
 
34
- export { SdkAiModule };
492
+ export { AI_CONTEXT_CONFIG_TOKEN, AiService, ChatbotComponent, GetNlgInsightsComponent, SdkAiModule };
35
493
  //# sourceMappingURL=sisense-sdk-ui-angular-ai.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"sisense-sdk-ui-angular-ai.mjs","sources":["../../src/ai/lib/sdk-ai.module.ts","../../src/ai/sisense-sdk-ui-angular-ai.ts"],"sourcesContent":["/* eslint-disable import/no-extraneous-dependencies */\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SdkUiModule } from '@sisense/sdk-ui-angular';\n\n/**\n * SDK AI Module\n *\n * @internal\n */\n@NgModule({\n declarations: [],\n imports: [CommonModule, SdkUiModule],\n exports: [],\n providers: [],\n})\nexport class SdkAiModule {\n constructor() {\n console.log('SdkAiModule loaded');\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;AAAA;AAKA;;;;AAIG;MAOU,WAAW,CAAA;AACtB,IAAA,WAAA,GAAA;AACE,QAAA,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;KACnC;;yGAHU,WAAW,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;0GAAX,WAAW,EAAA,OAAA,EAAA,CAJZ,YAAY,EAAE,WAAW,CAAA,EAAA,CAAA,CAAA;0GAIxB,WAAW,EAAA,OAAA,EAAA,CAJZ,YAAY,EAAE,WAAW,CAAA,EAAA,CAAA,CAAA;4FAIxB,WAAW,EAAA,UAAA,EAAA,CAAA;kBANvB,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,YAAY,EAAE,EAAE;AAChB,oBAAA,OAAO,EAAE,CAAC,YAAY,EAAE,WAAW,CAAC;AACpC,oBAAA,OAAO,EAAE,EAAE;AACX,oBAAA,SAAS,EAAE,EAAE;AACd,iBAAA,CAAA;;;ACfD;;AAEG;;;;"}
1
+ {"version":3,"file":"sisense-sdk-ui-angular-ai.mjs","sources":["../../src/ai/lib/component-wrapper-helpers/template.ts","../../src/ai/lib/component-wrapper-helpers/context-connectors.ts","../../src/ai/lib/services/ai.service.ts","../../src/ai/lib/components/chatbot.component.ts","../../src/ai/lib/components/get-nlg-insights.component.ts","../../src/ai/lib/sdk-ai.module.ts","../../src/ai/lib/sdk-ui-core-exports.ts","../../src/ai/public-api.ts","../../src/ai/sisense-sdk-ui-angular-ai.ts"],"sourcesContent":["export const rootId = 'preact';\nexport const template = `\n <div #${rootId} style=\"width: 100%; height: 100%\"></div>\n`;\n","import { ContextConnector, createContextProviderRenderer } from '@sisense/sdk-ui-preact';\nimport { CustomAiContextProvider, CustomAiContext } from '@sisense/sdk-ui-preact/ai';\nimport { AiService } from '../services/ai.service';\n\n/**\n * Creates AI context connector\n *\n * @param aiService - The AI service\n * @internal\n */\nexport const createAiContextConnector = (\n aiService: AiService,\n): ContextConnector<CustomAiContext> => {\n return {\n async prepareContext() {\n const api = await aiService.getApi();\n return {\n api,\n };\n },\n renderContextProvider: createContextProviderRenderer(CustomAiContextProvider),\n };\n};\n","import { Inject, Injectable, InjectionToken, Optional } from '@angular/core';\nimport {\n ChatRestApi,\n UseGetNlgInsightsParams,\n prepareGetNlgInsightsPayload,\n GetQueryRecommendationsParams,\n AiContextProviderProps,\n GetNlgInsightsResponse,\n QueryRecommendation,\n GetNlqResultParams,\n DEFAULT_RECOMMENDATIONS_COUNT,\n widgetComposer,\n prepareGetNlqResultPayload,\n} from '@sisense/sdk-ui-preact/ai';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport { SisenseContextService, TrackableService, WidgetProps } from '@sisense/sdk-ui-angular';\n\nexport interface AiContextConfig extends Omit<AiContextProviderProps, 'children'> {}\nexport interface GetNlgInsightsParams extends Omit<UseGetNlgInsightsParams, 'enabled'> {}\n\n/**\n * Token used to inject {@link AiContextConfig} into your application.\n *\n * @example\n * Example of importing {@link SdkAiModule} and injecting {@link AiContextConfig} into your application,\n * along with importing dependency {@link SdkUiModule} and injecting {@link SisenseContextConfig} to connect to a Sisense instance:\n *\n * ```ts\n * import { SdkUiModule, SisenseContextConfig } from '@sisense/sdk-ui-angular';\n * import { SdkAiModule, AI_CONTEXT_CONFIG_TOKEN, AiContextConfig } from '@sisense/sdk-ui-angular/ai';\n *\n * const AI_CONTEXT_CONFIG: AiContextConfig = {\n * volatile: true,\n * };\n * const SISENSE_CONTEXT_CONFIG: SisenseContextConfig = {\n * url: \"<instance url>\", // replace with the URL of your Sisense instance\n * token: \"<api token>\", // replace with the API token of your user account\n * defaultDataSource: DM.DataSource,\n * };\n *\n * @NgModule({\n * imports: [\n * BrowserModule,\n * SdkUiModule,\n * SdkAiModule,\n * ],\n * declarations: [AppComponent],\n * providers: [\n * { provide: AI_CONTEXT_CONFIG_TOKEN, useValue: AI_CONTEXT_CONFIG },\n * { provide: SISENSE_CONTEXT_CONFIG_TOKEN, useValue: SISENSE_CONTEXT_CONFIG },\n * ],\n * bootstrap: [AppComponent],\n * })\n * ```\n *\n * @group Generative AI\n * @beta\n */\nexport const AI_CONTEXT_CONFIG_TOKEN = new InjectionToken<AiContextConfig>('AI Context Config');\n\n/**\n * Service for working with Sisense Fusion Generative AI.\n *\n * ::: warning Note\n * This service is currently under beta release for our managed cloud customers on version L2024.2 or above. It is subject to changes as we make fixes and improvements.\n * :::\n *\n * @group Generative AI\n * @beta\n */\n@Injectable({\n providedIn: 'root',\n})\n@TrackableService<AiService>(['getNlgInsights', 'getQueryRecommendations'])\nexport class AiService {\n private apiPromise: Promise<ChatRestApi>;\n\n constructor(\n private sisenseContextService: SisenseContextService,\n @Optional() @Inject(AI_CONTEXT_CONFIG_TOKEN) aiContextConfig?: AiContextConfig,\n ) {\n this.apiPromise = this.sisenseContextService\n .getApp()\n .then((app) => new ChatRestApi(app.httpClient, aiContextConfig?.volatile));\n }\n\n /** @internal */\n getApi(): Promise<ChatRestApi> {\n return this.apiPromise;\n }\n\n /**\n * Fetches an analysis of the provided query using natural language generation (NLG).\n * Specifying NLG parameters is similar to providing parameters to the {@link QueryService.executeQuery} service method, using dimensions, measures, and filters.\n *\n * @param params - Parameters for getting NLG insights\n * @returns NLG insights text summary\n */\n async getNlgInsights(params: GetNlgInsightsParams): Promise<string | undefined> {\n const api = await this.getApi();\n const payload = prepareGetNlgInsightsPayload(params);\n return api.ai\n .getNlgInsights(payload)\n .then((response?: GetNlgInsightsResponse) => response?.data?.answer);\n }\n\n /**\n * Fetches recommended questions for a data model or perspective.\n *\n * @param params - Parameters for recommendations\n * @returns An array of objects, each containing recommended question text and its corresponding `widgetProps`\n */\n async getQueryRecommendations(\n params: GetQueryRecommendationsParams,\n ): Promise<QueryRecommendation[]> {\n const api = await this.getApi();\n const { contextTitle, count, enableAxisTitlesInWidgetProps } = params;\n const recCount = count ?? DEFAULT_RECOMMENDATIONS_COUNT;\n\n const rawRecommendations =\n (await api.ai.getQueryRecommendations(contextTitle, { numOfRecommendations: recCount })) ||\n [];\n\n return rawRecommendations.map(\n (recommendation: QueryRecommendation) =>\n ({\n ...recommendation,\n widgetProps: recommendation.jaql\n ? widgetComposer.toWidgetProps(recommendation, {\n useCustomizedStyleOptions: enableAxisTitlesInWidgetProps,\n })\n : undefined,\n } as QueryRecommendation),\n );\n }\n\n /**\n * Executes a natural language query (NLQ) against a data model or perspective\n *\n * @param params - NLQ query parameters\n * @returns The result as WidgetProps\n */\n async getNlqResult(params: GetNlqResultParams): Promise<WidgetProps | undefined> {\n const { contextTitle, request } = prepareGetNlqResultPayload(params);\n const api = await this.getApi();\n\n const data = await api?.ai.getNlqResult(contextTitle, request);\n\n return data\n ? widgetComposer.toWidgetProps(data, {\n useCustomizedStyleOptions: params.enableAxisTitlesInWidgetProps || false,\n })\n : undefined;\n }\n}\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n Input,\n OnChanges,\n OnDestroy,\n ViewChild,\n} from '@angular/core';\nimport { ComponentAdapter, createElement } from '@sisense/sdk-ui-preact';\nimport { Chatbot, type ChatbotProps as ChatbotPropsPreact } from '@sisense/sdk-ui-preact/ai';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport {\n SisenseContextService,\n ThemeService,\n createSisenseContextConnector,\n createThemeContextConnector,\n} from '@sisense/sdk-ui-angular';\nimport { template, rootId } from '../component-wrapper-helpers/template';\nimport { AiService } from '../services/ai.service';\nimport { createAiContextConnector } from '../component-wrapper-helpers';\n\n/**\n * Props of the {@link ChatbotComponent}.\n */\nexport interface ChatbotProps extends ChatbotPropsPreact {}\n\n/**\n * An Angular component that renders a chatbot with data topic selection.\n *\n * ::: warning Note\n * This component is currently under beta release for our managed cloud customers on version L2024.2 or above. It is subject to changes as we make fixes and improvements.\n * :::\n *\n * @example\n * An example of using the `ChatbotComponent`:\n *\n * ```html\n<!--Component HTML template in example.component.html-->\n<csdk-chatbot\n [width]=\"chatbot.width\"\n [height]=\"chatbot.height\"\n [config]=\"chatbot.config\"\n/>\n * ```\n *\n * ```ts\n// Component behavior in example.component.ts\nimport { Component } from '@angular/core';\n\n@Component({\n selector: 'example',\n templateUrl: './example.component.html',\n styleUrls: ['./example.component.scss'],\n})\nexport class ExampleComponent {\n chatbot = {\n width: '500px',\n height: '700px',\n config: {\n numOfRecommendations: 5,\n },\n };\n}\n * ```\n *\n * <img src=\"media://angular-chatbot-example.png\" width=\"500px\" />\n *\n * @group Generative AI\n * @beta\n */\n@Component({\n selector: 'csdk-chatbot',\n template,\n})\nexport class ChatbotComponent implements AfterViewInit, OnChanges, OnDestroy {\n /**\n * @internal\n */\n @ViewChild(rootId)\n preactRef!: ElementRef<HTMLDivElement>;\n\n /**\n * {@inheritDoc @sisense/sdk-ui!ChatbotProps.width}\n */\n @Input()\n width: ChatbotProps['width'];\n\n /**\n * {@inheritDoc @sisense/sdk-ui!ChatbotProps.height}\n */\n @Input()\n height: ChatbotProps['height'];\n\n /**\n * {@inheritDoc @sisense/sdk-ui!ChatbotProps.config}\n */\n @Input()\n config: ChatbotProps['config'];\n\n private componentAdapter: ComponentAdapter;\n\n /**\n * Constructor for the `ChatbotComponent`.\n *\n * @param sisenseContextService - Sisense context service\n * @param themeService - Theme service\n * @param aiService - AI service\n */\n constructor(\n /**\n * Sisense context service\n *\n * @category Constructor\n */\n public sisenseContextService: SisenseContextService,\n /**\n * Theme service\n *\n * @category Constructor\n */\n public themeService: ThemeService,\n /**\n * AI service\n *\n * @category Constructor\n */\n public aiService: AiService,\n ) {\n this.componentAdapter = new ComponentAdapter(\n () => this.createPreactComponent(),\n [\n createSisenseContextConnector(this.sisenseContextService),\n createThemeContextConnector(this.themeService),\n createAiContextConnector(this.aiService),\n ],\n );\n }\n\n /**\n * @internal\n */\n ngAfterViewInit() {\n this.componentAdapter.render(this.preactRef.nativeElement);\n }\n\n /**\n * @internal\n */\n ngOnChanges() {\n if (this.preactRef) {\n this.componentAdapter.render(this.preactRef.nativeElement);\n }\n }\n\n private createPreactComponent() {\n const props = {\n width: this.width,\n height: this.height,\n config: this.config,\n };\n\n return createElement(Chatbot, props);\n }\n\n /**\n * @internal\n */\n ngOnDestroy() {\n this.componentAdapter.destroy();\n }\n}\n","import {\n AfterViewInit,\n Component,\n ElementRef,\n Input,\n OnChanges,\n OnDestroy,\n ViewChild,\n} from '@angular/core';\nimport { ComponentAdapter, createElement } from '@sisense/sdk-ui-preact';\nimport {\n GetNlgInsights,\n type GetNlgInsightsProps as GetNlgInsightsPropsPreact,\n} from '@sisense/sdk-ui-preact/ai';\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport {\n SisenseContextService,\n ThemeService,\n createSisenseContextConnector,\n createThemeContextConnector,\n} from '@sisense/sdk-ui-angular';\nimport { AiService } from '../services/ai.service';\nimport { createAiContextConnector } from '../component-wrapper-helpers';\nimport { template, rootId } from '../component-wrapper-helpers/template';\n\n/**\n * Props of the {@link GetNlgInsightsComponent}.\n */\nexport interface GetNlgInsightsProps extends GetNlgInsightsPropsPreact {}\n\n/**\n * An Angular component that fetches and displays a collapsible analysis of the provided query using natural language generation (NLG).\n * Specifying NLG parameters is similar to providing parameters to the {@link QueryService.executeQuery} service method, using dimensions, measures, and filters.\n *\n * ::: warning Note\n * This component is currently under beta release for our managed cloud customers on version L2024.2 or above. It is subject to changes as we make fixes and improvements.\n * :::\n *\n * @example\n * An example of using the `GetNlgInsightsComponent`:\n *\n * ```html\n<!--Component HTML template in example.component.html-->\n<csdk-get-nlg-insights\n [dataSource]=\"nlgParams.dataSource\"\n [dimensions]=\"nlgParams.dimensions\"\n [measures]=\"nlgParams.measures\"\n/>\n * ```\n *\n * ```ts\n// Component behavior in example.component.ts\nimport { Component } from '@angular/core';\nimport { measureFactory } from '@sisense/sdk-data';\nimport * as DM from '../../assets/sample-healthcare-model';\n\n@Component({\n selector: 'example',\n templateUrl: './example.component.html',\n styleUrls: ['./example.component.scss'],\n})\nexport class ExampleComponent {\n nlgParams = {\n dataSource: DM.DataSource.title,\n dimensions: [DM.Divisions.Divison_name],\n measures: [measureFactory.sum(DM.Admissions.Cost_of_admission)],\n };\n}\n * ```\n *\n * <img src=\"media://angular-get-nlg-insights-example.png\" width=\"700px\" />\n *\n * @group Generative AI\n * @beta\n */\n@Component({\n selector: 'csdk-get-nlg-insights',\n template,\n})\nexport class GetNlgInsightsComponent implements AfterViewInit, OnChanges, OnDestroy {\n /**\n * @internal\n */\n @ViewChild(rootId)\n preactRef!: ElementRef<HTMLDivElement>;\n\n /**\n * {@inheritDoc @sisense/sdk-ui!GetNlgInsightsProps.dataSource}\n */\n @Input()\n dataSource!: GetNlgInsightsProps['dataSource'];\n\n /**\n * {@inheritDoc @sisense/sdk-ui!GetNlgInsightsProps.dimensions}\n */\n @Input()\n dimensions: GetNlgInsightsProps['dimensions'];\n\n /**\n * {@inheritDoc @sisense/sdk-ui!GetNlgInsightsProps.measures}\n */\n @Input()\n measures: GetNlgInsightsProps['measures'];\n\n /**\n * {@inheritDoc @sisense/sdk-ui!GetNlgInsightsProps.filters}\n */\n @Input()\n filters: GetNlgInsightsProps['filters'];\n\n /**\n * {@inheritDoc @sisense/sdk-ui!GetNlgInsightsProps.verbosity}\n */\n @Input()\n verbosity: GetNlgInsightsProps['verbosity'];\n\n private componentAdapter: ComponentAdapter;\n\n /**\n * Constructor for the `GetNlgInsightsProps`.\n *\n * @param sisenseContextService - Sisense context service\n * @param themeService - Theme service\n * @param aiService - AI service\n */\n constructor(\n /**\n * Sisense context service\n *\n * @category Constructor\n */\n public sisenseContextService: SisenseContextService,\n /**\n * Theme service\n *\n * @category Constructor\n */\n public themeService: ThemeService,\n /**\n * AI service\n *\n * @category Constructor\n */\n public aiService: AiService,\n ) {\n this.componentAdapter = new ComponentAdapter(\n () => this.createPreactComponent(),\n [\n createSisenseContextConnector(this.sisenseContextService),\n createThemeContextConnector(this.themeService),\n createAiContextConnector(this.aiService),\n ],\n );\n }\n\n /**\n * @internal\n */\n ngAfterViewInit() {\n this.componentAdapter.render(this.preactRef.nativeElement);\n }\n\n /**\n * @internal\n */\n ngOnChanges() {\n if (this.preactRef) {\n this.componentAdapter.render(this.preactRef.nativeElement);\n }\n }\n\n private createPreactComponent() {\n const props = {\n dataSource: this.dataSource,\n dimensions: this.dimensions,\n measures: this.measures,\n filters: this.filters,\n verbosity: this.verbosity,\n };\n\n return createElement(GetNlgInsights, props);\n }\n\n /**\n * @internal\n */\n ngOnDestroy() {\n this.componentAdapter.destroy();\n }\n}\n","/* eslint-disable import/no-extraneous-dependencies */\nimport { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SdkUiModule } from '@sisense/sdk-ui-angular';\nimport { ChatbotComponent, GetNlgInsightsComponent } from './components';\n\n/**\n * SDK AI Module, which is a container for generative AI components and services.\n *\n * @example\n * Example of importing {@link SdkAiModule} and injecting {@link AiContextConfig} into your application,\n * along with importing dependency {@link SdkUiModule} and injecting {@link SisenseContextConfig} to connect to a Sisense instance:\n *\n * ```ts\n * import { SdkUiModule, SisenseContextConfig } from '@sisense/sdk-ui-angular';\n * import { SdkAiModule, AI_CONTEXT_CONFIG_TOKEN, AiContextConfig } from '@sisense/sdk-ui-angular/ai';\n *\n * const AI_CONTEXT_CONFIG: AiContextConfig = {\n * volatile: true,\n * };\n * const SISENSE_CONTEXT_CONFIG: SisenseContextConfig = {\n * url: \"<instance url>\", // replace with the URL of your Sisense instance\n * token: \"<api token>\", // replace with the API token of your user account\n * defaultDataSource: DM.DataSource,\n * };\n *\n * @NgModule({\n * imports: [\n * BrowserModule,\n * SdkUiModule,\n * SdkAiModule,\n * ],\n * declarations: [AppComponent],\n * providers: [\n * { provide: AI_CONTEXT_CONFIG_TOKEN, useValue: AI_CONTEXT_CONFIG },\n * { provide: SISENSE_CONTEXT_CONFIG_TOKEN, useValue: SISENSE_CONTEXT_CONFIG },\n * ],\n * bootstrap: [AppComponent],\n * })\n * ```\n *\n * @group Generative AI\n * @beta\n */\n@NgModule({\n declarations: [ChatbotComponent, GetNlgInsightsComponent],\n imports: [CommonModule, SdkUiModule],\n exports: [ChatbotComponent, GetNlgInsightsComponent],\n providers: [],\n})\nexport class SdkAiModule {\n constructor() {\n console.log('SdkAiModule loaded');\n }\n}\n","// This file re-exports common types/utils from @sisense/sdk-ui-preact/ai\n\n// Re-exports types from @sisense/sdk-ui-preact/ai\nexport type {\n ChatConfig,\n GetQueryRecommendationsParams,\n QueryRecommendation,\n GetNlqResultParams,\n} from '@sisense/sdk-ui-preact/ai';\n","/**\n * Public API Surface of @sisense/sdk-ui-angular/ai\n */\n\nexport * from './lib/sdk-ai.module';\nexport * from './lib/components';\nexport * from './lib/services';\nexport * from './lib/sdk-ui-core-exports';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2.AiService"],"mappings":"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"}