@rt-tools/core 0.0.6 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"rt-tools-core.mjs","sources":["../../../projects/core/src/lib/functions/is-nil.ts","../../../projects/core/src/lib/services/message-bus.ts","../../../projects/core/src/lib/services/platform.service.ts","../../../projects/core/src/lib/tokens/window.token.ts","../../../projects/core/src/lib/bem/bem.const.ts","../../../projects/core/src/lib/bem/bem.utils.ts","../../../projects/core/src/lib/bem/block.directive.ts","../../../projects/core/src/lib/bem/concat-classes.pipe.ts","../../../projects/core/src/lib/bem/elem.directive.ts","../../../projects/core/src/lib/bem/mod.directive.ts","../../../projects/core/src/lib/storage/enums/storage-types.enum.ts","../../../projects/core/src/lib/storage/in-memory-storage.service.ts","../../../projects/core/src/lib/storage/json-converter.ts","../../../projects/core/src/lib/storage/storage.factory.ts","../../../projects/core/src/lib/storage/tokens/custom-storage.token.ts","../../../projects/core/src/lib/storage/tokens/in-memory-storage.token.ts","../../../projects/core/src/lib/storage/tokens/local-storage.token.ts","../../../projects/core/src/lib/storage/tokens/session-storage.token.ts","../../../projects/core/src/lib/storage/storage.service.ts","../../../projects/core/src/lib/storage/providers.ts","../../../projects/core/src/lib/idb-storage/idb-storage-service.ts","../../../projects/core/src/lib/idb-storage/idb-storage.factory.ts","../../../projects/core/src/lib/idb-storage/token/idb-storage.token.ts","../../../projects/core/src/lib/idb-storage/providers.ts","../../../projects/core/src/index.ts","../../../projects/core/src/rt-tools-core.ts"],"sourcesContent":["export function isNil<T>(entity: T | null | undefined): entity is null | undefined {\n return entity === null || entity === undefined;\n}\n","import { Observable, Subject } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\n\nexport interface MessageBusEvent<T = string> {\n readonly type: T;\n}\n\nexport class MessageBus<M> {\n readonly #eventSource: Subject<MessageBusEvent<M>> = new Subject<MessageBusEvent<M>>();\n\n public emit(event: MessageBusEvent<M>): void {\n this.#eventSource.next(event);\n }\n\n public onEmit(): Observable<MessageBusEvent<M>> {\n return this.#eventSource.asObservable();\n }\n\n public ofType(eventType: M): Observable<MessageBusEvent<M>> {\n return this.onEmit().pipe(\n filter((event: MessageBusEvent<M>): event is MessageBusEvent<M> => event.type === eventType),\n map((event: MessageBusEvent<M>) => event)\n );\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { Injectable, PLATFORM_ID, inject } from '@angular/core';\n\n/**\n * A service for detecting the platform on which the application is running.\n * This service is useful for checking if the application is running in a browser\n * environment or on the server-side.\n */\n@Injectable({ providedIn: 'root' })\nexport class PlatformService {\n readonly #platformId: object = inject(PLATFORM_ID);\n public readonly isPlatformBrowser: boolean;\n\n constructor() {\n this.isPlatformBrowser = isPlatformBrowser(this.#platformId);\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { InjectionToken, inject } from '@angular/core';\n\nexport const WINDOW: InjectionToken<Window> = new InjectionToken<Window>('An injection token for global window object', {\n factory: (): Window => {\n const { defaultView }: Document = inject(DOCUMENT);\n\n if (!defaultView) {\n throw new Error('Window is not available');\n }\n\n return defaultView;\n },\n});\n","import { IBemConfig } from './bem.types';\n\nexport const BEM_MODULE_CONFIG: IBemConfig = {\n separators: {\n el: '__',\n mod: '--',\n val: '--',\n },\n ignoreValues: false,\n modCase: 'kebab',\n};\n","import { ElementRef, Renderer2 } from '@angular/core';\n\nimport { BEM_MODULE_CONFIG } from './bem.const';\nimport { IModsObject } from './bem.types';\n\nexport function modNameHandler(str: string): string {\n switch (BEM_MODULE_CONFIG.modCase) {\n case 'kebab':\n return str\n ? str\n .replace(/[A-Z]/g, function (s: string) {\n return '-' + s.toLowerCase();\n })\n .replace(/$-/, '')\n : '';\n case 'snake':\n return str\n ? str\n .replace(/[A-Z]/g, function (s: string) {\n return '_' + s.toLowerCase();\n })\n .replace(/$-/, '')\n : '';\n default:\n return str;\n }\n}\n\nexport function generateClass(blockName: string, elemName?: string, modName?: string, modValue?: unknown): string {\n if (BEM_MODULE_CONFIG.ignoreValues) {\n modValue = !!modValue;\n }\n\n if (typeof modValue !== 'string' && typeof modValue !== 'boolean') {\n modValue = !!modValue;\n }\n\n let cls: string = blockName;\n\n if (elemName) {\n cls += BEM_MODULE_CONFIG.separators.el + elemName;\n }\n\n if (modName) {\n modName = modNameHandler(modName);\n cls += BEM_MODULE_CONFIG.separators.mod + modName;\n if (typeof modValue !== 'boolean' && modValue != null) {\n cls += BEM_MODULE_CONFIG.separators.val + modValue;\n }\n }\n\n return cls;\n}\n\nexport function parseMods(mods?: string | string[] | (string | false)[] | IModsObject): IModsObject {\n if (typeof mods === 'string') {\n mods = mods.split(/\\s+/);\n }\n\n if (Array.isArray(mods)) {\n const modsObj: IModsObject = {};\n\n mods.forEach((key: string | false) => {\n if (key) {\n modsObj[key] = true;\n }\n });\n mods = modsObj;\n } else if (typeof mods !== 'object') {\n return {};\n }\n\n return mods;\n}\n\nexport function setMods(\n blockName: string,\n elemName: string,\n mods: IModsObject,\n oldMods: IModsObject,\n element: ElementRef,\n renderer: Renderer2\n): void {\n Object.keys(mods).forEach((key: string) => {\n if (oldMods[key]) {\n if (mods[key] === oldMods[key]) {\n return;\n }\n\n renderer.removeClass(element.nativeElement, generateClass(blockName, elemName, key, oldMods[key]));\n }\n\n if (mods[key]) {\n renderer.addClass(element.nativeElement, generateClass(blockName, elemName, key, mods[key]));\n }\n });\n\n Object.keys(oldMods).forEach((key: string) => {\n if (!(key in mods) && oldMods[key]) {\n renderer.removeClass(element.nativeElement, generateClass(blockName, elemName, key, oldMods[key]));\n }\n });\n}\n","import { Attribute, Directive, ElementRef, Input, OnChanges, Optional, Renderer2 } from '@angular/core';\n\nimport { IModsObject } from './bem.types';\nimport { generateClass, parseMods, setMods } from './bem.utils';\n\n@Directive({\n selector: '[rtBlock]',\n})\nexport class BlockDirective implements OnChanges {\n @Input() public rtMod?: string | string[] | (string | false)[] | IModsObject;\n #mods: IModsObject = {};\n #modSerialized: string = '';\n\n constructor(\n public readonly element: ElementRef,\n public readonly renderer: Renderer2,\n @Attribute('rtBlock') public readonly name: string,\n @Optional() @Attribute('rtElem') private readonly elem: string\n ) {\n if (!elem && !(element.nativeElement instanceof Comment)) {\n renderer.addClass(element.nativeElement, generateClass(name));\n }\n }\n\n public ngOnChanges(): void {\n if (JSON.stringify(this.rtMod) !== this.#modSerialized && !this.elem) {\n this.#modSerialized = JSON.stringify(this.rtMod);\n\n let mods: string | string[] | (string | false)[] | IModsObject | undefined = this.rtMod;\n\n const { renderer, element, name } = this;\n\n mods = parseMods(mods);\n\n if (!(element.nativeElement instanceof Comment)) {\n setMods(name, '', mods, this.#mods || {}, element, renderer);\n }\n\n this.#mods = this.#mods === mods ? Object.assign({}, mods) : mods;\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'concatClasses',\n})\nexport class ConcatClassesPipe implements PipeTransform {\n public transform<C extends string | boolean | null | undefined>(classes: (C | C[])[]): string {\n // eslint-disable-next-line\n const validClassList = classes.flat().filter((className) => typeof className === 'string' && !!className.trim());\n return validClassList.join(' ');\n }\n}\n","import { Attribute, Directive, ElementRef, Input, OnChanges, Renderer2 } from '@angular/core';\n\nimport { IModsObject } from './bem.types';\nimport { generateClass, parseMods, setMods } from './bem.utils';\nimport { BlockDirective } from './block.directive';\n\n@Directive({\n selector: '[rtElem]',\n})\nexport class ElemDirective implements OnChanges {\n @Input() public rtMod?: string | string[] | (string | false)[] | IModsObject;\n public blockName: string;\n #mods: IModsObject = {};\n #modSerialized: string = '';\n\n constructor(\n public readonly element: ElementRef,\n public readonly renderer: Renderer2,\n @Attribute('rtElem') public readonly name: string,\n private readonly rtBlock: BlockDirective\n ) {\n this.blockName = rtBlock.name;\n\n renderer.addClass(element.nativeElement, generateClass(rtBlock.name, name));\n }\n\n public ngOnChanges(): void {\n if (JSON.stringify(this.rtMod) !== this.#modSerialized) {\n this.#modSerialized = JSON.stringify(this.rtMod);\n\n let mods: string | string[] | (string | false)[] | IModsObject | undefined = this.rtMod;\n\n const { renderer, element, blockName, name } = this;\n\n mods = parseMods(mods);\n\n setMods(blockName, name, mods, this.#mods || {}, element, renderer);\n\n this.#mods = this.#mods === mods ? Object.assign({}, mods) : mods;\n }\n }\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[rtMod]',\n})\nexport class ModDirective {}\n","export enum STORAGE_TYPES_ENUM {\n LOCAL = 'local',\n SESSION = 'session',\n IN_MEMORY = 'inMemory',\n CUSTOM = 'custom',\n}\n\nexport type StorageType = STORAGE_TYPES_ENUM.LOCAL | STORAGE_TYPES_ENUM.SESSION | STORAGE_TYPES_ENUM.IN_MEMORY | STORAGE_TYPES_ENUM.CUSTOM;\n","import { Injectable } from '@angular/core';\n\n/**\n * A service that implements the `Storage` interface using an in-memory map.\n * This service provides a fallback storage solution when `localStorage`\n * or `sessionStorage` is not available, such as in server-side rendering (SSR) scenarios.\n *\n * @Injectable\n */\n@Injectable()\nexport class InMemoryStorageService implements Storage {\n /**\n * Private in-memory storage map used to store key-value pairs.\n * The keys are strings, the values are strings.\n * The map is private and cannot be accessed directly.\n * Instead, the public methods of the service should be used to interact with the storage.\n * The map is initialized as an empty map.\n *\n * @type {Map<string, string>}\n * @private\n * @internal\n * @readonly\n */\n readonly #storage: Map<string, string> = new Map<string, string>();\n\n /**\n * Returns the number of key-value pairs currently stored.\n *\n * @returns the number of items in storage\n * @public\n */\n public get length(): number {\n return this.#storage.size;\n }\n\n /**\n * Retrieves the value associated with the given key.\n *\n * @param key - The name of the key to retrieve the value for\n * @returns the value associated with the key, or `null` if the key does not exist\n * @public\n * @returns string | null\n */\n public getItem(key: string): string | null {\n return this.#storage.get(key) || null;\n }\n\n /**\n * Adds or updates the key-value pair in the storage.\n *\n * @param key - The name of the key to create or update\n * @param data - The value to associate with the key\n * @public\n * @returns void\n */\n public setItem(key: string, data: string): void {\n this.#storage.set(key, data);\n }\n\n /**\n * Retrieves the key at the specified index.\n *\n * @param index - The index of the key to retrieve\n * @returns the key at the specified index, or `null` if the index is out of bounds\n * @public\n * @returns string | null\n */\n public key(index: number): string | null {\n return Array.from(this.#storage.keys())[index] || null;\n }\n\n /**\n * Removes the key-value pair associated with the given key.\n *\n * @param key - The name of the key to remove\n * @public\n * @returns void\n */\n public removeItem(key: string): void {\n this.#storage.delete(key);\n }\n\n /**\n * Clears all key-value pairs from the storage.\n *\n * @public\n * @returns void\n */\n public clear(): void {\n this.#storage.clear();\n }\n}\n","import { Nullable } from '../types';\nimport { IStorageConverter } from './interfaces/storage-converter';\n\nexport class JsonConverter implements IStorageConverter {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public convertTo(data: Nullable<any>): string {\n let parsedData: string;\n\n try {\n parsedData = JSON.stringify(data);\n } catch (e: unknown) {\n // eslint-disable-next-line no-console\n console.error(e);\n parsedData = 'null';\n }\n\n return parsedData;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public convertFrom<T>(data: any): Nullable<T> {\n if (typeof data === 'string') {\n try {\n return JSON.parse(data) as T;\n } catch (e: unknown) {\n // eslint-disable-next-line no-console\n console.error(e);\n return null;\n }\n }\n\n return null;\n }\n}\n","import { inject } from '@angular/core';\n\nimport { PlatformService } from '../services';\nimport { Nullable } from '../types';\nimport { InMemoryStorageService } from './in-memory-storage.service';\n\n/**\n * Factory for creating or returning `localStorage`.\n * Returns `localStorage` global object if the application is running in a browser,\n * otherwise returns null.\n *\n * @returns localStorage or null\n */\nexport function localStorageFactory(): Nullable<Storage> {\n return inject(PlatformService).isPlatformBrowser ? localStorage : null;\n}\n\n/**\n * Factory for creating or returning `sessionStorage`.\n * Returns `sessionStorage` global object if the application is running in a browser,\n * otherwise returns null.\n *\n * @returns sessionStorage or null\n */\nexport function sessionStorageFactory(): Nullable<Storage> {\n return inject(PlatformService).isPlatformBrowser ? sessionStorage : null;\n}\n\n/**\n * Factory for creating `InMemoryStorageService`.\n * Returns a new instance of InMemoryStorageService.\n *\n * @returns a new instance of InMemoryStorageService\n */\nexport function inMemoryStorageFactory(): Storage {\n return new InMemoryStorageService();\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const CUSTOM_STORAGE: InjectionToken<Storage> = new InjectionToken<Storage>('CUSTOM_STORAGE');\n","import { InjectionToken } from '@angular/core';\n\nexport const IN_MEMORY_STORAGE: InjectionToken<Storage> = new InjectionToken<Storage>('IN_MEMORY_STORAGE');\n","import { InjectionToken } from '@angular/core';\n\nexport const LOCAL_STORAGE: InjectionToken<Storage> = new InjectionToken<Storage>('LOCAL_STORAGE');\n","import { InjectionToken } from '@angular/core';\n\nexport const SESSION_STORAGE: InjectionToken<Storage> = new InjectionToken<Storage>('SESSION_STORAGE');\n","import { inject, Injectable } from '@angular/core';\n\nimport { PlatformService } from '../services';\nimport { Nullable } from '../types';\nimport { STORAGE_TYPES_ENUM, StorageType } from './enums/storage-types.enum';\nimport { IStorageConfig } from './interfaces/storage-config';\nimport { JsonConverter } from './json-converter';\nimport { CUSTOM_STORAGE } from './tokens/custom-storage.token';\nimport { IN_MEMORY_STORAGE } from './tokens/in-memory-storage.token';\nimport { LOCAL_STORAGE } from './tokens/local-storage.token';\nimport { SESSION_STORAGE } from './tokens/session-storage.token';\n\nconst defaultStorageConfig: IStorageConfig = {\n ctx: STORAGE_TYPES_ENUM.LOCAL,\n storageRef: null,\n converter: new JsonConverter(),\n};\n\n/**\n * A service for managing data storage across different storage types,\n * including `localStorage`, `sessionStorage`, and an in-memory storage fallback.\n * The service supports custom storage types and data conversion through configurable converters.\n *\n * @Injectable\n */\n@Injectable()\nexport class StorageService {\n readonly #platformService: PlatformService = inject(PlatformService);\n readonly #localStorageRef: Storage = inject(LOCAL_STORAGE);\n readonly #sessionStorageRef: Storage = inject(SESSION_STORAGE);\n readonly #inMemoryStorageRef: Storage = inject(IN_MEMORY_STORAGE);\n readonly #customStorageRef: Nullable<Storage> = inject(CUSTOM_STORAGE, { optional: true });\n\n /**\n * Retrieves an item from the specified storage context.\n *\n * @param key - The key of the item to retrieve.\n * @param config - Optional configuration for the storage context and data conversion.\n * @returns The retrieved item, converted from storage if a converter is provided, or `null` if the item does not exist.\n */\n public getItem<T>(key: string, config?: Partial<IStorageConfig>): Nullable<T> {\n const fullConfig: IStorageConfig = { ...defaultStorageConfig, ...config };\n const item: Nullable<T> = this.#storage(fullConfig.ctx)?.getItem(key) as T;\n return fullConfig.converter?.convertFrom(item) ?? item ?? null;\n }\n\n /**\n * Stores an item in the specified storage context.\n *\n * @param key - The key to associate with the stored item.\n * @param data - The data to store, which will be converted if a converter is provided.\n * @param config - Optional configuration for the storage context and data conversion.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public setItem(key: string, data: any, config?: Partial<IStorageConfig>): void {\n const fullConfig: IStorageConfig = { ...defaultStorageConfig, ...config };\n const parsedValue: string = fullConfig.converter?.convertTo(data) ?? data;\n this.#storage(fullConfig.ctx)?.setItem(key, parsedValue);\n }\n\n /**\n * Checks if a given key exists in the specified storage context.\n *\n * @param key - The key to check for.\n * @param ctx - The storage context to search in (local, session, or in-memory).\n * @returns `true` if the key exists, `false` otherwise.\n */\n public hasKey(key: string, ctx: Nullable<StorageType> = defaultStorageConfig.ctx): boolean {\n return Object.prototype.hasOwnProperty.call(this.#storage(ctx), key);\n }\n\n /**\n * Executes callback functions based on whether a key exists in the specified storage context.\n *\n * @param key - The key to check for.\n * @param onHas - The callback to execute if the key exists.\n * @param onHasNot - The optional callback to execute if the key does not exist.\n * @param config - Optional configuration for the storage context and data conversion.\n */\n public onHasKey<T>(key: string, onHas: (value: Nullable<T>) => void, onHasNot?: () => void, config?: Partial<IStorageConfig>): void {\n const fullConfig: IStorageConfig = { ...defaultStorageConfig, ...config };\n\n if (this.hasKey(key, fullConfig.ctx)) {\n onHas(this.getItem<T>(key, fullConfig));\n } else if (onHasNot !== void 0) {\n onHasNot();\n }\n }\n\n /**\n * Removes an item from the specified storage context.\n *\n * @param key - The key of the item to remove.\n * @param ctx - The storage context from which to remove the item.\n */\n public removeItem(key: string, ctx: Nullable<StorageType> = defaultStorageConfig.ctx): void {\n this.#storage(ctx)?.removeItem(key);\n }\n\n /**\n * Clears all items from the specified storage context.\n *\n * @param ctx - The storage context to clear.\n */\n public clear(ctx: Nullable<StorageType> = defaultStorageConfig.ctx): void {\n this.#storage(ctx)?.clear();\n }\n\n /**\n * Returns the appropriate storage reference based on the storage context and platform.\n *\n * @param ctx - The storage context to use (local, session, custom, or in-memory).\n * @returns The corresponding `Storage` object, or `null` if not available.\n */\n #storage(ctx: Nullable<StorageType>): Nullable<Storage> {\n if (this.#platformService.isPlatformBrowser) {\n switch (ctx) {\n case 'local':\n return this.#localStorageRef;\n\n case 'session':\n return this.#sessionStorageRef;\n\n case 'custom':\n return this.#customStorageRef;\n }\n }\n\n /**\n * Fallback to in-memory storage when the platform is not a browser (e.g., SSR).\n */\n return this.#inMemoryStorageRef;\n }\n}\n","import { Provider } from '@angular/core';\n\nimport { InMemoryStorageService } from './in-memory-storage.service';\nimport { inMemoryStorageFactory, localStorageFactory, sessionStorageFactory } from './storage.factory';\nimport { StorageService } from './storage.service';\nimport { IN_MEMORY_STORAGE } from './tokens/in-memory-storage.token';\nimport { LOCAL_STORAGE } from './tokens/local-storage.token';\nimport { SESSION_STORAGE } from './tokens/session-storage.token';\n\n/**\n * Returns the set of dependency-injection providers\n * required to setup storages in an application.\n *\n * @usageNotes\n *\n * This function sets up the essential storage services needed for\n * working with `localStorage`, `sessionStorage`, and an in-memory storage solution.\n * It includes providers for each type of storage, ensuring that the appropriate\n * storage service is injected based on the platform or specific use case.\n *\n * The function is particularly useful in scenarios where the application may be\n * running on the server-side (SSR). In such cases, instead of using `localStorage`\n * and `sessionStorage`, which are only available in the browser, the `InMemoryStorageService`\n * can be used as a fallback, ensuring that the application still functions correctly.\n *\n * ```typescript\n * bootstrapApplication(RootComponent, {\n * providers: [\n * provideRtStorage()\n * ]\n * });\n * ```\n *\n * @publicApi\n */\nexport function provideRtStorage(): Provider[] {\n return [\n InMemoryStorageService,\n {\n provide: LOCAL_STORAGE,\n useFactory: localStorageFactory,\n },\n {\n provide: SESSION_STORAGE,\n useFactory: sessionStorageFactory,\n },\n {\n provide: IN_MEMORY_STORAGE,\n useFactory: inMemoryStorageFactory,\n },\n StorageService,\n ];\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Observable, Observer, Subscriber, take } from 'rxjs';\n\nimport { WINDOW } from '../tokens';\nimport { IIDBStorageServiceInterface } from './interfaces/idb-storage-service.interface';\n\n@Injectable()\nexport class IDBStorageService<ENTITY_TYPE> implements IIDBStorageServiceInterface<ENTITY_TYPE> {\n readonly #windowRef: Window = inject(WINDOW);\n\n #context: Observable<IDBDatabase>;\n\n constructor() {\n this.#context = new Observable<IDBDatabase>((observer: Observer<IDBDatabase>) => {\n if ('indexedDB' in this.#windowRef && 'open' in this.#windowRef.indexedDB) {\n const openRequest: IDBOpenDBRequest = this.#windowRef.indexedDB.open('use-idb', 1);\n openRequest.onerror = (): void => observer.error(openRequest.error);\n openRequest.onsuccess = (): void => observer.next(openRequest.result);\n openRequest.onupgradeneeded = (): IDBObjectStore => openRequest.result.createObjectStore('idb');\n } else {\n observer.error('IndexedDB not supported');\n }\n });\n }\n\n public get(key: string): Observable<ENTITY_TYPE | undefined> {\n return new Observable<ENTITY_TYPE | undefined>((observer: Subscriber<ENTITY_TYPE | undefined>) => {\n this.#context.pipe(take(1)).subscribe((db: IDBDatabase) => {\n const transaction: IDBTransaction = db.transaction('idb', 'readonly');\n const store: IDBObjectStore = transaction.objectStore('idb');\n const request: IDBRequest<ENTITY_TYPE> = store.get(key);\n\n request.onsuccess = (): void => observer.next(request.result);\n request.onerror = (): void => observer.error(request.error);\n });\n });\n }\n\n public set(key: string, value: ENTITY_TYPE): Observable<void> {\n return new Observable<void>((observer: Subscriber<void>) => {\n this.#context.pipe(take(1)).subscribe((db: IDBDatabase) => {\n const transaction: IDBTransaction = db.transaction('idb', 'readwrite');\n const store: IDBObjectStore = transaction.objectStore('idb');\n const request: IDBRequest<IDBValidKey> = store.put(value, key);\n\n request.onsuccess = (): void => observer.next();\n request.onerror = (): void => observer.error(request.error);\n });\n });\n }\n\n public remove(key: string): Observable<void> {\n return new Observable<void>((observer: Subscriber<void>) => {\n this.#context.pipe(take(1)).subscribe((db: IDBDatabase) => {\n const transaction: IDBTransaction = db.transaction('idb', 'readwrite');\n const store: IDBObjectStore = transaction.objectStore('idb');\n const request: IDBRequest<undefined> = store.delete(key);\n\n request.onsuccess = (): void => observer.next();\n request.onerror = (): void => observer.error(request.error);\n });\n });\n }\n}\n","import { IDBStorageService } from './idb-storage-service';\n\n/**\n * Factory for creating `IDBStorageService`.\n * Returns a new instance of IDBStorageService.\n *\n * @returns a new instance of IDBStorageService\n */\nexport function iDBStorageFactory(): IDBStorageService<Record<string, unknown>> {\n return new IDBStorageService();\n}\n","import { InjectionToken } from '@angular/core';\n\nimport { IDBStorageService } from '../idb-storage-service';\n\n/**\n * Injection token for IDBStorageService.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const IDB_STORAGE_SERVICE_TOKEN: InjectionToken<IDBStorageService<any>> = new InjectionToken<IDBStorageService<any>>(\n 'IDB_STORAGE_SERVICE_TOKEN'\n);\n","import { Provider } from '@angular/core';\n\nimport { iDBStorageFactory } from './idb-storage.factory';\nimport { IDBStorageService } from './idb-storage-service';\nimport { IDB_STORAGE_SERVICE_TOKEN } from './token/idb-storage.token';\n\n/**\n * Returns the set of dependency-injection providers\n * required to set up storages in an application.\n *\n * @usageNotes\n *\n * This function sets up the essential storage services needed for\n * working with `idb storage` solution.\n * It includes providers for each type of storage, ensuring that the appropriate\n * storage service is injected based on the platform or specific use case.\n *\n * ```typescript\n * bootstrapApplication(RootComponent, {\n * providers: [\n * provideRtIDBStorage()\n * ]\n * });\n * ```\n *\n * @publicApi\n */\nexport function provideRtIDBStorage(): Provider[] {\n return [\n {\n provide: IDB_STORAGE_SERVICE_TOKEN,\n useFactory: iDBStorageFactory,\n },\n IDBStorageService,\n ];\n}\n","// functions\nexport * from './lib/functions';\n\n// services\nexport * from './lib/services';\n\n// tokens\nexport * from './lib/tokens';\n\n// types\nexport * from './lib/types';\n\n// bem\nexport * from './lib/bem';\n\n// storage\nexport * from './lib/storage';\n\n// idb-storage\nexport * from './lib/idb-storage';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.BlockDirective"],"mappings":";;;;;;AAAM,SAAU,KAAK,CAAI,MAA4B,EAAA;AACjD,IAAA,OAAO,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS;AAClD;;MCKa,UAAU,CAAA;AACV,IAAA,YAAY,GAAgC,IAAI,OAAO,EAAsB;AAE/E,IAAA,IAAI,CAAC,KAAyB,EAAA;AACjC,QAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;IACjC;IAEO,MAAM,GAAA;AACT,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;IAC3C;AAEO,IAAA,MAAM,CAAC,SAAY,EAAA;AACtB,QAAA,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CACrB,MAAM,CAAC,CAAC,KAAyB,KAAkC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,EAC5F,GAAG,CAAC,CAAC,KAAyB,KAAK,KAAK,CAAC,CAC5C;IACL;AACH;;ACrBD;;;;AAIG;MAEU,eAAe,CAAA;AACf,IAAA,WAAW,GAAW,MAAM,CAAC,WAAW,CAAC;AAGlD,IAAA,WAAA,GAAA;QACI,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC,IAAI,CAAC,WAAW,CAAC;IAChE;8GANS,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;AAAf,IAAA,SAAA,IAAA,CAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,eAAe,cADF,MAAM,EAAA,CAAA,CAAA;;2FACnB,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;MCLrB,MAAM,GAA2B,IAAI,cAAc,CAAS,6CAA6C,EAAE;IACpH,OAAO,EAAE,MAAa;QAClB,MAAM,EAAE,WAAW,EAAE,GAAa,MAAM,CAAC,QAAQ,CAAC;QAElD,IAAI,CAAC,WAAW,EAAE;AACd,YAAA,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC;QAC9C;AAEA,QAAA,OAAO,WAAW;IACtB,CAAC;AACJ,CAAA;;ACXM,MAAM,iBAAiB,GAAe;AACzC,IAAA,UAAU,EAAE;AACR,QAAA,EAAE,EAAE,IAAI;AACR,QAAA,GAAG,EAAE,IAAI;AACT,QAAA,GAAG,EAAE,IAAI;AACZ,KAAA;AACD,IAAA,YAAY,EAAE,KAAK;AACnB,IAAA,OAAO,EAAE,OAAO;CACnB;;ACLK,SAAU,cAAc,CAAC,GAAW,EAAA;AACtC,IAAA,QAAQ,iBAAiB,CAAC,OAAO;AAC7B,QAAA,KAAK,OAAO;AACR,YAAA,OAAO;AACH,kBAAE;AACK,qBAAA,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAS,EAAA;AAClC,oBAAA,OAAO,GAAG,GAAG,CAAC,CAAC,WAAW,EAAE;AAChC,gBAAA,CAAC;AACA,qBAAA,OAAO,CAAC,IAAI,EAAE,EAAE;kBACrB,EAAE;AACZ,QAAA,KAAK,OAAO;AACR,YAAA,OAAO;AACH,kBAAE;AACK,qBAAA,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAS,EAAA;AAClC,oBAAA,OAAO,GAAG,GAAG,CAAC,CAAC,WAAW,EAAE;AAChC,gBAAA,CAAC;AACA,qBAAA,OAAO,CAAC,IAAI,EAAE,EAAE;kBACrB,EAAE;AACZ,QAAA;AACI,YAAA,OAAO,GAAG;;AAEtB;AAEM,SAAU,aAAa,CAAC,SAAiB,EAAE,QAAiB,EAAE,OAAgB,EAAE,QAAkB,EAAA;AACpG,IAAA,IAAI,iBAAiB,CAAC,YAAY,EAAE;AAChC,QAAA,QAAQ,GAAG,CAAC,CAAC,QAAQ;IACzB;IAEA,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,OAAO,QAAQ,KAAK,SAAS,EAAE;AAC/D,QAAA,QAAQ,GAAG,CAAC,CAAC,QAAQ;IACzB;IAEA,IAAI,GAAG,GAAW,SAAS;IAE3B,IAAI,QAAQ,EAAE;QACV,GAAG,IAAI,iBAAiB,CAAC,UAAU,CAAC,EAAE,GAAG,QAAQ;IACrD;IAEA,IAAI,OAAO,EAAE;AACT,QAAA,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC;QACjC,GAAG,IAAI,iBAAiB,CAAC,UAAU,CAAC,GAAG,GAAG,OAAO;QACjD,IAAI,OAAO,QAAQ,KAAK,SAAS,IAAI,QAAQ,IAAI,IAAI,EAAE;YACnD,GAAG,IAAI,iBAAiB,CAAC,UAAU,CAAC,GAAG,GAAG,QAAQ;QACtD;IACJ;AAEA,IAAA,OAAO,GAAG;AACd;AAEM,SAAU,SAAS,CAAC,IAA2D,EAAA;AACjF,IAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC1B,QAAA,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;IAC5B;AAEA,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACrB,MAAM,OAAO,GAAgB,EAAE;AAE/B,QAAA,IAAI,CAAC,OAAO,CAAC,CAAC,GAAmB,KAAI;YACjC,IAAI,GAAG,EAAE;AACL,gBAAA,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI;YACvB;AACJ,QAAA,CAAC,CAAC;QACF,IAAI,GAAG,OAAO;IAClB;AAAO,SAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AACjC,QAAA,OAAO,EAAE;IACb;AAEA,IAAA,OAAO,IAAI;AACf;AAEM,SAAU,OAAO,CACnB,SAAiB,EACjB,QAAgB,EAChB,IAAiB,EACjB,OAAoB,EACpB,OAAmB,EACnB,QAAmB,EAAA;IAEnB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,GAAW,KAAI;AACtC,QAAA,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE;YACd,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,GAAG,CAAC,EAAE;gBAC5B;YACJ;YAEA,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,EAAE,aAAa,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QACtG;AAEA,QAAA,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE;YACX,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE,aAAa,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAChG;AACJ,IAAA,CAAC,CAAC;IAEF,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,GAAW,KAAI;AACzC,QAAA,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE;YAChC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC,aAAa,EAAE,aAAa,CAAC,SAAS,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QACtG;AACJ,IAAA,CAAC,CAAC;AACN;;MC9Fa,cAAc,CAAA;IAEvB,KAAK,GAAgB,EAAE;IACvB,cAAc,GAAW,EAAE;AAE3B,IAAA,WAAA,CACoB,OAAmB,EACnB,QAAmB,EACG,IAAY,EACA,IAAY,EAAA;QAH9C,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACc,IAAA,CAAA,IAAI,GAAJ,IAAI;QACQ,IAAA,CAAA,IAAI,GAAJ,IAAI;AAEtD,QAAA,IAAI,CAAC,IAAI,IAAI,EAAE,OAAO,CAAC,aAAa,YAAY,OAAO,CAAC,EAAE;AACtD,YAAA,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;QACjE;IACJ;IAEO,WAAW,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,cAAc,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;YAClE,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;AAEhD,YAAA,IAAI,IAAI,GAAqE,IAAI,CAAC,KAAK;YAEvF,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,IAAI;AAExC,YAAA,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;YAEtB,IAAI,EAAE,OAAO,CAAC,aAAa,YAAY,OAAO,CAAC,EAAE;AAC7C,gBAAA,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC;YAChE;YAEA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,IAAI;QACrE;IACJ;8GAhCS,cAAc,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAQR,SAAS,EAAA,SAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EACG,QAAQ,EAAA,SAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAT1B,cAAc,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAH1B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,WAAW;AACxB,iBAAA;;0BASQ,SAAS;2BAAC,SAAS;;0BACnB;;0BAAY,SAAS;2BAAC,QAAQ;;sBARlC;;;MCJQ,iBAAiB,CAAA;AACnB,IAAA,SAAS,CAAgD,OAAoB,EAAA;;QAEhF,MAAM,cAAc,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,SAAS,KAAK,OAAO,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;AAChH,QAAA,OAAO,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC;IACnC;8GALS,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,IAAA,EAAA,CAAA,CAAA;4GAAjB,iBAAiB,EAAA,YAAA,EAAA,IAAA,EAAA,IAAA,EAAA,eAAA,EAAA,CAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAH7B,IAAI;AAAC,YAAA,IAAA,EAAA,CAAA;AACF,oBAAA,IAAI,EAAE,eAAe;AACxB,iBAAA;;;MCKY,aAAa,CAAA;IAGtB,KAAK,GAAgB,EAAE;IACvB,cAAc,GAAW,EAAE;AAE3B,IAAA,WAAA,CACoB,OAAmB,EACnB,QAAmB,EACE,IAAY,EAChC,OAAuB,EAAA;QAHxB,IAAA,CAAA,OAAO,GAAP,OAAO;QACP,IAAA,CAAA,QAAQ,GAAR,QAAQ;QACa,IAAA,CAAA,IAAI,GAAJ,IAAI;QACxB,IAAA,CAAA,OAAO,GAAP,OAAO;AAExB,QAAA,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,IAAI;AAE7B,QAAA,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,EAAE,aAAa,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC/E;IAEO,WAAW,GAAA;AACd,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,cAAc,EAAE;YACpD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC;AAEhD,YAAA,IAAI,IAAI,GAAqE,IAAI,CAAC,KAAK;YAEvF,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,IAAI;AAEnD,YAAA,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;AAEtB,YAAA,OAAO,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC;YAEnE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,IAAI;QACrE;IACJ;AA/BS,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,aAAa,qEASP,QAAQ,EAAA,SAAA,EAAA,IAAA,EAAA,EAAA,EAAA,KAAA,EAAAA,cAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGATd,aAAa,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAb,aAAa,EAAA,UAAA,EAAA,CAAA;kBAHzB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,UAAU;AACvB,iBAAA;;0BAUQ,SAAS;2BAAC,QAAQ;;sBARtB;;;MCLQ,YAAY,CAAA;8GAAZ,YAAY,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;kGAAZ,YAAY,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAAZ,YAAY,EAAA,UAAA,EAAA,CAAA;kBAHxB,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,SAAS;AACtB,iBAAA;;;ICJW;AAAZ,CAAA,UAAY,kBAAkB,EAAA;AAC1B,IAAA,kBAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,kBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB;AACnB,IAAA,kBAAA,CAAA,WAAA,CAAA,GAAA,UAAsB;AACtB,IAAA,kBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACrB,CAAC,EALW,kBAAkB,KAAlB,kBAAkB,GAAA,EAAA,CAAA,CAAA;;ACE9B;;;;;;AAMG;MAEU,sBAAsB,CAAA;AAC/B;;;;;;;;;;;AAWG;AACM,IAAA,QAAQ,GAAwB,IAAI,GAAG,EAAkB;AAElE;;;;;AAKG;AACH,IAAA,IAAW,MAAM,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI;IAC7B;AAEA;;;;;;;AAOG;AACI,IAAA,OAAO,CAAC,GAAW,EAAA;QACtB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI;IACzC;AAEA;;;;;;;AAOG;IACI,OAAO,CAAC,GAAW,EAAE,IAAY,EAAA;QACpC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC;IAChC;AAEA;;;;;;;AAOG;AACI,IAAA,GAAG,CAAC,KAAa,EAAA;AACpB,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI;IAC1D;AAEA;;;;;;AAMG;AACI,IAAA,UAAU,CAAC,GAAW,EAAA;AACzB,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC;IAC7B;AAEA;;;;;AAKG;IACI,KAAK,GAAA;AACR,QAAA,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;IACzB;8GAhFS,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAtB,sBAAsB,EAAA,CAAA,CAAA;;2FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBADlC;;;MCNY,aAAa,CAAA;;AAEf,IAAA,SAAS,CAAC,IAAmB,EAAA;AAChC,QAAA,IAAI,UAAkB;AAEtB,QAAA,IAAI;AACA,YAAA,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;QACrC;QAAE,OAAO,CAAU,EAAE;;AAEjB,YAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YAChB,UAAU,GAAG,MAAM;QACvB;AAEA,QAAA,OAAO,UAAU;IACrB;;AAGO,IAAA,WAAW,CAAI,IAAS,EAAA;AAC3B,QAAA,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;AAC1B,YAAA,IAAI;AACA,gBAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAM;YAChC;YAAE,OAAO,CAAU,EAAE;;AAEjB,gBAAA,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AAChB,gBAAA,OAAO,IAAI;YACf;QACJ;AAEA,QAAA,OAAO,IAAI;IACf;AACH;;AC3BD;;;;;;AAMG;SACa,mBAAmB,GAAA;AAC/B,IAAA,OAAO,MAAM,CAAC,eAAe,CAAC,CAAC,iBAAiB,GAAG,YAAY,GAAG,IAAI;AAC1E;AAEA;;;;;;AAMG;SACa,qBAAqB,GAAA;AACjC,IAAA,OAAO,MAAM,CAAC,eAAe,CAAC,CAAC,iBAAiB,GAAG,cAAc,GAAG,IAAI;AAC5E;AAEA;;;;;AAKG;SACa,sBAAsB,GAAA;IAClC,OAAO,IAAI,sBAAsB,EAAE;AACvC;;MClCa,cAAc,GAA4B,IAAI,cAAc,CAAU,gBAAgB;;MCAtF,iBAAiB,GAA4B,IAAI,cAAc,CAAU,mBAAmB;;MCA5F,aAAa,GAA4B,IAAI,cAAc,CAAU,eAAe;;MCApF,eAAe,GAA4B,IAAI,cAAc,CAAU,iBAAiB;;ACUrG,MAAM,oBAAoB,GAAmB;IACzC,GAAG,EAAE,kBAAkB,CAAC,KAAK;AAC7B,IAAA,UAAU,EAAE,IAAI;IAChB,SAAS,EAAE,IAAI,aAAa,EAAE;CACjC;AAED;;;;;;AAMG;MAEU,cAAc,CAAA;AACd,IAAA,gBAAgB,GAAoB,MAAM,CAAC,eAAe,CAAC;AAC3D,IAAA,gBAAgB,GAAY,MAAM,CAAC,aAAa,CAAC;AACjD,IAAA,kBAAkB,GAAY,MAAM,CAAC,eAAe,CAAC;AACrD,IAAA,mBAAmB,GAAY,MAAM,CAAC,iBAAiB,CAAC;IACxD,iBAAiB,GAAsB,MAAM,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;AAE1F;;;;;;AAMG;IACI,OAAO,CAAI,GAAW,EAAE,MAAgC,EAAA;QAC3D,MAAM,UAAU,GAAmB,EAAE,GAAG,oBAAoB,EAAE,GAAG,MAAM,EAAE;AACzE,QAAA,MAAM,IAAI,GAAgB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,GAAG,CAAM;AAC1E,QAAA,OAAO,UAAU,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,IAAI;IAClE;AAEA;;;;;;AAMG;;AAEI,IAAA,OAAO,CAAC,GAAW,EAAE,IAAS,EAAE,MAAgC,EAAA;QACnE,MAAM,UAAU,GAAmB,EAAE,GAAG,oBAAoB,EAAE,GAAG,MAAM,EAAE;AACzE,QAAA,MAAM,WAAW,GAAW,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI;AACzE,QAAA,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC;IAC5D;AAEA;;;;;;AAMG;AACI,IAAA,MAAM,CAAC,GAAW,EAAE,GAAA,GAA6B,oBAAoB,CAAC,GAAG,EAAA;AAC5E,QAAA,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC;IACxE;AAEA;;;;;;;AAOG;AACI,IAAA,QAAQ,CAAI,GAAW,EAAE,KAAmC,EAAE,QAAqB,EAAE,MAAgC,EAAA;QACxH,MAAM,UAAU,GAAmB,EAAE,GAAG,oBAAoB,EAAE,GAAG,MAAM,EAAE;QAEzE,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,GAAG,CAAC,EAAE;YAClC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAI,GAAG,EAAE,UAAU,CAAC,CAAC;QAC3C;AAAO,aAAA,IAAI,QAAQ,KAAK,KAAK,CAAC,EAAE;AAC5B,YAAA,QAAQ,EAAE;QACd;IACJ;AAEA;;;;;AAKG;AACI,IAAA,UAAU,CAAC,GAAW,EAAE,GAAA,GAA6B,oBAAoB,CAAC,GAAG,EAAA;QAChF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC;IACvC;AAEA;;;;AAIG;AACI,IAAA,KAAK,CAAC,GAAA,GAA6B,oBAAoB,CAAC,GAAG,EAAA;QAC9D,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE;IAC/B;AAEA;;;;;AAKG;AACH,IAAA,QAAQ,CAAC,GAA0B,EAAA;AAC/B,QAAA,IAAI,IAAI,CAAC,gBAAgB,CAAC,iBAAiB,EAAE;YACzC,QAAQ,GAAG;AACP,gBAAA,KAAK,OAAO;oBACR,OAAO,IAAI,CAAC,gBAAgB;AAEhC,gBAAA,KAAK,SAAS;oBACV,OAAO,IAAI,CAAC,kBAAkB;AAElC,gBAAA,KAAK,QAAQ;oBACT,OAAO,IAAI,CAAC,iBAAiB;;QAEzC;AAEA;;AAEG;QACH,OAAO,IAAI,CAAC,mBAAmB;IACnC;8GA1GS,cAAc,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAd,cAAc,EAAA,CAAA,CAAA;;2FAAd,cAAc,EAAA,UAAA,EAAA,CAAA;kBAD1B;;;AChBD;;;;;;;;;;;;;;;;;;;;;;;;;AAyBG;SACa,gBAAgB,GAAA;IAC5B,OAAO;QACH,sBAAsB;AACtB,QAAA;AACI,YAAA,OAAO,EAAE,aAAa;AACtB,YAAA,UAAU,EAAE,mBAAmB;AAClC,SAAA;AACD,QAAA;AACI,YAAA,OAAO,EAAE,eAAe;AACxB,YAAA,UAAU,EAAE,qBAAqB;AACpC,SAAA;AACD,QAAA;AACI,YAAA,OAAO,EAAE,iBAAiB;AAC1B,YAAA,UAAU,EAAE,sBAAsB;AACrC,SAAA;QACD,cAAc;KACjB;AACL;;MC7Ca,iBAAiB,CAAA;AACjB,IAAA,UAAU,GAAW,MAAM,CAAC,MAAM,CAAC;AAE5C,IAAA,QAAQ;AAER,IAAA,WAAA,GAAA;QACI,IAAI,CAAC,QAAQ,GAAG,IAAI,UAAU,CAAc,CAAC,QAA+B,KAAI;AAC5E,YAAA,IAAI,WAAW,IAAI,IAAI,CAAC,UAAU,IAAI,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;AACvE,gBAAA,MAAM,WAAW,GAAqB,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;AAClF,gBAAA,WAAW,CAAC,OAAO,GAAG,MAAY,QAAQ,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC;AACnE,gBAAA,WAAW,CAAC,SAAS,GAAG,MAAY,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;AACrE,gBAAA,WAAW,CAAC,eAAe,GAAG,MAAsB,WAAW,CAAC,MAAM,CAAC,iBAAiB,CAAC,KAAK,CAAC;YACnG;iBAAO;AACH,gBAAA,QAAQ,CAAC,KAAK,CAAC,yBAAyB,CAAC;YAC7C;AACJ,QAAA,CAAC,CAAC;IACN;AAEO,IAAA,GAAG,CAAC,GAAW,EAAA;AAClB,QAAA,OAAO,IAAI,UAAU,CAA0B,CAAC,QAA6C,KAAI;AAC7F,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAe,KAAI;gBACtD,MAAM,WAAW,GAAmB,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,UAAU,CAAC;gBACrE,MAAM,KAAK,GAAmB,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC;gBAC5D,MAAM,OAAO,GAA4B,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC;AAEvD,gBAAA,OAAO,CAAC,SAAS,GAAG,MAAY,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;AAC7D,gBAAA,OAAO,CAAC,OAAO,GAAG,MAAY,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAC/D,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;IAEO,GAAG,CAAC,GAAW,EAAE,KAAkB,EAAA;AACtC,QAAA,OAAO,IAAI,UAAU,CAAO,CAAC,QAA0B,KAAI;AACvD,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAe,KAAI;gBACtD,MAAM,WAAW,GAAmB,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC;gBACtE,MAAM,KAAK,GAAmB,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC;gBAC5D,MAAM,OAAO,GAA4B,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC;gBAE9D,OAAO,CAAC,SAAS,GAAG,MAAY,QAAQ,CAAC,IAAI,EAAE;AAC/C,gBAAA,OAAO,CAAC,OAAO,GAAG,MAAY,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAC/D,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;AAEO,IAAA,MAAM,CAAC,GAAW,EAAA;AACrB,QAAA,OAAO,IAAI,UAAU,CAAO,CAAC,QAA0B,KAAI;AACvD,YAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,EAAe,KAAI;gBACtD,MAAM,WAAW,GAAmB,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC;gBACtE,MAAM,KAAK,GAAmB,WAAW,CAAC,WAAW,CAAC,KAAK,CAAC;gBAC5D,MAAM,OAAO,GAA0B,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;gBAExD,OAAO,CAAC,SAAS,GAAG,MAAY,QAAQ,CAAC,IAAI,EAAE;AAC/C,gBAAA,OAAO,CAAC,OAAO,GAAG,MAAY,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AAC/D,YAAA,CAAC,CAAC;AACN,QAAA,CAAC,CAAC;IACN;8GAvDS,iBAAiB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;kHAAjB,iBAAiB,EAAA,CAAA,CAAA;;2FAAjB,iBAAiB,EAAA,UAAA,EAAA,CAAA;kBAD7B;;;ACJD;;;;;AAKG;SACa,iBAAiB,GAAA;IAC7B,OAAO,IAAI,iBAAiB,EAAE;AAClC;;ACNA;;AAEG;AACH;MACa,yBAAyB,GAA2C,IAAI,cAAc,CAC/F,2BAA2B;;ACH/B;;;;;;;;;;;;;;;;;;;;AAoBG;SACa,mBAAmB,GAAA;IAC/B,OAAO;AACH,QAAA;AACI,YAAA,OAAO,EAAE,yBAAyB;AAClC,YAAA,UAAU,EAAE,iBAAiB;AAChC,SAAA;QACD,iBAAiB;KACpB;AACL;;ACnCA;;ACAA;;AAEG;;;;"}
1
+ {"version":3,"file":"rt-tools-core.mjs","sources":["../../../projects/core/src/lib/const/overlay-positions.const.ts","../../../projects/core/src/lib/directives/icon-outlined.directive.ts","../../../projects/core/src/lib/directives/scroll-to-element.directive.ts","../../../projects/core/src/lib/services/platform.service.ts","../../../projects/core/src/lib/tokens/window.token.ts","../../../projects/core/src/lib/directives/navigation.directive.ts","../../../projects/core/src/lib/directives/tab-query-param.directive.ts","../../../projects/core/src/lib/directives/scroll.directive.ts","../../../projects/core/src/lib/directives/escape-key.directive.ts","../../../projects/core/src/lib/enums/position.enum.ts","../../../projects/core/src/lib/functions/is-html-element-guard.util.ts","../../../projects/core/src/lib/pipes/break-string.pipe.ts","../../../projects/core/src/lib/pipes/sanitize.pipe.ts","../../../projects/core/src/lib/pipes/entity-to-string.pipe.ts","../../../projects/core/src/lib/pipes/empty-to-dash.pipe.ts","../../../projects/core/src/lib/pipes/equal.pipe.ts","../../../projects/core/src/lib/pipes/equal-chain.pipe.ts","../../../projects/core/src/lib/pipes/not-equal.pipe.ts","../../../projects/core/src/lib/pipes/not-equal-chain.pipe.ts","../../../projects/core/src/lib/pipes/ternary.pipe.ts","../../../projects/core/src/lib/pipes/is-email.pipe.ts","../../../projects/core/src/lib/services/message-bus.ts","../../../projects/core/src/lib/tokens/navigator.token.ts","../../../projects/core/src/lib/services/device-detector.service.ts","../../../projects/core/src/lib/services/breakpoints.ts","../../../projects/core/src/lib/services/breakpoints.service.ts","../../../projects/core/src/lib/validators/comparison.validator.ts","../../../projects/core/src/lib/validators/arrays-not-empty.validator.ts","../../../projects/core/src/lib/validators/email.validator.ts","../../../projects/core/src/lib/providers.ts","../../../projects/core/src/lib/bem/bem.const.ts","../../../projects/core/src/lib/bem/bem.utils.ts","../../../projects/core/src/lib/bem/block.directive.ts","../../../projects/core/src/lib/bem/concat-classes.pipe.ts","../../../projects/core/src/lib/bem/elem.directive.ts","../../../projects/core/src/lib/bem/mod.directive.ts","../../../projects/core/src/lib/storage/enums/storage-types.enum.ts","../../../projects/core/src/lib/storage/in-memory-storage.service.ts","../../../projects/core/src/lib/storage/json-converter.ts","../../../projects/core/src/lib/storage/storage.factory.ts","../../../projects/core/src/lib/storage/tokens/custom-storage.token.ts","../../../projects/core/src/lib/storage/tokens/in-memory-storage.token.ts","../../../projects/core/src/lib/storage/tokens/local-storage.token.ts","../../../projects/core/src/lib/storage/tokens/session-storage.token.ts","../../../projects/core/src/lib/storage/storage.service.ts","../../../projects/core/src/lib/storage/providers.ts","../../../projects/core/src/lib/idb-storage/idb-storage-service.ts","../../../projects/core/src/lib/idb-storage/idb-storage.factory.ts","../../../projects/core/src/lib/idb-storage/token/idb-storage.token.ts","../../../projects/core/src/lib/idb-storage/providers.ts","../../../projects/core/src/index.ts","../../../projects/core/src/rt-tools-core.ts"],"sourcesContent":["import { ConnectedPosition } from '@angular/cdk/overlay';\n\nexport const OVERLAY_POSITIONS: Readonly<ConnectedPosition[]> = Object.freeze([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'end',\n originY: 'bottom',\n overlayX: 'end',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n },\n]);\n","import { Directive, HostBinding, input, InputSignalWithTransform } from '@angular/core';\nimport { BooleanInput } from '@angular/cdk/coercion';\n\n@Directive({\n selector: 'mat-icon[rtIconOutlined]',\n})\nexport class RtIconOutlinedDirective {\n public isOutlined: InputSignalWithTransform<boolean, BooleanInput> = input<boolean, BooleanInput>(false, {\n alias: 'rtIconOutlined',\n transform: (value: BooleanInput) => {\n return Boolean(value);\n },\n });\n\n @HostBinding('style.fontVariationSettings')\n public get fontVariationSettings(): string {\n // eslint-disable-next-line quotes\n return this.isOutlined() ? \"'FILL' 0, 'wght' 700, 'GRAD' 0, 'opsz' 48\" : \"'FILL' 1, 'wght' 700, 'GRAD' 0, 'opsz' 48\";\n }\n}\n","import { Directive, effect, input, InputSignal, InputSignalWithTransform } from '@angular/core';\nimport { Nullable, transformArrayInput } from '@rt-tools/utils';\n\n@Directive({\n selector: '[rtScrollToElement]',\n})\nexport class RtScrollToElementDirective {\n public rtScrollToElement: InputSignal<string | number> = input.required<string | number>();\n public elements: InputSignalWithTransform<unknown[], unknown[]> = input.required<unknown[], unknown[]>({\n transform: (value: unknown[]) => transformArrayInput(value),\n });\n\n constructor() {\n effect(() => {\n if (this.elements()?.length && this.rtScrollToElement()) {\n this.#scrollToTarget();\n }\n });\n }\n\n #scrollToTarget(): void {\n const targetId: string | number = this.rtScrollToElement();\n const targetElement: Nullable<HTMLElement> = document.getElementById(targetId.toString());\n targetElement?.scrollIntoView({ behavior: 'smooth', block: 'start' });\n }\n}\n","import { isPlatformBrowser } from '@angular/common';\nimport { Injectable, PLATFORM_ID, inject } from '@angular/core';\n\n/**\n * A service for detecting the platform on which the application is running.\n * This service is useful for checking if the application is running in a browser\n * environment or on the server-side.\n */\n@Injectable({ providedIn: 'root' })\nexport class PlatformService {\n readonly #platformId: object = inject(PLATFORM_ID);\n public readonly isPlatformBrowser: boolean;\n\n constructor() {\n this.isPlatformBrowser = isPlatformBrowser(this.#platformId);\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { InjectionToken, inject } from '@angular/core';\n\nexport const WINDOW: InjectionToken<Window> = new InjectionToken<Window>('An injection token for global window object', {\n factory: (): Window => {\n const { defaultView }: Document = inject(DOCUMENT);\n\n if (!defaultView) {\n throw new Error('Window is not available');\n }\n\n return defaultView;\n },\n});\n","import { Directive, HostListener, inject, input, InputSignal } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Nullable } from '@rt-tools/utils';\n\nimport { PlatformService } from '../services/platform.service';\nimport { WINDOW } from '../tokens/window.token';\n\n@Directive({\n selector: '[rtNavigationDirective]',\n providers: [PlatformService],\n})\nexport class RtNavigationDirective {\n readonly #router: Router = inject(Router);\n readonly #windowRef: Window = inject(WINDOW);\n readonly #platformService: PlatformService = inject(PlatformService);\n\n public link: InputSignal<Nullable<string>> = input.required({ alias: 'rtNavigationDirective' });\n\n @HostListener('click', ['$event'])\n public onClick(event: MouseEvent): void {\n if (this.link()) {\n if (this.#platformService.isPlatformBrowser && (event.ctrlKey || event.metaKey)) {\n this.#windowRef.open(this.link() as string);\n } else {\n void this.#router.navigate([this.link()]);\n }\n }\n }\n}\n","import { DestroyRef, Directive, inject, OnInit, Signal, signal, WritableSignal } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ActivatedRoute, ParamMap, Router } from '@angular/router';\nimport { filter, map, take } from 'rxjs/operators';\n\n@Directive()\nexport abstract class RtTabQueryParamDirective implements OnInit {\n readonly #router: Router = inject(Router);\n readonly #route: ActivatedRoute = inject(ActivatedRoute);\n readonly #destroyRef: DestroyRef = inject(DestroyRef);\n\n readonly #currentTabIndex: WritableSignal<number> = signal(0);\n public readonly currentTabIndex: Signal<number> = this.#currentTabIndex.asReadonly();\n\n public ngOnInit(): void {\n this.#route.queryParamMap\n .pipe(\n filter((params: ParamMap) => params.has('tab')),\n take(1),\n map((params: ParamMap) => Number(params.get('tab'))),\n takeUntilDestroyed(this.#destroyRef)\n )\n .subscribe((tabIndex: number) => {\n this.#setTabIndex(tabIndex);\n });\n }\n\n public setQueryTab(index: number): void {\n void this.#router.navigate([], {\n relativeTo: this.#route,\n queryParams: {\n tab: index,\n },\n queryParamsHandling: 'merge',\n });\n this.#setTabIndex(index);\n }\n\n #setTabIndex(index: number): void {\n this.#currentTabIndex.set(index);\n }\n}\n","import { Directive, inject, input, InputSignal, OnDestroy, OnInit, output, OutputEmitterRef } from '@angular/core';\nimport { PlatformService } from '../services/platform.service';\nimport { WINDOW } from '../tokens/window.token';\n\n@Directive({\n selector: '[rtScrollDirective]',\n})\nexport class RtScrollDirective implements OnInit, OnDestroy {\n readonly #windowRef: Window = inject(WINDOW);\n readonly #platformService: PlatformService = inject(PlatformService);\n\n public active: InputSignal<boolean> = input<boolean>(true);\n public multiplier: InputSignal<number> = input<number>(0.5);\n\n public readonly scrollAction: OutputEmitterRef<void> = output<void>();\n\n public ngOnInit(): void {\n if (this.#platformService.isPlatformBrowser) {\n this.#windowRef.addEventListener('scroll', this.scroll, true);\n }\n }\n\n public ngOnDestroy(): void {\n this.#windowRef.removeEventListener('scroll', this.scroll, true);\n }\n\n public scroll: EventListener = (event: Event): void => {\n const target: HTMLElement = event.target as HTMLElement;\n\n if (this.active() && target.offsetHeight + target.scrollTop >= target.scrollHeight * this.multiplier()) {\n this.scrollAction.emit();\n }\n };\n}\n","import { Directive, HostListener, output, OutputEmitterRef } from '@angular/core';\n\n@Directive({\n selector: '[rtEscapeKey]',\n})\nexport class RtEscapeKeyDirective {\n public readonly escapeKeyAction: OutputEmitterRef<void> = output<void>();\n\n @HostListener('document:keydown', ['$event'])\n public handleKeyboardEvent(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n this.escapeKeyAction.emit();\n }\n }\n}\n","export enum POSITION_ENUM {\n LEFT = 'left',\n RIGHT = 'right',\n TOP = 'top',\n BOTTOM = 'bottom',\n START = 'start',\n END = 'end',\n CENTER = 'center',\n}\n","/**\n * This function is a type guard that checks if a value is an instance of HTMLElement.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function isHTMLElement(element: any): element is HTMLElement {\n return element instanceof HTMLElement;\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { DASH, isNil, isString, Nullable } from '@rt-tools/utils';\n\n@Pipe({\n name: 'breakString',\n})\nexport class BreakStringPipe implements PipeTransform {\n public transform(value: Nullable<string>): string {\n if (isNil(value)) {\n return DASH;\n }\n\n if (value && isString(value)) {\n if (/\\s/.test(value) || /^[A-Z0-9\\s]+$/.test(value) || /\\d/.test(value) || /[^\\w\\s]/.test(value)) {\n return value;\n }\n\n return value.split(/(?=[A-Z])/).join(' ');\n }\n\n return value.toString();\n }\n}\n","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\n\n@Pipe({\n name: 'sanitize',\n pure: true,\n})\nexport class SanitizePipe implements PipeTransform {\n readonly #sanitizer: DomSanitizer = inject(DomSanitizer);\n\n public transform(value: string): SafeHtml {\n return this.#sanitizer.bypassSecurityTrustHtml(value);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { DASH, isNumber, isString } from '@rt-tools/utils';\n\n@Pipe({\n name: 'entityToString',\n pure: true,\n})\nexport class EntityToStringPipe implements PipeTransform {\n public transform<T>(value: T): string {\n if (isString(value)) {\n return value;\n }\n\n if (isNumber(value)) {\n return value.toString();\n }\n\n return DASH;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { emptyToDash } from '@rt-tools/utils';\n\n@Pipe({\n name: 'emptyToDash',\n pure: true,\n})\nexport class EmptyToDashPipe implements PipeTransform {\n public transform<T>(value: T | null | undefined): T | string {\n return emptyToDash(value);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * @description Use to compare equality to any of items with provided value\n * @example\n *\n * Direct usage\n * ```ts\n * equalPipe.transform(100, 1, 10, 100) // => true\n * ```\n *\n * Template usage\n *\n * ```html\n * <div *ngIf=\"100 | equal:1:10:100\">Visible</div>\n * ```\n */\n@Pipe({\n name: 'equal',\n})\nexport class EqualPipe implements PipeTransform {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public transform(value: any, ...compares: any[]): boolean {\n return compares.reduce((equal: boolean, compare: boolean) => equal || value === compare, false);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * @description Use to access to the deep object state for comparison\n * @example\n * {a: {b: true}} | equalChain:'a':'b':true => true\n */\n@Pipe({\n name: 'equalChain',\n})\nexport class EqualChainPipe implements PipeTransform {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public transform(obj: object, ...args: any[]): boolean {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const compared: any = args.pop();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return Boolean(obj) && args.reduce((inner: any, arg: string) => inner[arg], obj) === compared;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * @description Use to compare not equality to all items with provided value\n * @example\n *\n * Direct usage\n * ```ts\n * notEqualPipe.transform(100, 1, 10, 100) // => false\n * ```\n *\n * Template usage\n *\n * ```html\n * <div *ngIf=\"100 | notEqual:1:10:100\">Invisible</div>\n * ```\n */\n@Pipe({\n name: 'notEqual',\n})\nexport class NotEqualPipe implements PipeTransform {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public transform(value: any, ...compares: any[]): boolean {\n return compares.reduce((notEqual: boolean, compare: boolean) => notEqual && value !== compare, true);\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n * @description Use to access to the deep object state for comparison\n * @example\n * {a: {b: true}} | equalChain:'a':'b':false => true\n */\n@Pipe({\n name: 'notEqualChain',\n})\nexport class NotEqualChainPipe implements PipeTransform {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public transform(obj: object, ...args: any[]): boolean {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const compared: any = args.pop();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n return Boolean(obj) && args.reduce((inner: any, arg: string) => inner[arg], obj) !== compared;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'ternary',\n})\nexport class TernaryPipe implements PipeTransform {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public transform(value: any, option1: any, option2: any): any {\n return Boolean(value) ? option1 : option2;\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\nimport { isEmail } from '@rt-tools/utils';\n\n@Pipe({\n name: 'isEmail',\n})\nexport class IsEmailPipe implements PipeTransform {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public transform(value: any): boolean {\n return isEmail(value);\n }\n}\n","import { Observable, Subject } from 'rxjs';\nimport { filter, map } from 'rxjs/operators';\n\nexport interface MessageBusEvent<T = string> {\n readonly type: T;\n}\n\nexport class MessageBus<M> {\n readonly #eventSource: Subject<MessageBusEvent<M>> = new Subject<MessageBusEvent<M>>();\n\n public emit(event: MessageBusEvent<M>): void {\n this.#eventSource.next(event);\n }\n\n public onEmit(): Observable<MessageBusEvent<M>> {\n return this.#eventSource.asObservable();\n }\n\n public ofType(eventType: M): Observable<MessageBusEvent<M>> {\n return this.onEmit().pipe(\n filter((event: MessageBusEvent<M>): event is MessageBusEvent<M> => event.type === eventType),\n map((event: MessageBusEvent<M>) => event)\n );\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { InjectionToken, inject } from '@angular/core';\n\nexport const NAVIGATOR: InjectionToken<Navigator> = new InjectionToken<Navigator>('An injection token for global navigator object', {\n factory: (): Navigator => {\n const { defaultView }: Document = inject(DOCUMENT);\n\n if (!defaultView || !defaultView?.navigator) {\n throw new Error('Navigator is not available');\n }\n\n return defaultView.navigator;\n },\n});\n","import { Injectable, inject } from '@angular/core';\n\nimport { Nullable } from '@rt-tools/utils';\n\nimport { NAVIGATOR } from '../tokens/navigator.token';\nimport { WINDOW } from '../tokens/window.token';\nimport { PlatformService } from './platform.service';\n\nexport namespace OSTypes {\n export const WINDOWS: string = 'Windows';\n export const MAC_OS: string = 'Mac OS';\n export const LINUX: string = 'Linux';\n export const ANDROID: string = 'Android';\n export const IOS: string = 'iOS';\n export const UNKNOWN: string = 'Unknown';\n}\n\n@Injectable()\nexport class DeviceDetectorService {\n readonly #windowRef: Window = inject(WINDOW);\n readonly #navigatorRef: Navigator = inject(NAVIGATOR);\n readonly #platformService: PlatformService = inject(PlatformService);\n\n public userAgent: Nullable<string> = null;\n\n constructor() {\n if (\n this.#platformService.isPlatformBrowser &&\n typeof this.#windowRef !== 'undefined' &&\n typeof this.#navigatorRef !== 'undefined' &&\n this.#navigatorRef?.userAgent\n ) {\n this.userAgent = this.#navigatorRef.userAgent;\n }\n }\n\n public isMobile(): boolean {\n return this.userAgent ? /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(this.userAgent) : false;\n }\n\n public isTablet(): boolean {\n return this.userAgent ? /iPad|Android|Tablet/i.test(this.userAgent) : false;\n }\n\n public isDesktop(): boolean {\n return !this.isMobile() && !this.isTablet();\n }\n\n public getOS(): string {\n let os: string;\n\n if (this.userAgent && /Windows/i.test(this.userAgent)) {\n os = OSTypes.WINDOWS;\n } else if (this.userAgent && /Macintosh|Mac OS/i.test(this.userAgent)) {\n os = OSTypes.MAC_OS;\n } else if (this.userAgent && /Linux/i.test(this.userAgent)) {\n os = OSTypes.LINUX;\n } else if (this.userAgent && /Android/i.test(this.userAgent)) {\n os = OSTypes.ANDROID;\n } else if (this.userAgent && /iOS/i.test(this.userAgent)) {\n os = OSTypes.IOS;\n } else {\n os = OSTypes.UNKNOWN;\n }\n\n return os;\n }\n}\n","import { IBreakpoints } from './breakpoints.model';\n\nexport class Breakpoints implements IBreakpoints {\n public readonly xl: string = '1920px';\n public readonly lg: string = '1280px';\n public readonly md: string = '960px';\n public readonly sm: string = '720px';\n public readonly xs: string = '600px';\n}\n","import { BreakpointObserver, BreakpointState } from '@angular/cdk/layout';\nimport { Injectable, Signal, inject, WritableSignal, signal, computed, Injector } from '@angular/core';\nimport { toObservable, toSignal } from '@angular/core/rxjs-interop';\n\nimport { distinctUntilChanged, map, switchMap } from 'rxjs/operators';\n\nimport { Nullable } from '@rt-tools/utils';\n\nimport { Breakpoints } from './breakpoints';\nimport { IBreakpoints } from './breakpoints.model';\n\n/**\n * A service that manages responsive design breakpoints using Angular's `BreakpointObserver`.\n * This service provides signals for different screen sizes and allows dynamic\n * breakpoint management.\n *\n * @Injectable\n */\n@Injectable()\nexport class BreakpointService {\n /**\n * Private instance of BreakpointObserver used to observe screen size changes.\n */\n readonly #breakpointObserver: BreakpointObserver = inject(BreakpointObserver);\n /**\n * Private instance of Injector.\n */\n readonly #injector: Injector = inject(Injector);\n\n /**\n * Instance of a lass containing the breakpoint values for different screen sizes.\n */\n readonly #breakpoints: WritableSignal<IBreakpoints> = signal(new Breakpoints());\n\n readonly #desktopQuery: Signal<string> = computed(() => `(min-width: ${this.#breakpoints().xl})`);\n readonly #smallDesktopQuery: Signal<string> = computed(() => `(min-width: ${this.#breakpoints().lg})`);\n readonly #tabletQuery: Signal<string> = computed(() => `(min-width: ${this.#breakpoints().md})`);\n readonly #smallTabletQuery: Signal<string> = computed(() => `(min-width: ${this.#breakpoints().sm})`);\n readonly #mobileQuery: Signal<string> = computed(() => `(max-width: ${this.decrementOnePixel(this.#breakpoints().xs)})`);\n\n public readonly isDesktop: Signal<Nullable<boolean>> = toSignal<Nullable<boolean>>(\n toObservable(this.#desktopQuery, { injector: this.#injector }).pipe(\n distinctUntilChanged(),\n switchMap((query: string) => this.#breakpointObserver.observe(query)),\n map(({ matches }: BreakpointState) => matches)\n )\n );\n\n public readonly isSmallDesktop: Signal<Nullable<boolean>> = toSignal<Nullable<boolean>>(\n toObservable(this.#smallDesktopQuery, { injector: this.#injector }).pipe(\n distinctUntilChanged(),\n switchMap((query: string) => this.#breakpointObserver.observe(query)),\n map(({ matches }: BreakpointState) => matches)\n )\n );\n\n public readonly isMobile: Signal<Nullable<boolean>> = toSignal<Nullable<boolean>>(\n toObservable(this.#mobileQuery, { injector: this.#injector }).pipe(\n distinctUntilChanged(),\n switchMap((query: string) => this.#breakpointObserver.observe(query)),\n map(({ matches }: BreakpointState) => matches)\n )\n );\n\n public readonly isTablet: Signal<Nullable<boolean>> = toSignal<Nullable<boolean>>(\n toObservable(this.#tabletQuery, { injector: this.#injector }).pipe(\n distinctUntilChanged(),\n switchMap((query: string) => this.#breakpointObserver.observe(query)),\n map(({ matches }: BreakpointState) => !matches)\n )\n );\n\n public readonly isSmallTablet: Signal<Nullable<boolean>> = toSignal<Nullable<boolean>>(\n toObservable(this.#smallTabletQuery, { injector: this.#injector }).pipe(\n distinctUntilChanged(),\n switchMap((query: string) => this.#breakpointObserver.observe(query)),\n map(({ matches }: BreakpointState) => matches)\n )\n );\n\n /**\n * Allows setting custom breakpoints for different screen sizes.\n *\n * @param breakpoints - The custom breakpoints to apply.\n */\n public setBreakpoints(breakpoints: IBreakpoints): void {\n this.#breakpoints.set(breakpoints);\n }\n\n /**\n * Helper function to decrement the pixel value by 1.\n * Used to exclude the exact pixel value in media queries.\n *\n * @usageNotes\n *\n * This function is useful for setting correct media queries.\n * E.g. for mobile devices: media query should be `(max-width: 599px)`,\n * and from `(min-width: 600px)` it should be considered as a tablet.\n *\n * @param value - The pixel value to decrement.\n * @returns The adjusted pixel value as a string.\n */\n public decrementOnePixel(value: string): string {\n return Number(value.split('px')[0]) - 1 + 'px';\n }\n}\n","import { AbstractControl, ValidatorFn } from '@angular/forms';\n\nexport function checkIsMatchingValues(sample: string): ValidatorFn {\n return (control: AbstractControl): { [key: string]: boolean } | null => {\n return sample && control.value && control.value.localeCompare(sample) === 0 ? null : { notEquivalent: true };\n };\n}\n","import { AbstractControl, ValidationErrors } from '@angular/forms';\n\nexport function arraysNotEmptyValidator(control: AbstractControl): ValidationErrors | null {\n if (control.value instanceof Object) {\n const arrays: unknown[][] = Object.values(control.value);\n const allArraysEmpty: boolean = arrays.every((array: unknown[]) => !array.length);\n return allArraysEmpty ? { allArraysEmpty: true } : null;\n } else if (Array.isArray(control.value)) {\n const array: unknown[] = control.value;\n return !array.length ? { arrayEmpty: true } : null;\n } else {\n return { invalidType: true };\n }\n}\n","import { AbstractControl, ValidationErrors } from '@angular/forms';\n\nimport { isEmail } from '@rt-tools/utils';\n\n/**\n * @description Reactive-forms validator over the framework-free `isEmail` predicate.\n *\n * Reports `{ email: true }` on a malformed address. An empty control passes, matching `isEmail` —\n * combine it with `Validators.required` where the field is mandatory.\n */\nexport function emailValidator(control: AbstractControl): ValidationErrors | null {\n return isEmail(control.value) ? null : { email: true };\n}\n","import { Provider } from '@angular/core';\n\nimport { BreakpointService } from './services/breakpoints.service';\nimport { PlatformService } from './services/platform.service';\n\n/**\n * Returns a set of dependency injection providers for utility services.\n *\n * @usageNotes\n *\n * This function provides utility services that are commonly used across\n * an Angular application. Specifically, it provides the `BreakpointService`\n * for managing responsive design breakpoints and the `PlatformService` for\n * detecting the platform on which the application is running (e.g., browser or server).\n *\n * ```typescript\n * bootstrapApplication(RootComponent, {\n * providers: [\n * provideRtUtils()\n * ]\n * });\n * ```\n *\n * @publicApi\n */\nexport function provideRtUtils(): Provider[] {\n return [BreakpointService, PlatformService];\n}\n","import { IBemConfig } from './bem.types';\n\nexport const BEM_MODULE_CONFIG: IBemConfig = {\n separators: {\n el: '__',\n mod: '--',\n val: '--',\n },\n ignoreValues: false,\n modCase: 'kebab',\n};\n","import { ElementRef, Renderer2 } from '@angular/core';\n\nimport { BEM_MODULE_CONFIG } from './bem.const';\nimport { IModsObject } from './bem.types';\n\nexport function modNameHandler(str: string): string {\n switch (BEM_MODULE_CONFIG.modCase) {\n case 'kebab':\n return str\n ? str\n .replace(/[A-Z]/g, function (s: string) {\n return '-' + s.toLowerCase();\n })\n .replace(/$-/, '')\n : '';\n case 'snake':\n return str\n ? str\n .replace(/[A-Z]/g, function (s: string) {\n return '_' + s.toLowerCase();\n })\n .replace(/$-/, '')\n : '';\n default:\n return str;\n }\n}\n\nexport function generateClass(blockName: string, elemName?: string, modName?: string, modValue?: unknown): string {\n if (BEM_MODULE_CONFIG.ignoreValues) {\n modValue = !!modValue;\n }\n\n if (typeof modValue !== 'string' && typeof modValue !== 'boolean') {\n modValue = !!modValue;\n }\n\n let cls: string = blockName;\n\n if (elemName) {\n cls += BEM_MODULE_CONFIG.separators.el + elemName;\n }\n\n if (modName) {\n modName = modNameHandler(modName);\n cls += BEM_MODULE_CONFIG.separators.mod + modName;\n if (typeof modValue !== 'boolean' && modValue != null) {\n cls += BEM_MODULE_CONFIG.separators.val + modValue;\n }\n }\n\n return cls;\n}\n\nexport function parseMods(mods?: string | string[] | (string | false)[] | IModsObject): IModsObject {\n if (typeof mods === 'string') {\n mods = mods.split(/\\s+/);\n }\n\n if (Array.isArray(mods)) {\n const modsObj: IModsObject = {};\n\n mods.forEach((key: string | false) => {\n if (key) {\n modsObj[key] = true;\n }\n });\n mods = modsObj;\n } else if (typeof mods !== 'object') {\n return {};\n }\n\n return mods;\n}\n\nexport function setMods(\n blockName: string,\n elemName: string,\n mods: IModsObject,\n oldMods: IModsObject,\n element: ElementRef,\n renderer: Renderer2\n): void {\n Object.keys(mods).forEach((key: string) => {\n if (oldMods[key]) {\n if (mods[key] === oldMods[key]) {\n return;\n }\n\n renderer.removeClass(element.nativeElement, generateClass(blockName, elemName, key, oldMods[key]));\n }\n\n if (mods[key]) {\n renderer.addClass(element.nativeElement, generateClass(blockName, elemName, key, mods[key]));\n }\n });\n\n Object.keys(oldMods).forEach((key: string) => {\n if (!(key in mods) && oldMods[key]) {\n renderer.removeClass(element.nativeElement, generateClass(blockName, elemName, key, oldMods[key]));\n }\n });\n}\n","import { Attribute, Directive, ElementRef, Input, OnChanges, Optional, Renderer2 } from '@angular/core';\n\nimport { IModsObject } from './bem.types';\nimport { generateClass, parseMods, setMods } from './bem.utils';\n\n@Directive({\n selector: '[rtBlock]',\n})\nexport class BlockDirective implements OnChanges {\n @Input() public rtMod?: string | string[] | (string | false)[] | IModsObject;\n #mods: IModsObject = {};\n #modSerialized: string = '';\n\n constructor(\n public readonly element: ElementRef,\n public readonly renderer: Renderer2,\n @Attribute('rtBlock') public readonly name: string,\n @Optional() @Attribute('rtElem') private readonly elem: string\n ) {\n if (!elem && !(element.nativeElement instanceof Comment)) {\n renderer.addClass(element.nativeElement, generateClass(name));\n }\n }\n\n public ngOnChanges(): void {\n if (JSON.stringify(this.rtMod) !== this.#modSerialized && !this.elem) {\n this.#modSerialized = JSON.stringify(this.rtMod);\n\n let mods: string | string[] | (string | false)[] | IModsObject | undefined = this.rtMod;\n\n const { renderer, element, name } = this;\n\n mods = parseMods(mods);\n\n if (!(element.nativeElement instanceof Comment)) {\n setMods(name, '', mods, this.#mods || {}, element, renderer);\n }\n\n this.#mods = this.#mods === mods ? Object.assign({}, mods) : mods;\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'concatClasses',\n})\nexport class ConcatClassesPipe implements PipeTransform {\n public transform<C extends string | boolean | null | undefined>(classes: (C | C[])[]): string {\n // eslint-disable-next-line\n const validClassList = classes.flat().filter((className) => typeof className === 'string' && !!className.trim());\n return validClassList.join(' ');\n }\n}\n","import { Attribute, Directive, ElementRef, Input, OnChanges, Renderer2 } from '@angular/core';\n\nimport { IModsObject } from './bem.types';\nimport { generateClass, parseMods, setMods } from './bem.utils';\nimport { BlockDirective } from './block.directive';\n\n@Directive({\n selector: '[rtElem]',\n})\nexport class ElemDirective implements OnChanges {\n @Input() public rtMod?: string | string[] | (string | false)[] | IModsObject;\n public blockName: string;\n #mods: IModsObject = {};\n #modSerialized: string = '';\n\n constructor(\n public readonly element: ElementRef,\n public readonly renderer: Renderer2,\n @Attribute('rtElem') public readonly name: string,\n private readonly rtBlock: BlockDirective\n ) {\n this.blockName = rtBlock.name;\n\n renderer.addClass(element.nativeElement, generateClass(rtBlock.name, name));\n }\n\n public ngOnChanges(): void {\n if (JSON.stringify(this.rtMod) !== this.#modSerialized) {\n this.#modSerialized = JSON.stringify(this.rtMod);\n\n let mods: string | string[] | (string | false)[] | IModsObject | undefined = this.rtMod;\n\n const { renderer, element, blockName, name } = this;\n\n mods = parseMods(mods);\n\n setMods(blockName, name, mods, this.#mods || {}, element, renderer);\n\n this.#mods = this.#mods === mods ? Object.assign({}, mods) : mods;\n }\n }\n}\n","import { Directive } from '@angular/core';\n\n@Directive({\n selector: '[rtMod]',\n})\nexport class ModDirective {}\n","export enum STORAGE_TYPES_ENUM {\n LOCAL = 'local',\n SESSION = 'session',\n IN_MEMORY = 'inMemory',\n CUSTOM = 'custom',\n}\n\nexport type StorageType = STORAGE_TYPES_ENUM.LOCAL | STORAGE_TYPES_ENUM.SESSION | STORAGE_TYPES_ENUM.IN_MEMORY | STORAGE_TYPES_ENUM.CUSTOM;\n","import { Injectable } from '@angular/core';\n\n/**\n * A service that implements the `Storage` interface using an in-memory map.\n * This service provides a fallback storage solution when `localStorage`\n * or `sessionStorage` is not available, such as in server-side rendering (SSR) scenarios.\n *\n * @Injectable\n */\n@Injectable()\nexport class InMemoryStorageService implements Storage {\n /**\n * Private in-memory storage map used to store key-value pairs.\n * The keys are strings, the values are strings.\n * The map is private and cannot be accessed directly.\n * Instead, the public methods of the service should be used to interact with the storage.\n * The map is initialized as an empty map.\n *\n * @type {Map<string, string>}\n * @private\n * @internal\n * @readonly\n */\n readonly #storage: Map<string, string> = new Map<string, string>();\n\n /**\n * Returns the number of key-value pairs currently stored.\n *\n * @returns the number of items in storage\n * @public\n */\n public get length(): number {\n return this.#storage.size;\n }\n\n /**\n * Retrieves the value associated with the given key.\n *\n * @param key - The name of the key to retrieve the value for\n * @returns the value associated with the key, or `null` if the key does not exist\n * @public\n * @returns string | null\n */\n public getItem(key: string): string | null {\n return this.#storage.get(key) || null;\n }\n\n /**\n * Adds or updates the key-value pair in the storage.\n *\n * @param key - The name of the key to create or update\n * @param data - The value to associate with the key\n * @public\n * @returns void\n */\n public setItem(key: string, data: string): void {\n this.#storage.set(key, data);\n }\n\n /**\n * Retrieves the key at the specified index.\n *\n * @param index - The index of the key to retrieve\n * @returns the key at the specified index, or `null` if the index is out of bounds\n * @public\n * @returns string | null\n */\n public key(index: number): string | null {\n return Array.from(this.#storage.keys())[index] || null;\n }\n\n /**\n * Removes the key-value pair associated with the given key.\n *\n * @param key - The name of the key to remove\n * @public\n * @returns void\n */\n public removeItem(key: string): void {\n this.#storage.delete(key);\n }\n\n /**\n * Clears all key-value pairs from the storage.\n *\n * @public\n * @returns void\n */\n public clear(): void {\n this.#storage.clear();\n }\n}\n","import { Nullable } from '@rt-tools/utils';\nimport { IStorageConverter } from './interfaces/storage-converter';\n\nexport class JsonConverter implements IStorageConverter {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public convertTo(data: Nullable<any>): string {\n let parsedData: string;\n\n try {\n parsedData = JSON.stringify(data);\n } catch (e: unknown) {\n // eslint-disable-next-line no-console\n console.error(e);\n parsedData = 'null';\n }\n\n return parsedData;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public convertFrom<T>(data: any): Nullable<T> {\n if (typeof data === 'string') {\n try {\n return JSON.parse(data) as T;\n } catch (e: unknown) {\n // eslint-disable-next-line no-console\n console.error(e);\n return null;\n }\n }\n\n return null;\n }\n}\n","import { inject } from '@angular/core';\n\nimport { PlatformService } from '../services';\nimport { Nullable } from '@rt-tools/utils';\nimport { InMemoryStorageService } from './in-memory-storage.service';\n\n/**\n * Factory for creating or returning `localStorage`.\n * Returns `localStorage` global object if the application is running in a browser,\n * otherwise returns null.\n *\n * @returns localStorage or null\n */\nexport function localStorageFactory(): Nullable<Storage> {\n return inject(PlatformService).isPlatformBrowser ? localStorage : null;\n}\n\n/**\n * Factory for creating or returning `sessionStorage`.\n * Returns `sessionStorage` global object if the application is running in a browser,\n * otherwise returns null.\n *\n * @returns sessionStorage or null\n */\nexport function sessionStorageFactory(): Nullable<Storage> {\n return inject(PlatformService).isPlatformBrowser ? sessionStorage : null;\n}\n\n/**\n * Factory for creating `InMemoryStorageService`.\n * Returns a new instance of InMemoryStorageService.\n *\n * @returns a new instance of InMemoryStorageService\n */\nexport function inMemoryStorageFactory(): Storage {\n return new InMemoryStorageService();\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const CUSTOM_STORAGE: InjectionToken<Storage> = new InjectionToken<Storage>('CUSTOM_STORAGE');\n","import { InjectionToken } from '@angular/core';\n\nexport const IN_MEMORY_STORAGE: InjectionToken<Storage> = new InjectionToken<Storage>('IN_MEMORY_STORAGE');\n","import { InjectionToken } from '@angular/core';\n\nexport const LOCAL_STORAGE: InjectionToken<Storage> = new InjectionToken<Storage>('LOCAL_STORAGE');\n","import { InjectionToken } from '@angular/core';\n\nexport const SESSION_STORAGE: InjectionToken<Storage> = new InjectionToken<Storage>('SESSION_STORAGE');\n","import { inject, Injectable } from '@angular/core';\n\nimport { PlatformService } from '../services';\nimport { Nullable } from '@rt-tools/utils';\nimport { STORAGE_TYPES_ENUM, StorageType } from './enums/storage-types.enum';\nimport { IStorageConfig } from './interfaces/storage-config';\nimport { JsonConverter } from './json-converter';\nimport { CUSTOM_STORAGE } from './tokens/custom-storage.token';\nimport { IN_MEMORY_STORAGE } from './tokens/in-memory-storage.token';\nimport { LOCAL_STORAGE } from './tokens/local-storage.token';\nimport { SESSION_STORAGE } from './tokens/session-storage.token';\n\nconst defaultStorageConfig: IStorageConfig = {\n ctx: STORAGE_TYPES_ENUM.LOCAL,\n storageRef: null,\n converter: new JsonConverter(),\n};\n\n/**\n * A service for managing data storage across different storage types,\n * including `localStorage`, `sessionStorage`, and an in-memory storage fallback.\n * The service supports custom storage types and data conversion through configurable converters.\n *\n * @Injectable\n */\n@Injectable()\nexport class StorageService {\n readonly #platformService: PlatformService = inject(PlatformService);\n readonly #localStorageRef: Storage = inject(LOCAL_STORAGE);\n readonly #sessionStorageRef: Storage = inject(SESSION_STORAGE);\n readonly #inMemoryStorageRef: Storage = inject(IN_MEMORY_STORAGE);\n readonly #customStorageRef: Nullable<Storage> = inject(CUSTOM_STORAGE, { optional: true });\n\n /**\n * Retrieves an item from the specified storage context.\n *\n * @param key - The key of the item to retrieve.\n * @param config - Optional configuration for the storage context and data conversion.\n * @returns The retrieved item, converted from storage if a converter is provided, or `null` if the item does not exist.\n */\n public getItem<T>(key: string, config?: Partial<IStorageConfig>): Nullable<T> {\n const fullConfig: IStorageConfig = { ...defaultStorageConfig, ...config };\n const item: Nullable<T> = this.#storage(fullConfig.ctx)?.getItem(key) as T;\n return fullConfig.converter?.convertFrom(item) ?? item ?? null;\n }\n\n /**\n * Stores an item in the specified storage context.\n *\n * @param key - The key to associate with the stored item.\n * @param data - The data to store, which will be converted if a converter is provided.\n * @param config - Optional configuration for the storage context and data conversion.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n public setItem(key: string, data: any, config?: Partial<IStorageConfig>): void {\n const fullConfig: IStorageConfig = { ...defaultStorageConfig, ...config };\n const parsedValue: string = fullConfig.converter?.convertTo(data) ?? data;\n this.#storage(fullConfig.ctx)?.setItem(key, parsedValue);\n }\n\n /**\n * Checks if a given key exists in the specified storage context.\n *\n * @param key - The key to check for.\n * @param ctx - The storage context to search in (local, session, or in-memory).\n * @returns `true` if the key exists, `false` otherwise.\n */\n public hasKey(key: string, ctx: Nullable<StorageType> = defaultStorageConfig.ctx): boolean {\n return Object.prototype.hasOwnProperty.call(this.#storage(ctx), key);\n }\n\n /**\n * Executes callback functions based on whether a key exists in the specified storage context.\n *\n * @param key - The key to check for.\n * @param onHas - The callback to execute if the key exists.\n * @param onHasNot - The optional callback to execute if the key does not exist.\n * @param config - Optional configuration for the storage context and data conversion.\n */\n public onHasKey<T>(key: string, onHas: (value: Nullable<T>) => void, onHasNot?: () => void, config?: Partial<IStorageConfig>): void {\n const fullConfig: IStorageConfig = { ...defaultStorageConfig, ...config };\n\n if (this.hasKey(key, fullConfig.ctx)) {\n onHas(this.getItem<T>(key, fullConfig));\n } else if (onHasNot !== void 0) {\n onHasNot();\n }\n }\n\n /**\n * Removes an item from the specified storage context.\n *\n * @param key - The key of the item to remove.\n * @param ctx - The storage context from which to remove the item.\n */\n public removeItem(key: string, ctx: Nullable<StorageType> = defaultStorageConfig.ctx): void {\n this.#storage(ctx)?.removeItem(key);\n }\n\n /**\n * Clears all items from the specified storage context.\n *\n * @param ctx - The storage context to clear.\n */\n public clear(ctx: Nullable<StorageType> = defaultStorageConfig.ctx): void {\n this.#storage(ctx)?.clear();\n }\n\n /**\n * Returns the appropriate storage reference based on the storage context and platform.\n *\n * @param ctx - The storage context to use (local, session, custom, or in-memory).\n * @returns The corresponding `Storage` object, or `null` if not available.\n */\n #storage(ctx: Nullable<StorageType>): Nullable<Storage> {\n if (this.#platformService.isPlatformBrowser) {\n switch (ctx) {\n case 'local':\n return this.#localStorageRef;\n\n case 'session':\n return this.#sessionStorageRef;\n\n case 'custom':\n return this.#customStorageRef;\n }\n }\n\n /**\n * Fallback to in-memory storage when the platform is not a browser (e.g., SSR).\n */\n return this.#inMemoryStorageRef;\n }\n}\n","import { Provider } from '@angular/core';\n\nimport { InMemoryStorageService } from './in-memory-storage.service';\nimport { inMemoryStorageFactory, localStorageFactory, sessionStorageFactory } from './storage.factory';\nimport { StorageService } from './storage.service';\nimport { IN_MEMORY_STORAGE } from './tokens/in-memory-storage.token';\nimport { LOCAL_STORAGE } from './tokens/local-storage.token';\nimport { SESSION_STORAGE } from './tokens/session-storage.token';\n\n/**\n * Returns the set of dependency-injection providers\n * required to setup storages in an application.\n *\n * @usageNotes\n *\n * This function sets up the essential storage services needed for\n * working with `localStorage`, `sessionStorage`, and an in-memory storage solution.\n * It includes providers for each type of storage, ensuring that the appropriate\n * storage service is injected based on the platform or specific use case.\n *\n * The function is particularly useful in scenarios where the application may be\n * running on the server-side (SSR). In such cases, instead of using `localStorage`\n * and `sessionStorage`, which are only available in the browser, the `InMemoryStorageService`\n * can be used as a fallback, ensuring that the application still functions correctly.\n *\n * ```typescript\n * bootstrapApplication(RootComponent, {\n * providers: [\n * provideRtStorage()\n * ]\n * });\n * ```\n *\n * @publicApi\n */\nexport function provideRtStorage(): Provider[] {\n return [\n InMemoryStorageService,\n {\n provide: LOCAL_STORAGE,\n useFactory: localStorageFactory,\n },\n {\n provide: SESSION_STORAGE,\n useFactory: sessionStorageFactory,\n },\n {\n provide: IN_MEMORY_STORAGE,\n useFactory: inMemoryStorageFactory,\n },\n StorageService,\n ];\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Observable, Observer, Subscriber, take } from 'rxjs';\n\nimport { WINDOW } from '../tokens';\nimport { IIDBStorageServiceInterface } from './interfaces/idb-storage-service.interface';\n\n@Injectable()\nexport class IDBStorageService<ENTITY_TYPE> implements IIDBStorageServiceInterface<ENTITY_TYPE> {\n readonly #windowRef: Window = inject(WINDOW);\n\n #context: Observable<IDBDatabase>;\n\n constructor() {\n this.#context = new Observable<IDBDatabase>((observer: Observer<IDBDatabase>) => {\n if ('indexedDB' in this.#windowRef && 'open' in this.#windowRef.indexedDB) {\n const openRequest: IDBOpenDBRequest = this.#windowRef.indexedDB.open('use-idb', 1);\n openRequest.onerror = (): void => observer.error(openRequest.error);\n openRequest.onsuccess = (): void => observer.next(openRequest.result);\n openRequest.onupgradeneeded = (): IDBObjectStore => openRequest.result.createObjectStore('idb');\n } else {\n observer.error('IndexedDB not supported');\n }\n });\n }\n\n public get(key: string): Observable<ENTITY_TYPE | undefined> {\n return new Observable<ENTITY_TYPE | undefined>((observer: Subscriber<ENTITY_TYPE | undefined>) => {\n this.#context.pipe(take(1)).subscribe((db: IDBDatabase) => {\n const transaction: IDBTransaction = db.transaction('idb', 'readonly');\n const store: IDBObjectStore = transaction.objectStore('idb');\n const request: IDBRequest<ENTITY_TYPE> = store.get(key);\n\n request.onsuccess = (): void => observer.next(request.result);\n request.onerror = (): void => observer.error(request.error);\n });\n });\n }\n\n public set(key: string, value: ENTITY_TYPE): Observable<void> {\n return new Observable<void>((observer: Subscriber<void>) => {\n this.#context.pipe(take(1)).subscribe((db: IDBDatabase) => {\n const transaction: IDBTransaction = db.transaction('idb', 'readwrite');\n const store: IDBObjectStore = transaction.objectStore('idb');\n const request: IDBRequest<IDBValidKey> = store.put(value, key);\n\n request.onsuccess = (): void => observer.next();\n request.onerror = (): void => observer.error(request.error);\n });\n });\n }\n\n public remove(key: string): Observable<void> {\n return new Observable<void>((observer: Subscriber<void>) => {\n this.#context.pipe(take(1)).subscribe((db: IDBDatabase) => {\n const transaction: IDBTransaction = db.transaction('idb', 'readwrite');\n const store: IDBObjectStore = transaction.objectStore('idb');\n const request: IDBRequest<undefined> = store.delete(key);\n\n request.onsuccess = (): void => observer.next();\n request.onerror = (): void => observer.error(request.error);\n });\n });\n }\n}\n","import { IDBStorageService } from './idb-storage-service';\n\n/**\n * Factory for creating `IDBStorageService`.\n * Returns a new instance of IDBStorageService.\n *\n * @returns a new instance of IDBStorageService\n */\nexport function iDBStorageFactory(): IDBStorageService<Record<string, unknown>> {\n return new IDBStorageService();\n}\n","import { InjectionToken } from '@angular/core';\n\nimport { IDBStorageService } from '../idb-storage-service';\n\n/**\n * Injection token for IDBStorageService.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const IDB_STORAGE_SERVICE_TOKEN: InjectionToken<IDBStorageService<any>> = new InjectionToken<IDBStorageService<any>>(\n 'IDB_STORAGE_SERVICE_TOKEN'\n);\n","import { Provider } from '@angular/core';\n\nimport { iDBStorageFactory } from './idb-storage.factory';\nimport { IDBStorageService } from './idb-storage-service';\nimport { IDB_STORAGE_SERVICE_TOKEN } from './token/idb-storage.token';\n\n/**\n * Returns the set of dependency-injection providers\n * required to set up storages in an application.\n *\n * @usageNotes\n *\n * This function sets up the essential storage services needed for\n * working with `idb storage` solution.\n * It includes providers for each type of storage, ensuring that the appropriate\n * storage service is injected based on the platform or specific use case.\n *\n * ```typescript\n * bootstrapApplication(RootComponent, {\n * providers: [\n * provideRtIDBStorage()\n * ]\n * });\n * ```\n *\n * @publicApi\n */\nexport function provideRtIDBStorage(): Provider[] {\n return [\n {\n provide: IDB_STORAGE_SERVICE_TOKEN,\n useFactory: iDBStorageFactory,\n },\n IDBStorageService,\n ];\n}\n","// constants\nexport * from './lib/const';\n\n// directives\nexport * from './lib/directives';\n\n// enums\nexport * from './lib/enums';\n\n// functions\nexport * from './lib/functions';\n\n// pipes\nexport * from './lib/pipes';\n\n// services\nexport * from './lib/services';\n\n// validators\nexport * from './lib/validators';\n\n// providers\nexport * from './lib/providers';\n\n// tokens\nexport * from './lib/tokens';\n\n// types\nexport * from './lib/types';\n\n// bem\nexport * from './lib/bem';\n\n// storage\nexport * from './lib/storage';\n\n// idb-storage\nexport * from './lib/idb-storage';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.BlockDirective","take"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rt-tools/core",
3
- "version": "0.0.6",
3
+ "version": "0.1.0",
4
4
  "description": "Core utilities for Angular applications - MessageBus, PlatformService, WINDOW token, and helper functions",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Yauheni Krumin",
@@ -17,9 +17,18 @@
17
17
  "MessageBus",
18
18
  "Signals"
19
19
  ],
20
+ "dependencies": {
21
+ "@rt-tools/utils": "^0.1.1",
22
+ "tslib": "^2.3.0"
23
+ },
20
24
  "peerDependencies": {
25
+ "@rt-tools/utils": "^0.1.1",
26
+ "@angular/cdk": "^22.0.0",
21
27
  "@angular/common": "^22.0.0",
22
28
  "@angular/core": "^22.0.0",
29
+ "@angular/forms": "^22.0.0",
30
+ "@angular/platform-browser": "^22.0.0",
31
+ "@angular/router": "^22.0.0",
23
32
  "rxjs": "^7.8.0"
24
33
  },
25
34
  "sideEffects": false,
@@ -35,8 +44,5 @@
35
44
  "types": "./types/rt-tools-core.d.ts",
36
45
  "default": "./fesm2022/rt-tools-core.mjs"
37
46
  }
38
- },
39
- "dependencies": {
40
- "tslib": "^2.3.0"
41
47
  }
42
48
  }
Binary file