@smartbit4all/ng-client 4.5.38 → 4.5.40

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 (32) hide show
  1. package/esm2022/lib/session/smart-backend-bootstrap.config.mjs +1 -1
  2. package/esm2022/lib/session/smart-backend-bootstrap.service.mjs +4 -4
  3. package/esm2022/lib/theme/theme.service.mjs +48 -0
  4. package/esm2022/lib/view-context/api/api/view.service.mjs +82 -1
  5. package/esm2022/lib/view-context/api/api-default/binaryContentData.mjs +2 -0
  6. package/esm2022/lib/view-context/api/model/deviceInfo.mjs +1 -1
  7. package/esm2022/lib/view-context/api/model/models.mjs +4 -1
  8. package/esm2022/lib/view-context/api/model/shellProperties.mjs +13 -0
  9. package/esm2022/lib/view-context/api/model/themeDefinition.mjs +2 -0
  10. package/esm2022/lib/view-context/api/model/themeDescriptor.mjs +2 -0
  11. package/esm2022/lib/view-context/smart-ui-action/components/theme-selector/theme-selector.component.mjs +35 -0
  12. package/esm2022/lib/view-context/smart-ui-action/file-editor-toolbar/file-editor-toolbar.component.mjs +4 -3
  13. package/esm2022/lib/view-context/smart-ui-action/ui-action-toolbar.component.mjs +6 -5
  14. package/esm2022/lib/view-context/smart-view-context.module.mjs +5 -2
  15. package/esm2022/lib/view-context/smart-view-context.service.mjs +9 -5
  16. package/fesm2022/smartbit4all-ng-client.mjs +186 -13
  17. package/fesm2022/smartbit4all-ng-client.mjs.map +1 -1
  18. package/lib/session/smart-backend-bootstrap.config.d.ts +1 -1
  19. package/lib/theme/theme.service.d.ts +17 -0
  20. package/lib/view-context/api/api/view.service.d.ts +37 -0
  21. package/lib/view-context/api/api-default/binaryContentData.d.ts +2 -0
  22. package/lib/view-context/api/model/deviceInfo.d.ts +1 -0
  23. package/lib/view-context/api/model/models.d.ts +3 -0
  24. package/lib/view-context/api/model/shellProperties.d.ts +15 -0
  25. package/lib/view-context/api/model/themeDefinition.d.ts +22 -0
  26. package/lib/view-context/api/model/themeDescriptor.d.ts +16 -0
  27. package/lib/view-context/smart-ui-action/components/theme-selector/theme-selector.component.d.ts +16 -0
  28. package/lib/view-context/smart-view-context.module.d.ts +49 -48
  29. package/lib/view-context/smart-view-context.service.d.ts +4 -2
  30. package/package.json +1 -1
  31. package/smartbit4all-ng-client-4.5.40.tgz +0 -0
  32. package/smartbit4all-ng-client-4.5.38.tgz +0 -0
@@ -1,8 +1,8 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, Injectable, Optional, Inject, PLATFORM_ID, NgModule, SkipSelf, RendererStyleFlags2, Directive, Input, HostBinding, HostListener, Component, EventEmitter, Output, ViewChildren, ViewChild, ElementRef, forwardRef, Pipe, ViewContainerRef, ViewEncapsulation, ChangeDetectionStrategy, CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA, signal, computed, output, input, effect, inject, ApplicationRef, viewChild, ChangeDetectorRef } from '@angular/core';
2
+ import { InjectionToken, Injectable, Optional, Inject, PLATFORM_ID, NgModule, SkipSelf, RendererStyleFlags2, Directive, Input, HostBinding, HostListener, Component, EventEmitter, Output, signal, computed, ViewChildren, ViewChild, input, ElementRef, forwardRef, Pipe, ViewContainerRef, ViewEncapsulation, ChangeDetectionStrategy, CUSTOM_ELEMENTS_SCHEMA, NO_ERRORS_SCHEMA, output, effect, inject, ApplicationRef, viewChild, ChangeDetectorRef } from '@angular/core';
3
3
  import * as i1 from '@angular/common/http';
4
4
  import { HttpHeaders, HttpContext, HttpErrorResponse, HttpParams, HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
5
- import { Subject, lastValueFrom, take, takeUntil, interval, startWith, map, distinctUntilChanged, catchError, throwError, from } from 'rxjs';
5
+ import { Subject, lastValueFrom, take, tap, takeUntil, interval, startWith, map, distinctUntilChanged, catchError, throwError, from } from 'rxjs';
6
6
  import * as i1$2 from '@angular/common';
7
7
  import { isPlatformBrowser, DOCUMENT, DatePipe, CommonModule } from '@angular/common';
8
8
  import * as i5 from '@angular/material/button';
@@ -1660,6 +1660,87 @@ class ViewService {
1660
1660
  reportProgress: reportProgress
1661
1661
  });
1662
1662
  }
1663
+ getTheme(name, observe = 'body', reportProgress = false, options) {
1664
+ if (name === null || name === undefined) {
1665
+ throw new Error('Required parameter name was null or undefined when calling getTheme.');
1666
+ }
1667
+ let localVarHeaders = this.defaultHeaders;
1668
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
1669
+ if (localVarHttpHeaderAcceptSelected === undefined) {
1670
+ // to determine the Accept header
1671
+ const httpHeaderAccepts = [
1672
+ 'application/json'
1673
+ ];
1674
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
1675
+ }
1676
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
1677
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
1678
+ }
1679
+ let localVarHttpContext = options && options.context;
1680
+ if (localVarHttpContext === undefined) {
1681
+ localVarHttpContext = new HttpContext();
1682
+ }
1683
+ let responseType_ = 'json';
1684
+ if (localVarHttpHeaderAcceptSelected) {
1685
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
1686
+ responseType_ = 'text';
1687
+ }
1688
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
1689
+ responseType_ = 'json';
1690
+ }
1691
+ else {
1692
+ responseType_ = 'blob';
1693
+ }
1694
+ }
1695
+ let localVarPath = `/context/themes/${this.configuration.encodeParam({ name: "name", value: name, in: "path", style: "simple", explode: false, dataType: "string", dataFormat: undefined })}`;
1696
+ return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, {
1697
+ context: localVarHttpContext,
1698
+ responseType: responseType_,
1699
+ withCredentials: this.configuration.withCredentials,
1700
+ headers: localVarHeaders,
1701
+ observe: observe,
1702
+ reportProgress: reportProgress
1703
+ });
1704
+ }
1705
+ getThemes(observe = 'body', reportProgress = false, options) {
1706
+ let localVarHeaders = this.defaultHeaders;
1707
+ let localVarHttpHeaderAcceptSelected = options && options.httpHeaderAccept;
1708
+ if (localVarHttpHeaderAcceptSelected === undefined) {
1709
+ // to determine the Accept header
1710
+ const httpHeaderAccepts = [
1711
+ 'application/json'
1712
+ ];
1713
+ localVarHttpHeaderAcceptSelected = this.configuration.selectHeaderAccept(httpHeaderAccepts);
1714
+ }
1715
+ if (localVarHttpHeaderAcceptSelected !== undefined) {
1716
+ localVarHeaders = localVarHeaders.set('Accept', localVarHttpHeaderAcceptSelected);
1717
+ }
1718
+ let localVarHttpContext = options && options.context;
1719
+ if (localVarHttpContext === undefined) {
1720
+ localVarHttpContext = new HttpContext();
1721
+ }
1722
+ let responseType_ = 'json';
1723
+ if (localVarHttpHeaderAcceptSelected) {
1724
+ if (localVarHttpHeaderAcceptSelected.startsWith('text')) {
1725
+ responseType_ = 'text';
1726
+ }
1727
+ else if (this.configuration.isJsonMime(localVarHttpHeaderAcceptSelected)) {
1728
+ responseType_ = 'json';
1729
+ }
1730
+ else {
1731
+ responseType_ = 'blob';
1732
+ }
1733
+ }
1734
+ let localVarPath = `/context/themes`;
1735
+ return this.httpClient.request('get', `${this.configuration.basePath}${localVarPath}`, {
1736
+ context: localVarHttpContext,
1737
+ responseType: responseType_,
1738
+ withCredentials: this.configuration.withCredentials,
1739
+ headers: localVarHeaders,
1740
+ observe: observe,
1741
+ reportProgress: reportProgress
1742
+ });
1743
+ }
1663
1744
  getViewConstraint(uuid, observe = 'body', reportProgress = false, options) {
1664
1745
  if (uuid === null || uuid === undefined) {
1665
1746
  throw new Error('Required parameter uuid was null or undefined when calling getViewConstraint.');
@@ -2499,6 +2580,18 @@ var ServerRequestType;
2499
2580
  ServerRequestType["GET_COMPONENT_MODEL"] = "GET_COMPONENT_MODEL";
2500
2581
  })(ServerRequestType || (ServerRequestType = {}));
2501
2582
 
2583
+ /**
2584
+ * View API
2585
+ * View API
2586
+ *
2587
+ * The version of the OpenAPI document: 1.0.0
2588
+ * Contact: info@it4all.hu
2589
+ *
2590
+ * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
2591
+ * https://openapi-generator.tech
2592
+ * Do not edit the class manually.
2593
+ */
2594
+
2502
2595
  var SmartLinkMigrationStatusStatusEnum;
2503
2596
  (function (SmartLinkMigrationStatusStatusEnum) {
2504
2597
  SmartLinkMigrationStatusStatusEnum["RUNNING"] = "RUNNING";
@@ -3588,6 +3681,50 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
3588
3681
  args: [COMPONENT_LIBRARY]
3589
3682
  }] }] });
3590
3683
 
3684
+ const THEME_CACHE_KEY = 'themeCache';
3685
+ class ThemeService {
3686
+ constructor(viewService) {
3687
+ this.viewService = viewService;
3688
+ this._currentTheme = signal(localStorage.getItem(THEME_CACHE_KEY) ??
3689
+ (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'));
3690
+ this.currentTheme = computed(() => this._currentTheme());
3691
+ this.themes = [];
3692
+ }
3693
+ setTheme(themeDescriptor) {
3694
+ if (!themeDescriptor.name) {
3695
+ throw new Error('No theme name given.');
3696
+ }
3697
+ document.documentElement.className = 'theme-' + themeDescriptor.name;
3698
+ localStorage.setItem(THEME_CACHE_KEY, themeDescriptor.name);
3699
+ this._currentTheme.set(themeDescriptor.name);
3700
+ }
3701
+ getThemes() {
3702
+ return this.viewService.getThemes().pipe(tap((themes) => (this.themes = themes)));
3703
+ }
3704
+ async getSelectedTheme() {
3705
+ if (this.themes.length === 0) {
3706
+ this.themes = await lastValueFrom(this.getThemes());
3707
+ }
3708
+ var themeName = localStorage.getItem(THEME_CACHE_KEY) ?? this.getSystemTheme();
3709
+ var theme = this.themes.find((t) => t.name === themeName) ?? this.themes.find((t) => t.name === 'light');
3710
+ if (!theme) {
3711
+ throw new Error('No theme found.');
3712
+ }
3713
+ return theme;
3714
+ }
3715
+ getSystemTheme() {
3716
+ return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light';
3717
+ }
3718
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ThemeService, deps: [{ token: ViewService }], target: i0.ɵɵFactoryTarget.Injectable }); }
3719
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ThemeService, providedIn: 'root' }); }
3720
+ }
3721
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ThemeService, decorators: [{
3722
+ type: Injectable,
3723
+ args: [{
3724
+ providedIn: 'root',
3725
+ }]
3726
+ }], ctorParameters: () => [{ type: ViewService }] });
3727
+
3591
3728
  const SmartViewContextErrorDialogButtonLabel = 'SmartViewContextErrorDialogButtonLabel';
3592
3729
  const SmartViewContextErrorDialogTitle = 'SmartViewContextErrorDialogTitle';
3593
3730
  const SmartViewContextErrorDialogMessage = 'SmartViewContextErrorDialogMessage';
@@ -3605,12 +3742,13 @@ class SmartViewContextService {
3605
3742
  }
3606
3743
  return undefined;
3607
3744
  }
3608
- constructor(view, session, navigation, dialog, apiQueueService, inject, compLib) {
3745
+ constructor(view, session, navigation, dialog, apiQueueService, themeService, inject, compLib) {
3609
3746
  this.view = view;
3610
3747
  this.session = session;
3611
3748
  this.navigation = navigation;
3612
3749
  this.dialog = dialog;
3613
3750
  this.apiQueueService = apiQueueService;
3751
+ this.themeService = themeService;
3614
3752
  this.inject = inject;
3615
3753
  this.viewContextUuidName = 'viewContextUuid';
3616
3754
  this.viewContextUuidHeaderName = 'viewContextUuid';
@@ -3820,6 +3958,8 @@ class SmartViewContextService {
3820
3958
  parameters: new Map(),
3821
3959
  };
3822
3960
  viewContextUpdate.deviceInfo.componentLibrary = this.componentLibrary;
3961
+ var selectedTheme = await this.themeService.getSelectedTheme();
3962
+ viewContextUpdate.deviceInfo.themeName = selectedTheme.name;
3823
3963
  this.viewContext = await this.view.updateViewContext(viewContextUpdate).toPromise();
3824
3964
  return this.viewContext;
3825
3965
  }
@@ -4450,7 +4590,7 @@ class SmartViewContextService {
4450
4590
  getCurrentViewContext() {
4451
4591
  return this.viewContext;
4452
4592
  }
4453
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartViewContextService, deps: [{ token: ViewService }, { token: SmartSessionService }, { token: SmartNavigationService }, { token: SmartViewContextDialogService }, { token: ApiQueueService }, { token: i0.Injector }, { token: COMPONENT_LIBRARY, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
4593
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartViewContextService, deps: [{ token: ViewService }, { token: SmartSessionService }, { token: SmartNavigationService }, { token: SmartViewContextDialogService }, { token: ApiQueueService }, { token: ThemeService }, { token: i0.Injector }, { token: COMPONENT_LIBRARY, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
4454
4594
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartViewContextService, providedIn: 'root' }); }
4455
4595
  }
4456
4596
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: SmartViewContextService, decorators: [{
@@ -4458,7 +4598,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
4458
4598
  args: [{
4459
4599
  providedIn: 'root',
4460
4600
  }]
4461
- }], ctorParameters: () => [{ type: ViewService }, { type: SmartSessionService }, { type: SmartNavigationService }, { type: SmartViewContextDialogService }, { type: ApiQueueService }, { type: i0.Injector }, { type: ComponentLibrary, decorators: [{
4601
+ }], ctorParameters: () => [{ type: ViewService }, { type: SmartSessionService }, { type: SmartNavigationService }, { type: SmartViewContextDialogService }, { type: ApiQueueService }, { type: ThemeService }, { type: i0.Injector }, { type: ComponentLibrary, decorators: [{
4462
4602
  type: Inject,
4463
4603
  args: [COMPONENT_LIBRARY]
4464
4604
  }, {
@@ -6281,6 +6421,37 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
6281
6421
  args: ['document:click', ['$event']]
6282
6422
  }] } });
6283
6423
 
6424
+ class ThemeSelectorComponent {
6425
+ constructor(themeService) {
6426
+ this.themeService = themeService;
6427
+ this.model = input.required();
6428
+ this.action = computed(() => this.model().uiAction);
6429
+ this.themes = [];
6430
+ }
6431
+ ngOnInit() {
6432
+ this.themeService.getThemes().subscribe(async (themes) => {
6433
+ this.themes = themes;
6434
+ if (this.themes.length === 2) {
6435
+ var selectedTheme = await this.themeService.getSelectedTheme();
6436
+ this.themeDescriptor = this.themes.find((t) => t.name !== selectedTheme.name);
6437
+ }
6438
+ });
6439
+ }
6440
+ async onActionClicked(event, themeDescriptor) {
6441
+ this.themeService.setTheme(this.themeDescriptor);
6442
+ // If we have two themes (light / dark), toggle the other
6443
+ if (this.themes.length === 2) {
6444
+ this.themeDescriptor = this.themes.find((t) => t.name !== this.themeDescriptor?.name);
6445
+ }
6446
+ }
6447
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ThemeSelectorComponent, deps: [{ token: ThemeService }], target: i0.ɵɵFactoryTarget.Component }); }
6448
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: ThemeSelectorComponent, selector: "theme-selector", inputs: { model: { classPropertyName: "model", publicName: "model", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: "@if (themeDescriptor) {\r\n <ui-action-button\r\n [descriptor]=\"themeDescriptor.descriptor!\"\r\n [code]=\"themeDescriptor.name\"\r\n (actionClick)=\"onActionClicked($event, themeDescriptor)\"\r\n >\r\n </ui-action-button>\r\n} @else if (action()) {\r\n <!-- <ui-tiered-menu\r\n #menu\r\n [triggerAction]=\"action()!\"\r\n [subActions]=\"action()?.subActions ?? []\"\r\n (actionClick)=\"onActionClicked($event, model())\"\r\n ></ui-tiered-menu> -->\r\n}\r\n", styles: [""], dependencies: [{ kind: "component", type: UiActionButtonComponent, selector: "ui-action-button", inputs: ["disabled", "descriptor", "code", "addedCssClass", "addBasicClasses"], outputs: ["actionClick", "actionDoubleClick"] }] }); }
6449
+ }
6450
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: ThemeSelectorComponent, decorators: [{
6451
+ type: Component,
6452
+ args: [{ selector: 'theme-selector', template: "@if (themeDescriptor) {\r\n <ui-action-button\r\n [descriptor]=\"themeDescriptor.descriptor!\"\r\n [code]=\"themeDescriptor.name\"\r\n (actionClick)=\"onActionClicked($event, themeDescriptor)\"\r\n >\r\n </ui-action-button>\r\n} @else if (action()) {\r\n <!-- <ui-tiered-menu\r\n #menu\r\n [triggerAction]=\"action()!\"\r\n [subActions]=\"action()?.subActions ?? []\"\r\n (actionClick)=\"onActionClicked($event, model())\"\r\n ></ui-tiered-menu> -->\r\n}\r\n" }]
6453
+ }], ctorParameters: () => [{ type: ThemeService }] });
6454
+
6284
6455
  class UiActionToolbarComponent {
6285
6456
  constructor(service, inject, changeDetector, compLib) {
6286
6457
  this.service = service;
@@ -6561,11 +6732,11 @@ class UiActionToolbarComponent {
6561
6732
  return this.toolbarPropertes?.direction === ToolbarDirection.VERTICAL;
6562
6733
  }
6563
6734
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UiActionToolbarComponent, deps: [{ token: UiActionService }, { token: i0.Injector }, { token: i0.ChangeDetectorRef }, { token: COMPONENT_LIBRARY }], target: i0.ɵɵFactoryTarget.Component }); }
6564
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: { uiActionModels: "uiActionModels", uiActionDescriptorService: "uiActionDescriptorService", id: "id", scrollOnWrap: "scrollOnWrap", toolbarPropertes: "toolbarPropertes" }, host: { listeners: { "window:resize": "onResize()" } }, viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "@if (isScrollable && scrollOnWrap) {\r\n <ui-action-button\r\n [disabled]=\"!isScrollable\"\r\n [descriptor]=\"buttonLeft\"\r\n (actionClick)=\"scrollLeft()\"\r\n (mousedown)=\"scrollStart('left')\"\r\n (mouseup)=\"stopScroll()\"\r\n (mouseleave)=\"stopScroll()\"\r\n (touchstart)=\"scrollStart('left')\"\r\n (touchend)=\"stopScroll()\"\r\n />\r\n}\r\n\r\n<div\r\n #container\r\n class=\"uiActionButtonsContainer\"\r\n [ngClass]=\"{\r\n scrollableContent: scrollOnWrap,\r\n verticalToolbar: isVertical,\r\n }\"\r\n>\r\n <ng-container *ngFor=\"let uiActionModel of uiActionModelsWithDescriptions; trackBy: trackByFn\">\r\n @if (uiActionModel.uiAction.subActions && uiActionModel.uiAction.subActions.length > 0) {\r\n <ui-tiered-menu\r\n #menu\r\n [triggerAction]=\"uiActionModel.uiAction\"\r\n [subActions]=\"uiActionModel.uiAction.subActions!\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n ></ui-tiered-menu>\r\n } @else {\r\n <ui-action-button\r\n [descriptor]=\"uiActionModel.descriptor!\"\r\n [code]=\"uiActionModel.uiAction.code\"\r\n [disabled]=\"!!uiActionModel.uiAction.disabled\"\r\n [addedCssClass]=\"uiActionModel.cssClass\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n (actionDoubleClick)=\"onActionDoubleClicked($event, uiActionModel)\"\r\n >\r\n </ui-action-button>\r\n }\r\n </ng-container>\r\n</div>\r\n\r\n@if (isScrollable && scrollOnWrap) {\r\n <ui-action-button\r\n [disabled]=\"!isScrollable\"\r\n [descriptor]=\"buttonRight\"\r\n (actionClick)=\"scrollRight()\"\r\n (mousedown)=\"scrollStart('right')\"\r\n (mouseup)=\"stopScroll()\"\r\n (mouseleave)=\"stopScroll()\"\r\n (touchstart)=\"scrollStart('right')\"\r\n (touchend)=\"stopScroll()\"\r\n />\r\n}\r\n", styles: [":host:has(.uiActionButtonsContainer.scrollableContent){display:flex;flex-direction:row;justify-content:space-between;gap:.5rem;width:100%;align-items:center}.uiActionButtonsContainer{display:flex;flex-direction:row;gap:1rem;flex-wrap:wrap}.uiActionButtonsContainer ::ng-deep button{display:flex;gap:1rem;align-items:center;justify-content:center}.uiActionButtonsContainer ::ng-deep .buttonWrapper{position:relative;width:fit-content;height:fit-content}.scrollableContent{flex:1;flex-wrap:nowrap;overflow-x:auto;overflow-y:visible;display:flex;scrollbar-width:none;padding:.5rem 0;align-items:center}.scrollableContent::-webkit-scrollbar{display:none!important}.verticalToolbar{display:flex;flex-direction:column}.verticalToolbar ::ng-deep ui-action-button,.verticalToolbar ::ng-deep button{width:100%;justify-content:flex-start}\n"], dependencies: [{ kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: UiActionButtonComponent, selector: "ui-action-button", inputs: ["disabled", "descriptor", "code", "addedCssClass", "addBasicClasses"], outputs: ["actionClick", "actionDoubleClick"] }, { kind: "component", type: MenuComponent, selector: "ui-tiered-menu", inputs: ["triggerAction", "isSubmenu"], outputs: ["actionClick", "submenuOpened"] }] }); }
6735
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: UiActionToolbarComponent, selector: "smart-ui-action-toolbar", inputs: { uiActionModels: "uiActionModels", uiActionDescriptorService: "uiActionDescriptorService", id: "id", scrollOnWrap: "scrollOnWrap", toolbarPropertes: "toolbarPropertes" }, host: { listeners: { "window:resize": "onResize()" } }, viewQueries: [{ propertyName: "containerRef", first: true, predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "@if (isScrollable && scrollOnWrap) {\r\n <ui-action-button\r\n [disabled]=\"!isScrollable\"\r\n [descriptor]=\"buttonLeft\"\r\n (actionClick)=\"scrollLeft()\"\r\n (mousedown)=\"scrollStart('left')\"\r\n (mouseup)=\"stopScroll()\"\r\n (mouseleave)=\"stopScroll()\"\r\n (touchstart)=\"scrollStart('left')\"\r\n (touchend)=\"stopScroll()\"\r\n />\r\n}\r\n\r\n<div\r\n #container\r\n class=\"uiActionButtonsContainer\"\r\n [ngClass]=\"{\r\n scrollableContent: scrollOnWrap,\r\n verticalToolbar: isVertical,\r\n }\"\r\n>\r\n <ng-container *ngFor=\"let uiActionModel of uiActionModelsWithDescriptions; trackBy: trackByFn\">\r\n @if (uiActionModel.uiAction.code === 'themeSelector') {\r\n <theme-selector [model]=\"uiActionModel\"></theme-selector>\r\n } @else if (uiActionModel.uiAction.subActions && uiActionModel.uiAction.subActions.length > 0) {\r\n <ui-tiered-menu\r\n #menu\r\n [triggerAction]=\"uiActionModel.uiAction\"\r\n [subActions]=\"uiActionModel.uiAction.subActions!\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n ></ui-tiered-menu>\r\n } @else {\r\n <ui-action-button\r\n [descriptor]=\"uiActionModel.descriptor!\"\r\n [code]=\"uiActionModel.uiAction.code\"\r\n [disabled]=\"!!uiActionModel.uiAction.disabled\"\r\n [addedCssClass]=\"uiActionModel.cssClass\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n (actionDoubleClick)=\"onActionDoubleClicked($event, uiActionModel)\"\r\n >\r\n </ui-action-button>\r\n }\r\n </ng-container>\r\n</div>\r\n\r\n@if (isScrollable && scrollOnWrap) {\r\n <ui-action-button\r\n [disabled]=\"!isScrollable\"\r\n [descriptor]=\"buttonRight\"\r\n (actionClick)=\"scrollRight()\"\r\n (mousedown)=\"scrollStart('right')\"\r\n (mouseup)=\"stopScroll()\"\r\n (mouseleave)=\"stopScroll()\"\r\n (touchstart)=\"scrollStart('right')\"\r\n (touchend)=\"stopScroll()\"\r\n />\r\n}\r\n", styles: [":host:has(.uiActionButtonsContainer.scrollableContent){display:flex;flex-direction:row;justify-content:space-between;gap:.5rem;width:100%;align-items:center}.uiActionButtonsContainer{display:flex;flex-direction:row;gap:1rem;flex-wrap:wrap}.uiActionButtonsContainer ::ng-deep button{display:flex;gap:1rem;align-items:center;justify-content:center}.uiActionButtonsContainer ::ng-deep .buttonWrapper{position:relative;width:fit-content;height:fit-content}.scrollableContent{flex:1;flex-wrap:nowrap;overflow-x:auto;overflow-y:visible;display:flex;scrollbar-width:none;padding:.5rem 0;align-items:center}.scrollableContent::-webkit-scrollbar{display:none!important}.verticalToolbar{display:flex;flex-direction:column}.verticalToolbar ::ng-deep ui-action-button,.verticalToolbar ::ng-deep button{width:100%;justify-content:flex-start}\n"], dependencies: [{ kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: UiActionButtonComponent, selector: "ui-action-button", inputs: ["disabled", "descriptor", "code", "addedCssClass", "addBasicClasses"], outputs: ["actionClick", "actionDoubleClick"] }, { kind: "component", type: MenuComponent, selector: "ui-tiered-menu", inputs: ["triggerAction", "isSubmenu"], outputs: ["actionClick", "submenuOpened"] }, { kind: "component", type: ThemeSelectorComponent, selector: "theme-selector", inputs: ["model"] }] }); }
6565
6736
  }
6566
6737
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: UiActionToolbarComponent, decorators: [{
6567
6738
  type: Component,
6568
- args: [{ selector: 'smart-ui-action-toolbar', template: "@if (isScrollable && scrollOnWrap) {\r\n <ui-action-button\r\n [disabled]=\"!isScrollable\"\r\n [descriptor]=\"buttonLeft\"\r\n (actionClick)=\"scrollLeft()\"\r\n (mousedown)=\"scrollStart('left')\"\r\n (mouseup)=\"stopScroll()\"\r\n (mouseleave)=\"stopScroll()\"\r\n (touchstart)=\"scrollStart('left')\"\r\n (touchend)=\"stopScroll()\"\r\n />\r\n}\r\n\r\n<div\r\n #container\r\n class=\"uiActionButtonsContainer\"\r\n [ngClass]=\"{\r\n scrollableContent: scrollOnWrap,\r\n verticalToolbar: isVertical,\r\n }\"\r\n>\r\n <ng-container *ngFor=\"let uiActionModel of uiActionModelsWithDescriptions; trackBy: trackByFn\">\r\n @if (uiActionModel.uiAction.subActions && uiActionModel.uiAction.subActions.length > 0) {\r\n <ui-tiered-menu\r\n #menu\r\n [triggerAction]=\"uiActionModel.uiAction\"\r\n [subActions]=\"uiActionModel.uiAction.subActions!\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n ></ui-tiered-menu>\r\n } @else {\r\n <ui-action-button\r\n [descriptor]=\"uiActionModel.descriptor!\"\r\n [code]=\"uiActionModel.uiAction.code\"\r\n [disabled]=\"!!uiActionModel.uiAction.disabled\"\r\n [addedCssClass]=\"uiActionModel.cssClass\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n (actionDoubleClick)=\"onActionDoubleClicked($event, uiActionModel)\"\r\n >\r\n </ui-action-button>\r\n }\r\n </ng-container>\r\n</div>\r\n\r\n@if (isScrollable && scrollOnWrap) {\r\n <ui-action-button\r\n [disabled]=\"!isScrollable\"\r\n [descriptor]=\"buttonRight\"\r\n (actionClick)=\"scrollRight()\"\r\n (mousedown)=\"scrollStart('right')\"\r\n (mouseup)=\"stopScroll()\"\r\n (mouseleave)=\"stopScroll()\"\r\n (touchstart)=\"scrollStart('right')\"\r\n (touchend)=\"stopScroll()\"\r\n />\r\n}\r\n", styles: [":host:has(.uiActionButtonsContainer.scrollableContent){display:flex;flex-direction:row;justify-content:space-between;gap:.5rem;width:100%;align-items:center}.uiActionButtonsContainer{display:flex;flex-direction:row;gap:1rem;flex-wrap:wrap}.uiActionButtonsContainer ::ng-deep button{display:flex;gap:1rem;align-items:center;justify-content:center}.uiActionButtonsContainer ::ng-deep .buttonWrapper{position:relative;width:fit-content;height:fit-content}.scrollableContent{flex:1;flex-wrap:nowrap;overflow-x:auto;overflow-y:visible;display:flex;scrollbar-width:none;padding:.5rem 0;align-items:center}.scrollableContent::-webkit-scrollbar{display:none!important}.verticalToolbar{display:flex;flex-direction:column}.verticalToolbar ::ng-deep ui-action-button,.verticalToolbar ::ng-deep button{width:100%;justify-content:flex-start}\n"] }]
6739
+ args: [{ selector: 'smart-ui-action-toolbar', template: "@if (isScrollable && scrollOnWrap) {\r\n <ui-action-button\r\n [disabled]=\"!isScrollable\"\r\n [descriptor]=\"buttonLeft\"\r\n (actionClick)=\"scrollLeft()\"\r\n (mousedown)=\"scrollStart('left')\"\r\n (mouseup)=\"stopScroll()\"\r\n (mouseleave)=\"stopScroll()\"\r\n (touchstart)=\"scrollStart('left')\"\r\n (touchend)=\"stopScroll()\"\r\n />\r\n}\r\n\r\n<div\r\n #container\r\n class=\"uiActionButtonsContainer\"\r\n [ngClass]=\"{\r\n scrollableContent: scrollOnWrap,\r\n verticalToolbar: isVertical,\r\n }\"\r\n>\r\n <ng-container *ngFor=\"let uiActionModel of uiActionModelsWithDescriptions; trackBy: trackByFn\">\r\n @if (uiActionModel.uiAction.code === 'themeSelector') {\r\n <theme-selector [model]=\"uiActionModel\"></theme-selector>\r\n } @else if (uiActionModel.uiAction.subActions && uiActionModel.uiAction.subActions.length > 0) {\r\n <ui-tiered-menu\r\n #menu\r\n [triggerAction]=\"uiActionModel.uiAction\"\r\n [subActions]=\"uiActionModel.uiAction.subActions!\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n ></ui-tiered-menu>\r\n } @else {\r\n <ui-action-button\r\n [descriptor]=\"uiActionModel.descriptor!\"\r\n [code]=\"uiActionModel.uiAction.code\"\r\n [disabled]=\"!!uiActionModel.uiAction.disabled\"\r\n [addedCssClass]=\"uiActionModel.cssClass\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n (actionDoubleClick)=\"onActionDoubleClicked($event, uiActionModel)\"\r\n >\r\n </ui-action-button>\r\n }\r\n </ng-container>\r\n</div>\r\n\r\n@if (isScrollable && scrollOnWrap) {\r\n <ui-action-button\r\n [disabled]=\"!isScrollable\"\r\n [descriptor]=\"buttonRight\"\r\n (actionClick)=\"scrollRight()\"\r\n (mousedown)=\"scrollStart('right')\"\r\n (mouseup)=\"stopScroll()\"\r\n (mouseleave)=\"stopScroll()\"\r\n (touchstart)=\"scrollStart('right')\"\r\n (touchend)=\"stopScroll()\"\r\n />\r\n}\r\n", styles: [":host:has(.uiActionButtonsContainer.scrollableContent){display:flex;flex-direction:row;justify-content:space-between;gap:.5rem;width:100%;align-items:center}.uiActionButtonsContainer{display:flex;flex-direction:row;gap:1rem;flex-wrap:wrap}.uiActionButtonsContainer ::ng-deep button{display:flex;gap:1rem;align-items:center;justify-content:center}.uiActionButtonsContainer ::ng-deep .buttonWrapper{position:relative;width:fit-content;height:fit-content}.scrollableContent{flex:1;flex-wrap:nowrap;overflow-x:auto;overflow-y:visible;display:flex;scrollbar-width:none;padding:.5rem 0;align-items:center}.scrollableContent::-webkit-scrollbar{display:none!important}.verticalToolbar{display:flex;flex-direction:column}.verticalToolbar ::ng-deep ui-action-button,.verticalToolbar ::ng-deep button{width:100%;justify-content:flex-start}\n"] }]
6569
6740
  }], ctorParameters: () => [{ type: UiActionService }, { type: i0.Injector }, { type: i0.ChangeDetectorRef }, { type: ComponentLibrary, decorators: [{
6570
6741
  type: Inject,
6571
6742
  args: [COMPONENT_LIBRARY]
@@ -7600,11 +7771,11 @@ class FileEditorToolbarComponent extends UiActionToolbarComponent {
7600
7771
  await super.fireAction(uiActionModel);
7601
7772
  }
7602
7773
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: FileEditorToolbarComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
7603
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: FileEditorToolbarComponent, selector: "file-editor-toolbar", inputs: { dataUri: "dataUri" }, outputs: { actionEvent: "actionEvent" }, usesInheritance: true, ngImport: i0, template: "@if (isScrollable && scrollOnWrap) {\r\n <ui-action-button\r\n [disabled]=\"!isScrollable\"\r\n [descriptor]=\"buttonLeft\"\r\n (actionClick)=\"scrollLeft()\"\r\n (mousedown)=\"scrollStart('left')\"\r\n (mouseup)=\"stopScroll()\"\r\n (mouseleave)=\"stopScroll()\"\r\n (touchstart)=\"scrollStart('left')\"\r\n (touchend)=\"stopScroll()\"\r\n />\r\n}\r\n\r\n<div\r\n #container\r\n class=\"uiActionButtonsContainer\"\r\n [ngClass]=\"{\r\n scrollableContent: scrollOnWrap,\r\n verticalToolbar: isVertical,\r\n }\"\r\n>\r\n <ng-container *ngFor=\"let uiActionModel of uiActionModelsWithDescriptions; trackBy: trackByFn\">\r\n @if (uiActionModel.uiAction.subActions && uiActionModel.uiAction.subActions.length > 0) {\r\n <ui-tiered-menu\r\n #menu\r\n [triggerAction]=\"uiActionModel.uiAction\"\r\n [subActions]=\"uiActionModel.uiAction.subActions!\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n ></ui-tiered-menu>\r\n } @else {\r\n <ui-action-button\r\n [descriptor]=\"uiActionModel.descriptor!\"\r\n [code]=\"uiActionModel.uiAction.code\"\r\n [disabled]=\"!!uiActionModel.uiAction.disabled\"\r\n [addedCssClass]=\"uiActionModel.cssClass\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n (actionDoubleClick)=\"onActionDoubleClicked($event, uiActionModel)\"\r\n >\r\n </ui-action-button>\r\n }\r\n </ng-container>\r\n</div>\r\n\r\n@if (isScrollable && scrollOnWrap) {\r\n <ui-action-button\r\n [disabled]=\"!isScrollable\"\r\n [descriptor]=\"buttonRight\"\r\n (actionClick)=\"scrollRight()\"\r\n (mousedown)=\"scrollStart('right')\"\r\n (mouseup)=\"stopScroll()\"\r\n (mouseleave)=\"stopScroll()\"\r\n (touchstart)=\"scrollStart('right')\"\r\n (touchend)=\"stopScroll()\"\r\n />\r\n}\r\n", styles: [":host:has(.uiActionButtonsContainer.scrollableContent){display:flex;flex-direction:row;justify-content:space-between;gap:.5rem;width:100%;align-items:center}.uiActionButtonsContainer{display:flex;flex-direction:row;gap:1rem;flex-wrap:wrap}.uiActionButtonsContainer ::ng-deep button{display:flex;gap:1rem;align-items:center;justify-content:center}.uiActionButtonsContainer ::ng-deep .buttonWrapper{position:relative;width:fit-content;height:fit-content}.scrollableContent{flex:1;flex-wrap:nowrap;overflow-x:auto;overflow-y:visible;display:flex;scrollbar-width:none;padding:.5rem 0;align-items:center}.scrollableContent::-webkit-scrollbar{display:none!important}.verticalToolbar{display:flex;flex-direction:column}.verticalToolbar ::ng-deep ui-action-button,.verticalToolbar ::ng-deep button{width:100%;justify-content:flex-start}\n"], dependencies: [{ kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: UiActionButtonComponent, selector: "ui-action-button", inputs: ["disabled", "descriptor", "code", "addedCssClass", "addBasicClasses"], outputs: ["actionClick", "actionDoubleClick"] }, { kind: "component", type: MenuComponent, selector: "ui-tiered-menu", inputs: ["triggerAction", "isSubmenu"], outputs: ["actionClick", "submenuOpened"] }] }); }
7774
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.11", type: FileEditorToolbarComponent, selector: "file-editor-toolbar", inputs: { dataUri: "dataUri" }, outputs: { actionEvent: "actionEvent" }, usesInheritance: true, ngImport: i0, template: "@if (isScrollable && scrollOnWrap) {\r\n <ui-action-button\r\n [disabled]=\"!isScrollable\"\r\n [descriptor]=\"buttonLeft\"\r\n (actionClick)=\"scrollLeft()\"\r\n (mousedown)=\"scrollStart('left')\"\r\n (mouseup)=\"stopScroll()\"\r\n (mouseleave)=\"stopScroll()\"\r\n (touchstart)=\"scrollStart('left')\"\r\n (touchend)=\"stopScroll()\"\r\n />\r\n}\r\n\r\n<div\r\n #container\r\n class=\"uiActionButtonsContainer\"\r\n [ngClass]=\"{\r\n scrollableContent: scrollOnWrap,\r\n verticalToolbar: isVertical,\r\n }\"\r\n>\r\n <ng-container *ngFor=\"let uiActionModel of uiActionModelsWithDescriptions; trackBy: trackByFn\">\r\n @if (uiActionModel.uiAction.code === 'themeSelector') {\r\n <theme-selector [model]=\"uiActionModel\"></theme-selector>\r\n } @else if (uiActionModel.uiAction.subActions && uiActionModel.uiAction.subActions.length > 0) {\r\n <ui-tiered-menu\r\n #menu\r\n [triggerAction]=\"uiActionModel.uiAction\"\r\n [subActions]=\"uiActionModel.uiAction.subActions!\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n ></ui-tiered-menu>\r\n } @else {\r\n <ui-action-button\r\n [descriptor]=\"uiActionModel.descriptor!\"\r\n [code]=\"uiActionModel.uiAction.code\"\r\n [disabled]=\"!!uiActionModel.uiAction.disabled\"\r\n [addedCssClass]=\"uiActionModel.cssClass\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n (actionDoubleClick)=\"onActionDoubleClicked($event, uiActionModel)\"\r\n >\r\n </ui-action-button>\r\n }\r\n </ng-container>\r\n</div>\r\n\r\n@if (isScrollable && scrollOnWrap) {\r\n <ui-action-button\r\n [disabled]=\"!isScrollable\"\r\n [descriptor]=\"buttonRight\"\r\n (actionClick)=\"scrollRight()\"\r\n (mousedown)=\"scrollStart('right')\"\r\n (mouseup)=\"stopScroll()\"\r\n (mouseleave)=\"stopScroll()\"\r\n (touchstart)=\"scrollStart('right')\"\r\n (touchend)=\"stopScroll()\"\r\n />\r\n}\r\n", styles: [":host:has(.uiActionButtonsContainer.scrollableContent){display:flex;flex-direction:row;justify-content:space-between;gap:.5rem;width:100%;align-items:center}.uiActionButtonsContainer{display:flex;flex-direction:row;gap:1rem;flex-wrap:wrap}.uiActionButtonsContainer ::ng-deep button{display:flex;gap:1rem;align-items:center;justify-content:center}.uiActionButtonsContainer ::ng-deep .buttonWrapper{position:relative;width:fit-content;height:fit-content}.scrollableContent{flex:1;flex-wrap:nowrap;overflow-x:auto;overflow-y:visible;display:flex;scrollbar-width:none;padding:.5rem 0;align-items:center}.scrollableContent::-webkit-scrollbar{display:none!important}.verticalToolbar{display:flex;flex-direction:column}.verticalToolbar ::ng-deep ui-action-button,.verticalToolbar ::ng-deep button{width:100%;justify-content:flex-start}\n"], dependencies: [{ kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: UiActionButtonComponent, selector: "ui-action-button", inputs: ["disabled", "descriptor", "code", "addedCssClass", "addBasicClasses"], outputs: ["actionClick", "actionDoubleClick"] }, { kind: "component", type: MenuComponent, selector: "ui-tiered-menu", inputs: ["triggerAction", "isSubmenu"], outputs: ["actionClick", "submenuOpened"] }, { kind: "component", type: ThemeSelectorComponent, selector: "theme-selector", inputs: ["model"] }] }); }
7604
7775
  }
7605
7776
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImport: i0, type: FileEditorToolbarComponent, decorators: [{
7606
7777
  type: Component,
7607
- args: [{ selector: 'file-editor-toolbar', template: "@if (isScrollable && scrollOnWrap) {\r\n <ui-action-button\r\n [disabled]=\"!isScrollable\"\r\n [descriptor]=\"buttonLeft\"\r\n (actionClick)=\"scrollLeft()\"\r\n (mousedown)=\"scrollStart('left')\"\r\n (mouseup)=\"stopScroll()\"\r\n (mouseleave)=\"stopScroll()\"\r\n (touchstart)=\"scrollStart('left')\"\r\n (touchend)=\"stopScroll()\"\r\n />\r\n}\r\n\r\n<div\r\n #container\r\n class=\"uiActionButtonsContainer\"\r\n [ngClass]=\"{\r\n scrollableContent: scrollOnWrap,\r\n verticalToolbar: isVertical,\r\n }\"\r\n>\r\n <ng-container *ngFor=\"let uiActionModel of uiActionModelsWithDescriptions; trackBy: trackByFn\">\r\n @if (uiActionModel.uiAction.subActions && uiActionModel.uiAction.subActions.length > 0) {\r\n <ui-tiered-menu\r\n #menu\r\n [triggerAction]=\"uiActionModel.uiAction\"\r\n [subActions]=\"uiActionModel.uiAction.subActions!\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n ></ui-tiered-menu>\r\n } @else {\r\n <ui-action-button\r\n [descriptor]=\"uiActionModel.descriptor!\"\r\n [code]=\"uiActionModel.uiAction.code\"\r\n [disabled]=\"!!uiActionModel.uiAction.disabled\"\r\n [addedCssClass]=\"uiActionModel.cssClass\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n (actionDoubleClick)=\"onActionDoubleClicked($event, uiActionModel)\"\r\n >\r\n </ui-action-button>\r\n }\r\n </ng-container>\r\n</div>\r\n\r\n@if (isScrollable && scrollOnWrap) {\r\n <ui-action-button\r\n [disabled]=\"!isScrollable\"\r\n [descriptor]=\"buttonRight\"\r\n (actionClick)=\"scrollRight()\"\r\n (mousedown)=\"scrollStart('right')\"\r\n (mouseup)=\"stopScroll()\"\r\n (mouseleave)=\"stopScroll()\"\r\n (touchstart)=\"scrollStart('right')\"\r\n (touchend)=\"stopScroll()\"\r\n />\r\n}\r\n", styles: [":host:has(.uiActionButtonsContainer.scrollableContent){display:flex;flex-direction:row;justify-content:space-between;gap:.5rem;width:100%;align-items:center}.uiActionButtonsContainer{display:flex;flex-direction:row;gap:1rem;flex-wrap:wrap}.uiActionButtonsContainer ::ng-deep button{display:flex;gap:1rem;align-items:center;justify-content:center}.uiActionButtonsContainer ::ng-deep .buttonWrapper{position:relative;width:fit-content;height:fit-content}.scrollableContent{flex:1;flex-wrap:nowrap;overflow-x:auto;overflow-y:visible;display:flex;scrollbar-width:none;padding:.5rem 0;align-items:center}.scrollableContent::-webkit-scrollbar{display:none!important}.verticalToolbar{display:flex;flex-direction:column}.verticalToolbar ::ng-deep ui-action-button,.verticalToolbar ::ng-deep button{width:100%;justify-content:flex-start}\n"] }]
7778
+ args: [{ selector: 'file-editor-toolbar', template: "@if (isScrollable && scrollOnWrap) {\r\n <ui-action-button\r\n [disabled]=\"!isScrollable\"\r\n [descriptor]=\"buttonLeft\"\r\n (actionClick)=\"scrollLeft()\"\r\n (mousedown)=\"scrollStart('left')\"\r\n (mouseup)=\"stopScroll()\"\r\n (mouseleave)=\"stopScroll()\"\r\n (touchstart)=\"scrollStart('left')\"\r\n (touchend)=\"stopScroll()\"\r\n />\r\n}\r\n\r\n<div\r\n #container\r\n class=\"uiActionButtonsContainer\"\r\n [ngClass]=\"{\r\n scrollableContent: scrollOnWrap,\r\n verticalToolbar: isVertical,\r\n }\"\r\n>\r\n <ng-container *ngFor=\"let uiActionModel of uiActionModelsWithDescriptions; trackBy: trackByFn\">\r\n @if (uiActionModel.uiAction.code === 'themeSelector') {\r\n <theme-selector [model]=\"uiActionModel\"></theme-selector>\r\n } @else if (uiActionModel.uiAction.subActions && uiActionModel.uiAction.subActions.length > 0) {\r\n <ui-tiered-menu\r\n #menu\r\n [triggerAction]=\"uiActionModel.uiAction\"\r\n [subActions]=\"uiActionModel.uiAction.subActions!\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n ></ui-tiered-menu>\r\n } @else {\r\n <ui-action-button\r\n [descriptor]=\"uiActionModel.descriptor!\"\r\n [code]=\"uiActionModel.uiAction.code\"\r\n [disabled]=\"!!uiActionModel.uiAction.disabled\"\r\n [addedCssClass]=\"uiActionModel.cssClass\"\r\n (actionClick)=\"onActionClicked($event, uiActionModel)\"\r\n (actionDoubleClick)=\"onActionDoubleClicked($event, uiActionModel)\"\r\n >\r\n </ui-action-button>\r\n }\r\n </ng-container>\r\n</div>\r\n\r\n@if (isScrollable && scrollOnWrap) {\r\n <ui-action-button\r\n [disabled]=\"!isScrollable\"\r\n [descriptor]=\"buttonRight\"\r\n (actionClick)=\"scrollRight()\"\r\n (mousedown)=\"scrollStart('right')\"\r\n (mouseup)=\"stopScroll()\"\r\n (mouseleave)=\"stopScroll()\"\r\n (touchstart)=\"scrollStart('right')\"\r\n (touchend)=\"stopScroll()\"\r\n />\r\n}\r\n", styles: [":host:has(.uiActionButtonsContainer.scrollableContent){display:flex;flex-direction:row;justify-content:space-between;gap:.5rem;width:100%;align-items:center}.uiActionButtonsContainer{display:flex;flex-direction:row;gap:1rem;flex-wrap:wrap}.uiActionButtonsContainer ::ng-deep button{display:flex;gap:1rem;align-items:center;justify-content:center}.uiActionButtonsContainer ::ng-deep .buttonWrapper{position:relative;width:fit-content;height:fit-content}.scrollableContent{flex:1;flex-wrap:nowrap;overflow-x:auto;overflow-y:visible;display:flex;scrollbar-width:none;padding:.5rem 0;align-items:center}.scrollableContent::-webkit-scrollbar{display:none!important}.verticalToolbar{display:flex;flex-direction:column}.verticalToolbar ::ng-deep ui-action-button,.verticalToolbar ::ng-deep button{width:100%;justify-content:flex-start}\n"] }]
7608
7779
  }], propDecorators: { dataUri: [{
7609
7780
  type: Input
7610
7781
  }], actionEvent: [{
@@ -12865,7 +13036,8 @@ class SmartViewContextModule {
12865
13036
  VoiceRecordWidgetComponent,
12866
13037
  PhotoCaptureWidgetComponent,
12867
13038
  PrimeFileUploaderComponent,
12868
- SmartEmbeddedSlotDirective], imports: [CommonModule,
13039
+ SmartEmbeddedSlotDirective,
13040
+ ThemeSelectorComponent], imports: [CommonModule,
12869
13041
  HttpClientModule,
12870
13042
  MatCommonModule,
12871
13043
  MatButtonModule,
@@ -13042,6 +13214,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.11", ngImpo
13042
13214
  PhotoCaptureWidgetComponent,
13043
13215
  PrimeFileUploaderComponent,
13044
13216
  SmartEmbeddedSlotDirective,
13217
+ ThemeSelectorComponent,
13045
13218
  ],
13046
13219
  imports: [
13047
13220
  CommonModule,
@@ -13323,12 +13496,12 @@ class SmartBackendBootstrapService {
13323
13496
  this.viewContext.setMessageDialogName(config.messageDialogName ?? 'message-dialog');
13324
13497
  this.viewContext.setActionDescriptors(config.actionDescriptors);
13325
13498
  this.viewContext.openSmartLink.subscribe(([channel, uuid]) => {
13326
- this.handleSmartLink(channel);
13499
+ this.handleSmartLink(channel, uuid);
13327
13500
  });
13328
13501
  }
13329
- async handleSmartLink(channel) {
13502
+ async handleSmartLink(channel, uuid) {
13330
13503
  if (this.config?.onSmartLink) {
13331
- await this.config.onSmartLink(channel);
13504
+ await this.config.onSmartLink(channel, uuid);
13332
13505
  return;
13333
13506
  }
13334
13507
  // Default: simply unblock showPublishedView's `await openSmartLink.toPromise()`.