@stemy/ngx-utils 19.2.11 → 19.2.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,8 +1,8 @@
1
1
  import * as i0 from '@angular/core';
2
- import { InjectionToken, PLATFORM_ID, Injectable, Inject, Optional, Injector, EventEmitter, isDevMode, ErrorHandler, NgZone, Pipe, Directive, Input, Output, HostBinding, HostListener, forwardRef, Component, ViewEncapsulation, ContentChild, ViewChild, ContentChildren, APP_INITIALIZER, makeEnvironmentProviders, NgModule } from '@angular/core';
2
+ import { InjectionToken, PLATFORM_ID, Injectable, Inject, Optional, Injector, EventEmitter, isDevMode, ErrorHandler, createComponent, NgZone, Pipe, Directive, Input, Output, HostBinding, HostListener, forwardRef, Component, ViewEncapsulation, ContentChild, ViewChild, ContentChildren, APP_INITIALIZER, makeEnvironmentProviders, NgModule } from '@angular/core';
3
3
  import 'reflect-metadata';
4
4
  import * as i2 from '@angular/router';
5
- import { ActivatedRouteSnapshot, Scroll, NavigationEnd, DefaultUrlSerializer, UrlTree, UrlSegmentGroup, UrlSegment, UrlSerializer } from '@angular/router';
5
+ import { ActivatedRouteSnapshot, Scroll, NavigationEnd, Router, DefaultUrlSerializer, UrlTree, UrlSegmentGroup, UrlSegment, UrlSerializer, ROUTES } from '@angular/router';
6
6
  import { BehaviorSubject, Observable, firstValueFrom, Subject, Subscription, from, TimeoutError, combineLatest, lastValueFrom } from 'rxjs';
7
7
  import { skipWhile, debounceTime, distinctUntilChanged, map, filter, mergeMap, timeout } from 'rxjs/operators';
8
8
  import * as i1$3 from '@angular/common';
@@ -391,6 +391,8 @@ var StorageMode;
391
391
  })(StorageMode || (StorageMode = {}));
392
392
  const TOASTER_SERVICE = new InjectionToken("toaster-service");
393
393
  const DIALOG_SERVICE = new InjectionToken("dialog-service");
394
+ // --- Socket service ---
395
+ const SOCKET_IO_PATH = new InjectionToken("socket-io-path");
394
396
  const PROMISE_SERVICE = new InjectionToken("promise-service");
395
397
  const WASI_IMPLEMENTATION = new InjectionToken("wasi-implementation");
396
398
  // --- Reflect utils ---
@@ -476,6 +478,8 @@ const API_SERVICE = new InjectionToken("api-service");
476
478
  // --- Resource if ---
477
479
  class ResourceIfContext {
478
480
  }
481
+ const DYNAMIC_ENTRY_COMPONENTS = new InjectionToken("dynamic-entry-components");
482
+ const DYNAMIC_MODULE_INFO = new InjectionToken("dynamic-module-info");
479
483
  // --- ConfigService ---
480
484
  const APP_BASE_URL = new InjectionToken("app-base-url");
481
485
  class IConfiguration {
@@ -2003,6 +2007,62 @@ function checkTransitions(el, cb) {
2003
2007
  end();
2004
2008
  }, 100);
2005
2009
  }
2010
+ function getComponentDef(type) {
2011
+ const def = type["ɵcmp"];
2012
+ if (!def) {
2013
+ throw new Error(`No Angular definition found for ${type.name}`);
2014
+ }
2015
+ return def;
2016
+ }
2017
+ // Helper function to match a search selector to a stored selector
2018
+ function parseSelector(selector) {
2019
+ if (Array.isArray(selector)) {
2020
+ if (selector.length !== 1 && selector.length !== 3) {
2021
+ throw new Error("CSSSelector should contain 1 or 3 parts!");
2022
+ }
2023
+ if (selector.some(t => typeof t !== "string")) {
2024
+ throw new Error("CSSSelector parts can only be strings");
2025
+ }
2026
+ return selector;
2027
+ }
2028
+ if (selector.indexOf("#") > 0) {
2029
+ const parts = selector.split("#");
2030
+ selector = `${parts[0]}[id=${parts[1]}]`;
2031
+ }
2032
+ if (selector.indexOf(".") > 0) {
2033
+ const parts = selector.split(".");
2034
+ selector = `${parts[0]}[class=${parts[1]}]`;
2035
+ }
2036
+ const start = selector.indexOf("[");
2037
+ const end = Math.max(selector.indexOf("]"), Math.min(selector.length, start + 1));
2038
+ if (start >= 0) {
2039
+ const parts = selector.substring(start + 1, end).split("=");
2040
+ return [
2041
+ selector.substring(0, start),
2042
+ parts[0],
2043
+ parts[1] || ""
2044
+ ];
2045
+ }
2046
+ return [selector];
2047
+ }
2048
+ function selectorMatchesList(list, selector) {
2049
+ for (const item of list) {
2050
+ if (selector.length === item.length && selector.every((s, i) => s === item[i])) {
2051
+ return true;
2052
+ }
2053
+ }
2054
+ return false;
2055
+ }
2056
+ function provideEntryComponents(components, moduleId) {
2057
+ return {
2058
+ provide: DYNAMIC_ENTRY_COMPONENTS,
2059
+ useValue: {
2060
+ components,
2061
+ moduleId
2062
+ },
2063
+ multi: true
2064
+ };
2065
+ }
2006
2066
 
2007
2067
  class TimerUtils {
2008
2068
  static createTimeout(func, time) {
@@ -2194,6 +2254,129 @@ class SetUtils {
2194
2254
  }
2195
2255
  }
2196
2256
 
2257
+ function uuid() {
2258
+ if (typeof window !== "undefined" && typeof window.crypto !== "undefined" && typeof window.crypto.getRandomValues !== "undefined") {
2259
+ const buf = new Uint16Array(8);
2260
+ window.crypto.getRandomValues(buf);
2261
+ return Array.from(buf).map(pad4).join("");
2262
+ }
2263
+ return new Array(8).fill(0).map(random4).join("");
2264
+ }
2265
+ function pad4(num, index) {
2266
+ const prefix = 1 < index && index < 6 ? "-" : "";
2267
+ let ret = num.toString(16);
2268
+ while (ret.length < 4) {
2269
+ ret = "0" + ret;
2270
+ }
2271
+ return prefix + ret;
2272
+ }
2273
+ function random4(_, index) {
2274
+ const prefix = 1 < index && index < 6 ? "-" : "";
2275
+ return prefix + Math.floor((1 + Math.random()) * 0x10000)
2276
+ .toString(16)
2277
+ .substring(1);
2278
+ }
2279
+ class SocketClient {
2280
+ get id() {
2281
+ return this.open ? this.sid : null;
2282
+ }
2283
+ constructor(url, ioLoader) {
2284
+ this.url = url;
2285
+ this.ioLoader = ioLoader;
2286
+ this.status = new BehaviorSubject(false);
2287
+ this.channels = new Map([
2288
+ ["connect", new Subject()],
2289
+ ["disconnect", new Subject()],
2290
+ ["error", new Subject()]
2291
+ ]);
2292
+ this.responseHandlers = new Map();
2293
+ this.sid = null;
2294
+ this.open = false;
2295
+ }
2296
+ connect(extraHeaders = {}) {
2297
+ if (this.ws)
2298
+ return;
2299
+ const url = new URL(this.url);
2300
+ this.factory = this.factory || this.ioLoader();
2301
+ this.ws = new Promise((resolve, reject) => {
2302
+ this.factory.then(io => {
2303
+ const protocol = url.protocol.replace("http", "ws");
2304
+ const ws = io(`${protocol}//${url.host}`, {
2305
+ extraHeaders,
2306
+ timeout: 5000,
2307
+ path: url.pathname
2308
+ });
2309
+ console.log(`socket connecting to: ${protocol}//${url.host}`, url.pathname);
2310
+ ws.on(`connect`, () => {
2311
+ console.log(`socket connected`);
2312
+ this.open = true;
2313
+ this.sid = ws.id;
2314
+ this.status.next(true);
2315
+ });
2316
+ ws.on(`disconnect`, () => {
2317
+ this.open = false;
2318
+ this.status.next(false);
2319
+ });
2320
+ Object.keys(this.channels).map(event => {
2321
+ ws.on(event, (data) => {
2322
+ this.handleResponse(event, data);
2323
+ this.channels[event].next(data);
2324
+ });
2325
+ });
2326
+ resolve(ws);
2327
+ }, reject);
2328
+ });
2329
+ }
2330
+ disconnect() {
2331
+ if (!this.ws)
2332
+ return;
2333
+ this.ws.then(ws => ws.disconnect());
2334
+ this.ws = null;
2335
+ }
2336
+ subscribe(event, cb) {
2337
+ if (!this.channels[event]) {
2338
+ this.channels[event] = new Subject();
2339
+ this.ws?.then(ws => {
2340
+ ws.on(event, (data) => {
2341
+ this.handleResponse(event, data);
2342
+ this.channels[event].next(data);
2343
+ });
2344
+ });
2345
+ }
2346
+ return this.channels[event].subscribe(cb);
2347
+ }
2348
+ emit(event, content) {
2349
+ this.ws.then(ws => ws.emit(event, content));
2350
+ }
2351
+ async request(event, content) {
2352
+ const id = uuid();
2353
+ const ws = await this.ws;
2354
+ const promise = new Promise((resolve, reject) => {
2355
+ this.responseHandlers.set(id, { resolve, reject });
2356
+ setTimeout(() => {
2357
+ this.responseHandlers.delete(id);
2358
+ reject(`Timeout for ${event} request ${JSON.stringify(content)}`);
2359
+ }, 5000);
2360
+ });
2361
+ ws.emit(event, { ...content, immediate_response_id: id });
2362
+ return promise;
2363
+ }
2364
+ handleResponse(event, content) {
2365
+ if (typeof content !== "object" || Array.isArray(content) || content instanceof Date)
2366
+ return;
2367
+ const id = content.immediate_response_id;
2368
+ const handler = this.responseHandlers.get(id);
2369
+ if (!handler)
2370
+ return;
2371
+ this.responseHandlers.delete(id);
2372
+ if (event === "error") {
2373
+ handler.reject(content);
2374
+ return;
2375
+ }
2376
+ handler.resolve(content);
2377
+ }
2378
+ }
2379
+
2197
2380
  class UniqueUtils {
2198
2381
  static uuid() {
2199
2382
  if (typeof window !== "undefined" && typeof window.crypto !== "undefined" && typeof window.crypto.getRandomValues !== "undefined") {
@@ -3727,6 +3910,132 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImpor
3727
3910
  args: [LANGUAGE_SERVICE]
3728
3911
  }] }] });
3729
3912
 
3913
+ class ComponentLoaderService {
3914
+ get injector() {
3915
+ return this.ngModule.injector;
3916
+ }
3917
+ constructor(appRef, ngModule, rootElement, moduleRegistry) {
3918
+ this.appRef = appRef;
3919
+ this.ngModule = ngModule;
3920
+ this.rootElement = rootElement;
3921
+ this.typeMap = [];
3922
+ this.moduleRegistry = moduleRegistry || [];
3923
+ this.moduleMap = new Map();
3924
+ this.populateTypeMap("root", this.ngModule.injector);
3925
+ }
3926
+ findComponentType(selector, moduleId = "root") {
3927
+ const cssSelector = parseSelector(selector);
3928
+ const results = new Map();
3929
+ for (const item of this.typeMap) {
3930
+ if (selectorMatchesList(item[1], cssSelector)) {
3931
+ results.set(item[0], item[2]);
3932
+ }
3933
+ }
3934
+ const keys = Array.from(results.keys());
3935
+ const result = results.get(moduleId) || results.get(keys[0]);
3936
+ if (!result) {
3937
+ throw new Error(`Cannot find component by selector: ${selector} in module '${moduleId}' nor in any other module`);
3938
+ }
3939
+ return result;
3940
+ }
3941
+ async getComponentType(location) {
3942
+ // Find module info
3943
+ const moduleInfoList = this.moduleRegistry
3944
+ .filter(info => info.moduleId === location.moduleId);
3945
+ if (moduleInfoList.length > 1) {
3946
+ throw new Error(`Module with id '${location.moduleId}' has been declared more than once.`);
3947
+ }
3948
+ const moduleInfo = moduleInfoList[0];
3949
+ if (!moduleInfo) {
3950
+ throw new Error(`Module with id '${location.moduleId}' not found.`);
3951
+ }
3952
+ await this.loadModule(moduleInfo);
3953
+ return this.findComponentType(location.selector, location.moduleId);
3954
+ }
3955
+ createComponent(componentType, projectableNodes, injector, split) {
3956
+ if (projectableNodes) {
3957
+ projectableNodes = split ? projectableNodes.filter(node => {
3958
+ return node && node.nodeType !== Node.COMMENT_NODE;
3959
+ }).map(node => [node]) : [projectableNodes];
3960
+ }
3961
+ else {
3962
+ projectableNodes = [];
3963
+ }
3964
+ return createComponent(componentType, {
3965
+ environmentInjector: this.appRef.injector,
3966
+ elementInjector: injector || this.injector,
3967
+ projectableNodes
3968
+ });
3969
+ }
3970
+ bootstrap(componentType, rootSelectorOrNode) {
3971
+ rootSelectorOrNode = rootSelectorOrNode || this.rootElement;
3972
+ return !rootSelectorOrNode ? null : this.appRef.bootstrap(componentType, rootSelectorOrNode);
3973
+ }
3974
+ attachView(viewRef) {
3975
+ if (!viewRef)
3976
+ return;
3977
+ this.appRef.attachView(viewRef);
3978
+ }
3979
+ detachView(viewRef) {
3980
+ if (!viewRef)
3981
+ return;
3982
+ this.appRef.detachView(viewRef);
3983
+ try {
3984
+ viewRef.destroy();
3985
+ }
3986
+ catch (e) {
3987
+ console.log(`Can't destroy view, maybe it is already destroyed?`);
3988
+ }
3989
+ }
3990
+ populateTypeMap(moduleId, injector) {
3991
+ const entries = injector.get(DYNAMIC_ENTRY_COMPONENTS) || [];
3992
+ if (entries.length == 0) {
3993
+ console.warn("Entry components not found in the module", injector);
3994
+ }
3995
+ entries.forEach(entryComponents => {
3996
+ entryComponents.components.forEach(type => {
3997
+ const def = getComponentDef(type);
3998
+ console.log(def.selectors, type.name);
3999
+ this.typeMap.push([entryComponents.moduleId || moduleId, def.selectors, type]);
4000
+ });
4001
+ });
4002
+ }
4003
+ async loadModule(moduleInfo) {
4004
+ if (this.moduleMap.has(moduleInfo.moduleId)) {
4005
+ return this.moduleMap.get(moduleInfo.moduleId);
4006
+ }
4007
+ this.moduleMap.set(moduleInfo.moduleId, new Promise(async (resolve) => {
4008
+ const router = this.injector.get(Router);
4009
+ const loader = router["navigationTransitions"].configLoader;
4010
+ const loaded = await firstValueFrom(loader.loadChildren(this.injector, {
4011
+ loadChildren: moduleInfo.loadChildren
4012
+ }));
4013
+ if (moduleInfo.routes) {
4014
+ router.resetConfig(moduleInfo.routes);
4015
+ if (moduleInfo.initialNavigation !== false) {
4016
+ router.initialNavigation();
4017
+ }
4018
+ }
4019
+ this.populateTypeMap(moduleInfo.moduleId, loaded.injector);
4020
+ resolve(loaded.injector);
4021
+ }));
4022
+ return this.moduleMap.get(moduleInfo.moduleId);
4023
+ }
4024
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ComponentLoaderService, deps: [{ token: i0.ApplicationRef }, { token: i0.NgModuleRef }, { token: ROOT_ELEMENT }, { token: DYNAMIC_MODULE_INFO, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
4025
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ComponentLoaderService }); }
4026
+ }
4027
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ComponentLoaderService, decorators: [{
4028
+ type: Injectable
4029
+ }], ctorParameters: () => [{ type: i0.ApplicationRef }, { type: i0.NgModuleRef }, { type: HTMLElement, decorators: [{
4030
+ type: Inject,
4031
+ args: [ROOT_ELEMENT]
4032
+ }] }, { type: undefined, decorators: [{
4033
+ type: Optional
4034
+ }, {
4035
+ type: Inject,
4036
+ args: [DYNAMIC_MODULE_INFO]
4037
+ }] }] });
4038
+
3730
4039
  class TranslatedUrlSerializer extends DefaultUrlSerializer {
3731
4040
  constructor(language) {
3732
4041
  super();
@@ -3849,6 +4158,86 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImpor
3849
4158
  args: [NgZone]
3850
4159
  }] }] });
3851
4160
 
4161
+ class SocketService {
4162
+ get status() {
4163
+ return this.client.status;
4164
+ }
4165
+ get id() {
4166
+ return this.client.id;
4167
+ }
4168
+ constructor(auth, api, ioPath) {
4169
+ this.auth = auth;
4170
+ this.api = api;
4171
+ this.ioPath = ioPath;
4172
+ const url = this.api.url(this.ioPath);
4173
+ this.client = new SocketClient(url, async () => {
4174
+ let script = null;
4175
+ try {
4176
+ script = await LoaderUtils.loadScript(`${url}/socket.io.js`);
4177
+ }
4178
+ catch (e) {
4179
+ script?.remove();
4180
+ await LoaderUtils.loadScript(`https://cdn.socket.io/4.7.4/socket.io.min.js`);
4181
+ }
4182
+ return window["io"];
4183
+ });
4184
+ }
4185
+ withAuth(extraHeaders = {}) {
4186
+ this.authSub = this.auth.userChanged.subscribe(user => {
4187
+ if (user) {
4188
+ this.connect(extraHeaders);
4189
+ return;
4190
+ }
4191
+ this.disconnect();
4192
+ });
4193
+ if (this.auth.isAuthenticated) {
4194
+ this.connect(extraHeaders);
4195
+ }
4196
+ }
4197
+ ngOnDestroy() {
4198
+ this.authSub?.unsubscribe();
4199
+ this.disconnect();
4200
+ }
4201
+ connect(extraHeaders = {}) {
4202
+ if (this.authSub && this.auth.isAuthenticated) {
4203
+ extraHeaders = {
4204
+ ...(extraHeaders || {}),
4205
+ ...Object.entries(this.api.client.requestHeaders || {}).reduce((res, entry) => {
4206
+ res[entry[0]] = Array.isArray(entry[1]) ? entry[1].join(", ") : entry[1];
4207
+ return res;
4208
+ }, {})
4209
+ };
4210
+ }
4211
+ this.client.connect(extraHeaders);
4212
+ }
4213
+ disconnect() {
4214
+ this.client.disconnect();
4215
+ }
4216
+ subscribe(event, cb) {
4217
+ return this.client.subscribe(event, cb);
4218
+ }
4219
+ emit(event, content) {
4220
+ this.client.emit(event, content);
4221
+ }
4222
+ request(event, content) {
4223
+ return this.client.request(event, content);
4224
+ }
4225
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: SocketService, deps: [{ token: AUTH_SERVICE }, { token: API_SERVICE }, { token: SOCKET_IO_PATH }], target: i0.ɵɵFactoryTarget.Injectable }); }
4226
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: SocketService }); }
4227
+ }
4228
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: SocketService, decorators: [{
4229
+ type: Injectable
4230
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
4231
+ type: Inject,
4232
+ args: [AUTH_SERVICE]
4233
+ }] }, { type: undefined, decorators: [{
4234
+ type: Inject,
4235
+ args: [API_SERVICE]
4236
+ }] }, { type: undefined, decorators: [{
4237
+ type: Inject,
4238
+ args: [SOCKET_IO_PATH]
4239
+ }] }] });
4240
+
3852
4241
  class DragDropHandler {
3853
4242
  static get(el) {
3854
4243
  if (DragDropHandler.handlers?.has(el)) {
@@ -5129,7 +5518,7 @@ class PaginationDirective {
5129
5518
  refresh(time) {
5130
5519
  time = isNaN(time) || time <= 0 ? this.updateTime : time;
5131
5520
  this.updateTimer.time = isNaN(time) || time <= 0 ? 100 : time;
5132
- this.waitFor.then(() => {
5521
+ Promise.resolve(this.waitFor).then(() => {
5133
5522
  this.updateTimer.run();
5134
5523
  });
5135
5524
  }
@@ -5342,7 +5731,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImpor
5342
5731
  type: Input
5343
5732
  }] } });
5344
5733
 
5345
- class ToggleDirective {
5734
+ class DropdownDirective {
5346
5735
  static { this.active = null; }
5347
5736
  get nativeElement() {
5348
5737
  return this.element.nativeElement;
@@ -5392,8 +5781,8 @@ class ToggleDirective {
5392
5781
  };
5393
5782
  }
5394
5783
  ngOnDestroy() {
5395
- if (ToggleDirective.active === this) {
5396
- ToggleDirective.active = null;
5784
+ if (DropdownDirective.active === this) {
5785
+ DropdownDirective.active = null;
5397
5786
  this.onHidden.emit(this);
5398
5787
  }
5399
5788
  }
@@ -5416,7 +5805,7 @@ class ToggleDirective {
5416
5805
  return;
5417
5806
  this.opened = true;
5418
5807
  this.showEvent();
5419
- ToggleDirective.active = this;
5808
+ DropdownDirective.active = this;
5420
5809
  // Prevent toggle from selecting an item right after it is shown
5421
5810
  setTimeout(() => {
5422
5811
  if (!this.opened)
@@ -5436,21 +5825,21 @@ class ToggleDirective {
5436
5825
  document.removeEventListener("keydown", this.onKeyDown);
5437
5826
  // Prevent toggle from refocus itself after it is hidden because of another toggle
5438
5827
  setTimeout(() => {
5439
- if (ToggleDirective.active === this) {
5440
- ToggleDirective.active = null;
5828
+ if (DropdownDirective.active === this) {
5829
+ DropdownDirective.active = null;
5441
5830
  this.nativeElement?.focus();
5442
5831
  }
5443
5832
  }, 10);
5444
5833
  }
5445
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ToggleDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
5446
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.3", type: ToggleDirective, isStandalone: false, selector: "[toggle]", inputs: { closeInside: "closeInside", keyboardHandler: "keyboardHandler", isDisabled: "isDisabled" }, outputs: { onShown: "onShown", onHidden: "onHidden", onKeyboard: "onKeyboard" }, host: { listeners: { "keydown.enter": "show($event)", "keydown.space": "show($event)" }, properties: { "class.open": "this.isOpened", "class.disabled": "this.getDisabled" } }, exportAs: ["toggle"], ngImport: i0 }); }
5834
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: DropdownDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); }
5835
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.3", type: DropdownDirective, isStandalone: false, selector: "[dd],[drop-down]", inputs: { closeInside: "closeInside", keyboardHandler: "keyboardHandler", isDisabled: "isDisabled" }, outputs: { onShown: "onShown", onHidden: "onHidden", onKeyboard: "onKeyboard" }, host: { listeners: { "keydown.enter": "show($event)", "keydown.space": "show($event)" }, properties: { "class.open": "this.isOpened", "class.disabled": "this.getDisabled" } }, exportAs: ["dropdown"], ngImport: i0 }); }
5447
5836
  }
5448
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: ToggleDirective, decorators: [{
5837
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: DropdownDirective, decorators: [{
5449
5838
  type: Directive,
5450
5839
  args: [{
5451
5840
  standalone: false,
5452
- selector: "[toggle]",
5453
- exportAs: "toggle"
5841
+ selector: "[dd],[drop-down]",
5842
+ exportAs: "dropdown"
5454
5843
  }]
5455
5844
  }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { closeInside: [{
5456
5845
  type: Input
@@ -5478,6 +5867,41 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImpor
5478
5867
  args: ["keydown.space", ["$event"]]
5479
5868
  }] } });
5480
5869
 
5870
+ class DropdownToggleDirective extends AsyncMethodBase {
5871
+ constructor(element, dropdown, toaster, cdr) {
5872
+ super(toaster, cdr);
5873
+ this.element = element;
5874
+ this.dropdown = dropdown;
5875
+ }
5876
+ getMethod() {
5877
+ return this.beforeOpen;
5878
+ }
5879
+ callMethod() {
5880
+ if (this.dropdown.isOpened) {
5881
+ this.dropdown.hide();
5882
+ }
5883
+ else if (!super.callMethod()) {
5884
+ this.dropdown.show();
5885
+ }
5886
+ return true;
5887
+ }
5888
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: DropdownToggleDirective, deps: [{ token: i0.ElementRef }, { token: DropdownDirective }, { token: TOASTER_SERVICE }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive }); }
5889
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "19.0.3", type: DropdownToggleDirective, isStandalone: false, selector: "[dropdownToggle]", inputs: { beforeOpen: "beforeOpen" }, exportAs: ["dropdown-toggle"], usesInheritance: true, ngImport: i0 }); }
5890
+ }
5891
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: DropdownToggleDirective, decorators: [{
5892
+ type: Directive,
5893
+ args: [{
5894
+ standalone: false,
5895
+ selector: "[dropdownToggle]",
5896
+ exportAs: "dropdown-toggle",
5897
+ }]
5898
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: DropdownDirective }, { type: undefined, decorators: [{
5899
+ type: Inject,
5900
+ args: [TOASTER_SERVICE]
5901
+ }] }, { type: i0.ChangeDetectorRef }], propDecorators: { beforeOpen: [{
5902
+ type: Input
5903
+ }] } });
5904
+
5481
5905
  class UnorderedListItemDirective {
5482
5906
  get elem() {
5483
5907
  return this.elementRef.nativeElement;
@@ -5971,11 +6395,11 @@ class DynamicTableComponent {
5971
6395
  });
5972
6396
  }
5973
6397
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: DynamicTableComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
5974
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: DynamicTableComponent, isStandalone: false, selector: "dynamic-table", inputs: { label: "label", placeholder: "placeholder", dataLoader: "dataLoader", data: "data", selected: "selected", page: "page", urlParam: "urlParam", parallelData: "parallelData", columns: "columns", showFilter: "showFilter", itemsPerPage: "itemsPerPage", updateTime: "updateTime", filterTime: "filterTime", maxPages: "maxPages", directionLinks: "directionLinks", boundaryLinks: "boundaryLinks", orderBy: "orderBy", orderDescending: "orderDescending", testId: "testId", titlePrefix: "titlePrefix", dragStartFn: "dragStartFn", dragEnterFn: "dragEnterFn", dropFn: "dropFn" }, queries: [{ propertyName: "rowTemplate", first: true, predicate: ["rowTemplate"], descendants: true, static: true }, { propertyName: "wrapperTemplate", first: true, predicate: ["wrapperTemplate"], descendants: true, static: true }, { propertyName: "filterTemplate", first: true, predicate: ["filterTemplate"], descendants: true, static: true }, { propertyName: "templateDirectives", predicate: DynamicTableTemplateDirective }], viewQueries: [{ propertyName: "columnsTemplate", first: true, predicate: ["columnsTemplate"], descendants: true, static: true }, { propertyName: "defaultRowTemplate", first: true, predicate: ["defaultRowTemplate"], descendants: true, static: true }, { propertyName: "defaultWrapperTemplate", first: true, predicate: ["defaultWrapperTemplate"], descendants: true, static: true }, { propertyName: "defaultFilterTemplate", first: true, predicate: ["defaultFilterTemplate"], descendants: true, static: true }, { propertyName: "pagination", first: true, predicate: ["pagination"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-template #columnTemplate let-context let-column=\"column\" let-template=\"template\">\r\n <ng-template #defaultTemplate let-column=\"column\" let-item=\"item\">\r\n <span>{{ item[column] == undefined || item[column] == null ? '-' : item[column] }}</span>\r\n </ng-template>\r\n <ng-template #pureTemplate>\r\n <ng-container [ngxTemplateOutlet]=\"template.ref\" [context]=\"context\"></ng-container>\r\n </ng-template>\r\n <td [ngClass]=\"'column-' + column\"\r\n [attr.data-testid]=\"testId + '-' + column + '-' + context.rowIndex\" *ngIf=\"!template || !template.pure; else pureTemplate\">\r\n <ng-container [ngxTemplateOutlet]=\"!template ? defaultTemplate : template.ref\" [context]=\"context\"></ng-container>\r\n </td>\r\n</ng-template>\r\n\r\n<ng-template #columnsTemplate let-context>\r\n <ng-container *ngFor=\"let column of cols\"\r\n [ngxTemplateOutlet]=\"columnTemplate\"\r\n [context]=\"context\"\r\n [additionalContext]=\"{\r\n template: templates[column],\r\n column: column\r\n }\"></ng-container>\r\n</ng-template>\r\n\r\n<ng-template #defaultRowTemplate let-context>\r\n <tr draggable=\"true\"\r\n #elem\r\n [ngClass]=\"{active: selected === context.item}\"\r\n (dragstart)=\"onDragStart($event, elem, context.item)\"\r\n (dragenter)=\"onDragEnter($event, elem, context.item)\"\r\n (dragleave)=\"onDragLeave($event, elem)\"\r\n (drop)=\"onDrop($event, elem, context.item)\">\r\n <ng-container [ngxTemplateOutlet]=\"columnsTemplate\" [context]=\"context\"></ng-container>\r\n </tr>\r\n</ng-template>\r\n\r\n<ng-template #headerTemplate let-column=\"column\" let-toggle=\"toggle\">\r\n <ng-template #defaultCol>\r\n <span>{{ realColumns[column].title | translate }}</span>\r\n </ng-template>\r\n <a *ngIf=\"realColumns[column].sort; else defaultCol\"\r\n [ngClass]=\"orderBy !== column ? 'sort' : (orderDescending ? 'sort-desc' : 'sort-asc')\"\r\n (click)=\"setSorting(column, toggle)\">\r\n <span>{{ realColumns[column].title | translate }}</span>\r\n <i *ngIf=\"orderBy == column\"\r\n [icon]=\"orderBy !== column ? 'sort' : (orderDescending ? 'sort-desc' : 'sort-asc')\"></i>\r\n </a>\r\n</ng-template>\r\n\r\n<div class=\"dynamic-table\" #pagination=\"pagination\" [pagination]=\"loadData\" [page]=\"page\" [itemsPerPage]=\"itemsPerPage\" [updateTime]=\"updateTime\">\r\n <ng-template #defaultFilterTemplate let-table>\r\n <div class=\"table-filter\">\r\n <ng-container *ngIf=\"table.showFilter\">\r\n <label *ngIf=\"label\" [attr.for]=\"tableId\">\r\n {{ label | translate }}\r\n </label>\r\n <input type=\"text\"\r\n class=\"form-control\"\r\n [attr.id]=\"tableId\"\r\n [attr.data-testid]=\"testId + '-filter-input'\"\r\n [placeholder]=\"placeholder | translate\"\r\n [ngModel]=\"table.filter\"\r\n (ngModelChange)=\"table.setFilter($event)\"/>\r\n </ng-container>\r\n <ng-content select=\"[table-filter]\"></ng-content>\r\n </div>\r\n </ng-template>\r\n <ng-container [ngxTemplateOutlet]=\"filterTemplate || defaultFilterTemplate\" [context]=\"this\"></ng-container>\r\n <div class=\"sort-toggle\" toggle #sortToggle=\"toggle\" *ngIf=\"orderBy\">\r\n <div class=\"sort-toggle-content\">\r\n <ng-container [ngTemplateOutlet]=\"headerTemplate\"\r\n [ngTemplateOutletContext]=\"{column: orderBy, toggle: sortToggle}\"></ng-container>\r\n </div>\r\n <ul>\r\n <li *ngFor=\"let column of cols\" [ngClass]=\"'header-column column-' + column\">\r\n <ng-container [ngTemplateOutlet]=\"headerTemplate\"\r\n [ngTemplateOutletContext]=\"{column: column}\"></ng-container>\r\n </li>\r\n </ul>\r\n </div>\r\n <pagination-menu [urlParam]=\"urlParam\" [maxSize]=\"maxPages\" [directionLinks]=\"directionLinks\" [boundaryLinks]=\"boundaryLinks\"></pagination-menu>\r\n <div class=\"table-responsive\">\r\n <ng-template #defaultWrapperTemplate>\r\n <table class=\"table table-striped\">\r\n <thead>\r\n <tr class=\"header\">\r\n <th *ngFor=\"let column of cols\" [ngClass]=\"'header-column column-' + column\">\r\n <ng-container [ngTemplateOutlet]=\"headerTemplate\"\r\n [ngTemplateOutletContext]=\"{column: column}\"></ng-container>\r\n </th>\r\n </tr>\r\n <tr *ngIf=\"hasQuery\">\r\n <th *ngFor=\"let column of cols\" [ngClass]=\"['column-' + column, 'filter-column']\">\r\n <ng-container *ngIf=\"realColumns[column].filter\">\r\n <input class=\"form-control\"\r\n [attr.data-testid]=\"testId + '-filter-' + column\"\r\n [type]=\"realColumns[column].filterType || 'text'\"\r\n [placeholder]=\"realColumns[column].title | translate\"\r\n [ngModel]=\"query[column]\"\r\n (ngModelChange)=\"updateQuery(column, $event)\"/>\r\n </ng-container>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *paginationItem=\"let context\"\r\n [ngxTemplateOutlet]=\"rowTemplate\"\r\n [context]=\"context\"\r\n [additionalContext]=\"this\"></ng-container>\r\n </tbody>\r\n </table>\r\n </ng-template>\r\n\r\n <div class=\"table-wrapper\">\r\n <ng-content select=\"[table-top]\"></ng-content>\r\n <ng-container [ngxTemplateOutlet]=\"wrapperTemplate || defaultWrapperTemplate\"\r\n [context]=\"this\"></ng-container>\r\n <ng-content select=\"[table-bottom]\"></ng-content>\r\n </div>\r\n </div>\r\n <pagination-menu [urlParam]=\"urlParam\" [maxSize]=\"maxPages\" [directionLinks]=\"directionLinks\" [boundaryLinks]=\"boundaryLinks\"></pagination-menu>\r\n</div>\r\n", styles: [".dynamic-table{--table-bg: transparent;--table-stripe-bg: rgba(210, 210, 210, .35);--border-size: 2px;--bg-color: #FFFFFF;--text-color: #151515;--highlight-color: var(--primary-color, #888888)}.dynamic-table .sort-toggle{display:none;position:relative;margin:10px}.dynamic-table .sort-toggle .svg-icon{pointer-events:none}.dynamic-table .sort-toggle .sort-toggle-content{background:var(--bg-color);color:var(--text-color);border:var(--border-size) solid var(--highlight-color);border-radius:5px;cursor:pointer;padding-right:8px}.dynamic-table .sort-toggle a{padding:8px 12px}.dynamic-table .sort-toggle ul{margin:-2px 0 0;padding:0;list-style:none;position:absolute;z-index:1;width:100%;min-height:fit-content;border:var(--border-size) solid var(--highlight-color);border-radius:0 0 5px 5px;overflow:hidden;display:none}.dynamic-table .sort-toggle li{background:var(--bg-color);color:var(--text-color);cursor:pointer;padding-right:8px}.dynamic-table .sort-toggle .sort-toggle-content:hover,.dynamic-table .sort-toggle li:hover,.dynamic-table .sort-toggle li.active{background-color:var(--highlight-color);color:#fff}.dynamic-table .sort-toggle.open ul{display:block}.dynamic-table .table-responsive{overflow:hidden;overflow-x:auto}.dynamic-table .table-filter:not(:empty){display:flex;gap:10px;margin-bottom:20px}.dynamic-table .table-filter:not(:empty)>input{max-width:400px}.dynamic-table .table-wrapper{position:relative}.dynamic-table table.table{border-collapse:collapse;width:100%;font-family:inherit;font-size:inherit}.dynamic-table table.table th{text-align:left}.dynamic-table table.table td,.dynamic-table table.table th{text-align:left;padding:6px 12px;border:1px solid var(--border-color);vertical-align:middle}.dynamic-table table.table-sm th,.dynamic-table table.table-sm td{font-size:var(--font-size-sm);padding:4px 6px}.dynamic-table table.table thead th{font-weight:500}.dynamic-table table.table thead th a{color:var(--text-color);cursor:pointer}.dynamic-table table.table thead th span{display:inline-block;vertical-align:middle}.dynamic-table table.table thead th .svg-icon{float:right}.dynamic-table table.table thead th .svg-icon svg{width:20px;height:20px}.dynamic-table table.table tbody tr td{background-color:var(--table-bg)}.dynamic-table table.table tbody tr.active td{background-color:var(--highlight-color)}.dynamic-table .table-striped>tbody>tr:nth-of-type(odd) td{background-color:var(--table-stripe-bg)}.dynamic-table .table-striped>tbody>tr:nth-of-type(odd).active td{background-color:var(--highlight-color)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: IconDirective, selector: "[icon]", inputs: ["icon", "activeIcon", "active"], outputs: ["activeChange"] }, { kind: "directive", type: NgxTemplateOutletDirective, selector: "[ngxTemplateOutlet]", inputs: ["context", "additionalContext", "ngxTemplateOutlet"] }, { kind: "directive", type: PaginationDirective, selector: "[pagination]", inputs: ["pagination", "page", "itemsPerPage", "updateTime", "waitFor"], outputs: ["pageChange", "onRefresh"], exportAs: ["pagination"] }, { kind: "directive", type: PaginationItemDirective, selector: "[paginationItem]" }, { kind: "directive", type: ToggleDirective, selector: "[toggle]", inputs: ["closeInside", "keyboardHandler", "isDisabled"], outputs: ["onShown", "onHidden", "onKeyboard"], exportAs: ["toggle"] }, { kind: "component", type: PaginationMenuComponent, selector: "pagination-menu", inputs: ["maxSize", "urlParam", "directionLinks", "boundaryLinks"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
6398
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: DynamicTableComponent, isStandalone: false, selector: "dynamic-table", inputs: { label: "label", placeholder: "placeholder", dataLoader: "dataLoader", data: "data", selected: "selected", page: "page", urlParam: "urlParam", parallelData: "parallelData", columns: "columns", showFilter: "showFilter", itemsPerPage: "itemsPerPage", updateTime: "updateTime", filterTime: "filterTime", maxPages: "maxPages", directionLinks: "directionLinks", boundaryLinks: "boundaryLinks", orderBy: "orderBy", orderDescending: "orderDescending", testId: "testId", titlePrefix: "titlePrefix", dragStartFn: "dragStartFn", dragEnterFn: "dragEnterFn", dropFn: "dropFn" }, queries: [{ propertyName: "rowTemplate", first: true, predicate: ["rowTemplate"], descendants: true, static: true }, { propertyName: "wrapperTemplate", first: true, predicate: ["wrapperTemplate"], descendants: true, static: true }, { propertyName: "filterTemplate", first: true, predicate: ["filterTemplate"], descendants: true, static: true }, { propertyName: "templateDirectives", predicate: DynamicTableTemplateDirective }], viewQueries: [{ propertyName: "columnsTemplate", first: true, predicate: ["columnsTemplate"], descendants: true, static: true }, { propertyName: "defaultRowTemplate", first: true, predicate: ["defaultRowTemplate"], descendants: true, static: true }, { propertyName: "defaultWrapperTemplate", first: true, predicate: ["defaultWrapperTemplate"], descendants: true, static: true }, { propertyName: "defaultFilterTemplate", first: true, predicate: ["defaultFilterTemplate"], descendants: true, static: true }, { propertyName: "pagination", first: true, predicate: ["pagination"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<ng-template #columnTemplate let-context let-column=\"column\" let-template=\"template\">\r\n <ng-template #defaultTemplate let-column=\"column\" let-item=\"item\">\r\n <span>{{ item[column] == undefined || item[column] == null ? '-' : item[column] }}</span>\r\n </ng-template>\r\n <ng-template #pureTemplate>\r\n <ng-container [ngxTemplateOutlet]=\"template.ref\" [context]=\"context\"></ng-container>\r\n </ng-template>\r\n <td [ngClass]=\"'column-' + column\"\r\n [attr.data-testid]=\"testId + '-' + column + '-' + context.rowIndex\" *ngIf=\"!template || !template.pure; else pureTemplate\">\r\n <ng-container [ngxTemplateOutlet]=\"!template ? defaultTemplate : template.ref\" [context]=\"context\"></ng-container>\r\n </td>\r\n</ng-template>\r\n\r\n<ng-template #columnsTemplate let-context>\r\n <ng-container *ngFor=\"let column of cols\"\r\n [ngxTemplateOutlet]=\"columnTemplate\"\r\n [context]=\"context\"\r\n [additionalContext]=\"{\r\n template: templates[column],\r\n column: column\r\n }\"></ng-container>\r\n</ng-template>\r\n\r\n<ng-template #defaultRowTemplate let-context>\r\n <tr draggable=\"true\"\r\n #elem\r\n [ngClass]=\"{active: selected === context.item}\"\r\n (dragstart)=\"onDragStart($event, elem, context.item)\"\r\n (dragenter)=\"onDragEnter($event, elem, context.item)\"\r\n (dragleave)=\"onDragLeave($event, elem)\"\r\n (drop)=\"onDrop($event, elem, context.item)\">\r\n <ng-container [ngxTemplateOutlet]=\"columnsTemplate\" [context]=\"context\"></ng-container>\r\n </tr>\r\n</ng-template>\r\n\r\n<ng-template #headerTemplate let-column=\"column\" let-toggle=\"toggle\">\r\n <ng-template #defaultCol>\r\n <span>{{ realColumns[column].title | translate }}</span>\r\n </ng-template>\r\n <a *ngIf=\"realColumns[column].sort; else defaultCol\"\r\n [ngClass]=\"orderBy !== column ? 'sort' : (orderDescending ? 'sort-desc' : 'sort-asc')\"\r\n (click)=\"setSorting(column, toggle)\">\r\n <span>{{ realColumns[column].title | translate }}</span>\r\n <i *ngIf=\"orderBy == column\"\r\n [icon]=\"orderBy !== column ? 'sort' : (orderDescending ? 'sort-desc' : 'sort-asc')\"></i>\r\n </a>\r\n</ng-template>\r\n\r\n<div class=\"dynamic-table\" #pagination=\"pagination\" [pagination]=\"loadData\" [page]=\"page\" [itemsPerPage]=\"itemsPerPage\" [updateTime]=\"updateTime\">\r\n <ng-template #defaultFilterTemplate let-table>\r\n <div class=\"table-filter\">\r\n <ng-container *ngIf=\"table.showFilter\">\r\n <label *ngIf=\"label\" [attr.for]=\"tableId\">\r\n {{ label | translate }}\r\n </label>\r\n <input type=\"text\"\r\n class=\"form-control\"\r\n [attr.id]=\"tableId\"\r\n [attr.data-testid]=\"testId + '-filter-input'\"\r\n [placeholder]=\"placeholder | translate\"\r\n [ngModel]=\"table.filter\"\r\n (ngModelChange)=\"table.setFilter($event)\"/>\r\n </ng-container>\r\n <ng-content select=\"[table-filter]\"></ng-content>\r\n </div>\r\n </ng-template>\r\n <ng-container [ngxTemplateOutlet]=\"filterTemplate || defaultFilterTemplate\" [context]=\"this\"></ng-container>\r\n <div class=\"sort-toggle\" dd #sortDd=\"dropdown\" *ngIf=\"orderBy\">\r\n <div class=\"sort-toggle-content\">\r\n <ng-container [ngTemplateOutlet]=\"headerTemplate\"\r\n [ngTemplateOutletContext]=\"{column: orderBy, toggle: sortDd}\"></ng-container>\r\n </div>\r\n <ul>\r\n <li *ngFor=\"let column of cols\" [ngClass]=\"'header-column column-' + column\">\r\n <ng-container [ngTemplateOutlet]=\"headerTemplate\"\r\n [ngTemplateOutletContext]=\"{column: column}\"></ng-container>\r\n </li>\r\n </ul>\r\n </div>\r\n <pagination-menu [urlParam]=\"urlParam\" [maxSize]=\"maxPages\" [directionLinks]=\"directionLinks\" [boundaryLinks]=\"boundaryLinks\"></pagination-menu>\r\n <div class=\"table-responsive\">\r\n <ng-template #defaultWrapperTemplate>\r\n <table class=\"table table-striped\">\r\n <thead>\r\n <tr class=\"header\">\r\n <th *ngFor=\"let column of cols\" [ngClass]=\"'header-column column-' + column\">\r\n <ng-container [ngTemplateOutlet]=\"headerTemplate\"\r\n [ngTemplateOutletContext]=\"{column: column}\"></ng-container>\r\n </th>\r\n </tr>\r\n <tr *ngIf=\"hasQuery\">\r\n <th *ngFor=\"let column of cols\" [ngClass]=\"['column-' + column, 'filter-column']\">\r\n <ng-container *ngIf=\"realColumns[column].filter\">\r\n <input class=\"form-control\"\r\n [attr.data-testid]=\"testId + '-filter-' + column\"\r\n [type]=\"realColumns[column].filterType || 'text'\"\r\n [placeholder]=\"realColumns[column].title | translate\"\r\n [ngModel]=\"query[column]\"\r\n (ngModelChange)=\"updateQuery(column, $event)\"/>\r\n </ng-container>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *paginationItem=\"let context\"\r\n [ngxTemplateOutlet]=\"rowTemplate\"\r\n [context]=\"context\"\r\n [additionalContext]=\"this\"></ng-container>\r\n </tbody>\r\n </table>\r\n </ng-template>\r\n\r\n <div class=\"table-wrapper\">\r\n <ng-content select=\"[table-top]\"></ng-content>\r\n <ng-container [ngxTemplateOutlet]=\"wrapperTemplate || defaultWrapperTemplate\"\r\n [context]=\"this\"></ng-container>\r\n <ng-content select=\"[table-bottom]\"></ng-content>\r\n </div>\r\n </div>\r\n <pagination-menu [urlParam]=\"urlParam\" [maxSize]=\"maxPages\" [directionLinks]=\"directionLinks\" [boundaryLinks]=\"boundaryLinks\"></pagination-menu>\r\n</div>\r\n", styles: [".dynamic-table{--table-bg: transparent;--table-stripe-bg: rgba(210, 210, 210, .35);--border-size: 2px;--bg-color: #FFFFFF;--text-color: #151515;--highlight-color: var(--primary-color, #888888)}.dynamic-table .sort-toggle{display:none;position:relative;margin:10px}.dynamic-table .sort-toggle .svg-icon{pointer-events:none}.dynamic-table .sort-toggle .sort-toggle-content{background:var(--bg-color);color:var(--text-color);border:var(--border-size) solid var(--highlight-color);border-radius:5px;cursor:pointer;padding-right:8px}.dynamic-table .sort-toggle a{padding:8px 12px}.dynamic-table .sort-toggle ul{margin:-2px 0 0;padding:0;list-style:none;position:absolute;z-index:1;width:100%;min-height:fit-content;border:var(--border-size) solid var(--highlight-color);border-radius:0 0 5px 5px;overflow:hidden;display:none}.dynamic-table .sort-toggle li{background:var(--bg-color);color:var(--text-color);cursor:pointer;padding-right:8px}.dynamic-table .sort-toggle .sort-toggle-content:hover,.dynamic-table .sort-toggle li:hover,.dynamic-table .sort-toggle li.active{background-color:var(--highlight-color);color:#fff}.dynamic-table .sort-toggle.open ul{display:block}.dynamic-table .table-responsive{overflow:hidden;overflow-x:auto}.dynamic-table .table-filter:not(:empty){display:flex;gap:10px;margin-bottom:20px}.dynamic-table .table-filter:not(:empty)>input{max-width:400px}.dynamic-table .table-wrapper{position:relative}.dynamic-table table.table{border-collapse:collapse;width:100%;font-family:inherit;font-size:inherit}.dynamic-table table.table th{text-align:left}.dynamic-table table.table td,.dynamic-table table.table th{text-align:left;padding:6px 12px;border:1px solid var(--border-color);vertical-align:middle}.dynamic-table table.table-sm th,.dynamic-table table.table-sm td{font-size:var(--font-size-sm);padding:4px 6px}.dynamic-table table.table thead th{font-weight:500}.dynamic-table table.table thead th a{color:var(--text-color);cursor:pointer}.dynamic-table table.table thead th span{display:inline-block;vertical-align:middle}.dynamic-table table.table thead th .svg-icon{float:right}.dynamic-table table.table thead th .svg-icon svg{width:20px;height:20px}.dynamic-table table.table tbody tr td{background-color:var(--table-bg)}.dynamic-table table.table tbody tr.active td{background-color:var(--highlight-color)}.dynamic-table .table-striped>tbody>tr:nth-of-type(odd) td{background-color:var(--table-stripe-bg)}.dynamic-table .table-striped>tbody>tr:nth-of-type(odd).active td{background-color:var(--highlight-color)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: IconDirective, selector: "[icon]", inputs: ["icon", "activeIcon", "active"], outputs: ["activeChange"] }, { kind: "directive", type: NgxTemplateOutletDirective, selector: "[ngxTemplateOutlet]", inputs: ["context", "additionalContext", "ngxTemplateOutlet"] }, { kind: "directive", type: PaginationDirective, selector: "[pagination]", inputs: ["pagination", "page", "itemsPerPage", "updateTime", "waitFor"], outputs: ["pageChange", "onRefresh"], exportAs: ["pagination"] }, { kind: "directive", type: PaginationItemDirective, selector: "[paginationItem]" }, { kind: "directive", type: DropdownDirective, selector: "[dd],[drop-down]", inputs: ["closeInside", "keyboardHandler", "isDisabled"], outputs: ["onShown", "onHidden", "onKeyboard"], exportAs: ["dropdown"] }, { kind: "component", type: PaginationMenuComponent, selector: "pagination-menu", inputs: ["maxSize", "urlParam", "directionLinks", "boundaryLinks"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], encapsulation: i0.ViewEncapsulation.None }); }
5975
6399
  }
5976
6400
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: DynamicTableComponent, decorators: [{
5977
6401
  type: Component,
5978
- args: [{ standalone: false, encapsulation: ViewEncapsulation.None, selector: "dynamic-table", template: "<ng-template #columnTemplate let-context let-column=\"column\" let-template=\"template\">\r\n <ng-template #defaultTemplate let-column=\"column\" let-item=\"item\">\r\n <span>{{ item[column] == undefined || item[column] == null ? '-' : item[column] }}</span>\r\n </ng-template>\r\n <ng-template #pureTemplate>\r\n <ng-container [ngxTemplateOutlet]=\"template.ref\" [context]=\"context\"></ng-container>\r\n </ng-template>\r\n <td [ngClass]=\"'column-' + column\"\r\n [attr.data-testid]=\"testId + '-' + column + '-' + context.rowIndex\" *ngIf=\"!template || !template.pure; else pureTemplate\">\r\n <ng-container [ngxTemplateOutlet]=\"!template ? defaultTemplate : template.ref\" [context]=\"context\"></ng-container>\r\n </td>\r\n</ng-template>\r\n\r\n<ng-template #columnsTemplate let-context>\r\n <ng-container *ngFor=\"let column of cols\"\r\n [ngxTemplateOutlet]=\"columnTemplate\"\r\n [context]=\"context\"\r\n [additionalContext]=\"{\r\n template: templates[column],\r\n column: column\r\n }\"></ng-container>\r\n</ng-template>\r\n\r\n<ng-template #defaultRowTemplate let-context>\r\n <tr draggable=\"true\"\r\n #elem\r\n [ngClass]=\"{active: selected === context.item}\"\r\n (dragstart)=\"onDragStart($event, elem, context.item)\"\r\n (dragenter)=\"onDragEnter($event, elem, context.item)\"\r\n (dragleave)=\"onDragLeave($event, elem)\"\r\n (drop)=\"onDrop($event, elem, context.item)\">\r\n <ng-container [ngxTemplateOutlet]=\"columnsTemplate\" [context]=\"context\"></ng-container>\r\n </tr>\r\n</ng-template>\r\n\r\n<ng-template #headerTemplate let-column=\"column\" let-toggle=\"toggle\">\r\n <ng-template #defaultCol>\r\n <span>{{ realColumns[column].title | translate }}</span>\r\n </ng-template>\r\n <a *ngIf=\"realColumns[column].sort; else defaultCol\"\r\n [ngClass]=\"orderBy !== column ? 'sort' : (orderDescending ? 'sort-desc' : 'sort-asc')\"\r\n (click)=\"setSorting(column, toggle)\">\r\n <span>{{ realColumns[column].title | translate }}</span>\r\n <i *ngIf=\"orderBy == column\"\r\n [icon]=\"orderBy !== column ? 'sort' : (orderDescending ? 'sort-desc' : 'sort-asc')\"></i>\r\n </a>\r\n</ng-template>\r\n\r\n<div class=\"dynamic-table\" #pagination=\"pagination\" [pagination]=\"loadData\" [page]=\"page\" [itemsPerPage]=\"itemsPerPage\" [updateTime]=\"updateTime\">\r\n <ng-template #defaultFilterTemplate let-table>\r\n <div class=\"table-filter\">\r\n <ng-container *ngIf=\"table.showFilter\">\r\n <label *ngIf=\"label\" [attr.for]=\"tableId\">\r\n {{ label | translate }}\r\n </label>\r\n <input type=\"text\"\r\n class=\"form-control\"\r\n [attr.id]=\"tableId\"\r\n [attr.data-testid]=\"testId + '-filter-input'\"\r\n [placeholder]=\"placeholder | translate\"\r\n [ngModel]=\"table.filter\"\r\n (ngModelChange)=\"table.setFilter($event)\"/>\r\n </ng-container>\r\n <ng-content select=\"[table-filter]\"></ng-content>\r\n </div>\r\n </ng-template>\r\n <ng-container [ngxTemplateOutlet]=\"filterTemplate || defaultFilterTemplate\" [context]=\"this\"></ng-container>\r\n <div class=\"sort-toggle\" toggle #sortToggle=\"toggle\" *ngIf=\"orderBy\">\r\n <div class=\"sort-toggle-content\">\r\n <ng-container [ngTemplateOutlet]=\"headerTemplate\"\r\n [ngTemplateOutletContext]=\"{column: orderBy, toggle: sortToggle}\"></ng-container>\r\n </div>\r\n <ul>\r\n <li *ngFor=\"let column of cols\" [ngClass]=\"'header-column column-' + column\">\r\n <ng-container [ngTemplateOutlet]=\"headerTemplate\"\r\n [ngTemplateOutletContext]=\"{column: column}\"></ng-container>\r\n </li>\r\n </ul>\r\n </div>\r\n <pagination-menu [urlParam]=\"urlParam\" [maxSize]=\"maxPages\" [directionLinks]=\"directionLinks\" [boundaryLinks]=\"boundaryLinks\"></pagination-menu>\r\n <div class=\"table-responsive\">\r\n <ng-template #defaultWrapperTemplate>\r\n <table class=\"table table-striped\">\r\n <thead>\r\n <tr class=\"header\">\r\n <th *ngFor=\"let column of cols\" [ngClass]=\"'header-column column-' + column\">\r\n <ng-container [ngTemplateOutlet]=\"headerTemplate\"\r\n [ngTemplateOutletContext]=\"{column: column}\"></ng-container>\r\n </th>\r\n </tr>\r\n <tr *ngIf=\"hasQuery\">\r\n <th *ngFor=\"let column of cols\" [ngClass]=\"['column-' + column, 'filter-column']\">\r\n <ng-container *ngIf=\"realColumns[column].filter\">\r\n <input class=\"form-control\"\r\n [attr.data-testid]=\"testId + '-filter-' + column\"\r\n [type]=\"realColumns[column].filterType || 'text'\"\r\n [placeholder]=\"realColumns[column].title | translate\"\r\n [ngModel]=\"query[column]\"\r\n (ngModelChange)=\"updateQuery(column, $event)\"/>\r\n </ng-container>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *paginationItem=\"let context\"\r\n [ngxTemplateOutlet]=\"rowTemplate\"\r\n [context]=\"context\"\r\n [additionalContext]=\"this\"></ng-container>\r\n </tbody>\r\n </table>\r\n </ng-template>\r\n\r\n <div class=\"table-wrapper\">\r\n <ng-content select=\"[table-top]\"></ng-content>\r\n <ng-container [ngxTemplateOutlet]=\"wrapperTemplate || defaultWrapperTemplate\"\r\n [context]=\"this\"></ng-container>\r\n <ng-content select=\"[table-bottom]\"></ng-content>\r\n </div>\r\n </div>\r\n <pagination-menu [urlParam]=\"urlParam\" [maxSize]=\"maxPages\" [directionLinks]=\"directionLinks\" [boundaryLinks]=\"boundaryLinks\"></pagination-menu>\r\n</div>\r\n", styles: [".dynamic-table{--table-bg: transparent;--table-stripe-bg: rgba(210, 210, 210, .35);--border-size: 2px;--bg-color: #FFFFFF;--text-color: #151515;--highlight-color: var(--primary-color, #888888)}.dynamic-table .sort-toggle{display:none;position:relative;margin:10px}.dynamic-table .sort-toggle .svg-icon{pointer-events:none}.dynamic-table .sort-toggle .sort-toggle-content{background:var(--bg-color);color:var(--text-color);border:var(--border-size) solid var(--highlight-color);border-radius:5px;cursor:pointer;padding-right:8px}.dynamic-table .sort-toggle a{padding:8px 12px}.dynamic-table .sort-toggle ul{margin:-2px 0 0;padding:0;list-style:none;position:absolute;z-index:1;width:100%;min-height:fit-content;border:var(--border-size) solid var(--highlight-color);border-radius:0 0 5px 5px;overflow:hidden;display:none}.dynamic-table .sort-toggle li{background:var(--bg-color);color:var(--text-color);cursor:pointer;padding-right:8px}.dynamic-table .sort-toggle .sort-toggle-content:hover,.dynamic-table .sort-toggle li:hover,.dynamic-table .sort-toggle li.active{background-color:var(--highlight-color);color:#fff}.dynamic-table .sort-toggle.open ul{display:block}.dynamic-table .table-responsive{overflow:hidden;overflow-x:auto}.dynamic-table .table-filter:not(:empty){display:flex;gap:10px;margin-bottom:20px}.dynamic-table .table-filter:not(:empty)>input{max-width:400px}.dynamic-table .table-wrapper{position:relative}.dynamic-table table.table{border-collapse:collapse;width:100%;font-family:inherit;font-size:inherit}.dynamic-table table.table th{text-align:left}.dynamic-table table.table td,.dynamic-table table.table th{text-align:left;padding:6px 12px;border:1px solid var(--border-color);vertical-align:middle}.dynamic-table table.table-sm th,.dynamic-table table.table-sm td{font-size:var(--font-size-sm);padding:4px 6px}.dynamic-table table.table thead th{font-weight:500}.dynamic-table table.table thead th a{color:var(--text-color);cursor:pointer}.dynamic-table table.table thead th span{display:inline-block;vertical-align:middle}.dynamic-table table.table thead th .svg-icon{float:right}.dynamic-table table.table thead th .svg-icon svg{width:20px;height:20px}.dynamic-table table.table tbody tr td{background-color:var(--table-bg)}.dynamic-table table.table tbody tr.active td{background-color:var(--highlight-color)}.dynamic-table .table-striped>tbody>tr:nth-of-type(odd) td{background-color:var(--table-stripe-bg)}.dynamic-table .table-striped>tbody>tr:nth-of-type(odd).active td{background-color:var(--highlight-color)}\n"] }]
6402
+ args: [{ standalone: false, encapsulation: ViewEncapsulation.None, selector: "dynamic-table", template: "<ng-template #columnTemplate let-context let-column=\"column\" let-template=\"template\">\r\n <ng-template #defaultTemplate let-column=\"column\" let-item=\"item\">\r\n <span>{{ item[column] == undefined || item[column] == null ? '-' : item[column] }}</span>\r\n </ng-template>\r\n <ng-template #pureTemplate>\r\n <ng-container [ngxTemplateOutlet]=\"template.ref\" [context]=\"context\"></ng-container>\r\n </ng-template>\r\n <td [ngClass]=\"'column-' + column\"\r\n [attr.data-testid]=\"testId + '-' + column + '-' + context.rowIndex\" *ngIf=\"!template || !template.pure; else pureTemplate\">\r\n <ng-container [ngxTemplateOutlet]=\"!template ? defaultTemplate : template.ref\" [context]=\"context\"></ng-container>\r\n </td>\r\n</ng-template>\r\n\r\n<ng-template #columnsTemplate let-context>\r\n <ng-container *ngFor=\"let column of cols\"\r\n [ngxTemplateOutlet]=\"columnTemplate\"\r\n [context]=\"context\"\r\n [additionalContext]=\"{\r\n template: templates[column],\r\n column: column\r\n }\"></ng-container>\r\n</ng-template>\r\n\r\n<ng-template #defaultRowTemplate let-context>\r\n <tr draggable=\"true\"\r\n #elem\r\n [ngClass]=\"{active: selected === context.item}\"\r\n (dragstart)=\"onDragStart($event, elem, context.item)\"\r\n (dragenter)=\"onDragEnter($event, elem, context.item)\"\r\n (dragleave)=\"onDragLeave($event, elem)\"\r\n (drop)=\"onDrop($event, elem, context.item)\">\r\n <ng-container [ngxTemplateOutlet]=\"columnsTemplate\" [context]=\"context\"></ng-container>\r\n </tr>\r\n</ng-template>\r\n\r\n<ng-template #headerTemplate let-column=\"column\" let-toggle=\"toggle\">\r\n <ng-template #defaultCol>\r\n <span>{{ realColumns[column].title | translate }}</span>\r\n </ng-template>\r\n <a *ngIf=\"realColumns[column].sort; else defaultCol\"\r\n [ngClass]=\"orderBy !== column ? 'sort' : (orderDescending ? 'sort-desc' : 'sort-asc')\"\r\n (click)=\"setSorting(column, toggle)\">\r\n <span>{{ realColumns[column].title | translate }}</span>\r\n <i *ngIf=\"orderBy == column\"\r\n [icon]=\"orderBy !== column ? 'sort' : (orderDescending ? 'sort-desc' : 'sort-asc')\"></i>\r\n </a>\r\n</ng-template>\r\n\r\n<div class=\"dynamic-table\" #pagination=\"pagination\" [pagination]=\"loadData\" [page]=\"page\" [itemsPerPage]=\"itemsPerPage\" [updateTime]=\"updateTime\">\r\n <ng-template #defaultFilterTemplate let-table>\r\n <div class=\"table-filter\">\r\n <ng-container *ngIf=\"table.showFilter\">\r\n <label *ngIf=\"label\" [attr.for]=\"tableId\">\r\n {{ label | translate }}\r\n </label>\r\n <input type=\"text\"\r\n class=\"form-control\"\r\n [attr.id]=\"tableId\"\r\n [attr.data-testid]=\"testId + '-filter-input'\"\r\n [placeholder]=\"placeholder | translate\"\r\n [ngModel]=\"table.filter\"\r\n (ngModelChange)=\"table.setFilter($event)\"/>\r\n </ng-container>\r\n <ng-content select=\"[table-filter]\"></ng-content>\r\n </div>\r\n </ng-template>\r\n <ng-container [ngxTemplateOutlet]=\"filterTemplate || defaultFilterTemplate\" [context]=\"this\"></ng-container>\r\n <div class=\"sort-toggle\" dd #sortDd=\"dropdown\" *ngIf=\"orderBy\">\r\n <div class=\"sort-toggle-content\">\r\n <ng-container [ngTemplateOutlet]=\"headerTemplate\"\r\n [ngTemplateOutletContext]=\"{column: orderBy, toggle: sortDd}\"></ng-container>\r\n </div>\r\n <ul>\r\n <li *ngFor=\"let column of cols\" [ngClass]=\"'header-column column-' + column\">\r\n <ng-container [ngTemplateOutlet]=\"headerTemplate\"\r\n [ngTemplateOutletContext]=\"{column: column}\"></ng-container>\r\n </li>\r\n </ul>\r\n </div>\r\n <pagination-menu [urlParam]=\"urlParam\" [maxSize]=\"maxPages\" [directionLinks]=\"directionLinks\" [boundaryLinks]=\"boundaryLinks\"></pagination-menu>\r\n <div class=\"table-responsive\">\r\n <ng-template #defaultWrapperTemplate>\r\n <table class=\"table table-striped\">\r\n <thead>\r\n <tr class=\"header\">\r\n <th *ngFor=\"let column of cols\" [ngClass]=\"'header-column column-' + column\">\r\n <ng-container [ngTemplateOutlet]=\"headerTemplate\"\r\n [ngTemplateOutletContext]=\"{column: column}\"></ng-container>\r\n </th>\r\n </tr>\r\n <tr *ngIf=\"hasQuery\">\r\n <th *ngFor=\"let column of cols\" [ngClass]=\"['column-' + column, 'filter-column']\">\r\n <ng-container *ngIf=\"realColumns[column].filter\">\r\n <input class=\"form-control\"\r\n [attr.data-testid]=\"testId + '-filter-' + column\"\r\n [type]=\"realColumns[column].filterType || 'text'\"\r\n [placeholder]=\"realColumns[column].title | translate\"\r\n [ngModel]=\"query[column]\"\r\n (ngModelChange)=\"updateQuery(column, $event)\"/>\r\n </ng-container>\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <ng-container *paginationItem=\"let context\"\r\n [ngxTemplateOutlet]=\"rowTemplate\"\r\n [context]=\"context\"\r\n [additionalContext]=\"this\"></ng-container>\r\n </tbody>\r\n </table>\r\n </ng-template>\r\n\r\n <div class=\"table-wrapper\">\r\n <ng-content select=\"[table-top]\"></ng-content>\r\n <ng-container [ngxTemplateOutlet]=\"wrapperTemplate || defaultWrapperTemplate\"\r\n [context]=\"this\"></ng-container>\r\n <ng-content select=\"[table-bottom]\"></ng-content>\r\n </div>\r\n </div>\r\n <pagination-menu [urlParam]=\"urlParam\" [maxSize]=\"maxPages\" [directionLinks]=\"directionLinks\" [boundaryLinks]=\"boundaryLinks\"></pagination-menu>\r\n</div>\r\n", styles: [".dynamic-table{--table-bg: transparent;--table-stripe-bg: rgba(210, 210, 210, .35);--border-size: 2px;--bg-color: #FFFFFF;--text-color: #151515;--highlight-color: var(--primary-color, #888888)}.dynamic-table .sort-toggle{display:none;position:relative;margin:10px}.dynamic-table .sort-toggle .svg-icon{pointer-events:none}.dynamic-table .sort-toggle .sort-toggle-content{background:var(--bg-color);color:var(--text-color);border:var(--border-size) solid var(--highlight-color);border-radius:5px;cursor:pointer;padding-right:8px}.dynamic-table .sort-toggle a{padding:8px 12px}.dynamic-table .sort-toggle ul{margin:-2px 0 0;padding:0;list-style:none;position:absolute;z-index:1;width:100%;min-height:fit-content;border:var(--border-size) solid var(--highlight-color);border-radius:0 0 5px 5px;overflow:hidden;display:none}.dynamic-table .sort-toggle li{background:var(--bg-color);color:var(--text-color);cursor:pointer;padding-right:8px}.dynamic-table .sort-toggle .sort-toggle-content:hover,.dynamic-table .sort-toggle li:hover,.dynamic-table .sort-toggle li.active{background-color:var(--highlight-color);color:#fff}.dynamic-table .sort-toggle.open ul{display:block}.dynamic-table .table-responsive{overflow:hidden;overflow-x:auto}.dynamic-table .table-filter:not(:empty){display:flex;gap:10px;margin-bottom:20px}.dynamic-table .table-filter:not(:empty)>input{max-width:400px}.dynamic-table .table-wrapper{position:relative}.dynamic-table table.table{border-collapse:collapse;width:100%;font-family:inherit;font-size:inherit}.dynamic-table table.table th{text-align:left}.dynamic-table table.table td,.dynamic-table table.table th{text-align:left;padding:6px 12px;border:1px solid var(--border-color);vertical-align:middle}.dynamic-table table.table-sm th,.dynamic-table table.table-sm td{font-size:var(--font-size-sm);padding:4px 6px}.dynamic-table table.table thead th{font-weight:500}.dynamic-table table.table thead th a{color:var(--text-color);cursor:pointer}.dynamic-table table.table thead th span{display:inline-block;vertical-align:middle}.dynamic-table table.table thead th .svg-icon{float:right}.dynamic-table table.table thead th .svg-icon svg{width:20px;height:20px}.dynamic-table table.table tbody tr td{background-color:var(--table-bg)}.dynamic-table table.table tbody tr.active td{background-color:var(--highlight-color)}.dynamic-table .table-striped>tbody>tr:nth-of-type(odd) td{background-color:var(--table-stripe-bg)}.dynamic-table .table-striped>tbody>tr:nth-of-type(odd).active td{background-color:var(--highlight-color)}\n"] }]
5979
6403
  }], ctorParameters: () => [], propDecorators: { label: [{
5980
6404
  type: Input
5981
6405
  }], placeholder: [{
@@ -6051,6 +6475,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImpor
6051
6475
  args: [DynamicTableTemplateDirective]
6052
6476
  }] } });
6053
6477
 
6478
+ class FakeModuleComponent {
6479
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: FakeModuleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
6480
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.0.3", type: FakeModuleComponent, isStandalone: false, selector: "fake-module-component", ngImport: i0, template: "", isInline: true, encapsulation: i0.ViewEncapsulation.None }); }
6481
+ }
6482
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: FakeModuleComponent, decorators: [{
6483
+ type: Component,
6484
+ args: [{
6485
+ standalone: false,
6486
+ encapsulation: ViewEncapsulation.None,
6487
+ selector: "fake-module-component",
6488
+ template: "",
6489
+ }]
6490
+ }] });
6491
+
6054
6492
  class UnorderedListComponent {
6055
6493
  constructor(cdr) {
6056
6494
  this.cdr = cdr;
@@ -6385,7 +6823,8 @@ const directives = [
6385
6823
  ResourceIfDirective,
6386
6824
  StickyDirective,
6387
6825
  StickyClassDirective,
6388
- ToggleDirective,
6826
+ DropdownDirective,
6827
+ DropdownToggleDirective,
6389
6828
  UnorderedListItemDirective,
6390
6829
  UnorderedListTemplateDirective
6391
6830
  ];
@@ -6393,6 +6832,7 @@ const directives = [
6393
6832
  const components = [
6394
6833
  DropListComponent,
6395
6834
  DynamicTableComponent,
6835
+ FakeModuleComponent,
6396
6836
  PaginationMenuComponent,
6397
6837
  UnorderedListComponent,
6398
6838
  UploadComponent
@@ -6416,10 +6856,12 @@ const providers = [
6416
6856
  LocalHttpService,
6417
6857
  OpenApiService,
6418
6858
  PromiseService,
6859
+ SocketService,
6419
6860
  StateService,
6420
6861
  StaticLanguageService,
6421
6862
  StorageService,
6422
6863
  BaseToasterService,
6864
+ ComponentLoaderService,
6423
6865
  TranslatedUrlSerializer,
6424
6866
  UniversalService,
6425
6867
  WasmService,
@@ -6707,6 +7149,10 @@ class NgxUtilsModule {
6707
7149
  provide: RESIZE_STRATEGY,
6708
7150
  useValue: (!config ? null : config.resizeStrategy) ?? "object",
6709
7151
  },
7152
+ {
7153
+ provide: SOCKET_IO_PATH,
7154
+ useValue: (!config ? null : config.socketPath) ?? "/socket",
7155
+ },
6710
7156
  {
6711
7157
  provide: APP_INITIALIZER,
6712
7158
  useFactory: (!config ? null : config.initializeApp) || loadConfig,
@@ -6729,11 +7175,37 @@ class NgxUtilsModule {
6729
7175
  static provideUtils(config) {
6730
7176
  return makeEnvironmentProviders(NgxUtilsModule.getProviders(config));
6731
7177
  }
7178
+ static useDynamic(moduleInfo) {
7179
+ return {
7180
+ ngModule: NgxUtilsModule,
7181
+ providers: [
7182
+ {
7183
+ provide: ROUTES,
7184
+ multi: true,
7185
+ useValue: [
7186
+ {
7187
+ loadChildren: moduleInfo.loadChildren,
7188
+ matcher: AuthGuard.noRouteMatch
7189
+ },
7190
+ {
7191
+ component: FakeModuleComponent,
7192
+ matcher: AuthGuard.wildRouteMatch
7193
+ }
7194
+ ]
7195
+ },
7196
+ {
7197
+ provide: DYNAMIC_MODULE_INFO,
7198
+ useValue: moduleInfo,
7199
+ multi: true
7200
+ }
7201
+ ]
7202
+ };
7203
+ }
6732
7204
  constructor() {
6733
7205
  }
6734
7206
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: NgxUtilsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
6735
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.3", ngImport: i0, type: NgxUtilsModule, declarations: [ChunkPipe, EntriesPipe, ExtraItemPropertiesPipe, FilterPipe, FindPipe, FormatNumberPipe, GetOffsetPipe, GetTypePipe, GetValuePipe, GlobalTemplatePipe, GroupByPipe, IsTypePipe, JoinPipe, KeysPipe, MapPipe, MaxPipe, MinPipe, PopPipe, ReducePipe, RemapPipe, ReplacePipe, ReversePipe, RoundPipe, SafeHtmlPipe, ShiftPipe, SplitPipe, TranslatePipe, ValuesPipe, AsyncMethodBase, AsyncMethodDirective, BackgroundDirective, DynamicTableTemplateDirective, GlobalTemplateDirective, IconDirective, NgxTemplateOutletDirective, PaginationDirective, PaginationItemDirective, ResourceIfDirective, StickyDirective, StickyClassDirective, ToggleDirective, UnorderedListItemDirective, UnorderedListTemplateDirective, DropListComponent, DynamicTableComponent, PaginationMenuComponent, UnorderedListComponent, UploadComponent], imports: [CommonModule,
6736
- FormsModule], exports: [ChunkPipe, EntriesPipe, ExtraItemPropertiesPipe, FilterPipe, FindPipe, FormatNumberPipe, GetOffsetPipe, GetTypePipe, GetValuePipe, GlobalTemplatePipe, GroupByPipe, IsTypePipe, JoinPipe, KeysPipe, MapPipe, MaxPipe, MinPipe, PopPipe, ReducePipe, RemapPipe, ReplacePipe, ReversePipe, RoundPipe, SafeHtmlPipe, ShiftPipe, SplitPipe, TranslatePipe, ValuesPipe, AsyncMethodBase, AsyncMethodDirective, BackgroundDirective, DynamicTableTemplateDirective, GlobalTemplateDirective, IconDirective, NgxTemplateOutletDirective, PaginationDirective, PaginationItemDirective, ResourceIfDirective, StickyDirective, StickyClassDirective, ToggleDirective, UnorderedListItemDirective, UnorderedListTemplateDirective, DropListComponent, DynamicTableComponent, PaginationMenuComponent, UnorderedListComponent, UploadComponent, FormsModule] }); }
7207
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.3", ngImport: i0, type: NgxUtilsModule, declarations: [ChunkPipe, EntriesPipe, ExtraItemPropertiesPipe, FilterPipe, FindPipe, FormatNumberPipe, GetOffsetPipe, GetTypePipe, GetValuePipe, GlobalTemplatePipe, GroupByPipe, IsTypePipe, JoinPipe, KeysPipe, MapPipe, MaxPipe, MinPipe, PopPipe, ReducePipe, RemapPipe, ReplacePipe, ReversePipe, RoundPipe, SafeHtmlPipe, ShiftPipe, SplitPipe, TranslatePipe, ValuesPipe, AsyncMethodBase, AsyncMethodDirective, BackgroundDirective, DynamicTableTemplateDirective, GlobalTemplateDirective, IconDirective, NgxTemplateOutletDirective, PaginationDirective, PaginationItemDirective, ResourceIfDirective, StickyDirective, StickyClassDirective, DropdownDirective, DropdownToggleDirective, UnorderedListItemDirective, UnorderedListTemplateDirective, DropListComponent, DynamicTableComponent, FakeModuleComponent, PaginationMenuComponent, UnorderedListComponent, UploadComponent], imports: [CommonModule,
7208
+ FormsModule], exports: [ChunkPipe, EntriesPipe, ExtraItemPropertiesPipe, FilterPipe, FindPipe, FormatNumberPipe, GetOffsetPipe, GetTypePipe, GetValuePipe, GlobalTemplatePipe, GroupByPipe, IsTypePipe, JoinPipe, KeysPipe, MapPipe, MaxPipe, MinPipe, PopPipe, ReducePipe, RemapPipe, ReplacePipe, ReversePipe, RoundPipe, SafeHtmlPipe, ShiftPipe, SplitPipe, TranslatePipe, ValuesPipe, AsyncMethodBase, AsyncMethodDirective, BackgroundDirective, DynamicTableTemplateDirective, GlobalTemplateDirective, IconDirective, NgxTemplateOutletDirective, PaginationDirective, PaginationItemDirective, ResourceIfDirective, StickyDirective, StickyClassDirective, DropdownDirective, DropdownToggleDirective, UnorderedListItemDirective, UnorderedListTemplateDirective, DropListComponent, DynamicTableComponent, FakeModuleComponent, PaginationMenuComponent, UnorderedListComponent, UploadComponent, FormsModule] }); }
6737
7209
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.3", ngImport: i0, type: NgxUtilsModule, providers: pipes, imports: [CommonModule,
6738
7210
  FormsModule, FormsModule] }); }
6739
7211
  }
@@ -6763,5 +7235,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.3", ngImpor
6763
7235
  * Generated bundle index. Do not edit.
6764
7236
  */
6765
7237
 
6766
- export { API_SERVICE, APP_BASE_URL, AUTH_SERVICE, AclService, AjaxRequestHandler, ApiService, ArrayUtils, AsyncMethodBase, AsyncMethodDirective, AuthGuard, BASE_CONFIG, BackgroundDirective, BaseDialogService, BaseHttpClient, BaseHttpService, BaseToasterService, CONFIG_SERVICE, CanvasColor, CanvasUtils, ChunkPipe, Circle, ConfigService, DIALOG_SERVICE, DateUtils, DragDropEventPlugin, DropListComponent, DynamicTableComponent, DynamicTableTemplateDirective, ERROR_HANDLER, EXPRESS_REQUEST, EntriesPipe, ErrorHandlerService, EventsService, ExtraItemPropertiesPipe, FactoryDependencies, FileSystemEntry, FileUtils, FilterPipe, FindPipe, FormatNumberPipe, FormatterService, GenericValue, GetOffsetPipe, GetTypePipe, GetValuePipe, GlobalTemplateDirective, GlobalTemplatePipe, GlobalTemplateService, GroupByPipe, HttpPromise, ICON_SERVICE, IConfiguration, IconDirective, IconService, Initializer, IsTypePipe, JSONfn, JoinPipe, KeysPipe, LANGUAGE_SERVICE, LanguageService, LoaderUtils, LocalHttpService, MapPipe, MathUtils, MaxPipe, MinPipe, NgxTemplateOutletDirective, NgxUtilsModule, OPTIONS_TOKEN, ObjectType, ObjectUtils, ObservableUtils, OpenApiService, PROMISE_SERVICE, PaginationDirective, PaginationItemContext, PaginationItemDirective, PaginationMenuComponent, Point, PopPipe, PromiseService, RESIZE_DELAY, RESIZE_STRATEGY, ROOT_ELEMENT, Rect, ReducePipe, ReflectUtils, RemapPipe, ReplacePipe, ResizeEventPlugin, ResourceIfContext, ResourceIfDirective, ReversePipe, RoundPipe, SCRIPT_PARAMS, SafeHtmlPipe, ScrollEventPlugin, SetUtils, ShiftPipe, SplitPipe, StateService, StaticAuthService, StaticLanguageService, StickyClassDirective, StickyDirective, StorageMode, StorageService, StringUtils, TOASTER_SERVICE, TimerUtils, ToggleDirective, TranslatePipe, TranslatedUrlSerializer, UniqueUtils, UniversalService, UnorderedListComponent, UnorderedListItemDirective, UnorderedListTemplateDirective, UploadComponent, ValuedPromise, ValuesPipe, Vector, WASI_IMPLEMENTATION, WasmService, cachedFactory, cancelablePromise, checkTransitions, impatientPromise, provideWithOptions };
7238
+ export { API_SERVICE, APP_BASE_URL, AUTH_SERVICE, AclService, AjaxRequestHandler, ApiService, ArrayUtils, AsyncMethodBase, AsyncMethodDirective, AuthGuard, BASE_CONFIG, BackgroundDirective, BaseDialogService, BaseHttpClient, BaseHttpService, BaseToasterService, CONFIG_SERVICE, CanvasColor, CanvasUtils, ChunkPipe, Circle, ComponentLoaderService, ConfigService, DIALOG_SERVICE, DateUtils, DragDropEventPlugin, DropListComponent, DropdownDirective, DropdownToggleDirective, DynamicTableComponent, DynamicTableTemplateDirective, ERROR_HANDLER, EXPRESS_REQUEST, EntriesPipe, ErrorHandlerService, EventsService, ExtraItemPropertiesPipe, FactoryDependencies, FakeModuleComponent, FileSystemEntry, FileUtils, FilterPipe, FindPipe, FormatNumberPipe, FormatterService, GenericValue, GetOffsetPipe, GetTypePipe, GetValuePipe, GlobalTemplateDirective, GlobalTemplatePipe, GlobalTemplateService, GroupByPipe, HttpPromise, ICON_SERVICE, IConfiguration, IconDirective, IconService, Initializer, IsTypePipe, JSONfn, JoinPipe, KeysPipe, LANGUAGE_SERVICE, LanguageService, LoaderUtils, LocalHttpService, MapPipe, MathUtils, MaxPipe, MinPipe, NgxTemplateOutletDirective, NgxUtilsModule, OPTIONS_TOKEN, ObjectType, ObjectUtils, ObservableUtils, OpenApiService, PROMISE_SERVICE, PaginationDirective, PaginationItemContext, PaginationItemDirective, PaginationMenuComponent, Point, PopPipe, PromiseService, RESIZE_DELAY, RESIZE_STRATEGY, ROOT_ELEMENT, Rect, ReducePipe, ReflectUtils, RemapPipe, ReplacePipe, ResizeEventPlugin, ResourceIfContext, ResourceIfDirective, ReversePipe, RoundPipe, SCRIPT_PARAMS, SafeHtmlPipe, ScrollEventPlugin, SetUtils, ShiftPipe, SocketClient, SocketService, SplitPipe, StateService, StaticAuthService, StaticLanguageService, StickyClassDirective, StickyDirective, StorageMode, StorageService, StringUtils, TOASTER_SERVICE, TimerUtils, TranslatePipe, TranslatedUrlSerializer, UniqueUtils, UniversalService, UnorderedListComponent, UnorderedListItemDirective, UnorderedListTemplateDirective, UploadComponent, ValuedPromise, ValuesPipe, Vector, WASI_IMPLEMENTATION, WasmService, cachedFactory, cancelablePromise, checkTransitions, getComponentDef, impatientPromise, parseSelector, provideEntryComponents, provideWithOptions, selectorMatchesList };
6767
7239
  //# sourceMappingURL=stemy-ngx-utils.mjs.map