@rt-tools/ui-kit 0.0.8 → 0.0.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,6 @@
1
- import * as i0 from '@angular/core';
2
- import { Input, Attribute, Optional, Directive, Pipe, Injectable, inject, InjectionToken, HostBinding, ChangeDetectionStrategy, Component, contentChild, TemplateRef, input, booleanAttribute, output, viewChild, signal, computed, numberAttribute, Injector, ViewEncapsulation, model, DestroyRef, effect, HostListener, ElementRef, forwardRef, ChangeDetectorRef, untracked, ViewContainerRef, afterNextRender } from '@angular/core';
3
- import { PlatformService, WINDOW, checkIsMatchingValues, SanitizePipe, RtIconOutlinedDirective, RtHideTooltipDirective, transformArrayInput, RtScrollToElementDirective, RtNavigationDirective, isString, isNumber, areArraysEqual, EmptyToDashPipe, LIST_SORT_ORDER_ENUM, FILTER_OPERATOR_TYPE_ENUM, FILTER_OPERATORS, isDate, transformStringInput, BreakpointService, DeviceDetectorService, OSTypes, RtScrollDirective, BreakStringPipe, EntityToStringPipe, OVERLAY_POSITIONS, areArraysEqualUnordered, checkIsEntityInArrayByKey, sortByAlphabet, RtEscapeKeyDirective, POSITION_ENUM } from '@rt-tools/utils';
4
- import { Observable, ReplaySubject, share, Subject, merge, of, noop } from 'rxjs';
5
1
  import { NgStyle, NgClass, NgComponentOutlet, NgTemplateOutlet, AsyncPipe, TitleCasePipe, DOCUMENT } from '@angular/common';
2
+ import * as i0 from '@angular/core';
3
+ import { inject, HostBinding, ChangeDetectionStrategy, Component, Injectable, Directive, contentChild, TemplateRef, input, booleanAttribute, output, viewChild, signal, computed, numberAttribute, InjectionToken, Injector, ViewEncapsulation, model, DestroyRef, effect, HostListener, ElementRef, forwardRef, ChangeDetectorRef, untracked, ViewContainerRef, afterNextRender } from '@angular/core';
6
4
  import * as i1 from '@angular/forms';
7
5
  import { FormControl, Validators, ReactiveFormsModule, FormBuilder, FormsModule, NG_VALUE_ACCESSOR, NG_VALIDATORS } from '@angular/forms';
8
6
  import * as i5 from '@angular/material/button';
@@ -14,6 +12,9 @@ import * as i3 from '@angular/material/input';
14
12
  import { MatInputModule, MatInput, MatFormField as MatFormField$1, MatLabel } from '@angular/material/input';
15
13
  import * as i4 from '@angular/material/select';
16
14
  import { MatSelectModule, MatSelect } from '@angular/material/select';
15
+ import { BlockDirective, ElemDirective, IDBStorageService, ModDirective } from '@rt-tools/core';
16
+ import { checkIsMatchingValues, SanitizePipe, RtIconOutlinedDirective, RtHideTooltipDirective, transformArrayInput, RtScrollToElementDirective, RtNavigationDirective, isString, WINDOW, isNumber, areArraysEqual, EmptyToDashPipe, LIST_SORT_ORDER_ENUM, FILTER_OPERATOR_TYPE_ENUM, FILTER_OPERATORS, isDate, PlatformService, transformStringInput, BreakpointService, DeviceDetectorService, OSTypes, RtScrollDirective, BreakStringPipe, EntityToStringPipe, OVERLAY_POSITIONS, areArraysEqualUnordered, checkIsEntityInArrayByKey, sortByAlphabet, RtEscapeKeyDirective, POSITION_ENUM } from '@rt-tools/utils';
17
+ import { ReplaySubject, share, Subject, merge, of, noop } from 'rxjs';
17
18
  import { filter, map, delay, tap, take, switchMap, debounceTime, distinctUntilChanged } from 'rxjs/operators';
18
19
  import { MatListItem, MatNavList, MatListItemIcon, MatListItemTitle } from '@angular/material/list';
19
20
  import * as i1$2 from '@angular/material/sidenav';
@@ -27,7 +28,7 @@ import { Overlay, OverlayConfig, CdkOverlayOrigin, CdkConnectedOverlay } from '@
27
28
  import * as i1$4 from '@angular/cdk/portal';
28
29
  import { ComponentPortal, PortalModule } from '@angular/cdk/portal';
29
30
  import { Router, NavigationEnd, RouterLink } from '@angular/router';
30
- import { trigger, state, transition, style, animate, keyframes, AnimationBuilder } from '@angular/animations';
31
+ import { trigger, state, style, transition, animate, keyframes, AnimationBuilder } from '@angular/animations';
31
32
  import { BreakpointObserver } from '@angular/cdk/layout';
32
33
  import { CdkTrapFocus } from '@angular/cdk/a11y';
33
34
  import { MatToolbar } from '@angular/material/toolbar';
@@ -46,631 +47,6 @@ import { computePosition, offset, flip, shift } from '@floating-ui/dom';
46
47
  import { MAT_SNACK_BAR_DATA, MatSnackBarRef, MatSnackBar } from '@angular/material/snack-bar';
47
48
  import { ImageCropperComponent } from 'ngx-image-cropper';
48
49
 
49
- const BEM_MODULE_CONFIG = {
50
- separators: {
51
- el: '__',
52
- mod: '--',
53
- val: '--',
54
- },
55
- ignoreValues: false,
56
- modCase: 'kebab',
57
- };
58
-
59
- function modNameHandler(str) {
60
- switch (BEM_MODULE_CONFIG.modCase) {
61
- case 'kebab':
62
- return str
63
- ? str
64
- .replace(/[A-Z]/g, function (s) {
65
- return '-' + s.toLowerCase();
66
- })
67
- .replace(/$-/, '')
68
- : '';
69
- case 'snake':
70
- return str
71
- ? str
72
- .replace(/[A-Z]/g, function (s) {
73
- return '_' + s.toLowerCase();
74
- })
75
- .replace(/$-/, '')
76
- : '';
77
- default:
78
- return str;
79
- }
80
- }
81
- function generateClass(blockName, elemName, modName, modValue) {
82
- if (BEM_MODULE_CONFIG.ignoreValues) {
83
- modValue = !!modValue;
84
- }
85
- if (typeof modValue !== 'string' && typeof modValue !== 'boolean') {
86
- modValue = !!modValue;
87
- }
88
- let cls = blockName;
89
- if (elemName) {
90
- cls += BEM_MODULE_CONFIG.separators.el + elemName;
91
- }
92
- if (modName) {
93
- modName = modNameHandler(modName);
94
- cls += BEM_MODULE_CONFIG.separators.mod + modName;
95
- if (typeof modValue !== 'boolean' && modValue != null) {
96
- cls += BEM_MODULE_CONFIG.separators.val + modValue;
97
- }
98
- }
99
- return cls;
100
- }
101
- function parseMods(mods) {
102
- if (typeof mods === 'string') {
103
- mods = mods.split(/\s+/);
104
- }
105
- if (Array.isArray(mods)) {
106
- const modsObj = {};
107
- mods.forEach((key) => {
108
- if (key) {
109
- modsObj[key] = true;
110
- }
111
- });
112
- mods = modsObj;
113
- }
114
- else if (typeof mods !== 'object') {
115
- return {};
116
- }
117
- return mods;
118
- }
119
- function setMods(blockName, elemName, mods, oldMods, element, renderer) {
120
- Object.keys(mods).forEach((key) => {
121
- if (oldMods[key]) {
122
- if (mods[key] === oldMods[key]) {
123
- return;
124
- }
125
- renderer.removeClass(element.nativeElement, generateClass(blockName, elemName, key, oldMods[key]));
126
- }
127
- if (mods[key]) {
128
- renderer.addClass(element.nativeElement, generateClass(blockName, elemName, key, mods[key]));
129
- }
130
- });
131
- Object.keys(oldMods).forEach((key) => {
132
- if (!(key in mods) && oldMods[key]) {
133
- renderer.removeClass(element.nativeElement, generateClass(blockName, elemName, key, oldMods[key]));
134
- }
135
- });
136
- }
137
-
138
- class BlockDirective {
139
- #mods = {};
140
- #modSerialized = '';
141
- constructor(element, renderer, name, elem) {
142
- this.element = element;
143
- this.renderer = renderer;
144
- this.name = name;
145
- this.elem = elem;
146
- if (!elem && !(element.nativeElement instanceof Comment)) {
147
- renderer.addClass(element.nativeElement, generateClass(name));
148
- }
149
- }
150
- ngOnChanges() {
151
- if (JSON.stringify(this.rtMod) !== this.#modSerialized && !this.elem) {
152
- this.#modSerialized = JSON.stringify(this.rtMod);
153
- let mods = this.rtMod;
154
- const { renderer, element, name } = this;
155
- mods = parseMods(mods);
156
- if (!(element.nativeElement instanceof Comment)) {
157
- setMods(name, '', mods, this.#mods || {}, element, renderer);
158
- }
159
- this.#mods = this.#mods === mods ? Object.assign({}, mods) : mods;
160
- }
161
- }
162
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: BlockDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: 'rtBlock', attribute: true }, { token: 'rtElem', attribute: true, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
163
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.0.1", type: BlockDirective, isStandalone: true, selector: "[rtBlock]", inputs: { rtMod: "rtMod" }, usesOnChanges: true, ngImport: i0 }); }
164
- }
165
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: BlockDirective, decorators: [{
166
- type: Directive,
167
- args: [{
168
- selector: '[rtBlock]',
169
- }]
170
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: undefined, decorators: [{
171
- type: Attribute,
172
- args: ['rtBlock']
173
- }] }, { type: undefined, decorators: [{
174
- type: Optional
175
- }, {
176
- type: Attribute,
177
- args: ['rtElem']
178
- }] }], propDecorators: { rtMod: [{
179
- type: Input
180
- }] } });
181
-
182
- class ConcatClassesPipe {
183
- transform(classes) {
184
- // eslint-disable-next-line
185
- const validClassList = classes.flat().filter((className) => typeof className === 'string' && !!className.trim());
186
- return validClassList.join(' ');
187
- }
188
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: ConcatClassesPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
189
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "21.0.1", ngImport: i0, type: ConcatClassesPipe, isStandalone: true, name: "concatClasses" }); }
190
- }
191
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: ConcatClassesPipe, decorators: [{
192
- type: Pipe,
193
- args: [{
194
- name: 'concatClasses',
195
- }]
196
- }] });
197
-
198
- class ElemDirective {
199
- #mods = {};
200
- #modSerialized = '';
201
- constructor(element, renderer, name, rtBlock) {
202
- this.element = element;
203
- this.renderer = renderer;
204
- this.name = name;
205
- this.rtBlock = rtBlock;
206
- this.blockName = rtBlock.name;
207
- renderer.addClass(element.nativeElement, generateClass(rtBlock.name, name));
208
- }
209
- ngOnChanges() {
210
- if (JSON.stringify(this.rtMod) !== this.#modSerialized) {
211
- this.#modSerialized = JSON.stringify(this.rtMod);
212
- let mods = this.rtMod;
213
- const { renderer, element, blockName, name } = this;
214
- mods = parseMods(mods);
215
- setMods(blockName, name, mods, this.#mods || {}, element, renderer);
216
- this.#mods = this.#mods === mods ? Object.assign({}, mods) : mods;
217
- }
218
- }
219
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: ElemDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: 'rtElem', attribute: true }, { token: BlockDirective }], target: i0.ɵɵFactoryTarget.Directive }); }
220
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.0.1", type: ElemDirective, isStandalone: true, selector: "[rtElem]", inputs: { rtMod: "rtMod" }, usesOnChanges: true, ngImport: i0 }); }
221
- }
222
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: ElemDirective, decorators: [{
223
- type: Directive,
224
- args: [{
225
- selector: '[rtElem]',
226
- }]
227
- }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: undefined, decorators: [{
228
- type: Attribute,
229
- args: ['rtElem']
230
- }] }, { type: BlockDirective }], propDecorators: { rtMod: [{
231
- type: Input
232
- }] } });
233
-
234
- class ModDirective {
235
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: ModDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
236
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "21.0.1", type: ModDirective, isStandalone: true, selector: "[rtMod]", ngImport: i0 }); }
237
- }
238
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: ModDirective, decorators: [{
239
- type: Directive,
240
- args: [{
241
- selector: '[rtMod]',
242
- }]
243
- }] });
244
-
245
- var STORAGE_TYPES_ENUM;
246
- (function (STORAGE_TYPES_ENUM) {
247
- STORAGE_TYPES_ENUM["LOCAL"] = "local";
248
- STORAGE_TYPES_ENUM["SESSION"] = "session";
249
- STORAGE_TYPES_ENUM["IN_MEMORY"] = "inMemory";
250
- STORAGE_TYPES_ENUM["CUSTOM"] = "custom";
251
- })(STORAGE_TYPES_ENUM || (STORAGE_TYPES_ENUM = {}));
252
-
253
- /**
254
- * A service that implements the `Storage` interface using an in-memory map.
255
- * This service provides a fallback storage solution when `localStorage`
256
- * or `sessionStorage` is not available, such as in server-side rendering (SSR) scenarios.
257
- *
258
- * @Injectable
259
- */
260
- class InMemoryStorageService {
261
- /**
262
- * Private in-memory storage map used to store key-value pairs.
263
- * The keys are strings, the values are strings.
264
- * The map is private and cannot be accessed directly.
265
- * Instead, the public methods of the service should be used to interact with the storage.
266
- * The map is initialized as an empty map.
267
- *
268
- * @type {Map<string, string>}
269
- * @private
270
- * @internal
271
- * @readonly
272
- */
273
- #storage = new Map();
274
- /**
275
- * Returns the number of key-value pairs currently stored.
276
- *
277
- * @returns the number of items in storage
278
- * @public
279
- */
280
- get length() {
281
- return this.#storage.size;
282
- }
283
- /**
284
- * Retrieves the value associated with the given key.
285
- *
286
- * @param key - The name of the key to retrieve the value for
287
- * @returns the value associated with the key, or `null` if the key does not exist
288
- * @public
289
- * @returns string | null
290
- */
291
- getItem(key) {
292
- return this.#storage.get(key) || null;
293
- }
294
- /**
295
- * Adds or updates the key-value pair in the storage.
296
- *
297
- * @param key - The name of the key to create or update
298
- * @param data - The value to associate with the key
299
- * @public
300
- * @returns void
301
- */
302
- setItem(key, data) {
303
- this.#storage.set(key, data);
304
- }
305
- /**
306
- * Retrieves the key at the specified index.
307
- *
308
- * @param index - The index of the key to retrieve
309
- * @returns the key at the specified index, or `null` if the index is out of bounds
310
- * @public
311
- * @returns string | null
312
- */
313
- key(index) {
314
- return Array.from(this.#storage.keys())[index] || null;
315
- }
316
- /**
317
- * Removes the key-value pair associated with the given key.
318
- *
319
- * @param key - The name of the key to remove
320
- * @public
321
- * @returns void
322
- */
323
- removeItem(key) {
324
- this.#storage.delete(key);
325
- }
326
- /**
327
- * Clears all key-value pairs from the storage.
328
- *
329
- * @public
330
- * @returns void
331
- */
332
- clear() {
333
- this.#storage.clear();
334
- }
335
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: InMemoryStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
336
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: InMemoryStorageService }); }
337
- }
338
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: InMemoryStorageService, decorators: [{
339
- type: Injectable
340
- }] });
341
-
342
- class JsonConverter {
343
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
344
- convertTo(data) {
345
- let parsedData;
346
- try {
347
- parsedData = JSON.stringify(data);
348
- }
349
- catch (e) {
350
- // eslint-disable-next-line no-console
351
- console.error(e);
352
- parsedData = 'null';
353
- }
354
- return parsedData;
355
- }
356
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
357
- convertFrom(data) {
358
- if (typeof data === 'string') {
359
- try {
360
- return JSON.parse(data);
361
- }
362
- catch (e) {
363
- // eslint-disable-next-line no-console
364
- console.error(e);
365
- return null;
366
- }
367
- }
368
- return null;
369
- }
370
- }
371
-
372
- /**
373
- * Factory for creating or returning `localStorage`.
374
- * Returns `localStorage` global object if the application is running in a browser,
375
- * otherwise returns null.
376
- *
377
- * @returns localStorage or null
378
- */
379
- function localStorageFactory() {
380
- return inject(PlatformService).isPlatformBrowser ? localStorage : null;
381
- }
382
- /**
383
- * Factory for creating or returning `sessionStorage`.
384
- * Returns `sessionStorage` global object if the application is running in a browser,
385
- * otherwise returns null.
386
- *
387
- * @returns sessionStorage or null
388
- */
389
- function sessionStorageFactory() {
390
- return inject(PlatformService).isPlatformBrowser ? sessionStorage : null;
391
- }
392
- /**
393
- * Factory for creating `InMemoryStorageService`.
394
- * Returns a new instance of InMemoryStorageService.
395
- *
396
- * @returns a new instance of InMemoryStorageService
397
- */
398
- function inMemoryStorageFactory() {
399
- return new InMemoryStorageService();
400
- }
401
-
402
- const CUSTOM_STORAGE = new InjectionToken('CUSTOM_STORAGE');
403
-
404
- const IN_MEMORY_STORAGE = new InjectionToken('IN_MEMORY_STORAGE');
405
-
406
- const LOCAL_STORAGE = new InjectionToken('LOCAL_STORAGE');
407
-
408
- const SESSION_STORAGE = new InjectionToken('SESSION_STORAGE');
409
-
410
- const defaultStorageConfig = {
411
- ctx: STORAGE_TYPES_ENUM.LOCAL,
412
- storageRef: null,
413
- converter: new JsonConverter(),
414
- };
415
- /**
416
- * A service for managing data storage across different storage types,
417
- * including `localStorage`, `sessionStorage`, and an in-memory storage fallback.
418
- * The service supports custom storage types and data conversion through configurable converters.
419
- *
420
- * @Injectable
421
- */
422
- class StorageService {
423
- #platformService = inject(PlatformService);
424
- #localStorageRef = inject(LOCAL_STORAGE);
425
- #sessionStorageRef = inject(SESSION_STORAGE);
426
- #inMemoryStorageRef = inject(IN_MEMORY_STORAGE);
427
- #customStorageRef = inject(CUSTOM_STORAGE, { optional: true });
428
- /**
429
- * Retrieves an item from the specified storage context.
430
- *
431
- * @param key - The key of the item to retrieve.
432
- * @param config - Optional configuration for the storage context and data conversion.
433
- * @returns The retrieved item, converted from storage if a converter is provided, or `null` if the item does not exist.
434
- */
435
- getItem(key, config) {
436
- const fullConfig = { ...defaultStorageConfig, ...config };
437
- const item = this.#storage(fullConfig.ctx)?.getItem(key);
438
- return fullConfig.converter?.convertFrom(item) ?? item ?? null;
439
- }
440
- /**
441
- * Stores an item in the specified storage context.
442
- *
443
- * @param key - The key to associate with the stored item.
444
- * @param data - The data to store, which will be converted if a converter is provided.
445
- * @param config - Optional configuration for the storage context and data conversion.
446
- */
447
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
448
- setItem(key, data, config) {
449
- const fullConfig = { ...defaultStorageConfig, ...config };
450
- const parsedValue = fullConfig.converter?.convertTo(data) ?? data;
451
- this.#storage(fullConfig.ctx)?.setItem(key, parsedValue);
452
- }
453
- /**
454
- * Checks if a given key exists in the specified storage context.
455
- *
456
- * @param key - The key to check for.
457
- * @param ctx - The storage context to search in (local, session, or in-memory).
458
- * @returns `true` if the key exists, `false` otherwise.
459
- */
460
- hasKey(key, ctx = defaultStorageConfig.ctx) {
461
- return Object.prototype.hasOwnProperty.call(this.#storage(ctx), key);
462
- }
463
- /**
464
- * Executes callback functions based on whether a key exists in the specified storage context.
465
- *
466
- * @param key - The key to check for.
467
- * @param onHas - The callback to execute if the key exists.
468
- * @param onHasNot - The optional callback to execute if the key does not exist.
469
- * @param config - Optional configuration for the storage context and data conversion.
470
- */
471
- onHasKey(key, onHas, onHasNot, config) {
472
- const fullConfig = { ...defaultStorageConfig, ...config };
473
- if (this.hasKey(key, fullConfig.ctx)) {
474
- onHas(this.getItem(key, fullConfig));
475
- }
476
- else if (onHasNot !== void 0) {
477
- onHasNot();
478
- }
479
- }
480
- /**
481
- * Removes an item from the specified storage context.
482
- *
483
- * @param key - The key of the item to remove.
484
- * @param ctx - The storage context from which to remove the item.
485
- */
486
- removeItem(key, ctx = defaultStorageConfig.ctx) {
487
- this.#storage(ctx)?.removeItem(key);
488
- }
489
- /**
490
- * Clears all items from the specified storage context.
491
- *
492
- * @param ctx - The storage context to clear.
493
- */
494
- clear(ctx = defaultStorageConfig.ctx) {
495
- this.#storage(ctx)?.clear();
496
- }
497
- /**
498
- * Returns the appropriate storage reference based on the storage context and platform.
499
- *
500
- * @param ctx - The storage context to use (local, session, custom, or in-memory).
501
- * @returns The corresponding `Storage` object, or `null` if not available.
502
- */
503
- #storage(ctx) {
504
- if (this.#platformService.isPlatformBrowser) {
505
- switch (ctx) {
506
- case 'local':
507
- return this.#localStorageRef;
508
- case 'session':
509
- return this.#sessionStorageRef;
510
- case 'custom':
511
- return this.#customStorageRef;
512
- }
513
- }
514
- /**
515
- * Fallback to in-memory storage when the platform is not a browser (e.g., SSR).
516
- */
517
- return this.#inMemoryStorageRef;
518
- }
519
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: StorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
520
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: StorageService }); }
521
- }
522
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: StorageService, decorators: [{
523
- type: Injectable
524
- }] });
525
-
526
- /**
527
- * Returns the set of dependency-injection providers
528
- * required to setup storages in an application.
529
- *
530
- * @usageNotes
531
- *
532
- * This function sets up the essential storage services needed for
533
- * working with `localStorage`, `sessionStorage`, and an in-memory storage solution.
534
- * It includes providers for each type of storage, ensuring that the appropriate
535
- * storage service is injected based on the platform or specific use case.
536
- *
537
- * The function is particularly useful in scenarios where the application may be
538
- * running on the server-side (SSR). In such cases, instead of using `localStorage`
539
- * and `sessionStorage`, which are only available in the browser, the `InMemoryStorageService`
540
- * can be used as a fallback, ensuring that the application still functions correctly.
541
- *
542
- * ```typescript
543
- * bootstrapApplication(RootComponent, {
544
- * providers: [
545
- * provideRtStorage()
546
- * ]
547
- * });
548
- * ```
549
- *
550
- * @publicApi
551
- */
552
- function provideRtStorage() {
553
- return [
554
- InMemoryStorageService,
555
- {
556
- provide: LOCAL_STORAGE,
557
- useFactory: localStorageFactory,
558
- },
559
- {
560
- provide: SESSION_STORAGE,
561
- useFactory: sessionStorageFactory,
562
- },
563
- {
564
- provide: IN_MEMORY_STORAGE,
565
- useFactory: inMemoryStorageFactory,
566
- },
567
- StorageService,
568
- ];
569
- }
570
-
571
- class IDBStorageService {
572
- #windowRef = inject(WINDOW);
573
- #context;
574
- constructor() {
575
- this.#context = new Observable((observer) => {
576
- if ('indexedDB' in this.#windowRef && 'open' in this.#windowRef.indexedDB) {
577
- const openRequest = this.#windowRef.indexedDB.open('use-idb', 1);
578
- openRequest.onerror = () => observer.error(openRequest.error);
579
- openRequest.onsuccess = () => observer.next(openRequest.result);
580
- openRequest.onupgradeneeded = () => openRequest.result.createObjectStore('idb');
581
- }
582
- else {
583
- observer.error('IndexedDB not supported');
584
- }
585
- });
586
- }
587
- get(key) {
588
- return new Observable((observer) => {
589
- this.#context.subscribe((db) => {
590
- const transaction = db.transaction('idb', 'readonly');
591
- const store = transaction.objectStore('idb');
592
- const request = store.get(key);
593
- request.onsuccess = () => observer.next(request.result);
594
- request.onerror = () => observer.error(request.error);
595
- });
596
- });
597
- }
598
- set(key, value) {
599
- return new Observable((observer) => {
600
- this.#context.subscribe((db) => {
601
- const transaction = db.transaction('idb', 'readwrite');
602
- const store = transaction.objectStore('idb');
603
- const request = store.put(value, key);
604
- request.onsuccess = () => observer.next();
605
- request.onerror = () => observer.error(request.error);
606
- });
607
- });
608
- }
609
- remove(key) {
610
- return new Observable((observer) => {
611
- this.#context.subscribe((db) => {
612
- const transaction = db.transaction('idb', 'readwrite');
613
- const store = transaction.objectStore('idb');
614
- const request = store.delete(key);
615
- request.onsuccess = () => observer.next();
616
- request.onerror = () => observer.error(request.error);
617
- });
618
- });
619
- }
620
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: IDBStorageService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
621
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: IDBStorageService }); }
622
- }
623
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: IDBStorageService, decorators: [{
624
- type: Injectable
625
- }], ctorParameters: () => [] });
626
-
627
- /**
628
- * Factory for creating `IDBStorageService`.
629
- * Returns a new instance of IDBStorageService.
630
- *
631
- * @returns a new instance of IDBStorageService
632
- */
633
- function iDBStorageFactory() {
634
- return new IDBStorageService();
635
- }
636
-
637
- /**
638
- * Injection token for IDBStorageService.
639
- */
640
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
641
- const IDB_STORAGE_SERVICE_TOKEN = new InjectionToken('IDB_STORAGE_SERVICE_TOKEN');
642
-
643
- /**
644
- * Returns the set of dependency-injection providers
645
- * required to set up storages in an application.
646
- *
647
- * @usageNotes
648
- *
649
- * This function sets up the essential storage services needed for
650
- * working with `idb storage` solution.
651
- * It includes providers for each type of storage, ensuring that the appropriate
652
- * storage service is injected based on the platform or specific use case.
653
- *
654
- * ```typescript
655
- * bootstrapApplication(RootComponent, {
656
- * providers: [
657
- * provideRtIDBStorage()
658
- * ]
659
- * });
660
- * ```
661
- *
662
- * @publicApi
663
- */
664
- function provideRtIDBStorage() {
665
- return [
666
- {
667
- provide: IDB_STORAGE_SERVICE_TOKEN,
668
- useFactory: iDBStorageFactory,
669
- },
670
- IDBStorageService,
671
- ];
672
- }
673
-
674
50
  class RtuiModalComponent {
675
51
  constructor() {
676
52
  this.data = inject(MAT_DIALOG_DATA);
@@ -3450,6 +2826,8 @@ class RtuiDynamicSelectorComponent extends RtuiDynamicSelectorsDirective {
3450
2826
  this.searchTerm = input('', { ...(ngDevMode ? { debugName: "searchTerm" } : {}) });
3451
2827
  /** Indicates that an additional control has been changed */
3452
2828
  this.additionalControlChanged = input(false, { ...(ngDevMode ? { debugName: "additionalControlChanged" } : {}) });
2829
+ /** Custom sort function for entities list in popup */
2830
+ this.sortFn = input(null, { ...(ngDevMode ? { debugName: "sortFn" } : {}) });
3453
2831
  /** Output search action */
3454
2832
  this.searchAction = output();
3455
2833
  /** Output scroll action, needed for lazy loading */
@@ -3496,7 +2874,7 @@ class RtuiDynamicSelectorComponent extends RtuiDynamicSelectorsDirective {
3496
2874
  entity[this.displayExp()]?.toString().toLowerCase().includes(this.#autocompleteControlValue().toLowerCase()));
3497
2875
  })
3498
2876
  .sort((a, b) => {
3499
- return sortByAlphabet(a, b, this.displayExp());
2877
+ return this.sortFn() ? this.sortFn()(a, b) : sortByAlphabet(a, b, this.displayExp());
3500
2878
  });
3501
2879
  }, { ...(ngDevMode ? { debugName: "entitiesToSelect" } : {}) });
3502
2880
  /** Additional control for entity */
@@ -3685,7 +3063,7 @@ class RtuiDynamicSelectorComponent extends RtuiDynamicSelectorsDirective {
3685
3063
  }
3686
3064
  }
3687
3065
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: RtuiDynamicSelectorComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
3688
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.1", type: RtuiDynamicSelectorComponent, isStandalone: true, selector: "rtui-dynamic-selector", inputs: { keyExp: { classPropertyName: "keyExp", publicName: "keyExp", isSignal: true, isRequired: true, transformFunction: null }, displayExp: { classPropertyName: "displayExp", publicName: "displayExp", isSignal: true, isRequired: true, transformFunction: null }, entities: { classPropertyName: "entities", publicName: "entities", isSignal: true, isRequired: true, transformFunction: null }, navigateButtonTitle: { classPropertyName: "navigateButtonTitle", publicName: "navigateButtonTitle", isSignal: true, isRequired: false, transformFunction: null }, navigateLink: { classPropertyName: "navigateLink", publicName: "navigateLink", isSignal: true, isRequired: false, transformFunction: null }, readonlyEntitiesKeys: { classPropertyName: "readonlyEntitiesKeys", publicName: "readonlyEntitiesKeys", isSignal: true, isRequired: false, transformFunction: null }, chosenEntities: { classPropertyName: "chosenEntities", publicName: "chosenEntities", isSignal: true, isRequired: false, transformFunction: null }, isSelectionAvailable: { classPropertyName: "isSelectionAvailable", publicName: "isSelectionAvailable", isSignal: true, isRequired: false, transformFunction: null }, isPlaceholderShown: { classPropertyName: "isPlaceholderShown", publicName: "isPlaceholderShown", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, pending: { classPropertyName: "pending", publicName: "pending", isSignal: true, isRequired: false, transformFunction: null }, fetching: { classPropertyName: "fetching", publicName: "fetching", isSignal: true, isRequired: false, transformFunction: null }, isLazyLoad: { classPropertyName: "isLazyLoad", publicName: "isLazyLoad", isSignal: true, isRequired: false, transformFunction: null }, isLocalSearch: { classPropertyName: "isLocalSearch", publicName: "isLocalSearch", isSignal: true, isRequired: false, transformFunction: null }, isMultiToggleShown: { classPropertyName: "isMultiToggleShown", publicName: "isMultiToggleShown", isSignal: true, isRequired: false, transformFunction: null }, isSelectAllButtonShown: { classPropertyName: "isSelectAllButtonShown", publicName: "isSelectAllButtonShown", isSignal: true, isRequired: false, transformFunction: null }, isOpenPopupButtonShown: { classPropertyName: "isOpenPopupButtonShown", publicName: "isOpenPopupButtonShown", isSignal: true, isRequired: false, transformFunction: null }, searchTerm: { classPropertyName: "searchTerm", publicName: "searchTerm", isSignal: true, isRequired: false, transformFunction: null }, additionalControlChanged: { classPropertyName: "additionalControlChanged", publicName: "additionalControlChanged", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { chosenEntities: "chosenEntitiesChange", searchAction: "searchAction", scrollAction: "scrollAction", temporarySelectAction: "temporarySelectAction", resetAction: "resetAction", selectionChangeAction: "selectionChangeAction" }, providers: [
3066
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.1", type: RtuiDynamicSelectorComponent, isStandalone: true, selector: "rtui-dynamic-selector", inputs: { keyExp: { classPropertyName: "keyExp", publicName: "keyExp", isSignal: true, isRequired: true, transformFunction: null }, displayExp: { classPropertyName: "displayExp", publicName: "displayExp", isSignal: true, isRequired: true, transformFunction: null }, entities: { classPropertyName: "entities", publicName: "entities", isSignal: true, isRequired: true, transformFunction: null }, navigateButtonTitle: { classPropertyName: "navigateButtonTitle", publicName: "navigateButtonTitle", isSignal: true, isRequired: false, transformFunction: null }, navigateLink: { classPropertyName: "navigateLink", publicName: "navigateLink", isSignal: true, isRequired: false, transformFunction: null }, readonlyEntitiesKeys: { classPropertyName: "readonlyEntitiesKeys", publicName: "readonlyEntitiesKeys", isSignal: true, isRequired: false, transformFunction: null }, chosenEntities: { classPropertyName: "chosenEntities", publicName: "chosenEntities", isSignal: true, isRequired: false, transformFunction: null }, isSelectionAvailable: { classPropertyName: "isSelectionAvailable", publicName: "isSelectionAvailable", isSignal: true, isRequired: false, transformFunction: null }, isPlaceholderShown: { classPropertyName: "isPlaceholderShown", publicName: "isPlaceholderShown", isSignal: true, isRequired: false, transformFunction: null }, loading: { classPropertyName: "loading", publicName: "loading", isSignal: true, isRequired: false, transformFunction: null }, pending: { classPropertyName: "pending", publicName: "pending", isSignal: true, isRequired: false, transformFunction: null }, fetching: { classPropertyName: "fetching", publicName: "fetching", isSignal: true, isRequired: false, transformFunction: null }, isLazyLoad: { classPropertyName: "isLazyLoad", publicName: "isLazyLoad", isSignal: true, isRequired: false, transformFunction: null }, isLocalSearch: { classPropertyName: "isLocalSearch", publicName: "isLocalSearch", isSignal: true, isRequired: false, transformFunction: null }, isMultiToggleShown: { classPropertyName: "isMultiToggleShown", publicName: "isMultiToggleShown", isSignal: true, isRequired: false, transformFunction: null }, isSelectAllButtonShown: { classPropertyName: "isSelectAllButtonShown", publicName: "isSelectAllButtonShown", isSignal: true, isRequired: false, transformFunction: null }, isOpenPopupButtonShown: { classPropertyName: "isOpenPopupButtonShown", publicName: "isOpenPopupButtonShown", isSignal: true, isRequired: false, transformFunction: null }, searchTerm: { classPropertyName: "searchTerm", publicName: "searchTerm", isSignal: true, isRequired: false, transformFunction: null }, additionalControlChanged: { classPropertyName: "additionalControlChanged", publicName: "additionalControlChanged", isSignal: true, isRequired: false, transformFunction: null }, sortFn: { classPropertyName: "sortFn", publicName: "sortFn", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { chosenEntities: "chosenEntitiesChange", searchAction: "searchAction", scrollAction: "scrollAction", temporarySelectAction: "temporarySelectAction", resetAction: "resetAction", selectionChangeAction: "selectionChangeAction" }, providers: [
3689
3067
  {
3690
3068
  provide: NG_VALUE_ACCESSOR,
3691
3069
  useExisting: forwardRef(() => RtuiDynamicSelectorComponent),
@@ -3731,7 +3109,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImpor
3731
3109
  multi: true,
3732
3110
  },
3733
3111
  ], template: "<form [formGroup]=\"form\">\n <ng-container rtBlock=\"rtui-dynamic-selector\">\n @if (isNoDataPlaceholderShown()) {\n <rtui-dynamic-selector-placeholder\n description=\"There are no available items to choose\"\n icon=\"warning\"\n [isButtonShow]=\"false\"\n [isIconOutlined]=\"true\" />\n } @else {\n <rtui-dynamic-selector-selected-list\n [isMobile]=\"isMobile()\"\n [keyExp]=\"keyExp()\"\n [displayExp]=\"displayExp()\"\n [selectedEntities]=\"selectedEntities()\"\n [readonlyEntitiesKeys]=\"readonlyEntitiesKeys()\"\n [isListDraggable]=\"isListDraggable()\"\n [useNameBreaking]=\"useNameBreaking()\"\n [useTitleCase]=\"useTitleCase()\"\n [isDeleteButtonShown]=\"isDeleteButtonShown()\"\n (dropAction)=\"onDrop($event)\"\n (deleteFromSelectedAction)=\"toggleEntity($event)\">\n @if (additionalControlTpl()) {\n <ng-container *rtuiDynamicSelectorItemAdditionalControlDirective=\"let entity\">\n <ng-template *ngTemplateOutlet=\"additionalControlTpl() || null; context: { $implicit: entity }\" />\n </ng-container>\n }\n </rtui-dynamic-selector-selected-list>\n\n @if ((entitiesToSelect()?.length || !isLocalSearch()) && isSelectionAvailable()) {\n @if (isPlaceholderShown()) {\n <rtui-dynamic-selector-placeholder\n [icon]=\"placeholderIcon()\"\n [description]=\"placeholderDescription()\"\n [buttonTitle]=\"buttonTitle()\"\n [disabled]=\"disabled()\"\n [isIconOutlined]=\"isPlaceholderIconOutlined()\"\n (submitAction)=\"showSelectionControl($event)\" />\n } @else {\n <div rtElem=\"actions\">\n @if (isOpenPopupButtonShown() && this.entitiesToSelect()?.length) {\n <button\n #trigger=\"cdkOverlayOrigin\"\n cdkOverlayOrigin\n type=\"button\"\n class=\"c-button c-button--txt-base--size-sm\"\n [class.--disabled]=\"disabled()\"\n [disabled]=\"disabled()\"\n (click)=\"showSelectionControl(trigger)\">\n {{ buttonTitle() }}\n </button>\n }\n\n <ng-template [ngTemplateOutlet]=\"listActionsTpl\" />\n </div>\n }\n\n @if (selectedOverlayTrigger) {\n <ng-template\n rtEscapeKey\n cdkConnectedOverlay\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n [cdkConnectedOverlayOpen]=\"isSelectionControlShown()\"\n [cdkConnectedOverlayDisableClose]=\"true\"\n [cdkConnectedOverlayOrigin]=\"selectedOverlayTrigger\"\n [cdkConnectedOverlayPositions]=\"connectedOverlayPositions\"\n (backdropClick)=\"hideSelectionControl()\"\n (escapeKeyAction)=\"hideSelectionControl()\">\n <rtui-multi-selector-popup\n [navigateButtonTitle]=\"navigateButtonTitle()\"\n [navigateLink]=\"navigateLink()\"\n [entitiesToSelect]=\"entitiesToSelect()\"\n [appearance]=\"appearance()\"\n [keyExp]=\"keyExp()\"\n [displayExp]=\"displayExp()\"\n [isMobile]=\"isMobile()\"\n [isSingleSelection]=\"isSingleSelection()\"\n [isSelectAllButtonShown]=\"isSelectAllButtonShown()\"\n [loading]=\"loading()\"\n [fetching]=\"fetching()\"\n [useNameBreaking]=\"useNameBreaking()\"\n [searchTerm]=\"searchTerm()\"\n [isLazyLoad]=\"isLazyLoad()\"\n [isLocalSearch]=\"isLocalSearch()\"\n [isMultiToggleShown]=\"isMultiToggleShown()\"\n (searchAction)=\"search($event)\"\n (scrollAction)=\"scroll()\"\n (temporarySelectAction)=\"setTemporarySelection($event)\"\n (closeAction)=\"hideSelectionControl()\"\n (submitAction)=\"select($event)\" />\n </ng-template>\n }\n } @else if (isSelectionAvailable()) {\n <div rtElem=\"actions\">\n <ng-template [ngTemplateOutlet]=\"listActionsTpl\" />\n </div>\n }\n }\n </ng-container>\n</form>\n\n<ng-template #listActionsTpl>\n <rtui-dynamic-selector-list-actions\n [isMobile]=\"isMobile()\"\n [disabled]=\"disabled()\"\n [isResetButtonDisabled]=\"isResetButtonDisabled()\"\n [isClearButtonDisabled]=\"isClearButtonDisabled()\"\n (resetAction)=\"resetList()\"\n (clearAction)=\"clearList()\" />\n</ng-template>\n", styles: [":host{height:100%;width:100%;display:flex;flex-direction:column;overflow:hidden}\n"] }]
3734
- }], propDecorators: { keyExp: [{ type: i0.Input, args: [{ isSignal: true, alias: "keyExp", required: true }] }], displayExp: [{ type: i0.Input, args: [{ isSignal: true, alias: "displayExp", required: true }] }], entities: [{ type: i0.Input, args: [{ isSignal: true, alias: "entities", required: true }] }], navigateButtonTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "navigateButtonTitle", required: false }] }], navigateLink: [{ type: i0.Input, args: [{ isSignal: true, alias: "navigateLink", required: false }] }], readonlyEntitiesKeys: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonlyEntitiesKeys", required: false }] }], chosenEntities: [{ type: i0.Input, args: [{ isSignal: true, alias: "chosenEntities", required: false }] }, { type: i0.Output, args: ["chosenEntitiesChange"] }], isSelectionAvailable: [{ type: i0.Input, args: [{ isSignal: true, alias: "isSelectionAvailable", required: false }] }], isPlaceholderShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "isPlaceholderShown", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], pending: [{ type: i0.Input, args: [{ isSignal: true, alias: "pending", required: false }] }], fetching: [{ type: i0.Input, args: [{ isSignal: true, alias: "fetching", required: false }] }], isLazyLoad: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLazyLoad", required: false }] }], isLocalSearch: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLocalSearch", required: false }] }], isMultiToggleShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMultiToggleShown", required: false }] }], isSelectAllButtonShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "isSelectAllButtonShown", required: false }] }], isOpenPopupButtonShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "isOpenPopupButtonShown", required: false }] }], searchTerm: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchTerm", required: false }] }], additionalControlChanged: [{ type: i0.Input, args: [{ isSignal: true, alias: "additionalControlChanged", required: false }] }], searchAction: [{ type: i0.Output, args: ["searchAction"] }], scrollAction: [{ type: i0.Output, args: ["scrollAction"] }], temporarySelectAction: [{ type: i0.Output, args: ["temporarySelectAction"] }], resetAction: [{ type: i0.Output, args: ["resetAction"] }], selectionChangeAction: [{ type: i0.Output, args: ["selectionChangeAction"] }], additionalControlTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => RtuiDynamicSelectorAdditionalControlDirective), { ...{
3112
+ }], propDecorators: { keyExp: [{ type: i0.Input, args: [{ isSignal: true, alias: "keyExp", required: true }] }], displayExp: [{ type: i0.Input, args: [{ isSignal: true, alias: "displayExp", required: true }] }], entities: [{ type: i0.Input, args: [{ isSignal: true, alias: "entities", required: true }] }], navigateButtonTitle: [{ type: i0.Input, args: [{ isSignal: true, alias: "navigateButtonTitle", required: false }] }], navigateLink: [{ type: i0.Input, args: [{ isSignal: true, alias: "navigateLink", required: false }] }], readonlyEntitiesKeys: [{ type: i0.Input, args: [{ isSignal: true, alias: "readonlyEntitiesKeys", required: false }] }], chosenEntities: [{ type: i0.Input, args: [{ isSignal: true, alias: "chosenEntities", required: false }] }, { type: i0.Output, args: ["chosenEntitiesChange"] }], isSelectionAvailable: [{ type: i0.Input, args: [{ isSignal: true, alias: "isSelectionAvailable", required: false }] }], isPlaceholderShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "isPlaceholderShown", required: false }] }], loading: [{ type: i0.Input, args: [{ isSignal: true, alias: "loading", required: false }] }], pending: [{ type: i0.Input, args: [{ isSignal: true, alias: "pending", required: false }] }], fetching: [{ type: i0.Input, args: [{ isSignal: true, alias: "fetching", required: false }] }], isLazyLoad: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLazyLoad", required: false }] }], isLocalSearch: [{ type: i0.Input, args: [{ isSignal: true, alias: "isLocalSearch", required: false }] }], isMultiToggleShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "isMultiToggleShown", required: false }] }], isSelectAllButtonShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "isSelectAllButtonShown", required: false }] }], isOpenPopupButtonShown: [{ type: i0.Input, args: [{ isSignal: true, alias: "isOpenPopupButtonShown", required: false }] }], searchTerm: [{ type: i0.Input, args: [{ isSignal: true, alias: "searchTerm", required: false }] }], additionalControlChanged: [{ type: i0.Input, args: [{ isSignal: true, alias: "additionalControlChanged", required: false }] }], sortFn: [{ type: i0.Input, args: [{ isSignal: true, alias: "sortFn", required: false }] }], searchAction: [{ type: i0.Output, args: ["searchAction"] }], scrollAction: [{ type: i0.Output, args: ["scrollAction"] }], temporarySelectAction: [{ type: i0.Output, args: ["temporarySelectAction"] }], resetAction: [{ type: i0.Output, args: ["resetAction"] }], selectionChangeAction: [{ type: i0.Output, args: ["selectionChangeAction"] }], additionalControlTpl: [{ type: i0.ContentChild, args: [i0.forwardRef(() => RtuiDynamicSelectorAdditionalControlDirective), { ...{
3735
3113
  read: TemplateRef,
3736
3114
  }, isSignal: true }] }] } });
3737
3115
 
@@ -4011,7 +3389,7 @@ class RtTableConfigAsideComponent {
4011
3389
  // directives
4012
3390
  BlockDirective, selector: "[rtBlock]", inputs: ["rtMod"] }, { kind: "directive", type: ElemDirective, selector: "[rtElem]", inputs: ["rtMod"] }, { kind: "directive", type: RtuiAsideContainerHeaderDirective, selector: "[rtuiAsideHeader]" }, { kind: "directive", type: RtuiDynamicSelectorAdditionalControlDirective, selector: "[rtuiDynamicSelectorAdditionalControlDirective]" }, { kind: "directive", type: RtIconOutlinedDirective, selector: "mat-icon[rtIconOutlined]", inputs: ["rtIconOutlined"] }, { kind: "component", type:
4013
3391
  // standalone components
4014
- RtuiAsideContainerComponent, selector: "rtui-aside-container", inputs: ["title", "isMobile", "isSubmitButtonDisabled", "isFooterShown", "pending", "isRequestErrorShown", "headerActionsButtons", "requestError", "submitButtonTitle", "cancelButtonTitle", "submitButtonTooltip"], outputs: ["submitAction", "cancelAction", "headerAction"] }, { kind: "component", type: RtuiDynamicSelectorComponent, selector: "rtui-dynamic-selector", inputs: ["keyExp", "displayExp", "entities", "navigateButtonTitle", "navigateLink", "readonlyEntitiesKeys", "chosenEntities", "isSelectionAvailable", "isPlaceholderShown", "loading", "pending", "fetching", "isLazyLoad", "isLocalSearch", "isMultiToggleShown", "isSelectAllButtonShown", "isOpenPopupButtonShown", "searchTerm", "additionalControlChanged"], outputs: ["chosenEntitiesChange", "searchAction", "scrollAction", "temporarySelectAction", "resetAction", "selectionChangeAction"] }, { kind: "component", type: RtuiToggleComponent, selector: "rtui-toggle", inputs: ["label", "tooltip", "size", "tooltipPosition", "isDisabled", "tooltipDisabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
3392
+ RtuiAsideContainerComponent, selector: "rtui-aside-container", inputs: ["title", "isMobile", "isSubmitButtonDisabled", "isFooterShown", "pending", "isRequestErrorShown", "headerActionsButtons", "requestError", "submitButtonTitle", "cancelButtonTitle", "submitButtonTooltip"], outputs: ["submitAction", "cancelAction", "headerAction"] }, { kind: "component", type: RtuiDynamicSelectorComponent, selector: "rtui-dynamic-selector", inputs: ["keyExp", "displayExp", "entities", "navigateButtonTitle", "navigateLink", "readonlyEntitiesKeys", "chosenEntities", "isSelectionAvailable", "isPlaceholderShown", "loading", "pending", "fetching", "isLazyLoad", "isLocalSearch", "isMultiToggleShown", "isSelectAllButtonShown", "isOpenPopupButtonShown", "searchTerm", "additionalControlChanged", "sortFn"], outputs: ["chosenEntitiesChange", "searchAction", "scrollAction", "temporarySelectAction", "resetAction", "selectionChangeAction"] }, { kind: "component", type: RtuiToggleComponent, selector: "rtui-toggle", inputs: ["label", "tooltip", "size", "tooltipPosition", "isDisabled", "tooltipDisabled"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
4015
3393
  }
4016
3394
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: RtTableConfigAsideComponent, decorators: [{
4017
3395
  type: Component,
@@ -5137,11 +4515,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImpor
5137
4515
  /**
5138
4516
  * Public API Surface of rt-tools
5139
4517
  */
5140
- // tools
4518
+ // ui-kit
5141
4519
 
5142
4520
  /**
5143
4521
  * Generated bundle index. Do not edit.
5144
4522
  */
5145
4523
 
5146
- export { ASIDE_BUTTONS_ENUM, ASIDE_REF, AsideRef, BUTTON_APPEARANCE, BUTTON_COLOR, BUTTON_SIZE, BlockDirective, CUSTOM_STORAGE, ConcatClassesPipe, DEFAULT_PAGE_MODEL, DEFAULT_PAGE_SIZE, ElemDirective, IDBStorageService, IDB_STORAGE_SERVICE_TOKEN, INFO_BADGE_SIZE_ENUM, INFO_BADGE_TYPE_ENUM, IN_MEMORY_STORAGE, InMemoryStorageService, JsonConverter, LOCAL_STORAGE, MODAL_WINDOW_SIZE_ENUM, ModDirective, RTUI_TABLE_COMPONENT_TOKEN, RTUI_TABLE_STOP_ROW_CLICK_ATTRIBUTE, RtActionBarService, RtAsideService, RtDynamicListSelectorsDirective, RtModalService, RtPopoverDirective, RtSnackBarService, RtTableConfigService, RtTableSelectorsDirective, RtuiActionBarComponent, RtuiActionBarContainerComponent, RtuiAsideContainerComponent, RtuiAsideContainerHeaderDirective, RtuiButtonComponent, RtuiClearButtonComponent, RtuiCustomTableCellsDirective, RtuiDynamicInputAdditionalControlDirective, RtuiDynamicInputComponent, RtuiDynamicListComponent, RtuiDynamicListCustomTableCellsDirective, RtuiDynamicListRowActionsDirective, RtuiDynamicListRowAdditionalActionsDirective, RtuiDynamicListToolbarActionsDirective, RtuiDynamicListToolbarSelectorsDirective, RtuiDynamicSelectorAdditionalControlDirective, RtuiDynamicSelectorComponent, RtuiDynamicSelectorItemAdditionalControlDirective, RtuiDynamicSelectorListActionsComponent, RtuiDynamicSelectorPlaceholderComponent, RtuiDynamicSelectorSelectedListComponent, RtuiFileUploadComponent, RtuiHeaderCenterDirective, RtuiHeaderComponent, RtuiHeaderLeftDirective, RtuiHeaderRightDirective, RtuiImageUploadComponent, RtuiInfoBadgeComponent, RtuiModalComponent, RtuiMultiButtonComponent, RtuiMultiSelectorPopupComponent, RtuiPaginationComponent, RtuiRoundIconButtonComponent, RtuiScrollableContainerComponent, RtuiScrollableContainerContentDirective, RtuiScrollableContainerFooterDirective, RtuiScrollableContainerHeaderDirective, RtuiSideMenuComponent, RtuiSideMenuFooterDirective, RtuiSideMenuHeaderDirective, RtuiSnackBarComponent, RtuiSpinnerComponent, RtuiStopTableRowClickDirective, RtuiTableAdditionalRowActionsDirective, RtuiTableComponent, RtuiTableRowActionsDirective, RtuiTableRowClickDirective, RtuiToggleComponent, RtuiToolbarCenterDirective, RtuiToolbarComponent, RtuiToolbarLeftDirective, RtuiToolbarRightDirective, SESSION_STORAGE, STORAGE_TYPES_ENUM, StorageService, TABLE_COLUMN_FILTER_TYPES_ENUM, TABLE_COLUMN_TYPES_ENUM, TEXT_CELL_COLOR_ENUM, TOGGLE_SIZE_TYPE_ENUM, darkenHexColor, ddServices, getColorBasedOnBackground, iDBStorageFactory, inMemoryStorageFactory, localStorageFactory, progressDecreaseAnimation, progressIncreaseAnimation, provideRtIDBStorage, provideRtStorage, provideRtUi, sessionStorageFactory };
4524
+ export { ASIDE_BUTTONS_ENUM, ASIDE_REF, AsideRef, BUTTON_APPEARANCE, BUTTON_COLOR, BUTTON_SIZE, DEFAULT_PAGE_MODEL, DEFAULT_PAGE_SIZE, INFO_BADGE_SIZE_ENUM, INFO_BADGE_TYPE_ENUM, MODAL_WINDOW_SIZE_ENUM, RTUI_TABLE_COMPONENT_TOKEN, RTUI_TABLE_STOP_ROW_CLICK_ATTRIBUTE, RtActionBarService, RtAsideService, RtDynamicListSelectorsDirective, RtModalService, RtPopoverDirective, RtSnackBarService, RtTableConfigService, RtTableSelectorsDirective, RtuiActionBarComponent, RtuiActionBarContainerComponent, RtuiAsideContainerComponent, RtuiAsideContainerHeaderDirective, RtuiButtonComponent, RtuiClearButtonComponent, RtuiCustomTableCellsDirective, RtuiDynamicInputAdditionalControlDirective, RtuiDynamicInputComponent, RtuiDynamicListComponent, RtuiDynamicListCustomTableCellsDirective, RtuiDynamicListRowActionsDirective, RtuiDynamicListRowAdditionalActionsDirective, RtuiDynamicListToolbarActionsDirective, RtuiDynamicListToolbarSelectorsDirective, RtuiDynamicSelectorAdditionalControlDirective, RtuiDynamicSelectorComponent, RtuiDynamicSelectorItemAdditionalControlDirective, RtuiDynamicSelectorListActionsComponent, RtuiDynamicSelectorPlaceholderComponent, RtuiDynamicSelectorSelectedListComponent, RtuiFileUploadComponent, RtuiHeaderCenterDirective, RtuiHeaderComponent, RtuiHeaderLeftDirective, RtuiHeaderRightDirective, RtuiImageUploadComponent, RtuiInfoBadgeComponent, RtuiModalComponent, RtuiMultiButtonComponent, RtuiMultiSelectorPopupComponent, RtuiPaginationComponent, RtuiRoundIconButtonComponent, RtuiScrollableContainerComponent, RtuiScrollableContainerContentDirective, RtuiScrollableContainerFooterDirective, RtuiScrollableContainerHeaderDirective, RtuiSideMenuComponent, RtuiSideMenuFooterDirective, RtuiSideMenuHeaderDirective, RtuiSnackBarComponent, RtuiSpinnerComponent, RtuiStopTableRowClickDirective, RtuiTableAdditionalRowActionsDirective, RtuiTableComponent, RtuiTableRowActionsDirective, RtuiTableRowClickDirective, RtuiToggleComponent, RtuiToolbarCenterDirective, RtuiToolbarComponent, RtuiToolbarLeftDirective, RtuiToolbarRightDirective, TABLE_COLUMN_FILTER_TYPES_ENUM, TABLE_COLUMN_TYPES_ENUM, TEXT_CELL_COLOR_ENUM, TOGGLE_SIZE_TYPE_ENUM, darkenHexColor, ddServices, getColorBasedOnBackground, progressDecreaseAnimation, progressIncreaseAnimation, provideRtUi };
5147
4525
  //# sourceMappingURL=rt-tools-ui-kit.mjs.map