aril 2.0.1-dev.3 → 2.0.1-dev.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/boot/bridge/src/mfe-bridge.d.ts +33 -0
- package/boot/config/apps/src/interfaces.d.ts +7 -1
- package/boot/config/apps/src/route-close.service.d.ts +8 -3
- package/boot/config/apps/src/route-permissions.d.ts +2 -2
- package/esm2022/boot/bridge/src/mfe-bridge.mjs +18 -1
- package/esm2022/boot/config/api/src/interfaces.mjs +3 -2
- package/esm2022/boot/config/apps/src/apps.service.mjs +2 -2
- package/esm2022/boot/config/apps/src/custom-route-reuse-strategy.class.mjs +4 -4
- package/esm2022/boot/config/apps/src/interfaces.mjs +2 -1
- package/esm2022/boot/config/apps/src/route-close.service.mjs +11 -4
- package/esm2022/boot/config/apps/src/route-permissions.mjs +24 -6
- package/esm2022/boot/config/plugins/src/plugins.service.mjs +7 -5
- package/esm2022/boot/host/src/bootstrap.mjs +5 -3
- package/esm2022/boot/mfe/src/bootstrap.mjs +15 -3
- package/esm2022/http/index.mjs +1 -2
- package/esm2022/http/src/serviceBase.mjs +4 -4
- package/esm2022/http/src/serviceStateMethods.mjs +9 -1
- package/esm2022/keycloak/src/auth.interceptor.mjs +5 -2
- package/esm2022/selection/aril-selection.mjs +5 -0
- package/esm2022/selection/index.mjs +2 -0
- package/esm2022/selection/src/interfaces.mjs +2 -0
- package/esm2022/selection/src/selection-group.service.mjs +195 -0
- package/esm2022/theme/layout/app/profileSidebar/modals/edit-profile-modal/edit-profile-modal.component.mjs +2 -2
- package/esm2022/theme/layout/index.mjs +4 -2
- package/esm2022/theme/layout/service/breadcrumb-publisher.service.mjs +12 -4
- package/esm2022/theme/layout/service/interfaces/interfaces.mjs +1 -1
- package/esm2022/ui/button/index.mjs +1 -2
- package/esm2022/ui/button/src/button.component.mjs +5 -2
- package/esm2022/ui/charts/index.mjs +1 -11
- package/esm2022/ui/lib/index.mjs +1 -4
- package/esm2022/ui/lib/src/form/form-error-message.directive.mjs +9 -5
- package/esm2022/ui/multiSelect/src/multi-select.component.mjs +25 -25
- package/esm2022/ui/relativeDateSelector/src/relative-date-selector.component.mjs +2 -2
- package/esm2022/ui/selectBox/src/select-box.component.mjs +11 -34
- package/esm2022/ui/table/src/table.component.mjs +10 -5
- package/esm2022/ui/value/src/value.component.mjs +3 -2
- package/esm2022/ui-business/enumPicker/src/enum-picker.component.mjs +14 -6
- package/esm2022/util/activity/aril-util-activity.mjs +5 -0
- package/esm2022/util/activity/index.mjs +4 -0
- package/esm2022/util/activity/src/activity.constants.mjs +4 -0
- package/esm2022/util/activity/src/activity.service.mjs +218 -0
- package/esm2022/util/activity/src/activity.types.mjs +2 -0
- package/esm2022/util/block/src/block.mjs +9 -25
- package/esm2022/util/pub-sub/src/pub-sub.service.mjs +10 -5
- package/fesm2022/{aril-app.component-s14ruALV.mjs → aril-app.component-MjG_tPEe.mjs} +2 -1
- package/fesm2022/{aril-app.component-s14ruALV.mjs.map → aril-app.component-MjG_tPEe.mjs.map} +1 -1
- package/fesm2022/aril-boot-bridge.mjs +17 -0
- package/fesm2022/aril-boot-bridge.mjs.map +1 -1
- package/fesm2022/aril-boot-config-api.mjs +2 -1
- package/fesm2022/aril-boot-config-api.mjs.map +1 -1
- package/fesm2022/aril-boot-config-apps.mjs +36 -12
- package/fesm2022/aril-boot-config-apps.mjs.map +1 -1
- package/fesm2022/aril-boot-config-plugins.mjs +6 -4
- package/fesm2022/aril-boot-config-plugins.mjs.map +1 -1
- package/fesm2022/aril-boot-host.mjs +4 -2
- package/fesm2022/aril-boot-host.mjs.map +1 -1
- package/fesm2022/{aril-boot-mfe-app.component-AS4MzEo2.mjs → aril-boot-mfe-app.component-DtspQ3J8.mjs} +3 -2
- package/fesm2022/{aril-boot-mfe-app.component-AS4MzEo2.mjs.map → aril-boot-mfe-app.component-DtspQ3J8.mjs.map} +1 -1
- package/fesm2022/{aril-boot-mfe-aril-boot-mfe-Ui9Cv3UC.mjs → aril-boot-mfe-aril-boot-mfe-lovoFcgw.mjs} +16 -4
- package/fesm2022/aril-boot-mfe-aril-boot-mfe-lovoFcgw.mjs.map +1 -0
- package/fesm2022/aril-boot-mfe.mjs +2 -1
- package/fesm2022/aril-boot-mfe.mjs.map +1 -1
- package/fesm2022/aril-http.mjs +11 -7
- package/fesm2022/aril-http.mjs.map +1 -1
- package/fesm2022/aril-keycloak.mjs +4 -1
- package/fesm2022/aril-keycloak.mjs.map +1 -1
- package/fesm2022/aril-selection.mjs +202 -0
- package/fesm2022/aril-selection.mjs.map +1 -0
- package/fesm2022/aril-theme-layout.mjs +14 -66
- package/fesm2022/aril-theme-layout.mjs.map +1 -1
- package/fesm2022/aril-ui-business-enumPicker.mjs +14 -6
- package/fesm2022/aril-ui-business-enumPicker.mjs.map +1 -1
- package/fesm2022/aril-ui-button.mjs +5 -17
- package/fesm2022/aril-ui-button.mjs.map +1 -1
- package/fesm2022/aril-ui-charts.mjs +4 -1302
- package/fesm2022/aril-ui-charts.mjs.map +1 -1
- package/fesm2022/aril-ui-lib.mjs +10 -98
- package/fesm2022/aril-ui-lib.mjs.map +1 -1
- package/fesm2022/aril-ui-multiSelect.mjs +24 -24
- package/fesm2022/aril-ui-multiSelect.mjs.map +1 -1
- package/fesm2022/aril-ui-relativeDateSelector.mjs +1 -1
- package/fesm2022/aril-ui-relativeDateSelector.mjs.map +1 -1
- package/fesm2022/aril-ui-selectBox.mjs +10 -33
- package/fesm2022/aril-ui-selectBox.mjs.map +1 -1
- package/fesm2022/aril-ui-table.mjs +9 -4
- package/fesm2022/aril-ui-table.mjs.map +1 -1
- package/fesm2022/aril-ui-value.mjs +2 -1
- package/fesm2022/aril-ui-value.mjs.map +1 -1
- package/fesm2022/aril-util-activity.mjs +228 -0
- package/fesm2022/aril-util-activity.mjs.map +1 -0
- package/fesm2022/aril-util-block.mjs +9 -25
- package/fesm2022/aril-util-block.mjs.map +1 -1
- package/fesm2022/aril-util-pub-sub.mjs +9 -4
- package/fesm2022/aril-util-pub-sub.mjs.map +1 -1
- package/fesm2022/aril.mjs +18 -5
- package/fesm2022/aril.mjs.map +1 -1
- package/http/index.d.ts +0 -1
- package/http/src/serviceStateMethods.d.ts +1 -0
- package/package.json +210 -234
- package/scripts/mf-shared.js +47 -0
- package/selection/index.d.ts +1 -0
- package/selection/src/interfaces.d.ts +8 -0
- package/{theme/layout/service → selection/src}/selection-group.service.d.ts +9 -5
- package/theme/layout/index.d.ts +1 -1
- package/theme/layout/index.ts +3 -1
- package/theme/layout/service/breadcrumb-publisher.service.ts +18 -8
- package/theme/layout/service/interfaces/interfaces.d.ts +3 -17
- package/theme/layout/service/interfaces/interfaces.ts +6 -18
- package/ui/button/index.d.ts +0 -1
- package/ui/button/src/button.component.d.ts +2 -0
- package/ui/charts/index.d.ts +0 -10
- package/ui/lib/index.d.ts +0 -3
- package/ui/lib/src/form/form-error-message.directive.d.ts +4 -3
- package/ui/multiSelect/src/multi-select.component.d.ts +4 -5
- package/ui/selectBox/src/select-box.component.d.ts +2 -7
- package/ui/table/src/table.component.d.ts +3 -2
- package/util/activity/index.d.ts +3 -0
- package/util/activity/src/activity.constants.d.ts +3 -0
- package/util/activity/src/activity.service.d.ts +35 -0
- package/util/activity/src/activity.types.d.ts +13 -0
- package/util/block/src/block.d.ts +4 -10
- package/util/pub-sub/src/pub-sub.service.d.ts +2 -2
- package/esm2022/http/src/serviceMockBase.mjs +0 -4
- package/esm2022/theme/layout/service/selection-group.service.mjs +0 -65
- package/esm2022/ui/button/src/split-button.component.mjs +0 -18
- package/esm2022/ui/charts/src/amCharts/column/column-chart.component.mjs +0 -124
- package/esm2022/ui/charts/src/amCharts/line/line-chart.component.mjs +0 -164
- package/esm2022/ui/charts/src/amCharts/pie/pie-chart.component.mjs +0 -116
- package/esm2022/ui/charts/src/highCharts/area/area-chart.component.mjs +0 -114
- package/esm2022/ui/charts/src/highCharts/bar/bar-chart.component.mjs +0 -100
- package/esm2022/ui/charts/src/highCharts/column/column-chart.component.mjs +0 -117
- package/esm2022/ui/charts/src/highCharts/heatmap/heatMap-chart.component.mjs +0 -252
- package/esm2022/ui/charts/src/highCharts/line/line-chart-series.component.mjs +0 -89
- package/esm2022/ui/charts/src/highCharts/line/line-chart.component.mjs +0 -82
- package/esm2022/ui/charts/src/highCharts/pie/pie-chart.component.mjs +0 -137
- package/esm2022/ui/charts/src/theme/theme.mjs +0 -54
- package/esm2022/ui/dxEditor/aril-ui-dxEditor.mjs +0 -5
- package/esm2022/ui/dxEditor/index.mjs +0 -2
- package/esm2022/ui/dxEditor/src/dx-editor.component.mjs +0 -26
- package/esm2022/ui/lib/src/form/form-field-builder.mjs +0 -23
- package/esm2022/ui/lib/src/input/common-input-validators.service.mjs +0 -49
- package/esm2022/ui/lib/src/input/input-disabled.directive.mjs +0 -25
- package/esm2022/ui/overlayPanel/aril-ui-overlayPanel.mjs +0 -5
- package/esm2022/ui/overlayPanel/index.mjs +0 -2
- package/esm2022/ui/overlayPanel/src/overlay-panel.component.mjs +0 -20
- package/esm2022/ui/tooltip/aril-ui-tooltip.mjs +0 -5
- package/esm2022/ui/tooltip/index.mjs +0 -2
- package/esm2022/ui/tooltip/src/tooltip-component.mjs +0 -23
- package/esm2022/ui/treeTable/aril-ui-treeTable.mjs +0 -5
- package/esm2022/ui/treeTable/index.mjs +0 -2
- package/esm2022/ui/treeTable/src/tree-table.component.mjs +0 -55
- package/esm2022/ui-business/operation-types-dialog/aril-ui-business-operation-types-dialog.mjs +0 -5
- package/esm2022/ui-business/operation-types-dialog/index.mjs +0 -2
- package/esm2022/ui-business/operation-types-dialog/src/operation-types-dialog.component.mjs +0 -76
- package/esm2022/util/unwrap/aril-util-unwrap.mjs +0 -5
- package/esm2022/util/unwrap/index.mjs +0 -2
- package/esm2022/util/unwrap/src/unwrap-tag.directive.mjs +0 -24
- package/fesm2022/aril-boot-mfe-aril-boot-mfe-Ui9Cv3UC.mjs.map +0 -1
- package/fesm2022/aril-ui-business-operation-types-dialog.mjs +0 -83
- package/fesm2022/aril-ui-business-operation-types-dialog.mjs.map +0 -1
- package/fesm2022/aril-ui-dxEditor.mjs +0 -33
- package/fesm2022/aril-ui-dxEditor.mjs.map +0 -1
- package/fesm2022/aril-ui-overlayPanel.mjs +0 -27
- package/fesm2022/aril-ui-overlayPanel.mjs.map +0 -1
- package/fesm2022/aril-ui-tooltip.mjs +0 -30
- package/fesm2022/aril-ui-tooltip.mjs.map +0 -1
- package/fesm2022/aril-ui-treeTable.mjs +0 -62
- package/fesm2022/aril-ui-treeTable.mjs.map +0 -1
- package/fesm2022/aril-util-unwrap.mjs +0 -31
- package/fesm2022/aril-util-unwrap.mjs.map +0 -1
- package/http/src/serviceMockBase.d.ts +0 -6
- package/theme/layout/service/selection-group.service.ts +0 -73
- package/ui/button/src/split-button.component.d.ts +0 -8
- package/ui/charts/src/amCharts/column/column-chart.component.d.ts +0 -25
- package/ui/charts/src/amCharts/line/line-chart.component.d.ts +0 -26
- package/ui/charts/src/amCharts/pie/pie-chart.component.d.ts +0 -24
- package/ui/charts/src/highCharts/area/area-chart.component.d.ts +0 -20
- package/ui/charts/src/highCharts/bar/bar-chart.component.d.ts +0 -26
- package/ui/charts/src/highCharts/column/column-chart.component.d.ts +0 -28
- package/ui/charts/src/highCharts/heatmap/heatMap-chart.component.d.ts +0 -32
- package/ui/charts/src/highCharts/line/line-chart-series.component.d.ts +0 -21
- package/ui/charts/src/highCharts/line/line-chart.component.d.ts +0 -21
- package/ui/charts/src/highCharts/pie/pie-chart.component.d.ts +0 -27
- package/ui/charts/src/theme/theme.d.ts +0 -5
- package/ui/dxEditor/index.d.ts +0 -1
- package/ui/dxEditor/src/dx-editor.component.d.ts +0 -11
- package/ui/lib/src/form/form-field-builder.d.ts +0 -8
- package/ui/lib/src/input/common-input-validators.service.d.ts +0 -20
- package/ui/lib/src/input/input-disabled.directive.d.ts +0 -9
- package/ui/overlayPanel/index.d.ts +0 -1
- package/ui/overlayPanel/src/overlay-panel.component.d.ts +0 -8
- package/ui/tooltip/index.d.ts +0 -1
- package/ui/tooltip/src/tooltip-component.d.ts +0 -14
- package/ui/treeTable/index.d.ts +0 -1
- package/ui/treeTable/src/tree-table.component.d.ts +0 -21
- package/ui-business/operation-types-dialog/index.d.ts +0 -1
- package/ui-business/operation-types-dialog/src/operation-types-dialog.component.d.ts +0 -28
- package/util/unwrap/index.d.ts +0 -1
- package/util/unwrap/src/unwrap-tag.directive.d.ts +0 -9
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Thor MFE app'lerinin (host + tüm remote'lar) ORTAK Module Federation sharing politikası.
|
|
3
|
+
* Tek sahip: politika değişiklikleri (skip listesi, strictVersion vb.) yalnızca burada yapılır;
|
|
4
|
+
* tüm repoların webpack config'leri bu preset'i require eder — repo başına kopya/drift olmaz.
|
|
5
|
+
* (Drift'in maliyeti: tek bir remote farklı sharing rejimiyle kalırsa o remote'ta ikinci bir
|
|
6
|
+
* @angular/core yaşar → bridge signal reactivity'si ve DI class-identity sessizce kırılır.)
|
|
7
|
+
*
|
|
8
|
+
* Politika:
|
|
9
|
+
* - @angular/* (+ rxjs, transloco vb. tüm DİREKT package.json dep'leri) singleton shared →
|
|
10
|
+
* cross-MFE TEK @angular/core → bridge signal/effect reactivity'si MFE'ler arası çalışır.
|
|
11
|
+
* - `aril` SKIP (per-app): shared edilseydi entrypoint'leri farklı container'lardan çözülürdü
|
|
12
|
+
* (host önce `aril/provider`'ı yükler → host'un KeycloakService class'ı; remote `aril/boot/mfe`'yi
|
|
13
|
+
* yükler → remote'unki). keycloak-angular/primeng aril üzerinden TRANSITIVE geldiği için shareAll
|
|
14
|
+
* onları paylaşamaz (yalnızca direkt dep'leri okur) → iki ayrı class → DI uyuşmaz ("No provider
|
|
15
|
+
* for KeycloakService"). aril per-app olunca her app kendi tam aril'ini taşır → DI tutarlı;
|
|
16
|
+
* cross-MFE state globalThis bridge ile köprülenir (bkz. aril/boot/bridge).
|
|
17
|
+
* - Kütüphane default skip listeleri spread ile KORUNUR (custom array vermek ikisini de ezerdi):
|
|
18
|
+
* DEFAULT_SKIP_LIST = @softarc/* + @angular-architects/* (MF orkestrasyon runtime'ı MF üzerinden
|
|
19
|
+
* paylaşılmaz) + tslib + zone.js (eager polyfill → MF lazy shared ile "eager consumption" + NG0908).
|
|
20
|
+
* DEFAULT_SECONARIES_SKIP_LIST = @angular/*\/upgrade secondaries (@angular/upgrade kurulu değil).
|
|
21
|
+
* - `@angular-architects/module-federation-tools` SKIP: app'lerde direkt dep olduğundan shareAll
|
|
22
|
+
* onu paylaşırdı; kardeşleri default listede zaten skip. aril'in boot kodu import ettiğinden,
|
|
23
|
+
* singleton paylaşımda host'un versiyonu tüm remote'lara sessizce dayatılırdı — MF runtime
|
|
24
|
+
* ailesinin tamamı aril ile aynı mantıkla per-app kalır.
|
|
25
|
+
*
|
|
26
|
+
* Kullanım (webpack.config.js, app root'unda):
|
|
27
|
+
* const { arilMfShared } = require('./node_modules/aril/scripts/mf-shared.js');
|
|
28
|
+
* ...
|
|
29
|
+
* shared: arilMfShared()
|
|
30
|
+
*
|
|
31
|
+
* NOT: relative require ŞART — aril'in package.json `exports` haritası `./scripts/*` subpath'ini
|
|
32
|
+
* içermediğinden bare `require('aril/scripts/...')` ERR_PACKAGE_PATH_NOT_EXPORTED fırlatır.
|
|
33
|
+
*/
|
|
34
|
+
const { shareAll, DEFAULT_SKIP_LIST, DEFAULT_SECONARIES_SKIP_LIST } = require('@angular-architects/module-federation/webpack');
|
|
35
|
+
|
|
36
|
+
function arilMfShared() {
|
|
37
|
+
return shareAll(
|
|
38
|
+
{
|
|
39
|
+
singleton: true,
|
|
40
|
+
strictVersion: false,
|
|
41
|
+
requiredVersion: 'auto'
|
|
42
|
+
},
|
|
43
|
+
[...DEFAULT_SKIP_LIST, ...DEFAULT_SECONARIES_SKIP_LIST, '@angular-architects/module-federation-tools', 'aril']
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
module.exports = { arilMfShared };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './src/selection-group.service';
|
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
import { HttpClient } from '@angular/common/http';
|
|
2
|
-
import { SelectionGroupDTO } from '
|
|
2
|
+
import { SelectionGroupDTO } from 'aril/boot/bridge';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
4
|
export declare class SelectionGroupService {
|
|
5
|
-
private http;
|
|
5
|
+
private readonly http;
|
|
6
6
|
selectionGroups: import("@angular/core").WritableSignal<{
|
|
7
7
|
[key: string]: SelectionGroupDTO | null;
|
|
8
8
|
}>;
|
|
9
|
-
private loading;
|
|
10
|
-
private loaded;
|
|
9
|
+
private readonly loading;
|
|
10
|
+
private readonly loaded;
|
|
11
|
+
private readonly failures;
|
|
11
12
|
constructor(http: HttpClient);
|
|
13
|
+
private persistToLocalStorage;
|
|
12
14
|
private loadStatesFromLocalStorage;
|
|
15
|
+
private slimForStorage;
|
|
16
|
+
private invalidateStaleGroups;
|
|
13
17
|
fetchEnum(groupName: string, parentSelectionKey?: string): void;
|
|
14
|
-
isLoading(
|
|
18
|
+
isLoading(key: string): boolean;
|
|
15
19
|
static ɵfac: i0.ɵɵFactoryDeclaration<SelectionGroupService, never>;
|
|
16
20
|
static ɵprov: i0.ɵɵInjectableDeclaration<SelectionGroupService>;
|
|
17
21
|
}
|
package/theme/layout/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export * from './app/layout/app.layout.component';
|
|
2
2
|
export * from './app/layout/mfe.layout.component';
|
|
3
3
|
export * from './service/app.menu.service';
|
|
4
|
-
export
|
|
4
|
+
export { SelectionGroupService } from 'aril/selection';
|
|
5
5
|
export * from './service/breadcrumb.service';
|
|
6
6
|
export * from './service/app.layout.service';
|
|
7
7
|
export * from './app/favorite-pages/favorite-pages.service';
|
package/theme/layout/index.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
export * from './app/layout/app.layout.component';
|
|
2
2
|
export * from './app/layout/mfe.layout.component';
|
|
3
3
|
export * from './service/app.menu.service';
|
|
4
|
-
|
|
4
|
+
// SelectionGroupService aril/selection entry point'ine taşındı (theme/layout → selectBox circular'ını
|
|
5
|
+
// kırmak için). Mevcut tüketiciler aril/theme/layout'tan import etmeye devam etsin diye re-export edilir.
|
|
6
|
+
export { SelectionGroupService } from 'aril/selection';
|
|
5
7
|
export * from './service/breadcrumb.service';
|
|
6
8
|
export * from './service/app.layout.service';
|
|
7
9
|
export * from './app/favorite-pages/favorite-pages.service';
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Injectable, OnDestroy, effect, inject } from '@angular/core';
|
|
1
|
+
import { Injectable, OnDestroy, effect, inject, untracked } from '@angular/core';
|
|
2
2
|
import { ActivatedRouteSnapshot, NavigationEnd, Router } from '@angular/router';
|
|
3
3
|
|
|
4
4
|
import { Subscription, filter } from 'rxjs';
|
|
@@ -30,12 +30,19 @@ export class BreadcrumbPublisherService implements OnDestroy {
|
|
|
30
30
|
.pipe(filter((event) => event instanceof NavigationEnd))
|
|
31
31
|
.subscribe(() => this.publishFromCurrentRoute());
|
|
32
32
|
|
|
33
|
-
effect(
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
33
|
+
effect(
|
|
34
|
+
() => {
|
|
35
|
+
// keyValues sinyalini dinle; dinamik breadcrumb (örn. "{customerId}")
|
|
36
|
+
// değerleri sonradan geldikçe listeyi yeniden yayınla.
|
|
37
|
+
this.breadcrumbService.keyValues();
|
|
38
|
+
this.publishFromCurrentRoute();
|
|
39
|
+
},
|
|
40
|
+
// `publishFromCurrentRoute` → `publish` içinde `bridge.breadcrumbs.set` / `bridge.pageTitle.set`
|
|
41
|
+
// signal write yapar; effect içinden signal write default'ta NG0600 fırlatır. aril genelindeki
|
|
42
|
+
// effect'lerle aynı şekilde `allowSignalWrites` ile izin veriyoruz. (MF shared core öncesi
|
|
43
|
+
// cross-core split bu guard'ı maskeliyordu; tek core olunca yüzeye çıktı — davranış aynı.)
|
|
44
|
+
{ allowSignalWrites: true }
|
|
45
|
+
);
|
|
39
46
|
}
|
|
40
47
|
|
|
41
48
|
ngOnDestroy(): void {
|
|
@@ -77,7 +84,10 @@ export class BreadcrumbPublisherService implements OnDestroy {
|
|
|
77
84
|
bridge.breadcrumbs.set(breadcrumbs);
|
|
78
85
|
|
|
79
86
|
const lastLabel = breadcrumbs[breadcrumbs.length - 1]?.label ?? '';
|
|
80
|
-
|
|
87
|
+
// untracked ZORUNLU: publish, constructor'daki effect'in çağrı grafiğinde çalışır. Tracked
|
|
88
|
+
// okuma effect'i kendi yazdığı pageTitle'a abone eder; tab başına bir publisher instance
|
|
89
|
+
// olduğundan iki tab farklı title yazarak birbirini sonsuz döngüde tetiklerdi.
|
|
90
|
+
if (untracked(bridge.pageTitle) || lastLabel) {
|
|
81
91
|
bridge.pageTitle.set(lastLabel);
|
|
82
92
|
}
|
|
83
93
|
|
|
@@ -13,24 +13,10 @@ export interface Parameters {
|
|
|
13
13
|
}
|
|
14
14
|
export interface AdditionalProp {
|
|
15
15
|
}
|
|
16
|
-
export
|
|
17
|
-
|
|
16
|
+
export type { SelectionGroupDTO, SelectionItem } from 'aril/boot/bridge';
|
|
17
|
+
export interface SelectionGroupVersionDTO {
|
|
18
18
|
groupName: string;
|
|
19
|
-
|
|
20
|
-
groupComment: string;
|
|
21
|
-
loadStrategy: string;
|
|
22
|
-
dynamicQuery: string;
|
|
23
|
-
parentGroupId: number;
|
|
24
|
-
selectionItems: SelectionItem[];
|
|
25
|
-
}
|
|
26
|
-
export interface SelectionItem {
|
|
27
|
-
id: number;
|
|
28
|
-
groupId: number;
|
|
29
|
-
selectionKey: string;
|
|
30
|
-
selectionDisplay: string;
|
|
31
|
-
showOrder: number;
|
|
32
|
-
parentSelectionKey: string;
|
|
33
|
-
selectionMultiLanguageDisplays?: Record<string, string>;
|
|
19
|
+
version: number;
|
|
34
20
|
}
|
|
35
21
|
export interface Language {
|
|
36
22
|
name: string;
|
|
@@ -22,25 +22,13 @@ export interface Parameters {
|
|
|
22
22
|
|
|
23
23
|
export interface AdditionalProp {}
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
groupDescription: string;
|
|
29
|
-
groupComment: string;
|
|
30
|
-
loadStrategy: string;
|
|
31
|
-
dynamicQuery: string;
|
|
32
|
-
parentGroupId: number;
|
|
33
|
-
selectionItems: SelectionItem[];
|
|
34
|
-
}
|
|
25
|
+
// SelectionGroupDTO + SelectionItem bridge'de tanımlı (cache state orada yaşıyor); circular'ı önlemek
|
|
26
|
+
// için buradan re-export edilir — mevcut tüketiciler `aril/theme/layout`'tan import etmeye devam eder.
|
|
27
|
+
export type { SelectionGroupDTO, SelectionItem } from 'aril/boot/bridge';
|
|
35
28
|
|
|
36
|
-
export interface
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
selectionKey: string;
|
|
40
|
-
selectionDisplay: string;
|
|
41
|
-
showOrder: number;
|
|
42
|
-
parentSelectionKey: string;
|
|
43
|
-
selectionMultiLanguageDisplays?: Record<string, string>;
|
|
29
|
+
export interface SelectionGroupVersionDTO {
|
|
30
|
+
groupName: string;
|
|
31
|
+
version: number;
|
|
44
32
|
}
|
|
45
33
|
|
|
46
34
|
export interface Language {
|
package/ui/button/index.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { EventEmitter } from '@angular/core';
|
|
2
2
|
import { PrimeIcon } from 'aril/ui/lib';
|
|
3
|
+
import { ActivityService } from 'aril/util/activity';
|
|
3
4
|
import * as i0 from "@angular/core";
|
|
4
5
|
type Size = 'sm' | 'md' | 'lg';
|
|
5
6
|
type Colors = 'primary' | 'secondary' | 'success' | 'info' | 'warning' | 'help' | 'danger';
|
|
@@ -18,6 +19,7 @@ export declare class ButtonComponent {
|
|
|
18
19
|
iconPos: import("@angular/core").InputSignal<ButtonIconPosition, ButtonIconPosition>;
|
|
19
20
|
color: import("@angular/core").InputSignal<Colors, Colors>;
|
|
20
21
|
clickEvent: EventEmitter<Event>;
|
|
22
|
+
protected readonly activity: ActivityService;
|
|
21
23
|
_icon: import("@angular/core").Signal<string>;
|
|
22
24
|
_color: import("@angular/core").Signal<string>;
|
|
23
25
|
_styleClass: import("@angular/core").Signal<string>;
|
package/ui/charts/index.d.ts
CHANGED
|
@@ -1,12 +1,2 @@
|
|
|
1
|
-
export * from './src/amCharts/pie/pie-chart.component';
|
|
2
|
-
export * from './src/amCharts/column/column-chart.component';
|
|
3
|
-
export * from './src/amCharts/line/line-chart.component';
|
|
4
|
-
export * from './src/highCharts/pie/pie-chart.component';
|
|
5
|
-
export * from './src/highCharts/bar/bar-chart.component';
|
|
6
|
-
export * from './src/highCharts/column/column-chart.component';
|
|
7
|
-
export * from './src/highCharts/area/area-chart.component';
|
|
8
1
|
export * from './src/highCharts/line/line-chart-datetime-axis.component';
|
|
9
|
-
export * from './src/highCharts/line/line-chart-series.component';
|
|
10
|
-
export * as HighChartLine from './src/highCharts/line/line-chart.component';
|
|
11
2
|
export * from './src/highCharts/gauge/solid-gauge.component';
|
|
12
|
-
export * from './src/highCharts/heatmap/heatMap-chart.component';
|
package/ui/lib/index.d.ts
CHANGED
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
export * from './src/form/form-error-message.directive';
|
|
2
2
|
export * from './src/form/form-validation';
|
|
3
|
-
export * from './src/form/form-field-builder';
|
|
4
3
|
export * from './src/grid/flex-grid.directive';
|
|
5
4
|
export * from './src/grid/enum-color-picker.pipe';
|
|
6
5
|
export * from './src/input/baseInput';
|
|
7
|
-
export * from './src/input/common-input-validators.service';
|
|
8
6
|
export * from './src/input/dx-input-error-message.pipe';
|
|
9
|
-
export * from './src/input/input-disabled.directive';
|
|
10
7
|
export * from './src/input/input-error-message.pipe';
|
|
11
8
|
export * from './src/input/input-transforms';
|
|
12
9
|
export * from './src/input/value-accessor.directive';
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { ComponentRef, OnInit, ViewContainerRef } from '@angular/core';
|
|
1
|
+
import { ComponentRef, DestroyRef, OnInit, ViewContainerRef } from '@angular/core';
|
|
2
2
|
import { FormGroup } from '@angular/forms';
|
|
3
3
|
import { FormErrorMessagesComponent } from './form-error-message.component';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export declare class FormErrorMessageDirective implements OnInit {
|
|
6
|
-
private viewContainerRef;
|
|
7
|
-
|
|
6
|
+
private readonly viewContainerRef;
|
|
7
|
+
private readonly destroyRef;
|
|
8
|
+
constructor(viewContainerRef: ViewContainerRef, destroyRef: DestroyRef);
|
|
8
9
|
formErrorMessage: import("@angular/core").InputSignal<FormGroup<any>, FormGroup<any>>;
|
|
9
10
|
errorKeys: string[];
|
|
10
11
|
componentRef: ComponentRef<FormErrorMessagesComponent>;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { HttpClient } from '@angular/common/http';
|
|
2
1
|
import { TranslocoService } from '@ngneat/transloco';
|
|
2
|
+
import { SelectionGroupService } from 'aril/selection';
|
|
3
3
|
import { BaseInputComponent } from 'aril/ui/lib';
|
|
4
4
|
import { SelectBoxItem } from './interfaces';
|
|
5
5
|
import * as i0 from "@angular/core";
|
|
6
6
|
import * as i1 from "aril/ui/lib";
|
|
7
7
|
export declare class MultiSelectComponent extends BaseInputComponent {
|
|
8
|
-
private
|
|
8
|
+
private readonly selectionGroupService;
|
|
9
9
|
translocoService: TranslocoService;
|
|
10
10
|
options: import("@angular/core").InputSignal<[], []>;
|
|
11
11
|
optionLabel: import("@angular/core").InputSignal<string, string>;
|
|
@@ -19,10 +19,9 @@ export declare class MultiSelectComponent extends BaseInputComponent {
|
|
|
19
19
|
tooltipPosition: import("@angular/core").InputSignal<any, any>;
|
|
20
20
|
groupName: import("@angular/core").InputSignal<string, string>;
|
|
21
21
|
parentSelectionKey: import("@angular/core").InputSignal<null, null>;
|
|
22
|
-
selectionItems: import("@angular/core").WritableSignal<SelectBoxItem[] | null>;
|
|
23
22
|
showClear: import("@angular/core").InputSignal<boolean, boolean>;
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
selectionItems: import("@angular/core").Signal<SelectBoxItem[] | null>;
|
|
24
|
+
constructor(selectionGroupService: SelectionGroupService, translocoService: TranslocoService);
|
|
26
25
|
static ɵfac: i0.ɵɵFactoryDeclaration<MultiSelectComponent, never>;
|
|
27
26
|
static ɵcmp: i0.ɵɵComponentDeclaration<MultiSelectComponent, "aril-multi-select[ngModel], aril-multi-select[formControl], aril-multi-select[formControlName]", never, { "options": { "alias": "options"; "required": false; "isSignal": true; }; "optionLabel": { "alias": "optionLabel"; "required": false; "isSignal": true; }; "optionValue": { "alias": "optionValue"; "required": false; "isSignal": true; }; "defaultLabel": { "alias": "defaultLabel"; "required": false; "isSignal": true; }; "selectedItemsLabel": { "alias": "selectedItemsLabel"; "required": false; "isSignal": true; }; "appendTo": { "alias": "appendTo"; "required": false; "isSignal": true; }; "style": { "alias": "style"; "required": false; "isSignal": true; }; "styleClass": { "alias": "styleClass"; "required": false; "isSignal": true; }; "tooltip": { "alias": "tooltip"; "required": false; "isSignal": true; }; "tooltipPosition": { "alias": "tooltipPosition"; "required": false; "isSignal": true; }; "groupName": { "alias": "groupName"; "required": false; "isSignal": true; }; "parentSelectionKey": { "alias": "parentSelectionKey"; "required": false; "isSignal": true; }; "showClear": { "alias": "showClear"; "required": false; "isSignal": true; }; }, {}, never, never, true, [{ directive: typeof i1.ValueAccessorDirective; inputs: {}; outputs: {}; }]>;
|
|
28
27
|
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { HttpClient } from '@angular/common/http';
|
|
2
1
|
import { EventEmitter } from '@angular/core';
|
|
3
2
|
import { TranslocoService } from '@ngneat/transloco';
|
|
4
3
|
import { BaseInputComponent } from 'aril/ui/lib';
|
|
@@ -6,25 +5,21 @@ import { SelectBoxItem } from './interfaces';
|
|
|
6
5
|
import * as i0 from "@angular/core";
|
|
7
6
|
import * as i1 from "aril/ui/lib";
|
|
8
7
|
export declare class SelectBoxComponent extends BaseInputComponent {
|
|
9
|
-
private http;
|
|
10
8
|
translocoService: TranslocoService;
|
|
11
9
|
itemKey: import("@angular/core").InputSignal<string, string>;
|
|
12
10
|
itemText: import("@angular/core").InputSignal<string, string>;
|
|
13
|
-
groupName: import("@angular/core").InputSignal<string, string>;
|
|
14
11
|
parentSelectionKey: import("@angular/core").InputSignal<null, null>;
|
|
15
12
|
tabindex: import("@angular/core").InputSignal<number, number>;
|
|
16
13
|
items: import("@angular/core").InputSignal<SelectBoxItem[], SelectBoxItem[]>;
|
|
17
14
|
selectedItemText: string;
|
|
18
|
-
selectionItems: import("@angular/core").WritableSignal<SelectBoxItem[] | null>;
|
|
19
15
|
/** * @description when grouped = true, option item structure { key:string, items:[] } */
|
|
20
16
|
grouped: import("@angular/core").InputSignal<boolean, boolean>;
|
|
21
17
|
showClearButton: import("@angular/core").InputSignal<boolean, boolean>;
|
|
22
18
|
placeholder: import("@angular/core").InputSignal<string, string>;
|
|
23
19
|
searchExpr: import("@angular/core").InputSignal<string | string[], string | string[]>;
|
|
24
20
|
onSelectionChanged: EventEmitter<SelectBoxItem>;
|
|
25
|
-
constructor(
|
|
21
|
+
constructor(translocoService: TranslocoService);
|
|
26
22
|
setTitle(event?: any): void;
|
|
27
|
-
getSelectionItems(): Promise<void>;
|
|
28
23
|
static ɵfac: i0.ɵɵFactoryDeclaration<SelectBoxComponent, never>;
|
|
29
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<SelectBoxComponent, "aril-select-box[ngModel], aril-select-box[formControl], aril-select-box[formControlName]", never, { "itemKey": { "alias": "itemKey"; "required": false; "isSignal": true; }; "itemText": { "alias": "itemText"; "required": false; "isSignal": true; }; "
|
|
24
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<SelectBoxComponent, "aril-select-box[ngModel], aril-select-box[formControl], aril-select-box[formControlName]", never, { "itemKey": { "alias": "itemKey"; "required": false; "isSignal": true; }; "itemText": { "alias": "itemText"; "required": false; "isSignal": true; }; "parentSelectionKey": { "alias": "parentSelectionKey"; "required": false; "isSignal": true; }; "tabindex": { "alias": "tabindex"; "required": false; "isSignal": true; }; "items": { "alias": "items"; "required": true; "isSignal": true; }; "grouped": { "alias": "grouped"; "required": false; "isSignal": true; }; "showClearButton": { "alias": "showClearButton"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "searchExpr": { "alias": "searchExpr"; "required": false; "isSignal": true; }; }, { "onSelectionChanged": "onSelectionChanged"; }, never, never, true, [{ directive: typeof i1.ValueAccessorDirective; inputs: {}; outputs: {}; }]>;
|
|
30
25
|
}
|
|
@@ -65,7 +65,7 @@ export declare class TableComponent {
|
|
|
65
65
|
globalSearchValue?: string;
|
|
66
66
|
isAllSelected: boolean;
|
|
67
67
|
selectedRows: any;
|
|
68
|
-
pageOptions:
|
|
68
|
+
pageOptions: number[];
|
|
69
69
|
exportColumns: Array<{
|
|
70
70
|
title: string;
|
|
71
71
|
dataKey: string;
|
|
@@ -76,10 +76,11 @@ export declare class TableComponent {
|
|
|
76
76
|
private requestedEnumKeys;
|
|
77
77
|
ColumnFilterTypeEnum: typeof ColumnFilterTypeEnum;
|
|
78
78
|
sidebarVisible: boolean;
|
|
79
|
+
currentPageReportText: string;
|
|
79
80
|
constructor(translocoService: TranslocoService, selectionGroupService: SelectionGroupService);
|
|
80
81
|
private isInitialLoad;
|
|
81
82
|
ngOnChanges(changes: SimpleChanges): void;
|
|
82
|
-
|
|
83
|
+
private buildCurrentPageReportText;
|
|
83
84
|
toggleExport: (event: Event) => void;
|
|
84
85
|
handleLazyLoadEvent(event: any): void;
|
|
85
86
|
filterGlobal(e: any): void;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { ActivityEventType } from './activity.types';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class ActivityService {
|
|
4
|
+
private readonly keycloak;
|
|
5
|
+
private readonly router;
|
|
6
|
+
private readonly location;
|
|
7
|
+
private sessionId;
|
|
8
|
+
private username;
|
|
9
|
+
private previousPath;
|
|
10
|
+
private started;
|
|
11
|
+
getSessionId(): string | null;
|
|
12
|
+
start(options?: {
|
|
13
|
+
shellMode?: boolean;
|
|
14
|
+
}): void;
|
|
15
|
+
track(event: string, properties?: Record<string, unknown>, type?: ActivityEventType): void;
|
|
16
|
+
private readSessionIdFromKeycloak;
|
|
17
|
+
private captureSessionContext;
|
|
18
|
+
private subscribeKeycloakRefresh;
|
|
19
|
+
private subscribeLifecycleEvents;
|
|
20
|
+
private subscribeRouterEvents;
|
|
21
|
+
private maybeEmitPageView;
|
|
22
|
+
private handleSessionStart;
|
|
23
|
+
private purgeStaleSessionMarkers;
|
|
24
|
+
private sendSessionEnd;
|
|
25
|
+
private toAbsoluteUrl;
|
|
26
|
+
/**
|
|
27
|
+
* MFE shared scope'unda `Router` ve `Location` null (her ikisi de child injector'da yaşıyor).
|
|
28
|
+
* Bu durumda Angular soyutlamalarına dayanamayız; `window.location.hash`'ten okuruz —
|
|
29
|
+
* browser'ın sahip olduğu güncel URL.
|
|
30
|
+
*/
|
|
31
|
+
private readCurrentPath;
|
|
32
|
+
private send;
|
|
33
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ActivityService, never>;
|
|
34
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<ActivityService>;
|
|
35
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type ActivityEventType = 'SESSION_START' | 'SESSION_END' | 'PAGE_VIEW' | 'BUTTON_CLICK' | 'CUSTOM';
|
|
2
|
+
export interface ActivityEvent {
|
|
3
|
+
type: ActivityEventType;
|
|
4
|
+
sessionId: string;
|
|
5
|
+
username: string;
|
|
6
|
+
event: string;
|
|
7
|
+
page: string;
|
|
8
|
+
ip: string;
|
|
9
|
+
referrer: string;
|
|
10
|
+
traceId: string;
|
|
11
|
+
clientTimestamp?: number;
|
|
12
|
+
properties: Record<string, unknown>;
|
|
13
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { AfterViewInit, ElementRef } from '@angular/core';
|
|
1
|
+
import { AfterViewInit, ElementRef, OnDestroy } from '@angular/core';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
declare const KTBlockUI: any;
|
|
4
4
|
interface BlockOptions {
|
|
@@ -6,23 +6,17 @@ interface BlockOptions {
|
|
|
6
6
|
overlayClass?: string;
|
|
7
7
|
message?: string;
|
|
8
8
|
}
|
|
9
|
-
export declare class Block implements AfterViewInit {
|
|
10
|
-
private element;
|
|
9
|
+
export declare class Block implements AfterViewInit, OnDestroy {
|
|
10
|
+
private readonly element;
|
|
11
11
|
constructor(element: ElementRef);
|
|
12
12
|
arilBlock: import("@angular/core").InputSignal<boolean, boolean>;
|
|
13
13
|
blockOptions: import("@angular/core").InputSignal<BlockOptions, BlockOptions>;
|
|
14
14
|
blockUI: typeof KTBlockUI;
|
|
15
15
|
target: import("@angular/core").WritableSignal<HTMLElement>;
|
|
16
16
|
ngAfterViewInit(): void;
|
|
17
|
+
ngOnDestroy(): void;
|
|
17
18
|
getTarget(element: ElementRef): HTMLElement;
|
|
18
19
|
static ɵfac: i0.ɵɵFactoryDeclaration<Block, never>;
|
|
19
20
|
static ɵdir: i0.ɵɵDirectiveDeclaration<Block, "[arilBlock]", never, { "arilBlock": { "alias": "arilBlock"; "required": true; "isSignal": true; }; "blockOptions": { "alias": "blockOptions"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
20
21
|
}
|
|
21
|
-
export declare class BlockPage {
|
|
22
|
-
constructor();
|
|
23
|
-
arilBlockPage: import("@angular/core").InputSignal<boolean, boolean>;
|
|
24
|
-
blockOptions: import("@angular/core").InputSignal<BlockOptions, BlockOptions>;
|
|
25
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<BlockPage, never>;
|
|
26
|
-
static ɵdir: i0.ɵɵDirectiveDeclaration<BlockPage, "[arilBlockPage]", never, { "arilBlockPage": { "alias": "arilBlockPage"; "required": true; "isSignal": true; }; "blockOptions": { "alias": "blockOptions"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
27
|
-
}
|
|
28
22
|
export {};
|
|
@@ -13,8 +13,8 @@ declare const PubSubEvents: {
|
|
|
13
13
|
};
|
|
14
14
|
export declare class PubSubService {
|
|
15
15
|
publish(e: CustomEvent): void;
|
|
16
|
-
subscribe(eventName: keyof typeof PubSubEvents, listener: (data: any) => void):
|
|
17
|
-
unSubscribe(eventName: keyof typeof PubSubEvents,
|
|
16
|
+
subscribe(eventName: keyof typeof PubSubEvents, listener: (data: any) => void): EventListener;
|
|
17
|
+
unSubscribe(eventName: keyof typeof PubSubEvents, handler: EventListener): void;
|
|
18
18
|
static ɵfac: i0.ɵɵFactoryDeclaration<PubSubService, never>;
|
|
19
19
|
static ɵprov: i0.ɵɵInjectableDeclaration<PubSubService>;
|
|
20
20
|
}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
export function ServiceCallMock(httpMethod, proxy, serviceURL, mockAPI, message) {
|
|
2
|
-
// return ServiceCall(httpMethod, proxy, serviceURL, message, mockAPI, true);
|
|
3
|
-
}
|
|
4
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZU1vY2tCYXNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC9odHRwL3NyYy9zZXJ2aWNlTW9ja0Jhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxVQUFVLGVBQWUsQ0FDOUIsVUFBdUIsRUFDdkIsS0FBaUIsRUFDakIsVUFBa0IsRUFDbEIsT0FBZSxFQUNmLE9BQW1FO0lBRW5FLDZFQUE2RTtBQUM5RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSFRUUE1ldGhvZHMsIFByb3h5VHlwZXMgfSBmcm9tICcuLi9saWIvZW51bXMnO1xyXG5pbXBvcnQgeyBTZXJ2aWNlQ2FsbCB9IGZyb20gJy4vc2VydmljZUJhc2UnO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFNlcnZpY2VDYWxsTW9jayhcclxuXHRodHRwTWV0aG9kOiBIVFRQTWV0aG9kcyxcclxuXHRwcm94eTogUHJveHlUeXBlcyxcclxuXHRzZXJ2aWNlVVJMOiBzdHJpbmcsXHJcblx0bW9ja0FQSTogc3RyaW5nLFxyXG5cdG1lc3NhZ2U/OiB7IHN1Y2Nlc3M/OiBzdHJpbmc7IGVycm9yPzogc3RyaW5nOyB1c2VEZWZhdWx0OiBib29sZWFuIH1cclxuKSB7XHJcblx0Ly8gcmV0dXJuIFNlcnZpY2VDYWxsKGh0dHBNZXRob2QsIHByb3h5LCBzZXJ2aWNlVVJMLCBtZXNzYWdlLCBtb2NrQVBJLCB0cnVlKTtcclxufVxyXG4iXX0=
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
import { Injectable, effect, signal } from '@angular/core';
|
|
2
|
-
import { take } from 'rxjs';
|
|
3
|
-
import { API_CONFIGS } from 'aril/boot/config/api';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "@angular/common/http";
|
|
6
|
-
export class SelectionGroupService {
|
|
7
|
-
constructor(http) {
|
|
8
|
-
this.http = http;
|
|
9
|
-
this.selectionGroups = signal({});
|
|
10
|
-
this.loading = new Map();
|
|
11
|
-
this.loaded = new Map();
|
|
12
|
-
this.loadStatesFromLocalStorage();
|
|
13
|
-
effect(() => {
|
|
14
|
-
const encodedData = btoa(encodeURI(JSON.stringify(this.selectionGroups())));
|
|
15
|
-
localStorage.setItem('selection-groups', encodedData);
|
|
16
|
-
});
|
|
17
|
-
}
|
|
18
|
-
async loadStatesFromLocalStorage() {
|
|
19
|
-
const selectionGroups = localStorage.getItem('selection-groups');
|
|
20
|
-
if (selectionGroups) {
|
|
21
|
-
try {
|
|
22
|
-
const decodedData = decodeURI(atob(selectionGroups));
|
|
23
|
-
this.selectionGroups.set(JSON.parse(decodedData));
|
|
24
|
-
}
|
|
25
|
-
catch (e) {
|
|
26
|
-
console.error(e);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
fetchEnum(groupName, parentSelectionKey = 'ALL') {
|
|
31
|
-
const key = groupName + '~' + parentSelectionKey;
|
|
32
|
-
if (this.loaded.get(key) || this.loading.get(key))
|
|
33
|
-
return;
|
|
34
|
-
const payload = {
|
|
35
|
-
groupName,
|
|
36
|
-
parentSelectionKey
|
|
37
|
-
};
|
|
38
|
-
this.loading.set(key, true);
|
|
39
|
-
this.loaded.set(key, false);
|
|
40
|
-
const hostApi = API_CONFIGS.api.replace(/\/[^\/]+\/v1$/, `/host/v1`);
|
|
41
|
-
this.http
|
|
42
|
-
.post(hostApi + '/selection-group/load', payload)
|
|
43
|
-
.pipe(take(1))
|
|
44
|
-
.subscribe((selectionGroup) => {
|
|
45
|
-
this.loading.set(key, false);
|
|
46
|
-
this.loaded.set(key, true);
|
|
47
|
-
this.selectionGroups.update((groups) => ({
|
|
48
|
-
...groups,
|
|
49
|
-
[key]: selectionGroup
|
|
50
|
-
}));
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
isLoading(groupName) {
|
|
54
|
-
return this.loading.get(groupName) ?? false;
|
|
55
|
-
}
|
|
56
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: SelectionGroupService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
57
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: SelectionGroupService, providedIn: 'root' }); }
|
|
58
|
-
}
|
|
59
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: SelectionGroupService, decorators: [{
|
|
60
|
-
type: Injectable,
|
|
61
|
-
args: [{
|
|
62
|
-
providedIn: 'root'
|
|
63
|
-
}]
|
|
64
|
-
}], ctorParameters: () => [{ type: i1.HttpClient }] });
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLWdyb3VwLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcmlsL3RoZW1lL2xheW91dC9zZXJ2aWNlL3NlbGVjdGlvbi1ncm91cC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzRCxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTVCLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBT25ELE1BQU0sT0FBTyxxQkFBcUI7SUFNakMsWUFBb0IsSUFBZ0I7UUFBaEIsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUxwQyxvQkFBZSxHQUFHLE1BQU0sQ0FBOEMsRUFBRSxDQUFDLENBQUM7UUFFbEUsWUFBTyxHQUFHLElBQUksR0FBRyxFQUFtQixDQUFDO1FBQ3JDLFdBQU0sR0FBRyxJQUFJLEdBQUcsRUFBbUIsQ0FBQztRQUczQyxJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztRQUVsQyxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1gsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM1RSxZQUFZLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ3ZELENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVPLEtBQUssQ0FBQywwQkFBMEI7UUFDdkMsTUFBTSxlQUFlLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO1FBRWpFLElBQUksZUFBZSxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDO2dCQUNKLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQztnQkFDckQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBQ25ELENBQUM7WUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO2dCQUNaLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDbEIsQ0FBQztRQUNGLENBQUM7SUFDRixDQUFDO0lBRUQsU0FBUyxDQUFDLFNBQWlCLEVBQUUscUJBQTZCLEtBQUs7UUFDOUQsTUFBTSxHQUFHLEdBQUcsU0FBUyxHQUFHLEdBQUcsR0FBRyxrQkFBa0IsQ0FBQztRQUVqRCxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQztZQUFFLE9BQU87UUFFMUQsTUFBTSxPQUFPLEdBQXdCO1lBQ3BDLFNBQVM7WUFDVCxrQkFBa0I7U0FDbEIsQ0FBQztRQUVGLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFNUIsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBRXJFLElBQUksQ0FBQyxJQUFJO2FBQ1AsSUFBSSxDQUFvQixPQUFPLEdBQUcsdUJBQXVCLEVBQUUsT0FBTyxDQUFDO2FBQ25FLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDYixTQUFTLENBQUMsQ0FBQyxjQUFjLEVBQUUsRUFBRTtZQUM3QixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRTNCLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN4QyxHQUFHLE1BQU07Z0JBQ1QsQ0FBQyxHQUFHLENBQUMsRUFBRSxjQUFjO2FBQ3JCLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsU0FBUyxDQUFDLFNBQWlCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksS0FBSyxDQUFDO0lBQzdDLENBQUM7OEdBM0RXLHFCQUFxQjtrSEFBckIscUJBQXFCLGNBRnJCLE1BQU07OzJGQUVOLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDWCxVQUFVLEVBQUUsTUFBTTtpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlLCBlZmZlY3QsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgdGFrZSB9IGZyb20gJ3J4anMnO1xyXG5cclxuaW1wb3J0IHsgQVBJX0NPTkZJR1MgfSBmcm9tICdhcmlsL2Jvb3QvY29uZmlnL2FwaSc7XHJcblxyXG5pbXBvcnQgeyBTZWxlY3Rpb25Hcm91cERUTywgU2VsZWN0aW9uUmVxdWVzdERUTyB9IGZyb20gJy4vaW50ZXJmYWNlcy9pbnRlcmZhY2VzJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuXHRwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFNlbGVjdGlvbkdyb3VwU2VydmljZSB7XHJcblx0c2VsZWN0aW9uR3JvdXBzID0gc2lnbmFsPHsgW2tleTogc3RyaW5nXTogU2VsZWN0aW9uR3JvdXBEVE8gfCBudWxsIH0+KHt9KTtcclxuXHJcblx0cHJpdmF0ZSBsb2FkaW5nID0gbmV3IE1hcDxzdHJpbmcsIGJvb2xlYW4+KCk7XHJcblx0cHJpdmF0ZSBsb2FkZWQgPSBuZXcgTWFwPHN0cmluZywgYm9vbGVhbj4oKTtcclxuXHJcblx0Y29uc3RydWN0b3IocHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50KSB7XHJcblx0XHR0aGlzLmxvYWRTdGF0ZXNGcm9tTG9jYWxTdG9yYWdlKCk7XHJcblxyXG5cdFx0ZWZmZWN0KCgpID0+IHtcclxuXHRcdFx0Y29uc3QgZW5jb2RlZERhdGEgPSBidG9hKGVuY29kZVVSSShKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGlvbkdyb3VwcygpKSkpO1xyXG5cdFx0XHRsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnc2VsZWN0aW9uLWdyb3VwcycsIGVuY29kZWREYXRhKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSBhc3luYyBsb2FkU3RhdGVzRnJvbUxvY2FsU3RvcmFnZSgpIHtcclxuXHRcdGNvbnN0IHNlbGVjdGlvbkdyb3VwcyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdzZWxlY3Rpb24tZ3JvdXBzJyk7XHJcblxyXG5cdFx0aWYgKHNlbGVjdGlvbkdyb3Vwcykge1xyXG5cdFx0XHR0cnkge1xyXG5cdFx0XHRcdGNvbnN0IGRlY29kZWREYXRhID0gZGVjb2RlVVJJKGF0b2Ioc2VsZWN0aW9uR3JvdXBzKSk7XHJcblx0XHRcdFx0dGhpcy5zZWxlY3Rpb25Hcm91cHMuc2V0KEpTT04ucGFyc2UoZGVjb2RlZERhdGEpKTtcclxuXHRcdFx0fSBjYXRjaCAoZSkge1xyXG5cdFx0XHRcdGNvbnNvbGUuZXJyb3IoZSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdGZldGNoRW51bShncm91cE5hbWU6IHN0cmluZywgcGFyZW50U2VsZWN0aW9uS2V5OiBzdHJpbmcgPSAnQUxMJykge1xyXG5cdFx0Y29uc3Qga2V5ID0gZ3JvdXBOYW1lICsgJ34nICsgcGFyZW50U2VsZWN0aW9uS2V5O1xyXG5cclxuXHRcdGlmICh0aGlzLmxvYWRlZC5nZXQoa2V5KSB8fCB0aGlzLmxvYWRpbmcuZ2V0KGtleSkpIHJldHVybjtcclxuXHJcblx0XHRjb25zdCBwYXlsb2FkOiBTZWxlY3Rpb25SZXF1ZXN0RFRPID0ge1xyXG5cdFx0XHRncm91cE5hbWUsXHJcblx0XHRcdHBhcmVudFNlbGVjdGlvbktleVxyXG5cdFx0fTtcclxuXHJcblx0XHR0aGlzLmxvYWRpbmcuc2V0KGtleSwgdHJ1ZSk7XHJcblx0XHR0aGlzLmxvYWRlZC5zZXQoa2V5LCBmYWxzZSk7XHJcblxyXG5cdFx0Y29uc3QgaG9zdEFwaSA9IEFQSV9DT05GSUdTLmFwaS5yZXBsYWNlKC9cXC9bXlxcL10rXFwvdjEkLywgYC9ob3N0L3YxYCk7XHJcblxyXG5cdFx0dGhpcy5odHRwXHJcblx0XHRcdC5wb3N0PFNlbGVjdGlvbkdyb3VwRFRPPihob3N0QXBpICsgJy9zZWxlY3Rpb24tZ3JvdXAvbG9hZCcsIHBheWxvYWQpXHJcblx0XHRcdC5waXBlKHRha2UoMSkpXHJcblx0XHRcdC5zdWJzY3JpYmUoKHNlbGVjdGlvbkdyb3VwKSA9PiB7XHJcblx0XHRcdFx0dGhpcy5sb2FkaW5nLnNldChrZXksIGZhbHNlKTtcclxuXHRcdFx0XHR0aGlzLmxvYWRlZC5zZXQoa2V5LCB0cnVlKTtcclxuXHJcblx0XHRcdFx0dGhpcy5zZWxlY3Rpb25Hcm91cHMudXBkYXRlKChncm91cHMpID0+ICh7XHJcblx0XHRcdFx0XHQuLi5ncm91cHMsXHJcblx0XHRcdFx0XHRba2V5XTogc2VsZWN0aW9uR3JvdXBcclxuXHRcdFx0XHR9KSk7XHJcblx0XHRcdH0pO1xyXG5cdH1cclxuXHJcblx0aXNMb2FkaW5nKGdyb3VwTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5sb2FkaW5nLmdldChncm91cE5hbWUpID8/IGZhbHNlO1xyXG5cdH1cclxufVxyXG4iXX0=
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, input } from '@angular/core';
|
|
2
|
-
import { SplitButtonModule } from 'primeng/splitbutton';
|
|
3
|
-
import { ButtonComponent } from './button.component';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "primeng/splitbutton";
|
|
6
|
-
export class SplitButtonComponent extends ButtonComponent {
|
|
7
|
-
constructor() {
|
|
8
|
-
super(...arguments);
|
|
9
|
-
this.menu = input.required();
|
|
10
|
-
}
|
|
11
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: SplitButtonComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
|
|
12
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "17.1.2", type: SplitButtonComponent, isStandalone: true, selector: "aril-split-button", inputs: { menu: { classPropertyName: "menu", publicName: "menu", isSignal: true, isRequired: true, transformFunction: null } }, usesInheritance: true, ngImport: i0, template: "<p-splitButton [label]=\"label()\" [icon]=\"_icon()\" [styleClass]=\"_styleClass()\" [model]=\"menu()\" [disabled]=\"disabled()\">\r\n</p-splitButton>\r\n", dependencies: [{ kind: "ngmodule", type: SplitButtonModule }, { kind: "component", type: i1.SplitButton, selector: "p-splitButton", inputs: ["model", "severity", "raised", "rounded", "text", "outlined", "size", "plain", "icon", "iconPos", "label", "tooltip", "tooltipOptions", "style", "styleClass", "menuStyle", "menuStyleClass", "appendTo", "dir", "expandAriaLabel", "showTransitionOptions", "hideTransitionOptions", "buttonProps", "menuButtonProps", "autofocus", "disabled", "tabindex", "menuButtonDisabled", "buttonDisabled"], outputs: ["onClick", "onMenuHide", "onMenuShow", "onDropdownClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
13
|
-
}
|
|
14
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: SplitButtonComponent, decorators: [{
|
|
15
|
-
type: Component,
|
|
16
|
-
args: [{ standalone: true, selector: 'aril-split-button', imports: [SplitButtonModule], changeDetection: ChangeDetectionStrategy.OnPush, template: "<p-splitButton [label]=\"label()\" [icon]=\"_icon()\" [styleClass]=\"_styleClass()\" [model]=\"menu()\" [disabled]=\"disabled()\">\r\n</p-splitButton>\r\n" }]
|
|
17
|
-
}] });
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BsaXQtYnV0dG9uLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FyaWwvdWkvYnV0dG9uL3NyYy9zcGxpdC1idXR0b24uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJpbC91aS9idXR0b24vc3JjL3NwbGl0LWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUcxRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7OztBQVNyRCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsZUFBZTtJQVB6RDs7UUFRQyxTQUFJLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBYyxDQUFDO0tBQ3BDOzhHQUZZLG9CQUFvQjtrR0FBcEIsb0JBQW9CLG9PQ2RqQyw0SkFFQSwyQ0RTVyxpQkFBaUI7OzJGQUdmLG9CQUFvQjtrQkFQaEMsU0FBUztpQ0FDRyxJQUFJLFlBQ04sbUJBQW1CLFdBRXBCLENBQUMsaUJBQWlCLENBQUMsbUJBQ1gsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIGlucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcblxyXG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcclxuaW1wb3J0IHsgU3BsaXRCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL3NwbGl0YnV0dG9uJztcclxuXHJcbmltcG9ydCB7IEJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4vYnV0dG9uLmNvbXBvbmVudCc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuXHRzdGFuZGFsb25lOiB0cnVlLFxyXG5cdHNlbGVjdG9yOiAnYXJpbC1zcGxpdC1idXR0b24nLFxyXG5cdHRlbXBsYXRlVXJsOiAnLi9zcGxpdC1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxyXG5cdGltcG9ydHM6IFtTcGxpdEJ1dHRvbk1vZHVsZV0sXHJcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcclxufSlcclxuZXhwb3J0IGNsYXNzIFNwbGl0QnV0dG9uQ29tcG9uZW50IGV4dGVuZHMgQnV0dG9uQ29tcG9uZW50IHtcclxuXHRtZW51ID0gaW5wdXQucmVxdWlyZWQ8TWVudUl0ZW1bXT4oKTtcclxufVxyXG4iLCI8cC1zcGxpdEJ1dHRvbiBbbGFiZWxdPVwibGFiZWwoKVwiIFtpY29uXT1cIl9pY29uKClcIiBbc3R5bGVDbGFzc109XCJfc3R5bGVDbGFzcygpXCIgW21vZGVsXT1cIm1lbnUoKVwiIFtkaXNhYmxlZF09XCJkaXNhYmxlZCgpXCI+XHJcbjwvcC1zcGxpdEJ1dHRvbj5cclxuIl19
|