@xxmachina/components 20.24.3 → 20.48.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.
@@ -1,5 +1,7 @@
1
1
  import * as i0 from '@angular/core';
2
- import { inject, computed, ChangeDetectionStrategy, Component } from '@angular/core';
2
+ import { inject, viewChild, viewChildren, ElementRef, computed, afterRenderEffect, ChangeDetectionStrategy, Component } from '@angular/core';
3
+ import { toSignal } from '@angular/core/rxjs-interop';
4
+ import { Router, NavigationEnd } from '@angular/router';
3
5
  import * as i2 from '@angular/material/button';
4
6
  import { MatButtonModule } from '@angular/material/button';
5
7
  import * as i3 from '@angular/material/icon';
@@ -11,17 +13,78 @@ import { AuthService } from '@ng-atomic/common/services/auth';
11
13
  import * as i1 from '@ng-atomic/components/templates/icon-button-menu';
12
14
  import { IconButtonMenuTemplateStore } from '@ng-atomic/components/templates/icon-button-menu';
13
15
  import { UserAvatarMenuMolecule } from '@xxmachina/components/molecules/user-avatar-menu';
16
+ import { filter, map } from 'rxjs';
17
+
18
+ const SUBSET_MATCH = {
19
+ paths: 'subset', queryParams: 'ignored', fragment: 'ignored', matrixParams: 'ignored',
20
+ };
21
+ function navigateCommands(action) {
22
+ const payload = action?.payload;
23
+ if (Array.isArray(payload))
24
+ return payload;
25
+ if (payload && Array.isArray(payload.commands))
26
+ return payload.commands;
27
+ return null;
28
+ }
29
+ function findActiveActionIndex(actions, router) {
30
+ let found = -1;
31
+ let foundLength = -1;
32
+ actions.forEach((action, index) => {
33
+ const commands = navigateCommands(action);
34
+ if (!commands)
35
+ return;
36
+ const tree = router.createUrlTree(commands);
37
+ const length = router.serializeUrl(tree).length;
38
+ if (length > foundLength && router.isActive(tree, SUBSET_MATCH)) {
39
+ found = index;
40
+ foundLength = length;
41
+ }
42
+ });
43
+ return found;
44
+ }
14
45
 
15
46
  class MachinaIconButtonMenuTemplate extends NgAtomicComponent {
16
47
  store = inject(IconButtonMenuTemplateStore);
17
48
  auth = inject(AuthService);
49
+ router = inject(Router);
50
+ url = toSignal(this.router.events.pipe(filter((event) => event instanceof NavigationEnd), map((event) => event.urlAfterRedirects)), { initialValue: this.router.url });
51
+ highlight = viewChild.required('highlight');
52
+ navButtons = viewChildren('navButton', { ...(ngDevMode ? { debugName: "navButtons" } : {}), read: (ElementRef) });
53
+ activeIndex = computed(() => {
54
+ this.url();
55
+ return findActiveActionIndex(this.store.actions(), this.router);
56
+ }, ...(ngDevMode ? [{ debugName: "activeIndex" }] : []));
18
57
  signOutAction = computed(() => this.auth.auth() ? this.store.bottomActions()[0] ?? null : null, ...(ngDevMode ? [{ debugName: "signOutAction" }] : []));
19
58
  restBottomActions = computed(() => this.signOutAction() ? this.store.bottomActions().slice(1) : this.store.bottomActions(), ...(ngDevMode ? [{ debugName: "restBottomActions" }] : []));
20
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: MachinaIconButtonMenuTemplate, deps: null, target: i0.ɵɵFactoryTarget.Component });
21
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.6", type: MachinaIconButtonMenuTemplate, isStandalone: true, selector: "templates-icon-button-menu", usesInheritance: true, hostDirectives: [{ directive: i1.IconButtonMenuTemplateStore, inputs: ["actions", "actions", "bottomActions", "bottomActions", "topPadding", "topPadding"] }], ngImport: i0, template: `
59
+ constructor() {
60
+ super();
61
+ afterRenderEffect({
62
+ earlyRead: () => {
63
+ const button = this.navButtons()[this.activeIndex()]?.nativeElement;
64
+ if (!button)
65
+ return null;
66
+ return { x: button.offsetLeft, y: button.offsetTop, width: button.offsetWidth, height: button.offsetHeight };
67
+ },
68
+ write: (rect) => {
69
+ const box = rect();
70
+ if (!box)
71
+ return;
72
+ const el = this.highlight().nativeElement;
73
+ el.style.transform = `translate(${box.x}px, ${box.y}px)`;
74
+ el.style.width = `${box.width}px`;
75
+ el.style.height = `${box.height}px`;
76
+ if (!el.dataset['ready'])
77
+ requestAnimationFrame(() => (el.dataset['ready'] = 'true'));
78
+ },
79
+ });
80
+ }
81
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: MachinaIconButtonMenuTemplate, deps: [], target: i0.ɵɵFactoryTarget.Component });
82
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.1.6", type: MachinaIconButtonMenuTemplate, isStandalone: true, selector: "templates-icon-button-menu", viewQueries: [{ propertyName: "highlight", first: true, predicate: ["highlight"], descendants: true, isSignal: true }, { propertyName: "navButtons", predicate: ["navButton"], descendants: true, read: ElementRef, isSignal: true }], usesInheritance: true, hostDirectives: [{ directive: i1.IconButtonMenuTemplateStore, inputs: ["actions", "actions", "bottomActions", "bottomActions", "topPadding", "topPadding"] }], ngImport: i0, template: `
22
83
  <div class="top" [style.padding-top]="store.topPadding()">
84
+ <div class="highlight" #highlight [class.shown]="activeIndex() >= 0" aria-hidden="true"></div>
23
85
  @for (action of store.actions(); track $index) {
24
- <button mat-icon-button [color]="action?.color" (click)="dispatch(action)"
86
+ <button mat-icon-button #navButton [color]="action?.color" (click)="dispatch(action)"
87
+ [class.active]="$index === activeIndex()" [attr.aria-current]="$index === activeIndex() ? 'page' : null"
25
88
  [matTooltip]="action.name" matTooltipPosition="right">
26
89
  <mat-icon>{{ action.icon }}</mat-icon>
27
90
  </button>
@@ -38,14 +101,16 @@ class MachinaIconButtonMenuTemplate extends NgAtomicComponent {
38
101
  </button>
39
102
  }
40
103
  </div>
41
- `, isInline: true, styles: [":host{width:100%;height:100%;background:#fff;display:block;--primary-color: #404040;--primary-color-SCOPED-IN-icon-button-menu-PxAa: var(--primary-color);--on-primary-color: #f0f0f0;--on-primary-color-SCOPED-IN-icon-button-menu-PxAa: var(--on-primary-color);--secondary-color: #B0B0B0;--secondary-color-SCOPED-IN-icon-button-menu-PxAa: var(--secondary-color);--background-color: #000000;--background-color-SCOPED-IN-icon-button-menu-PxAa: var(--background-color);--on-background-color: #ffffff;--on-background-color-SCOPED-IN-icon-button-menu-PxAa: var(--on-background-color);--mat-icon-button-icon-color: #FEFEFE;--mat-icon-button-icon-color-SCOPED-IN-icon-button-menu-PxAa: var(--mat-icon-button-icon-color)}:host{display:flex;flex-direction:column;justify-content:space-between;align-items:center;width:100%;height:100%;background-color:var(--background-color-SCOPED-IN-icon-button-menu-PxAa);color:var(--on-background-color-SCOPED-IN-icon-button-menu-PxAa)}:host .top,:host .bottom{display:flex;flex-direction:column;justify-content:center;align-items:center}:host button{--mat-icon-color: var(--on-primary-color-SCOPED-IN-icon-button-menu-PxAa);cursor:pointer}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: UserAvatarMenuMolecule, selector: "molecules-user-avatar-menu", inputs: ["signOutAction"], outputs: ["workspaceSwitch"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
104
+ `, isInline: true, styles: [":host{width:100%;height:100%;background:#fff;display:block;--primary-color: #404040;--primary-color-SCOPED-IN-icon-button-menu-1ZsF: var(--primary-color);--on-primary-color: #f0f0f0;--on-primary-color-SCOPED-IN-icon-button-menu-1ZsF: var(--on-primary-color);--secondary-color: #B0B0B0;--secondary-color-SCOPED-IN-icon-button-menu-1ZsF: var(--secondary-color);--background-color: #000000;--background-color-SCOPED-IN-icon-button-menu-1ZsF: var(--background-color);--on-background-color: #ffffff;--on-background-color-SCOPED-IN-icon-button-menu-1ZsF: var(--on-background-color);--mat-icon-button-icon-color: #FEFEFE;--mat-icon-button-icon-color-SCOPED-IN-icon-button-menu-1ZsF: var(--mat-icon-button-icon-color)}:host{display:flex;flex-direction:column;justify-content:space-between;align-items:center;width:100%;height:100%;background-color:var(--background-color-SCOPED-IN-icon-button-menu-1ZsF);color:var(--on-background-color-SCOPED-IN-icon-button-menu-1ZsF)}:host .top,:host .bottom{display:flex;flex-direction:column;justify-content:center;align-items:center}:host button{--mat-icon-color: var(--on-primary-color-SCOPED-IN-icon-button-menu-1ZsF);cursor:pointer}:host .top{position:relative}:host .top button{position:relative;z-index:1}:host .highlight{position:absolute;top:0;left:0;border-radius:50%;background-color:color-mix(in srgb,var(--on-primary-color-SCOPED-IN-icon-button-menu-1ZsF) 18%,transparent);opacity:0;pointer-events:none;transition:opacity .15s ease}:host .highlight.shown{opacity:1}:host .highlight[data-ready]{transition:opacity .15s ease,transform .28s cubic-bezier(.2,0,0,1)}@media(prefers-reduced-motion:reduce){:host .highlight[data-ready]{transition:opacity .15s ease}}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: UserAvatarMenuMolecule, selector: "molecules-user-avatar-menu", inputs: ["signOutAction"], outputs: ["workspaceSwitch"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
42
105
  }
43
106
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: MachinaIconButtonMenuTemplate, decorators: [{
44
107
  type: Component,
45
108
  args: [{ selector: 'templates-icon-button-menu', standalone: true, imports: [MatButtonModule, MatIconModule, MatTooltipModule, UserAvatarMenuMolecule], template: `
46
109
  <div class="top" [style.padding-top]="store.topPadding()">
110
+ <div class="highlight" #highlight [class.shown]="activeIndex() >= 0" aria-hidden="true"></div>
47
111
  @for (action of store.actions(); track $index) {
48
- <button mat-icon-button [color]="action?.color" (click)="dispatch(action)"
112
+ <button mat-icon-button #navButton [color]="action?.color" (click)="dispatch(action)"
113
+ [class.active]="$index === activeIndex()" [attr.aria-current]="$index === activeIndex() ? 'page' : null"
49
114
  [matTooltip]="action.name" matTooltipPosition="right">
50
115
  <mat-icon>{{ action.icon }}</mat-icon>
51
116
  </button>
@@ -67,8 +132,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
67
132
  directive: IconButtonMenuTemplateStore,
68
133
  inputs: ['actions', 'bottomActions', 'topPadding'],
69
134
  },
70
- ], styles: [":host{width:100%;height:100%;background:#fff;display:block;--primary-color: #404040;--primary-color-SCOPED-IN-icon-button-menu-PxAa: var(--primary-color);--on-primary-color: #f0f0f0;--on-primary-color-SCOPED-IN-icon-button-menu-PxAa: var(--on-primary-color);--secondary-color: #B0B0B0;--secondary-color-SCOPED-IN-icon-button-menu-PxAa: var(--secondary-color);--background-color: #000000;--background-color-SCOPED-IN-icon-button-menu-PxAa: var(--background-color);--on-background-color: #ffffff;--on-background-color-SCOPED-IN-icon-button-menu-PxAa: var(--on-background-color);--mat-icon-button-icon-color: #FEFEFE;--mat-icon-button-icon-color-SCOPED-IN-icon-button-menu-PxAa: var(--mat-icon-button-icon-color)}:host{display:flex;flex-direction:column;justify-content:space-between;align-items:center;width:100%;height:100%;background-color:var(--background-color-SCOPED-IN-icon-button-menu-PxAa);color:var(--on-background-color-SCOPED-IN-icon-button-menu-PxAa)}:host .top,:host .bottom{display:flex;flex-direction:column;justify-content:center;align-items:center}:host button{--mat-icon-color: var(--on-primary-color-SCOPED-IN-icon-button-menu-PxAa);cursor:pointer}\n"] }]
71
- }] });
135
+ ], styles: [":host{width:100%;height:100%;background:#fff;display:block;--primary-color: #404040;--primary-color-SCOPED-IN-icon-button-menu-1ZsF: var(--primary-color);--on-primary-color: #f0f0f0;--on-primary-color-SCOPED-IN-icon-button-menu-1ZsF: var(--on-primary-color);--secondary-color: #B0B0B0;--secondary-color-SCOPED-IN-icon-button-menu-1ZsF: var(--secondary-color);--background-color: #000000;--background-color-SCOPED-IN-icon-button-menu-1ZsF: var(--background-color);--on-background-color: #ffffff;--on-background-color-SCOPED-IN-icon-button-menu-1ZsF: var(--on-background-color);--mat-icon-button-icon-color: #FEFEFE;--mat-icon-button-icon-color-SCOPED-IN-icon-button-menu-1ZsF: var(--mat-icon-button-icon-color)}:host{display:flex;flex-direction:column;justify-content:space-between;align-items:center;width:100%;height:100%;background-color:var(--background-color-SCOPED-IN-icon-button-menu-1ZsF);color:var(--on-background-color-SCOPED-IN-icon-button-menu-1ZsF)}:host .top,:host .bottom{display:flex;flex-direction:column;justify-content:center;align-items:center}:host button{--mat-icon-color: var(--on-primary-color-SCOPED-IN-icon-button-menu-1ZsF);cursor:pointer}:host .top{position:relative}:host .top button{position:relative;z-index:1}:host .highlight{position:absolute;top:0;left:0;border-radius:50%;background-color:color-mix(in srgb,var(--on-primary-color-SCOPED-IN-icon-button-menu-1ZsF) 18%,transparent);opacity:0;pointer-events:none;transition:opacity .15s ease}:host .highlight.shown{opacity:1}:host .highlight[data-ready]{transition:opacity .15s ease,transform .28s cubic-bezier(.2,0,0,1)}@media(prefers-reduced-motion:reduce){:host .highlight[data-ready]{transition:opacity .15s ease}}\n"] }]
136
+ }], ctorParameters: () => [], propDecorators: { highlight: [{ type: i0.ViewChild, args: ['highlight', { isSignal: true }] }], navButtons: [{ type: i0.ViewChildren, args: ['navButton', { ...{ read: (ElementRef) }, isSignal: true }] }] } });
72
137
 
73
138
  /**
74
139
  * Generated bundle index. Do not edit.
@@ -41,7 +41,7 @@ class MachinaMenuTemplate extends NgAtomicComponent {
41
41
  }
42
42
  <organisms-menu-footer injectable/>
43
43
  </div>
44
- `, isInline: true, styles: [":host{--primary-color: #404040;--primary-color-SCOPED-IN-menu-rMg6: var(--primary-color);--background-color: #f0f0f0;--background-color-SCOPED-IN-menu-rMg6: var(--background-color);--secondary-color: #f0f0f0;--secondary-color-SCOPED-IN-menu-rMg6: var(--secondary-color);--surface-color: #f0f0f0;--surface-color-SCOPED-IN-menu-rMg6: var(--surface-color);--on-primary-color: #f0f0f0;--on-primary-color-SCOPED-IN-menu-rMg6: var(--on-primary-color);--on-background-color: #404040;--on-background-color-SCOPED-IN-menu-rMg6: var(--on-background-color);--on-surface-color: #404040;--on-surface-color-SCOPED-IN-menu-rMg6: var(--on-surface-color);--width: 100%;--width-SCOPED-IN-menu-rMg6: var(--width);--height: 100%;--height-SCOPED-IN-menu-rMg6: var(--height)}:host{display:flex;flex-direction:column;justify-content:space-between;width:var(--width-SCOPED-IN-menu-rMg6);height:var(--height-SCOPED-IN-menu-rMg6);color:var(--on-background-color-SCOPED-IN-menu-rMg6);background-color:var(--background-color-SCOPED-IN-menu-rMg6)}:host *{--primary-color: var(--primary-color-SCOPED-IN-menu-rMg6);--background-color: var(--background-color-SCOPED-IN-menu-rMg6);--surface-color: var(--surface-color-SCOPED-IN-menu-rMg6);--on-primary-color: var(--on-primary-color-SCOPED-IN-menu-rMg6);--on-background-color: var(--on-background-color-SCOPED-IN-menu-rMg6);--on-surface-color: var(--on-surface-color-SCOPED-IN-menu-rMg6)}:host .bottom{display:flex;flex-wrap:wrap;align-items:center;gap:4px;padding-left:4px}:host .bottom organisms-navigation-list{flex-basis:100%;order:-1}:host .bottom organisms-menu-footer{flex:1}\n"], dependencies: [{ kind: "directive", type: MenuHeaderOrganismStore, selector: "organisms-menu-header", inputs: ["title"] }, { kind: "directive", type: NavigationListOrganismStore, selector: "organisms-navigation-list", inputs: ["actions", "type"] }, { kind: "directive", type: MenuFooterOrganismStore, selector: "organisms-menu-footer" }, { kind: "component", type: UserAvatarMenuMolecule, selector: "molecules-user-avatar-menu", inputs: ["signOutAction"], outputs: ["workspaceSwitch"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
44
+ `, isInline: true, styles: [":host{--primary-color: #404040;--primary-color-SCOPED-IN-menu-34k2: var(--primary-color);--background-color: #f0f0f0;--background-color-SCOPED-IN-menu-34k2: var(--background-color);--secondary-color: #f0f0f0;--secondary-color-SCOPED-IN-menu-34k2: var(--secondary-color);--surface-color: #f0f0f0;--surface-color-SCOPED-IN-menu-34k2: var(--surface-color);--on-primary-color: #f0f0f0;--on-primary-color-SCOPED-IN-menu-34k2: var(--on-primary-color);--on-background-color: #404040;--on-background-color-SCOPED-IN-menu-34k2: var(--on-background-color);--on-surface-color: #404040;--on-surface-color-SCOPED-IN-menu-34k2: var(--on-surface-color);--width: 100%;--width-SCOPED-IN-menu-34k2: var(--width);--height: 100%;--height-SCOPED-IN-menu-34k2: var(--height)}:host{display:flex;flex-direction:column;justify-content:space-between;width:var(--width-SCOPED-IN-menu-34k2);height:var(--height-SCOPED-IN-menu-34k2);color:var(--on-background-color-SCOPED-IN-menu-34k2);background-color:var(--background-color-SCOPED-IN-menu-34k2)}:host *{--primary-color: var(--primary-color-SCOPED-IN-menu-34k2);--background-color: var(--background-color-SCOPED-IN-menu-34k2);--surface-color: var(--surface-color-SCOPED-IN-menu-34k2);--on-primary-color: var(--on-primary-color-SCOPED-IN-menu-34k2);--on-background-color: var(--on-background-color-SCOPED-IN-menu-34k2);--on-surface-color: var(--on-surface-color-SCOPED-IN-menu-34k2)}:host .bottom{display:flex;flex-wrap:wrap;align-items:center;gap:4px;padding-left:4px}:host .bottom organisms-navigation-list{flex-basis:100%;order:-1}:host .bottom organisms-menu-footer{flex:1}\n"], dependencies: [{ kind: "directive", type: MenuHeaderOrganismStore, selector: "organisms-menu-header", inputs: ["title"] }, { kind: "directive", type: NavigationListOrganismStore, selector: "organisms-navigation-list", inputs: ["actions", "type"] }, { kind: "directive", type: MenuFooterOrganismStore, selector: "organisms-menu-footer" }, { kind: "component", type: UserAvatarMenuMolecule, selector: "molecules-user-avatar-menu", inputs: ["signOutAction"], outputs: ["workspaceSwitch"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
45
45
  }
46
46
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: MachinaMenuTemplate, decorators: [{
47
47
  type: Component,
@@ -79,7 +79,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
79
79
  directive: MenuTemplateStore,
80
80
  inputs: ['actions', 'bottomActions', 'title'],
81
81
  },
82
- ], styles: [":host{--primary-color: #404040;--primary-color-SCOPED-IN-menu-rMg6: var(--primary-color);--background-color: #f0f0f0;--background-color-SCOPED-IN-menu-rMg6: var(--background-color);--secondary-color: #f0f0f0;--secondary-color-SCOPED-IN-menu-rMg6: var(--secondary-color);--surface-color: #f0f0f0;--surface-color-SCOPED-IN-menu-rMg6: var(--surface-color);--on-primary-color: #f0f0f0;--on-primary-color-SCOPED-IN-menu-rMg6: var(--on-primary-color);--on-background-color: #404040;--on-background-color-SCOPED-IN-menu-rMg6: var(--on-background-color);--on-surface-color: #404040;--on-surface-color-SCOPED-IN-menu-rMg6: var(--on-surface-color);--width: 100%;--width-SCOPED-IN-menu-rMg6: var(--width);--height: 100%;--height-SCOPED-IN-menu-rMg6: var(--height)}:host{display:flex;flex-direction:column;justify-content:space-between;width:var(--width-SCOPED-IN-menu-rMg6);height:var(--height-SCOPED-IN-menu-rMg6);color:var(--on-background-color-SCOPED-IN-menu-rMg6);background-color:var(--background-color-SCOPED-IN-menu-rMg6)}:host *{--primary-color: var(--primary-color-SCOPED-IN-menu-rMg6);--background-color: var(--background-color-SCOPED-IN-menu-rMg6);--surface-color: var(--surface-color-SCOPED-IN-menu-rMg6);--on-primary-color: var(--on-primary-color-SCOPED-IN-menu-rMg6);--on-background-color: var(--on-background-color-SCOPED-IN-menu-rMg6);--on-surface-color: var(--on-surface-color-SCOPED-IN-menu-rMg6)}:host .bottom{display:flex;flex-wrap:wrap;align-items:center;gap:4px;padding-left:4px}:host .bottom organisms-navigation-list{flex-basis:100%;order:-1}:host .bottom organisms-menu-footer{flex:1}\n"] }]
82
+ ], styles: [":host{--primary-color: #404040;--primary-color-SCOPED-IN-menu-34k2: var(--primary-color);--background-color: #f0f0f0;--background-color-SCOPED-IN-menu-34k2: var(--background-color);--secondary-color: #f0f0f0;--secondary-color-SCOPED-IN-menu-34k2: var(--secondary-color);--surface-color: #f0f0f0;--surface-color-SCOPED-IN-menu-34k2: var(--surface-color);--on-primary-color: #f0f0f0;--on-primary-color-SCOPED-IN-menu-34k2: var(--on-primary-color);--on-background-color: #404040;--on-background-color-SCOPED-IN-menu-34k2: var(--on-background-color);--on-surface-color: #404040;--on-surface-color-SCOPED-IN-menu-34k2: var(--on-surface-color);--width: 100%;--width-SCOPED-IN-menu-34k2: var(--width);--height: 100%;--height-SCOPED-IN-menu-34k2: var(--height)}:host{display:flex;flex-direction:column;justify-content:space-between;width:var(--width-SCOPED-IN-menu-34k2);height:var(--height-SCOPED-IN-menu-34k2);color:var(--on-background-color-SCOPED-IN-menu-34k2);background-color:var(--background-color-SCOPED-IN-menu-34k2)}:host *{--primary-color: var(--primary-color-SCOPED-IN-menu-34k2);--background-color: var(--background-color-SCOPED-IN-menu-34k2);--surface-color: var(--surface-color-SCOPED-IN-menu-34k2);--on-primary-color: var(--on-primary-color-SCOPED-IN-menu-34k2);--on-background-color: var(--on-background-color-SCOPED-IN-menu-34k2);--on-surface-color: var(--on-surface-color-SCOPED-IN-menu-34k2)}:host .bottom{display:flex;flex-wrap:wrap;align-items:center;gap:4px;padding-left:4px}:host .bottom organisms-navigation-list{flex-basis:100%;order:-1}:host .bottom organisms-menu-footer{flex:1}\n"] }]
83
83
  }] });
84
84
 
85
85
  /**
@@ -15,7 +15,7 @@ class QueryValidators {
15
15
  return service.subscribeSchema(endpoint, {
16
16
  headers: QueryHelper.tryParseJson(headersJson),
17
17
  });
18
- }), shareReplay(1), takeUntilDestroyed());
18
+ }), takeUntilDestroyed(), shareReplay(1));
19
19
  return ((formGroup) => {
20
20
  return combineLatest({
21
21
  accessToken: auth.accessToken$,
@@ -250,7 +250,7 @@ class SessionNavigatorOrganism extends NgAtomicComponent {
250
250
  }
251
251
  </div>
252
252
  </mat-toolbar>
253
- `, isInline: true, styles: [":host{display:block;--text: #e0e0e0;--text-SCOPED-IN-session-navigator-yaUM: var(--text);--sys: #888;--sys-SCOPED-IN-session-navigator-yaUM: var(--sys);--border: rgba(51, 51, 51, .5);--border-SCOPED-IN-session-navigator-yaUM: var(--border);--primary-color: #0f0f11;--primary-color-SCOPED-IN-session-navigator-yaUM: var(--primary-color);--on-primary-color: #e0e0e0;--on-primary-color-SCOPED-IN-session-navigator-yaUM: var(--on-primary-color);--secondary-color: #888;--secondary-color-SCOPED-IN-session-navigator-yaUM: var(--secondary-color);--on-secondary-color: #f0f0f0;--on-secondary-color-SCOPED-IN-session-navigator-yaUM: var(--on-secondary-color);--background-color: #0f0f11;--background-color-SCOPED-IN-session-navigator-yaUM: var(--background-color);--on-background-color: #e0e0e0;--on-background-color-SCOPED-IN-session-navigator-yaUM: var(--on-background-color);--navigator-height: 56px;--navigator-height-SCOPED-IN-session-navigator-yaUM: var(--navigator-height)}:host{display:block;width:100%;height:var(--navigator-height-SCOPED-IN-session-navigator-yaUM)}:host mat-toolbar{display:flex;width:100%;height:100%;padding:0!important;justify-content:space-between;align-items:center;overflow:hidden;transition:background .5s ease-in-out;background-color:var(--primary-color-SCOPED-IN-session-navigator-yaUM);color:var(--on-primary-color-SCOPED-IN-session-navigator-yaUM);border-bottom:1px solid var(--border-SCOPED-IN-session-navigator-yaUM)!important;font-family:SF Mono,Monaco,monospace!important;font-size:12px!important;--mat-toolbar-title-text-size: 12px !important;--mat-sys-title-large-size: 12px !important}:host mat-toolbar>div:first-child,:host mat-toolbar>div:last-child{flex:0 0 auto}:host mat-toolbar>div:nth-child(2){flex:1 1 auto;display:flex;justify-content:flex-start;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}:host mat-toolbar *:not(.mat-icon){font-family:SF Mono,Monaco,monospace!important}:host mat-toolbar span,:host mat-toolbar div,:host mat-toolbar h1,:host mat-toolbar h2,:host mat-toolbar h3,:host mat-toolbar h4,:host mat-toolbar h5,:host mat-toolbar h6{font-size:12px!important;font-family:SF Mono,Monaco,monospace!important;color:var(--text-SCOPED-IN-session-navigator-yaUM)!important}:host mat-toolbar .mat-button{color:var(--sys-SCOPED-IN-session-navigator-yaUM)!important;font-family:SF Mono,Monaco,monospace!important}:host mat-toolbar .mat-button:hover{color:var(--text-SCOPED-IN-session-navigator-yaUM)!important}:host mat-toolbar .mat-icon-button{color:var(--sys-SCOPED-IN-session-navigator-yaUM)!important;opacity:.7}:host mat-toolbar .mat-icon-button:hover{color:var(--text-SCOPED-IN-session-navigator-yaUM)!important;opacity:1}:host mat-toolbar .mat-icon-button .mat-icon{font-family:Material Icons!important;font-size:24px!important}:host div{display:flex;justify-content:center;align-items:center;line-height:1}:host atoms-menu-button{display:flex;align-items:center;line-height:1}@media(prefers-color-scheme:light){:host{--text: #333;--text-SCOPED-IN-session-navigator-yaUM: var(--text);--sys: #666;--sys-SCOPED-IN-session-navigator-yaUM: var(--sys);--border: #ddd;--border-SCOPED-IN-session-navigator-yaUM: var(--border)}}@media(max-width:600px){:host mat-toolbar span{font-size:11px!important}}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatToolbarModule }, { kind: "component", type: i1$1.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: MenuButtonAtomStore, selector: "atoms-menu-button, atoms-smart-menu-button", inputs: ["actions", "type", "action"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
253
+ `, isInline: true, styles: [":host{display:block;--text: #e0e0e0;--text-SCOPED-IN-session-navigator-tOSE: var(--text);--sys: #888;--sys-SCOPED-IN-session-navigator-tOSE: var(--sys);--border: rgba(51, 51, 51, .5);--border-SCOPED-IN-session-navigator-tOSE: var(--border);--primary-color: #0f0f11;--primary-color-SCOPED-IN-session-navigator-tOSE: var(--primary-color);--on-primary-color: #e0e0e0;--on-primary-color-SCOPED-IN-session-navigator-tOSE: var(--on-primary-color);--secondary-color: #888;--secondary-color-SCOPED-IN-session-navigator-tOSE: var(--secondary-color);--on-secondary-color: #f0f0f0;--on-secondary-color-SCOPED-IN-session-navigator-tOSE: var(--on-secondary-color);--background-color: #0f0f11;--background-color-SCOPED-IN-session-navigator-tOSE: var(--background-color);--on-background-color: #e0e0e0;--on-background-color-SCOPED-IN-session-navigator-tOSE: var(--on-background-color);--navigator-height: 56px;--navigator-height-SCOPED-IN-session-navigator-tOSE: var(--navigator-height)}:host{display:block;width:100%;height:var(--navigator-height-SCOPED-IN-session-navigator-tOSE)}:host mat-toolbar{display:flex;width:100%;height:100%;padding:0!important;justify-content:space-between;align-items:center;overflow:hidden;transition:background .5s ease-in-out;background-color:var(--primary-color-SCOPED-IN-session-navigator-tOSE);color:var(--on-primary-color-SCOPED-IN-session-navigator-tOSE);border-bottom:1px solid var(--border-SCOPED-IN-session-navigator-tOSE)!important;font-family:SF Mono,Monaco,monospace!important;font-size:12px!important;--mat-toolbar-title-text-size: 12px !important;--mat-sys-title-large-size: 12px !important}:host mat-toolbar>div:first-child,:host mat-toolbar>div:last-child{flex:0 0 auto}:host mat-toolbar>div:nth-child(2){flex:1 1 auto;display:flex;justify-content:flex-start;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}:host mat-toolbar *:not(.mat-icon){font-family:SF Mono,Monaco,monospace!important}:host mat-toolbar span,:host mat-toolbar div,:host mat-toolbar h1,:host mat-toolbar h2,:host mat-toolbar h3,:host mat-toolbar h4,:host mat-toolbar h5,:host mat-toolbar h6{font-size:12px!important;font-family:SF Mono,Monaco,monospace!important;color:var(--text-SCOPED-IN-session-navigator-tOSE)!important}:host mat-toolbar .mat-button{color:var(--sys-SCOPED-IN-session-navigator-tOSE)!important;font-family:SF Mono,Monaco,monospace!important}:host mat-toolbar .mat-button:hover{color:var(--text-SCOPED-IN-session-navigator-tOSE)!important}:host mat-toolbar .mat-icon-button{color:var(--sys-SCOPED-IN-session-navigator-tOSE)!important;opacity:.7}:host mat-toolbar .mat-icon-button:hover{color:var(--text-SCOPED-IN-session-navigator-tOSE)!important;opacity:1}:host mat-toolbar .mat-icon-button .mat-icon{font-family:Material Icons!important;font-size:24px!important}:host div{display:flex;justify-content:center;align-items:center;line-height:1}:host atoms-menu-button{display:flex;align-items:center;line-height:1}@media(prefers-color-scheme:light){:host{--text: #333;--text-SCOPED-IN-session-navigator-tOSE: var(--text);--sys: #666;--sys-SCOPED-IN-session-navigator-tOSE: var(--sys);--border: #ddd;--border-SCOPED-IN-session-navigator-tOSE: var(--border)}}@media(max-width:600px){:host mat-toolbar span{font-size:11px!important}}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "ngmodule", type: MatIconModule }, { kind: "ngmodule", type: MatToolbarModule }, { kind: "component", type: i1$1.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { kind: "directive", type: MenuButtonAtomStore, selector: "atoms-menu-button, atoms-smart-menu-button", inputs: ["actions", "type", "action"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
254
254
  }
255
255
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImport: i0, type: SessionNavigatorOrganism, decorators: [{
256
256
  type: Component,
@@ -284,7 +284,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.1.6", ngImpor
284
284
  directive: SessionNavigatorOrganismStore,
285
285
  inputs: ['startActions', 'endActions', 'title'],
286
286
  }
287
- ], styles: [":host{display:block;--text: #e0e0e0;--text-SCOPED-IN-session-navigator-yaUM: var(--text);--sys: #888;--sys-SCOPED-IN-session-navigator-yaUM: var(--sys);--border: rgba(51, 51, 51, .5);--border-SCOPED-IN-session-navigator-yaUM: var(--border);--primary-color: #0f0f11;--primary-color-SCOPED-IN-session-navigator-yaUM: var(--primary-color);--on-primary-color: #e0e0e0;--on-primary-color-SCOPED-IN-session-navigator-yaUM: var(--on-primary-color);--secondary-color: #888;--secondary-color-SCOPED-IN-session-navigator-yaUM: var(--secondary-color);--on-secondary-color: #f0f0f0;--on-secondary-color-SCOPED-IN-session-navigator-yaUM: var(--on-secondary-color);--background-color: #0f0f11;--background-color-SCOPED-IN-session-navigator-yaUM: var(--background-color);--on-background-color: #e0e0e0;--on-background-color-SCOPED-IN-session-navigator-yaUM: var(--on-background-color);--navigator-height: 56px;--navigator-height-SCOPED-IN-session-navigator-yaUM: var(--navigator-height)}:host{display:block;width:100%;height:var(--navigator-height-SCOPED-IN-session-navigator-yaUM)}:host mat-toolbar{display:flex;width:100%;height:100%;padding:0!important;justify-content:space-between;align-items:center;overflow:hidden;transition:background .5s ease-in-out;background-color:var(--primary-color-SCOPED-IN-session-navigator-yaUM);color:var(--on-primary-color-SCOPED-IN-session-navigator-yaUM);border-bottom:1px solid var(--border-SCOPED-IN-session-navigator-yaUM)!important;font-family:SF Mono,Monaco,monospace!important;font-size:12px!important;--mat-toolbar-title-text-size: 12px !important;--mat-sys-title-large-size: 12px !important}:host mat-toolbar>div:first-child,:host mat-toolbar>div:last-child{flex:0 0 auto}:host mat-toolbar>div:nth-child(2){flex:1 1 auto;display:flex;justify-content:flex-start;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}:host mat-toolbar *:not(.mat-icon){font-family:SF Mono,Monaco,monospace!important}:host mat-toolbar span,:host mat-toolbar div,:host mat-toolbar h1,:host mat-toolbar h2,:host mat-toolbar h3,:host mat-toolbar h4,:host mat-toolbar h5,:host mat-toolbar h6{font-size:12px!important;font-family:SF Mono,Monaco,monospace!important;color:var(--text-SCOPED-IN-session-navigator-yaUM)!important}:host mat-toolbar .mat-button{color:var(--sys-SCOPED-IN-session-navigator-yaUM)!important;font-family:SF Mono,Monaco,monospace!important}:host mat-toolbar .mat-button:hover{color:var(--text-SCOPED-IN-session-navigator-yaUM)!important}:host mat-toolbar .mat-icon-button{color:var(--sys-SCOPED-IN-session-navigator-yaUM)!important;opacity:.7}:host mat-toolbar .mat-icon-button:hover{color:var(--text-SCOPED-IN-session-navigator-yaUM)!important;opacity:1}:host mat-toolbar .mat-icon-button .mat-icon{font-family:Material Icons!important;font-size:24px!important}:host div{display:flex;justify-content:center;align-items:center;line-height:1}:host atoms-menu-button{display:flex;align-items:center;line-height:1}@media(prefers-color-scheme:light){:host{--text: #333;--text-SCOPED-IN-session-navigator-yaUM: var(--text);--sys: #666;--sys-SCOPED-IN-session-navigator-yaUM: var(--sys);--border: #ddd;--border-SCOPED-IN-session-navigator-yaUM: var(--border)}}@media(max-width:600px){:host mat-toolbar span{font-size:11px!important}}\n"] }]
287
+ ], styles: [":host{display:block;--text: #e0e0e0;--text-SCOPED-IN-session-navigator-tOSE: var(--text);--sys: #888;--sys-SCOPED-IN-session-navigator-tOSE: var(--sys);--border: rgba(51, 51, 51, .5);--border-SCOPED-IN-session-navigator-tOSE: var(--border);--primary-color: #0f0f11;--primary-color-SCOPED-IN-session-navigator-tOSE: var(--primary-color);--on-primary-color: #e0e0e0;--on-primary-color-SCOPED-IN-session-navigator-tOSE: var(--on-primary-color);--secondary-color: #888;--secondary-color-SCOPED-IN-session-navigator-tOSE: var(--secondary-color);--on-secondary-color: #f0f0f0;--on-secondary-color-SCOPED-IN-session-navigator-tOSE: var(--on-secondary-color);--background-color: #0f0f11;--background-color-SCOPED-IN-session-navigator-tOSE: var(--background-color);--on-background-color: #e0e0e0;--on-background-color-SCOPED-IN-session-navigator-tOSE: var(--on-background-color);--navigator-height: 56px;--navigator-height-SCOPED-IN-session-navigator-tOSE: var(--navigator-height)}:host{display:block;width:100%;height:var(--navigator-height-SCOPED-IN-session-navigator-tOSE)}:host mat-toolbar{display:flex;width:100%;height:100%;padding:0!important;justify-content:space-between;align-items:center;overflow:hidden;transition:background .5s ease-in-out;background-color:var(--primary-color-SCOPED-IN-session-navigator-tOSE);color:var(--on-primary-color-SCOPED-IN-session-navigator-tOSE);border-bottom:1px solid var(--border-SCOPED-IN-session-navigator-tOSE)!important;font-family:SF Mono,Monaco,monospace!important;font-size:12px!important;--mat-toolbar-title-text-size: 12px !important;--mat-sys-title-large-size: 12px !important}:host mat-toolbar>div:first-child,:host mat-toolbar>div:last-child{flex:0 0 auto}:host mat-toolbar>div:nth-child(2){flex:1 1 auto;display:flex;justify-content:flex-start;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}:host mat-toolbar *:not(.mat-icon){font-family:SF Mono,Monaco,monospace!important}:host mat-toolbar span,:host mat-toolbar div,:host mat-toolbar h1,:host mat-toolbar h2,:host mat-toolbar h3,:host mat-toolbar h4,:host mat-toolbar h5,:host mat-toolbar h6{font-size:12px!important;font-family:SF Mono,Monaco,monospace!important;color:var(--text-SCOPED-IN-session-navigator-tOSE)!important}:host mat-toolbar .mat-button{color:var(--sys-SCOPED-IN-session-navigator-tOSE)!important;font-family:SF Mono,Monaco,monospace!important}:host mat-toolbar .mat-button:hover{color:var(--text-SCOPED-IN-session-navigator-tOSE)!important}:host mat-toolbar .mat-icon-button{color:var(--sys-SCOPED-IN-session-navigator-tOSE)!important;opacity:.7}:host mat-toolbar .mat-icon-button:hover{color:var(--text-SCOPED-IN-session-navigator-tOSE)!important;opacity:1}:host mat-toolbar .mat-icon-button .mat-icon{font-family:Material Icons!important;font-size:24px!important}:host div{display:flex;justify-content:center;align-items:center;line-height:1}:host atoms-menu-button{display:flex;align-items:center;line-height:1}@media(prefers-color-scheme:light){:host{--text: #333;--text-SCOPED-IN-session-navigator-tOSE: var(--text);--sys: #666;--sys-SCOPED-IN-session-navigator-tOSE: var(--sys);--border: #ddd;--border-SCOPED-IN-session-navigator-tOSE: var(--border)}}@media(max-width:600px){:host mat-toolbar span{font-size:11px!important}}\n"] }]
288
288
  }] });
289
289
 
290
290
  var InvoiceAppActionId;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@xxmachina/components",
3
- "version": "20.24.3",
3
+ "version": "20.48.0",
4
4
  "license": "MIT",
5
5
  "main": "./index.js",
6
6
  "types": "./index.d.ts",
@@ -26,6 +26,10 @@
26
26
  "types": "./types/xxmachina-components-features-query.d.ts",
27
27
  "default": "./fesm2022/xxmachina-components-features-query.mjs"
28
28
  },
29
+ "./frames/qtp-v2": {
30
+ "types": "./types/xxmachina-components-frames-qtp-v2.d.ts",
31
+ "default": "./fesm2022/xxmachina-components-frames-qtp-v2.mjs"
32
+ },
29
33
  "./groups/command-form": {
30
34
  "types": "./types/xxmachina-components-groups-command-form.d.ts",
31
35
  "default": "./fesm2022/xxmachina-components-groups-command-form.mjs"
@@ -93,6 +93,7 @@ declare class QueryFeature {
93
93
  readonly query: i0.Signal<Query<any, any> | undefined>;
94
94
  readonly destroyRef: DestroyRef;
95
95
  readonly result$: rxjs.Observable<any>;
96
+ readonly error: i0.WritableSignal<boolean>;
96
97
  readonly result: i0.Signal<(Record<string, any[]> & Record<`${string}Length`, number> & {
97
98
  __meta__?: {
98
99
  title?: string;
@@ -0,0 +1,77 @@
1
+ import * as _xxmachina_components_frames_qtp_v2 from '@xxmachina/components/frames/qtp-v2';
2
+ import * as _angular_core from '@angular/core';
3
+ import { TemplateRef } from '@angular/core';
4
+
5
+ type QtpPanelType = 'query' | 'transformer' | 'presenter' | 'debug';
6
+ type QtpMode = 'presentation' | 'develop';
7
+ interface QtpTransformerOption {
8
+ readonly id: string;
9
+ readonly name: string;
10
+ }
11
+ interface QtpPresenterOption {
12
+ readonly id: string;
13
+ readonly name: string;
14
+ readonly icon?: string;
15
+ }
16
+ declare class QtpV2Frame<T extends QtpTransformerOption = QtpTransformerOption, P extends QtpPresenterOption = QtpPresenterOption> {
17
+ readonly mode: _angular_core.InputSignal<QtpMode>;
18
+ readonly expandedPanels: _angular_core.InputSignal<readonly QtpPanelType[]>;
19
+ readonly availableTransformers: _angular_core.InputSignal<readonly T[]>;
20
+ readonly selectedTransformer: _angular_core.InputSignal<T | undefined>;
21
+ readonly availablePresenters: _angular_core.InputSignal<readonly P[]>;
22
+ readonly selectedPresenter: _angular_core.InputSignal<P | undefined>;
23
+ readonly loading: _angular_core.InputSignal<boolean>;
24
+ readonly error: _angular_core.InputSignal<string | undefined>;
25
+ readonly debugLogs: _angular_core.InputSignal<unknown[]>;
26
+ readonly canGenerateTransformer: _angular_core.InputSignal<boolean>;
27
+ readonly generatingTransformer: _angular_core.InputSignal<boolean>;
28
+ readonly panelStatesChange: _angular_core.OutputEmitterRef<readonly QtpPanelType[]>;
29
+ readonly transformerSelected: _angular_core.OutputEmitterRef<T>;
30
+ readonly presenterSelected: _angular_core.OutputEmitterRef<P>;
31
+ readonly runTransformer: _angular_core.OutputEmitterRef<void>;
32
+ readonly generateTransformer: _angular_core.OutputEmitterRef<void>;
33
+ private readonly queryTemplates;
34
+ private readonly transformerTemplates;
35
+ private readonly presenterTemplates;
36
+ private readonly localPanels;
37
+ readonly panels: _angular_core.Signal<readonly QtpPanelType[]>;
38
+ protected readonly querySection: _angular_core.Signal<_angular_core.TemplateRef<_xxmachina_components_frames_qtp_v2.QuerySectionContext>>;
39
+ protected readonly transformerSection: _angular_core.Signal<_angular_core.TemplateRef<unknown>>;
40
+ protected readonly presenterSection: _angular_core.Signal<_angular_core.TemplateRef<unknown>>;
41
+ protected isExpanded(panel: QtpPanelType): boolean;
42
+ protected togglePanel(panel: QtpPanelType): void;
43
+ protected onTransformerChange(id: string): void;
44
+ protected onPresenterChange(id: string): void;
45
+ protected onRun(): void;
46
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<QtpV2Frame<any, any>, never>;
47
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<QtpV2Frame<any, any>, "frames-qtp-v2", never, { "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "expandedPanels": { "alias": "expandedPanels"; "required": false; "isSignal": true; }; "availableTransformers": { "alias": "availableTransformers"; "required": false; "isSignal": true; }; "selectedTransformer": { "alias": "selectedTransformer"; "required": false; "isSignal": true; }; "availablePresenters": { "alias": "availablePresenters"; "required": false; "isSignal": true; }; "selectedPresenter": { "alias": "selectedPresenter"; "required": false; "isSignal": true; }; "loading": { "alias": "loading"; "required": false; "isSignal": true; }; "error": { "alias": "error"; "required": false; "isSignal": true; }; "debugLogs": { "alias": "debugLogs"; "required": false; "isSignal": true; }; "canGenerateTransformer": { "alias": "canGenerateTransformer"; "required": false; "isSignal": true; }; "generatingTransformer": { "alias": "generatingTransformer"; "required": false; "isSignal": true; }; }, { "panelStatesChange": "panelStatesChange"; "transformerSelected": "transformerSelected"; "presenterSelected": "presenterSelected"; "runTransformer": "runTransformer"; "generateTransformer": "generateTransformer"; }, ["queryTemplates", "transformerTemplates", "presenterTemplates"], never, true, never>;
48
+ }
49
+
50
+ interface QuerySectionContext {
51
+ $implicit: string;
52
+ totalWritten: number;
53
+ }
54
+ declare class QuerySectionDirective {
55
+ readonly templateRef: TemplateRef<QuerySectionContext>;
56
+ constructor(templateRef: TemplateRef<QuerySectionContext>);
57
+ static ngTemplateContextGuard(_dir: QuerySectionDirective, _ctx: unknown): _ctx is QuerySectionContext;
58
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<QuerySectionDirective, never>;
59
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<QuerySectionDirective, "[querySection]", never, {}, {}, never, never, true, never>;
60
+ }
61
+
62
+ declare class TransformerSectionDirective {
63
+ readonly templateRef: TemplateRef<unknown>;
64
+ constructor(templateRef: TemplateRef<unknown>);
65
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<TransformerSectionDirective, never>;
66
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<TransformerSectionDirective, "[transformerSection]", never, {}, {}, never, never, true, never>;
67
+ }
68
+
69
+ declare class PresenterSectionDirective {
70
+ readonly templateRef: TemplateRef<unknown>;
71
+ constructor(templateRef: TemplateRef<unknown>);
72
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<PresenterSectionDirective, never>;
73
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<PresenterSectionDirective, "[presenterSection]", never, {}, {}, never, never, true, never>;
74
+ }
75
+
76
+ export { PresenterSectionDirective, QtpV2Frame, QuerySectionDirective, TransformerSectionDirective };
77
+ export type { QtpMode, QtpPanelType, QtpPresenterOption, QtpTransformerOption, QuerySectionContext };
@@ -5,7 +5,6 @@ import * as _angular_forms from '@angular/forms';
5
5
  import { Extension } from '@codemirror/state';
6
6
  import { NgAtomicComponent } from '@ng-atomic/core';
7
7
  import { Resource } from '@xxmachina/common/domain/models';
8
- import { HttpClient } from '@angular/common/http';
9
8
 
10
9
  declare class QueryFormGroup extends NgAtomicComponent {
11
10
  #private;
@@ -45,8 +44,6 @@ declare class QueryFormGroup extends NgAtomicComponent {
45
44
  readonly queryExtensions: _angular_core.Signal<Extension[]>;
46
45
  readonly variablesExtensions: _angular_core.Signal<Extension[]>;
47
46
  readonly headersExtensions: _angular_core.Signal<Extension[]>;
48
- readonly http: HttpClient;
49
- readonly libFile: _angular_core.Signal<string | undefined>;
50
47
  readonly transformerExtensions: _angular_core.Signal<Extension[]>;
51
48
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<QueryFormGroup, never>;
52
49
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<QueryFormGroup, "groups-query-form", never, { "form": { "alias": "form"; "required": false; "isSignal": true; }; "keyActions": { "alias": "keyActions"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
@@ -2,14 +2,17 @@ import * as _ng_atomic_components_templates__index from '@ng-atomic/components/t
2
2
  import { ItemsMap, IndexTemplate } from '@ng-atomic/components/templates/_index';
3
3
  import * as rxjs from 'rxjs';
4
4
  import * as _angular_core from '@angular/core';
5
- import { Provider, Injector } from '@angular/core';
5
+ import { Type, Provider, Injector, InjectionToken } from '@angular/core';
6
6
  import * as _ng_atomic_core from '@ng-atomic/core';
7
7
  import { Action, InjectableComponent, NavActions, ItemActions, NgAtomicComponent } from '@ng-atomic/core';
8
+ import * as _xxmachina_components_frames_qtp_v2 from '@xxmachina/components/frames/qtp-v2';
9
+ import { QtpPresenterOption, QtpMode } from '@xxmachina/components/frames/qtp-v2';
8
10
  import * as _angular_forms from '@angular/forms';
9
11
  import { FormGroup, FormBuilder } from '@angular/forms';
10
12
  import * as _ng_atomic_common_types_ng_atomic_common_services_form__index from '@ng-atomic/common/types/ng-atomic-common-services-form-_index';
11
13
  import * as _ng_atomic_common_services_ui from '@ng-atomic/common/services/ui';
12
14
  import { FlatTreeControl } from '@angular/cdk/tree';
15
+ import { SelectionModel } from '@angular/cdk/collections';
13
16
  import { EditingStateManager } from '@ng-atomic/common';
14
17
  import { FormFieldMap } from '@ng-atomic/common/pipes/smart-field';
15
18
  import { AppService } from '@xxmachina/components/services/app';
@@ -17,6 +20,7 @@ import { Query } from '@xxmachina/common/domain/models';
17
20
  import { QueryFeature, QueryGraphqlVariablesFormFeature } from '@xxmachina/components/features/query';
18
21
  import { ActivatedRoute } from '@angular/router';
19
22
  import { QueryService } from '@xxmachina/components/services/query';
23
+ import { DataAccessor } from '@ng-atomic/common/pipes/data-accessor';
20
24
 
21
25
  declare enum ActionId {
22
26
  NAVIGATE_TO_IFRAME = "NAVIGATE TO IFRAME",
@@ -63,6 +67,11 @@ interface TableCellChangeOptions<T = any> {
63
67
  declare function buildItemsMap(itemsResult?: Record<string, any[]>, itemsLengthResult?: Record<string, number>): {};
64
68
  declare function buildItemsMapFromResult(result?: Record<string, any[]> & Record<`${string}Length`, number>): ItemsMap<any>;
65
69
 
70
+ declare function toggleSelectedId(selectedIds: string[], id: string): string[];
71
+ declare function toggleAllSelectedIds(selectedIds: string[], items: {
72
+ id: string;
73
+ }[]): string[];
74
+
66
75
  declare class QueryActionReducer {
67
76
  readonly action: _angular_core.WritableSignal<Action<any>>;
68
77
  readonly action$: rxjs.Observable<Action<any>>;
@@ -71,6 +80,10 @@ declare class QueryActionReducer {
71
80
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<QueryActionReducer>;
72
81
  }
73
82
 
83
+ interface QueryPagePresenterOption extends QtpPresenterOption {
84
+ readonly component?: Type<unknown>;
85
+ }
86
+
74
87
  declare class QueryPageStore extends InjectableComponent {
75
88
  #private;
76
89
  static readonly ActionId: typeof ActionId;
@@ -197,6 +210,7 @@ declare class QueryPageStore extends InjectableComponent {
197
210
  static providePaginationInitializer(): Provider[];
198
211
  static provideTableCellValueChangeEffect<T = any>(handlerFactory: (injector: Injector) => (change: TableCellValueChange<T>, setValue: (value: any) => void) => void, optionsOrColumns?: TableCellChangeOptions<T> | (keyof T)[]): Provider;
199
212
  static provideTableAutofillEffect<T = any>(handlerFactory: (injector: Injector) => (autofill: TableAutofillChange<T>) => void | Promise<void>): Provider;
213
+ static providePresenter(option: QueryPagePresenterOption): Provider;
200
214
  static provideDebugStyleInitializer(): Provider[];
201
215
  static provideTitleFromQueryResultInitializer(): Provider[];
202
216
  protected readonly app: AppService;
@@ -225,6 +239,7 @@ declare class QueryPageStore extends InjectableComponent {
225
239
  readonly type: _angular_core.InputSignal<string>;
226
240
  readonly title: _angular_core.InputSignal<string>;
227
241
  readonly titleEditable: _angular_core.InputSignal<boolean>;
242
+ readonly description: _angular_core.InputSignal<string>;
228
243
  readonly itemsMap: _angular_core.InputSignal<_ng_atomic_components_templates__index.ItemsMap<any>>;
229
244
  readonly items: _angular_core.Signal<any[]>;
230
245
  readonly itemsLength: _angular_core.InputSignal<number>;
@@ -264,9 +279,18 @@ declare class QueryPageStore extends InjectableComponent {
264
279
  readonly getRowClass: _angular_core.InputSignal<(item: any) => string>;
265
280
  readonly skip: _angular_core.Signal<boolean>;
266
281
  readonly pageSizeOptions: _angular_core.InputSignal<number[]>;
282
+ readonly selectedIds: _angular_core.WritableSignal<string[]>;
283
+ readonly selection: _angular_core.Signal<SelectionModel<string>>;
284
+ readonly qtpMode: _angular_core.InputSignal<QtpMode>;
285
+ readonly parent: QueryPageStore | null;
286
+ readonly presenters: readonly QueryPagePresenterOption[];
287
+ readonly transformers: _xxmachina_components_frames_qtp_v2.QtpTransformerOption[];
288
+ readonly selectedPresenter: _angular_core.Signal<QueryPagePresenterOption | undefined>;
267
289
  constructor();
290
+ toggleSelection(id: string): void;
291
+ toggleAllSelection(): void;
268
292
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<QueryPageStore, never>;
269
- static ɵdir: _angular_core.ɵɵDirectiveDeclaration<QueryPageStore, never, never, { "style": { "alias": "style"; "required": false; "isSignal": true; }; "query": { "alias": "query"; "required": false; "isSignal": true; }; "navStartActions": { "alias": "navStartActions"; "required": false; "isSignal": true; }; "additionalNavEndActions": { "alias": "additionalNavEndActions"; "required": false; "isSignal": true; }; "navEndActions": { "alias": "navEndActions"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "titleEditable": { "alias": "titleEditable"; "required": false; "isSignal": true; }; "itemsMap": { "alias": "itemsMap"; "required": false; "isSignal": true; }; "itemsLength": { "alias": "itemsLength"; "required": false; "isSignal": true; }; "childrenKey": { "alias": "childrenKey"; "required": false; "isSignal": true; }; "additionalColumns": { "alias": "additionalColumns"; "required": false; "isSignal": true; }; "additionalColumnNames": { "alias": "additionalColumnNames"; "required": false; "isSignal": true; }; "extractedColumnNames": { "alias": "extractedColumnNames"; "required": false; "isSignal": true; }; "columnNames": { "alias": "columnNames"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "itemActions": { "alias": "itemActions"; "required": false; "isSignal": true; }; "variablesForm": { "alias": "variablesForm"; "required": false; "isSignal": true; }; "variablesFormFieldMap": { "alias": "variablesFormFieldMap"; "required": false; "isSignal": true; }; "variablesFormDisplayed": { "alias": "variablesFormDisplayed"; "required": false; "isSignal": true; }; "tableColumnFormFieldMap": { "alias": "tableColumnFormFieldMap"; "required": false; "isSignal": true; }; "getRowClass": { "alias": "getRowClass"; "required": false; "isSignal": true; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
293
+ static ɵdir: _angular_core.ɵɵDirectiveDeclaration<QueryPageStore, never, never, { "style": { "alias": "style"; "required": false; "isSignal": true; }; "query": { "alias": "query"; "required": false; "isSignal": true; }; "navStartActions": { "alias": "navStartActions"; "required": false; "isSignal": true; }; "additionalNavEndActions": { "alias": "additionalNavEndActions"; "required": false; "isSignal": true; }; "navEndActions": { "alias": "navEndActions"; "required": false; "isSignal": true; }; "type": { "alias": "type"; "required": false; "isSignal": true; }; "title": { "alias": "title"; "required": false; "isSignal": true; }; "titleEditable": { "alias": "titleEditable"; "required": false; "isSignal": true; }; "description": { "alias": "description"; "required": false; "isSignal": true; }; "itemsMap": { "alias": "itemsMap"; "required": false; "isSignal": true; }; "itemsLength": { "alias": "itemsLength"; "required": false; "isSignal": true; }; "childrenKey": { "alias": "childrenKey"; "required": false; "isSignal": true; }; "additionalColumns": { "alias": "additionalColumns"; "required": false; "isSignal": true; }; "additionalColumnNames": { "alias": "additionalColumnNames"; "required": false; "isSignal": true; }; "extractedColumnNames": { "alias": "extractedColumnNames"; "required": false; "isSignal": true; }; "columnNames": { "alias": "columnNames"; "required": false; "isSignal": true; }; "sticky": { "alias": "sticky"; "required": false; "isSignal": true; }; "form": { "alias": "form"; "required": false; "isSignal": true; }; "itemActions": { "alias": "itemActions"; "required": false; "isSignal": true; }; "variablesForm": { "alias": "variablesForm"; "required": false; "isSignal": true; }; "variablesFormFieldMap": { "alias": "variablesFormFieldMap"; "required": false; "isSignal": true; }; "variablesFormDisplayed": { "alias": "variablesFormDisplayed"; "required": false; "isSignal": true; }; "tableColumnFormFieldMap": { "alias": "tableColumnFormFieldMap"; "required": false; "isSignal": true; }; "getRowClass": { "alias": "getRowClass"; "required": false; "isSignal": true; }; "pageSizeOptions": { "alias": "pageSizeOptions"; "required": false; "isSignal": true; }; "qtpMode": { "alias": "qtpMode"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
270
294
  }
271
295
 
272
296
  declare class QueryPage extends NgAtomicComponent {
@@ -280,11 +304,16 @@ declare class QueryPage extends NgAtomicComponent {
280
304
  readonly template: _angular_core.Signal<IndexTemplate<any> | undefined>;
281
305
  readonly title: _angular_core.InputSignal<string>;
282
306
  constructor();
307
+ protected selectPresenter(presenter: QtpPresenterOption): void;
283
308
  back(): Promise<void>;
284
309
  navigateToIframe(item: {
285
310
  id: string;
286
311
  }): Promise<void>;
287
312
  expandPage(): Promise<void>;
313
+ protected toggleSelection(item: {
314
+ id: string;
315
+ }): void;
316
+ protected toggleAllSelection(): void;
288
317
  protected itemClick(item: {
289
318
  id: string;
290
319
  }): void;
@@ -292,5 +321,8 @@ declare class QueryPage extends NgAtomicComponent {
292
321
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<QueryPage, "pages-query", never, { "title": { "alias": "title"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof QueryPageStore; inputs: { "type": "type"; "query": "query"; "titleEditable": "titleEditable"; "variablesForm": "variablesForm"; "variablesFormFieldMap": "variablesFormFieldMap"; "navStartActions": "navStartActions"; "navEndActions": "navEndActions"; "itemActions": "itemActions"; "pageSizeOptions": "pageSizeOptions"; }; outputs: {}; }]>;
293
322
  }
294
323
 
295
- export { ActionId, QueryActionReducer, QueryPage, QueryPageStore, buildItemsMap, buildItemsMapFromResult };
296
- export type { TableAutofillChange, TableCellChangeOptions, TableCellValueChange };
324
+ declare const QUERY_PAGE_DATA_ACCESSOR: InjectionToken<DataAccessor<any>>;
325
+ declare function provideQueryPageDataAccessor<T>(useFactory: () => DataAccessor<T>): Provider;
326
+
327
+ export { ActionId, QUERY_PAGE_DATA_ACCESSOR, QueryActionReducer, QueryPage, QueryPageStore, buildItemsMap, buildItemsMapFromResult, provideQueryPageDataAccessor, toggleAllSelectedIds, toggleSelectedId };
328
+ export type { QueryPagePresenterOption, TableAutofillChange, TableCellChangeOptions, TableCellValueChange };
@@ -1,6 +1,6 @@
1
- import * as _angular_core from '@angular/core';
2
1
  import * as _ng_atomic_core from '@ng-atomic/core';
3
2
  import { NgAtomicComponent } from '@ng-atomic/core';
3
+ import * as _angular_core from '@angular/core';
4
4
  import { AuthService } from '@ng-atomic/common/services/auth';
5
5
  import * as i1 from '@ng-atomic/components/templates/icon-button-menu';
6
6
  import { IconButtonMenuTemplateStore } from '@ng-atomic/components/templates/icon-button-menu';
@@ -8,8 +8,14 @@ import { IconButtonMenuTemplateStore } from '@ng-atomic/components/templates/ico
8
8
  declare class MachinaIconButtonMenuTemplate extends NgAtomicComponent {
9
9
  protected readonly store: IconButtonMenuTemplateStore;
10
10
  protected readonly auth: AuthService;
11
+ private readonly router;
12
+ private readonly url;
13
+ private readonly highlight;
14
+ private readonly navButtons;
15
+ protected readonly activeIndex: _angular_core.Signal<number>;
11
16
  protected readonly signOutAction: _angular_core.Signal<_ng_atomic_core.Action<any> | null>;
12
17
  protected readonly restBottomActions: _angular_core.Signal<_ng_atomic_core.Action<any>[]>;
18
+ constructor();
13
19
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<MachinaIconButtonMenuTemplate, never>;
14
20
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<MachinaIconButtonMenuTemplate, "templates-icon-button-menu", never, {}, {}, never, never, true, [{ directive: typeof i1.IconButtonMenuTemplateStore; inputs: { "actions": "actions"; "bottomActions": "bottomActions"; "topPadding": "topPadding"; }; outputs: {}; }]>;
15
21
  }