@luzmo/analytics-components-kit 1.0.1-alpha.84 → 1.0.1-alpha.86

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 (39) hide show
  1. package/angular/README.md +1 -0
  2. package/angular/components/ai-interaction-textarea.component.ts +2 -0
  3. package/angular/components/dataset-icon.component.ts +21 -0
  4. package/angular/components/dataset-selector-row.component.ts +2 -0
  5. package/angular/components/droppable-slot.component.ts +2 -2
  6. package/angular/esm/components/ai-interaction-textarea.component.d.ts +2 -1
  7. package/angular/esm/components/ai-interaction-textarea.component.js +7 -2
  8. package/angular/esm/components/dataset-icon.component.d.ts +9 -0
  9. package/angular/esm/components/dataset-icon.component.js +36 -0
  10. package/angular/esm/components/dataset-selector-row.component.d.ts +2 -1
  11. package/angular/esm/components/dataset-selector-row.component.js +7 -2
  12. package/angular/esm/components/droppable-slot.component.d.ts +2 -2
  13. package/angular/esm/index.d.ts +3 -1
  14. package/angular/esm/index.js +3 -0
  15. package/angular/esm/types.d.ts +15 -1
  16. package/angular/index.ts +3 -0
  17. package/angular/types.ts +15 -2
  18. package/components/ai-interaction-textarea/ai-interaction-textarea.d.ts +7 -1
  19. package/components/ai-interaction-textarea/index.cjs +54 -0
  20. package/components/ai-interaction-textarea/index.d.ts +1 -1
  21. package/components/ai-interaction-textarea/index.js +165 -0
  22. package/components/dataset-icon/dataset-icon.d.ts +45 -0
  23. package/components/dataset-icon/index.cjs +60 -0
  24. package/components/dataset-icon/index.d.ts +7 -0
  25. package/components/dataset-icon/index.js +167 -0
  26. package/components/dataset-selector-list/dataset-selector-list.d.ts +1 -0
  27. package/components/dataset-selector-list/index.cjs +15 -13
  28. package/components/dataset-selector-list/index.js +42 -46
  29. package/components/dataset-selector-row/dataset-selector-row.d.ts +8 -0
  30. package/components/dataset-selector-row/index.cjs +82 -0
  31. package/components/dataset-selector-row/index.d.ts +1 -1
  32. package/components/dataset-selector-row/index.js +215 -0
  33. package/components/droppable-slot/droppable-slot.d.ts +2 -2
  34. package/components/index.cjs +1 -60
  35. package/components/index.js +104 -281
  36. package/custom-elements.json +156 -2
  37. package/index.d.ts +2 -0
  38. package/package.json +10 -5
  39. package/types.d.ts +15 -1
package/angular/README.md CHANGED
@@ -26,6 +26,7 @@ bootstrapApplication(AiChatMessageAssistantComponent);
26
26
  - `AiChatMessageUserComponent` → <luzmo-ai-chat-message-user>
27
27
  - `AiChatMessagesContainerComponent` → <luzmo-ai-chat-messages-container>
28
28
  - `AiInteractionTextareaComponent` → <luzmo-ai-interaction-textarea>
29
+ - `DatasetIconComponent` → <luzmo-dataset-icon>
29
30
  - `DatasetSelectorListComponent` → <luzmo-dataset-selector-list>
30
31
  - `DatasetSelectorRowComponent` → <luzmo-dataset-selector-row>
31
32
  - `DisplaySettingsComponent` → <luzmo-display-settings>
@@ -13,6 +13,7 @@ import type { Dataset } from '../types';
13
13
  [attr.api-url]="apiUrl"
14
14
  [attr.app-server]="appServer"
15
15
  [attr.flag-opendata]="flagOpendata"
16
+ [attr.disabled]="disabled"
16
17
  (prompt-submitted)="promptSubmitted.emit($event)">
17
18
  <ng-content></ng-content>
18
19
  </luzmo-ai-interaction-textarea>`
@@ -25,5 +26,6 @@ export class AiInteractionTextareaComponent {
25
26
  @Input() apiUrl?: string;
26
27
  @Input() appServer?: string;
27
28
  @Input() flagOpendata?: boolean;
29
+ @Input() disabled?: boolean;
28
30
  @Output() promptSubmitted = new EventEmitter<CustomEvent>();
29
31
  }
@@ -0,0 +1,21 @@
1
+ import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';
2
+ import type { DatasetIcon } from '../types';
3
+
4
+ @Component({
5
+ selector: 'luzmo-dataset-icon',
6
+ standalone: true,
7
+ changeDetection: ChangeDetectionStrategy.OnPush,
8
+ template: `<luzmo-dataset-icon
9
+ [attr.dataset]="dataset"
10
+ [attr.size]="size"
11
+ [attr.app-url]="appUrl"
12
+ >
13
+ <ng-content></ng-content>
14
+ </luzmo-dataset-icon>`
15
+ })
16
+ export class DatasetIconComponent {
17
+ @Input() dataset?: DatasetIcon;
18
+ @Input() size?: '16px' | '24px' | '32px' | '48px' | '64px';
19
+ @Input() appUrl?: string;
20
+
21
+ }
@@ -13,6 +13,7 @@ import type { Dataset } from '../types';
13
13
  [attr.api-url]="apiUrl"
14
14
  [attr.app-server]="appServer"
15
15
  [attr.flag-opendata]="flagOpendata"
16
+ [attr.disabled]="disabled"
16
17
  (dataset-selected)="datasetSelected.emit($event)"
17
18
  (dataset-removed)="datasetRemoved.emit($event)">
18
19
  <ng-content></ng-content>
@@ -26,6 +27,7 @@ export class DatasetSelectorRowComponent {
26
27
  @Input() apiUrl?: string;
27
28
  @Input() appServer?: string;
28
29
  @Input() flagOpendata?: boolean;
30
+ @Input() disabled?: boolean;
29
31
  @Output() datasetSelected = new EventEmitter<CustomEvent>();
30
32
  @Output() datasetRemoved = new EventEmitter<CustomEvent>();
31
33
  }
@@ -1,5 +1,5 @@
1
1
  import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';
2
- import type { ItemType, SlotName, VizItemSlots, Placement } from '../types';
2
+ import type { VizItemType, SlotName, VizItemSlots, Placement } from '../types';
3
3
 
4
4
  @Component({
5
5
  selector: 'luzmo-droppable-slot',
@@ -29,7 +29,7 @@ import type { ItemType, SlotName, VizItemSlots, Placement } from '../types';
29
29
  </luzmo-droppable-slot>`
30
30
  })
31
31
  export class DroppableSlotComponent {
32
- @Input() itemType?: ItemType;
32
+ @Input() itemType?: VizItemType;
33
33
  @Input() slotName?: SlotName;
34
34
  @Input() slotConfiguration?: any;
35
35
  @Input() slotsContents?: VizItemSlots;
@@ -9,7 +9,8 @@ export declare class AiInteractionTextareaComponent {
9
9
  apiUrl?: string;
10
10
  appServer?: string;
11
11
  flagOpendata?: boolean;
12
+ disabled?: boolean;
12
13
  promptSubmitted: EventEmitter<CustomEvent<any>>;
13
14
  static ɵfac: i0.ɵɵFactoryDeclaration<AiInteractionTextareaComponent, never>;
14
- static ɵcmp: i0.ɵɵComponentDeclaration<AiInteractionTextareaComponent, "luzmo-ai-interaction-textarea", never, { "placeholder": { "alias": "placeholder"; "required": false; }; "selectedDatasets": { "alias": "selectedDatasets"; "required": false; }; "authKey": { "alias": "authKey"; "required": false; }; "authToken": { "alias": "authToken"; "required": false; }; "apiUrl": { "alias": "apiUrl"; "required": false; }; "appServer": { "alias": "appServer"; "required": false; }; "flagOpendata": { "alias": "flagOpendata"; "required": false; }; }, { "promptSubmitted": "promptSubmitted"; }, never, ["*"], true, never>;
15
+ static ɵcmp: i0.ɵɵComponentDeclaration<AiInteractionTextareaComponent, "luzmo-ai-interaction-textarea", never, { "placeholder": { "alias": "placeholder"; "required": false; }; "selectedDatasets": { "alias": "selectedDatasets"; "required": false; }; "authKey": { "alias": "authKey"; "required": false; }; "authToken": { "alias": "authToken"; "required": false; }; "apiUrl": { "alias": "apiUrl"; "required": false; }; "appServer": { "alias": "appServer"; "required": false; }; "flagOpendata": { "alias": "flagOpendata"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, { "promptSubmitted": "promptSubmitted"; }, never, ["*"], true, never>;
15
16
  }
@@ -8,9 +8,10 @@ export class AiInteractionTextareaComponent {
8
8
  apiUrl;
9
9
  appServer;
10
10
  flagOpendata;
11
+ disabled;
11
12
  promptSubmitted = new EventEmitter();
12
13
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: AiInteractionTextareaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
13
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.2.3", type: AiInteractionTextareaComponent, isStandalone: true, selector: "luzmo-ai-interaction-textarea", inputs: { placeholder: "placeholder", selectedDatasets: "selectedDatasets", authKey: "authKey", authToken: "authToken", apiUrl: "apiUrl", appServer: "appServer", flagOpendata: "flagOpendata" }, outputs: { promptSubmitted: "promptSubmitted" }, ngImport: i0, template: `<luzmo-ai-interaction-textarea
14
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.2.3", type: AiInteractionTextareaComponent, isStandalone: true, selector: "luzmo-ai-interaction-textarea", inputs: { placeholder: "placeholder", selectedDatasets: "selectedDatasets", authKey: "authKey", authToken: "authToken", apiUrl: "apiUrl", appServer: "appServer", flagOpendata: "flagOpendata", disabled: "disabled" }, outputs: { promptSubmitted: "promptSubmitted" }, ngImport: i0, template: `<luzmo-ai-interaction-textarea
14
15
  [attr.placeholder]="placeholder"
15
16
  [attr.selectedDatasets]="selectedDatasets"
16
17
  [attr.auth-key]="authKey"
@@ -18,9 +19,10 @@ export class AiInteractionTextareaComponent {
18
19
  [attr.api-url]="apiUrl"
19
20
  [attr.app-server]="appServer"
20
21
  [attr.flag-opendata]="flagOpendata"
22
+ [attr.disabled]="disabled"
21
23
  (prompt-submitted)="promptSubmitted.emit($event)">
22
24
  <ng-content></ng-content>
23
- </luzmo-ai-interaction-textarea>`, isInline: true, dependencies: [{ kind: "component", type: AiInteractionTextareaComponent, selector: "luzmo-ai-interaction-textarea", inputs: ["placeholder", "selectedDatasets", "authKey", "authToken", "apiUrl", "appServer", "flagOpendata"], outputs: ["promptSubmitted"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
25
+ </luzmo-ai-interaction-textarea>`, isInline: true, dependencies: [{ kind: "component", type: AiInteractionTextareaComponent, selector: "luzmo-ai-interaction-textarea", inputs: ["placeholder", "selectedDatasets", "authKey", "authToken", "apiUrl", "appServer", "flagOpendata", "disabled"], outputs: ["promptSubmitted"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
24
26
  }
25
27
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: AiInteractionTextareaComponent, decorators: [{
26
28
  type: Component,
@@ -36,6 +38,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImpor
36
38
  [attr.api-url]="apiUrl"
37
39
  [attr.app-server]="appServer"
38
40
  [attr.flag-opendata]="flagOpendata"
41
+ [attr.disabled]="disabled"
39
42
  (prompt-submitted)="promptSubmitted.emit($event)">
40
43
  <ng-content></ng-content>
41
44
  </luzmo-ai-interaction-textarea>`
@@ -54,6 +57,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImpor
54
57
  type: Input
55
58
  }], flagOpendata: [{
56
59
  type: Input
60
+ }], disabled: [{
61
+ type: Input
57
62
  }], promptSubmitted: [{
58
63
  type: Output
59
64
  }] } });
@@ -0,0 +1,9 @@
1
+ import type { DatasetIcon } from '../types';
2
+ import * as i0 from "@angular/core";
3
+ export declare class DatasetIconComponent {
4
+ dataset?: DatasetIcon;
5
+ size?: '16px' | '24px' | '32px' | '48px' | '64px';
6
+ appUrl?: string;
7
+ static ɵfac: i0.ɵɵFactoryDeclaration<DatasetIconComponent, never>;
8
+ static ɵcmp: i0.ɵɵComponentDeclaration<DatasetIconComponent, "luzmo-dataset-icon", never, { "dataset": { "alias": "dataset"; "required": false; }; "size": { "alias": "size"; "required": false; }; "appUrl": { "alias": "appUrl"; "required": false; }; }, {}, never, ["*"], true, never>;
9
+ }
@@ -0,0 +1,36 @@
1
+ import { Component, Input, ChangeDetectionStrategy } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class DatasetIconComponent {
4
+ dataset;
5
+ size;
6
+ appUrl;
7
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: DatasetIconComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
8
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.2.3", type: DatasetIconComponent, isStandalone: true, selector: "luzmo-dataset-icon", inputs: { dataset: "dataset", size: "size", appUrl: "appUrl" }, ngImport: i0, template: `<luzmo-dataset-icon
9
+ [attr.dataset]="dataset"
10
+ [attr.size]="size"
11
+ [attr.app-url]="appUrl"
12
+ >
13
+ <ng-content></ng-content>
14
+ </luzmo-dataset-icon>`, isInline: true, dependencies: [{ kind: "component", type: DatasetIconComponent, selector: "luzmo-dataset-icon", inputs: ["dataset", "size", "appUrl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
15
+ }
16
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: DatasetIconComponent, decorators: [{
17
+ type: Component,
18
+ args: [{
19
+ selector: 'luzmo-dataset-icon',
20
+ standalone: true,
21
+ changeDetection: ChangeDetectionStrategy.OnPush,
22
+ template: `<luzmo-dataset-icon
23
+ [attr.dataset]="dataset"
24
+ [attr.size]="size"
25
+ [attr.app-url]="appUrl"
26
+ >
27
+ <ng-content></ng-content>
28
+ </luzmo-dataset-icon>`
29
+ }]
30
+ }], propDecorators: { dataset: [{
31
+ type: Input
32
+ }], size: [{
33
+ type: Input
34
+ }], appUrl: [{
35
+ type: Input
36
+ }] } });
@@ -9,8 +9,9 @@ export declare class DatasetSelectorRowComponent {
9
9
  apiUrl?: string;
10
10
  appServer?: string;
11
11
  flagOpendata?: boolean;
12
+ disabled?: boolean;
12
13
  datasetSelected: EventEmitter<CustomEvent<any>>;
13
14
  datasetRemoved: EventEmitter<CustomEvent<any>>;
14
15
  static ɵfac: i0.ɵɵFactoryDeclaration<DatasetSelectorRowComponent, never>;
15
- static ɵcmp: i0.ɵɵComponentDeclaration<DatasetSelectorRowComponent, "luzmo-dataset-selector-row", never, { "selectedDatasets": { "alias": "selectedDatasets"; "required": false; }; "buttonLabel": { "alias": "buttonLabel"; "required": false; }; "authKey": { "alias": "authKey"; "required": false; }; "authToken": { "alias": "authToken"; "required": false; }; "apiUrl": { "alias": "apiUrl"; "required": false; }; "appServer": { "alias": "appServer"; "required": false; }; "flagOpendata": { "alias": "flagOpendata"; "required": false; }; }, { "datasetSelected": "datasetSelected"; "datasetRemoved": "datasetRemoved"; }, never, ["*"], true, never>;
16
+ static ɵcmp: i0.ɵɵComponentDeclaration<DatasetSelectorRowComponent, "luzmo-dataset-selector-row", never, { "selectedDatasets": { "alias": "selectedDatasets"; "required": false; }; "buttonLabel": { "alias": "buttonLabel"; "required": false; }; "authKey": { "alias": "authKey"; "required": false; }; "authToken": { "alias": "authToken"; "required": false; }; "apiUrl": { "alias": "apiUrl"; "required": false; }; "appServer": { "alias": "appServer"; "required": false; }; "flagOpendata": { "alias": "flagOpendata"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, { "datasetSelected": "datasetSelected"; "datasetRemoved": "datasetRemoved"; }, never, ["*"], true, never>;
16
17
  }
@@ -8,10 +8,11 @@ export class DatasetSelectorRowComponent {
8
8
  apiUrl;
9
9
  appServer;
10
10
  flagOpendata;
11
+ disabled;
11
12
  datasetSelected = new EventEmitter();
12
13
  datasetRemoved = new EventEmitter();
13
14
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: DatasetSelectorRowComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
14
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.2.3", type: DatasetSelectorRowComponent, isStandalone: true, selector: "luzmo-dataset-selector-row", inputs: { selectedDatasets: "selectedDatasets", buttonLabel: "buttonLabel", authKey: "authKey", authToken: "authToken", apiUrl: "apiUrl", appServer: "appServer", flagOpendata: "flagOpendata" }, outputs: { datasetSelected: "datasetSelected", datasetRemoved: "datasetRemoved" }, ngImport: i0, template: `<luzmo-dataset-selector-row
15
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.2.3", type: DatasetSelectorRowComponent, isStandalone: true, selector: "luzmo-dataset-selector-row", inputs: { selectedDatasets: "selectedDatasets", buttonLabel: "buttonLabel", authKey: "authKey", authToken: "authToken", apiUrl: "apiUrl", appServer: "appServer", flagOpendata: "flagOpendata", disabled: "disabled" }, outputs: { datasetSelected: "datasetSelected", datasetRemoved: "datasetRemoved" }, ngImport: i0, template: `<luzmo-dataset-selector-row
15
16
  [attr.selectedDatasets]="selectedDatasets"
16
17
  [attr.button-label]="buttonLabel"
17
18
  [attr.auth-key]="authKey"
@@ -19,10 +20,11 @@ export class DatasetSelectorRowComponent {
19
20
  [attr.api-url]="apiUrl"
20
21
  [attr.app-server]="appServer"
21
22
  [attr.flag-opendata]="flagOpendata"
23
+ [attr.disabled]="disabled"
22
24
  (dataset-selected)="datasetSelected.emit($event)"
23
25
  (dataset-removed)="datasetRemoved.emit($event)">
24
26
  <ng-content></ng-content>
25
- </luzmo-dataset-selector-row>`, isInline: true, dependencies: [{ kind: "component", type: DatasetSelectorRowComponent, selector: "luzmo-dataset-selector-row", inputs: ["selectedDatasets", "buttonLabel", "authKey", "authToken", "apiUrl", "appServer", "flagOpendata"], outputs: ["datasetSelected", "datasetRemoved"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
27
+ </luzmo-dataset-selector-row>`, isInline: true, dependencies: [{ kind: "component", type: DatasetSelectorRowComponent, selector: "luzmo-dataset-selector-row", inputs: ["selectedDatasets", "buttonLabel", "authKey", "authToken", "apiUrl", "appServer", "flagOpendata", "disabled"], outputs: ["datasetSelected", "datasetRemoved"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
26
28
  }
27
29
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImport: i0, type: DatasetSelectorRowComponent, decorators: [{
28
30
  type: Component,
@@ -38,6 +40,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImpor
38
40
  [attr.api-url]="apiUrl"
39
41
  [attr.app-server]="appServer"
40
42
  [attr.flag-opendata]="flagOpendata"
43
+ [attr.disabled]="disabled"
41
44
  (dataset-selected)="datasetSelected.emit($event)"
42
45
  (dataset-removed)="datasetRemoved.emit($event)">
43
46
  <ng-content></ng-content>
@@ -57,6 +60,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.2.3", ngImpor
57
60
  type: Input
58
61
  }], flagOpendata: [{
59
62
  type: Input
63
+ }], disabled: [{
64
+ type: Input
60
65
  }], datasetSelected: [{
61
66
  type: Output
62
67
  }], datasetRemoved: [{
@@ -1,8 +1,8 @@
1
1
  import { EventEmitter } from '@angular/core';
2
- import type { ItemType, SlotName, VizItemSlots, Placement } from '../types';
2
+ import type { VizItemType, SlotName, VizItemSlots, Placement } from '../types';
3
3
  import * as i0 from "@angular/core";
4
4
  export declare class DroppableSlotComponent {
5
- itemType?: ItemType;
5
+ itemType?: VizItemType;
6
6
  slotName?: SlotName;
7
7
  slotConfiguration?: any;
8
8
  slotsContents?: VizItemSlots;
@@ -2,6 +2,7 @@ import { AiChatMessageAssistantComponent } from './components/ai-chat-message-as
2
2
  import { AiChatMessageUserComponent } from './components/ai-chat-message-user.component';
3
3
  import { AiChatMessagesContainerComponent } from './components/ai-chat-messages-container.component';
4
4
  import { AiInteractionTextareaComponent } from './components/ai-interaction-textarea.component';
5
+ import { DatasetIconComponent } from './components/dataset-icon.component';
5
6
  import { DatasetSelectorListComponent } from './components/dataset-selector-list.component';
6
7
  import { DatasetSelectorRowComponent } from './components/dataset-selector-row.component';
7
8
  import { DisplaySettingsComponent } from './components/display-settings.component';
@@ -35,6 +36,7 @@ export { AiChatMessageAssistantComponent } from './components/ai-chat-message-as
35
36
  export { AiChatMessageUserComponent } from './components/ai-chat-message-user.component';
36
37
  export { AiChatMessagesContainerComponent } from './components/ai-chat-messages-container.component';
37
38
  export { AiInteractionTextareaComponent } from './components/ai-interaction-textarea.component';
39
+ export { DatasetIconComponent } from './components/dataset-icon.component';
38
40
  export { DatasetSelectorListComponent } from './components/dataset-selector-list.component';
39
41
  export { DatasetSelectorRowComponent } from './components/dataset-selector-row.component';
40
42
  export { DisplaySettingsComponent } from './components/display-settings.component';
@@ -64,4 +66,4 @@ export { GridItemActionsMenuComponent } from './components/grid-item-actions-men
64
66
  export { SlotContentsPickerComponent } from './components/slot-contents-picker.component';
65
67
  export { SlotMenuComponent } from './components/slot-menu.component';
66
68
  export { SlotMenuListComponent } from './components/slot-menu-list.component';
67
- export declare const LUZMO_COMPONENTS: readonly [typeof AiChatMessageAssistantComponent, typeof AiChatMessageUserComponent, typeof AiChatMessagesContainerComponent, typeof AiInteractionTextareaComponent, typeof DatasetSelectorListComponent, typeof DatasetSelectorRowComponent, typeof DisplaySettingsComponent, typeof DisplaySettingsBinningComponent, typeof DisplaySettingsDatetimeComponent, typeof DisplaySettingsGrandTotalsComponent, typeof DisplaySettingsNumericComponent, typeof DisplaySettingsPeriodOverPeriodComponent, typeof DraggableDataItemComponent, typeof DraggableDataItemLevelComponent, typeof DroppableSlotComponent, typeof EditItemComponent, typeof EditOptionComponent, typeof EditOptionColorPickerComponent, typeof EditOptionColorRangeComponent, typeof FilterDataItemPickerComponent, typeof FilterExpressionPickerComponent, typeof FilterGroupComponent, typeof FilterItemComponent, typeof FilterParameterPickerComponent, typeof FilterValuePickerComponent, typeof FilterValuePickerDatetimeComponent, typeof FilterValuePickerHierarchyComponent, typeof FilterValuePickerNumericComponent, typeof GridComponent, typeof GridItemActionsMenuComponent, typeof SlotContentsPickerComponent, typeof SlotMenuComponent, typeof SlotMenuListComponent];
69
+ export declare const LUZMO_COMPONENTS: readonly [typeof AiChatMessageAssistantComponent, typeof AiChatMessageUserComponent, typeof AiChatMessagesContainerComponent, typeof AiInteractionTextareaComponent, typeof DatasetIconComponent, typeof DatasetSelectorListComponent, typeof DatasetSelectorRowComponent, typeof DisplaySettingsComponent, typeof DisplaySettingsBinningComponent, typeof DisplaySettingsDatetimeComponent, typeof DisplaySettingsGrandTotalsComponent, typeof DisplaySettingsNumericComponent, typeof DisplaySettingsPeriodOverPeriodComponent, typeof DraggableDataItemComponent, typeof DraggableDataItemLevelComponent, typeof DroppableSlotComponent, typeof EditItemComponent, typeof EditOptionComponent, typeof EditOptionColorPickerComponent, typeof EditOptionColorRangeComponent, typeof FilterDataItemPickerComponent, typeof FilterExpressionPickerComponent, typeof FilterGroupComponent, typeof FilterItemComponent, typeof FilterParameterPickerComponent, typeof FilterValuePickerComponent, typeof FilterValuePickerDatetimeComponent, typeof FilterValuePickerHierarchyComponent, typeof FilterValuePickerNumericComponent, typeof GridComponent, typeof GridItemActionsMenuComponent, typeof SlotContentsPickerComponent, typeof SlotMenuComponent, typeof SlotMenuListComponent];
@@ -2,6 +2,7 @@ import { AiChatMessageAssistantComponent } from './components/ai-chat-message-as
2
2
  import { AiChatMessageUserComponent } from './components/ai-chat-message-user.component';
3
3
  import { AiChatMessagesContainerComponent } from './components/ai-chat-messages-container.component';
4
4
  import { AiInteractionTextareaComponent } from './components/ai-interaction-textarea.component';
5
+ import { DatasetIconComponent } from './components/dataset-icon.component';
5
6
  import { DatasetSelectorListComponent } from './components/dataset-selector-list.component';
6
7
  import { DatasetSelectorRowComponent } from './components/dataset-selector-row.component';
7
8
  import { DisplaySettingsComponent } from './components/display-settings.component';
@@ -35,6 +36,7 @@ export { AiChatMessageAssistantComponent } from './components/ai-chat-message-as
35
36
  export { AiChatMessageUserComponent } from './components/ai-chat-message-user.component';
36
37
  export { AiChatMessagesContainerComponent } from './components/ai-chat-messages-container.component';
37
38
  export { AiInteractionTextareaComponent } from './components/ai-interaction-textarea.component';
39
+ export { DatasetIconComponent } from './components/dataset-icon.component';
38
40
  export { DatasetSelectorListComponent } from './components/dataset-selector-list.component';
39
41
  export { DatasetSelectorRowComponent } from './components/dataset-selector-row.component';
40
42
  export { DisplaySettingsComponent } from './components/display-settings.component';
@@ -69,6 +71,7 @@ export const LUZMO_COMPONENTS = [
69
71
  AiChatMessageUserComponent,
70
72
  AiChatMessagesContainerComponent,
71
73
  AiInteractionTextareaComponent,
74
+ DatasetIconComponent,
72
75
  DatasetSelectorListComponent,
73
76
  DatasetSelectorRowComponent,
74
77
  DisplaySettingsComponent,
@@ -7,7 +7,7 @@ import { VizItemType } from '@luzmo/dashboard-contents-types';
7
7
  import { IconDefinition } from '@luzmo/icons';
8
8
  import { Placement } from '@luzmo/lucero';
9
9
  import { TemplateResult } from 'lit';
10
- export type { Column, ColumnSubtype, ColumnType, GenericSlotContent, ItemType, SlotName, VizItemSlots } from '@luzmo/dashboard-contents-types';
10
+ export type { Column, ColumnSubtype, ColumnType, GenericSlotContent, SlotName, VizItemSlots, VizItemType } from '@luzmo/dashboard-contents-types';
11
11
  export declare enum PeriodOverPeriodCondition {
12
12
  HasDatetimeColumnAndNoComparisonFilters = "hasDatetimeColumnAndNoComparisonFilters",
13
13
  NoDatetimeColumnAndNoComparisonFilters = "noDatetimeColumnAndNoComparisonFilters",
@@ -64,6 +64,20 @@ export type DataItem = {
64
64
  lowestLevel?: string;
65
65
  };
66
66
  export type GridItemRenderer = (item: GridItemData, index: number) => TemplateResult;
67
+ /**
68
+ * Dataset icon interface matching the Angular component
69
+ */
70
+ export interface DatasetIcon {
71
+ subtype: string;
72
+ account?: {
73
+ plugin?: {
74
+ thumbnails?: {
75
+ url: string;
76
+ size: string;
77
+ }[];
78
+ };
79
+ };
80
+ }
67
81
  export type { ElementSize, Placement } from '@luzmo/lucero';
68
82
  export interface Dataset {
69
83
  id: string;
package/angular/index.ts CHANGED
@@ -2,6 +2,7 @@ import { AiChatMessageAssistantComponent } from './components/ai-chat-message-as
2
2
  import { AiChatMessageUserComponent } from './components/ai-chat-message-user.component';
3
3
  import { AiChatMessagesContainerComponent } from './components/ai-chat-messages-container.component';
4
4
  import { AiInteractionTextareaComponent } from './components/ai-interaction-textarea.component';
5
+ import { DatasetIconComponent } from './components/dataset-icon.component';
5
6
  import { DatasetSelectorListComponent } from './components/dataset-selector-list.component';
6
7
  import { DatasetSelectorRowComponent } from './components/dataset-selector-row.component';
7
8
  import { DisplaySettingsComponent } from './components/display-settings.component';
@@ -36,6 +37,7 @@ export { AiChatMessageAssistantComponent } from './components/ai-chat-message-as
36
37
  export { AiChatMessageUserComponent } from './components/ai-chat-message-user.component';
37
38
  export { AiChatMessagesContainerComponent } from './components/ai-chat-messages-container.component';
38
39
  export { AiInteractionTextareaComponent } from './components/ai-interaction-textarea.component';
40
+ export { DatasetIconComponent } from './components/dataset-icon.component';
39
41
  export { DatasetSelectorListComponent } from './components/dataset-selector-list.component';
40
42
  export { DatasetSelectorRowComponent } from './components/dataset-selector-row.component';
41
43
  export { DisplaySettingsComponent } from './components/display-settings.component';
@@ -71,6 +73,7 @@ export const LUZMO_COMPONENTS = [
71
73
  AiChatMessageUserComponent,
72
74
  AiChatMessagesContainerComponent,
73
75
  AiInteractionTextareaComponent,
76
+ DatasetIconComponent,
74
77
  DatasetSelectorListComponent,
75
78
  DatasetSelectorRowComponent,
76
79
  DisplaySettingsComponent,
package/angular/types.ts CHANGED
@@ -14,9 +14,9 @@ export type {
14
14
  ColumnSubtype,
15
15
  ColumnType,
16
16
  GenericSlotContent,
17
- ItemType,
18
17
  SlotName,
19
- VizItemSlots
18
+ VizItemSlots,
19
+ VizItemType
20
20
  } from '@luzmo/dashboard-contents-types';
21
21
 
22
22
  export enum PeriodOverPeriodCondition {
@@ -91,6 +91,19 @@ export type GridItemRenderer = (
91
91
  index: number
92
92
  ) => TemplateResult;
93
93
 
94
+ /**
95
+ * Dataset icon interface matching the Angular component
96
+ */
97
+
98
+ export interface DatasetIcon {
99
+ subtype: string;
100
+ account?: {
101
+ plugin?: {
102
+ thumbnails?: { url: string; size: string }[];
103
+ };
104
+ };
105
+ }
106
+
94
107
  export type { ElementSize, Placement } from '@luzmo/lucero';
95
108
 
96
109
  // Dataset interface for dataset selector components
@@ -1,11 +1,13 @@
1
1
  import { LitElement, TemplateResult } from 'lit';
2
2
  import { Dataset } from '../../types';
3
- import '../dataset-selector-row/index';
3
+ import '../dataset-selector-row';
4
4
  /**
5
5
  * @element luzmo-ai-interaction-textarea
6
6
  * @summary A textarea component for AI interaction with dataset selection
7
7
  * @fires prompt-submitted - Fired when a prompt is submitted with selected datasets
8
8
  *
9
+ * @attr {boolean} disabled - When true, disables the entire component (opacity 60%, no interactions)
10
+ *
9
11
  * @cssprop --luzmo-ai-interaction-textarea-background-color - Override for background color of the component (client customization)
10
12
  * @cssprop --ai-interaction-textarea-background-color - Background color of the component
11
13
  * @cssprop --ai-interaction-textarea-border-color - Border color of the component
@@ -63,6 +65,10 @@ export declare class LuzmoAiInteractionTextarea extends LitElement {
63
65
  * When true, restricts results to public datasets (opendata parity)
64
66
  */
65
67
  flagOpendata: boolean;
68
+ /**
69
+ * When true, disables the entire component (sets opacity to 60% and prevents all interactions)
70
+ */
71
+ disabled: boolean;
66
72
  private _promptValue;
67
73
  private _isPromptValid;
68
74
  private get _buttonDisabled();
@@ -0,0 +1,54 @@
1
+ /*! * A kit of modern Luzmo Web Components for analytics in your web application.
2
+ *
3
+ * Copyright © 2025 Luzmo
4
+ * All rights reserved.
5
+ * Luzmo web components (“Luzmo Web Components”)
6
+ * must be used according to the Luzmo Terms of Service.
7
+ * This license allows users with a current active Luzmo account
8
+ * to use the Luzmo Web Components. This license terminates
9
+ * automatically if a user no longer has an active Luzmo account.
10
+ * Please view the Luzmo Terms of Service at: https://www.luzmo.com/information-pages/terms-of-use.
11
+ *
12
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
13
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
15
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
16
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
17
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
18
+ * SOFTWARE.
19
+ * */
20
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("@lit/localize"),u=require("@luzmo/icons"),l=require("lit"),o=require("lit/decorators.js"),p=require("lit/directives/class-map.js");require("../dataset-selector-row/index.cjs");const m=":host{box-sizing:border-box;display:flex;flex-direction:column;background-color:var(--luzmo-ai-interaction-textarea-background-color, var(--ai-interaction-textarea-background-color));border:1px solid var(--luzmo-ai-interaction-textarea-border-color, var(--ai-interaction-textarea-border-color));border-radius:var(--luzmo-ai-interaction-textarea-border-radius, var(--ai-interaction-textarea-border-radius));padding:var(--luzmo-ai-interaction-textarea-padding, var(--ai-interaction-textarea-padding));gap:var(--luzmo-ai-interaction-textarea-gap, var(--ai-interaction-textarea-gap));font-family:var(--luzmo-ai-interaction-textarea-font-family, var(--ai-interaction-textarea-font-family));font-size:var(--luzmo-ai-interaction-textarea-font-size, var(--ai-interaction-textarea-font-size))}:host:has(textarea:focus){border-color:var(--luzmo-ai-interaction-textarea-focus-border-color, var(--ai-interaction-textarea-focus-border-color));box-shadow:var(--luzmo-ai-interaction-textarea-focus-box-shadow, var(--ai-interaction-textarea-focus-box-shadow))}:host .content-wrapper{display:flex;flex-direction:column;gap:var(--luzmo-ai-interaction-textarea-gap, var(--ai-interaction-textarea-gap))}:host .content-wrapper.disabled{opacity:.6;pointer-events:none;cursor:not-allowed}:host .content-wrapper.disabled *{pointer-events:none}:host textarea{background-color:var(--luzmo-ai-interaction-textarea-textarea-background, var(--ai-interaction-textarea-textarea-background));border:none;resize:none;outline:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;vertical-align:middle;padding:0;min-height:3rem;color:var(--luzmo-ai-interaction-textarea-textarea-color, var(--ai-interaction-textarea-textarea-color));font-family:var(--luzmo-ai-interaction-textarea-font-family, var(--ai-interaction-textarea-font-family));font-size:var(--luzmo-ai-interaction-textarea-font-size, var(--ai-interaction-textarea-font-size));line-height:1.5}:host textarea::placeholder{color:var(--luzmo-ai-interaction-textarea-textarea-placeholder-color, var(--ai-interaction-textarea-textarea-placeholder-color))}:host .button-container{text-align:var(--luzmo-ai-interaction-textarea-button-container-text-align, var(--ai-interaction-textarea-button-container-text-align))}:host .button-container button{padding:var(--luzmo-ai-interaction-textarea-button-padding, var(--ai-interaction-textarea-button-padding));min-width:var(--luzmo-ai-interaction-textarea-button-min-width, var(--ai-interaction-textarea-button-min-width));min-height:var(--luzmo-ai-interaction-textarea-button-min-height, var(--ai-interaction-textarea-button-min-height));border:none;border-radius:var(--luzmo-ai-interaction-textarea-button-border-radius, var(--ai-interaction-textarea-button-border-radius));font-size:var(--luzmo-ai-interaction-textarea-button-font-size, var(--ai-interaction-textarea-button-font-size));cursor:pointer;display:inline-flex;align-items:center;justify-content:center;transition:all .15s ease}:host .button-container button:disabled{opacity:.6;cursor:not-allowed}:host .button-container button.disabled{opacity:.6;cursor:not-allowed}:host .button-container button svg{display:flex;align-items:center;justify-content:center}:host .button-container button.btn-primary{background-color:var(--luzmo-ai-interaction-textarea-button-background-color, var(--ai-interaction-textarea-button-background-color));color:var(--luzmo-ai-interaction-textarea-button-color, var(--ai-interaction-textarea-button-color))}:host .button-container button.btn-primary:hover:not(:disabled):not(.disabled){background-color:var(--luzmo-ai-interaction-textarea-button-background-color-hover, var(--ai-interaction-textarea-button-background-color-hover))}:host .button-container button.btn-primary:disabled,:host .button-container button.btn-primary.disabled{background-color:var(--luzmo-ai-interaction-textarea-button-background-color-disabled, var(--ai-interaction-textarea-button-background-color-disabled));opacity:.6}:host{--ai-interaction-textarea-background-color: var(--luzmo-background-color-alt-2);--ai-interaction-textarea-border-color: var(--luzmo-border-color);--ai-interaction-textarea-border-radius: .5rem;--ai-interaction-textarea-padding: .75rem;--ai-interaction-textarea-gap: 1rem;--ai-interaction-textarea-focus-border-color: var(--luzmo-primary);--ai-interaction-textarea-focus-box-shadow: 0 0 1rem 0 var(--luzmo-primary-50);--ai-interaction-textarea-font-family: var(--luzmo-font-family);--ai-interaction-textarea-font-size: .875rem;--ai-interaction-textarea-textarea-background: transparent;--ai-interaction-textarea-textarea-color: var(--luzmo-font-color);--ai-interaction-textarea-textarea-placeholder-color: var(--luzmo-font-color-extra-dimmed);--ai-interaction-textarea-button-container-text-align: right;--ai-interaction-textarea-button-padding: 0;--ai-interaction-textarea-button-min-width: 2rem;--ai-interaction-textarea-button-min-height: 1.875rem;--ai-interaction-textarea-button-border-radius: .5rem;--ai-interaction-textarea-button-font-size: 1rem;--ai-interaction-textarea-button-background-color: var(--luzmo-primary);--ai-interaction-textarea-button-background-color-hover: var(--luzmo-primary-hover);--ai-interaction-textarea-button-background-color-disabled: var(--luzmo-primary);--ai-interaction-textarea-button-color: var(--luzmo-primary-inverse-color)}";var b=Object.defineProperty,h=Object.getOwnPropertyDescriptor,e=(n,t,a,r)=>{for(var i=r>1?void 0:r?h(t,a):t,s=n.length-1,c;s>=0;s--)(c=n[s])&&(i=(r?c(t,a,i):c(i))||i);return r&&i&&b(t,a,i),i};exports.LuzmoAiInteractionTextarea=class extends l.LitElement{constructor(){super(...arguments),this.placeholder="Type your prompt here...",this.selectedDatasets=[],this.authKey="",this.authToken="",this.apiUrl="https://api.luzmo.com",this.appServer="https://app.luzmo.com",this.flagOpendata=!1,this.disabled=!1,this._promptValue="",this._isPromptValid=!1}get _buttonDisabled(){return this.disabled||this.selectedDatasets.length===0||!this._isPromptValid}_autoResizeTextarea(t){t.style.height="auto";const a=2*1.5*16,r=8*1.5*16,i=Math.max(a,Math.min(t.scrollHeight,r));t.style.height=`${i}px`}_handlePromptInput(t){const a=t.target;this._promptValue=a.value,this._isPromptValid=a.value.trim().length>0,this._autoResizeTextarea(a),a.scrollTo({top:a.scrollHeight})}_handleKeyDown(t){t.key==="Enter"&&!t.shiftKey&&(t.preventDefault(),this._submitPrompt())}_submitPrompt(){if(this._buttonDisabled)return;const t=this._promptValue.trim();this.dispatchEvent(new CustomEvent("prompt-submitted",{detail:{prompt:t,selectedDatasets:this.selectedDatasets},bubbles:!0,composed:!0}))}_handleDatasetSelected(t){const a=t.detail;this.selectedDatasets.some(r=>r.id===a.id)||(this.selectedDatasets=[...this.selectedDatasets,a])}_handleDatasetRemoved(t){const a=t.detail;this.selectedDatasets=this.selectedDatasets.filter(r=>r.id!==a.id)}firstUpdated(){var a;const t=(a=this.shadowRoot)==null?void 0:a.querySelector("textarea");t&&this._autoResizeTextarea(t)}render(){const t={"content-wrapper":!0,disabled:this.disabled};return l.html`
21
+ <div class=${p.classMap(t)}>
22
+ <luzmo-dataset-selector-row
23
+ .selectedDatasets=${this.selectedDatasets}
24
+ auth-key=${this.authKey}
25
+ auth-token=${this.authToken}
26
+ api-url=${this.apiUrl}
27
+ app-server=${this.appServer}
28
+ ?flag-opendata=${this.flagOpendata}
29
+ ?disabled=${this.disabled}
30
+ @dataset-selected=${this._handleDatasetSelected}
31
+ @dataset-removed=${this._handleDatasetRemoved}
32
+ ></luzmo-dataset-selector-row>
33
+
34
+ <textarea
35
+ ?autofocus=${!this.disabled}
36
+ ?disabled=${this.disabled}
37
+ .placeholder=${this.placeholder}
38
+ .value=${this._promptValue}
39
+ @input=${this._handlePromptInput}
40
+ @keydown=${this._handleKeyDown}
41
+ rows="2"
42
+ ></textarea>
43
+
44
+ <div class="button-container">
45
+ <button
46
+ class="btn btn-primary"
47
+ ?disabled=${this._buttonDisabled}
48
+ @click=${this._submitPrompt}
49
+ >
50
+ ${u.luzmoIcon(u.luzmoArrowRight)}
51
+ </button>
52
+ </div>
53
+ </div>
54
+ `}};exports.LuzmoAiInteractionTextarea.styles=l.unsafeCSS(m);exports.LuzmoAiInteractionTextarea.tagName="luzmo-ai-interaction-textarea";e([o.property({type:String})],exports.LuzmoAiInteractionTextarea.prototype,"placeholder",2);e([o.property({type:Array})],exports.LuzmoAiInteractionTextarea.prototype,"selectedDatasets",2);e([o.property({type:String,attribute:"auth-key"})],exports.LuzmoAiInteractionTextarea.prototype,"authKey",2);e([o.property({type:String,attribute:"auth-token"})],exports.LuzmoAiInteractionTextarea.prototype,"authToken",2);e([o.property({type:String,attribute:"api-url"})],exports.LuzmoAiInteractionTextarea.prototype,"apiUrl",2);e([o.property({type:String,attribute:"app-server"})],exports.LuzmoAiInteractionTextarea.prototype,"appServer",2);e([o.property({type:Boolean,attribute:"flag-opendata"})],exports.LuzmoAiInteractionTextarea.prototype,"flagOpendata",2);e([o.property({type:Boolean,reflect:!0,attribute:"disabled"})],exports.LuzmoAiInteractionTextarea.prototype,"disabled",2);e([o.state()],exports.LuzmoAiInteractionTextarea.prototype,"_promptValue",2);e([o.state()],exports.LuzmoAiInteractionTextarea.prototype,"_isPromptValid",2);exports.LuzmoAiInteractionTextarea=e([d.localized()],exports.LuzmoAiInteractionTextarea);customElements.get("luzmo-ai-interaction-textarea")||customElements.define("luzmo-ai-interaction-textarea",exports.LuzmoAiInteractionTextarea);
@@ -1,7 +1,7 @@
1
1
  import { LuzmoAiInteractionTextarea } from './ai-interaction-textarea';
2
- export { LuzmoAiInteractionTextarea } from './ai-interaction-textarea';
3
2
  declare global {
4
3
  interface HTMLElementTagNameMap {
5
4
  'luzmo-ai-interaction-textarea': LuzmoAiInteractionTextarea;
6
5
  }
7
6
  }
7
+ export { LuzmoAiInteractionTextarea } from './ai-interaction-textarea';