{"version":3,"file":"wacom.mjs","sources":["../../../projects/wacom/src/core/core.prototype.ts","../../../projects/wacom/src/core/core.service.ts","../../../projects/wacom/src/crud/crud.component.ts","../../../projects/wacom/src/services/emitter.service.ts","../../../projects/wacom/src/interfaces/config.interface.ts","../../../projects/wacom/src/interfaces/http.interface.ts","../../../projects/wacom/src/services/http.service.ts","../../../projects/wacom/src/interfaces/network.interface.ts","../../../projects/wacom/src/services/network.service.ts","../../../projects/wacom/src/store/store.service.ts","../../../projects/wacom/src/crud/crud.service.ts","../../../projects/wacom/src/theme/theme.service.ts","../../../projects/wacom/src/meta/meta.const.ts","../../../projects/wacom/src/meta/meta.service.ts","../../../projects/wacom/src/meta/meta.guard.ts","../../../projects/wacom/src/translate/translate.service.ts","../../../projects/wacom/src/translate/provide-translate.ts","../../../projects/wacom/src/translate/translate.directive.ts","../../../projects/wacom/src/translate/translate.pipe.ts","../../../projects/wacom/src/directives/click-outside.directive.ts","../../../projects/wacom/src/directives/manual-disabled.directive.ts","../../../projects/wacom/src/directives/manual-name.directive.ts","../../../projects/wacom/src/directives/manual-readonly.directive.ts","../../../projects/wacom/src/directives/manual-type.directive.ts","../../../projects/wacom/src/pipes/arr.pipe.ts","../../../projects/wacom/src/pipes/mongodate.pipe.ts","../../../projects/wacom/src/pipes/number.pipe.ts","../../../projects/wacom/src/pipes/pagination.pipe.ts","../../../projects/wacom/src/pipes/safe.pipe.ts","../../../projects/wacom/src/pipes/search.pipe.ts","../../../projects/wacom/src/pipes/splice.pipe.ts","../../../projects/wacom/src/pipes/split.pipe.ts","../../../projects/wacom/src/services/dom.service.ts","../../../projects/wacom/src/services/rtc.service.ts","../../../projects/wacom/src/services/socket.service.ts","../../../projects/wacom/src/services/time.service.ts","../../../projects/wacom/src/services/util.service.ts","../../../projects/wacom/src/provide-wacom.ts","../../../projects/wacom/src/wacom.module.ts","../../../projects/wacom/public-api.ts","../../../projects/wacom/wacom.ts"],"sourcesContent":["export {};\r\n\r\n// Add capitalize method to String prototype if it doesn't already exist\r\nif (!String.prototype.capitalize) {\r\n\tString.prototype.capitalize = function (): string {\r\n\t\tif (this.length > 0) {\r\n\t\t\treturn this.charAt(0).toUpperCase() + this.slice(1).toLowerCase();\r\n\t\t}\r\n\t\treturn '';\r\n\t};\r\n}\r\n\r\n// Extend the String interface to include the new method\r\ndeclare global {\r\n\tinterface String {\r\n\t\tcapitalize(): string;\r\n\t}\r\n}\r\n","// Core utilities and helpers for the Wacom app\r\nimport { isPlatformBrowser } from '@angular/common';\r\nimport {\r\n\tDestroyRef,\r\n\tInjectable,\r\n\tPLATFORM_ID,\r\n\tSignal,\r\n\tWritableSignal,\r\n\tcomputed,\r\n\tinject,\r\n\tsignal,\r\n} from '@angular/core';\r\nimport { Viewport } from './core.type';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root',\r\n})\r\nexport class CoreService {\r\n\tprivate readonly _platformId = inject(PLATFORM_ID);\r\n\tprivate readonly _isBrowser = isPlatformBrowser(this._platformId);\r\n\tprivate readonly _destroyRef = inject(DestroyRef);\r\n\r\n\tdeviceID = '';\r\n\r\n\tconstructor() {\r\n\t\tif (this._isBrowser) {\r\n\t\t\tconst stored = localStorage.getItem('deviceID');\r\n\t\t\tthis.deviceID =\r\n\t\t\t\tstored ||\r\n\t\t\t\t(typeof crypto?.randomUUID === 'function' ? crypto.randomUUID() : this.UUID());\r\n\r\n\t\t\tlocalStorage.setItem('deviceID', this.deviceID);\r\n\r\n\t\t\tthis.detectDevice();\r\n\t\t\tthis.detectViewport();\r\n\t\t} else {\r\n\t\t\tthis.deviceID = this.UUID();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Generates a UUID (Universally Unique Identifier) version 4.\r\n\t *\r\n\t * This implementation uses `Math.random()` to generate random values,\r\n\t * making it suitable for general-purpose identifiers, but **not** for\r\n\t * cryptographic or security-sensitive use cases.\r\n\t *\r\n\t * The format follows the UUID v4 standard: `xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx`\r\n\t * where:\r\n\t * - `x` is a random hexadecimal digit (0–f)\r\n\t * - `4` indicates UUID version 4\r\n\t * - `y` is one of 8, 9, A, or B\r\n\t *\r\n\t * Example: `f47ac10b-58cc-4372-a567-0e02b2c3d479`\r\n\t *\r\n\t * @returns A string containing a UUID v4.\r\n\t */\r\n\tUUID(): string {\r\n\t\treturn 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c: string) => {\r\n\t\t\tconst r = (Math.random() * 16) | 0;\r\n\t\t\tconst v = c === 'x' ? r : (r & 0x3) | 0x8;\r\n\t\t\treturn v.toString(16);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Converts an object to an array. Optionally holds keys instead of values.\r\n\t *\r\n\t * @param {any} obj - The object to be converted.\r\n\t * @param {boolean} [holder=false] - If true, the keys will be held in the array; otherwise, the values will be held.\r\n\t * @returns {any[]} The resulting array.\r\n\t */\r\n\tota(obj: any, holder: boolean = false): any[] {\r\n\t\tif (Array.isArray(obj)) return obj;\r\n\t\tif (typeof obj !== 'object' || obj === null) return [];\r\n\t\tconst arr = [];\r\n\t\tfor (const each in obj) {\r\n\t\t\tif (\r\n\t\t\t\tobj.hasOwnProperty(each) &&\r\n\t\t\t\t(obj[each] || typeof obj[each] === 'number' || typeof obj[each] === 'boolean')\r\n\t\t\t) {\r\n\t\t\t\tif (holder) {\r\n\t\t\t\t\tarr.push(each);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tarr.push(obj[each]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn arr;\r\n\t}\r\n\r\n\t/**\r\n\t * Removes elements from `fromArray` that are present in `removeArray` based on a comparison field.\r\n\t *\r\n\t * @param {any[]} removeArray - The array of elements to remove.\r\n\t * @param {any[]} fromArray - The array from which to remove elements.\r\n\t * @param {string} [compareField='_id'] - The field to use for comparison.\r\n\t * @returns {any[]} The modified `fromArray` with elements removed.\r\n\t */\r\n\tsplice(removeArray: any[], fromArray: any[], compareField: string = '_id'): any[] {\r\n\t\tif (!Array.isArray(removeArray) || !Array.isArray(fromArray)) {\r\n\t\t\treturn fromArray;\r\n\t\t}\r\n\r\n\t\tconst removeSet = new Set(removeArray.map(item => item[compareField]));\r\n\t\treturn fromArray.filter(item => !removeSet.has(item[compareField]));\r\n\t}\r\n\r\n\t/**\r\n\t * Unites multiple _id values into a single unique _id.\r\n\t * The resulting _id is unique regardless of the order of the input _id values.\r\n\t *\r\n\t * @param {...string[]} args - The _id values to be united.\r\n\t * @returns {string} The unique combined _id.\r\n\t */\r\n\tids2id(...args: string[]): string {\r\n\t\targs.sort((a, b) => {\r\n\t\t\tif (Number(a.toString().substring(0, 8)) > Number(b.toString().substring(0, 8))) {\r\n\t\t\t\treturn 1;\r\n\t\t\t}\r\n\t\t\treturn -1;\r\n\t\t});\r\n\r\n\t\treturn args.join();\r\n\t}\r\n\r\n\t// After While\r\n\tprivate _afterWhile: Record<string, number> = {};\r\n\t/**\r\n\t * Delays the execution of a callback function for a specified amount of time.\r\n\t * If called again within that time, the timer resets.\r\n\t *\r\n\t * @param {string | object | (() => void)} doc - A unique identifier for the timer, an object to host the timer, or the callback function.\r\n\t * @param {() => void} [cb] - The callback function to execute after the delay.\r\n\t * @param {number} [time=1000] - The delay time in milliseconds.\r\n\t */\r\n\tafterWhile(doc: string | object | (() => void), cb?: () => void, time: number = 1000): void {\r\n\t\tif (typeof doc === 'function') {\r\n\t\t\tcb = doc as () => void;\r\n\t\t\tdoc = 'common';\r\n\t\t}\r\n\r\n\t\tif (typeof cb === 'function' && typeof time === 'number') {\r\n\t\t\tif (typeof doc === 'string') {\r\n\t\t\t\tclearTimeout(this._afterWhile[doc]);\r\n\t\t\t\tthis._afterWhile[doc] = setTimeout(cb, time);\r\n\t\t\t} else if (typeof doc === 'object') {\r\n\t\t\t\tclearTimeout((doc as { __afterWhile: number }).__afterWhile);\r\n\t\t\t\t(doc as { __afterWhile: number }).__afterWhile = setTimeout(cb, time);\r\n\t\t\t} else {\r\n\t\t\t\tconsole.warn('badly configured after while');\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Recursively copies properties from one object to another.\r\n\t * Handles nested objects, arrays, and Date instances appropriately.\r\n\t *\r\n\t * @param from - The source object from which properties are copied.\r\n\t * @param to - The target object to which properties are copied.\r\n\t */\r\n\tcopy(from: any, to: any) {\r\n\t\tfor (const each in from) {\r\n\t\t\tif (\r\n\t\t\t\ttypeof from[each] !== 'object' ||\r\n\t\t\t\tfrom[each] instanceof Date ||\r\n\t\t\t\tArray.isArray(from[each]) ||\r\n\t\t\t\tfrom[each] === null\r\n\t\t\t) {\r\n\t\t\t\tto[each] = from[each];\r\n\t\t\t} else {\r\n\t\t\t\tif (\r\n\t\t\t\t\ttypeof to[each] !== 'object' ||\r\n\t\t\t\t\tto[each] instanceof Date ||\r\n\t\t\t\t\tArray.isArray(to[each]) ||\r\n\t\t\t\t\tto[each] === null\r\n\t\t\t\t) {\r\n\t\t\t\t\tto[each] = {};\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.copy(from[each], to[each]);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// Device management\r\n\tdevice = '';\r\n\t/**\r\n\t * Detects the device type based on the user agent.\r\n\t */\r\n\tdetectDevice(): void {\r\n\t\tif (!this._isBrowser) return;\r\n\r\n\t\tconst userAgent = navigator.userAgent || navigator.vendor || (window as any).opera;\r\n\t\tif (/windows phone/i.test(userAgent)) {\r\n\t\t\tthis.device = 'Windows Phone';\r\n\t\t} else if (/android/i.test(userAgent)) {\r\n\t\t\tthis.device = 'Android';\r\n\t\t} else if (/iPad|iPhone|iPod/.test(userAgent) && !(window as any).MSStream) {\r\n\t\t\tthis.device = 'iOS';\r\n\t\t} else {\r\n\t\t\tthis.device = 'Web';\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Checks if the device is a mobile device.\r\n\t * @returns {boolean} - Returns true if the device is a mobile device.\r\n\t */\r\n\tisMobile(): boolean {\r\n\t\treturn (\r\n\t\t\tthis.device === 'Windows Phone' || this.device === 'Android' || this.device === 'iOS'\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Checks if the device is a tablet.\r\n\t * @returns {boolean} - Returns true if the device is a tablet.\r\n\t */\r\n\tisTablet(): boolean {\r\n\t\tif (!this._isBrowser) return false;\r\n\r\n\t\treturn this.device === 'iOS' && /iPad/.test(navigator.userAgent);\r\n\t}\r\n\r\n\t/**\r\n\t * Checks if the device is a web browser.\r\n\t * @returns {boolean} - Returns true if the device is a web browser.\r\n\t */\r\n\tisWeb(): boolean {\r\n\t\treturn this.device === 'Web';\r\n\t}\r\n\r\n\t/**\r\n\t * Checks if the device is an Android device.\r\n\t * @returns {boolean} - Returns true if the device is an Android device.\r\n\t */\r\n\tisAndroid(): boolean {\r\n\t\treturn this.device === 'Android';\r\n\t}\r\n\r\n\t/**\r\n\t * Checks if the device is an iOS device.\r\n\t * @returns {boolean} - Returns true if the device is an iOS device.\r\n\t */\r\n\tisIos(): boolean {\r\n\t\treturn this.device === 'iOS';\r\n\t}\r\n\r\n\t// Viewport management (responsive breakpoint)\r\n\treadonly viewport = signal<Viewport>('desktop');\r\n\r\n\treadonly isViewportMobile = computed(() => this.viewport() === 'mobile');\r\n\treadonly isViewportTablet = computed(() => this.viewport() === 'tablet');\r\n\treadonly isViewportDesktop = computed(() => this.viewport() === 'desktop');\r\n\r\n\tdetectViewport(): void {\r\n\t\tif (!this._isBrowser) return;\r\n\r\n\t\tconst mqMobile = window.matchMedia('(max-width: 767.98px)');\r\n\t\tconst mqTablet = window.matchMedia('(min-width: 768px) and (max-width: 1023.98px)');\r\n\t\tconst mqDesktop = window.matchMedia('(min-width: 1024px)');\r\n\r\n\t\tconst update = () => {\r\n\t\t\tif (mqMobile.matches) return this.viewport.set('mobile');\r\n\t\t\tif (mqTablet.matches) return this.viewport.set('tablet');\r\n\t\t\treturn this.viewport.set('desktop');\r\n\t\t};\r\n\r\n\t\tupdate();\r\n\r\n\t\tmqMobile.addEventListener('change', update);\r\n\t\tmqTablet.addEventListener('change', update);\r\n\t\tmqDesktop.addEventListener('change', update);\r\n\r\n\t\tthis._destroyRef.onDestroy(() => {\r\n\t\t\tmqMobile.removeEventListener('change', update);\r\n\t\t\tmqTablet.removeEventListener('change', update);\r\n\t\t\tmqDesktop.removeEventListener('change', update);\r\n\t\t});\r\n\t}\r\n\r\n\t// Version management\r\n\tversion = '1.0.0';\r\n\r\n\tappVersion = '';\r\n\r\n\tdateVersion = '';\r\n\r\n\t/**\r\n\t * Sets the combined version string based on appVersion and dateVersion.\r\n\t */\r\n\tsetVersion(): void {\r\n\t\tthis.version = this.appVersion || '';\r\n\r\n\t\tthis.version += this.version && this.dateVersion ? ' ' : '';\r\n\r\n\t\tthis.version += this.dateVersion || '';\r\n\t}\r\n\r\n\t/**\r\n\t * Sets the app version and updates the combined version string.\r\n\t *\r\n\t * @param {string} appVersion - The application version to set.\r\n\t */\r\n\tsetAppVersion(appVersion: string): void {\r\n\t\tthis.appVersion = appVersion;\r\n\r\n\t\tthis.setVersion();\r\n\t}\r\n\r\n\t/**\r\n\t * Sets the date version and updates the combined version string.\r\n\t *\r\n\t * @param {string} dateVersion - The date version to set.\r\n\t */\r\n\tsetDateVersion(dateVersion: string): void {\r\n\t\tthis.dateVersion = dateVersion;\r\n\r\n\t\tthis.setVersion();\r\n\t}\r\n\r\n\t// Locking management\r\n\tprivate _locked: Record<string, boolean> = {};\r\n\tprivate _unlockResolvers: Record<string, (() => void)[]> = {};\r\n\r\n\t/**\r\n\t * Locks a resource to prevent concurrent access.\r\n\t * @param which - The resource to lock, identified by a string.\r\n\t */\r\n\tlock(which: string): void {\r\n\t\tthis._locked[which] = true;\r\n\r\n\t\tif (!this._unlockResolvers[which]) {\r\n\t\t\tthis._unlockResolvers[which] = [];\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Unlocks a resource, allowing access.\r\n\t * @param which - The resource to unlock, identified by a string.\r\n\t */\r\n\tunlock(which: string): void {\r\n\t\tthis._locked[which] = false;\r\n\r\n\t\tif (this._unlockResolvers[which]) {\r\n\t\t\tthis._unlockResolvers[which].forEach(resolve => resolve());\r\n\r\n\t\t\tthis._unlockResolvers[which] = [];\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a Promise that resolves when the specified resource is unlocked.\r\n\t * @param which - The resource to watch for unlocking, identified by a string.\r\n\t * @returns A Promise that resolves when the resource is unlocked.\r\n\t */\r\n\tonUnlock(which: string): Promise<void> {\r\n\t\tif (!this._locked[which]) {\r\n\t\t\treturn Promise.resolve();\r\n\t\t}\r\n\r\n\t\treturn new Promise(resolve => {\r\n\t\t\tif (!this._unlockResolvers[which]) {\r\n\t\t\t\tthis._unlockResolvers[which] = [];\r\n\t\t\t}\r\n\r\n\t\t\tthis._unlockResolvers[which].push(resolve);\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Checks if a resource is locked.\r\n\t * @param which - The resource to check, identified by a string.\r\n\t * @returns True if the resource is locked, false otherwise.\r\n\t */\r\n\tlocked(which: string): boolean {\r\n\t\treturn !!this._locked[which];\r\n\t}\r\n\r\n\t// Angular Signals //\r\n\t/**\r\n\t * Converts a plain object into a signal-wrapped object.\r\n\t * Optionally wraps specific fields of the object as individual signals,\r\n\t * and merges them into the returned signal for fine-grained reactivity.\r\n\t *\r\n\t * @template Document - The type of the object being wrapped.\r\n\t * @param {Document} document - The plain object to wrap into a signal.\r\n\t * @param {Record<string, (doc: Document) => unknown>} [signalFields={}] -\r\n\t *        Optional map where each key is a field name and the value is a function\r\n\t *        to extract the initial value for that field. These fields will be wrapped\r\n\t *        as separate signals and embedded in the returned object.\r\n\t *\r\n\t * @returns {WritableSignal<Document>} A signal-wrapped object, possibly containing\r\n\t *          nested field signals for more granular control.\r\n\t *\r\n\t * @example\r\n\t * const user = { _id: '1', name: 'Alice', score: 42 };\r\n\t * const sig = toSignal(user, { score: (u) => u.score });\r\n\t * console.log(sig().name); // 'Alice'\r\n\t * console.log(sig().score()); // 42 — field is now a signal\r\n\t */\r\n\ttoSignal<Document>(\r\n\t\tdocument: Document,\r\n\t\tsignalFields: Record<string, (doc: Document) => unknown> = {},\r\n\t): WritableSignal<Document> {\r\n\t\tif (Object.keys(signalFields).length) {\r\n\t\t\tconst fields: Record<string, Signal<unknown>> = {};\r\n\r\n\t\t\tfor (const key in signalFields) {\r\n\t\t\t\tfields[key] = signal(signalFields[key](document));\r\n\t\t\t}\r\n\r\n\t\t\treturn signal({ ...document, ...fields });\r\n\t\t} else {\r\n\t\t\treturn signal(document);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Converts an array of objects into an array of Angular signals.\r\n\t * Optionally wraps specific fields of each object as individual signals.\r\n\t *\r\n\t * @template Document - The type of each object in the array.\r\n\t * @param {Document[]} arr - Array of plain objects to convert into signals.\r\n\t * @param {Record<string, (doc: Document) => unknown>} [signalFields={}] -\r\n\t *        Optional map where keys are field names and values are functions that extract the initial value\r\n\t *        from the object. These fields will be turned into separate signals.\r\n\t *\r\n\t * @returns {WritableSignal<Document>[]} An array where each item is a signal-wrapped object,\r\n\t *          optionally with individual fields also wrapped in signals.\r\n\t *\r\n\t * @example\r\n\t * toSignalsArray(users, {\r\n\t *   name: (u) => u.name,\r\n\t *   score: (u) => u.score,\r\n\t * });\r\n\t */\r\n\ttoSignalsArray<Document>(\r\n\t\tarr: Document[],\r\n\t\tsignalFields: Record<string, (doc: Document) => unknown> = {},\r\n\t): WritableSignal<Document>[] {\r\n\t\treturn arr.map(obj => this.toSignal(obj, signalFields));\r\n\t}\r\n\r\n\t/**\r\n\t * Adds a new object to the signals array.\r\n\t * Optionally wraps specific fields of the object as individual signals before wrapping the whole object.\r\n\t *\r\n\t * @template Document - The type of the object being added.\r\n\t * @param {WritableSignal<Document>[]} signals - The signals array to append to.\r\n\t * @param {Document} item - The object to wrap and push as a signal.\r\n\t * @param {Record<string, (doc: Document) => unknown>} [signalFields={}] -\r\n\t *        Optional map of fields to be wrapped as signals within the object.\r\n\t *\r\n\t * @returns {void}\r\n\t */\r\n\tpushSignal<Document>(\r\n\t\tsignals: WritableSignal<Document>[],\r\n\t\titem: Document,\r\n\t\tsignalFields: Record<string, (doc: Document) => unknown> = {},\r\n\t): void {\r\n\t\tsignals.push(this.toSignal(item, signalFields));\r\n\t}\r\n\r\n\t/**\r\n\t * Removes the first signal from the array whose object's field matches the provided value.\r\n\t * @template Document\r\n\t * @param {WritableSignal<Document>[]} signals - The signals array to modify.\r\n\t * @param {unknown} value - The value to match.\r\n\t * @param {string} [field='_id'] - The object field to match against.\r\n\t * @returns {void}\r\n\t */\r\n\tremoveSignalByField<Document extends Record<string, unknown>>(\r\n\t\tsignals: WritableSignal<Document>[],\r\n\t\tvalue: unknown,\r\n\t\tfield: string = '_id',\r\n\t): void {\r\n\t\tconst idx = signals.findIndex(sig => sig()[field] === value);\r\n\r\n\t\tif (idx > -1) signals.splice(idx, 1);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a generic trackBy function for *ngFor, tracking by the specified object field.\r\n\t * @template Document\r\n\t * @param {string} field - The object field to use for tracking (e.g., '_id').\r\n\t * @returns {(index: number, sig: Signal<Document>) => unknown} TrackBy function for Angular.\r\n\t */\r\n\ttrackBySignalField<Document extends Record<string, unknown>>(field: string) {\r\n\t\treturn (_: number, sig: Signal<Document>) => sig()[field];\r\n\t}\r\n\r\n\t/**\r\n\t * Finds the first signal in the array whose object's field matches the provided value.\r\n\t * @template Document\r\n\t * @param {Signal<Document>[]} signals - Array of signals to search.\r\n\t * @param {unknown} value - The value to match.\r\n\t * @param {string} [field='_id'] - The object field to match against.\r\n\t * @returns {Signal<Document> | undefined} The found signal or undefined if not found.\r\n\t */\r\n\tfindSignalByField<Document extends Record<string, unknown>>(\r\n\t\tsignals: WritableSignal<Document>[],\r\n\t\tvalue: unknown,\r\n\t\tfield = '_id',\r\n\t): WritableSignal<Document> | undefined {\r\n\t\treturn signals.find(sig => sig()[field] === value) as WritableSignal<Document>;\r\n\t}\r\n\r\n\t/**\r\n\t * Updates the first writable signal in the array whose object's field matches the provided value.\r\n\t * @template Document\r\n\t * @param {WritableSignal<Document>[]} signals - Array of writable signals to search.\r\n\t * @param {unknown} value - The value to match.\r\n\t * @param {(val: Document) => Document} updater - Function to produce the updated object.\r\n\t * @param {string} field - The object field to match against.\r\n\t * @returns {void}\r\n\t */\r\n\tupdateSignalByField<Document extends Record<string, unknown>>(\r\n\t\tsignals: WritableSignal<Document>[],\r\n\t\tvalue: unknown,\r\n\t\tupdater: (val: Document) => Document,\r\n\t\tfield: string,\r\n\t): void {\r\n\t\tconst sig = this.findSignalByField<Document>(\r\n\t\t\tsignals,\r\n\t\t\tvalue,\r\n\t\t\tfield,\r\n\t\t) as WritableSignal<Document>;\r\n\r\n\t\tif (sig) sig.update(updater);\r\n\t}\r\n}\r\n","import { ChangeDetectorRef, inject, Signal, signal, WritableSignal } from '@angular/core';\r\nimport { firstValueFrom, take } from 'rxjs';\r\nimport { CoreService } from '../core/core.service';\r\nimport { CrudDocument, CrudOptions, CrudServiceInterface, TableConfig } from './crud.interface';\r\n\r\n/**\r\n * Interface representing the shape of a form service used by the CrudComponent.\r\n * The consuming app must provide a service that implements this structure.\r\n */\r\ninterface FormServiceInterface<FormInterface> {\r\n\tmodal: <T>(\r\n\t\tform: FormInterface,\r\n\t\tbuttons?: unknown | unknown[],\r\n\t\tsubmition?: unknown,\r\n\t\tchange?: (update: T) => void | Promise<(update: T) => void>,\r\n\t\tmodalOptions?: unknown,\r\n\t) => Promise<T>;\r\n\tmodalDocs: <T>(docs: T[]) => Promise<T[]>;\r\n\tmodalUnique: <T>(collection: string, key: string, doc: T) => void;\r\n}\r\n\r\n/**\r\n * Abstract reusable base class for CRUD list views.\r\n * It encapsulates pagination, modals, and document handling logic.\r\n *\r\n * @template Service - A service implementing CrudServiceInterface for a specific document type\r\n * @template Document - The data model extending CrudDocument\r\n */\r\nexport abstract class CrudComponent<\r\n\tService extends CrudServiceInterface<Document>,\r\n\tDocument extends CrudDocument<Document>,\r\n\tFormInterface,\r\n> {\r\n\t/** Service responsible for data fetching, creating, updating, deleting */\r\n\tprotected crudService: Service;\r\n\r\n\t/** The array of documents currently loaded and shown */\r\n\tprotected documents = signal<Signal<Document>[]>([]);\r\n\r\n\t/** Form schema/config used by the FormService modals */\r\n\tprotected form: FormInterface;\r\n\r\n\t/** Current pagination page */\r\n\tprotected page = 1;\r\n\r\n\t/** CoreService handles timing and copying helpers */\r\n\tprivate __core = inject(CoreService);\r\n\r\n\t/** ChangeDetectorRef handles on push strategy */\r\n\tprivate __cdr = inject(ChangeDetectorRef);\r\n\r\n\t/** Internal reference to form service matching FormServiceInterface */\r\n\tprivate __formService: FormServiceInterface<FormInterface>;\r\n\r\n\t/**\r\n\t * Constructor\r\n\t *\r\n\t * @param formConfig - Object describing form title and its component structure\r\n\t * @param formService - Any service that conforms to FormServiceInterface (usually casted)\r\n\t * @param crudService - CRUD service implementing get/create/update/delete\r\n\t */\r\n\tconstructor(formConfig: unknown, formService: unknown, crudService: Service, module = '') {\r\n\t\tconst form = formConfig as FormInterface;\r\n\r\n\t\tthis.__formService = formService as FormServiceInterface<FormInterface>;\r\n\r\n\t\tthis.form = form;\r\n\r\n\t\tthis.crudService = crudService;\r\n\r\n\t\tthis._module = module;\r\n\t}\r\n\r\n\tprotected localDocumentsFilter: (doc: Document) => boolean = () => true;\r\n\r\n\t/**\r\n\t * Allow set query customization\r\n\t */\r\n\tprotected setDocumentsQuery(query: string) {\r\n\t\treturn query;\r\n\t}\r\n\r\n\t/**\r\n\t * Loads documents for a given page.\r\n\t */\r\n\tprotected setDocuments(page = this.page, query = ''): Promise<void> {\r\n\t\tquery = this.setDocumentsQuery(query);\r\n\r\n\t\treturn new Promise(resolve => {\r\n\t\t\tif (this.configType === 'server') {\r\n\t\t\t\tthis.page = page;\r\n\r\n\t\t\t\tthis.__core.afterWhile(\r\n\t\t\t\t\tthis,\r\n\t\t\t\t\t() => {\r\n\t\t\t\t\t\tthis.crudService\r\n\t\t\t\t\t\t\t.get({ page, query }, this.getOptions())\r\n\t\t\t\t\t\t\t.subscribe((docs: Document[]) => {\r\n\t\t\t\t\t\t\t\tthis.documents.update(() =>\r\n\t\t\t\t\t\t\t\t\t(docs || []).map(doc => this.crudService.getSignal(doc)),\r\n\t\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\t\tresolve();\r\n\r\n\t\t\t\t\t\t\t\tthis.__cdr.markForCheck();\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t},\r\n\t\t\t\t\t250,\r\n\t\t\t\t);\r\n\t\t\t} else {\r\n\t\t\t\tthis.documents.update(() =>\r\n\t\t\t\t\tthis.crudService\r\n\t\t\t\t\t\t.getDocs()\r\n\t\t\t\t\t\t.filter(this.localDocumentsFilter)\r\n\t\t\t\t\t\t.map(doc => this.crudService.getSignal(doc)),\r\n\t\t\t\t);\r\n\r\n\t\t\t\tthis.crudService.loaded.pipe(take(1)).subscribe(() => {\r\n\t\t\t\t\tresolve();\r\n\r\n\t\t\t\t\tthis.__cdr.markForCheck();\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t/** Fields considered when performing bulk updates. */\r\n\tprotected updatableFields = ['_id', 'name', 'description', 'data'];\r\n\r\n\t/**\r\n\t * Clears temporary metadata before document creation.\r\n\t */\r\n\tprotected preCreate(doc: Document): void {\r\n\t\tdelete doc.__creating;\r\n\t}\r\n\r\n\t/**\r\n\t * Funciton which controls whether the create functionality is available.\r\n\t */\r\n\tprotected allowCreate(): boolean {\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * Funciton which controls whether the update and delete functionality is available.\r\n\t */\r\n\tprotected allowMutate(): boolean {\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/**\r\n\t * Funciton which controls whether the unique url functionality is available.\r\n\t */\r\n\tprotected allowUrl(): boolean {\r\n\t\treturn true;\r\n\t}\r\n\r\n\t/** Determines whether manual sorting controls are available. */\r\n\tprotected allowSort(): boolean {\r\n\t\treturn false;\r\n\t}\r\n\r\n\t/**\r\n\t * Funciton which prepare get crud options.\r\n\t */\r\n\tprotected getOptions(): CrudOptions<Document> {\r\n\t\treturn {} as CrudOptions<Document>;\r\n\t}\r\n\r\n\t/**\r\n\t * Handles bulk creation and updating of documents.\r\n\t * In creation mode, adds new documents.\r\n\t * In update mode, syncs changes and deletes removed entries.\r\n\t */\r\n\tprotected bulkManagement(isCreateFlow = true): () => void {\r\n\t\treturn (): void => {\r\n\t\t\tthis.__formService\r\n\t\t\t\t.modalDocs<Document>(\r\n\t\t\t\t\tisCreateFlow\r\n\t\t\t\t\t\t? []\r\n\t\t\t\t\t\t: this.documents().map(\r\n\t\t\t\t\t\t\t\t(obj: any) =>\r\n\t\t\t\t\t\t\t\t\tObject.fromEntries(\r\n\t\t\t\t\t\t\t\t\t\tthis.updatableFields.map(key => [key, obj()[key]]),\r\n\t\t\t\t\t\t\t\t\t) as Document,\r\n\t\t\t\t\t\t\t),\r\n\t\t\t\t)\r\n\t\t\t\t.then(async (docs: Document[]) => {\r\n\t\t\t\t\tif (isCreateFlow) {\r\n\t\t\t\t\t\tfor (const doc of docs) {\r\n\t\t\t\t\t\t\tthis.preCreate(doc);\r\n\r\n\t\t\t\t\t\t\tawait firstValueFrom(this.crudService.create(doc));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tfor (const document of this.documents()) {\r\n\t\t\t\t\t\t\tif (!docs.find(d => d._id === document()._id)) {\r\n\t\t\t\t\t\t\t\tawait firstValueFrom(this.crudService.delete(document()));\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tfor (const doc of docs) {\r\n\t\t\t\t\t\t\tconst local = this.documents().find(\r\n\t\t\t\t\t\t\t\tdocument => document()._id === doc._id,\r\n\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\tif (local) {\r\n\t\t\t\t\t\t\t\t(local as WritableSignal<Document>).update(document => {\r\n\t\t\t\t\t\t\t\t\tthis.__core.copy(doc, document);\r\n\r\n\t\t\t\t\t\t\t\t\treturn document;\r\n\t\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t\tawait firstValueFrom(this.crudService.update(local()));\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tthis.preCreate(doc);\r\n\r\n\t\t\t\t\t\t\t\tawait firstValueFrom(this.crudService.create(doc));\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.setDocuments();\r\n\t\t\t\t});\r\n\t\t};\r\n\t}\r\n\r\n\t/** Opens a modal to create a new document. */\r\n\tprotected create() {\r\n\t\tthis.__formService.modal<Document>(\r\n\t\t\tthis.form,\r\n\t\t\t{\r\n\t\t\t\tlabel: 'Create',\r\n\t\t\t\tclick: async (created: unknown, close: () => void) => {\r\n\t\t\t\t\tclose();\r\n\r\n\t\t\t\t\tthis.preCreate(created as Document);\r\n\r\n\t\t\t\t\tawait firstValueFrom(this.crudService.create(created as Document));\r\n\r\n\t\t\t\t\tthis.setDocuments();\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t\t{ data: {} },\r\n\t\t\t() => {},\r\n\t\t\t{\r\n\t\t\t\tresetOnSubmit: true,\r\n\t\t\t},\r\n\t\t);\r\n\t}\r\n\r\n\t/** Displays a modal to edit an existing document. */\r\n\tprotected update(doc: Document) {\r\n\t\tthis.__formService.modal<Document>(\r\n\t\t\tthis.form,\r\n\t\t\t{\r\n\t\t\t\tlabel: 'Update',\r\n\t\t\t\tclick: (updated: unknown, close: () => void) => {\r\n\t\t\t\t\tclose();\r\n\r\n\t\t\t\t\tthis.__core.copy(updated, doc);\r\n\r\n\t\t\t\t\tthis.crudService.update(doc);\r\n\r\n\t\t\t\t\tthis.__cdr.markForCheck();\r\n\t\t\t\t},\r\n\t\t\t},\r\n\t\t\tdoc,\r\n\t\t);\r\n\t}\r\n\r\n\t/** Requests confirmation before deleting the provided document. */\r\n\tprotected async delete(doc: Document) {\r\n\t\tthis.crudService.delete(doc).subscribe(() => {\r\n\t\t\tthis.setDocuments();\r\n\t\t});\r\n\t}\r\n\r\n\t/** Opens a modal to edit the document's unique URL. */\r\n\tprotected mutateUrl(doc: Document) {\r\n\t\tthis.__formService.modalUnique<Document>(this._module, 'url', doc);\r\n\t}\r\n\r\n\t/** Moves the given document one position up and updates ordering. */\r\n\tprotected moveUp(doc: Document) {\r\n\t\tconst index = this.documents().findIndex(document => document()._id === doc._id);\r\n\r\n\t\tif (index) {\r\n\t\t\tthis.documents.update(documents => {\r\n\t\t\t\tdocuments.splice(index, 1);\r\n\r\n\t\t\t\tdocuments.splice(index - 1, 0, this.crudService.getSignal(doc));\r\n\r\n\t\t\t\treturn documents;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tfor (let i = 0; i < this.documents().length; i++) {\r\n\t\t\tif (this.documents()[i]().order !== i) {\r\n\t\t\t\tthis.documents()[i]().order = i;\r\n\r\n\t\t\t\tthis.crudService.update(this.documents()[i]());\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.__cdr.markForCheck();\r\n\t}\r\n\r\n\t/** Data source mode used for document retrieval. */\r\n\tprotected configType: 'server' | 'local' = 'server';\r\n\r\n\t/** Number of documents fetched per page when paginating. */\r\n\tprotected perPage = 20;\r\n\r\n\t/**\r\n\t * Configuration object used by the UI for rendering table and handling actions.\r\n\t */\r\n\tprotected getConfig(): TableConfig<Document> {\r\n\t\tconst config: TableConfig<Document> = {\r\n\t\t\tcreate: this.allowCreate()\r\n\t\t\t\t? (): void => {\r\n\t\t\t\t\t\tthis.create();\r\n\t\t\t\t\t}\r\n\t\t\t\t: null,\r\n\r\n\t\t\tupdate: this.allowMutate()\r\n\t\t\t\t? (doc: Document): void => {\r\n\t\t\t\t\t\tthis.update(doc);\r\n\t\t\t\t\t}\r\n\t\t\t\t: null,\r\n\r\n\t\t\tdelete: this.allowMutate()\r\n\t\t\t\t? (doc: Document): void => {\r\n\t\t\t\t\t\tthis.delete(doc);\r\n\t\t\t\t\t}\r\n\t\t\t\t: null,\r\n\r\n\t\t\tbuttons: [],\r\n\t\t\theaderButtons: [],\r\n\t\t\tallDocs: true,\r\n\t\t};\r\n\r\n\t\tif (this.allowUrl()) {\r\n\t\t\tconfig.buttons.push({\r\n\t\t\t\ticon: 'cloud_download',\r\n\t\t\t\tclick: (doc: Document) => {\r\n\t\t\t\t\tthis.mutateUrl(doc);\r\n\t\t\t\t},\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.allowSort()) {\r\n\t\t\tconfig.buttons.push({\r\n\t\t\t\ticon: 'arrow_upward',\r\n\t\t\t\tclick: (doc: Document) => {\r\n\t\t\t\t\tthis.moveUp(doc);\r\n\t\t\t\t},\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this.allowCreate()) {\r\n\t\t\tconfig.headerButtons.push({\r\n\t\t\t\ticon: 'playlist_add',\r\n\t\t\t\tclick: this.bulkManagement(),\r\n\t\t\t\tclass: 'playlist',\r\n\t\t\t});\r\n\t\t}\r\n\t\tif (this.allowMutate()) {\r\n\t\t\tconfig.headerButtons.push({\r\n\t\t\t\ticon: 'edit_note',\r\n\t\t\t\tclick: this.bulkManagement(false),\r\n\t\t\t\tclass: 'edit',\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn this.configType === 'server'\r\n\t\t\t? {\r\n\t\t\t\t\t...config,\r\n\t\t\t\t\tpaginate: this.setDocuments.bind(this),\r\n\t\t\t\t\tperPage: this.perPage,\r\n\t\t\t\t\tsetPerPage: this.crudService.setPerPage?.bind(this.crudService),\r\n\t\t\t\t\tallDocs: false,\r\n\t\t\t\t}\r\n\t\t\t: config;\r\n\t}\r\n\r\n\t/** Name of the collection or module used for contextual actions. */\r\n\tprivate _module = '';\r\n}\r\n","import { Injectable, WritableSignal, signal } from '@angular/core';\r\nimport { toObservable } from '@angular/core/rxjs-interop';\r\nimport {\r\n\tObservable,\r\n\tSubject,\r\n\tcombineLatest,\r\n\tfilter,\r\n\tmap,\r\n\tmerge,\r\n\tshare,\r\n\tskip,\r\n\ttake,\r\n\ttakeUntil,\r\n\ttimeout,\r\n} from 'rxjs';\r\n\r\ntype Any = unknown;\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class EmitterService {\r\n\tprivate _signals = new Map<string, WritableSignal<Any>>();\r\n\tprivate _closers = new Map<string, Subject<void>>();\r\n\tprivate _streams = new Map<string, Observable<Any>>();\r\n\r\n\tprivate _getSignal(id: string): WritableSignal<Any> {\r\n\t\tlet s = this._signals.get(id);\r\n\t\tif (!s) {\r\n\t\t\t// emit even if same payload repeats\r\n\t\t\ts = signal<Any>(undefined, { equal: () => false });\r\n\t\t\tthis._signals.set(id, s);\r\n\t\t}\r\n\t\treturn s;\r\n\t}\r\n\r\n\tprivate _getCloser(id: string): Subject<void> {\r\n\t\tlet c = this._closers.get(id);\r\n\t\tif (!c) {\r\n\t\t\tc = new Subject<void>();\r\n\t\t\tthis._closers.set(id, c);\r\n\t\t}\r\n\t\treturn c;\r\n\t}\r\n\r\n\tprivate _getStream(id: string): Observable<Any> {\r\n\t\tlet obs$ = this._streams.get(id);\r\n\t\tif (!obs$) {\r\n\t\t\tconst sig = this._getSignal(id);\r\n\t\t\tconst closed$ = this._getCloser(id);\r\n\t\t\tobs$ = toObservable(sig).pipe(\r\n\t\t\t\t// Subject-like: don't replay the current value on subscribe\r\n\t\t\t\tskip(1),\r\n\t\t\t\ttakeUntil(closed$),\r\n\t\t\t\tshare(),\r\n\t\t\t);\r\n\t\t\tthis._streams.set(id, obs$);\r\n\t\t}\r\n\t\treturn obs$;\r\n\t}\r\n\r\n\t/** Emit an event */\r\n\temit<T = Any>(id: string, data?: T): void {\r\n\t\tthis._getSignal(id).set(data as Any);\r\n\t}\r\n\r\n\t/** Listen for events (hot, completes when off(id) is called) */\r\n\ton<T = Any>(id: string): Observable<T> {\r\n\t\treturn this._getStream(id) as Observable<T>;\r\n\t}\r\n\r\n\t/** Complete and remove a channel */\r\n\toff(id: string): void {\r\n\t\tconst closer = this._closers.get(id);\r\n\t\tif (closer) {\r\n\t\t\tcloser.next();\r\n\t\t\tcloser.complete();\r\n\t\t\tthis._closers.delete(id);\r\n\t\t}\r\n\t\tthis._signals.delete(id);\r\n\t\tthis._streams.delete(id);\r\n\t}\r\n\r\n\toffAll(): void {\r\n\t\tfor (const id of Array.from(this._closers.keys())) this.off(id);\r\n\t}\r\n\r\n\thas(id: string): boolean {\r\n\t\treturn this._signals.has(id);\r\n\t}\r\n\r\n\tprivate _done = new Map<string, WritableSignal<Any | undefined>>();\r\n\r\n\tprivate _getDoneSignal(id: string): WritableSignal<Any | undefined> {\r\n\t\tlet s = this._done.get(id);\r\n\t\tif (!s) {\r\n\t\t\ts = signal<Any | undefined>(undefined);\r\n\t\t\tthis._done.set(id, s);\r\n\t\t}\r\n\t\treturn s;\r\n\t}\r\n\r\n\t/** Mark task as completed with a payload (default: true) */\r\n\tcomplete<T = Any>(task: string, value: T = true as unknown as T): void {\r\n\t\tthis._getDoneSignal(task).set(value as Any);\r\n\t}\r\n\r\n\t/** Clear completion so it can be awaited again */\r\n\tclearCompleted(task: string): void {\r\n\t\tconst s = this._done.get(task) ?? this._getDoneSignal(task);\r\n\t\ts.set(undefined);\r\n\t}\r\n\r\n\t/** Read current completion payload (undefined => not completed) */\r\n\tcompleted(task: string): Any | undefined {\r\n\t\treturn this._getDoneSignal(task)();\r\n\t}\r\n\r\n\tisCompleted(task: string): boolean {\r\n\t\treturn this._getDoneSignal(task)() !== undefined;\r\n\t}\r\n\r\n\tonComplete(\r\n\t\ttasks: string | string[],\r\n\t\topts?: {\r\n\t\t\tmode?: 'all' | 'any';\r\n\t\t\ttimeoutMs?: number;\r\n\t\t\tabort?: AbortSignal;\r\n\t\t},\r\n\t): Observable<Any | Any[]> {\r\n\t\tconst list = (Array.isArray(tasks) ? tasks : [tasks]).filter(Boolean);\r\n\t\tconst streams = list.map(id =>\r\n\t\t\ttoObservable(this._getDoneSignal(id)).pipe(\r\n\t\t\t\tfilter((v): v is Any => v !== undefined),\r\n\t\t\t\tmap(v => v as Any),\r\n\t\t\t),\r\n\t\t);\r\n\r\n\t\tlet source$: Observable<Any | Any[]>;\r\n\r\n\t\tif (list.length <= 1) {\r\n\t\t\t// single-task await\r\n\t\t\tsource$ = streams[0]?.pipe(take(1)) ?? new Observable<never>();\r\n\t\t} else if (opts?.mode === 'any') {\r\n\t\t\tsource$ = merge(...streams).pipe(take(1));\r\n\t\t} else {\r\n\t\t\tsource$ = combineLatest(streams).pipe(take(1));\r\n\t\t}\r\n\r\n\t\tif (opts?.timeoutMs && Number.isFinite(opts.timeoutMs)) {\r\n\t\t\tsource$ = source$.pipe(timeout({ first: opts.timeoutMs }));\r\n\t\t}\r\n\r\n\t\tif (opts?.abort) {\r\n\t\t\tconst abort$ = new Observable<void>(sub => {\r\n\t\t\t\tconst handler = () => {\r\n\t\t\t\t\tsub.next();\r\n\t\t\t\t\tsub.complete();\r\n\t\t\t\t};\r\n\t\t\t\topts.abort!.addEventListener('abort', handler);\r\n\t\t\t\treturn () => opts.abort!.removeEventListener('abort', handler);\r\n\t\t\t});\r\n\t\t\tsource$ = source$.pipe(takeUntil(abort$));\r\n\t\t}\r\n\r\n\t\treturn source$;\r\n\t}\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\nimport { MetaConfig } from '../meta/meta.interface';\r\nimport { StoreConfig } from '../store/store.interface';\r\nimport { HttpConfig } from './http.interface';\r\nimport { NetworkConfig } from './network.interface';\r\n\r\n/**\r\n * Root configuration object used to initialize the library.\r\n * Each property allows consumers to override the default\r\n * behavior of the corresponding service.\r\n */\r\nexport interface Config {\r\n\t/** Options for the key‑value storage service. */\r\n\tstore?: StoreConfig;\r\n\t/** Defaults applied to page metadata handling. */\r\n\tmeta?: MetaConfig;\r\n\t/** Base HTTP settings such as API URL and headers. */\r\n\thttp?: HttpConfig;\r\n\t/** Optional socket connection configuration. */\r\n\tsocket?: any;\r\n\t/** Raw Socket.IO client instance, if used. */\r\n\tio?: any;\r\n\tnetwork?: NetworkConfig;\r\n}\r\n\r\nexport const CONFIG_TOKEN = new InjectionToken<Config>('config');\r\n\r\nexport const DEFAULT_CONFIG: Config = {\r\n\tstore: {\r\n\t\tprefix: 'waStore',\r\n\t},\r\n\tmeta: {\r\n\t\tuseTitleSuffix: false,\r\n\t\tdefaults: { links: {} },\r\n\t},\r\n\tsocket: false,\r\n\thttp: {\r\n\t\turl: '',\r\n\t\theaders: {},\r\n\t},\r\n};\r\n","export type HttpHeaderType = string | number | (string | number)[];\r\n\r\n/**\r\n * Configuration values used by the HTTP service when\r\n * issuing requests to a backend API.\r\n */\r\nexport interface HttpConfig {\r\n\t/** Map of default headers appended to each request. */\r\n\theaders?: Record<string, HttpHeaderType>;\r\n\t/** Base URL for all HTTP requests. */\r\n\turl?: string;\r\n}\r\n\r\nexport const DEFAULT_HTTP_CONFIG: HttpConfig = {\r\n\theaders: {},\r\n\turl: '',\r\n};\r\n","import { isPlatformBrowser } from '@angular/common';\r\nimport { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';\r\nimport { Inject, Injectable, Optional, PLATFORM_ID, inject } from '@angular/core';\r\nimport { EMPTY, Observable, ReplaySubject } from 'rxjs';\r\nimport { catchError, first } from 'rxjs/operators';\r\nimport { CONFIG_TOKEN, Config } from '../interfaces/config.interface';\r\nimport { DEFAULT_HTTP_CONFIG, HttpConfig, HttpHeaderType } from '../interfaces/http.interface';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root',\r\n})\r\nexport class HttpService {\r\n\tprivate readonly _isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\r\n\t// An array of error handling callbacks\r\n\terrors: ((err: HttpErrorResponse, retry?: () => void) => {})[] = [];\r\n\r\n\t// Base URL for HTTP requests\r\n\turl = '';\r\n\r\n\t// Flag to lock the service to prevent multiple requests\r\n\tlocked = false;\r\n\r\n\t// Array to store setTimeout IDs for managing request locks\r\n\tawaitLocked: ReturnType<typeof setTimeout>[] = [];\r\n\r\n\t// Configuration object for HTTP settings\r\n\tprivate _config: HttpConfig;\r\n\r\n\t// Object to store HTTP headers\r\n\tprivate _headers: {\r\n\t\t[name: string]: HttpHeaderType;\r\n\t} = {};\r\n\r\n\t// Instance of HttpHeaders with current headers\r\n\tprivate _http_headers = new HttpHeaders(this._headers);\r\n\r\n\tconstructor(\r\n\t\t@Inject(CONFIG_TOKEN) @Optional() config: Config,\r\n\t\tprivate _http: HttpClient,\r\n\t) {\r\n\t\t// Initialize HTTP configuration and headers from injected config\r\n\t\tthis._config = {\r\n\t\t\t...DEFAULT_HTTP_CONFIG,\r\n\t\t\t...(config.http || {}),\r\n\t\t};\r\n\r\n\t\tif (typeof this._config.url === 'string') {\r\n\t\t\tthis.setUrl(this._config.url);\r\n\t\t}\r\n\r\n\t\tif (this._isBrowser) {\r\n\t\t\tthis.url = localStorage.getItem('wacom-http.url') || this.url;\r\n\r\n\t\t\tconst raw = localStorage.getItem('wacom-http.headers');\r\n\t\t\tthis._headers = raw ? JSON.parse(raw) : this._headers;\r\n\t\t\tthis._http_headers = new HttpHeaders(this._headers);\r\n\t\t}\r\n\r\n\t\tif (typeof this._config.headers === 'object') {\r\n\t\t\tfor (const header in this._config.headers) {\r\n\t\t\t\tthis._headers[header] = this._config.headers[header];\r\n\t\t\t}\r\n\r\n\t\t\tthis._http_headers = new HttpHeaders(this._headers);\r\n\t\t}\r\n\t}\r\n\r\n\t// Set a new base URL and save it in the store\r\n\tsetUrl(url: string) {\r\n\t\tthis.url = url;\r\n\r\n\t\tif (this._isBrowser) {\r\n\t\t\tlocalStorage.setItem('wacom-http.url', url);\r\n\t\t}\r\n\t}\r\n\r\n\t// Remove the base URL and revert to the default or stored one\r\n\tremoveUrl() {\r\n\t\tthis.url = this._config.url || '';\r\n\r\n\t\tif (this._isBrowser) {\r\n\t\t\tlocalStorage.removeItem('wacom-http.url');\r\n\t\t}\r\n\t}\r\n\r\n\t// Set a new HTTP header and update the stored headers\r\n\tset(key: any, value: any) {\r\n\t\tthis._headers[key] = value;\r\n\r\n\t\tif (this._isBrowser) {\r\n\t\t\tlocalStorage.setItem('wacom-http.headers', JSON.stringify(this._headers));\r\n\t\t}\r\n\r\n\t\tthis._http_headers = new HttpHeaders(this._headers);\r\n\t}\r\n\r\n\t// Get the value of a specific HTTP header\r\n\theader(key: any) {\r\n\t\treturn this._headers[key];\r\n\t}\r\n\r\n\t// Remove a specific HTTP header and update the stored headers\r\n\tremove(key: any) {\r\n\t\tdelete this._headers[key];\r\n\r\n\t\tif (this._isBrowser) {\r\n\t\t\tlocalStorage.setItem('wacom-http.headers', JSON.stringify(this._headers));\r\n\t\t}\r\n\r\n\t\tthis._http_headers = new HttpHeaders(this._headers);\r\n\t}\r\n\r\n\t// Internal method to make HTTP requests based on the method type\r\n\tprivate _httpMethod(method: string, _url: string, doc: unknown, headers: any): Observable<any> {\r\n\t\tif (method === 'post') {\r\n\t\t\treturn this._http.post<any>(_url, doc, headers);\r\n\t\t} else if (method === 'put') {\r\n\t\t\treturn this._http.put<any>(_url, doc, headers);\r\n\t\t} else if (method === 'patch') {\r\n\t\t\treturn this._http.patch<any>(_url, doc, headers);\r\n\t\t} else if (method === 'delete') {\r\n\t\t\treturn this._http.delete<any>(_url, headers);\r\n\t\t} else {\r\n\t\t\treturn this._http.get<any>(_url, headers);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Internal method to handle HTTP requests for various methods (POST, PUT, PATCH, DELETE, GET).\r\n\t *\r\n\t * Features:\r\n\t * - **Request Locking**: Manages request locking to prevent simultaneous requests.\r\n\t * - **Acceptance Check**: Validates the server response against a user-defined `acceptance` function.\r\n\t *   If the check fails, the response is rejected with an error.\r\n\t * - **Replace Logic**: Allows modification of specific parts of the response object, determined by a user-defined `replace` function.\r\n\t *   Can handle both objects and arrays within the response.\r\n\t * - **Field Filtering**: Supports extracting specific fields from response objects or arrays.\r\n\t * - **Legacy Support**: Compatible with callback-based usage alongside Observables.\r\n\t * - **ReplaySubject**: Ensures that the response can be shared across multiple subscribers.\r\n\t *\r\n\t * @param url - The endpoint to send the HTTP request to (relative to the base URL).\r\n\t * @param doc - The request payload for methods like POST, PUT, and PATCH.\r\n\t * @param callback - A legacy callback function to handle the response.\r\n\t * @param opts - Additional options:\r\n\t *   - `err`: Error handling callback.\r\n\t *   - `acceptance`: Function to validate the server response. Should return `true` for valid responses.\r\n\t *   - `replace`: Function to modify specific parts of the response data.\r\n\t *   - `fields`: Array of fields to extract from the response object(s).\r\n\t *   - `data`: Path in the response where the data resides for `replace` and `fields` operations.\r\n\t *   - `skipLock`: If `true`, bypasses request locking.\r\n\t *   - `url`: Overrides the base URL for this request.\r\n\t * @param method - The HTTP method (e.g., 'post', 'put', 'patch', 'delete', 'get').\r\n\t * @returns An Observable that emits the processed HTTP response or an error.\r\n\t */\r\n\tprivate _post(\r\n\t\turl: string,\r\n\t\tdoc: unknown,\r\n\t\tcallback = (resp: unknown) => {},\r\n\t\topts: any = {},\r\n\t\tmethod = 'post',\r\n\t): Observable<any> {\r\n\t\tif (typeof opts === 'function') {\r\n\t\t\topts = { err: opts };\r\n\t\t}\r\n\r\n\t\tif (!opts.err) {\r\n\t\t\topts.err = (err: HttpErrorResponse) => {};\r\n\t\t}\r\n\r\n\t\t// Handle request locking to avoid multiple simultaneous requests\r\n\t\tif (this.locked && !opts.skipLock) {\r\n\t\t\treturn new Observable(observer => {\r\n\t\t\t\tconst wait = setTimeout(() => {\r\n\t\t\t\t\tthis._post(url, doc, callback, opts, method).subscribe(observer);\r\n\t\t\t\t}, 100);\r\n\r\n\t\t\t\tthis.awaitLocked.push(wait);\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tconst _url = (opts.url || this.url) + url;\r\n\r\n\t\tthis.prepare_handle(_url, doc);\r\n\r\n\t\t// Using ReplaySubject to allow multiple subscriptions without re-triggering the HTTP request\r\n\t\tconst responseSubject = new ReplaySubject(1);\r\n\r\n\t\tthis._httpMethod(method, _url, doc, { headers: this._http_headers })\r\n\t\t\t.pipe(\r\n\t\t\t\tfirst(),\r\n\t\t\t\tcatchError((error: HttpErrorResponse) => {\r\n\t\t\t\t\tthis.handleError(opts.err, () => {\r\n\t\t\t\t\t\tthis._post(url, doc, callback, opts, method).subscribe(responseSubject);\r\n\t\t\t\t\t})(error);\r\n\r\n\t\t\t\t\tresponseSubject.error(error);\r\n\r\n\t\t\t\t\treturn EMPTY;\r\n\t\t\t\t}),\r\n\t\t\t)\r\n\t\t\t.subscribe({\r\n\t\t\t\tnext: (resp: unknown) => {\r\n\t\t\t\t\tif (opts.acceptance && typeof opts.acceptance === 'function') {\r\n\t\t\t\t\t\tif (!opts.acceptance(resp)) {\r\n\t\t\t\t\t\t\tconst error = new HttpErrorResponse({\r\n\t\t\t\t\t\t\t\terror: 'Acceptance failed',\r\n\t\t\t\t\t\t\t\tstatus: 400,\r\n\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\tthis.handleError(opts.err, () => {})(error);\r\n\r\n\t\t\t\t\t\t\tresponseSubject.error(error);\r\n\r\n\t\t\t\t\t\t\treturn;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (opts.replace && typeof opts.replace === 'function') {\r\n\t\t\t\t\t\tif (Array.isArray(this._getObjectToReplace(resp, opts.data))) {\r\n\t\t\t\t\t\t\t(this._getObjectToReplace(resp, opts.data) as Array<unknown>).map(\r\n\t\t\t\t\t\t\t\t(item: unknown) => opts.replace(item),\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t} else if (this._getObjectToReplace(resp, opts.data)) {\r\n\t\t\t\t\t\t\topts.replace(this._getObjectToReplace(resp, opts.data));\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (Array.isArray(opts.fields)) {\r\n\t\t\t\t\t\tif (Array.isArray(this._getObjectToReplace(resp, opts.data))) {\r\n\t\t\t\t\t\t\t(this._getObjectToReplace(resp, opts.data) as Array<unknown>).map(\r\n\t\t\t\t\t\t\t\t(item: unknown) => {\r\n\t\t\t\t\t\t\t\t\treturn this._newDoc(item, opts.fields);\r\n\t\t\t\t\t\t\t\t},\r\n\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t} else if (this._getObjectToReplace(resp, opts.data)) {\r\n\t\t\t\t\t\t\tconst newDoc = this._newDoc(\r\n\t\t\t\t\t\t\t\tthis._getObjectToReplace(resp, opts.data),\r\n\t\t\t\t\t\t\t\topts.fields,\r\n\t\t\t\t\t\t\t);\r\n\r\n\t\t\t\t\t\t\tif (opts.data) {\r\n\t\t\t\t\t\t\t\tthis._setObjectToReplace(resp, opts.data, newDoc);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tresp = newDoc;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tthis.response_handle(_url, resp, () => callback(resp));\r\n\r\n\t\t\t\t\tresponseSubject.next(resp);\r\n\r\n\t\t\t\t\tresponseSubject.complete();\r\n\t\t\t\t},\r\n\t\t\t\terror: err => responseSubject.error(err),\r\n\t\t\t\tcomplete: () => responseSubject.complete(),\r\n\t\t\t});\r\n\r\n\t\treturn responseSubject.asObservable();\r\n\t}\r\n\r\n\t/**\r\n\t * Public method to perform a POST request.\r\n\t * - Supports legacy callback usage.\r\n\t * - Returns an Observable for reactive programming.\r\n\t */\r\n\tpost(url: string, doc: any, callback = (resp: any) => {}, opts: any = {}): Observable<any> {\r\n\t\treturn this._post(url, doc, callback, opts);\r\n\t}\r\n\r\n\t/**\r\n\t * Public method to perform a PUT request.\r\n\t * - Supports legacy callback usage.\r\n\t * - Returns an Observable for reactive programming.\r\n\t */\r\n\tput(url: string, doc: any, callback = (resp: any) => {}, opts: any = {}): Observable<any> {\r\n\t\treturn this._post(url, doc, callback, opts, 'put');\r\n\t}\r\n\r\n\t/**\r\n\t * Public method to perform a PATCH request.\r\n\t * - Supports legacy callback usage.\r\n\t * - Returns an Observable for reactive programming.\r\n\t */\r\n\tpatch(url: string, doc: any, callback = (resp: any) => {}, opts: any = {}): Observable<any> {\r\n\t\treturn this._post(url, doc, callback, opts, 'patch');\r\n\t}\r\n\r\n\t/**\r\n\t * Public method to perform a DELETE request.\r\n\t * - Supports legacy callback usage.\r\n\t * - Returns an Observable for reactive programming.\r\n\t */\r\n\tdelete(url: string, callback = (resp: any) => {}, opts: any = {}): Observable<any> {\r\n\t\treturn this._post(url, null, callback, opts, 'delete');\r\n\t}\r\n\r\n\t/**\r\n\t * Public method to perform a GET request.\r\n\t * - Supports legacy callback usage.\r\n\t * - Returns an Observable for reactive programming.\r\n\t */\r\n\tget(url: string, callback = (resp: any) => {}, opts: any = {}): Observable<any> {\r\n\t\treturn this._post(url, null, callback, opts, 'get');\r\n\t}\r\n\r\n\t// Clear all pending request locks\r\n\tclearLocked() {\r\n\t\tfor (const awaitLocked of this.awaitLocked) {\r\n\t\t\tclearTimeout(awaitLocked);\r\n\t\t}\r\n\t\tthis.awaitLocked = [];\r\n\t}\r\n\r\n\t// Lock the service to prevent multiple simultaneous requests\r\n\tlock() {\r\n\t\tthis.locked = true;\r\n\t}\r\n\r\n\t// Unlock the service to allow new requests\r\n\tunlock() {\r\n\t\tthis.locked = false;\r\n\t}\r\n\r\n\t/**\r\n\t * Handles HTTP errors.\r\n\t * - Calls provided error callback and retries the request if needed.\r\n\t */\r\n\tprivate handleError(callback: any, retry: () => void) {\r\n\t\treturn (error: HttpErrorResponse): Promise<void> => {\r\n\t\t\treturn new Promise(resolve => {\r\n\t\t\t\tthis.err_handle(error, callback, retry);\r\n\t\t\t\tresolve();\r\n\t\t\t});\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * Internal method to trigger error handling callbacks.\r\n\t */\r\n\tprivate err_handle(\r\n\t\terr: HttpErrorResponse,\r\n\t\tnext: (err: HttpErrorResponse) => void,\r\n\t\tretry: () => void,\r\n\t) {\r\n\t\tif (typeof next === 'function') {\r\n\t\t\tnext(err);\r\n\t\t}\r\n\r\n\t\tfor (const callback of this.errors) {\r\n\t\t\tif (typeof callback === 'function') {\r\n\t\t\t\tcallback(err, retry);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t// Placeholder method for handling request preparation (can be customized)\r\n\tprivate prepare_handle(url: string, body: unknown) {}\r\n\r\n\t// Placeholder method for handling the response (can be customized)\r\n\tprivate response_handle(url: string, body: unknown, next: () => void) {\r\n\t\tif (typeof next === 'function') {\r\n\t\t\tnext();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Retrieves a nested object or property from the response based on a dot-separated path.\r\n\t *\r\n\t * @param resp - The response object to retrieve data from.\r\n\t * @param base - A dot-separated string indicating the path to the desired property within the response.\r\n\t *   - Example: `'data.items'` will navigate through `resp.data.items`.\r\n\t *   - If empty, the entire response is returned.\r\n\t * @returns The object or property located at the specified path within the response.\r\n\t */\r\n\tprivate _getObjectToReplace(resp: unknown, base = ''): unknown {\r\n\t\tif (base.includes('.')) {\r\n\t\t\tconst newBase = base.split('');\r\n\r\n\t\t\tconst currentBase: string = newBase.pop() || '';\r\n\r\n\t\t\treturn this._getObjectToReplace(\r\n\t\t\t\t(resp as Record<string, unknown>)[currentBase] || {},\r\n\t\t\t\tnewBase.join('.'),\r\n\t\t\t);\r\n\t\t} else if (base) {\r\n\t\t\treturn (resp as Record<string, unknown>)[base];\r\n\t\t} else {\r\n\t\t\treturn resp;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Sets or replaces a nested object or property in the response based on a dot-separated path.\r\n\t *\r\n\t * @param resp - The response object to modify.\r\n\t * @param base - A dot-separated string indicating the path to the property to replace.\r\n\t *   - Example: `'data.items'` will navigate through `resp.data.items`.\r\n\t * @param doc - The new data or object to set at the specified path.\r\n\t * @returns `void`.\r\n\t */\r\n\tprivate _setObjectToReplace(resp: unknown, base = '', doc: unknown): void {\r\n\t\twhile (base.includes('.')) {\r\n\t\t\tconst newBase = base.split('');\r\n\r\n\t\t\tconst currentBase: string = newBase.pop() || '';\r\n\r\n\t\t\tresp = (resp as Record<string, unknown>)[currentBase] || {};\r\n\r\n\t\t\tbase = newBase.join('.');\r\n\t\t}\r\n\r\n\t\t(resp as Record<string, unknown>)[base] = doc;\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a new object containing only specified fields from the input item.\r\n\t *\r\n\t * @param item - The input object to extract fields from.\r\n\t * @param fields - An array of field names to include in the new object.\r\n\t *   - Example: `['id', 'name']` will create a new object with only the `id` and `name` properties from `item`.\r\n\t * @returns A new object containing only the specified fields.\r\n\t */\r\n\tprivate _newDoc(item: unknown, fields: string[]): unknown {\r\n\t\tconst newDoc: Record<string, unknown> = {};\r\n\r\n\t\tfor (const field of fields) {\r\n\t\t\tnewDoc[field] = (item as Record<string, unknown>)[field];\r\n\t\t}\r\n\r\n\t\treturn newDoc;\r\n\t}\r\n}\r\n","import { InjectionToken } from '@angular/core';\r\n\r\nexport type NetworkStatus = 'good' | 'poor' | 'none';\r\n\r\nexport interface NetworkConfig {\r\n\t/** Ordered list of endpoints to probe (first that succeeds wins). */\r\n\tendpoints: string[];\r\n\t/** Periodic re-check interval (ms). */\r\n\tintervalMs: number;\r\n\t/** Per-request timeout (ms). */\r\n\ttimeoutMs: number;\r\n\t/** Latency threshold (ms) to classify as \"good\". */\r\n\tgoodLatencyMs: number;\r\n\t/** Consecutive failures to flip status to \"none\". */\r\n\tmaxConsecutiveFails: number;\r\n}\r\n\r\nexport const DEFAULT_NETWORK_CONFIG: NetworkConfig = {\r\n\tendpoints: [\r\n\t\t'https://api.webart.work/status',\r\n\t\t// Opaque but useful reachability fallbacks:\r\n\t\t'https://www.google.com/generate_204',\r\n\t\t'https://www.gstatic.com/generate_204',\r\n\t\t'https://www.cloudflare.com/cdn-cgi/trace',\r\n\t],\r\n\tintervalMs: 30_000,\r\n\ttimeoutMs: 2_500,\r\n\tgoodLatencyMs: 300,\r\n\tmaxConsecutiveFails: 3,\r\n};\r\n\r\nexport const NETWORK_CONFIG = new InjectionToken<NetworkConfig>('NETWORK_CONFIG', {\r\n\tfactory: () => DEFAULT_NETWORK_CONFIG,\r\n});\r\n","// network.service.ts — Angular 20+ (zoneless) signal-based connectivity checker\r\nimport { isPlatformBrowser } from '@angular/common';\r\nimport { Inject, inject, Injectable, Optional, PLATFORM_ID, signal } from '@angular/core';\r\nimport { Config, CONFIG_TOKEN } from '../interfaces/config.interface';\r\nimport {\r\n\tDEFAULT_NETWORK_CONFIG,\r\n\tNetworkConfig,\r\n\tNetworkStatus,\r\n} from '../interfaces/network.interface';\r\nimport { EmitterService } from './emitter.service';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class NetworkService {\r\n\tprivate readonly _isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\r\n\t/** Internal mutable signals. */\r\n\tprivate _status = signal<NetworkStatus>(this._isBrowser && navigator.onLine ? 'poor' : 'none');\r\n\tprivate _latencyMs = signal<number | null>(null);\r\n\tprivate _isOnline = signal<boolean>(this._isBrowser ? navigator.onLine : false);\r\n\r\n\t/** Public read-only signals. */\r\n\treadonly status = this._status.asReadonly();\r\n\treadonly latencyMs = this._latencyMs.asReadonly();\r\n\treadonly isOnline = this._isOnline.asReadonly();\r\n\r\n\t/** Failure counter to decide \"none\". */\r\n\tprivate _fails = 0;\r\n\r\n\t/**\r\n\t * Creates the network monitor, binds browser/Capacitor events,\r\n\t * performs an immediate check, and starts periodic polling.\r\n\t */\r\n\tconstructor(@Inject(CONFIG_TOKEN) @Optional() config: Config) {\r\n\t\tthis._config = {\r\n\t\t\t...DEFAULT_NETWORK_CONFIG,\r\n\t\t\t...(config.network || ({} as NetworkConfig)),\r\n\t\t};\r\n\r\n\t\tif (!this._isBrowser) return;\r\n\r\n\t\tthis._bindEvents();\r\n\r\n\t\tthis.recheckNow(); // fire once on start\r\n\r\n\t\twindow.setInterval(() => this.recheckNow(), this._config.intervalMs);\r\n\t}\r\n\r\n\t/**\r\n\t * Manually trigger a connectivity check.\r\n\t * - Measures latency against the first reachable endpoint.\r\n\t * - Updates `isOnline`, `latencyMs`, and `status` accordingly.\r\n\t */\r\n\tasync recheckNow(): Promise<void> {\r\n\t\tif (!this._isBrowser) return;\r\n\r\n\t\tconst res = await this._pingAny();\r\n\r\n\t\tif (res.ok && res.latency != null) {\r\n\t\t\tthis._fails = 0;\r\n\r\n\t\t\tthis._latencyMs.set(res.latency);\r\n\r\n\t\t\tthis._isOnline.set(true);\r\n\t\t} else {\r\n\t\t\tthis._fails++;\r\n\r\n\t\t\tthis._latencyMs.set(null);\r\n\t\t\t// `isOnline` may still be true per OS; we let online/offline events keep it in sync.\r\n\t\t}\r\n\r\n\t\tthis._updateClassification();\r\n\t}\r\n\r\n\t// ─────────────────────────── Internals ───────────────────────────\r\n\r\n\t/**\r\n\t * Classifies current state into 'good' | 'poor' | 'none'.\r\n\t * - 'none' if offline or too many consecutive failures.\r\n\t * - 'good' if latency ≤ goodLatencyMs.\r\n\t * - otherwise 'poor'.\r\n\t */\r\n\tprivate _updateClassification(): void {\r\n\t\tif (!this._isOnline() || this._fails >= this._config.maxConsecutiveFails) {\r\n\t\t\tif (this._status() !== 'none') {\r\n\t\t\t\tthis._status.set('none');\r\n\r\n\t\t\t\tthis._emitterService.emit('wacom_offline');\r\n\t\t\t}\r\n\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst l = this._latencyMs();\r\n\r\n\t\tif (l != null && l <= this._config.goodLatencyMs) {\r\n\t\t\tif (this._status() !== 'good') {\r\n\t\t\t\tthis._status.set('good');\r\n\r\n\t\t\t\tthis._emitterService.emit('wacom_online');\r\n\t\t\t}\r\n\t\t} else if (this._status() !== 'poor') {\r\n\t\t\tthis._status.set('poor');\r\n\r\n\t\t\tthis._emitterService.emit('wacom_online');\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Binds browser events that can affect connectivity:\r\n\t * - online/offline (OS connectivity)\r\n\t * - visibilitychange (recheck on focus)\r\n\t * - NetworkInformation 'change' (if supported)\r\n\t */\r\n\tprivate _bindEvents(): void {\r\n\t\tif (!this._isBrowser) return;\r\n\r\n\t\twindow.addEventListener('online', () => {\r\n\t\t\tthis._isOnline.set(true);\r\n\r\n\t\t\tthis.recheckNow();\r\n\t\t});\r\n\r\n\t\twindow.addEventListener('offline', () => {\r\n\t\t\tthis._isOnline.set(false);\r\n\r\n\t\t\tthis._updateClassification();\r\n\t\t});\r\n\r\n\t\t(navigator as any).connection?.addEventListener?.('change', () => this.recheckNow());\r\n\t}\r\n\r\n\t/**\r\n\t * Tries endpoints in order until one responds (CORS or opaque).\r\n\t * Returns success with measured latency, or a failure result.\r\n\t */\r\n\tprivate async _pingAny(): Promise<{ ok: boolean; latency: number | null }> {\r\n\t\tif (!this._isBrowser) return { ok: false, latency: null };\r\n\r\n\t\tfor (const url of this._config.endpoints) {\r\n\t\t\tconst noCors = !url.includes('api.webart.work'); // treat public fallbacks as opaque checks\r\n\r\n\t\t\tconst r = await this._measure(url, this._config.timeoutMs, noCors).catch(() => null);\r\n\r\n\t\t\tif (r?.ok) return r;\r\n\t\t}\r\n\r\n\t\treturn { ok: false, latency: null };\r\n\t}\r\n\r\n\t/**\r\n\t * Measures a single fetch:\r\n\t * - Appends a timestamp to bypass caches.\r\n\t * - Uses `no-store` to avoid intermediaries caching.\r\n\t * - When `noCors` is true, uses `mode:'no-cors'` and treats a resolved fetch as reachable.\r\n\t */\r\n\tprivate async _measure(\r\n\t\turl: string,\r\n\t\ttimeoutMs: number,\r\n\t\tnoCors = false,\r\n\t): Promise<{ ok: boolean; latency: number | null }> {\r\n\t\tconst ctrl = new AbortController();\r\n\t\tconst timer = setTimeout(() => ctrl.abort(), timeoutMs);\r\n\t\tconst t0 = performance.now();\r\n\r\n\t\ttry {\r\n\t\t\tconst res = await fetch(url + (url.includes('?') ? '&' : '?') + 't=' + Date.now(), {\r\n\t\t\t\tmethod: 'GET',\r\n\t\t\t\tcache: 'no-store',\r\n\t\t\t\tcredentials: 'omit',\r\n\t\t\t\tsignal: ctrl.signal,\r\n\t\t\t\tmode: noCors ? 'no-cors' : 'cors',\r\n\t\t\t});\r\n\r\n\t\t\tclearTimeout(timer);\r\n\r\n\t\t\tconst latency = Math.round(performance.now() - t0);\r\n\r\n\t\t\t// In no-cors, Response is opaque; treat as success if the fetch resolved.\r\n\t\t\tconst ok = noCors ? true : res.ok;\r\n\r\n\t\t\treturn { ok, latency };\r\n\t\t} catch {\r\n\t\t\tclearTimeout(timer);\r\n\r\n\t\t\treturn { ok: false, latency: null };\r\n\t\t}\r\n\t}\r\n\r\n\tprivate _config: NetworkConfig;\r\n\r\n\tprivate _emitterService = inject(EmitterService);\r\n}\r\n","import { isPlatformBrowser } from '@angular/common';\r\nimport { Inject, Injectable, Optional, PLATFORM_ID, inject } from '@angular/core';\r\nimport { CONFIG_TOKEN, Config, DEFAULT_CONFIG } from '../interfaces/config.interface';\r\nimport { StoreConfig, StoreOptions } from './store.interface';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root',\r\n})\r\nexport class StoreService {\r\n\tprivate readonly _isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\r\n\tprivate _prefix = '';\r\n\tprivate _config: StoreConfig;\r\n\r\n\tconstructor(@Inject(CONFIG_TOKEN) @Optional() config: Config) {\r\n\t\tthis._config = {\r\n\t\t\t...DEFAULT_CONFIG,\r\n\t\t\t...(config?.store || {}),\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * Sets the prefix for storage keys.\r\n\t */\r\n\tsetPrefix(prefix: string): void {\r\n\t\tthis._prefix = prefix;\r\n\t}\r\n\r\n\t/**\r\n\t * Stores a raw string value.\r\n\t */\r\n\tasync set(key: string, value: string, options?: StoreOptions): Promise<boolean> {\r\n\t\tkey = this._applyPrefix(key);\r\n\r\n\t\ttry {\r\n\t\t\tif (this._config.set) {\r\n\t\t\t\tawait this._config.set(key, value, () => options?.onSuccess?.(), options?.onError);\r\n\t\t\t} else {\r\n\t\t\t\tif (!this._isBrowser) {\r\n\t\t\t\t\toptions?.onSuccess?.();\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlocalStorage.setItem(key, value);\r\n\t\t\t\toptions?.onSuccess?.();\r\n\t\t\t}\r\n\r\n\t\t\treturn true;\r\n\t\t} catch (err) {\r\n\t\t\tconsole.error(err);\r\n\t\t\toptions?.onError?.(err);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Retrieves a raw string value.\r\n\t */\r\n\tasync get(key: string, options?: StoreOptions<string>): Promise<string | null> {\r\n\t\tkey = this._applyPrefix(key);\r\n\r\n\t\ttry {\r\n\t\t\tif (this._config.get) {\r\n\t\t\t\tconst value = await this._config.get(\r\n\t\t\t\t\tkey,\r\n\t\t\t\t\t(val: string) => options?.onSuccess?.(val ?? null),\r\n\t\t\t\t\toptions?.onError,\r\n\t\t\t\t);\r\n\r\n\t\t\t\treturn value ?? null;\r\n\t\t\t}\r\n\r\n\t\t\tif (!this._isBrowser) {\r\n\t\t\t\toptions?.onSuccess?.(null);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\r\n\t\t\tconst value = localStorage.getItem(key);\r\n\r\n\t\t\toptions?.onSuccess?.(value ?? null);\r\n\r\n\t\t\treturn value ?? null;\r\n\t\t} catch (err) {\r\n\t\t\tconsole.error(err);\r\n\t\t\toptions?.onError?.(err);\r\n\t\t\treturn null;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Stores a JSON value safely.\r\n\t */\r\n\tasync setJson<T>(key: string, value: T, options?: StoreOptions): Promise<boolean> {\r\n\t\treturn this.set(key, JSON.stringify(value), options);\r\n\t}\r\n\r\n\t/**\r\n\t * Retrieves a JSON value safely (auto-heals broken data).\r\n\t */\r\n\tasync getJson<T = unknown>(key: string, options?: StoreOptions<T>): Promise<T | null> {\r\n\t\tconst clearOnError = options?.clearOnError ?? true;\r\n\r\n\t\tconst raw = await this.get(key, {\r\n\t\t\tonError: options?.onError,\r\n\t\t});\r\n\r\n\t\tif (raw === null || raw.trim() === '') {\r\n\t\t\tconst fallback = options?.defaultValue ?? null;\r\n\t\t\toptions?.onSuccess?.(fallback);\r\n\t\t\treturn fallback;\r\n\t\t}\r\n\r\n\t\ttry {\r\n\t\t\tconst parsed = JSON.parse(raw) as T;\r\n\r\n\t\t\toptions?.onSuccess?.(parsed);\r\n\r\n\t\t\treturn parsed;\r\n\t\t} catch (err) {\r\n\t\t\tconsole.error(raw, err);\r\n\t\t\toptions?.onError?.(err);\r\n\r\n\t\t\tif (clearOnError) {\r\n\t\t\t\tawait this.remove(key);\r\n\t\t\t}\r\n\r\n\t\t\tconst fallback = options?.defaultValue ?? null;\r\n\t\t\toptions?.onSuccess?.(fallback);\r\n\r\n\t\t\treturn fallback;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Removes a single key.\r\n\t */\r\n\tasync remove(key: string, options?: StoreOptions): Promise<boolean> {\r\n\t\tkey = this._applyPrefix(key);\r\n\r\n\t\ttry {\r\n\t\t\tif (this._config.remove) {\r\n\t\t\t\treturn await this._config.remove(\r\n\t\t\t\t\tkey,\r\n\t\t\t\t\t() => options?.onSuccess?.(),\r\n\t\t\t\t\toptions?.onError,\r\n\t\t\t\t);\r\n\t\t\t}\r\n\r\n\t\t\tif (!this._isBrowser) {\r\n\t\t\t\toptions?.onSuccess?.();\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\r\n\t\t\tlocalStorage.removeItem(key);\r\n\t\t\toptions?.onSuccess?.();\r\n\r\n\t\t\treturn true;\r\n\t\t} catch (err) {\r\n\t\t\tconsole.error(err);\r\n\t\t\toptions?.onError?.(err);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Clears all storage.\r\n\t */\r\n\tasync clear(options?: StoreOptions): Promise<boolean> {\r\n\t\ttry {\r\n\t\t\tif (this._config.clear) {\r\n\t\t\t\tawait this._config.clear();\r\n\t\t\t} else {\r\n\t\t\t\tif (!this._isBrowser) {\r\n\t\t\t\t\toptions?.onSuccess?.();\r\n\t\t\t\t\treturn true;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tlocalStorage.clear();\r\n\t\t\t}\r\n\r\n\t\t\toptions?.onSuccess?.();\r\n\r\n\t\t\treturn true;\r\n\t\t} catch (err) {\r\n\t\t\tconsole.error(err);\r\n\t\t\toptions?.onError?.(err);\r\n\t\t\treturn false;\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Applies configured prefixes to key.\r\n\t */\r\n\tprivate _applyPrefix(key: string): string {\r\n\t\tif (this._config.prefix) {\r\n\t\t\tkey = this._config.prefix + key;\r\n\t\t}\r\n\r\n\t\tif (this._prefix) {\r\n\t\t\tkey = this._prefix + key;\r\n\t\t}\r\n\r\n\t\treturn key;\r\n\t}\r\n}\r\n","import { isPlatformBrowser } from '@angular/common';\r\nimport { inject, PLATFORM_ID, signal, WritableSignal } from '@angular/core';\r\nimport { defer, from, Observable, switchMap } from 'rxjs';\r\nimport { CoreService } from '../core/core.service';\r\nimport { EmitterService } from '../services/emitter.service';\r\nimport { HttpService } from '../services/http.service';\r\nimport { NetworkService } from '../services/network.service';\r\nimport { StoreService } from '../store/store.service';\r\nimport { CrudConfig, CrudDocument, CrudOptions, GetConfig } from './crud.interface';\r\n\r\n/**\r\n * Abstract class representing a CRUD (Create, Read, Update, Delete) service.\r\n *\r\n * This class provides methods for managing documents, interacting with an API,\r\n * and storing/retrieving data from local storage. It is designed to be extended\r\n * for specific document types.\r\n *\r\n * @template Document - The type of the document the service handles.\r\n */\r\nexport abstract class CrudService<Document extends CrudDocument<Document>> {\r\n\tprivate readonly _isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\t/**\r\n\t * Base URL for the API collection associated with this service.\r\n\t */\r\n\tprivate _url = '/api/';\r\n\r\n\t/**\r\n\t * In-memory cache with all documents currently known by the service.\r\n\t */\r\n\tprivate _docs: Document[] = [];\r\n\r\n\t/**\r\n\t * Number of documents per page for paginated `get()` calls.\r\n\t */\r\n\tprivate _perPage = 20;\r\n\r\n\t/**\r\n\t * Registered callbacks that recompute filtered document views.\r\n\t */\r\n\tprivate _filteredDocumentsCallbacks: (() => void)[] = [];\r\n\r\n\t/**\r\n\t * HTTP client wrapper used for API communication.\r\n\t */\r\n\tprotected __httpService = inject(HttpService);\r\n\r\n\t/**\r\n\t * Key–value storage service used to persist documents locally.\r\n\t */\r\n\tprotected __storeService = inject(StoreService);\r\n\r\n\t/**\r\n\t * Core helper service with utility methods (copy, debounce, toSignal, etc.).\r\n\t */\r\n\tprotected __coreService = inject(CoreService);\r\n\r\n\t/**\r\n\t * Global event bus for cross-service communication.\r\n\t */\r\n\tprotected __emitterService = inject(EmitterService);\r\n\r\n\t/**\r\n\t * Network status service used to queue work while offline.\r\n\t */\r\n\tprotected __networkService = inject(NetworkService);\r\n\r\n\t/**\r\n\t * Emits once when documents are restored from local storage on startup.\r\n\t */\r\n\tloaded: Observable<unknown>;\r\n\r\n\t/**\r\n\t * Emits once when the initial `get()` (without page param) completes.\r\n\t */\r\n\tgetted: Observable<unknown>;\r\n\r\n\tconstructor(private _config: CrudConfig<Document>) {\r\n\t\tthis._config.signalFields = this._config.signalFields || {};\r\n\r\n\t\tthis._url += this._config.name;\r\n\r\n\t\tthis.loaded = this.__emitterService.onComplete(this._config.name + '_loaded');\r\n\r\n\t\tthis.getted = this.__emitterService.onComplete(this._config.name + '_getted');\r\n\r\n\t\tif (this._config.unauthorized) {\r\n\t\t\tthis.restoreDocs();\r\n\t\t} else if (this._isBrowser && localStorage.getItem('waw_user')) {\r\n\t\t\tconst user = JSON.parse(localStorage.getItem('waw_user') as string);\r\n\r\n\t\t\tif (user._id === localStorage.getItem(this._config.name + 'waw_user_id')) {\r\n\t\t\t\tthis.restoreDocs();\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tthis.__emitterService.on('wipe').subscribe((): void => {\r\n\t\t\tthis.clearDocs();\r\n\r\n\t\t\tthis._filterDocuments();\r\n\t\t});\r\n\r\n\t\tthis.__emitterService.on('wacom_online').subscribe(() => {\r\n\t\t\tfor (const callback of this._onOnline) {\r\n\t\t\t\tcallback();\r\n\t\t\t}\r\n\r\n\t\t\tthis._onOnline.length = 0;\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Cache of per-document signals indexed by document _id.\r\n\t * Prevents creating multiple signals for the same document.\r\n\t */\r\n\tprivate _signal: Record<string, WritableSignal<Document>> = {};\r\n\r\n\t/**\r\n\t * Cache of per (field,value) lists of document signals.\r\n\t * Key format: `${field}_${JSON.stringify(value)}`.\r\n\t */\r\n\tprivate _signals: Record<string, WritableSignal<WritableSignal<Document>[]>> = {};\r\n\r\n\t/**\r\n\t * Cache of per-field maps: fieldValue -> array of document signals.\r\n\t */\r\n\tprivate _fieldSignals: Record<\r\n\t\tstring,\r\n\t\tWritableSignal<Record<string, WritableSignal<Document>[]>>\r\n\t> = {};\r\n\r\n\t/**\r\n\t * Returns a WritableSignal for a document by _id, creating it if absent.\r\n\t * Caches the signal to avoid redundant instances and initializes it\r\n\t * with the current snapshot of the document.\r\n\t * Work very carefully with this and localId, better avoid such flows.\r\n\t *\r\n\t * @param _id - Document identifier or a document instance.\r\n\t */\r\n\tgetSignal(_id: string | Document) {\r\n\t\tif (typeof _id !== 'string') {\r\n\t\t\t_id = this._id(_id);\r\n\t\t}\r\n\r\n\t\t// Reuse existing signal if present\r\n\t\tif (this._signal[_id]) {\r\n\t\t\treturn this._signal[_id];\r\n\t\t}\r\n\r\n\t\t// Always base the signal on the current canonical doc()\r\n\t\tconst doc = this.doc(_id);\r\n\r\n\t\tthis._signal[_id] = this.__coreService.toSignal(\r\n\t\t\tdoc,\r\n\t\t\tthis._config.signalFields,\r\n\t\t) as WritableSignal<Document>;\r\n\r\n\t\treturn this._signal[_id];\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a signal with an array of document signals that match\r\n\t * a given field/value pair.\r\n\t *\r\n\t * Example:\r\n\t *   const activitiesSig = service.getSignals('userId', currentUserId);\r\n\t */\r\n\tgetSignals(field: string, value: unknown) {\r\n\t\tconst id = field + '_' + JSON.stringify(value);\r\n\r\n\t\tif (!this._signals[id]) {\r\n\t\t\tthis._signals[id] = signal<WritableSignal<Document>[]>(this._getSignals(id));\r\n\t\t}\r\n\r\n\t\treturn this._signals[id];\r\n\t}\r\n\r\n\t/**\r\n\t * Builds the array of document signals for a given (field,value) key.\r\n\t * Only documents with a real _id are included.\r\n\t */\r\n\tprivate _getSignals(id: string): WritableSignal<Document>[] {\r\n\t\tconst sep = id.indexOf('_');\r\n\t\tif (sep === -1) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\tconst field = id.slice(0, sep) as keyof Document;\r\n\t\tconst valueJson = id.slice(sep + 1);\r\n\r\n\t\tconst list: WritableSignal<Document>[] = [];\r\n\r\n\t\tfor (const doc of this.getDocs()) {\r\n\t\t\tif (JSON.stringify(doc[field] as unknown) !== valueJson) {\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\r\n\t\t\tconst docId = this._id(doc);\r\n\t\t\tif (!docId) continue;\r\n\r\n\t\t\tlist.push(this.getSignal(docId));\r\n\t\t}\r\n\r\n\t\treturn list;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns a signal with a map: fieldValue -> array of document signals.\r\n\t *\r\n\t * Example:\r\n\t *   const byStatusSig = service.getFieldSignals('status');\r\n\t *   byStatusSig() might be { active: [sig1, sig2], draft: [sig3] }.\r\n\t */\r\n\tgetFieldSignals(field: string) {\r\n\t\tif (!this._fieldSignals[field]) {\r\n\t\t\tthis._fieldSignals[field] = signal<Record<string, WritableSignal<Document>[]>>(\r\n\t\t\t\tthis._getFieldSignals(field),\r\n\t\t\t);\r\n\t\t}\r\n\r\n\t\treturn this._fieldSignals[field];\r\n\t}\r\n\r\n\t/**\r\n\t * Builds the map for a given field.\r\n\t * Only documents with a real _id are included.\r\n\t */\r\n\tprivate _getFieldSignals(field: string): Record<string, WritableSignal<Document>[]> {\r\n\t\tconst byFields: Record<string, WritableSignal<Document>[]> = {};\r\n\r\n\t\tfor (const doc of this.getDocs()) {\r\n\t\t\tconst docId = this._id(doc);\r\n\t\t\tif (!docId) continue;\r\n\r\n\t\t\tconst value = String(doc[field as keyof Document]);\r\n\r\n\t\t\tif (!byFields[value]) {\r\n\t\t\t\tbyFields[value] = [];\r\n\t\t\t}\r\n\r\n\t\t\tbyFields[value].push(this.getSignal(docId));\r\n\t\t}\r\n\r\n\t\treturn byFields;\r\n\t}\r\n\r\n\t/**\r\n\t * Clears cached document signals except those explicitly preserved.\r\n\t * Useful when changing routes or contexts to reduce memory.\r\n\t *\r\n\t * @param exceptIds - List of ids whose signals should be kept.\r\n\t */\r\n\tremoveSignals(exceptIds: string[] = []) {\r\n\t\tfor (const _id in this._signal) {\r\n\t\t\tif (!exceptIds.includes(_id)) {\r\n\t\t\t\tdelete this._signal[_id];\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Restores documents from local storage (if present) and syncs\r\n\t * all existing signals with the restored data.\r\n\t */\r\n\tasync restoreDocs() {\r\n\t\tconst docs = await this.__storeService.getJson<Document[]>('docs_' + this._config.name);\r\n\r\n\t\tif (docs?.length) {\r\n\t\t\tthis._docs.length = 0;\r\n\r\n\t\t\tthis._docs.push(...docs);\r\n\r\n\t\t\tthis._filterDocuments();\r\n\r\n\t\t\tfor (const doc of this._docs) {\r\n\t\t\t\tif (doc.__deleted) {\r\n\t\t\t\t\tthis.delete(doc, doc.__options?.['delete'] || {});\r\n\t\t\t\t} else if (!doc._id) {\r\n\t\t\t\t\tthis.create(doc, doc.__options?.['create'] || {});\r\n\t\t\t\t} else if (doc.__modified?.length) {\r\n\t\t\t\t\tfor (const id of doc.__modified) {\r\n\t\t\t\t\t\tif (id.startsWith('up')) {\r\n\t\t\t\t\t\t\tthis.update(doc, doc.__options?.[id] || {});\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tthis.unique(doc, doc.__options?.[id] || {});\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tthis.__emitterService.complete(this._config.name + '_loaded', this._docs);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Saves the current set of documents to local storage.\r\n\t */\r\n\tsetDocs(): void {\r\n\t\tthis.__storeService.setJson<Document[]>('docs_' + this._config.name, this._docs);\r\n\t}\r\n\r\n\t/**\r\n\t * Retrieves the current list of documents.\r\n\t *\r\n\t * @returns The list of documents.\r\n\t */\r\n\tgetDocs(filter: (doc: Document) => boolean = () => true): Document[] {\r\n\t\treturn this._docs.filter(filter);\r\n\t}\r\n\r\n\t/**\r\n\t * Retrieves the first document that matches the given predicate.\r\n\t *\r\n\t * @param find - Predicate used to locate a specific document.\r\n\t */\r\n\tgetDoc(find: (doc: Document) => boolean): Document | undefined {\r\n\t\treturn this._docs.find(find);\r\n\t}\r\n\r\n\t/**\r\n\t * Clears the current list of documents, persists the empty state\r\n\t * and recomputes all derived signals.\r\n\t *\r\n\t * Empties the internal documents array and saves the updated state to local storage.\r\n\t */\r\n\tclearDocs(): void {\r\n\t\tthis._docs.splice(0, this._docs.length);\r\n\r\n\t\tthis.setDocs();\r\n\r\n\t\tthis._updateSignals();\r\n\t}\r\n\r\n\t/**\r\n\t * Adds multiple documents to the service and saves them to local storage.\r\n\t *\r\n\t * @param docs - An array of documents to add.\r\n\t */\r\n\taddDocs(docs: Document[]): void {\r\n\t\tif (Array.isArray(docs)) {\r\n\t\t\tfor (const doc of docs) {\r\n\t\t\t\tthis.addDoc(doc);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Adds a single document to the service. If it already exists, it will be updated.\r\n\t *\r\n\t * @param doc - The document to add.\r\n\t */\r\n\taddDoc(doc: Document): void {\r\n\t\tif (this._config.replace) {\r\n\t\t\tthis._config.replace(doc);\r\n\t\t}\r\n\r\n\t\tconst existingDoc = this._docs.find(\r\n\t\t\td =>\r\n\t\t\t\t(this._id(doc) && this._id(d) === this._id(doc)) ||\r\n\t\t\t\t(doc._localId && d._localId === doc._localId),\r\n\t\t);\r\n\r\n\t\tif (existingDoc) {\r\n\t\t\tthis.__coreService.copy(doc, existingDoc);\r\n\t\t\tthis.__coreService.copy(existingDoc, doc);\r\n\t\t\tthis._syncSignalForDoc(existingDoc);\r\n\t\t} else {\r\n\t\t\tthis._docs.push(doc);\r\n\t\t\tthis._syncSignalForDoc(doc);\r\n\t\t}\r\n\r\n\t\tthis.setDocs();\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a new document with a temporary ID and status flags.\r\n\t *\r\n\t * @param doc - Optional base document to use for the new document.\r\n\t * @returns A new document instance with default properties.\r\n\t */\r\n\tnew(doc: Document = {} as Document): Document {\r\n\t\treturn {\r\n\t\t\t...doc,\r\n\t\t\t_id: undefined,\r\n\t\t\t_localId: this._localId(),\r\n\t\t\t__created: false,\r\n\t\t\t__modified: false,\r\n\t\t} as Document;\r\n\t}\r\n\r\n\t/**\r\n\t * Retrieves a document by its unique ID or creates a new one if it doesn't exist.\r\n\t *\r\n\t * @param _id - The document ID to search for.\r\n\t * @returns The found document or a new document if not found.\r\n\t */\r\n\tdoc(_id: string): Document {\r\n\t\t// If we already have a signal for this id, use its current value\r\n\t\tif (this._signal[_id]) {\r\n\t\t\treturn this._signal[_id]();\r\n\t\t}\r\n\r\n\t\tlet doc =\r\n\t\t\tthis._docs.find(\r\n\t\t\t\td => this._id(d) === _id || (d._localId && d._localId === Number(_id)),\r\n\t\t\t) || null;\r\n\r\n\t\t// If doc not found, create + push into _docs so it is not detached\r\n\t\tif (!doc) {\r\n\t\t\tdoc = this.new({ _id } as Document);\r\n\t\t\tthis._docs.push(doc);\r\n\t\t\tthis.setDocs();\r\n\t\t}\r\n\r\n\t\tif (!this._docs.find(d => this._id(d) === _id) && !this._fetchingId[_id]) {\r\n\t\t\tthis._fetchingId[_id] = true;\r\n\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tthis.fetch({ _id }).subscribe((_doc: Document) => {\r\n\t\t\t\t\tthis._fetchingId[_id] = false;\r\n\r\n\t\t\t\t\tif (_doc) {\r\n\t\t\t\t\t\tthis.__coreService.copy(_doc, doc as Document);\r\n\t\t\t\t\t\tthis._syncSignalForDoc(doc as Document);\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn doc as Document;\r\n\t}\r\n\r\n\t/**\r\n\t * Sets the number of documents to display per page.\r\n\t *\r\n\t * @param _perPage - Number of documents per page.\r\n\t */\r\n\tsetPerPage(_perPage: number): void {\r\n\t\tthis._perPage = _perPage;\r\n\t}\r\n\r\n\t/**\r\n\t * Middleware hooks (override in child services).\r\n\t * Can be sync or async. Must return the document to be sent.\r\n\t */\r\n\tprotected beforeCreate(\r\n\t\tdoc: Document,\r\n\t\toptions: CrudOptions<Document>,\r\n\t): Document | Promise<Document> {\r\n\t\treturn doc;\r\n\t}\r\n\r\n\tprotected afterCreate(\r\n\t\tresp: unknown,\r\n\t\tdoc: Document,\r\n\t\toptions: CrudOptions<Document>,\r\n\t): void | Promise<void> {}\r\n\r\n\tprotected beforeUpdate(\r\n\t\tdoc: Document,\r\n\t\toptions: CrudOptions<Document>,\r\n\t): Document | Promise<Document> {\r\n\t\treturn doc;\r\n\t}\r\n\r\n\tprotected afterUpdate(\r\n\t\tresp: unknown,\r\n\t\tdoc: Document,\r\n\t\toptions: CrudOptions<Document>,\r\n\t): void | Promise<void> {}\r\n\r\n\tprotected beforeUnique(\r\n\t\tdoc: Document,\r\n\t\toptions: CrudOptions<Document>,\r\n\t): Document | Promise<Document> {\r\n\t\treturn doc;\r\n\t}\r\n\r\n\tprotected afterUnique(\r\n\t\tresp: unknown,\r\n\t\tdoc: Document,\r\n\t\toptions: CrudOptions<Document>,\r\n\t): void | Promise<void> {}\r\n\r\n\tprotected beforeDelete(\r\n\t\tdoc: Document,\r\n\t\toptions: CrudOptions<Document>,\r\n\t): Document | Promise<Document> {\r\n\t\treturn doc;\r\n\t}\r\n\r\n\tprotected afterDelete(\r\n\t\tresp: unknown,\r\n\t\tdoc: Document,\r\n\t\toptions: CrudOptions<Document>,\r\n\t): void | Promise<void> {}\r\n\r\n\tprotected beforeFetch(query: object, options: CrudOptions<Document>): object | Promise<object> {\r\n\t\treturn query;\r\n\t}\r\n\r\n\tprotected afterFetch(\r\n\t\tresp: unknown,\r\n\t\tquery: object,\r\n\t\toptions: CrudOptions<Document>,\r\n\t): void | Promise<void> {}\r\n\r\n\t/**\r\n\t * Small helper to normalize sync/async hooks.\r\n\t */\r\n\tprivate _mw<T>(value: T | Promise<T>): Promise<T> {\r\n\t\treturn Promise.resolve(value);\r\n\t}\r\n\r\n\t/**\r\n\t * Fetches a list of documents from the API with optional pagination.\r\n\t *\r\n\t * @param config - Optional pagination configuration.\r\n\t * @param options - Optional callback and error handling configuration.\r\n\t * @returns An observable that resolves with the list of documents.\r\n\t */\r\n\tget(config: GetConfig = {}, options: CrudOptions<Document> = {}): Observable<Document[]> {\r\n\t\tif (!this.__networkService.isOnline()) {\r\n\t\t\treturn new Observable(observer => {\r\n\t\t\t\tthis._onOnline.push(() => {\r\n\t\t\t\t\tthis.get(config, options).subscribe(observer);\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tif (this._isBrowser && !this._config.unauthorized && localStorage.getItem('waw_user')) {\r\n\t\t\tconst user = JSON.parse(localStorage.getItem('waw_user') as string);\r\n\r\n\t\t\tlocalStorage.setItem(this._config.name + 'waw_user_id', user._id);\r\n\t\t}\r\n\r\n\t\tconst url = `${this._url}/get${options.name || ''}`;\r\n\r\n\t\tconst params =\r\n\t\t\t(typeof config.page === 'number' || config.query ? '?' : '') +\r\n\t\t\t(config.query || '') +\r\n\t\t\t(typeof config.page === 'number'\r\n\t\t\t\t? `&skip=${this._perPage * (config.page - 1)}&limit=${this._perPage}`\r\n\t\t\t\t: '');\r\n\r\n\t\tconst obs = this.__httpService.get(`${url}${params}`);\r\n\r\n\t\tobs.subscribe({\r\n\t\t\tnext: (resp: unknown): void => {\r\n\t\t\t\tresp = resp || [];\r\n\r\n\t\t\t\tif (typeof config.page !== 'number') {\r\n\t\t\t\t\tthis.clearDocs();\r\n\t\t\t\t}\r\n\r\n\t\t\t\t(resp as Document[]).forEach(doc => this.addDoc(doc));\r\n\r\n\t\t\t\tif (options.callback) {\r\n\t\t\t\t\toptions.callback(resp as Document[]);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (typeof config.page !== 'number') {\r\n\t\t\t\t\tthis._filterDocuments();\r\n\r\n\t\t\t\t\tthis.__emitterService.complete(this._config.name + '_getted', this._docs);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tthis.__emitterService.emit(`${this._config.name}_get`, this._docs);\r\n\r\n\t\t\t\tthis.__emitterService.emit(`${this._config.name}_changed`, this._docs);\r\n\t\t\t},\r\n\t\t\terror: (err: unknown): void => {\r\n\t\t\t\tif (options.errCallback) {\r\n\t\t\t\t\toptions.errCallback(err);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t});\r\n\r\n\t\treturn obs as Observable<Document[]>;\r\n\t}\r\n\r\n\t/**\r\n\t * Sends a request to the API to create a new document.\r\n\t *\r\n\t * @param doc - The document to create.\r\n\t * @param options - Optional callback and error handling configuration.\r\n\t * @returns An observable that resolves with the created document, or emits an error if already created.\r\n\t */\r\n\tcreate(\r\n\t\tdoc: Document = {} as Document,\r\n\t\toptions: CrudOptions<Document> = {},\r\n\t): Observable<Document> {\r\n\t\treturn defer(() =>\r\n\t\t\tfrom(this._mw(this.beforeCreate(doc, options))).pipe(\r\n\t\t\t\tswitchMap(mwDoc => {\r\n\t\t\t\t\tdoc = (mwDoc || doc) as Document;\r\n\r\n\t\t\t\t\tif (doc._id) {\r\n\t\t\t\t\t\treturn this.update(doc, options);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdoc._localId ||= this._localId();\r\n\r\n\t\t\t\t\tdoc.__options ||= {};\r\n\t\t\t\t\tdoc.__options['create'] = options;\r\n\r\n\t\t\t\t\tthis.addDoc(doc);\r\n\t\t\t\t\tthis._filterDocuments();\r\n\r\n\t\t\t\t\tif (!this.__networkService.isOnline()) {\r\n\t\t\t\t\t\treturn new Observable(observer => {\r\n\t\t\t\t\t\t\tthis._onOnline.push(() => {\r\n\t\t\t\t\t\t\t\tthis.create(doc, options).subscribe(observer);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (doc.__creating) {\r\n\t\t\t\t\t\treturn new Observable<Document>(observer => {\r\n\t\t\t\t\t\t\tobserver.error(new Error('Document is currently already creating.'));\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (this._config.appId) {\r\n\t\t\t\t\t\tdoc.appId = this._config.appId;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tdoc.__creating = true;\r\n\r\n\t\t\t\t\tconst obs = this.__httpService.post(\r\n\t\t\t\t\t\t`${this._url}/create${options.name || ''}`,\r\n\t\t\t\t\t\tdoc,\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\tobs.subscribe({\r\n\t\t\t\t\t\tnext: async (resp: unknown) => {\r\n\t\t\t\t\t\t\tif (resp) {\r\n\t\t\t\t\t\t\t\tthis.__coreService.copy(resp, doc);\r\n\r\n\t\t\t\t\t\t\t\tthis.addDoc(doc);\r\n\t\t\t\t\t\t\t\tthis._filterDocuments();\r\n\r\n\t\t\t\t\t\t\t\tif (options.callback) options.callback(doc);\r\n\r\n\t\t\t\t\t\t\t\tawait this._mw(this.afterCreate(resp, doc, options));\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tdoc.__creating = false;\r\n\r\n\t\t\t\t\t\t\t\tif (options.errCallback) options.errCallback(resp);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tthis.__emitterService.emit(`${this._config.name}_create`, doc);\r\n\t\t\t\t\t\t\tthis.__emitterService.emit(`${this._config.name}_list`, doc);\r\n\t\t\t\t\t\t\tthis.__emitterService.emit(`${this._config.name}_changed`, doc);\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\terror: (err: unknown) => {\r\n\t\t\t\t\t\t\tdoc.__creating = false;\r\n\t\t\t\t\t\t\tif (options.errCallback) options.errCallback(err);\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\treturn obs as Observable<Document>;\r\n\t\t\t\t}),\r\n\t\t\t),\r\n\t\t) as Observable<Document>;\r\n\t}\r\n\r\n\t/**\r\n\t * Fetches a document from the API based on a query.\r\n\t *\r\n\t * @param query - The query object used to filter documents.\r\n\t * @param options - Optional callback and error handling configuration.\r\n\t * @returns An observable that resolves with the fetched document.\r\n\t */\r\n\tfetch(query: object = {}, options: CrudOptions<Document> = {}): Observable<Document> {\r\n\t\treturn defer(() =>\r\n\t\t\tfrom(this._mw(this.beforeFetch(query, options))).pipe(\r\n\t\t\t\tswitchMap(mwQuery => {\r\n\t\t\t\t\tquery = (mwQuery || query) as object;\r\n\r\n\t\t\t\t\tif (!this.__networkService.isOnline()) {\r\n\t\t\t\t\t\treturn new Observable(observer => {\r\n\t\t\t\t\t\t\tthis._onOnline.push(() => {\r\n\t\t\t\t\t\t\t\tthis.fetch(query, options).subscribe(observer);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tconst obs = this.__httpService.post(\r\n\t\t\t\t\t\t`${this._url}/fetch${options.name || ''}`,\r\n\t\t\t\t\t\tquery,\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\tobs.subscribe({\r\n\t\t\t\t\t\tnext: async (doc: unknown) => {\r\n\t\t\t\t\t\t\tif (doc) {\r\n\t\t\t\t\t\t\t\tthis.addDoc(doc as Document);\r\n\t\t\t\t\t\t\t\tthis._filterDocuments();\r\n\r\n\t\t\t\t\t\t\t\tif (options.callback) options.callback(doc as Document);\r\n\r\n\t\t\t\t\t\t\t\tawait this._mw(this.afterFetch(doc, query, options));\r\n\r\n\t\t\t\t\t\t\t\tthis.__emitterService.emit(`${this._config.name}_changed`, doc);\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tif (options.errCallback) options.errCallback(doc as Document);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\terror: (err: unknown) => {\r\n\t\t\t\t\t\t\tif (options.errCallback) options.errCallback(err);\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\treturn obs as Observable<Document>;\r\n\t\t\t\t}),\r\n\t\t\t),\r\n\t\t) as Observable<Document>;\r\n\t}\r\n\r\n\t/**\r\n\t * Updates a document after a specified delay and returns an observable.\r\n\t *\r\n\t * @param doc - The document to update.\r\n\t * @param options - Optional callback and error handling configuration.\r\n\t * @returns An observable that emits the updated document.\r\n\t */\r\n\tupdateAfterWhile(doc: Document, options: CrudOptions<Document> = {}): Observable<Document> {\r\n\t\treturn new Observable<Document>(observer => {\r\n\t\t\tthis.__coreService.afterWhile(this._id(doc), () => {\r\n\t\t\t\tthis.update(doc, options).subscribe({\r\n\t\t\t\t\tnext: updatedDoc => {\r\n\t\t\t\t\t\tobserver.next(updatedDoc); // Emit the updated document\r\n\t\t\t\t\t},\r\n\t\t\t\t\terror: err => {\r\n\t\t\t\t\t\tobserver.error(err); // Forward the error\r\n\t\t\t\t\t},\r\n\t\t\t\t\tcomplete: () => {\r\n\t\t\t\t\t\tobserver.complete(); // Complete the observable\r\n\t\t\t\t\t},\r\n\t\t\t\t});\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\t/**\r\n\t * Updates a document in the API.\r\n\t *\r\n\t * @param doc - The document to update.\r\n\t * @param options - Optional callback and error handling configuration.\r\n\t * @returns An observable that resolves with the updated document.\r\n\t */\r\n\tupdate(doc: Document, options: CrudOptions<Document> = {}): Observable<Document> {\r\n\t\treturn defer(() =>\r\n\t\t\tfrom(this._mw(this.beforeUpdate(doc, options))).pipe(\r\n\t\t\t\tswitchMap(mwDoc => {\r\n\t\t\t\t\tdoc = (mwDoc || doc) as Document;\r\n\r\n\t\t\t\t\tthis._updateModified(doc, 'up' + (options.name || ''), options);\r\n\r\n\t\t\t\t\tif (!this.__networkService.isOnline()) {\r\n\t\t\t\t\t\treturn new Observable(observer => {\r\n\t\t\t\t\t\t\tthis._onOnline.push(() => {\r\n\t\t\t\t\t\t\t\tthis.update(doc, options).subscribe(observer);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tconst obs = this.__httpService.post(\r\n\t\t\t\t\t\t`${this._url}/update${options.name || ''}`,\r\n\t\t\t\t\t\tdoc,\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\tobs.subscribe({\r\n\t\t\t\t\t\tnext: async (resp: unknown) => {\r\n\t\t\t\t\t\t\tif (resp) {\r\n\t\t\t\t\t\t\t\tthis._removeModified(doc, 'up' + (options.name || ''));\r\n\r\n\t\t\t\t\t\t\t\tconst storedDoc = this.doc(doc._id as string);\r\n\r\n\t\t\t\t\t\t\t\tthis.__coreService.copy(resp, storedDoc);\r\n\t\t\t\t\t\t\t\tthis.__coreService.copy(resp, doc);\r\n\r\n\t\t\t\t\t\t\t\tthis._syncSignalForDoc(storedDoc);\r\n\r\n\t\t\t\t\t\t\t\tif (options.callback) options.callback(doc);\r\n\r\n\t\t\t\t\t\t\t\tawait this._mw(this.afterUpdate(resp, doc, options));\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tif (options.errCallback) options.errCallback(resp);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tthis.__emitterService.emit(`${this._config.name}_update`, doc);\r\n\t\t\t\t\t\t\tthis.__emitterService.emit(`${this._config.name}_changed`, doc);\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\terror: (err: unknown) => {\r\n\t\t\t\t\t\t\tif (options.errCallback) options.errCallback(err);\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\treturn obs as Observable<Document>;\r\n\t\t\t\t}),\r\n\t\t\t),\r\n\t\t) as Observable<Document>;\r\n\t}\r\n\r\n\t/**\r\n\t * Unique update a document field in the API.\r\n\t *\r\n\t * @param doc - The document to update.\r\n\t * @param options - Optional callback and error handling configuration.\r\n\t * @returns An observable that resolves with the updated document.\r\n\t */\r\n\tunique(doc: Document, options: CrudOptions<Document> = {}): Observable<Document> {\r\n\t\treturn defer(() =>\r\n\t\t\tfrom(this._mw(this.beforeUnique(doc, options))).pipe(\r\n\t\t\t\tswitchMap(mwDoc => {\r\n\t\t\t\t\tdoc = (mwDoc || doc) as Document;\r\n\r\n\t\t\t\t\tthis._updateModified(doc, 'un' + (options.name || ''), options);\r\n\r\n\t\t\t\t\tif (!this.__networkService.isOnline()) {\r\n\t\t\t\t\t\treturn new Observable(observer => {\r\n\t\t\t\t\t\t\tthis._onOnline.push(() => {\r\n\t\t\t\t\t\t\t\tthis.unique(doc, options).subscribe(observer);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tconst obs = this.__httpService.post(\r\n\t\t\t\t\t\t`${this._url}/unique${options.name || ''}`,\r\n\t\t\t\t\t\tdoc,\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\tobs.subscribe({\r\n\t\t\t\t\t\tnext: async (resp: unknown) => {\r\n\t\t\t\t\t\t\tif (resp) {\r\n\t\t\t\t\t\t\t\tthis._removeModified(doc, 'un' + (options.name || ''));\r\n\r\n\t\t\t\t\t\t\t\t(doc as any)[options.name as string] = resp;\r\n\r\n\t\t\t\t\t\t\t\tthis._syncSignalForDoc(doc);\r\n\r\n\t\t\t\t\t\t\t\tif (options.callback) options.callback(doc);\r\n\r\n\t\t\t\t\t\t\t\tawait this._mw(this.afterUnique(resp, doc, options));\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tif (options.errCallback) options.errCallback(resp);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tthis.__emitterService.emit(`${this._config.name}_unique`, doc);\r\n\t\t\t\t\t\t\tthis.__emitterService.emit(`${this._config.name}_changed`, doc);\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\terror: (err: unknown) => {\r\n\t\t\t\t\t\t\tif (options.errCallback) options.errCallback(err);\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\treturn obs as Observable<Document>;\r\n\t\t\t\t}),\r\n\t\t\t),\r\n\t\t) as Observable<Document>;\r\n\t}\r\n\r\n\t/**\r\n\t * Deletes a document from the API.\r\n\t *\r\n\t * @param doc - The document to delete.\r\n\t * @param options - Optional callback and error handling configuration.\r\n\t * @returns An observable that resolves with the deleted document.\r\n\t */\r\n\tdelete(doc: Document, options: CrudOptions<Document> = {}): Observable<Document> {\r\n\t\treturn defer(() =>\r\n\t\t\tfrom(this._mw(this.beforeDelete(doc, options))).pipe(\r\n\t\t\t\tswitchMap(mwDoc => {\r\n\t\t\t\t\tdoc = (mwDoc || doc) as Document;\r\n\r\n\t\t\t\t\tdoc.__deleted = true;\r\n\r\n\t\t\t\t\tdoc.__options ||= {};\r\n\t\t\t\t\tdoc.__options['delete'] = options;\r\n\r\n\t\t\t\t\tthis.addDoc(doc);\r\n\t\t\t\t\tthis._filterDocuments();\r\n\r\n\t\t\t\t\tif (!this.__networkService.isOnline()) {\r\n\t\t\t\t\t\treturn new Observable(observer => {\r\n\t\t\t\t\t\t\tthis._onOnline.push(() => {\r\n\t\t\t\t\t\t\t\tthis.delete(doc, options).subscribe(observer);\r\n\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tconst obs = this.__httpService.post(\r\n\t\t\t\t\t\t`${this._url}/delete${options.name || ''}`,\r\n\t\t\t\t\t\tdoc,\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\tobs.subscribe({\r\n\t\t\t\t\t\tnext: async (resp: unknown) => {\r\n\t\t\t\t\t\t\tif (resp) {\r\n\t\t\t\t\t\t\t\tconst idx = this._docs.findIndex(\r\n\t\t\t\t\t\t\t\t\td => this._id(d) === this._id(doc),\r\n\t\t\t\t\t\t\t\t);\r\n\t\t\t\t\t\t\t\tif (idx !== -1) this._docs.splice(idx, 1);\r\n\r\n\t\t\t\t\t\t\t\tthis.setDocs();\r\n\r\n\t\t\t\t\t\t\t\tthis._syncSignalForDoc({\r\n\t\t\t\t\t\t\t\t\t...doc,\r\n\t\t\t\t\t\t\t\t\t__deleted: true,\r\n\t\t\t\t\t\t\t\t} as Document);\r\n\r\n\t\t\t\t\t\t\t\tthis._filterDocuments();\r\n\r\n\t\t\t\t\t\t\t\tif (options.callback) options.callback(doc);\r\n\r\n\t\t\t\t\t\t\t\tawait this._mw(this.afterDelete(resp, doc, options));\r\n\t\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\t\tif (options.errCallback) options.errCallback(resp);\r\n\t\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\t\tthis.__emitterService.emit(`${this._config.name}_delete`, doc);\r\n\t\t\t\t\t\t\tthis.__emitterService.emit(`${this._config.name}_changed`, doc);\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t\terror: (err: unknown) => {\r\n\t\t\t\t\t\t\tif (options.errCallback) options.errCallback(err);\r\n\t\t\t\t\t\t},\r\n\t\t\t\t\t});\r\n\r\n\t\t\t\t\treturn obs as Observable<Document>;\r\n\t\t\t\t}),\r\n\t\t\t),\r\n\t\t) as Observable<Document>;\r\n\t}\r\n\r\n\t/**\r\n\t * Registers a filtered view of documents and returns the recompute callback.\r\n\t *\r\n\t * The callback is called automatically whenever `_filterDocuments()` runs.\r\n\t */\r\n\tfilteredDocuments(\r\n\t\tstoreObjectOrArray: Record<string, Document[]> | Document[],\r\n\t\tconfig: {\r\n\t\t\tfield?: string | ((doc: Document) => string);\r\n\t\t\tvalid?: (doc: Document) => boolean;\r\n\t\t\tsort?: (a: Document, b: Document) => number;\r\n\t\t\tfiltered?: (storeObjectOrArray: Record<string, Document[]> | Document[]) => void;\r\n\t\t} = {},\r\n\t) {\r\n\t\tconst callback = (): void => {\r\n\t\t\tif (Array.isArray(storeObjectOrArray)) {\r\n\t\t\t\tlet result = this._docs\r\n\t\t\t\t\t.filter(doc => !doc.__deleted)\r\n\t\t\t\t\t.filter(config.valid ?? (() => true));\r\n\r\n\t\t\t\tstoreObjectOrArray.length = 0;\r\n\r\n\t\t\t\tif (typeof config.sort === 'function') {\r\n\t\t\t\t\tresult = result.sort(config.sort);\r\n\t\t\t\t}\r\n\r\n\t\t\t\tstoreObjectOrArray.push(...result);\r\n\t\t\t} else {\r\n\t\t\t\tconst storeObject = storeObjectOrArray as Record<string, Document[]>;\r\n\r\n\t\t\t\t/* remove docs if they were removed */\r\n\t\t\t\tfor (const parentId in storeObject) {\r\n\t\t\t\t\tfor (let i = storeObject[parentId].length - 1; i >= 0; i--) {\r\n\t\t\t\t\t\tconst _field =\r\n\t\t\t\t\t\t\ttypeof config.field === 'function'\r\n\t\t\t\t\t\t\t\t? config.field(storeObject[parentId][i])\r\n\t\t\t\t\t\t\t\t: config.field || 'author';\r\n\t\t\t\t\t\tconst _doc: any = storeObject[parentId][i];\r\n\r\n\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\t!this._docs.find((doc: any) =>\r\n\t\t\t\t\t\t\t\tArray.isArray(doc[_field])\r\n\t\t\t\t\t\t\t\t\t? doc[_field].includes(_doc[this._id(doc)])\r\n\t\t\t\t\t\t\t\t\t: doc[_field] === _doc[this._id(doc)],\r\n\t\t\t\t\t\t\t)\r\n\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\tstoreObject[parentId].splice(i, 1);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/* add docs if they are not added */\r\n\t\t\t\tfor (const doc of this._docs) {\r\n\t\t\t\t\tif (doc.__deleted) continue;\r\n\r\n\t\t\t\t\tconst _field =\r\n\t\t\t\t\t\ttypeof config.field === 'function'\r\n\t\t\t\t\t\t\t? config.field(doc)\r\n\t\t\t\t\t\t\t: config.field || 'author';\r\n\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\ttypeof config.valid === 'function'\r\n\t\t\t\t\t\t\t? !config.valid(doc)\r\n\t\t\t\t\t\t\t: Array.isArray((doc as any)[_field])\r\n\t\t\t\t\t\t\t\t? !(doc as any)[_field]?.length\r\n\t\t\t\t\t\t\t\t: !(doc as any)[_field]\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tcontinue;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (typeof config.field === 'function') {\r\n\t\t\t\t\t\tif (\r\n\t\t\t\t\t\t\tconfig.field(doc) &&\r\n\t\t\t\t\t\t\t!storeObject[(doc as any)[_field]].find(c => c._id === doc._id)\r\n\t\t\t\t\t\t) {\r\n\t\t\t\t\t\t\tstoreObject[(doc as any)[_field]].push(doc);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t} else if (Array.isArray((doc as any)[_field])) {\r\n\t\t\t\t\t\t(doc as any)[_field].forEach((_field: string) => {\r\n\t\t\t\t\t\t\tstoreObject[_field] = storeObject[_field] || [];\r\n\r\n\t\t\t\t\t\t\tif (!storeObject[_field].find(c => c._id === doc._id)) {\r\n\t\t\t\t\t\t\t\tstoreObject[_field].push(doc);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tstoreObject[(doc as any)[_field]] = storeObject[(doc as any)[_field]] || [];\r\n\r\n\t\t\t\t\t\tif (!storeObject[(doc as any)[_field]].find(c => c._id === doc._id)) {\r\n\t\t\t\t\t\t\tstoreObject[(doc as any)[_field]].push(doc);\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\r\n\t\t\t\t/* sort the array's */\r\n\t\t\t\tif (typeof config.sort === 'function') {\r\n\t\t\t\t\tfor (const parentId in storeObject) {\r\n\t\t\t\t\t\tstoreObject[parentId].sort(config.sort);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tconfig.filtered?.(storeObjectOrArray);\r\n\t\t};\r\n\r\n\t\tthis._filteredDocumentsCallbacks.push(callback);\r\n\r\n\t\treturn callback;\r\n\t}\r\n\r\n\t/**\r\n\t * Track pending fetch-by-id requests to avoid duplicate calls.\r\n\t */\r\n\tprivate _fetchingId: Record<string, boolean> = {};\r\n\r\n\t/**\r\n\t * Queue of operations that must be retried when network comes back online.\r\n\t */\r\n\tprivate _onOnline: (() => void)[] = [];\r\n\r\n\t/**\r\n\t * Local counter used to build unique local identifiers together with Date.now().\r\n\t */\r\n\tprivate _randomCount = 0;\r\n\r\n\t/**\r\n\t * Generates a unique ID for a document when using local-only identifiers.\r\n\t *\r\n\t * @returns The unique ID as a number.\r\n\t */\r\n\tprivate _localId() {\r\n\t\treturn Number(Date.now() + '' + this._randomCount++);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the configured identity field for the given document as string.\r\n\t *\r\n\t * @param doc - The document for which to generate the ID.\r\n\t * @returns The unique ID as a string.\r\n\t */\r\n\tprivate _id(doc: Document): string {\r\n\t\treturn (doc as unknown as Record<string, unknown>)[\r\n\t\t\tthis._config._id || '_id'\r\n\t\t]?.toString() as string;\r\n\t}\r\n\r\n\t/**\r\n\t * Executes all registered filter document callbacks and emits a\r\n\t * `<name>_filtered` event.\r\n\t */\r\n\tprivate _filterDocuments(): void {\r\n\t\tfor (const callback of this._filteredDocumentsCallbacks) {\r\n\t\t\tcallback();\r\n\t\t}\r\n\r\n\t\tthis.__emitterService.emit(`${this._config.name}_filtered`);\r\n\t}\r\n\r\n\t/**\r\n\t * Marks a document as modified for a given operation id and\r\n\t * keeps the document in the store until the operation is confirmed.\r\n\t */\r\n\tprivate _updateModified(doc: Document, id: string, options: CrudOptions<Document>) {\r\n\t\tdoc.__modified ||= [];\r\n\r\n\t\tdoc.__options ||= {};\r\n\r\n\t\tdoc.__options[id] = options;\r\n\r\n\t\tif (!doc.__modified.find(m => m === id)) {\r\n\t\t\tdoc.__modified.push(id);\r\n\r\n\t\t\tthis.addDoc(doc);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Removes a modification mark from the document once the\r\n\t * server operation is confirmed.\r\n\t */\r\n\tprivate _removeModified(doc: Document, id: string) {\r\n\t\tdoc.__modified ||= [];\r\n\r\n\t\tif (doc.__modified.find(m => m === id)) {\r\n\t\t\tdoc.__modified.splice(\r\n\t\t\t\tdoc.__modified.findIndex(m => m === id),\r\n\t\t\t\t1,\r\n\t\t\t);\r\n\r\n\t\t\tthis.addDoc(doc);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Syncs a single document's signal (if exists) and refreshes all\r\n\t * derived collections (field/value lists and field maps).\r\n\t */\r\n\tprivate _syncSignalForDoc(doc: Document) {\r\n\t\tconst id = this._id(doc);\r\n\r\n\t\tif (id && this._signal[id]) {\r\n\t\t\tthis._signal[id].set({ ...doc });\r\n\t\t}\r\n\r\n\t\tthis._updateSignals();\r\n\t}\r\n\r\n\t/**\r\n\t * Rebuilds all derived signal collections:\r\n\t *  - all per (field,value) lists of document signals\r\n\t *  - all per-field maps value -> [signals]\r\n\t *\r\n\t * This keeps `getSignals()` and `getFieldSignals()` in sync after\r\n\t * any mutation that touches `_docs`.\r\n\t */\r\n\tprivate _updateSignals() {\r\n\t\t// refresh all (field,value) collections\r\n\t\tfor (const key in this._signals) {\r\n\t\t\tthis._signals[key].set(this._getSignals(key));\r\n\t\t}\r\n\r\n\t\t// refresh all per-field maps\r\n\t\tfor (const field in this._fieldSignals) {\r\n\t\t\tthis._fieldSignals[field].set(this._getFieldSignals(field));\r\n\t\t}\r\n\t}\r\n}\r\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport { Injectable, PLATFORM_ID, inject, signal } from '@angular/core';\r\nimport { ThemeDensity, ThemeMode, ThemeRadius } from './theme.type';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class ThemeService {\r\n\tprivate readonly _doc = inject(DOCUMENT);\r\n\tprivate readonly _isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\r\n\tmode = signal<ThemeMode | undefined>(undefined);\r\n\tmodes = signal<ThemeMode[]>(['light', 'dark']);\r\n\tsetMode(mode: ThemeMode) {\r\n\t\tif (this._isBrowser) {\r\n\t\t\tthis._doc.documentElement.dataset['mode'] = mode;\r\n\t\t\tlocalStorage.setItem('theme.mode', mode);\r\n\t\t}\r\n\t\tthis.mode.set(mode);\r\n\t}\r\n\r\n\tdensity = signal<ThemeDensity | undefined>(undefined);\r\n\tdensities = signal<ThemeDensity[]>(['comfortable', 'compact']);\r\n\tsetDensity(density: ThemeDensity) {\r\n\t\tif (this._isBrowser) {\r\n\t\t\tthis._doc.documentElement.dataset['density'] = density;\r\n\t\t\tlocalStorage.setItem('theme.density', density);\r\n\t\t}\r\n\t\tthis.density.set(density);\r\n\t}\r\n\r\n\tradius = signal<ThemeRadius | undefined>(undefined);\r\n\tradiuses = signal<ThemeRadius[]>(['rounded', 'square']);\r\n\tsetRadius(radius: ThemeRadius) {\r\n\t\tif (this._isBrowser) {\r\n\t\t\tthis._doc.documentElement.dataset['radius'] = radius;\r\n\t\t\tlocalStorage.setItem('theme.radius', radius);\r\n\t\t}\r\n\t\tthis.radius.set(radius);\r\n\t}\r\n\r\n\tthemeIndex = signal<number>(0);\r\n\tnextTheme() {\r\n\t\tconst modes = this.modes().length;\r\n\t\tconst densities = this.densities().length;\r\n\t\tconst radiuses = this.radiuses().length;\r\n\r\n\t\tconst maxIndex = modes * densities * radiuses;\r\n\r\n\t\tconst nextIndex = (this.themeIndex() + 1) % maxIndex;\r\n\t\tthis.themeIndex.set(nextIndex);\r\n\r\n\t\tconst block = densities * radiuses;\r\n\r\n\t\tconst modeIndex = Math.floor(nextIndex / block);\r\n\t\tconst rem = nextIndex % block;\r\n\t\tconst densityIndex = Math.floor(rem / radiuses);\r\n\t\tconst radiusIndex = rem % radiuses;\r\n\r\n\t\tthis.setMode(this.modes()[modeIndex] as ThemeMode);\r\n\t\tthis.setDensity(this.densities()[densityIndex] as ThemeDensity);\r\n\t\tthis.setRadius(this.radiuses()[radiusIndex] as ThemeRadius);\r\n\r\n\t\tif (this._isBrowser) {\r\n\t\t\tlocalStorage.setItem('theme.index', String(nextIndex));\r\n\t\t}\r\n\t}\r\n\r\n\tinit() {\r\n\t\tconst mode = this._isBrowser\r\n\t\t\t? (localStorage.getItem('theme.mode') as ThemeMode) || 'light'\r\n\t\t\t: 'light';\r\n\t\tconst density = this._isBrowser\r\n\t\t\t? (localStorage.getItem('theme.density') as ThemeDensity) || 'comfortable'\r\n\t\t\t: 'comfortable';\r\n\t\tconst radius = this._isBrowser\r\n\t\t\t? (localStorage.getItem('theme.radius') as ThemeRadius) || 'rounded'\r\n\t\t\t: 'rounded';\r\n\r\n\t\tthis.mode.set(mode);\r\n\t\tthis.density.set(density);\r\n\t\tthis.radius.set(radius);\r\n\r\n\t\tthis.themeIndex.set(this._isBrowser ? Number(localStorage.getItem('theme.index')) || 0 : 0);\r\n\r\n\t\tif (this._isBrowser) {\r\n\t\t\tthis._doc.documentElement.dataset['mode'] = mode;\r\n\t\t\tthis._doc.documentElement.dataset['density'] = density;\r\n\t\t\tthis._doc.documentElement.dataset['radius'] = radius;\r\n\t\t}\r\n\t}\r\n}\r\n","/**\r\n * Utility helpers for meta management.\r\n *\r\n * We intentionally treat `undefined` as \"missing\" and everything else as \"provided\".\r\n * This lets callers pass empty strings to intentionally clear a value:\r\n * - isDefined(undefined) -> false  (use defaults)\r\n * - isDefined('')        -> true   (explicitly set empty string)\r\n * - isDefined(null)      -> true   (explicitly provided, will stringify if used)\r\n */\r\nexport const isDefined = (val: unknown): val is Exclude<unknown, undefined> =>\r\n\ttypeof val !== 'undefined';\r\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport { Inject, Injectable, Optional, PLATFORM_ID, inject } from '@angular/core';\r\nimport { Meta, Title } from '@angular/platform-browser';\r\nimport { ActivatedRoute, NavigationEnd, Router } from '@angular/router';\r\nimport { filter } from 'rxjs/operators';\r\nimport { CONFIG_TOKEN, Config, DEFAULT_CONFIG } from '../interfaces/config.interface';\r\nimport { isDefined } from './meta.const';\r\nimport { MetaConfig, MetaDefaults, MetaPage } from './meta.interface';\r\nimport { TagAttr } from './meta.type';\r\n\r\n/**\r\n * Centralized page meta management for SPA navigation.\r\n *\r\n * Goals:\r\n * - Static SEO pages: route-driven meta via `data.meta`\r\n * - Dynamic/id pages: manual meta via `applyMeta(...)`\r\n * - No stale meta: tags set for one page must not \"leak\" to another page\r\n * - Simple inputs: only title/description/image/index/robots (everything else auto-generated)\r\n * - Links handled separately: `setLink({ canonical: '...' })` updates, never duplicates\r\n *\r\n * Generated tags:\r\n * - Title:\r\n *   - <title>\r\n *   - <meta itemprop=\"name\" ...>\r\n *   - <meta property=\"og:title\" ...>\r\n *   - <meta name=\"twitter:title\" ...>\r\n * - Description:\r\n *   - <meta name=\"description\" ...>\r\n *   - <meta itemprop=\"description\" ...>\r\n *   - <meta property=\"og:description\" ...>\r\n *   - <meta name=\"twitter:description\" ...>\r\n * - Image:\r\n *   - <meta itemprop=\"image\" ...>\r\n *   - <meta property=\"og:image\" ...>\r\n *   - <meta name=\"twitter:image:src\" ...>\r\n * - Robots:\r\n *   - <meta name=\"robots\" ...> (derived from `robots` or `index`)\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class MetaService {\r\n\tprivate readonly _isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\r\n\t/**\r\n\t * Effective configuration (from CONFIG_TOKEN + DEFAULT_CONFIG fallback).\r\n\t */\r\n\tprivate _metaConfig: MetaConfig;\r\n\r\n\t/**\r\n\t * Meta tags that are \"owned\" by this service.\r\n\t * We remove these on every `applyMeta()` so stale tags never survive SPA navigation.\r\n\t *\r\n\t * Stored as selectors compatible with Angular Meta.removeTag(), e.g.:\r\n\t * - name=\"description\"\r\n\t * - property=\"og:title\"\r\n\t * - itemprop=\"image\"\r\n\t */\r\n\tprivate _managedTagSelectors = new Set<string>();\r\n\r\n\t/**\r\n\t * Link rels that are managed by this service.\r\n\t * Used to update links without duplicates and optionally remove them via resetLinks().\r\n\t */\r\n\tprivate _managedLinkRels = new Set<string>();\r\n\r\n\tconstructor(\r\n\t\t@Inject(CONFIG_TOKEN) @Optional() private _config: Config,\r\n\t\tprivate _router: Router,\r\n\t\tprivate _activatedRoute: ActivatedRoute,\r\n\t\tprivate _meta: Meta,\r\n\t\tprivate _titleService: Title,\r\n\t) {\r\n\t\tthis._config = this._config || DEFAULT_CONFIG;\r\n\t\tthis._metaConfig = this._config.meta || {};\r\n\r\n\t\t// Recommended default: keep meta in sync with route changes automatically.\r\n\t\tconst applyFromRoutes =\r\n\t\t\t!isDefined(this._metaConfig.applyFromRoutes) || !!this._metaConfig.applyFromRoutes;\r\n\r\n\t\tif (applyFromRoutes) {\r\n\t\t\tthis._router.events.pipe(filter(e => e instanceof NavigationEnd)).subscribe(() => {\r\n\t\t\t\tconst page = this._readDeepestRouteMeta();\r\n\t\t\t\tif (page) this.applyMeta(page);\r\n\t\t\t\telse this.reset();\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Merge and set defaults.\r\n\t *\r\n\t * Defaults are used when a page does not provide a given field.\r\n\t * This affects:\r\n\t * - applyMeta() fallbacks\r\n\t * - reset()\r\n\t */\r\n\tsetDefaults(defaults: MetaDefaults): void {\r\n\t\tthis._metaConfig.defaults = {\r\n\t\t\t...(this._metaConfig.defaults || {}),\r\n\t\t\t...defaults,\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * Apply metadata for the current page.\r\n\t *\r\n\t * Use cases:\r\n\t * - Static SEO pages: route data (`data.meta`) when applyFromRoutes = true\r\n\t * - Dynamic / id pages: call manually after loading entity data\r\n\t *\r\n\t * Rules:\r\n\t * 1) remove tags previously managed by this service\r\n\t * 2) start from defaults\r\n\t * 3) override with page values\r\n\t * 4) generate OG/Twitter/itemprop variants\r\n\t */\r\n\tapplyMeta(page: MetaPage = {}): void {\r\n\t\tif (page.disableUpdate) return;\r\n\r\n\t\t// 1) Clean managed tags to prevent leaks between pages.\r\n\t\tthis._removeManagedTags();\r\n\r\n\t\t// 2) Resolve values with defaults.\r\n\t\tconst defaults = this._metaConfig.defaults || {};\r\n\r\n\t\tconst title = this._resolveTitle(page, defaults);\r\n\t\tconst description = this._resolveValue(page.description, defaults.description);\r\n\t\tconst image = this._resolveValue(page.image, defaults.image);\r\n\t\tconst robots = this._resolveRobots(page, defaults);\r\n\r\n\t\t// 3) Apply generated tags.\r\n\t\tthis._setTitleTriplet(title);\r\n\t\tthis._setDescriptionTriplet(description);\r\n\t\tthis._setImageTriplet(image);\r\n\r\n\t\t// 4) Robots support (index/noindex).\r\n\t\tif (isDefined(robots)) {\r\n\t\t\tthis._updateTag('robots', robots as string, 'name');\r\n\t\t}\r\n\r\n\t\t// Links are intentionally not applied here.\r\n\t\t// Canonical strategy depends on your routing/domain policy, so use setLink(...) explicitly.\r\n\t}\r\n\r\n\t/**\r\n\t * Reset page meta back to defaults.\r\n\t *\r\n\t * Removes all managed tags and re-applies defaults-only meta.\r\n\t */\r\n\treset(): void {\r\n\t\tthis.applyMeta({});\r\n\t}\r\n\r\n\t/**\r\n\t * Sets link tags (canonical, alternate, etc.) without duplicates.\r\n\t *\r\n\t * For each rel:\r\n\t * - if link[rel=rel] exists -> update href\r\n\t * - else -> create it\r\n\t * - if duplicates exist -> remove extras\r\n\t */\r\n\tsetLink(links: Record<string, string>): void {\r\n\t\tif (!this._isBrowser) return;\r\n\t\tif (!links || !Object.keys(links).length) return;\r\n\r\n\t\tfor (const rel of Object.keys(links)) {\r\n\t\t\tconst href = links[rel];\r\n\r\n\t\t\tconst all = Array.from(\r\n\t\t\t\tthis._doc.head.querySelectorAll<HTMLLinkElement>(`link[rel=\"${rel}\"]`),\r\n\t\t\t);\r\n\r\n\t\t\tlet link = all[0];\r\n\t\t\tif (!link) {\r\n\t\t\t\tlink = this._doc.createElement('link');\r\n\t\t\t\tlink.setAttribute('rel', rel);\r\n\t\t\t\tthis._doc.head.appendChild(link);\r\n\t\t\t} else if (all.length > 1) {\r\n\t\t\t\tfor (let i = 1; i < all.length; i++) all[i].remove();\r\n\t\t\t}\r\n\r\n\t\t\tlink.setAttribute('href', href);\r\n\t\t\tthis._managedLinkRels.add(rel);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Removes link tags that were managed by this service via setLink().\r\n\t *\r\n\t * Note:\r\n\t * - Not called by reset() because canonical often should persist for the whole app shell.\r\n\t * - Call explicitly if you want to remove canonical/alternate links.\r\n\t */\r\n\tresetLinks(): void {\r\n\t\tif (!this._isBrowser) return;\r\n\t\tfor (const rel of this._managedLinkRels) {\r\n\t\t\tconst all = Array.from(\r\n\t\t\t\tthis._doc.head.querySelectorAll<HTMLLinkElement>(`link[rel=\"${rel}\"]`),\r\n\t\t\t);\r\n\t\t\tall.forEach(it => it.remove());\r\n\t\t}\r\n\t\tthis._managedLinkRels.clear();\r\n\t}\r\n\r\n\t// ---------------------------------------------------------------------------\r\n\t// Internals: route meta extraction\r\n\t// ---------------------------------------------------------------------------\r\n\r\n\t/**\r\n\t * Reads `data.meta` from the deepest activated route.\r\n\t * This matches the common Angular pattern where child routes override parent routes.\r\n\t */\r\n\tprivate _readDeepestRouteMeta(): MetaPage | null {\r\n\t\tlet route: ActivatedRoute | null = this._activatedRoute;\r\n\r\n\t\twhile (route?.firstChild) route = route.firstChild;\r\n\r\n\t\tconst data: any = route?.snapshot?.data;\r\n\t\tconst meta = data && data['meta'];\r\n\r\n\t\treturn meta || null;\r\n\t}\r\n\r\n\t// ---------------------------------------------------------------------------\r\n\t// Internals: resolving values\r\n\t// ---------------------------------------------------------------------------\r\n\r\n\t/**\r\n\t * Resolves title with optional suffix behavior.\r\n\t */\r\n\tprivate _resolveTitle(page: MetaPage, defaults: MetaDefaults): string {\r\n\t\tlet titleContent = this._resolveValue(page.title, defaults.title) || '';\r\n\r\n\t\tif (this._metaConfig.useTitleSuffix) {\r\n\t\t\tconst suffix = isDefined(page.titleSuffix) ? page.titleSuffix : defaults.titleSuffix;\r\n\t\t\ttitleContent += suffix || '';\r\n\t\t}\r\n\r\n\t\treturn titleContent;\r\n\t}\r\n\r\n\t/**\r\n\t * Resolves robots value.\r\n\t *\r\n\t * Precedence:\r\n\t * - explicit robots (page) > explicit robots (defaults)\r\n\t * - index flag (page/defaults) -> generates \"index, follow\" or \"noindex, follow\"\r\n\t * - undefined -> no robots tag set by this service\r\n\t */\r\n\tprivate _resolveRobots(page: MetaPage, defaults: MetaDefaults): string | undefined {\r\n\t\tif (isDefined(page.robots)) return (page.robots || '') + '';\r\n\t\tif (isDefined(defaults.robots)) return (defaults.robots || '') + '';\r\n\r\n\t\tconst index = isDefined(page.index) ? page.index : defaults.index;\r\n\t\tif (!isDefined(index)) return undefined;\r\n\r\n\t\treturn index ? 'index, follow' : 'noindex, follow';\r\n\t}\r\n\r\n\t/**\r\n\t * Resolves value with \"undefined means missing\" semantics.\r\n\t * - undefined -> fallback\r\n\t * - empty string -> explicit empty\r\n\t */\r\n\tprivate _resolveValue(val?: string, fallback?: string): string | undefined {\r\n\t\tif (isDefined(val)) return (val || '') + '';\r\n\t\tif (isDefined(fallback)) return (fallback || '') + '';\r\n\t\treturn undefined;\r\n\t}\r\n\r\n\t// ---------------------------------------------------------------------------\r\n\t// Internals: generated tag groups\r\n\t// ---------------------------------------------------------------------------\r\n\r\n\t/**\r\n\t * Applies title to:\r\n\t * - document <title>\r\n\t * - itemprop=\"name\"\r\n\t * - og:title\r\n\t * - twitter:title\r\n\t */\r\n\tprivate _setTitleTriplet(title: string): void {\r\n\t\tthis._titleService.setTitle(title);\r\n\r\n\t\tthis._updateTag('og:title', title, 'property');\r\n\t\tthis._updateTag('twitter:title', title, 'name');\r\n\t\tthis._updateTag('name', title, 'itemprop');\r\n\t}\r\n\r\n\t/**\r\n\t * Applies description to:\r\n\t * - name=\"description\"\r\n\t * - itemprop=\"description\"\r\n\t * - og:description\r\n\t * - twitter:description\r\n\t */\r\n\tprivate _setDescriptionTriplet(description?: string): void {\r\n\t\tif (!isDefined(description)) return;\r\n\r\n\t\tconst content = description as string;\r\n\r\n\t\tthis._updateTag('description', content, 'name');\r\n\t\tthis._updateTag('og:description', content, 'property');\r\n\t\tthis._updateTag('twitter:description', content, 'name');\r\n\t\tthis._updateTag('description', content, 'itemprop');\r\n\t}\r\n\r\n\t/**\r\n\t * Applies image to:\r\n\t * - itemprop=\"image\"\r\n\t * - og:image\r\n\t * - twitter:image:src\r\n\t */\r\n\tprivate _setImageTriplet(image?: string): void {\r\n\t\tif (!isDefined(image)) return;\r\n\r\n\t\tconst content = image as string;\r\n\r\n\t\tthis._updateTag('og:image', content, 'property');\r\n\t\tthis._updateTag('twitter:image:src', content, 'name');\r\n\t\tthis._updateTag('image', content, 'itemprop');\r\n\t}\r\n\r\n\t// ---------------------------------------------------------------------------\r\n\t// Internals: tag update + ownership tracking\r\n\t// ---------------------------------------------------------------------------\r\n\r\n\t/**\r\n\t * Update a meta tag with deterministic selector.\r\n\t *\r\n\t * Why selector:\r\n\t * - prevents duplicates\r\n\t * - ensures updates target the correct attribute variant (name/property/itemprop)\r\n\t *\r\n\t * Ownership tracking:\r\n\t * - Every selector we touch is remembered in managedTagSelectors.\r\n\t * - On next apply/reset we remove them to avoid stale meta across pages.\r\n\t */\r\n\tprivate _updateTag(key: string, content: string, attr: TagAttr): void {\r\n\t\tconst selector = attr === 'itemprop' ? `itemprop=\"${key}\"` : `${attr}=\"${key}\"`;\r\n\r\n\t\tconst tagDef =\r\n\t\t\tattr === 'itemprop'\r\n\t\t\t\t? ({ itemprop: key, content } as any)\r\n\t\t\t\t: ({ [attr]: key, content } as any);\r\n\r\n\t\tthis._meta.updateTag(tagDef, selector);\r\n\t\tthis._managedTagSelectors.add(selector);\r\n\t}\r\n\r\n\t/**\r\n\t * Remove all meta tags managed by this service.\r\n\t * Called on each apply/reset to prevent tags from a previous page persisting.\r\n\t */\r\n\tprivate _removeManagedTags(): void {\r\n\t\tfor (const selector of this._managedTagSelectors) {\r\n\t\t\tthis._meta.removeTag(selector);\r\n\t\t}\r\n\t\tthis._managedTagSelectors.clear();\r\n\t}\r\n\r\n\tprivate _doc = inject(DOCUMENT);\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot } from '@angular/router';\r\nimport { MetaPage } from './meta.interface';\r\nimport { MetaService } from './meta.service';\r\n\r\n/**\r\n * Applies route-level metadata from `route.data.meta`.\r\n *\r\n * Usage:\r\n * - Add this guard to routes that define `data.meta` to ensure meta is applied\r\n *   as early as possible during activation.\r\n *\r\n * Note:\r\n * - If `MetaConfig.applyFromRoutes` is enabled (recommended), the service will\r\n *   also apply route meta automatically on NavigationEnd — even if this guard\r\n *   is missing from some route definitions.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class MetaGuard {\r\n\tconstructor(private _metaService: MetaService) {}\r\n\r\n\tcanActivate(route: ActivatedRouteSnapshot): boolean {\r\n\t\tconst pageMeta = (route.data && (route.data['meta'] as MetaPage)) || null;\r\n\r\n\t\tif (pageMeta) this._metaService.applyMeta(pageMeta);\r\n\t\telse this._metaService.reset();\r\n\r\n\t\treturn true;\r\n\t}\r\n}\r\n","import { inject, Injectable, signal, WritableSignal } from '@angular/core';\nimport { StoreService } from '../store/store.service';\nimport { Translate } from './translate.interface';\nimport { Translates } from './translate.type';\n\n@Injectable({ providedIn: 'root' })\nexport class TranslateService {\n\tprivate _storeService = inject(StoreService);\n\r\n\t/**\r\n\t * Internal registry of translation signals.\r\n\t *\r\n\t * Each key (sourceText) maps to a WritableSignal<string>\r\n\t * that always holds the current translated value.\r\n\t *\r\n\t * Example:\r\n\t * {\r\n\t *   \"Hello\": signal(\"Hola\"),\r\n\t *   \"Save\": signal(\"Guardar\")\r\n\t * }\r\n\t */\r\n\tprivate _signalTranslates: Translates = {};\n\r\n\tconstructor() {\n\t\t/**\n\t\t * Hydrates translations from the internal persistent store (if present).\n\t\t *\n\t\t * This runs once at service construction time and merges stored values into\n\t\t * fallback signals only.\n\t\t *\n\t\t * Notes:\n\t\t * - The stored payload is expected to be an array of `Translate`.\n\t\t * - Storage hydration is async, so runtime translations may already be set\n\t\t *   by the time this resolves. In that case, the runtime value must win.\n\t\t */\n\t\tthis._storeService.getJson('translations', {\n\t\t\tonSuccess: translations => {\n\t\t\t\tif (Array.isArray(translations)) {\n\t\t\t\t\tthis._hydrateTranslations(translations as Translate[]);\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t}\n\r\n\t/**\r\n\t * Returns a reactive translation signal for the given source text.\r\n\t *\r\n\t * If a signal for this key does not exist yet,\r\n\t * it is lazily created with the source text as its initial value.\r\n\t *\r\n\t * This ensures:\r\n\t * - The UI immediately renders the original text.\r\n\t * - When translations are later loaded, the signal updates automatically.\r\n\t *\r\n\t * @param text - The source text used as the translation key.\r\n\t * @returns A WritableSignal<string> containing the translated value.\r\n\t */\r\n\ttranslate(text: string): WritableSignal<string> {\r\n\t\tif (!this._signalTranslates[text]) {\r\n\t\t\tthis._signalTranslates[text] = signal(text);\r\n\t\t}\r\n\r\n\t\treturn this._signalTranslates[text];\r\n\t}\r\n\r\n\t/**\r\n\t * Replaces translations in bulk.\r\n\t *\r\n\t * Behavior:\r\n\t * 1. Any existing signal not present in the new translations\r\n\t *    is reset to its original source text (fallback behavior).\r\n\t * 2. Provided translations update their corresponding signals.\r\n\t *\r\n\t * This is typically used when switching language.\r\n\t *\r\n\t * Important:\r\n\t * Signals must already exist (created via `translate()`)\r\n\t * before calling this method.\r\n\t *\r\n\t * @param translations - Array of translation objects\r\n\t * containing sourceText and translated text.\r\n\t */\r\n\tsetMany(translations: Translate[]) {\n\t\tconst sourceTexts = translations.map(t => t.sourceText);\r\n\t\tconst sourceSet = new Set(sourceTexts);\r\n\r\n\t\t// Reset removed translations back to original text\r\n\t\tfor (const sourceText in this._signalTranslates) {\r\n\t\t\tif (!sourceSet.has(sourceText)) {\r\n\t\t\t\tthis._signalTranslates[sourceText].set(sourceText);\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\t// Update provided translations\r\n\t\tfor (const translation of translations) {\r\n\t\t\tthis._setTranslation(translation.sourceText, translation.text);\r\n\t\t}\r\n\r\n\t\tthis._updateStorageTranslations();\r\n\t}\r\n\r\n\t/**\r\n\t * Updates a single translation entry.\r\n\t *\r\n\t * This method updates the existing signal for a given source text.\r\n\t * Typically used for dynamic or incremental translation updates.\r\n\t *\r\n\t * Important:\r\n\t * The signal must already exist (created via `translate()`),\r\n\t * otherwise this will throw an error.\r\n\t *\r\n\t * @param translation - Translate object containing\n\t * sourceText and translated text.\r\n\t */\r\n\tsetOne(translation: Translate) {\n\t\tthis._setTranslation(translation.sourceText, translation.text);\r\n\r\n\t\tthis._updateStorageTranslations();\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the internal translation signal registry.\r\n\t *\r\n\t * Useful for debugging, inspection, or tooling.\r\n\t *\r\n\t * @returns A record mapping sourceText keys to WritableSignal<string>.\r\n\t */\r\n\tget(): Translates {\n\t\treturn this._signalTranslates;\n\t}\n\n\tprivate _hydrateTranslations(translations: Translate[]) {\n\t\tfor (const translation of translations) {\n\t\t\tconst existing = this._signalTranslates[translation.sourceText];\n\n\t\t\t// Do not let stale async storage overwrite an already translated runtime value.\n\t\t\tif (existing && existing() !== translation.sourceText) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tthis._setTranslation(translation.sourceText, translation.text);\n\t\t}\n\t}\n\n\tprivate _setTranslation(sourceText: string, text: string) {\n\t\tif (!this._signalTranslates[sourceText]) {\n\t\t\tthis._signalTranslates[sourceText] = signal(sourceText);\n\t\t}\n\r\n\t\tthis._signalTranslates[sourceText].set(text);\r\n\t}\r\n\r\n\t/**\r\n\t * Persists the current in-memory translations into the internal store.\r\n\t *\r\n\t * The payload is derived from `_signalTranslates` by materializing each signal's\r\n\t * current value at the time of saving.\r\n\t *\r\n\t * Side effects:\r\n\t * - Writes to storage via `StoreService.setJson`.\r\n\t *\r\n\t * Intended usage:\r\n\t * - Called after `setMany()` and `setOne()` to keep storage in sync.\r\n\t */\r\n\tprivate _updateStorageTranslations() {\r\n\t\tconst translations = [];\r\n\r\n\t\tfor (const sourceText in this._signalTranslates) {\r\n\t\t\ttranslations.push({\r\n\t\t\t\ttext: this._signalTranslates[sourceText](),\r\n\t\t\t\tsourceText,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\tthis._storeService.setJson('translations', translations);\r\n\t}\r\n}\r\n","import {\n\tEnvironmentProviders,\n\tinject,\n\tmakeEnvironmentProviders,\n\tprovideEnvironmentInitializer,\n} from '@angular/core';\nimport { Translate } from './translate.interface';\nimport { TranslateService } from './translate.service';\n\nexport function provideTranslate(translations: Translate[] = []): EnvironmentProviders {\n\treturn makeEnvironmentProviders([\n\t\tprovideEnvironmentInitializer(() => {\n\t\t\tif (!translations.length) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tinject(TranslateService).setMany(translations);\n\t\t}),\n\t]);\n}\n","import { isPlatformBrowser } from '@angular/common';\r\nimport {\r\n\tafterNextRender,\r\n\tDirective,\r\n\teffect,\r\n\tElementRef,\r\n\tinject,\r\n\tinput,\r\n\tPLATFORM_ID,\n\tsignal,\n\tWritableSignal,\n} from '@angular/core';\nimport { TranslateService } from './translate.service';\n\r\n@Directive({\r\n\tselector: '[translate]',\r\n\tstandalone: true,\r\n})\r\nexport class TranslateDirective {\r\n\tprivate readonly _platformId = inject(PLATFORM_ID);\r\n\tprivate readonly _isBrowser = isPlatformBrowser(this._platformId);\r\n\r\n\t/**\r\n\t * Optional explicit translation key.\r\n\t *\r\n\t * - If provided, this key is used to look up a translation.\r\n\t * - If empty, the directive uses the element's initial rendered `textContent`\r\n\t *   (captured after render) as the key.\r\n\t *\r\n\t * Note:\r\n\t * This directive writes to `textContent`, which replaces all child text/markup\r\n\t * inside the host element.\r\n\t */\r\n\treadonly translate = input<string>('');\r\n\r\n\tprivate readonly _el = inject(ElementRef<HTMLElement>);\r\n\tprivate readonly _translateService = inject(TranslateService);\n\r\n\t/**\r\n\t * Captures the element's original rendered text (trimmed) after the first render.\r\n\t *\r\n\t * Used as the implicit key when no explicit `translate` input is provided.\r\n\t * This is captured only in the browser (SSR-safe guard).\r\n\t */\r\n\tprivate readonly _original = signal<string>(''); // set after render\r\n\r\n\tprivate _lastKey = '';\r\n\tprivate _lastSignal: WritableSignal<string> = signal('');\r\n\r\n\tconstructor() {\r\n\t\tif (!this._isBrowser) return;\r\n\r\n\t\t// capture origin text once the element content is actually rendered\r\n\t\tafterNextRender(() => {\r\n\t\t\tconst text = (this._el.nativeElement.textContent ?? '').trim();\r\n\t\t\tthis._original.set(text);\r\n\t\t});\r\n\r\n\t\teffect(() => {\r\n\t\t\tif (!this._isBrowser) return;\r\n\r\n\t\t\tconst origin = this._original().trim();\r\n\t\t\tconst explicit = (this.translate() || '').trim();\r\n\r\n\t\t\t// If no explicit key and origin is still empty, don't overwrite DOM.\r\n\t\t\t// This prevents blanking the content.\r\n\t\t\tconst key = (explicit || origin).trim();\r\n\t\t\tif (!key) return;\r\n\r\n\t\t\t// Only swap signal when key changes\r\n\t\t\tif (key !== this._lastKey) {\r\n\t\t\t\tthis._lastKey = key;\r\n\t\t\t\tthis._lastSignal = this._translateService.translate(key);\n\t\t\t}\n\r\n\t\t\t// If no translation exists, service returns key (origin), so this keeps origin text.\r\n\t\t\tthis._el.nativeElement.textContent = this._lastSignal();\r\n\t\t});\r\n\t}\r\n}\r\n","import { Pipe, PipeTransform, inject } from '@angular/core';\nimport { TranslateService } from './translate.service';\n\r\n@Pipe({ name: 'translate' })\r\nexport class TranslatePipe implements PipeTransform {\r\n\t/**\r\n\t * Transforms a translation key into the currently resolved translated string.\r\n\t *\r\n\t * - If the key has no translation yet, the service returns the key itself\r\n\t *   (fallback behavior), so the UI remains readable.\r\n\t * - The returned value is reactive via signals: when `setMany()` / `setOne()`\r\n\t *   updates the underlying signal, templates re-render automatically.\r\n\t *\r\n\t * @param text - Translate key (typically the source text).\n\t * @returns The translated string for the current in-memory/store state.\r\n\t */\r\n\ttransform(text: string) {\n\t\treturn this._translateService.translate(text)();\n\t}\n\n\tprivate _translateService = inject(TranslateService);\n}\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\nimport {\n\tChangeDetectorRef,\n\tDestroyRef,\n\tDirective,\n\tElementRef,\n\tPLATFORM_ID,\n\tinject,\n\toutput,\n} from '@angular/core';\n\n/**\n * Stand-alone “click outside” directive (zoneless-safe).\n *\n * Usage:\n * <div (clickOutside)=\"close()\">…</div>\n */\n@Directive({\n\tselector: '[clickOutside]',\n})\nexport class ClickOutsideDirective {\n\treadonly clickOutside = output<MouseEvent>();\n\n\tconstructor() {\n\t\tif (this._isBrowser) {\n\t\t\tthis._doc.addEventListener('pointerdown', this._handler, true);\n\t\t}\n\n\t\t// cleanup\n\t\tthis._dref.onDestroy(() =>\n\t\t\tthis._doc.removeEventListener('pointerdown', this._handler, true),\n\t\t);\n\t}\n\n\tprivate _host = inject(ElementRef<HTMLElement>);\n\n\tprivate _cdr = inject(ChangeDetectorRef);\n\n\tprivate _dref = inject(DestroyRef);\n\n\tprivate _doc = inject(DOCUMENT);\n\n\tprivate _isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n\tprivate _handler = (e: MouseEvent): void => {\n\t\tif (!this._host.nativeElement.contains(e.target as Node)) {\n\t\t\tthis.clickOutside.emit(e); // notify parent\n\t\t\tthis._cdr.markForCheck(); // trigger CD for OnPush comps\n\t\t}\n\t};\n}\n","import { Directive, ElementRef, effect, inject, input } from '@angular/core';\r\n\r\n@Directive({\r\n\tselector: 'input[manualDisabled], textarea[manualDisabled]',\r\n})\r\nexport class ManualDisabledDirective {\r\n\tprivate readonly _el = inject(ElementRef) as ElementRef<HTMLInputElement>;\r\n\r\n\t// Bind as: [manualDisabled]=\"isDisabled\"\r\n\treadonly manualDisabled = input<boolean | null>(null, {\r\n\t\talias: 'manualDisabled',\r\n\t});\r\n\r\n\tprivate readonly _syncDisabledEffect = effect(() => {\r\n\t\tconst disabled = this.manualDisabled();\r\n\t\tif (disabled == null) return;\r\n\r\n\t\tconst native = this._el.nativeElement;\r\n\t\tif (!native) return;\r\n\r\n\t\tnative.disabled = !!disabled;\r\n\t});\r\n}\r\n","import { Directive, ElementRef, effect, inject, input } from '@angular/core';\r\n\r\n@Directive({\r\n\tselector: 'input[manualName], textarea[manualName]',\r\n})\r\nexport class ManualNameDirective {\r\n\tprivate readonly _el = inject(ElementRef) as ElementRef<HTMLInputElement>;\r\n\r\n\t// Bind as: manualName=\"email\" or [manualName]=\"expr\"\r\n\treadonly manualName = input<string | null>(null, { alias: 'manualName' });\r\n\r\n\tprivate readonly _syncNameEffect = effect(() => {\r\n\t\tconst name = this.manualName();\r\n\t\tif (name == null) return;\r\n\r\n\t\tconst native = this._el.nativeElement;\r\n\t\tif (!native) return;\r\n\r\n\t\tif (native.name !== name) {\r\n\t\t\tnative.name = name;\r\n\t\t}\r\n\t});\r\n}\r\n","import { Directive, ElementRef, effect, inject, input } from '@angular/core';\r\n\r\n@Directive({\r\n\tselector: 'input[manualReadonly], textarea[manualReadonly]',\r\n})\r\nexport class ManualReadonlyDirective {\r\n\tprivate readonly _el = inject(ElementRef) as ElementRef<HTMLInputElement>;\r\n\r\n\t// Bind as: [manualReadonly]=\"true\"\r\n\treadonly manualReadonly = input<boolean | null>(null, {\r\n\t\talias: 'manualReadonly',\r\n\t});\r\n\r\n\tprivate readonly _syncReadonlyEffect = effect(() => {\r\n\t\tconst readonly = this.manualReadonly();\r\n\t\tif (readonly == null) return;\r\n\r\n\t\tconst native = this._el.nativeElement;\r\n\t\tif (!native) return;\r\n\r\n\t\tnative.readOnly = !!readonly;\r\n\t});\r\n}\r\n","import { Directive, ElementRef, effect, inject, input } from '@angular/core';\r\n\r\n@Directive({\r\n\tselector: 'input[manualType], textarea[manualType]',\r\n})\r\nexport class ManualTypeDirective {\r\n\tprivate readonly _el = inject(ElementRef) as ElementRef<HTMLInputElement>;\r\n\r\n\t// Bind as: manualType=\"password\" or [manualType]=\"expr\"\r\n\treadonly manualType = input<string | null>(null, { alias: 'manualType' });\r\n\r\n\tprivate readonly _syncTypeEffect = effect(() => {\r\n\t\tconst t = this.manualType();\r\n\t\tif (!t) return;\r\n\r\n\t\tconst native = this._el.nativeElement;\r\n\t\tif (!native) return;\r\n\r\n\t\tif (native.type !== t) {\r\n\t\t\tnative.type = t;\r\n\t\t}\r\n\t});\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n\tname: 'arr',\r\n})\r\nexport class ArrPipe implements PipeTransform {\r\n\ttransform(data: any, type?: any, refresh?: any): any {\r\n\t\tif (!data) {\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\tif (typeof data == 'string') return data.split(type || ' ');\r\n\r\n\t\tif (Array.isArray(data)) {\r\n\t\t\treturn data;\r\n\t\t}\r\n\r\n\t\tif (typeof data != 'object') {\r\n\t\t\treturn [];\r\n\t\t}\r\n\r\n\t\tlet arr = [];\r\n\r\n\t\tfor (let each in data) {\r\n\t\t\tif (!data[each]) continue;\r\n\r\n\t\t\tif (type == 'prop') {\r\n\t\t\t\tarr.push(each);\r\n\t\t\t} else if (type == 'value') {\r\n\t\t\t\tarr.push(data[each]);\r\n\t\t\t} else {\r\n\t\t\t\tarr.push({\r\n\t\t\t\t\tprop: each,\r\n\t\t\t\t\tvalue: data[each],\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn arr;\r\n\t}\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n\tname: 'mongodate',\r\n})\r\nexport class MongodatePipe implements PipeTransform {\r\n\ttransform(_id: any) {\r\n\t\tif (!_id) return new Date();\r\n\r\n\t\tlet timestamp = _id.toString().substring(0, 8);\r\n\r\n\t\treturn new Date(parseInt(timestamp, 16) * 1000);\r\n\t}\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n\tname: 'number',\r\n})\r\nexport class NumberPipe implements PipeTransform {\r\n\ttransform(value: unknown): number {\r\n\t\tconst result = Number(value); // Convert value to a number\r\n\r\n\t\treturn isNaN(result) ? 0 : result; // Return 0 if conversion fails\r\n\t}\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n\tname: 'page',\r\n\tpure: false,\r\n})\r\nexport class PaginationPipe implements PipeTransform {\r\n\ttransform(arr: any, config: any, sort: any, search = ''): any {\r\n\t\tif (!Array.isArray(arr)) return [];\r\n\r\n\t\tarr = arr.slice();\r\n\r\n\t\tfor (let i = 0; i < arr.length; i++) {\r\n\t\t\tarr[i].num = i + 1;\r\n\t\t}\r\n\r\n\t\tif (sort.direction) {\r\n\t\t\tarr.sort((a: any, b: any) => {\r\n\t\t\t\tif (a[sort.title] < b[sort.title]) {\r\n\t\t\t\t\treturn sort.direction == 'desc' ? 1 : -1;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (a[sort.title] > b[sort.title]) {\r\n\t\t\t\t\treturn sort.direction == 'desc' ? -1 : 1;\r\n\t\t\t\t}\r\n\r\n\t\t\t\treturn 0;\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn arr.slice((config.page - 1) * config.perPage, config.page * config.perPage);\r\n\t}\r\n}\r\n","import { inject, Pipe } from '@angular/core';\r\nimport { DomSanitizer } from '@angular/platform-browser';\r\n@Pipe({\r\n\tname: 'safe',\r\n})\r\nexport class SafePipe {\r\n\ttransform(html: any) {\r\n\t\treturn this._sanitizer.bypassSecurityTrustResourceUrl(html);\r\n\t}\r\n\r\n\tprivate _sanitizer = inject(DomSanitizer);\r\n}\r\n","import { Pipe, PipeTransform, Signal, isSignal } from '@angular/core';\r\n\r\ntype Query =\r\n\t| string\r\n\t| string[]\r\n\t| Record<string, unknown>\r\n\t| Signal<string | string[] | Record<string, unknown> | undefined>;\r\n\r\ntype Field = string | string[] | number | Signal<string | string[] | number | undefined>;\r\n\r\n@Pipe({ name: 'search', pure: true })\r\nexport class SearchPipe implements PipeTransform {\r\n\ttransform<T>(\r\n\t\titems: T[] | Record<string, T>,\r\n\t\tquery?: Query,\r\n\t\tfields?: Field,\r\n\t\tlimit?: number,\r\n\t\tignore = false,\r\n\t\t_reload?: unknown,\r\n\t): T[] {\r\n\t\t/* unwrap signals */\r\n\t\tconst q = isSignal(query) ? query() : query;\r\n\r\n\t\tlet f = isSignal(fields) ? fields() : fields;\r\n\r\n\t\t/* allow “fields” to be a number (=limit) */\r\n\t\tif (typeof f === 'number') {\r\n\t\t\tlimit = f;\r\n\r\n\t\t\tf = undefined;\r\n\t\t}\r\n\r\n\t\tconst docs = Array.isArray(items) ? items : Object.values(items);\r\n\r\n\t\tif (ignore || !q) return limit ? docs.slice(0, limit) : docs;\r\n\r\n\t\t/* normalise fields */\r\n\t\tconst paths: string[] = !f ? ['name'] : Array.isArray(f) ? f : f.trim().split(/\\s+/);\r\n\r\n\t\t/* normalise query */\r\n\t\tconst needles: string[] = Array.isArray(q)\r\n\t\t\t? q.map(s => s.toLowerCase())\r\n\t\t\t: typeof q === 'object'\r\n\t\t\t\t? Object.keys(q)\r\n\t\t\t\t\t\t.filter(k => (q as any)[k])\r\n\t\t\t\t\t\t.map(k => k.toLowerCase())\r\n\t\t\t\t: [q.toLowerCase()];\r\n\r\n\t\tconst txtMatches = (val: any) => {\r\n\t\t\tif (val == null) return false;\r\n\r\n\t\t\tconst hay = val.toString().toLowerCase();\r\n\r\n\t\t\treturn needles.some(n => hay.includes(n) || n.includes(hay));\r\n\t\t};\r\n\r\n\t\tconst walk = (obj: any, parts: string[]): boolean => {\r\n\t\t\tif (!obj) return false;\r\n\r\n\t\t\tconst [head, ...rest] = parts;\r\n\r\n\t\t\tconst next = obj[head];\r\n\r\n\t\t\tif (Array.isArray(next))\r\n\t\t\t\treturn next.some(v => (rest.length ? walk(v, rest) : txtMatches(v)));\r\n\r\n\t\t\treturn rest.length ? walk(next, rest) : txtMatches(next);\r\n\t\t};\r\n\r\n\t\tconst out: T[] = [];\r\n\r\n\t\tconst seen = new Set<number | string>();\r\n\r\n\t\tconst check = (doc: T, key: number | string) => {\r\n\t\t\tfor (const p of paths) {\r\n\t\t\t\tif (walk(doc, p.split('.'))) {\r\n\t\t\t\t\tif (!seen.has(key)) {\r\n\t\t\t\t\t\tout.push(doc);\r\n\r\n\t\t\t\t\t\tseen.add(key);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tArray.isArray(items)\r\n\t\t\t? docs.forEach((d, i) => check(d, i))\r\n\t\t\t: Object.entries(items).forEach(([k, v]) => check(v, k));\r\n\r\n\t\treturn limit ? out.slice(0, limit) : out;\r\n\t}\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n\tname: 'splice',\r\n})\r\nexport class SplicePipe implements PipeTransform {\r\n\ttransform(from: any, which: any, refresh?: number): any {\r\n\t\tif (Array.isArray(from)) from = { arr: from, prop: '_id' };\r\n\r\n\t\tlet arr = (which.keep && []) || from.arr.slice();\r\n\r\n\t\tif (Array.isArray(which)) which = { arr: which, prop: '_id' };\r\n\r\n\t\tfor (let i = from.arr.length - 1; i >= 0; i--) {\r\n\t\t\tfor (let j = 0; j < which.arr.length; j++) {\r\n\t\t\t\tif (from.prop && which.prop) {\r\n\t\t\t\t\tif (from.arr[i][from.prop] == which.arr[j][which.prop]) {\r\n\t\t\t\t\t\tif (which.keep) {\r\n\t\t\t\t\t\t\tarr.push(from.arr[i]);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tarr.splice(i, 1);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if (from.prop) {\r\n\t\t\t\t\tif (from.arr[i][from.prop] == which.arr[j]) {\r\n\t\t\t\t\t\tif (which.keep) {\r\n\t\t\t\t\t\t\tarr.push(from.arr[i]);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tarr.splice(i, 1);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if (which.prop) {\r\n\t\t\t\t\tif (from.arr[i] == which.arr[j][which.prop]) {\r\n\t\t\t\t\t\tif (which.keep) {\r\n\t\t\t\t\t\t\tarr.push(from.arr[i]);\r\n\t\t\t\t\t\t} else {\r\n\t\t\t\t\t\t\tarr.splice(i, 1);\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t}\r\n\t\t\t\t} else if (from.arr[i] == which.arr[j]) {\r\n\t\t\t\t\tif (which.keep) {\r\n\t\t\t\t\t\tarr.push(from.arr[i]);\r\n\t\t\t\t\t} else {\r\n\t\t\t\t\t\tarr.splice(i, 1);\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn arr;\r\n\t}\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\n\r\n@Pipe({\r\n\tname: 'split',\r\n})\r\nexport class SplitPipe implements PipeTransform {\r\n\ttransform(value: string, index = 0, devider = ':'): unknown {\r\n\t\tconst arr = value.split(devider);\r\n\r\n\t\treturn arr.length > index ? arr[index] : '';\r\n\t}\r\n}\r\n","import { DOCUMENT, isPlatformBrowser } from '@angular/common';\r\nimport {\r\n\tApplicationRef,\r\n\tComponentRef,\r\n\tEmbeddedViewRef,\r\n\tEnvironmentInjector,\r\n\tInjectable,\r\n\tPLATFORM_ID,\r\n\tType,\r\n\tcreateComponent,\r\n\tinject,\r\n} from '@angular/core';\r\nimport { DomComponent } from '../interfaces/dom.interface';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root',\r\n})\r\n/**\r\n * Utility service for programmatically creating and interacting with Angular\r\n * components within the DOM.\r\n */\r\nexport class DomService {\r\n\tprivate readonly _isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\r\n\t/**\r\n\t * Appends a component to a specified element by ID.\r\n\t *\r\n\t * @param component - The component to append.\r\n\t * @param options - The options to project into the component.\r\n\t * @param id - The ID of the element to append the component to.\r\n\t * @returns An object containing the native element and the component reference.\r\n\t */\r\n\tappendById<T>(component: Type<T>, options: Partial<T> = {}, id: string): DomComponent<T> {\r\n\t\tconst componentRef = createComponent(component, {\r\n\t\t\tenvironmentInjector: this._injector,\r\n\t\t});\r\n\r\n\t\tthis.projectComponentInputs(componentRef, options);\r\n\r\n\t\tthis._appRef.attachView(componentRef.hostView);\r\n\r\n\t\tconst domElem = (componentRef.hostView as EmbeddedViewRef<T>).rootNodes[0] as HTMLElement;\r\n\r\n\t\tconst element = this._doc.getElementById(id);\r\n\r\n\t\tif (this._isBrowser && element && typeof element.appendChild === 'function') {\r\n\t\t\telement.appendChild(domElem);\r\n\t\t}\r\n\r\n\t\tcomponentRef.changeDetectorRef.detectChanges();\r\n\r\n\t\treturn {\r\n\t\t\tnativeElement: domElem,\r\n\t\t\tcomponentRef: componentRef,\r\n\t\t\tremove: () => this.removeComponent(componentRef),\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * Appends a component to a specified element or to the body.\r\n\t *\r\n\t * @param component - The component to append.\r\n\t * @param options - The options to project into the component.\r\n\t * @param element - The element to append the component to. Defaults to body.\r\n\t * @returns An object containing the native element and the component reference.\r\n\t */\r\n\tappendComponent<T>(\r\n\t\tcomponent: Type<T>,\r\n\t\toptions: Partial<T & { providedIn?: string }> = {},\r\n\t\telement?: HTMLElement,\r\n\t): DomComponent<T> | void {\r\n\t\tif (options.providedIn) {\r\n\t\t\tif (this._providedIn[options.providedIn]) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tthis._providedIn[options.providedIn] = true;\r\n\t\t}\r\n\r\n\t\tconst componentRef = createComponent(component, {\r\n\t\t\tenvironmentInjector: this._injector,\r\n\t\t});\r\n\r\n\t\tthis.projectComponentInputs(componentRef, options);\r\n\r\n\t\tthis._appRef.attachView(componentRef.hostView);\r\n\r\n\t\tconst domElem = (componentRef.hostView as EmbeddedViewRef<T>).rootNodes[0] as HTMLElement;\r\n\r\n\t\tconst target = element || this._doc.body;\r\n\t\tif (this._isBrowser && target && typeof target.appendChild === 'function') {\r\n\t\t\ttarget.appendChild(domElem);\r\n\t\t}\r\n\r\n\t\tcomponentRef.changeDetectorRef.detectChanges();\r\n\r\n\t\treturn {\r\n\t\t\tnativeElement: domElem,\r\n\t\t\tcomponentRef: componentRef,\r\n\t\t\tremove: () => this.removeComponent(componentRef, options.providedIn),\r\n\t\t};\r\n\t}\r\n\r\n\t/**\r\n\t * Gets a reference to a dynamically created component.\r\n\t *\r\n\t * @param component - The component to create.\r\n\t * @param options - The options to project into the component.\r\n\t * @returns The component reference.\r\n\t */\r\n\tgetComponentRef<T>(component: Type<T>, options: Partial<T> = {}): ComponentRef<T> {\r\n\t\tconst componentRef = createComponent(component, {\r\n\t\t\tenvironmentInjector: this._injector,\r\n\t\t});\r\n\r\n\t\tthis.projectComponentInputs(componentRef, options);\r\n\r\n\t\tthis._appRef.attachView(componentRef.hostView);\r\n\r\n\t\tcomponentRef.changeDetectorRef.detectChanges();\r\n\r\n\t\treturn componentRef;\r\n\t}\r\n\r\n\t/**\r\n\t * Projects the inputs onto the component.\r\n\t *\r\n\t * @param component - The component reference.\r\n\t * @param options - The options to project into the component.\r\n\t * @returns The component reference with the projected inputs.\r\n\t */\r\n\tprivate projectComponentInputs<T>(\r\n\t\tcomponent: ComponentRef<T>,\r\n\t\toptions: Partial<T>,\r\n\t): ComponentRef<T> {\r\n\t\tif (options) {\r\n\t\t\tconst props = Object.getOwnPropertyNames(options);\r\n\r\n\t\t\tfor (const prop of props) {\r\n\t\t\t\t(component.instance as any)[prop] = (options as any)[prop];\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\treturn component;\r\n\t}\r\n\r\n\t/**\r\n\t * Removes a previously attached component and optionally clears its\r\n\t * unique `providedIn` flag.\r\n\t *\r\n\t * @param componentRef - Reference to the component to be removed.\r\n\t * @param providedIn - Optional key used to track unique instances.\r\n\t */\r\n\tremoveComponent<T>(componentRef: ComponentRef<T>, providedIn?: string): void {\r\n\t\tthis._appRef.detachView(componentRef.hostView);\r\n\r\n\t\tcomponentRef.destroy();\r\n\r\n\t\tif (providedIn) {\r\n\t\t\tdelete this._providedIn[providedIn];\r\n\t\t}\r\n\t}\r\n\r\n\t/** Reference to the root application used for view attachment. */\r\n\tprivate _appRef = inject(ApplicationRef);\r\n\r\n\t/** Injector utilized when creating dynamic components. */\r\n\tprivate _injector = inject(EnvironmentInjector);\r\n\r\n\t/** Document reference (browser or SSR shim). */\r\n\tprivate _doc = inject(DOCUMENT);\r\n\r\n\t/**\r\n\t * Flags to ensure components with a specific `providedIn` key are only\r\n\t * instantiated once at a time.\r\n\t */\r\n\tprivate _providedIn: Record<string, boolean> = {};\r\n}\r\n","import { isPlatformBrowser } from '@angular/common';\r\nimport { Injectable, PLATFORM_ID, inject } from '@angular/core';\r\n\r\n/**\r\n * RtcService handles WebRTC peer connections and local media stream setup.\r\n * It provides functionality to initialize the user's camera/microphone,\r\n * manage multiple peer connections, and handle offer/answer negotiation.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class RtcService {\r\n\tprivate readonly _isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\t/**\r\n\t * Map of peer connections, keyed by peer ID.\r\n\t */\r\n\tprivate _peers = new Map<string, RTCPeerConnection>();\r\n\r\n\t/**\r\n\t * Local media stream from user's camera and microphone.\r\n\t */\r\n\tprivate _localStream: MediaStream | null = null;\r\n\r\n\t/**\r\n\t * Initializes the local media stream (audio/video).\r\n\t * Requests permissions and stores the stream internally.\r\n\t */\r\n\tasync initLocalStream(): Promise<MediaStream> {\r\n\t\tif (!this._isBrowser) {\r\n\t\t\tthrow new Error('RTC is not available during SSR.');\r\n\t\t}\r\n\r\n\t\tif (!this._localStream) {\r\n\t\t\tthis._localStream = await navigator.mediaDevices.getUserMedia({\r\n\t\t\t\tvideo: true,\r\n\t\t\t\taudio: true,\r\n\t\t\t});\r\n\t\t}\r\n\r\n\t\treturn this._localStream;\r\n\t}\r\n\r\n\t/**\r\n\t * Creates a new RTCPeerConnection for the given ID and attaches local tracks.\r\n\t */\r\n\tasync createPeer(id: string): Promise<RTCPeerConnection> {\r\n\t\tif (!this._isBrowser) {\r\n\t\t\tthrow new Error('RTC is not available during SSR.');\r\n\t\t}\r\n\r\n\t\tconst peer = new RTCPeerConnection();\r\n\r\n\t\tthis._localStream?.getTracks().forEach(track => peer.addTrack(track, this._localStream!));\r\n\r\n\t\tthis._peers.set(id, peer);\r\n\r\n\t\treturn peer;\r\n\t}\r\n\r\n\t/**\r\n\t * Retrieves an existing peer connection by ID.\r\n\t */\r\n\tgetPeer(id: string): RTCPeerConnection | undefined {\r\n\t\treturn this._peers.get(id);\r\n\t}\r\n\r\n\t/**\r\n\t * Creates an SDP offer for the specified peer and sets it as the local description.\r\n\t */\r\n\tasync createOffer(id: string): Promise<RTCSessionDescriptionInit> {\r\n\t\tif (!this._isBrowser) {\r\n\t\t\tthrow new Error('RTC is not available during SSR.');\r\n\t\t}\r\n\r\n\t\tconst peer = this._peers.get(id);\r\n\r\n\t\tif (!peer) throw new Error('Peer not found');\r\n\r\n\t\tconst offer = await peer.createOffer();\r\n\r\n\t\tawait peer.setLocalDescription(offer);\r\n\r\n\t\treturn offer;\r\n\t}\r\n\r\n\t/**\r\n\t * Accepts an SDP offer, creates an answer, and sets it as the local description.\r\n\t */\r\n\tasync createAnswer(\r\n\t\tid: string,\r\n\t\toffer: RTCSessionDescriptionInit,\r\n\t): Promise<RTCSessionDescriptionInit> {\r\n\t\tif (!this._isBrowser) {\r\n\t\t\tthrow new Error('RTC is not available during SSR.');\r\n\t\t}\r\n\r\n\t\tconst peer = this._peers.get(id);\r\n\r\n\t\tif (!peer) throw new Error('Peer not found');\r\n\r\n\t\tawait peer.setRemoteDescription(new RTCSessionDescription(offer));\r\n\r\n\t\tconst answer = await peer.createAnswer();\r\n\r\n\t\tawait peer.setLocalDescription(answer);\r\n\r\n\t\treturn answer;\r\n\t}\r\n\r\n\t/**\r\n\t * Sets the remote description with an SDP answer for the given peer.\r\n\t */\r\n\tasync setRemoteAnswer(id: string, answer: RTCSessionDescriptionInit) {\r\n\t\tif (!this._isBrowser) {\r\n\t\t\tthrow new Error('RTC is not available during SSR.');\r\n\t\t}\r\n\r\n\t\tconst peer = this._peers.get(id);\r\n\r\n\t\tif (!peer) throw new Error('Peer not found');\r\n\r\n\t\tawait peer.setRemoteDescription(new RTCSessionDescription(answer));\r\n\t}\r\n\r\n\t/**\r\n\t * Adds an ICE candidate to the specified peer connection.\r\n\t */\r\n\taddIceCandidate(id: string, candidate: RTCIceCandidateInit) {\r\n\t\tif (!this._isBrowser) return;\r\n\r\n\t\tconst peer = this._peers.get(id);\r\n\r\n\t\tif (peer) peer.addIceCandidate(new RTCIceCandidate(candidate));\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the initialized local media stream.\r\n\t */\r\n\tgetLocalStream(): MediaStream | null {\r\n\t\treturn this._localStream;\r\n\t}\r\n\r\n\t/**\r\n\t * Closes a specific peer connection and removes it from the map.\r\n\t */\r\n\tclosePeer(id: string) {\r\n\t\tconst peer = this._peers.get(id);\r\n\r\n\t\tif (peer) {\r\n\t\t\tpeer.close();\r\n\r\n\t\t\tthis._peers.delete(id);\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Closes all peer connections and stops the local media stream.\r\n\t */\r\n\tcloseAll() {\r\n\t\tthis._peers.forEach(peer => peer.close());\r\n\r\n\t\tthis._peers.clear();\r\n\r\n\t\tthis._localStream?.getTracks().forEach(track => track.stop());\r\n\r\n\t\tthis._localStream = null;\r\n\t}\r\n}\r\n","import { isPlatformBrowser } from '@angular/common';\r\nimport { Inject, inject, Injectable, Optional, PLATFORM_ID } from '@angular/core';\r\nimport { Config, CONFIG_TOKEN, DEFAULT_CONFIG } from '../interfaces/config.interface';\r\nimport { EmitterService } from './emitter.service';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root',\r\n})\r\nexport class SocketService {\r\n\tprivate readonly _isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\r\n\r\n\tprivate _url = '';\r\n\r\n\tprivate _io: any;\r\n\r\n\tprivate _connected = false;\r\n\r\n\tprivate _opts: any = {};\r\n\r\n\tconstructor(@Inject(CONFIG_TOKEN) @Optional() private _config: Config) {\r\n\t\tthis._config = { ...DEFAULT_CONFIG, ...(this._config || {}) };\r\n\r\n\t\tif (!this._isBrowser) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!this._config.io) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst url = new URL(window.location.origin);\r\n\r\n\t\tif (typeof this._config.socket === 'object') {\r\n\t\t\tif (this._config.socket.port) {\r\n\t\t\t\turl.port = this._config.socket.port;\r\n\t\t\t}\r\n\r\n\t\t\tif (this._config.socket.opts) {\r\n\t\t\t\tthis._opts = this._config.socket.opts;\r\n\t\t\t}\r\n\r\n\t\t\tthis._url = this._config.socket.url ?? url.origin;\r\n\t\t} else {\r\n\t\t\tthis._url = url.origin;\r\n\t\t}\r\n\r\n\t\tif (this._config.socket) {\r\n\t\t\tthis.load();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Sets the URL for the WebSocket connection and reloads the socket.\r\n\t * @param url - The URL of the WebSocket server.\r\n\t */\r\n\tsetUrl(url: string): void {\r\n\t\tthis._url = url;\r\n\r\n\t\tif (!this._config.socket) {\r\n\t\t\tthis._config.socket = true;\r\n\t\t}\r\n\r\n\t\tif (this._isBrowser) {\r\n\t\t\tthis.load();\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Loads and initializes the WebSocket connection.\r\n\t */\r\n\tprivate load(): void {\r\n\t\tif (!this._isBrowser) return;\r\n\r\n\t\tif (this._config.io) {\r\n\t\t\tconst ioFunc = this._config.io.default ? this._config.io.default : this._config.io;\r\n\r\n\t\t\tthis._io = ioFunc(this._url, this._opts);\r\n\r\n\t\t\tthis._io.on('connect', () => {\r\n\t\t\t\tthis._connected = true;\r\n\r\n\t\t\t\tthis._emitterService.complete('socket');\r\n\t\t\t});\r\n\r\n\t\t\tthis._io.on('disconnect', (reason: any) => {\r\n\t\t\t\tthis._connected = false;\r\n\r\n\t\t\t\tthis._emitterService.emit('socket_disconnect', reason);\r\n\r\n\t\t\t\tconsole.warn('Socket disconnected', reason);\r\n\t\t\t});\r\n\r\n\t\t\tthis._io.on('error', (err: any) => {\r\n\t\t\t\tthis._connected = false;\r\n\r\n\t\t\t\tthis._emitterService.emit('socket_error', err);\r\n\r\n\t\t\t\tconsole.warn('Socket error', err);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Disconnects the WebSocket connection and resets the connection state.\r\n\t */\r\n\tdisconnect(): void {\r\n\t\tif (this._io) {\r\n\t\t\tthis._io.disconnect();\r\n\t\t}\r\n\r\n\t\tthis._connected = false;\r\n\t}\r\n\r\n\t/**\r\n\t * Subscribes to a WebSocket event.\r\n\t * @param to - The event to subscribe to.\r\n\t * @param cb - The callback function to execute when the event is received.\r\n\t */\r\n\ton(to: string, cb: (message: any) => void = () => {}): void {\r\n\t\tif (!this._config.socket) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!this._io) {\r\n\t\t\tconsole.warn('Socket client not loaded.');\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!this._connected) {\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tthis.on(to, cb);\r\n\t\t\t}, 100);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._io.on(to, cb);\r\n\t}\r\n\r\n\t/**\r\n\t * Emits a message to a WebSocket event.\r\n\t * @param to - The event to emit the message to.\r\n\t * @param message - The message to emit.\r\n\t * @param room - Optional room to emit the message to.\r\n\t */\r\n\temit(to: string, message: any, room: any = false): void {\r\n\t\tif (!this._config.socket) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!this._io) {\r\n\t\t\tconsole.warn('Socket client not loaded.');\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (!this._connected) {\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tthis.emit(to, message, room);\r\n\t\t\t}, 100);\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis._io.emit(to, message, room);\r\n\t}\r\n\r\n\tprivate _emitterService = inject(EmitterService);\r\n}\r\n","import { DatePipe } from '@angular/common';\r\nimport { Injectable } from '@angular/core';\r\n\r\n@Injectable({\r\n\tprovidedIn: 'root',\r\n})\r\nexport class TimeService {\r\n\tprivate _weekDays = [\r\n\t\t'Sunday',\r\n\t\t'Monday',\r\n\t\t'Tuesday',\r\n\t\t'Wednesday',\r\n\t\t'Thursday',\r\n\t\t'Friday',\r\n\t\t'Saturday',\r\n\t];\r\n\r\n\tprivate _monthNames = [\r\n\t\t'January',\r\n\t\t'February',\r\n\t\t'March',\r\n\t\t'April',\r\n\t\t'May',\r\n\t\t'June',\r\n\t\t'July',\r\n\t\t'August',\r\n\t\t'September',\r\n\t\t'October',\r\n\t\t'November',\r\n\t\t'December',\r\n\t];\r\n\r\n\tconstructor(private _datePipe: DatePipe) {}\r\n\r\n\t/**\r\n\t * Returns the name of the day of the week for a given date.\r\n\t *\r\n\t * @param date - The date for which to get the day of the week.\r\n\t * @param format - The format in which to return the day name. Default is 'long'.\r\n\t * @returns The name of the day of the week.\r\n\t */\r\n\tgetDayName(date: Date, format: 'short' | 'long' = 'long'): string {\r\n\t\tconst dayIndex = date.getDay();\r\n\t\treturn format === 'short'\r\n\t\t\t? this._weekDays[dayIndex].substring(0, 3)\r\n\t\t\t: this._weekDays[dayIndex];\r\n\t}\r\n\t/**\r\n\t * Returns the name of the month for a given index.\r\n\t *\r\n\t * @param monthIndex - The month index (0-11).\r\n\t * @param format - The format in which to return the month name. Default is 'long'.\r\n\t * @returns The name of the month.\r\n\t */\r\n\tgetMonthName(monthIndex: number, format: 'short' | 'long' = 'long'): string {\r\n\t\tif (!Number.isInteger(monthIndex) || monthIndex < 0 || monthIndex > 11) {\r\n\t\t\tthrow new RangeError('monthIndex must be an integer between 0 and 11');\r\n\t\t}\r\n\t\treturn format === 'short'\r\n\t\t\t? this._monthNames[monthIndex].substring(0, 3)\r\n\t\t\t: this._monthNames[monthIndex];\r\n\t}\r\n\r\n\t/**\r\n\t * Formats a date according to the specified format and timezone.\r\n\t *\r\n\t * @param date - The date to format.\r\n\t * @param format - The format string (see Angular DatePipe documentation for format options).\r\n\t * @param timezone - The timezone to use for formatting.\r\n\t * @returns The formatted date string.\r\n\t */\r\n\tformatDate(date: Date, format: string = 'mediumDate', timezone: string = 'UTC'): string {\r\n\t\treturn this._datePipe.transform(date, format, timezone) || '';\r\n\t}\r\n\r\n\t/**\r\n\t * Converts a date to a different timezone.\r\n\t *\r\n\t * @param date - The date to convert.\r\n\t * @param timezone - The timezone to convert to.\r\n\t * @returns The date in the new timezone.\r\n\t */\r\n\tconvertToTimezone(date: Date, timezone: string): Date {\r\n\t\treturn new Date(date.toLocaleString('en-US', { timeZone: timezone }));\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the start of the day for a given date.\r\n\t *\r\n\t * @param date - The date for which to get the start of the day.\r\n\t * @returns The start of the day (midnight) for the given date.\r\n\t */\r\n\tstartOfDay(date: Date): Date {\r\n\t\tconst newDate = new Date(date);\r\n\t\tnewDate.setHours(0, 0, 0, 0);\r\n\t\treturn newDate;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the end of the day for a given date.\r\n\t *\r\n\t * @param date - The date for which to get the end of the day.\r\n\t * @returns The end of the day (one millisecond before midnight) for the given date.\r\n\t */\r\n\tendOfDay(date: Date): Date {\r\n\t\tconst newDate = new Date(date);\r\n\t\tnewDate.setHours(23, 59, 59, 999);\r\n\t\treturn newDate;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the start of the week for a given date.\r\n\t *\r\n\t * @param date - The date for which to get the start of the week.\r\n\t * @param locale - A BCP 47 language tag to determine the first day of the week. Defaults to the runtime locale.\r\n\t * @returns The start of the week adjusted for the locale.\r\n\t *\r\n\t * @example\r\n\t * const date = new Date('2024-05-15');\r\n\t * service.startOfWeek(date); // => Monday May 13 2024 00:00:00 for en-GB\r\n\t */\r\n\tstartOfWeek(date: Date, locale?: string): Date {\r\n\t\tconst newDate = this.startOfDay(date);\r\n\t\tconst dtf = new Intl.DateTimeFormat(locale);\r\n\t\tconst resolved = dtf.resolvedOptions().locale;\r\n\t\tconst region = resolved.split('-')[1]?.toUpperCase();\r\n\t\tconst sundayFirst = ['US', 'CA', 'AU', 'NZ', 'PH', 'BR'];\r\n\t\tconst firstDay = sundayFirst.includes(region) ? 0 : 1;\r\n\t\tconst day = newDate.getDay();\r\n\t\tconst diff = (day - firstDay + 7) % 7;\r\n\t\tnewDate.setDate(newDate.getDate() - diff);\r\n\t\treturn newDate;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the end of the week for a given date.\r\n\t *\r\n\t * @param date - The date for which to get the end of the week.\r\n\t * @param locale - A BCP 47 language tag to determine the first day of the week. Defaults to the runtime locale.\r\n\t * @returns The end of the week adjusted for the locale.\r\n\t *\r\n\t * @example\r\n\t * const date = new Date('2024-05-15');\r\n\t * service.endOfWeek(date); // => Sunday May 19 2024 23:59:59.999 for en-GB\r\n\t */\r\n\tendOfWeek(date: Date, locale?: string): Date {\r\n\t\tconst start = this.startOfWeek(date, locale);\r\n\t\tconst end = this.addDays(start, 6);\r\n\t\treturn this.endOfDay(end);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the start of the month for a given date.\r\n\t *\r\n\t * @param date - The date for which to get the start of the month.\r\n\t * @returns The start of the month.\r\n\t *\r\n\t * @example\r\n\t * const date = new Date('2024-05-15');\r\n\t * service.startOfMonth(date); // => May 1 2024 00:00:00\r\n\t */\r\n\tstartOfMonth(date: Date): Date {\r\n\t\tconst newDate = this.startOfDay(date);\r\n\t\tnewDate.setDate(1);\r\n\t\treturn newDate;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the end of the month for a given date.\r\n\t *\r\n\t * @param date - The date for which to get the end of the month.\r\n\t * @returns The end of the month.\r\n\t *\r\n\t * @example\r\n\t * const date = new Date('2024-05-15');\r\n\t * service.endOfMonth(date); // => May 31 2024 23:59:59.999\r\n\t */\r\n\tendOfMonth(date: Date): Date {\r\n\t\tconst start = this.startOfMonth(date);\r\n\t\tconst end = new Date(start);\r\n\t\tend.setMonth(end.getMonth() + 1);\r\n\t\tend.setDate(0);\r\n\t\treturn this.endOfDay(end);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the start of the year for a given date.\r\n\t *\r\n\t * @param date - The date for which to get the start of the year.\r\n\t * @returns The start of the year.\r\n\t *\r\n\t * @example\r\n\t * const date = new Date('2024-05-15');\r\n\t * service.startOfYear(date); // => Jan 1 2024 00:00:00\r\n\t */\r\n\tstartOfYear(date: Date): Date {\r\n\t\tconst newDate = this.startOfDay(date);\r\n\t\tnewDate.setMonth(0, 1);\r\n\t\treturn newDate;\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the end of the year for a given date.\r\n\t *\r\n\t * @param date - The date for which to get the end of the year.\r\n\t * @returns The end of the year.\r\n\t *\r\n\t * @example\r\n\t * const date = new Date('2024-05-15');\r\n\t * service.endOfYear(date); // => Dec 31 2024 23:59:59.999\r\n\t */\r\n\tendOfYear(date: Date): Date {\r\n\t\tconst end = new Date(date.getFullYear(), 11, 31);\r\n\t\treturn this.endOfDay(end);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the number of days in a given month and year.\r\n\t *\r\n\t * @param month - The month (0-11).\r\n\t * @param year - The year.\r\n\t * @returns The number of days in the month.\r\n\t */\r\n\tgetDaysInMonth(month: number, year: number): number {\r\n\t\treturn new Date(year, month + 1, 0).getDate();\r\n\t}\r\n\r\n\t/**\r\n\t * Checks if a given year is a leap year.\r\n\t *\r\n\t * @param year - The year to check.\r\n\t * @returns True if the year is a leap year, false otherwise.\r\n\t */\r\n\tisLeapYear(year: number): boolean {\r\n\t\treturn (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\r\n\t}\r\n\r\n\t/**\r\n\t * Adds a specified number of days to a date.\r\n\t *\r\n\t * @param date - The date to which to add days.\r\n\t * @param days - The number of days to add.\r\n\t * @returns The new date with the added days.\r\n\t */\r\n\taddDays(date: Date, days: number): Date {\r\n\t\tconst newDate = new Date(date);\r\n\t\tnewDate.setDate(newDate.getDate() + days);\r\n\t\treturn newDate;\r\n\t}\r\n\r\n\t/**\r\n\t * Adds a specified number of months to a date.\r\n\t *\r\n\t * @param date - The date to which to add months.\r\n\t * @param months - The number of months to add.\r\n\t * @returns The new date with the added months.\r\n\t */\r\n\taddMonths(date: Date, months: number): Date {\r\n\t\tconst newDate = new Date(date);\r\n\t\tnewDate.setMonth(newDate.getMonth() + months);\r\n\t\treturn newDate;\r\n\t}\r\n\r\n\t/**\r\n\t * Adds a specified number of years to a date.\r\n\t *\r\n\t * @param date - The date to which to add years.\r\n\t * @param years - The number of years to add.\r\n\t * @returns The new date with the added years.\r\n\t */\r\n\taddYears(date: Date, years: number): Date {\r\n\t\tconst newDate = new Date(date);\r\n\t\tnewDate.setFullYear(newDate.getFullYear() + years);\r\n\t\treturn newDate;\r\n\t}\r\n\r\n\t/**\r\n\t * Adds a specified number of hours to a date.\r\n\t *\r\n\t * @param date - The date to which to add hours.\r\n\t * @param hours - The number of hours to add.\r\n\t * @returns The new date with the added hours.\r\n\t */\r\n\taddHours(date: Date, hours: number): Date {\r\n\t\tconst newDate = new Date(date);\r\n\t\tnewDate.setHours(newDate.getHours() + hours);\r\n\t\treturn newDate;\r\n\t}\r\n\r\n\t/**\r\n\t * Adds a specified number of minutes to a date.\r\n\t *\r\n\t * @param date - The date to which to add minutes.\r\n\t * @param minutes - The number of minutes to add.\r\n\t * @returns The new date with the added minutes.\r\n\t */\r\n\taddMinutes(date: Date, minutes: number): Date {\r\n\t\tconst newDate = new Date(date);\r\n\t\tnewDate.setMinutes(newDate.getMinutes() + minutes);\r\n\t\treturn newDate;\r\n\t}\r\n\r\n\t/**\r\n\t * Adds a specified number of seconds to a date.\r\n\t *\r\n\t * @param date - The date to which to add seconds.\r\n\t * @param seconds - The number of seconds to add.\r\n\t * @returns The new date with the added seconds.\r\n\t */\r\n\taddSeconds(date: Date, seconds: number): Date {\r\n\t\tconst newDate = new Date(date);\r\n\t\tnewDate.setSeconds(newDate.getSeconds() + seconds);\r\n\t\treturn newDate;\r\n\t}\r\n\r\n\t/**\r\n\t * Subtracts a specified number of days from a date.\r\n\t *\r\n\t * @param date - The date from which to subtract days.\r\n\t * @param days - The number of days to subtract.\r\n\t * @returns The new date with the subtracted days.\r\n\t */\r\n\tsubtractDays(date: Date, days: number): Date {\r\n\t\treturn this.addDays(date, -days);\r\n\t}\r\n\r\n\t/**\r\n\t * Subtracts a specified number of months from a date.\r\n\t *\r\n\t * @param date - The date from which to subtract months.\r\n\t * @param months - The number of months to subtract.\r\n\t * @returns The new date with the subtracted months.\r\n\t */\r\n\tsubtractMonths(date: Date, months: number): Date {\r\n\t\treturn this.addMonths(date, -months);\r\n\t}\r\n\r\n\t/**\r\n\t * Subtracts a specified number of years from a date.\r\n\t *\r\n\t * @param date - The date from which to subtract years.\r\n\t * @param years - The number of years to subtract.\r\n\t * @returns The new date with the subtracted years.\r\n\t */\r\n\tsubtractYears(date: Date, years: number): Date {\r\n\t\treturn this.addYears(date, -years);\r\n\t}\r\n\r\n\t/**\r\n\t * Subtracts a specified number of hours from a date.\r\n\t *\r\n\t * @param date - The date from which to subtract hours.\r\n\t * @param hours - The number of hours to subtract.\r\n\t * @returns The new date with the subtracted hours.\r\n\t */\r\n\tsubtractHours(date: Date, hours: number): Date {\r\n\t\treturn this.addHours(date, -hours);\r\n\t}\r\n\r\n\t/**\r\n\t * Subtracts a specified number of minutes from a date.\r\n\t *\r\n\t * @param date - The date from which to subtract minutes.\r\n\t * @param minutes - The number of minutes to subtract.\r\n\t * @returns The new date with the subtracted minutes.\r\n\t */\r\n\tsubtractMinutes(date: Date, minutes: number): Date {\r\n\t\treturn this.addMinutes(date, -minutes);\r\n\t}\r\n\r\n\t/**\r\n\t * Subtracts a specified number of seconds from a date.\r\n\t *\r\n\t * @param date - The date from which to subtract seconds.\r\n\t * @param seconds - The number of seconds to subtract.\r\n\t * @returns The new date with the subtracted seconds.\r\n\t */\r\n\tsubtractSeconds(date: Date, seconds: number): Date {\r\n\t\treturn this.addSeconds(date, -seconds);\r\n\t}\r\n\r\n\t/**\r\n\t * Calculates the difference in days between two dates.\r\n\t *\r\n\t * @param date1 - The earlier date.\r\n\t * @param date2 - The later date.\r\n\t * @returns The number of days between the two dates.\r\n\t */\r\n\tdifferenceInDays(date1: Date, date2: Date): number {\r\n\t\tconst diff = date2.getTime() - date1.getTime();\r\n\t\treturn diff / (1000 * 60 * 60 * 24);\r\n\t}\r\n\r\n\t/**\r\n\t * Calculates the difference in hours between two dates.\r\n\t *\r\n\t * @param date1 - The earlier date.\r\n\t * @param date2 - The later date.\r\n\t * @returns The number of hours between the two dates.\r\n\t */\r\n\tdifferenceInHours(date1: Date, date2: Date): number {\r\n\t\tconst diff = date2.getTime() - date1.getTime();\r\n\t\treturn diff / (1000 * 60 * 60);\r\n\t}\r\n\r\n\t/**\r\n\t * Calculates the difference in minutes between two dates.\r\n\t *\r\n\t * @param date1 - The earlier date.\r\n\t * @param date2 - The later date.\r\n\t * @returns The number of minutes between the two dates.\r\n\t */\r\n\tdifferenceInMinutes(date1: Date, date2: Date): number {\r\n\t\tconst diff = date2.getTime() - date1.getTime();\r\n\t\treturn diff / (1000 * 60);\r\n\t}\r\n\r\n\t/**\r\n\t * Checks if two dates are on the same day.\r\n\t *\r\n\t * @param date1 - The first date.\r\n\t * @param date2 - The second date.\r\n\t * @returns True if the dates are on the same day, false otherwise.\r\n\t */\r\n\tisSameDay(date1: Date, date2: Date): boolean {\r\n\t\treturn (\r\n\t\t\tdate1.getFullYear() === date2.getFullYear() &&\r\n\t\t\tdate1.getMonth() === date2.getMonth() &&\r\n\t\t\tdate1.getDate() === date2.getDate()\r\n\t\t);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the ISO week number for a given date.\r\n\t *\r\n\t * @param date - The date for which to get the week number.\r\n\t * @returns The ISO week number (1-53).\r\n\t */\r\n\tgetWeekNumber(date: Date): number {\r\n\t\tconst tempDate = new Date(date.getTime());\r\n\t\ttempDate.setHours(0, 0, 0, 0);\r\n\t\t// Set to nearest Thursday: current date + 4 - current day number, making Thursday day 4\r\n\t\ttempDate.setDate(tempDate.getDate() + 4 - (tempDate.getDay() || 7));\r\n\t\tconst yearStart = new Date(tempDate.getFullYear(), 0, 1);\r\n\t\t// Calculate full weeks to nearest Thursday\r\n\t\treturn Math.ceil(((tempDate.getTime() - yearStart.getTime()) / 86400000 + 1) / 7);\r\n\t}\r\n\r\n\t/**\r\n\t * Returns the number of weeks in a month for a given month and year.\r\n\t *\r\n\t * @param month - The month (0-11).\r\n\t * @param year - The year.\r\n\t * @returns The number of weeks in the month.\r\n\t */\r\n\tgetWeeksInMonth(month: number, year: number): number {\r\n\t\tconst firstDayOfMonth = new Date(year, month, 1);\r\n\t\tconst lastDayOfMonth = new Date(year, month + 1, 0);\r\n\t\t// Get ISO week numbers for the first and last day of the month\r\n\t\tconst firstWeek = this.getWeekNumber(firstDayOfMonth);\r\n\t\tlet lastWeek = this.getWeekNumber(lastDayOfMonth);\r\n\t\t// Special case: when January 1st is in the last week of the previous year\r\n\t\tif (firstWeek > lastWeek) {\r\n\t\t\tlastWeek = this.getWeekNumber(new Date(year, 11, 31)); // Get week of the last day of the year\r\n\t\t}\r\n\t\treturn lastWeek - firstWeek + 1;\r\n\t}\r\n}\r\n","import { Injectable, WritableSignal, signal } from '@angular/core';\r\n\r\ntype Dict<T = unknown> = Record<string, T>;\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class UtilService {\r\n\t// --- CSS variables (persisted) ---\r\n\tprivate readonly _storageKey = 'css_variables';\r\n\tprivate _css: Dict<string> = {};\r\n\tprivate _cssSig = signal<Dict<string>>({});\r\n\r\n\t// --- Forms store ---\r\n\tprivate _forms = new Map<string, WritableSignal<any>>();\r\n\r\n\t// --- Global bag for design/debug ---\r\n\tvar: Dict = {};\r\n\r\n\t/**\r\n\t * Initialize service state: load persisted CSS variables from localStorage\r\n\t * and apply them to the document root. Emits the initial CSS snapshot.\r\n\t */\r\n\tconstructor() {\r\n\t\tthis._loadCss();\r\n\t\t// apply on boot\r\n\t\tfor (const k of Object.keys(this._css)) this._setProperty(k, this._css[k]);\r\n\t\tthis._cssSig.set({ ...this._css });\r\n\t}\r\n\r\n\t// ===== Forms Management =====\r\n\r\n\t/** Get or create a form state as a writable signal */\r\n\tformSignal<T = any>(id: string): WritableSignal<T> {\r\n\t\tlet s = this._forms.get(id);\r\n\t\tif (!s) {\r\n\t\t\ts = signal<T>({} as T);\r\n\t\t\tthis._forms.set(id, s);\r\n\t\t}\r\n\t\treturn s as WritableSignal<T>;\r\n\t}\r\n\r\n\t/** Back-compat: returns the current form object (mutable reference). Prefer formSignal(). */\r\n\tform<T = any>(id: string): T {\r\n\t\tconst s = this.formSignal<T>(id);\r\n\t\tconst v = s();\r\n\t\tif (v && typeof v === 'object') return v;\r\n\t\tconst obj = {} as T;\r\n\t\ts.set(obj);\r\n\t\treturn obj;\r\n\t}\r\n\r\n\t/**\r\n\t * Check whether a form signal has been created for the given id.\r\n\t * @param id Unique form identifier.\r\n\t * @returns True if a signal exists for the id.\r\n\t */\r\n\thasForm(id: string): boolean {\r\n\t\treturn this._forms.has(id);\r\n\t}\r\n\r\n\t/**\r\n\t * Remove form state associated with the given id.\r\n\t * @param id Unique form identifier to clear.\r\n\t */\r\n\tclearForm(id: string): void {\r\n\t\tthis._forms.delete(id);\r\n\t}\r\n\r\n\t// ===== Validation =====\r\n\r\n\t/**\r\n\t * Validate a value against a specific kind.\r\n\t * - email: RFC-light pattern check.\r\n\t * - text: typeof string.\r\n\t * - array: Array.isArray.\r\n\t * - object: non-null plain object.\r\n\t * - number: finite number.\r\n\t * - password: strength tiers (extra 0..4).\r\n\t * @param value Input to validate.\r\n\t * @param kind Validation kind.\r\n\t * @param extra Additional constraint for passwords: 0..4 increasing strength.\r\n\t * @returns True if value passes validation.\r\n\t */\r\n\tvalid(\r\n\t\tvalue: any,\r\n\t\tkind: 'email' | 'text' | 'array' | 'object' | 'number' | 'password' = 'email',\r\n\t\textra = 0,\r\n\t): boolean {\r\n\t\tswitch (kind) {\r\n\t\t\tcase 'email':\r\n\t\t\t\treturn /^\\w+([\\.-]?\\w+)*@\\w+([\\.-]?\\w+)*(\\.\\w{2,10})+$/.test(value || '');\r\n\t\t\tcase 'text':\r\n\t\t\t\treturn typeof value === 'string';\r\n\t\t\tcase 'array':\r\n\t\t\t\treturn Array.isArray(value);\r\n\t\t\tcase 'object':\r\n\t\t\t\treturn typeof value === 'object' && !Array.isArray(value) && value !== null;\r\n\t\t\tcase 'number':\r\n\t\t\t\treturn typeof value === 'number' && Number.isFinite(value);\r\n\t\t\tcase 'password':\r\n\t\t\t\tif (!value) return false;\r\n\t\t\t\tswitch (extra) {\r\n\t\t\t\t\tcase 1:\r\n\t\t\t\t\t\treturn /^((?=.*[a-z])(?=.*[0-9]))|((?=.*[A-Z])(?=.*[0-9]))/.test(value);\r\n\t\t\t\t\tcase 2:\r\n\t\t\t\t\t\treturn /^(((?=.*[a-z])(?=.*[0-9]))|((?=.*[A-Z])(?=.*[0-9])))(?=.{8,})/.test(\r\n\t\t\t\t\t\t\tvalue,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\tcase 3:\r\n\t\t\t\t\t\treturn /^((?=.*[a-z])(?=.*[A-Z])(?=.*[0-9]))(?=.{8,})/.test(value);\r\n\t\t\t\t\tcase 4:\r\n\t\t\t\t\t\treturn /^((?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[@#$%&!\\-_]))(?=.{8,})/.test(\r\n\t\t\t\t\t\t\tvalue,\r\n\t\t\t\t\t\t);\r\n\t\t\t\t\tdefault:\r\n\t\t\t\t\t\treturn !!value;\r\n\t\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\t/** Password strength: 0..5 */\r\n\tlevel(value = ''): number {\r\n\t\tif (!value) return 0;\r\n\t\tlet lvl = 0;\r\n\t\tif (value.length > 8) lvl++;\r\n\t\tif (/[a-z]/.test(value)) lvl++;\r\n\t\tif (/[A-Z]/.test(value)) lvl++;\r\n\t\tif (/[0-9]/.test(value)) lvl++;\r\n\t\tif (/[`~!@#$%^&*()_\\-+=\\[\\]{};:'\",.<>/?\\\\|]/.test(value)) lvl++;\r\n\t\treturn lvl;\r\n\t}\r\n\r\n\t// ===== CSS Variables Management =====\r\n\r\n\t/** Set multiple CSS vars. opts: { local?: boolean; host?: string } */\r\n\tsetCss(vars: Dict<string>, opts: { local?: boolean; host?: string } | string = {}): void {\r\n\t\tif (typeof opts === 'string') {\r\n\t\t\topts = opts === 'local' ? { local: true } : { host: opts };\r\n\t\t}\r\n\t\tconst { local = false, host } = opts as {\r\n\t\t\tlocal?: boolean;\r\n\t\t\thost?: string;\r\n\t\t};\r\n\t\tif (host && typeof window !== 'undefined' && window.location.host !== host) return;\r\n\r\n\t\tfor (const k of Object.keys(vars)) {\r\n\t\t\tconst v = vars[k];\r\n\t\t\tif (local) {\r\n\t\t\t\tthis._css[k] = v;\r\n\t\t\t} else if (this._css[k]) {\r\n\t\t\t\t// keep persisted value unless explicitly local\r\n\t\t\t\tthis._setProperty(k, this._css[k]);\r\n\t\t\t\tcontinue;\r\n\t\t\t}\r\n\t\t\tthis._setProperty(k, v);\r\n\t\t}\r\n\r\n\t\tif (local) {\r\n\t\t\tthis._saveCss();\r\n\t\t\tthis._cssSig.set({ ...this._css });\r\n\t\t}\r\n\t}\r\n\r\n\t/** Current persisted CSS vars snapshot */\r\n\tgetCss(): Dict<string> {\r\n\t\treturn { ...this._css };\r\n\t}\r\n\r\n\t/** Reactive signal with current persisted CSS vars */\r\n\tcssSignal(): WritableSignal<Dict<string>> {\r\n\t\treturn this._cssSig;\r\n\t}\r\n\r\n\t/** Remove persisted vars by key(s) and save */\r\n\tremoveCss(keys: string | string[]): void {\r\n\t\tconst list = Array.isArray(keys) ? keys : keys.split(' ');\r\n\t\tfor (const k of list) delete this._css[k];\r\n\t\tthis._saveCss();\r\n\t\tthis._cssSig.set({ ...this._css });\r\n\t}\r\n\r\n\t// ===== Generators =====\r\n\r\n\t/**\r\n\t * Generate an array of given length filled with sequential numbers (1..n),\r\n\t * random text, dates from today, or a constant value.\r\n\t * @param len Desired array length.\r\n\t * @param type 'number' | 'text' | 'date' | any other constant value to repeat.\r\n\t * @returns Generated array.\r\n\t */\r\n\tarr(len = 10, type: 'number' | 'text' | 'date' | string = 'number'): any[] {\r\n\t\tconst out: any[] = [];\r\n\t\tfor (let i = 0; i < len; i++) {\r\n\t\t\tswitch (type) {\r\n\t\t\t\tcase 'number':\r\n\t\t\t\t\tout.push(i + 1);\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'text':\r\n\t\t\t\t\tout.push(this.text());\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tcase 'date':\r\n\t\t\t\t\tout.push(new Date(Date.now() + i * 86_400_000));\r\n\t\t\t\t\tbreak;\r\n\t\t\t\tdefault:\r\n\t\t\t\t\tout.push(type);\r\n\t\t\t}\r\n\t\t}\r\n\t\treturn out;\r\n\t}\r\n\r\n\t/**\r\n\t * Create a random alphanumeric string.\r\n\t * @param length Number of characters to generate.\r\n\t * @returns Random string of requested length.\r\n\t */\r\n\ttext(length = 10): string {\r\n\t\tconst chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\r\n\t\tlet res = '';\r\n\t\tfor (let i = 0; i < length; i++)\r\n\t\t\tres += chars.charAt(Math.floor(Math.random() * chars.length));\r\n\t\treturn res;\r\n\t}\r\n\r\n\t// ===== Internals =====\r\n\r\n\t/** Persist current CSS variables to localStorage. */\r\n\tprivate _saveCss(): void {\r\n\t\ttry {\r\n\t\t\tif (typeof localStorage !== 'undefined') {\r\n\t\t\t\tlocalStorage.setItem(this._storageKey, JSON.stringify(this._css));\r\n\t\t\t}\r\n\t\t} catch {}\r\n\t}\r\n\r\n\t/** Load CSS variables snapshot from localStorage into memory. */\r\n\tprivate _loadCss(): void {\r\n\t\ttry {\r\n\t\t\tif (typeof localStorage !== 'undefined') {\r\n\t\t\t\tconst raw = localStorage.getItem(this._storageKey);\r\n\t\t\t\tthis._css = raw ? JSON.parse(raw) : {};\r\n\t\t\t}\r\n\t\t} catch {\r\n\t\t\tthis._css = {};\r\n\t\t}\r\n\t}\r\n\r\n\t/**\r\n\t * Apply a CSS variable to the :root element.\r\n\t * @param key CSS custom property name (e.g., --brand-color).\r\n\t * @param value CSS value to set.\r\n\t */\r\n\tprivate _setProperty(key: string, value: string): void {\r\n\t\ttry {\r\n\t\t\tif (typeof document !== 'undefined') {\r\n\t\t\t\tdocument.documentElement.style.setProperty(key, value);\r\n\t\t\t}\r\n\t\t} catch {}\r\n\t}\r\n}\r\n","import { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';\r\nimport { EnvironmentProviders, makeEnvironmentProviders } from '@angular/core';\r\nimport { CONFIG_TOKEN, Config, DEFAULT_CONFIG } from './interfaces/config.interface';\r\n\r\nexport function provideWacom(config: Config = DEFAULT_CONFIG): EnvironmentProviders {\r\n\treturn makeEnvironmentProviders([\r\n\t\t{ provide: CONFIG_TOKEN, useValue: config },\r\n\t\tprovideHttpClient(withInterceptorsFromDi()),\r\n\t]);\r\n}\r\n","/* initialize */\r\nimport { CommonModule } from '@angular/common';\r\nimport { provideHttpClient, withInterceptorsFromDi } from '@angular/common/http';\r\nimport { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { Config, CONFIG_TOKEN, DEFAULT_CONFIG } from './interfaces/config.interface';\r\n\r\n/* directives */\r\nimport { ClickOutsideDirective } from './directives/click-outside.directive';\r\nconst DIRECTIVES = [ClickOutsideDirective, TranslateDirective];\r\n\r\n/* pipes */\r\nimport { ArrPipe } from './pipes/arr.pipe';\r\nimport { MongodatePipe } from './pipes/mongodate.pipe';\nimport { PaginationPipe } from './pipes/pagination.pipe';\nimport { SafePipe } from './pipes/safe.pipe';\nimport { SearchPipe } from './pipes/search.pipe';\nimport { SplicePipe } from './pipes/splice.pipe';\nimport { TranslateDirective } from './translate/translate.directive';\nimport { TranslatePipe } from './translate/translate.pipe';\nconst PIPES = [\r\n\tArrPipe,\r\n\tSafePipe,\r\n\tSplicePipe,\r\n\tSearchPipe,\r\n\tMongodatePipe,\r\n\tPaginationPipe,\r\n\tTranslatePipe,\r\n];\r\n\r\n@NgModule({\r\n\timports: [CommonModule, FormsModule, ...PIPES, ...DIRECTIVES],\r\n\texports: [...PIPES, ...DIRECTIVES],\r\n\tproviders: [\r\n\t\t{ provide: CONFIG_TOKEN, useValue: DEFAULT_CONFIG },\r\n\t\tprovideHttpClient(withInterceptorsFromDi()),\r\n\t],\r\n})\r\n/**\r\n * @deprecated Use provideWacom instead.\r\n */\r\nexport class WacomModule {\r\n\tstatic forRoot(config: Config = DEFAULT_CONFIG): ModuleWithProviders<WacomModule> {\r\n\t\treturn {\r\n\t\t\tngModule: WacomModule,\r\n\t\t\tproviders: [\r\n\t\t\t\t{\r\n\t\t\t\t\tprovide: CONFIG_TOKEN,\r\n\t\t\t\t\tuseValue: config,\r\n\t\t\t\t},\r\n\t\t\t],\r\n\t\t};\r\n\t}\r\n}\r\n","/*\r\n *\tCore\r\n */\r\nexport * from './src/core/core.prototype';\r\nexport * from './src/core/core.service';\r\nexport * from './src/core/core.type';\r\n\r\n/*\r\n *\tCrud\r\n */\r\nexport * from './src/crud/crud.component';\r\nexport * from './src/crud/crud.interface';\r\nexport * from './src/crud/crud.service';\r\n\r\n/*\r\n *\tTheme\r\n */\r\nexport * from './src/theme/theme.service';\r\nexport * from './src/theme/theme.type';\r\n\r\n/*\r\n *\tMeta\r\n */\r\nexport * from './src/meta/meta.guard';\r\nexport * from './src/meta/meta.interface';\r\nexport * from './src/meta/meta.service';\r\n\r\n/*\r\n *\tStore\r\n */\r\nexport * from './src/store/store.interface';\r\nexport * from './src/store/store.service';\r\n\r\n/*\r\n *\tTranslate\n */\nexport * from './src/translate/provide-translate';\nexport * from './src/translate/translate.directive';\nexport * from './src/translate/translate.interface';\nexport * from './src/translate/translate.pipe';\nexport * from './src/translate/translate.service';\nexport * from './src/translate/translate.type';\n\r\n/*\r\n *\tInterfaces\r\n */\r\nexport * from './src/interfaces/config.interface';\r\nexport * from './src/interfaces/dom.interface';\r\nexport * from './src/interfaces/http.interface';\r\nexport * from './src/interfaces/network.interface';\r\n\r\n/*\r\n *\tDirectives\r\n */\r\nexport * from './src/directives/click-outside.directive';\r\nexport * from './src/directives/manual-disabled.directive';\r\nexport * from './src/directives/manual-name.directive';\r\nexport * from './src/directives/manual-readonly.directive';\r\nexport * from './src/directives/manual-type.directive';\r\n\r\n/*\r\n *\tPipes\r\n */\r\nexport * from './src/pipes/arr.pipe';\r\nexport * from './src/pipes/mongodate.pipe';\r\nexport * from './src/pipes/number.pipe';\r\nexport * from './src/pipes/pagination.pipe';\r\nexport * from './src/pipes/safe.pipe';\r\nexport * from './src/pipes/search.pipe';\r\nexport * from './src/pipes/splice.pipe';\r\nexport * from './src/pipes/split.pipe';\r\n\r\n/*\r\n *\tServices\r\n */\r\nexport * from './src/services/dom.service';\r\nexport * from './src/services/emitter.service';\r\nexport * from './src/services/http.service';\r\nexport * from './src/services/network.service';\r\nexport * from './src/services/rtc.service';\r\nexport * from './src/services/socket.service';\r\nexport * from './src/services/time.service';\r\nexport * from './src/services/util.service';\r\n\r\n/*\r\n *\tInitial\r\n *\r\n *\tmake different kind of modules, one which import all, other for piece by piece\r\n */\r\nexport * from './src/provide-wacom';\r\nexport * from './src/wacom.module';\r\n/*\r\n *\tEnd of Support\r\n */\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["filter","i1","i1.MetaService"],"mappings":"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"}