@reforgium/internal 1.0.2 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
|
@@ -8,6 +8,14 @@ import { InjectionToken, signal, effect, untracked } from '@angular/core';
|
|
|
8
8
|
* @type {InjectionToken<Signal<Langs>>}
|
|
9
9
|
*/
|
|
10
10
|
const SELECTED_LANG = new InjectionToken('RE_SELECTED_LANG');
|
|
11
|
+
/**
|
|
12
|
+
* Injection token for language change provider.
|
|
13
|
+
* Provides access to method for changing the current application language.
|
|
14
|
+
* Can be overridden in app.config with a custom provider.
|
|
15
|
+
*
|
|
16
|
+
* @type {InjectionToken<ChangeLangProvider>}
|
|
17
|
+
*/
|
|
18
|
+
const CHANGE_LANG = new InjectionToken('RE_CHANGE_LANG');
|
|
11
19
|
/**
|
|
12
20
|
* Injection token for translation provider.
|
|
13
21
|
* Provides access to translation methods for message retrieval and namespace loading.
|
|
@@ -21,6 +29,7 @@ const TRANSLATION = new InjectionToken('RE_GET_LANG');
|
|
|
21
29
|
* Can be overridden in app.config with a custom provider.
|
|
22
30
|
*/
|
|
23
31
|
const SELECTED_THEME = new InjectionToken('RE_SELECTED_THEME');
|
|
32
|
+
const CHANGE_THEME = new InjectionToken('RE_CHANGE_THEME');
|
|
24
33
|
|
|
25
34
|
/**
|
|
26
35
|
* Injection token for the current device type as a Signal.
|
|
@@ -849,5 +858,5 @@ const generateId = (limit = 15, radix = 36) => Math.random()
|
|
|
849
858
|
* Generated bundle index. Do not edit.
|
|
850
859
|
*/
|
|
851
860
|
|
|
852
|
-
export { CURRENT_DEVICE, SELECTED_LANG, SELECTED_THEME, TRANSLATION, VALIDATION_MESSAGES, appendQueryParams, base64ToBlob, compareRoutes, concatArray, copyText, debounceSignal, deepEqual, downloadByBlob, downloadByUrl, fillUrlWithParams, formatDate, formatToLocaledDate, formatToSpacedNumber, generateId, getAvailableHeight, getChainedValue, getCorrectedPosition, isDatePeriod, isNullable, isNumber, isObject, makeQuery, materializeRoutePath, normalizeUrl, parseQueryArray, parseQueryParams, parseToDate, parseToDatePeriod, reformatDateToISO, throttleSignal, toDate, truncate };
|
|
861
|
+
export { CHANGE_LANG, CHANGE_THEME, CURRENT_DEVICE, SELECTED_LANG, SELECTED_THEME, TRANSLATION, VALIDATION_MESSAGES, appendQueryParams, base64ToBlob, compareRoutes, concatArray, copyText, debounceSignal, deepEqual, downloadByBlob, downloadByUrl, fillUrlWithParams, formatDate, formatToLocaledDate, formatToSpacedNumber, generateId, getAvailableHeight, getChainedValue, getCorrectedPosition, isDatePeriod, isNullable, isNumber, isObject, makeQuery, materializeRoutePath, normalizeUrl, parseQueryArray, parseQueryParams, parseToDate, parseToDatePeriod, reformatDateToISO, throttleSignal, toDate, truncate };
|
|
853
862
|
//# sourceMappingURL=reforgium-internal.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reforgium-internal.mjs","sources":["../../../../libs/internal/src/tokens/locale.token.ts","../../../../libs/internal/src/tokens/theme.token.ts","../../../../libs/internal/src/tokens/device.token.ts","../../../../libs/internal/src/tokens/validation-messages.token.ts","../../../../libs/internal/src/utils/web.utils.ts","../../../../libs/internal/src/utils/timers.utils.ts","../../../../libs/internal/src/utils/date.utils.ts","../../../../libs/internal/src/utils/types.utils.ts","../../../../libs/internal/src/utils/format.utils.ts","../../../../libs/internal/src/utils/positions.utils.ts","../../../../libs/internal/src/utils/available-height.utils.ts","../../../../libs/internal/src/utils/get-chained-value.utils.ts","../../../../libs/internal/src/utils/urls.utils.ts","../../../../libs/internal/src/utils/routes.utils.ts","../../../../libs/internal/src/utils/deep-equal.utils.ts","../../../../libs/internal/src/utils/generate.utils.ts","../../../../libs/internal/src/reforgium-internal.ts"],"sourcesContent":["import { InjectionToken, Signal } from '@angular/core';\r\n\r\n/**\r\n * Available application languages.\r\n * Should be synchronized with localization keys.\r\n *\r\n * @type {'ru' | 'kg'}\r\n * 'ru' - Russian language\r\n * 'kg' - Kyrgyz language\r\n */\r\nexport type Langs = 'ru' | 'kg';\r\n\r\n/**\r\n * Translation provider interface for managing translations and namespaces.\r\n * Provides methods to retrieve translated messages and load translation namespaces.\r\n */\r\ntype TranslationProvider = {\r\n /**\r\n * Retrieves translated message by key with optional parameter interpolation.\r\n *\r\n * @param {string} message - Translation key to retrieve.\r\n * @param {Record<string, string>} [params] - Optional parameters for interpolation in translation.\r\n * @return {string} Translated message with applied parameters or original key if translation not found.\r\n */\r\n get: (message: string, params?: Record<string, string>) => string;\r\n /**\r\n * Loads translation namespace asynchronously.\r\n *\r\n * @param {string} ns - Namespace identifier to load.\r\n * @return {Promise<void>} Promise that resolves when namespace is loaded successfully.\r\n */\r\n loadNamespace: (ns: string) => Promise<void>;\r\n};\r\n\r\n/**\r\n * Injection token for the current application language as a Signal.\r\n * Provides reactive access to the currently selected language.\r\n * Can be overridden in app.config with a custom provider.\r\n *\r\n * @type {InjectionToken<Signal<Langs>>}\r\n */\r\nexport const SELECTED_LANG = new InjectionToken<Signal<Langs>>('RE_SELECTED_LANG');\r\n\r\n/**\r\n * Injection token for translation provider.\r\n * Provides access to translation methods for message retrieval and namespace loading.\r\n *\r\n * @type {InjectionToken<TranslationProvider>}\r\n */\r\nexport const TRANSLATION = new InjectionToken<TranslationProvider>('RE_GET_LANG');\r\n","import { InjectionToken, Signal } from '@angular/core';\r\n\r\n/**\r\n * List of supported application themes.\r\n *\r\n * `'light'` — light theme\r\n * `'dark'` — dark theme\r\n */\r\nexport type Themes = 'light' | 'dark';\r\n\r\n/**\r\n * Current application theme as Signal.\r\n * Can be overridden in app.config with a custom provider.\r\n */\r\nexport const SELECTED_THEME = new InjectionToken<Signal<Themes>>('RE_SELECTED_THEME');\r\n","import { InjectionToken, Signal } from '@angular/core';\r\n\r\n/**\r\n * Supported device types for responsive design and device-specific logic.\r\n *\r\n * @typedef {('mobile' | 'tablet' | 'desktop-s' | 'desktop')} Devices\r\n *\r\n * Possible values:\r\n * - 'mobile' - Mobile devices (smartphones)\r\n * - 'tablet' - Tablet devices\r\n * - 'desktop-s' - Small desktop screens\r\n * - 'desktop' - Standard desktop screens\r\n */\r\nexport type Devices = 'mobile' | 'tablet' | 'desktop-s' | 'desktop';\r\n\r\n/**\r\n * Injection token for the current device type as a Signal.\r\n *\r\n * Provides reactive access to the current device type throughout the application.\r\n * Can be overridden in app.config with a custom provider to supply device detection logic.\r\n *\r\n * @example\r\n * ```typescript\r\n * // In app.config.ts\r\n * providers: [\r\n * {\r\n * provide: CURRENT_DEVICE,\r\n * useValue: signal<Devices>('mobile')\r\n * }\r\n * ]\r\n *\r\n * // In a component or service\r\n * private readonly currentDevice = inject(CURRENT_DEVICE);\r\n * ```\r\n */\r\nexport const CURRENT_DEVICE = new InjectionToken<Signal<Devices>>('RE_CURRENT_DEVICE');\r\n","import { InjectionToken } from '@angular/core';\r\n\r\n/**\r\n * Represents flexible validation error data without enforced fields.\r\n * Contains common properties like requiredLength and actualLength\r\n * and allows additional string properties through index signature.\r\n *\r\n * @property {string} requiredLength - The required length for validation.\r\n * @property {string} actualLength - The actual length of the validated value.\r\n */\r\nexport type ValidationErrorData = {\r\n requiredLength: string;\r\n actualLength: string;\r\n [key: string]: string;\r\n};\r\n\r\n/**\r\n * Map of validation error names to message generator functions.\r\n * Each key represents an error name, and the value is a function\r\n * that takes validation error data and returns a formatted error message.\r\n *\r\n * @example\r\n * const messages: ValidationMessages = {\r\n * minlength: (error) => `Minimum length is ${error.requiredLength}`\r\n * };\r\n */\r\nexport type ValidationMessages = Record<string, (error: ValidationErrorData) => string>;\r\n\r\n/**\r\n * Injection token for a validation messages map.\r\n * Can be overridden in feature modules to provide custom validation messages.\r\n * Defaults to an empty object when not provided.\r\n *\r\n * @example\r\n * // In a feature module:\r\n * providers: [\r\n * {\r\n * provide: VALIDATION_MESSAGES,\r\n * useValue: {\r\n * required: () => 'This field is required',\r\n * minlength: (error) => `Min length: ${error.requiredLength}`\r\n * }\r\n * }\r\n * ]\r\n */\r\nexport const VALIDATION_MESSAGES = new InjectionToken<ValidationMessages>('RE_VALIDATION_MESSAGES', {\r\n providedIn: 'root',\r\n factory: () => ({}),\r\n});\r\n","/**\r\n * Загружает файл из объекта Blob и предлагает пользователю сохранить его.\r\n *\r\n * @param {Blob} blob - Объект Blob, представляющий файл для загрузки.\r\n * @param {string} [fileName] - Опционально. Имя для загружаемого файла.\r\n * Если не указано, в качестве имени файла будет использоваться текущая метка времени.\r\n * @return {void} Не возвращает значение.\r\n */\r\nexport function downloadByBlob(blob: Blob, fileName?: string | undefined): void {\r\n const win = window;\r\n\r\n try {\r\n const url = win.URL.createObjectURL(blob);\r\n\r\n downloadByUrl(url, fileName);\r\n setTimeout(() => win.URL.revokeObjectURL(url), 200);\r\n } catch (e) {\r\n throw `Download error: ${e}`;\r\n }\r\n}\r\n\r\n/**\r\n * Инициирует загрузку файла по-указанному URL. Опционально можно указать пользовательское имя файла.\r\n *\r\n * @param {string} url - URL файла для загрузки.\r\n * @param {string} [filename] - Желаемое имя для загружаемого файла.\r\n * Если не указано, будет использовано имя на основе временной метки.\r\n * @return {void} Функция не возвращает значение.\r\n */\r\nexport function downloadByUrl(url: string, filename?: string): void {\r\n const win = window;\r\n const a = document.createElement('a');\r\n\r\n a.style.display = 'none';\r\n a.href = url;\r\n a.download = filename || `${new Date().toISOString()}`;\r\n a.rel = 'noopener';\r\n\r\n win.document.body.appendChild(a);\r\n a.click();\r\n win.document.body.removeChild(a);\r\n}\r\n\r\n/**\r\n * Копирует указанный текст в буфер обмена. Использует Clipboard API, если доступен,\r\n * в противном случае использует `document.execCommand` в качестве запасного метода.\r\n *\r\n * @param {string} text - Текст, который необходимо скопировать в буфер обмена.\r\n * @return {Promise<boolean>} Промис, который резолвится в boolean, указывающий, было ли\r\n * копирование текста успешным.\r\n */\r\nexport async function copyText(text: string): Promise<boolean> {\r\n const win = window;\r\n\r\n try {\r\n if (win.navigator.clipboard?.['writeText']) {\r\n await win.navigator.clipboard.writeText(text);\r\n\r\n return true;\r\n }\r\n } catch (err) {\r\n // eslint-disable-next-line no-console\r\n console.warn('Clipboard API failed, fallback to execCommand', err);\r\n }\r\n\r\n const ta = win.document.createElement('textarea');\r\n\r\n ta.value = text;\r\n ta.style.position = 'fixed';\r\n ta.style.opacity = '0';\r\n win.document.body.appendChild(ta);\r\n ta.focus();\r\n ta.select();\r\n\r\n const ok = win.document.execCommand?.('copy') ?? false;\r\n\r\n win.document.body.removeChild(ta);\r\n\r\n return ok;\r\n}\r\n\r\n/**\r\n * Преобразует строку в формате Base64 в объект Blob.\r\n *\r\n * @param {string} base64 - Строка в формате Base64. Может опционально включать MIME-тип\r\n * в формате `data:<mimeType>;base64,<data>`.\r\n * @param {string} [mimeType=''] - MIME-тип данных. Необязательный параметр, будет переопределен,\r\n * если `base64` включает MIME-тип.\r\n * @return {Blob} Объект Blob, созданный из строки в формате Base64.\r\n */\r\nexport function base64ToBlob(base64: string, mimeType: string = ''): Blob {\r\n const matches = base64.match(/^data:(.+);base64,(.*)$/);\r\n const data = matches ? matches[2] : base64;\r\n const mime = matches ? matches[1] : mimeType;\r\n\r\n const byteChars = atob(data);\r\n const byteNumbers = new Array(byteChars.length);\r\n\r\n for (let i = 0; i < byteChars.length; i++) {\r\n byteNumbers[i] = byteChars.charCodeAt(i);\r\n }\r\n\r\n const byteArray = new Uint8Array(byteNumbers);\r\n\r\n return new Blob([byteArray], { type: mime });\r\n}\r\n","import { effect, Injector, Signal, signal, untracked } from '@angular/core';\r\n\r\nimport { AnyType } from '../models';\r\n\r\nexport const debounceSignal = <T>(src: Signal<T>, ms = 150, opts?: { injector?: Injector }): Signal<T> => {\r\n const out = signal(src());\r\n let timeoutRef: AnyType;\r\n\r\n effect(\r\n (onCleanup) => {\r\n const v = src();\r\n\r\n if (Object.is(v, out())) {\r\n return;\r\n }\r\n\r\n untracked(() => {\r\n clearTimeout(timeoutRef);\r\n timeoutRef = setTimeout(() => out.set(v), ms);\r\n });\r\n\r\n onCleanup(() => clearTimeout(timeoutRef));\r\n },\r\n { injector: opts?.injector },\r\n );\r\n\r\n return out.asReadonly();\r\n};\r\n\r\nexport const throttleSignal = <T>(src: Signal<T>, ms = 100, opts?: { injector?: Injector }): Signal<T> => {\r\n const out = signal(src());\r\n let last = 0;\r\n let queued: T | undefined;\r\n let timeoutRef: AnyType;\r\n\r\n const flush = () => {\r\n if (queued !== undefined) {\r\n out.set(queued);\r\n queued = undefined;\r\n last = performance.now();\r\n }\r\n\r\n timeoutRef = 0;\r\n };\r\n\r\n effect(\r\n (onCleanup) => {\r\n const v = src();\r\n\r\n if (Object.is(v, out())) {\r\n return;\r\n }\r\n\r\n untracked(() => {\r\n const now = performance.now();\r\n\r\n if (now - last >= ms) {\r\n out.set(v);\r\n last = now;\r\n\r\n clearTimeout(timeoutRef);\r\n timeoutRef = null;\r\n queued = undefined;\r\n } else {\r\n queued = v;\r\n timeoutRef = setTimeout(flush, ms - (now - last));\r\n }\r\n });\r\n\r\n onCleanup(() => {\r\n if (timeoutRef) {\r\n clearTimeout(timeoutRef);\r\n timeoutRef = null;\r\n }\r\n\r\n queued = undefined;\r\n });\r\n },\r\n { injector: opts?.injector },\r\n );\r\n\r\n return out.asReadonly();\r\n};\r\n","const pad = (n: number) => n.toString().padStart(2, '0');\r\n\r\n/**\r\n * Форматирует объект даты в строку заданного формата.\r\n *\r\n * @param {Date} date - Объект даты для форматирования.\r\n * @param {string} [format='yyyy-MM-dd'] - Строковый формат для применения. По умолчанию 'yyyy-MM-dd'.\r\n * Поддерживаемые токены в строке формата:\r\n * - yyyy: Полный год (например, 2023)\r\n * - MM: Месяц с ведущим нулем (01-12)\r\n * - dd: День месяца с ведущим нулем (01-31)\r\n * - HH: Час в 24-часовом формате с ведущим нулем (00-23)\r\n * - mm: Минуты с ведущим нулем (00-59)\r\n * - ss: Секунды с ведущим нулем (00-59)\r\n *\r\n * @returns {string} Отформатированная строка даты. Возвращает пустую строку, если входная дата некорректна.\r\n */\r\nexport const formatDate = (date: Date, format: string = 'yyyy-MM-dd'): string => {\r\n if (isNaN(date['getTime']?.())) {\r\n return '';\r\n }\r\n\r\n const tokens: Record<string, string> = {\r\n yyyy: date.getFullYear().toString(),\r\n MM: pad(date.getMonth() + 1),\r\n dd: pad(date.getDate()),\r\n HH: pad(date.getHours()),\r\n mm: pad(date.getMinutes()),\r\n ss: pad(date.getSeconds()),\r\n };\r\n let formatted = format;\r\n\r\n for (const [token, value] of Object.entries(tokens)) {\r\n formatted = formatted.replace(new RegExp(token, 'g'), value);\r\n }\r\n\r\n return formatted;\r\n};\r\n\r\n/**\r\n * Форматирует заданную дату в локализованную строковую репрезентацию в формате 'день месяц год'.\r\n * Месяц локализован для 'ru-RU' локали и сокращен.\r\n *\r\n * @param {Date} date - Объект даты для форматирования.\r\n * @return {string} Строка, представляющая отформатированную дату в формате 'день месяц год'.\r\n */\r\nexport function formatToLocaledDate(date: Date): string {\r\n const day = date.getDate();\r\n const month = date.toLocaleString('ru-RU', { month: 'short' }).replace('.', '');\r\n const year = date.getFullYear();\r\n\r\n return `${day} ${month} ${year}`;\r\n}\r\n\r\n/**\r\n * Парсит дату из строки по заданной маске.\r\n * Поддерживает dd, MM, yyyy, HH, mm, ss.\r\n * Разделители любые: '.', '/', '-',' '.\r\n *\r\n * @param {string} value - исходная строка с датой\r\n * @param {string} format - маска, например \"dd.MM.yyyy\"\r\n * @returns {Date|null}\r\n */\r\nexport const parseToDate = (value: unknown, format: string = 'dd.MM.yyyy'): Date | null => {\r\n if (typeof value !== 'string' || !format) {\r\n return null;\r\n }\r\n\r\n const tokens = format.match(/(yyyy|MM|dd|HH|mm|ss)/g);\r\n const parts = value.split(/\\D+/).filter(Boolean);\r\n\r\n if (!tokens || tokens.length !== parts.length) {\r\n return null;\r\n }\r\n\r\n let year = 1970,\r\n month = 0,\r\n day = 1,\r\n hours = 0,\r\n minutes = 0,\r\n seconds = 0;\r\n\r\n const map: Record<string, (index: number) => void> = {\r\n yyyy: (index: number) => (year = +parts[index]),\r\n MM: (index: number) => (month = +parts[index] - 1),\r\n dd: (index: number) => (day = +parts[index]),\r\n HH: (index: number) => (hours = +parts[index]),\r\n mm: (index: number) => (minutes = +parts[index]),\r\n ss: (index: number) => (seconds = +parts[index]),\r\n };\r\n\r\n tokens.forEach((token, i) => map[token]?.(i));\r\n\r\n const date = new Date(year, month, day, hours, minutes, seconds);\r\n\r\n if (date.getFullYear() !== year || date.getMonth() !== month || date.getDate() !== day) {\r\n return null;\r\n }\r\n\r\n return date;\r\n};\r\n\r\n/**\r\n * Парсит строковое представление двух дат в кортеж объектов `Date` или значений `null`.\r\n *\r\n * Эта функция пытается извлечь и разобрать два значения даты из входной строки\r\n * на основе предоставленного формата даты. Если парсинг неуспешен, возвращаемый кортеж будет\r\n * состоять из значений `null`. По умолчанию ожидаемый формат даты - `dd.MM.yyyy`, но он\r\n * может быть изменен.\r\n *\r\n * @param {string | null} value - Строка, содержащая представления дат для разбора.\r\n * Если `null`, функция вернет `[null, null]`.\r\n * @param {string} [format='dd.MM.yyyy'] - Формат даты, используемый для парсинга.\r\n * Поддерживает `yyyy`, `MM`, `dd`, `HH`, `mm` и `ss`.\r\n * @returns {[Date | null, Date | null]} Кортеж, где первый элемент - разобранная начальная дата\r\n * и второй элемент - разобранная конечная дата. Если парсинг не удался, оба элемента будут `null`.\r\n */\r\nexport const parseToDatePeriod = (value: unknown, format: string = 'dd.MM.yyyy'): [Date | null, Date | null] => {\r\n if (typeof value !== 'string' || !format) {\r\n return [null, null];\r\n }\r\n\r\n const pattern = format\r\n .replace('yyyy', '\\\\d{4}')\r\n .replace('MM', '\\\\d{2}')\r\n .replace('dd', '\\\\d{2}')\r\n .replace('HH', '\\\\d{2}')\r\n .replace('mm', '\\\\d{2}')\r\n .replace('ss', '\\\\d{2}');\r\n const regex = new RegExp(`(${pattern})[^0-9]+(${pattern})`);\r\n const match = value.match(regex);\r\n\r\n if (match) {\r\n const from = parseToDate(match[1], format);\r\n const to = parseToDate(match[2], format);\r\n\r\n return [from, to];\r\n } else {\r\n return [null, null];\r\n }\r\n};\r\n\r\n/**\r\n * Определяет, является ли переданное значение периодом дат.\r\n *\r\n * Период дат представляется в виде массива, содержащего ровно два экземпляра Date.\r\n * Оба элемента массива должны быть корректными объектами Date (т.е. не `Invalid Date`).\r\n *\r\n * @param {unknown} value - Значение для проверки.\r\n * @returns {value is [Date, Date]} - Возвращает `true`, если значение является корректным периодом дат, иначе `false`.\r\n */\r\nexport const isDatePeriod = (value: unknown): value is [Date, Date] =>\r\n Array.isArray(value) && value.length === 2 && value.every((it) => it instanceof Date && !isNaN(it.getTime()));\r\n\r\n/**\r\n * Преобразует различные типы данных в объект Date.\r\n *\r\n * @param {unknown} v - Значение для преобразования. Может быть объектом Date,\r\n * числом (timestamp) или строкой, содержащей корректную дату.\r\n * @returns {Date} Объект Date. Если преобразование невозможно, возвращает Invalid Date.\r\n */\r\nexport const toDate = (v: unknown): Date => {\r\n if (v instanceof Date) return v;\r\n if (typeof v === 'number') return new Date(v);\r\n if (typeof v === 'string') return new Date(v);\r\n\r\n return new Date(NaN);\r\n};\r\n\r\n/**\r\n * Переводит строку даты из заданного формата в ISO (UTC).\r\n * Пример:\r\n * reformatDateToISO(\"24.11.2025\", \"dd.MM.yyyy\")\r\n * → \"2025-11-24T00:00:00.000Z\"\r\n */\r\nexport function reformatDateToISO(dateStr: string, mask: string): string | null {\r\n if (!dateStr || !mask) {\r\n return null;\r\n }\r\n\r\n const partsFmt = mask.split(/[^A-Za-z]+/g);\r\n const partsVal = dateStr.split(/[^0-9]+/g);\r\n\r\n if (!partsFmt.length || partsFmt.length !== partsVal.length) {\r\n return null;\r\n }\r\n\r\n let day = 1;\r\n let month = 1;\r\n let year = 1970;\r\n\r\n for (let i = 0; i < partsFmt.length; i++) {\r\n const fmt = partsFmt[i];\r\n const raw = partsVal[i];\r\n const val = Number.parseInt(raw, 10);\r\n\r\n if (Number.isNaN(val)) return null;\r\n\r\n switch (fmt) {\r\n case 'dd':\r\n day = val;\r\n break;\r\n case 'MM':\r\n month = val;\r\n break;\r\n case 'yyyy':\r\n year = val;\r\n break;\r\n case 'yy':\r\n year = 2000 + val;\r\n break;\r\n default:\r\n return null;\r\n }\r\n }\r\n\r\n if (month < 1 || month > 12 || day < 1 || day > 31) {\r\n return null;\r\n }\r\n\r\n const date = new Date(Date.UTC(year, month - 1, day));\r\n\r\n if (date.getUTCFullYear() !== year || date.getUTCMonth() !== month - 1 || date.getUTCDate() !== day) {\r\n return null;\r\n }\r\n\r\n return date.toISOString();\r\n}\r\n","import { AnyDict, AnyType } from '../models';\r\n\r\n/**\r\n * Определяет, является ли переданное значение null или undefined, опционально учитывая\r\n * пустые строки как null-подобные значения.\r\n *\r\n * @param {unknown} value - Значение для проверки на null или undefined.\r\n * @param {boolean} [withEmptyString=false] - Если true, пустые строки также считаются\r\n * null-подобными значениями в дополнение к null и undefined.\r\n * @returns {value is null | undefined} Возвращает `true`, если значение равно null, undefined,\r\n * или (если `withEmptyString` равно true) пустой строке. В противном случае возвращает `false`.\r\n */\r\nexport const isNullable = (value: unknown, withEmptyString: boolean = false): value is null | undefined =>\r\n value === null || value === undefined || (withEmptyString ? value === '' : false);\r\n\r\n/**\r\n * Проверяет, является ли переданное значение числом или может быть преобразовано в корректное число.\r\n *\r\n * Эта функция проверяет, является ли входное значение числовым. Если входное значение\r\n * имеет тип number, проверяется, что оно является конечным числом и не NaN. Если входное\r\n * значение является строкой, проверяется возможность преобразования этой строки в корректное число.\r\n *\r\n * @param {unknown} value - Значение для проверки.\r\n * @param {boolean} [fromString=false] - Если true, строковые значения будут пытаться преобразоваться в число.\r\n * @returns {value is number} `true` если значение является числом или строкой,\r\n * которую можно преобразовать в число; иначе `false`.\r\n */\r\nexport const isNumber = (value: unknown, fromString: boolean = false): value is number => {\r\n if (typeof value === 'number') {\r\n return !isNaN(value) && isFinite(value);\r\n }\r\n\r\n if (fromString && typeof value === 'string' && value.trim() !== '') {\r\n return !isNaN(Number(value));\r\n }\r\n\r\n return false;\r\n};\r\n\r\n/**\r\n * Определяет, является ли предоставленное значение объектом.\r\n *\r\n * Эта функция проверяет, что переданное значение имеет тип 'object',\r\n * не является null и не является массивом. Функция гарантирует, что значение\r\n * соответствует поведению обычного объекта со строковыми ключами и значениями любого типа.\r\n *\r\n * @param {unknown} val - Значение для проверки.\r\n * @returns {val is AnyDict} True если значение является объектом, иначе false.\r\n */\r\nexport const isObject = (val: unknown): val is AnyDict =>\r\n typeof val === 'object' && val !== null && !Array.isArray(val);\r\n\r\n/**\r\n * Выполняет преобразование входящего значения в массив на основе указанного режима.\r\n *\r\n * @param {unknown} val - Входящее значение для преобразования. Должно быть строкой.\r\n * @param {'comma' | 'json' | 'multi'} mode - Режим преобразования:\r\n * - `'comma'`: Разделяет строку на массив, используя запятые как разделители.\r\n * - `'json'`: Преобразует строку как JSON и ожидает массив.\r\n * - `'multi'`: Извлекает значения, связанные с определенным ключом из URL-кодированной строки.\r\n * @param {string} [key] - Ключ для извлечения при использовании режима `'multi'`.\r\n * Этот параметр обязателен если режим `'multi'`.\r\n * @throws {Error} Выбрасывает ошибку если режим `'multi'` и ключ не предоставлен,\r\n * или если режим неизвестен.\r\n * @returns {string[]} Массив преобразованных элементов. Возвращает пустой массив, если\r\n * преобразование не удалось или если входные данные недопустимы.\r\n */\r\nexport const parseQueryArray = (val: unknown, mode: 'comma' | 'json' | 'multi', key?: string): string[] => {\r\n if (!val || typeof val !== 'string') {\r\n return [];\r\n }\r\n\r\n if (mode === 'comma') {\r\n return val\r\n .split(',')\r\n .map((s) => s.trim())\r\n .filter(Boolean);\r\n }\r\n\r\n if (mode === 'json') {\r\n try {\r\n const parsed = JSON.parse(val);\r\n\r\n return Array.isArray(parsed) ? parsed : [];\r\n } catch {\r\n return [];\r\n }\r\n }\r\n\r\n if (mode === 'multi') {\r\n if (!key) {\r\n throw new Error('Key required for multi-part mode');\r\n }\r\n\r\n const params = new URLSearchParams(val);\r\n\r\n return params.getAll(key);\r\n }\r\n\r\n throw new Error('Unknown mode');\r\n};\r\n\r\n/**\r\n * Выполняет конкатенацию массива значений в строку в соответствии с указанным режимом.\r\n *\r\n * @param {AnyType[]} value - Массив значений для конкатенации.\r\n * @param {'comma' | 'json' | 'multi'} mode - Определяет режим конкатенации:\r\n * 'comma' - Объединяет значения массива через запятую.\r\n * 'json' - Преобразует массив в JSON строку.\r\n * 'multi' - Форматирует массив в строку запроса, используя формат пары ключ-значение.\r\n * @param {string} [key] - Ключ, используемый для построения пар ключ-значение в режиме 'multi'.\r\n * Обязателен если mode='multi'.\r\n * @returns {string} - Результирующая строка на основе входного массива и режима.\r\n * @throws {Error} Выбрасывает ошибку, если выбран режим 'multi' без указания ключа.\r\n */\r\nexport const concatArray = (value: AnyType[], mode: 'comma' | 'json' | 'multi', key?: string): string => {\r\n if (mode === 'multi' && !key) {\r\n throw new Error('Key required for multi-part mode');\r\n }\r\n\r\n return mode === 'json'\r\n ? JSON.stringify(value)\r\n : mode === 'comma'\r\n ? value.join(',')\r\n : value.map((item) => `${key}=${item}`).join('&');\r\n};\r\n","/**\r\n * Форматирует число или строку, содержащую число, добавляя пробелы в качестве разделителей тысяч.\r\n *\r\n * @param {number|string} num - Число или строка для форматирования.\r\n * Если входное значение null, undefined или недопустимое число, возвращается пустая строка.\r\n * @return {string} Отформатированная строка с пробелами в качестве разделителей тысяч или пустая строка,\r\n * если входные данные недопустимы.\r\n */\r\nexport function formatToSpacedNumber(num: number | string): string {\r\n const stringed = String(num).replaceAll(' ', '');\r\n\r\n if (num === null || num === undefined || Number.isNaN(+stringed)) {\r\n return '';\r\n }\r\n\r\n const str = String(num).replace(/\\s+/g, '');\r\n\r\n return str.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ' ');\r\n}\r\n\r\n/**\r\n * Обрезает строку до указанного количества символов и добавляет многоточие ('…'),\r\n * если строка превышает лимит.\r\n *\r\n * @param {string} text - Текст для обрезки.\r\n * @param {number} limit - Максимально допустимая длина строки.\r\n * @returns {string} Обрезанная строка с многоточием, если длина превышает лимит,\r\n * или исходная строка, если нет.\r\n */\r\nexport const truncate = (text: string, limit: number): string => {\r\n return text.length > limit ? text.slice(0, limit) + '…' : text;\r\n};\r\n","import { Direction, ElementEdges, ElementPosition, ElementSize } from '../models/elements';\r\n\r\ntype Directions = Direction | [Direction] | [Direction, Direction];\r\n\r\nexport const getCorrectedPosition = (\r\n anchor: ElementPosition & Partial<ElementSize>,\r\n triggerSize: ElementSize,\r\n boundBox: ElementEdges,\r\n directions: Directions,\r\n offset: number,\r\n): ElementPosition => {\r\n const directionsArray = Array.isArray(directions) ? directions : [directions];\r\n const dir = getDirMap(directionsArray);\r\n const x = anchor.x;\r\n const y = anchor.y;\r\n\r\n anchor.width = anchor.width ?? 0;\r\n anchor.height = anchor.height ?? 0;\r\n\r\n const anchorBottom = y + anchor.height;\r\n const anchorRight = x + anchor.width;\r\n\r\n const yTop = dir.horizontal ? y : y - offset - triggerSize.height;\r\n const yBottom = dir.horizontal ? anchorBottom - triggerSize.height : anchorBottom + offset;\r\n const yCenter = anchor.y + anchor.height / 2 - triggerSize.height / 2;\r\n\r\n const xLeft = x - offset - triggerSize.width;\r\n const xRight = anchorRight + offset;\r\n const xCenter = anchor.x + anchor.width / 2 - triggerSize.width / 2;\r\n\r\n if (dir.top) {\r\n const canFit = yTop > boundBox.top;\r\n\r\n dir.top = canFit;\r\n dir.bottom = !canFit;\r\n }\r\n\r\n if (dir.bottom) {\r\n const canFit = yBottom + triggerSize.height < boundBox.bottom;\r\n\r\n dir.top = !canFit;\r\n dir.bottom = canFit;\r\n }\r\n\r\n if (dir.left) {\r\n const canFit = xLeft > boundBox.left;\r\n\r\n dir.left = canFit;\r\n dir.right = !canFit;\r\n }\r\n\r\n if (dir.right) {\r\n const canFit = xRight + triggerSize.width < boundBox.right;\r\n\r\n dir.left = !canFit;\r\n dir.right = canFit;\r\n }\r\n\r\n const xCorrected = dir.left ? xLeft : dir.right ? xRight : xCenter;\r\n const yCorrected = dir.top ? yTop : dir.bottom ? yBottom : yCenter;\r\n\r\n return { x: xCorrected, y: yCorrected };\r\n};\r\n\r\nconst getDirMap = (directions: Direction[]) => {\r\n const top = directions.includes('top');\r\n const right = directions.includes('right');\r\n const bottom = directions.includes('bottom');\r\n const left = directions.includes('left');\r\n\r\n return {\r\n top,\r\n right,\r\n bottom,\r\n left,\r\n vertical: top || bottom,\r\n horizontal: right || left,\r\n };\r\n};\r\n","/**\r\n * Вычисляет доступное вертикальное пространство под заданным элементом в области просмотра.\r\n *\r\n * @param {Element} el - DOM элемент, для которого необходимо вычислить доступную высоту снизу.\r\n * @param {number} [margin=20] - Опциональное поле, вычитаемое из вычисленной доступной высоты.\r\n * @return {number} Доступная высота в пикселях под элементом с учетом поля.\r\n * Возвращает 0, если нет доступного пространства.\r\n */\r\nexport function getAvailableHeight(el: Element, margin: number = 20): number {\r\n const rect = el.getBoundingClientRect();\r\n const bottom = rect.bottom;\r\n const windowHeight = window.innerHeight;\r\n const available = windowHeight - bottom - margin;\r\n\r\n return available > 0 ? available : 0;\r\n}\r\n","/**\r\n * Извлекает значение по вложенному пути внутри объекта или массива.\r\n * Путь указывается в виде строки с разделителями-точками.\r\n *\r\n * @param obj Объект или массив для обхода.\r\n * @param path Строка с разделителями-точками, указывающая путь для извлечения значения.\r\n * @return Значение, найденное по указанному пути, или undefined, если путь не существует или недействителен.\r\n */\r\nexport function getChainedValue<T = unknown>(obj: unknown, path: string): T | undefined {\r\n if (!obj) {\r\n return undefined;\r\n }\r\n\r\n return path.split('.').reduce((acc, key) => {\r\n if (acc == null) {\r\n return undefined;\r\n }\r\n\r\n if (Array.isArray(acc)) {\r\n const index = Number(key);\r\n\r\n return isNaN(index) ? undefined : acc[index];\r\n }\r\n\r\n if (typeof acc === 'object') {\r\n return (acc as Record<string, unknown>)[key];\r\n }\r\n\r\n return undefined;\r\n }, obj as unknown) as T | undefined;\r\n}\r\n","import { AnyDict } from '../models';\r\n\r\n/**\r\n * Нормализует заданный URL, удаляя избыточные слеши, разрешая сегменты с точками\r\n * и обеспечивая отсутствие завершающих слешей в конце URL.\r\n *\r\n * @param {string} url - Строка URL для нормализации.\r\n * @return {string} - Нормализованная строка URL.\r\n */\r\nexport function normalizeUrl(url: string): string {\r\n const [protocol, rest] = url.split('://');\r\n const cleaned = (rest ?? protocol)\r\n .replace(/\\/{2,}/g, '/')\r\n .replace(/\\/\\.\\//g, '/')\r\n .replace(/\\/$/, '');\r\n\r\n return rest ? `${protocol}://${cleaned}` : cleaned;\r\n}\r\n\r\n/**\r\n * Заменяет заполнители в предоставленном URL-шаблоне соответствующими значениями из объекта params.\r\n * Заполнители определяются как `:key` в строке шаблона.\r\n *\r\n * @param {string} template URL-шаблон, содержащий заполнители для замены.\r\n * @param {AnyDict} [params] Опциональный словарь, содержащий пары ключ-значение.\r\n * Ключи соответствуют заполнителям в шаблоне, а значения заменят их.\r\n * @return {string} URL с заполнителями, замененными соответствующими значениями из объекта params.\r\n * По умолчанию возвращает исходный шаблон, если params не предоставлен.\r\n */\r\nexport function fillUrlWithParams(template: string, params?: AnyDict): string {\r\n if (!params) {\r\n return template;\r\n }\r\n\r\n return template.replace(/:([a-zA-Z0-9_]+)/g, (_, k) => encodeURIComponent(params[k] ?? ''));\r\n}\r\n\r\n/**\r\n * Добавляет параметры запроса к указанному URL.\r\n *\r\n * @param {string} url Базовый URL, к которому будут добавлены параметры запроса.\r\n * @param {Record<string, unknown>} [params] Опциональный объект, содержащий пары ключ-значение параметров запроса.\r\n * Ключи со значениями null или undefined будут проигнорированы.\r\n * @return {string} URL с добавленными параметрами запроса.\r\n */\r\nexport function appendQueryParams(url: string, params?: Record<string, unknown>): string {\r\n if (!params || !Object.keys(params).length) return url;\r\n\r\n const [base, query] = url.split('?', 2);\r\n const searchParams = new URLSearchParams(query || '');\r\n\r\n for (const [key, value] of Object.entries(params)) {\r\n if (value == null) continue;\r\n searchParams.set(key, String(value));\r\n }\r\n\r\n return `${base}?${searchParams.toString()}`;\r\n}\r\n\r\n/**\r\n * Разбирает строку запроса в объект, содержащий пары ключ-значение.\r\n *\r\n * @param {string} query - Строка запроса для разбора. Может начинаться с '?'.\r\n * @return {Record<string, string>} Объект, где каждый ключ - это имя параметра запроса,\r\n * а значение - соответствующее значение.\r\n */\r\nexport function parseQueryParams(query: string): Record<string, string> {\r\n const search = query.startsWith('?') ? query.slice(1) : query;\r\n const params = new URLSearchParams(search);\r\n const result: Record<string, string> = {};\r\n\r\n params.forEach((v, k) => {\r\n result[k] = v;\r\n });\r\n\r\n return result;\r\n}\r\n","import { AnyDict } from '../models';\r\nimport { concatArray, isNullable } from './types.utils';\r\n\r\n/**\r\n * Constructs a query string from a given object and concatenation type.\r\n *\r\n * @param {Record<string, any>} object - Объект с парами ключ-значение для преобразования в строку запроса.\r\n * Ключи представляют имена параметров, а значения - значения параметров.\r\n * @param {'comma' | 'json' | 'multi'} concatType - Метод обработки значений массива:\r\n * - 'comma': Объединяет элементы массива через запятую.\r\n * - 'json': Сериализует массив как JSON строку.\r\n * - 'multi': Создает несколько записей для элементов массива, где каждый связан с одним и тем же ключом.\r\n * @returns {string} - Сформированная строка запроса с закодированными как URI компоненты ключами и значениями.\r\n */\r\nexport const makeQuery = (object: AnyDict, concatType: 'comma' | 'json' | 'multi'): string => {\r\n return Object.entries(object)\r\n .filter(([, value]) => !isNullable(value))\r\n .map(([key, value]) => {\r\n if (Array.isArray(value)) {\r\n const val = concatArray(value, concatType, key);\r\n\r\n return `${encodeURIComponent(key)}=${encodeURIComponent(val!)}`;\r\n }\r\n\r\n return `${encodeURIComponent(key)}=${encodeURIComponent(value!)}`;\r\n })\r\n .join('&');\r\n};\r\n\r\n/**\r\n * Сравнивает два маршрута, чтобы определить, совпадает ли фактический маршрут с шаблоном маршрута.\r\n * Поддерживает статическое и динамическое сопоставление маршрутов с опциональным учетом подмаршрутов.\r\n *\r\n * @param {string} actualRoute - Фактический путь маршрута для сравнения.\r\n * @param {string} pureRoute - Шаблонный путь маршрута для сопоставления, который может включать заполнители\r\n * (например, `:id`).\r\n * @param {boolean} [withSubroute=false] - Определяет, разрешать ли сопоставление подмаршрутов. Если true,\r\n * actualRoute должен начинаться с заполненного pureRoute.\r\n * @return {boolean} Возвращает true, если фактический маршрут соответствует шаблонному\r\n * маршруту (и опциональному условию подмаршрута, если включено), в противном случае false.\r\n */\r\nexport const compareRoutes = (actualRoute: string, pureRoute: string, withSubroute: boolean = false): boolean => {\r\n if (!pureRoute.includes(':')) {\r\n return withSubroute ? actualRoute.startsWith(pureRoute) : pureRoute === actualRoute;\r\n } else {\r\n const filled = fillRouteTemplate(actualRoute, pureRoute);\r\n\r\n return withSubroute ? actualRoute.startsWith(filled) : filled === actualRoute;\r\n }\r\n};\r\n\r\n/**\r\n * Обрабатывает и материализует путь маршрута путем декодирования и при необходимости замены параметров маршрута.\r\n *\r\n * @param {string} actualRoute - Фактический путь маршрута, обычно предоставляемый\r\n * в качестве источника значений динамических параметров.\r\n * @param {string} pureRoute - Шаблон пути маршрута, может включать динамические сегменты, обозначенные `:`.\r\n * @returns {string} Полностью материализованный и декодированный путь маршрута.\r\n */\r\nexport const materializeRoutePath = (actualRoute: string, pureRoute: string): string => {\r\n if (!pureRoute.includes(':')) {\r\n return decodeURIComponent(pureRoute);\r\n } else {\r\n return decodeURIComponent(fillRouteTemplate(actualRoute, pureRoute));\r\n }\r\n};\r\n\r\nconst fillRouteTemplate = (actualRoute: string, pureRoute: string) => {\r\n const actualSegments = actualRoute.split('/').filter(Boolean);\r\n const templateSegments = pureRoute.split('/').filter(Boolean);\r\n const prefix = actualRoute.startsWith('/') ? '/' : '';\r\n\r\n const segments: string[] = [];\r\n\r\n for (let i = 0; i < templateSegments.length; i++) {\r\n const tempSegment = templateSegments[i];\r\n const actSegment = actualSegments[i];\r\n\r\n segments.push(tempSegment.startsWith(':') ? actSegment : tempSegment);\r\n }\r\n\r\n return prefix + segments.join('/');\r\n};\r\n","// noinspection ES6PreferShortImport\r\nimport { AnyType } from '../models/util';\r\n\r\n/**\r\n * Рекурсивно проверяет равенство двух объектов, включая вложенные структуры и особые случаи,\r\n * такие как массивы, наборы, карты, даты и NaN.\r\n *\r\n * @param {AnyType} a - Первый объект для сравнения.\r\n * @param {AnyType} b - Второй объект для сравнения.\r\n * @param {Map} [seen=new Map()] - Карта, используемая для обнаружения циклических ссылок\r\n * при глубокой проверке равенства.\r\n * @return {boolean} - Возвращает true, если объекты полностью равны, иначе возвращает false.\r\n */\r\nexport function deepEqual(a: AnyType, b: AnyType, seen = new Map()): boolean {\r\n if (a === b) {\r\n return true;\r\n }\r\n\r\n if (Number.isNaN(a) && Number.isNaN(b)) {\r\n return true;\r\n }\r\n\r\n if (a && b && typeof a === 'object' && typeof b === 'object') {\r\n if (seen.get(a) === b) {\r\n return true;\r\n }\r\n\r\n seen.set(a, b);\r\n\r\n if (Array.isArray(a)) {\r\n if (!Array.isArray(b) || a.length !== b.length) {\r\n return false;\r\n }\r\n\r\n for (let i = 0; i < a.length; i++) {\r\n if (!deepEqual(a[i], b[i], seen)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n if (a instanceof Date || a instanceof RegExp) {\r\n return String(a) === String(b);\r\n }\r\n\r\n if (a instanceof Map) {\r\n return deepEqual(Array.from(a.entries()), Array.from(b.entries()), seen);\r\n }\r\n\r\n if (a instanceof Set) {\r\n return deepEqual(Array.from(a.values()), Array.from(b.values()), seen);\r\n }\r\n\r\n const keysA = Object.keys(a);\r\n\r\n if (keysA.length !== Object.keys(b).length) return false;\r\n for (const k of keysA)\r\n if (!Object.prototype.hasOwnProperty.call(b, k) || !deepEqual(a[k], b[k], seen)) return false;\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n","export const generateId = (limit: number = 15, radix: number = 36) =>\r\n Math.random()\r\n .toString(radix)\r\n .substring(2, limit + 2);\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"reforgium-internal.mjs","sources":["../../../../libs/internal/src/tokens/locale.token.ts","../../../../libs/internal/src/tokens/theme.token.ts","../../../../libs/internal/src/tokens/device.token.ts","../../../../libs/internal/src/tokens/validation-messages.token.ts","../../../../libs/internal/src/utils/web.utils.ts","../../../../libs/internal/src/utils/timers.utils.ts","../../../../libs/internal/src/utils/date.utils.ts","../../../../libs/internal/src/utils/types.utils.ts","../../../../libs/internal/src/utils/format.utils.ts","../../../../libs/internal/src/utils/positions.utils.ts","../../../../libs/internal/src/utils/available-height.utils.ts","../../../../libs/internal/src/utils/get-chained-value.utils.ts","../../../../libs/internal/src/utils/urls.utils.ts","../../../../libs/internal/src/utils/routes.utils.ts","../../../../libs/internal/src/utils/deep-equal.utils.ts","../../../../libs/internal/src/utils/generate.utils.ts","../../../../libs/internal/src/reforgium-internal.ts"],"sourcesContent":["import { InjectionToken, Signal } from '@angular/core';\r\n\r\n/**\r\n * Available application languages.\r\n * Should be synchronized with localization keys.\r\n *\r\n * @type {'ru' | 'kg'}\r\n * 'ru' - Russian language\r\n * 'kg' - Kyrgyz language\r\n */\r\nexport type Langs = 'ru' | 'kg';\r\n\r\n/**\r\n * Translation provider interface for managing translations and namespaces.\r\n * Provides methods to retrieve translated messages and load translation namespaces.\r\n */\r\ntype TranslationProvider = {\r\n /**\r\n * Retrieves translated message by key with optional parameter interpolation.\r\n *\r\n * @param {string} message - Translation key to retrieve.\r\n * @param {Record<string, string>} [params] - Optional parameters for interpolation in translation.\r\n * @return {string} Translated message with applied parameters or original key if translation not found.\r\n */\r\n get: (message: string, params?: Record<string, string>) => string;\r\n /**\r\n * Loads translation namespace asynchronously.\r\n *\r\n * @param {string} ns - Namespace identifier to load.\r\n * @return {Promise<void>} Promise that resolves when namespace is loaded successfully.\r\n */\r\n loadNamespace: (ns: string) => Promise<void>;\r\n};\r\n\r\n/**\r\n * Provider for changing the application lang.\r\n *\r\n * Supplies a method to programmatically switch between supported languages.\r\n *\r\n * @example\r\n * ```ts\r\n * const changeLang = inject(CHANGE_LANGE);\r\n * changeLang('ru');\r\n * ```\r\n */\r\ntype ChangeLangProvider = (lang: Langs) => void;\r\n\r\n/**\r\n * Injection token for the current application language as a Signal.\r\n * Provides reactive access to the currently selected language.\r\n * Can be overridden in app.config with a custom provider.\r\n *\r\n * @type {InjectionToken<Signal<Langs>>}\r\n */\r\nexport const SELECTED_LANG = new InjectionToken<Signal<Langs>>('RE_SELECTED_LANG');\r\n\r\n/**\r\n * Injection token for language change provider.\r\n * Provides access to method for changing the current application language.\r\n * Can be overridden in app.config with a custom provider.\r\n *\r\n * @type {InjectionToken<ChangeLangProvider>}\r\n */\r\nexport const CHANGE_LANG = new InjectionToken<ChangeLangProvider>('RE_CHANGE_LANG');\r\n\r\n/**\r\n * Injection token for translation provider.\r\n * Provides access to translation methods for message retrieval and namespace loading.\r\n *\r\n * @type {InjectionToken<TranslationProvider>}\r\n */\r\nexport const TRANSLATION = new InjectionToken<TranslationProvider>('RE_GET_LANG');\r\n","import { InjectionToken, Signal } from '@angular/core';\r\n\r\n/**\r\n * List of supported application themes.\r\n *\r\n * `'light'` — light theme\r\n * `'dark'` — dark theme\r\n */\r\nexport type Themes = 'light' | 'dark';\r\n\r\n/**\r\n * Provider for changing the application theme.\r\n *\r\n * Supplies a method to programmatically switch between supported themes.\r\n *\r\n * @example\r\n * ```ts\r\n * const changeTheme = inject(CHANGE_THEME);\r\n * changeTheme('dark');\r\n * ```\r\n */\r\ntype ChangeThemeProvider = (lang: Themes) => void;\r\n\r\n/**\r\n * Current application theme as Signal.\r\n * Can be overridden in app.config with a custom provider.\r\n */\r\nexport const SELECTED_THEME = new InjectionToken<Signal<Themes>>('RE_SELECTED_THEME');\r\nexport const CHANGE_THEME = new InjectionToken<ChangeThemeProvider>('RE_CHANGE_THEME');\r\n","import { InjectionToken, Signal } from '@angular/core';\r\n\r\n/**\r\n * Supported device types for responsive design and device-specific logic.\r\n *\r\n * @typedef {('mobile' | 'tablet' | 'desktop-s' | 'desktop')} Devices\r\n *\r\n * Possible values:\r\n * - 'mobile' - Mobile devices (smartphones)\r\n * - 'tablet' - Tablet devices\r\n * - 'desktop-s' - Small desktop screens\r\n * - 'desktop' - Standard desktop screens\r\n */\r\nexport type Devices = 'mobile' | 'tablet' | 'desktop-s' | 'desktop';\r\n\r\n/**\r\n * Injection token for the current device type as a Signal.\r\n *\r\n * Provides reactive access to the current device type throughout the application.\r\n * Can be overridden in app.config with a custom provider to supply device detection logic.\r\n *\r\n * @example\r\n * ```typescript\r\n * // In app.config.ts\r\n * providers: [\r\n * {\r\n * provide: CURRENT_DEVICE,\r\n * useValue: signal<Devices>('mobile')\r\n * }\r\n * ]\r\n *\r\n * // In a component or service\r\n * private readonly currentDevice = inject(CURRENT_DEVICE);\r\n * ```\r\n */\r\nexport const CURRENT_DEVICE = new InjectionToken<Signal<Devices>>('RE_CURRENT_DEVICE');\r\n","import { InjectionToken } from '@angular/core';\r\n\r\n/**\r\n * Represents flexible validation error data without enforced fields.\r\n * Contains common properties like requiredLength and actualLength\r\n * and allows additional string properties through index signature.\r\n *\r\n * @property {string} requiredLength - The required length for validation.\r\n * @property {string} actualLength - The actual length of the validated value.\r\n */\r\nexport type ValidationErrorData = {\r\n requiredLength: string;\r\n actualLength: string;\r\n [key: string]: string;\r\n};\r\n\r\n/**\r\n * Map of validation error names to message generator functions.\r\n * Each key represents an error name, and the value is a function\r\n * that takes validation error data and returns a formatted error message.\r\n *\r\n * @example\r\n * const messages: ValidationMessages = {\r\n * minlength: (error) => `Minimum length is ${error.requiredLength}`\r\n * };\r\n */\r\nexport type ValidationMessages = Record<string, (error: ValidationErrorData) => string>;\r\n\r\n/**\r\n * Injection token for a validation messages map.\r\n * Can be overridden in feature modules to provide custom validation messages.\r\n * Defaults to an empty object when not provided.\r\n *\r\n * @example\r\n * // In a feature module:\r\n * providers: [\r\n * {\r\n * provide: VALIDATION_MESSAGES,\r\n * useValue: {\r\n * required: () => 'This field is required',\r\n * minlength: (error) => `Min length: ${error.requiredLength}`\r\n * }\r\n * }\r\n * ]\r\n */\r\nexport const VALIDATION_MESSAGES = new InjectionToken<ValidationMessages>('RE_VALIDATION_MESSAGES', {\r\n providedIn: 'root',\r\n factory: () => ({}),\r\n});\r\n","/**\r\n * Загружает файл из объекта Blob и предлагает пользователю сохранить его.\r\n *\r\n * @param {Blob} blob - Объект Blob, представляющий файл для загрузки.\r\n * @param {string} [fileName] - Опционально. Имя для загружаемого файла.\r\n * Если не указано, в качестве имени файла будет использоваться текущая метка времени.\r\n * @return {void} Не возвращает значение.\r\n */\r\nexport function downloadByBlob(blob: Blob, fileName?: string | undefined): void {\r\n const win = window;\r\n\r\n try {\r\n const url = win.URL.createObjectURL(blob);\r\n\r\n downloadByUrl(url, fileName);\r\n setTimeout(() => win.URL.revokeObjectURL(url), 200);\r\n } catch (e) {\r\n throw `Download error: ${e}`;\r\n }\r\n}\r\n\r\n/**\r\n * Инициирует загрузку файла по-указанному URL. Опционально можно указать пользовательское имя файла.\r\n *\r\n * @param {string} url - URL файла для загрузки.\r\n * @param {string} [filename] - Желаемое имя для загружаемого файла.\r\n * Если не указано, будет использовано имя на основе временной метки.\r\n * @return {void} Функция не возвращает значение.\r\n */\r\nexport function downloadByUrl(url: string, filename?: string): void {\r\n const win = window;\r\n const a = document.createElement('a');\r\n\r\n a.style.display = 'none';\r\n a.href = url;\r\n a.download = filename || `${new Date().toISOString()}`;\r\n a.rel = 'noopener';\r\n\r\n win.document.body.appendChild(a);\r\n a.click();\r\n win.document.body.removeChild(a);\r\n}\r\n\r\n/**\r\n * Копирует указанный текст в буфер обмена. Использует Clipboard API, если доступен,\r\n * в противном случае использует `document.execCommand` в качестве запасного метода.\r\n *\r\n * @param {string} text - Текст, который необходимо скопировать в буфер обмена.\r\n * @return {Promise<boolean>} Промис, который резолвится в boolean, указывающий, было ли\r\n * копирование текста успешным.\r\n */\r\nexport async function copyText(text: string): Promise<boolean> {\r\n const win = window;\r\n\r\n try {\r\n if (win.navigator.clipboard?.['writeText']) {\r\n await win.navigator.clipboard.writeText(text);\r\n\r\n return true;\r\n }\r\n } catch (err) {\r\n // eslint-disable-next-line no-console\r\n console.warn('Clipboard API failed, fallback to execCommand', err);\r\n }\r\n\r\n const ta = win.document.createElement('textarea');\r\n\r\n ta.value = text;\r\n ta.style.position = 'fixed';\r\n ta.style.opacity = '0';\r\n win.document.body.appendChild(ta);\r\n ta.focus();\r\n ta.select();\r\n\r\n const ok = win.document.execCommand?.('copy') ?? false;\r\n\r\n win.document.body.removeChild(ta);\r\n\r\n return ok;\r\n}\r\n\r\n/**\r\n * Преобразует строку в формате Base64 в объект Blob.\r\n *\r\n * @param {string} base64 - Строка в формате Base64. Может опционально включать MIME-тип\r\n * в формате `data:<mimeType>;base64,<data>`.\r\n * @param {string} [mimeType=''] - MIME-тип данных. Необязательный параметр, будет переопределен,\r\n * если `base64` включает MIME-тип.\r\n * @return {Blob} Объект Blob, созданный из строки в формате Base64.\r\n */\r\nexport function base64ToBlob(base64: string, mimeType: string = ''): Blob {\r\n const matches = base64.match(/^data:(.+);base64,(.*)$/);\r\n const data = matches ? matches[2] : base64;\r\n const mime = matches ? matches[1] : mimeType;\r\n\r\n const byteChars = atob(data);\r\n const byteNumbers = new Array(byteChars.length);\r\n\r\n for (let i = 0; i < byteChars.length; i++) {\r\n byteNumbers[i] = byteChars.charCodeAt(i);\r\n }\r\n\r\n const byteArray = new Uint8Array(byteNumbers);\r\n\r\n return new Blob([byteArray], { type: mime });\r\n}\r\n","import { effect, Injector, Signal, signal, untracked } from '@angular/core';\r\n\r\nimport { AnyType } from '../models';\r\n\r\nexport const debounceSignal = <T>(src: Signal<T>, ms = 150, opts?: { injector?: Injector }): Signal<T> => {\r\n const out = signal(src());\r\n let timeoutRef: AnyType;\r\n\r\n effect(\r\n (onCleanup) => {\r\n const v = src();\r\n\r\n if (Object.is(v, out())) {\r\n return;\r\n }\r\n\r\n untracked(() => {\r\n clearTimeout(timeoutRef);\r\n timeoutRef = setTimeout(() => out.set(v), ms);\r\n });\r\n\r\n onCleanup(() => clearTimeout(timeoutRef));\r\n },\r\n { injector: opts?.injector },\r\n );\r\n\r\n return out.asReadonly();\r\n};\r\n\r\nexport const throttleSignal = <T>(src: Signal<T>, ms = 100, opts?: { injector?: Injector }): Signal<T> => {\r\n const out = signal(src());\r\n let last = 0;\r\n let queued: T | undefined;\r\n let timeoutRef: AnyType;\r\n\r\n const flush = () => {\r\n if (queued !== undefined) {\r\n out.set(queued);\r\n queued = undefined;\r\n last = performance.now();\r\n }\r\n\r\n timeoutRef = 0;\r\n };\r\n\r\n effect(\r\n (onCleanup) => {\r\n const v = src();\r\n\r\n if (Object.is(v, out())) {\r\n return;\r\n }\r\n\r\n untracked(() => {\r\n const now = performance.now();\r\n\r\n if (now - last >= ms) {\r\n out.set(v);\r\n last = now;\r\n\r\n clearTimeout(timeoutRef);\r\n timeoutRef = null;\r\n queued = undefined;\r\n } else {\r\n queued = v;\r\n timeoutRef = setTimeout(flush, ms - (now - last));\r\n }\r\n });\r\n\r\n onCleanup(() => {\r\n if (timeoutRef) {\r\n clearTimeout(timeoutRef);\r\n timeoutRef = null;\r\n }\r\n\r\n queued = undefined;\r\n });\r\n },\r\n { injector: opts?.injector },\r\n );\r\n\r\n return out.asReadonly();\r\n};\r\n","const pad = (n: number) => n.toString().padStart(2, '0');\r\n\r\n/**\r\n * Форматирует объект даты в строку заданного формата.\r\n *\r\n * @param {Date} date - Объект даты для форматирования.\r\n * @param {string} [format='yyyy-MM-dd'] - Строковый формат для применения. По умолчанию 'yyyy-MM-dd'.\r\n * Поддерживаемые токены в строке формата:\r\n * - yyyy: Полный год (например, 2023)\r\n * - MM: Месяц с ведущим нулем (01-12)\r\n * - dd: День месяца с ведущим нулем (01-31)\r\n * - HH: Час в 24-часовом формате с ведущим нулем (00-23)\r\n * - mm: Минуты с ведущим нулем (00-59)\r\n * - ss: Секунды с ведущим нулем (00-59)\r\n *\r\n * @returns {string} Отформатированная строка даты. Возвращает пустую строку, если входная дата некорректна.\r\n */\r\nexport const formatDate = (date: Date, format: string = 'yyyy-MM-dd'): string => {\r\n if (isNaN(date['getTime']?.())) {\r\n return '';\r\n }\r\n\r\n const tokens: Record<string, string> = {\r\n yyyy: date.getFullYear().toString(),\r\n MM: pad(date.getMonth() + 1),\r\n dd: pad(date.getDate()),\r\n HH: pad(date.getHours()),\r\n mm: pad(date.getMinutes()),\r\n ss: pad(date.getSeconds()),\r\n };\r\n let formatted = format;\r\n\r\n for (const [token, value] of Object.entries(tokens)) {\r\n formatted = formatted.replace(new RegExp(token, 'g'), value);\r\n }\r\n\r\n return formatted;\r\n};\r\n\r\n/**\r\n * Форматирует заданную дату в локализованную строковую репрезентацию в формате 'день месяц год'.\r\n * Месяц локализован для 'ru-RU' локали и сокращен.\r\n *\r\n * @param {Date} date - Объект даты для форматирования.\r\n * @return {string} Строка, представляющая отформатированную дату в формате 'день месяц год'.\r\n */\r\nexport function formatToLocaledDate(date: Date): string {\r\n const day = date.getDate();\r\n const month = date.toLocaleString('ru-RU', { month: 'short' }).replace('.', '');\r\n const year = date.getFullYear();\r\n\r\n return `${day} ${month} ${year}`;\r\n}\r\n\r\n/**\r\n * Парсит дату из строки по заданной маске.\r\n * Поддерживает dd, MM, yyyy, HH, mm, ss.\r\n * Разделители любые: '.', '/', '-',' '.\r\n *\r\n * @param {string} value - исходная строка с датой\r\n * @param {string} format - маска, например \"dd.MM.yyyy\"\r\n * @returns {Date|null}\r\n */\r\nexport const parseToDate = (value: unknown, format: string = 'dd.MM.yyyy'): Date | null => {\r\n if (typeof value !== 'string' || !format) {\r\n return null;\r\n }\r\n\r\n const tokens = format.match(/(yyyy|MM|dd|HH|mm|ss)/g);\r\n const parts = value.split(/\\D+/).filter(Boolean);\r\n\r\n if (!tokens || tokens.length !== parts.length) {\r\n return null;\r\n }\r\n\r\n let year = 1970,\r\n month = 0,\r\n day = 1,\r\n hours = 0,\r\n minutes = 0,\r\n seconds = 0;\r\n\r\n const map: Record<string, (index: number) => void> = {\r\n yyyy: (index: number) => (year = +parts[index]),\r\n MM: (index: number) => (month = +parts[index] - 1),\r\n dd: (index: number) => (day = +parts[index]),\r\n HH: (index: number) => (hours = +parts[index]),\r\n mm: (index: number) => (minutes = +parts[index]),\r\n ss: (index: number) => (seconds = +parts[index]),\r\n };\r\n\r\n tokens.forEach((token, i) => map[token]?.(i));\r\n\r\n const date = new Date(year, month, day, hours, minutes, seconds);\r\n\r\n if (date.getFullYear() !== year || date.getMonth() !== month || date.getDate() !== day) {\r\n return null;\r\n }\r\n\r\n return date;\r\n};\r\n\r\n/**\r\n * Парсит строковое представление двух дат в кортеж объектов `Date` или значений `null`.\r\n *\r\n * Эта функция пытается извлечь и разобрать два значения даты из входной строки\r\n * на основе предоставленного формата даты. Если парсинг неуспешен, возвращаемый кортеж будет\r\n * состоять из значений `null`. По умолчанию ожидаемый формат даты - `dd.MM.yyyy`, но он\r\n * может быть изменен.\r\n *\r\n * @param {string | null} value - Строка, содержащая представления дат для разбора.\r\n * Если `null`, функция вернет `[null, null]`.\r\n * @param {string} [format='dd.MM.yyyy'] - Формат даты, используемый для парсинга.\r\n * Поддерживает `yyyy`, `MM`, `dd`, `HH`, `mm` и `ss`.\r\n * @returns {[Date | null, Date | null]} Кортеж, где первый элемент - разобранная начальная дата\r\n * и второй элемент - разобранная конечная дата. Если парсинг не удался, оба элемента будут `null`.\r\n */\r\nexport const parseToDatePeriod = (value: unknown, format: string = 'dd.MM.yyyy'): [Date | null, Date | null] => {\r\n if (typeof value !== 'string' || !format) {\r\n return [null, null];\r\n }\r\n\r\n const pattern = format\r\n .replace('yyyy', '\\\\d{4}')\r\n .replace('MM', '\\\\d{2}')\r\n .replace('dd', '\\\\d{2}')\r\n .replace('HH', '\\\\d{2}')\r\n .replace('mm', '\\\\d{2}')\r\n .replace('ss', '\\\\d{2}');\r\n const regex = new RegExp(`(${pattern})[^0-9]+(${pattern})`);\r\n const match = value.match(regex);\r\n\r\n if (match) {\r\n const from = parseToDate(match[1], format);\r\n const to = parseToDate(match[2], format);\r\n\r\n return [from, to];\r\n } else {\r\n return [null, null];\r\n }\r\n};\r\n\r\n/**\r\n * Определяет, является ли переданное значение периодом дат.\r\n *\r\n * Период дат представляется в виде массива, содержащего ровно два экземпляра Date.\r\n * Оба элемента массива должны быть корректными объектами Date (т.е. не `Invalid Date`).\r\n *\r\n * @param {unknown} value - Значение для проверки.\r\n * @returns {value is [Date, Date]} - Возвращает `true`, если значение является корректным периодом дат, иначе `false`.\r\n */\r\nexport const isDatePeriod = (value: unknown): value is [Date, Date] =>\r\n Array.isArray(value) && value.length === 2 && value.every((it) => it instanceof Date && !isNaN(it.getTime()));\r\n\r\n/**\r\n * Преобразует различные типы данных в объект Date.\r\n *\r\n * @param {unknown} v - Значение для преобразования. Может быть объектом Date,\r\n * числом (timestamp) или строкой, содержащей корректную дату.\r\n * @returns {Date} Объект Date. Если преобразование невозможно, возвращает Invalid Date.\r\n */\r\nexport const toDate = (v: unknown): Date => {\r\n if (v instanceof Date) return v;\r\n if (typeof v === 'number') return new Date(v);\r\n if (typeof v === 'string') return new Date(v);\r\n\r\n return new Date(NaN);\r\n};\r\n\r\n/**\r\n * Переводит строку даты из заданного формата в ISO (UTC).\r\n * Пример:\r\n * reformatDateToISO(\"24.11.2025\", \"dd.MM.yyyy\")\r\n * → \"2025-11-24T00:00:00.000Z\"\r\n */\r\nexport function reformatDateToISO(dateStr: string, mask: string): string | null {\r\n if (!dateStr || !mask) {\r\n return null;\r\n }\r\n\r\n const partsFmt = mask.split(/[^A-Za-z]+/g);\r\n const partsVal = dateStr.split(/[^0-9]+/g);\r\n\r\n if (!partsFmt.length || partsFmt.length !== partsVal.length) {\r\n return null;\r\n }\r\n\r\n let day = 1;\r\n let month = 1;\r\n let year = 1970;\r\n\r\n for (let i = 0; i < partsFmt.length; i++) {\r\n const fmt = partsFmt[i];\r\n const raw = partsVal[i];\r\n const val = Number.parseInt(raw, 10);\r\n\r\n if (Number.isNaN(val)) return null;\r\n\r\n switch (fmt) {\r\n case 'dd':\r\n day = val;\r\n break;\r\n case 'MM':\r\n month = val;\r\n break;\r\n case 'yyyy':\r\n year = val;\r\n break;\r\n case 'yy':\r\n year = 2000 + val;\r\n break;\r\n default:\r\n return null;\r\n }\r\n }\r\n\r\n if (month < 1 || month > 12 || day < 1 || day > 31) {\r\n return null;\r\n }\r\n\r\n const date = new Date(Date.UTC(year, month - 1, day));\r\n\r\n if (date.getUTCFullYear() !== year || date.getUTCMonth() !== month - 1 || date.getUTCDate() !== day) {\r\n return null;\r\n }\r\n\r\n return date.toISOString();\r\n}\r\n","import { AnyDict, AnyType } from '../models';\r\n\r\n/**\r\n * Определяет, является ли переданное значение null или undefined, опционально учитывая\r\n * пустые строки как null-подобные значения.\r\n *\r\n * @param {unknown} value - Значение для проверки на null или undefined.\r\n * @param {boolean} [withEmptyString=false] - Если true, пустые строки также считаются\r\n * null-подобными значениями в дополнение к null и undefined.\r\n * @returns {value is null | undefined} Возвращает `true`, если значение равно null, undefined,\r\n * или (если `withEmptyString` равно true) пустой строке. В противном случае возвращает `false`.\r\n */\r\nexport const isNullable = (value: unknown, withEmptyString: boolean = false): value is null | undefined =>\r\n value === null || value === undefined || (withEmptyString ? value === '' : false);\r\n\r\n/**\r\n * Проверяет, является ли переданное значение числом или может быть преобразовано в корректное число.\r\n *\r\n * Эта функция проверяет, является ли входное значение числовым. Если входное значение\r\n * имеет тип number, проверяется, что оно является конечным числом и не NaN. Если входное\r\n * значение является строкой, проверяется возможность преобразования этой строки в корректное число.\r\n *\r\n * @param {unknown} value - Значение для проверки.\r\n * @param {boolean} [fromString=false] - Если true, строковые значения будут пытаться преобразоваться в число.\r\n * @returns {value is number} `true` если значение является числом или строкой,\r\n * которую можно преобразовать в число; иначе `false`.\r\n */\r\nexport const isNumber = (value: unknown, fromString: boolean = false): value is number => {\r\n if (typeof value === 'number') {\r\n return !isNaN(value) && isFinite(value);\r\n }\r\n\r\n if (fromString && typeof value === 'string' && value.trim() !== '') {\r\n return !isNaN(Number(value));\r\n }\r\n\r\n return false;\r\n};\r\n\r\n/**\r\n * Определяет, является ли предоставленное значение объектом.\r\n *\r\n * Эта функция проверяет, что переданное значение имеет тип 'object',\r\n * не является null и не является массивом. Функция гарантирует, что значение\r\n * соответствует поведению обычного объекта со строковыми ключами и значениями любого типа.\r\n *\r\n * @param {unknown} val - Значение для проверки.\r\n * @returns {val is AnyDict} True если значение является объектом, иначе false.\r\n */\r\nexport const isObject = (val: unknown): val is AnyDict =>\r\n typeof val === 'object' && val !== null && !Array.isArray(val);\r\n\r\n/**\r\n * Выполняет преобразование входящего значения в массив на основе указанного режима.\r\n *\r\n * @param {unknown} val - Входящее значение для преобразования. Должно быть строкой.\r\n * @param {'comma' | 'json' | 'multi'} mode - Режим преобразования:\r\n * - `'comma'`: Разделяет строку на массив, используя запятые как разделители.\r\n * - `'json'`: Преобразует строку как JSON и ожидает массив.\r\n * - `'multi'`: Извлекает значения, связанные с определенным ключом из URL-кодированной строки.\r\n * @param {string} [key] - Ключ для извлечения при использовании режима `'multi'`.\r\n * Этот параметр обязателен если режим `'multi'`.\r\n * @throws {Error} Выбрасывает ошибку если режим `'multi'` и ключ не предоставлен,\r\n * или если режим неизвестен.\r\n * @returns {string[]} Массив преобразованных элементов. Возвращает пустой массив, если\r\n * преобразование не удалось или если входные данные недопустимы.\r\n */\r\nexport const parseQueryArray = (val: unknown, mode: 'comma' | 'json' | 'multi', key?: string): string[] => {\r\n if (!val || typeof val !== 'string') {\r\n return [];\r\n }\r\n\r\n if (mode === 'comma') {\r\n return val\r\n .split(',')\r\n .map((s) => s.trim())\r\n .filter(Boolean);\r\n }\r\n\r\n if (mode === 'json') {\r\n try {\r\n const parsed = JSON.parse(val);\r\n\r\n return Array.isArray(parsed) ? parsed : [];\r\n } catch {\r\n return [];\r\n }\r\n }\r\n\r\n if (mode === 'multi') {\r\n if (!key) {\r\n throw new Error('Key required for multi-part mode');\r\n }\r\n\r\n const params = new URLSearchParams(val);\r\n\r\n return params.getAll(key);\r\n }\r\n\r\n throw new Error('Unknown mode');\r\n};\r\n\r\n/**\r\n * Выполняет конкатенацию массива значений в строку в соответствии с указанным режимом.\r\n *\r\n * @param {AnyType[]} value - Массив значений для конкатенации.\r\n * @param {'comma' | 'json' | 'multi'} mode - Определяет режим конкатенации:\r\n * 'comma' - Объединяет значения массива через запятую.\r\n * 'json' - Преобразует массив в JSON строку.\r\n * 'multi' - Форматирует массив в строку запроса, используя формат пары ключ-значение.\r\n * @param {string} [key] - Ключ, используемый для построения пар ключ-значение в режиме 'multi'.\r\n * Обязателен если mode='multi'.\r\n * @returns {string} - Результирующая строка на основе входного массива и режима.\r\n * @throws {Error} Выбрасывает ошибку, если выбран режим 'multi' без указания ключа.\r\n */\r\nexport const concatArray = (value: AnyType[], mode: 'comma' | 'json' | 'multi', key?: string): string => {\r\n if (mode === 'multi' && !key) {\r\n throw new Error('Key required for multi-part mode');\r\n }\r\n\r\n return mode === 'json'\r\n ? JSON.stringify(value)\r\n : mode === 'comma'\r\n ? value.join(',')\r\n : value.map((item) => `${key}=${item}`).join('&');\r\n};\r\n","/**\r\n * Форматирует число или строку, содержащую число, добавляя пробелы в качестве разделителей тысяч.\r\n *\r\n * @param {number|string} num - Число или строка для форматирования.\r\n * Если входное значение null, undefined или недопустимое число, возвращается пустая строка.\r\n * @return {string} Отформатированная строка с пробелами в качестве разделителей тысяч или пустая строка,\r\n * если входные данные недопустимы.\r\n */\r\nexport function formatToSpacedNumber(num: number | string): string {\r\n const stringed = String(num).replaceAll(' ', '');\r\n\r\n if (num === null || num === undefined || Number.isNaN(+stringed)) {\r\n return '';\r\n }\r\n\r\n const str = String(num).replace(/\\s+/g, '');\r\n\r\n return str.replace(/\\B(?=(\\d{3})+(?!\\d))/g, ' ');\r\n}\r\n\r\n/**\r\n * Обрезает строку до указанного количества символов и добавляет многоточие ('…'),\r\n * если строка превышает лимит.\r\n *\r\n * @param {string} text - Текст для обрезки.\r\n * @param {number} limit - Максимально допустимая длина строки.\r\n * @returns {string} Обрезанная строка с многоточием, если длина превышает лимит,\r\n * или исходная строка, если нет.\r\n */\r\nexport const truncate = (text: string, limit: number): string => {\r\n return text.length > limit ? text.slice(0, limit) + '…' : text;\r\n};\r\n","import { Direction, ElementEdges, ElementPosition, ElementSize } from '../models/elements';\r\n\r\ntype Directions = Direction | [Direction] | [Direction, Direction];\r\n\r\nexport const getCorrectedPosition = (\r\n anchor: ElementPosition & Partial<ElementSize>,\r\n triggerSize: ElementSize,\r\n boundBox: ElementEdges,\r\n directions: Directions,\r\n offset: number,\r\n): ElementPosition => {\r\n const directionsArray = Array.isArray(directions) ? directions : [directions];\r\n const dir = getDirMap(directionsArray);\r\n const x = anchor.x;\r\n const y = anchor.y;\r\n\r\n anchor.width = anchor.width ?? 0;\r\n anchor.height = anchor.height ?? 0;\r\n\r\n const anchorBottom = y + anchor.height;\r\n const anchorRight = x + anchor.width;\r\n\r\n const yTop = dir.horizontal ? y : y - offset - triggerSize.height;\r\n const yBottom = dir.horizontal ? anchorBottom - triggerSize.height : anchorBottom + offset;\r\n const yCenter = anchor.y + anchor.height / 2 - triggerSize.height / 2;\r\n\r\n const xLeft = x - offset - triggerSize.width;\r\n const xRight = anchorRight + offset;\r\n const xCenter = anchor.x + anchor.width / 2 - triggerSize.width / 2;\r\n\r\n if (dir.top) {\r\n const canFit = yTop > boundBox.top;\r\n\r\n dir.top = canFit;\r\n dir.bottom = !canFit;\r\n }\r\n\r\n if (dir.bottom) {\r\n const canFit = yBottom + triggerSize.height < boundBox.bottom;\r\n\r\n dir.top = !canFit;\r\n dir.bottom = canFit;\r\n }\r\n\r\n if (dir.left) {\r\n const canFit = xLeft > boundBox.left;\r\n\r\n dir.left = canFit;\r\n dir.right = !canFit;\r\n }\r\n\r\n if (dir.right) {\r\n const canFit = xRight + triggerSize.width < boundBox.right;\r\n\r\n dir.left = !canFit;\r\n dir.right = canFit;\r\n }\r\n\r\n const xCorrected = dir.left ? xLeft : dir.right ? xRight : xCenter;\r\n const yCorrected = dir.top ? yTop : dir.bottom ? yBottom : yCenter;\r\n\r\n return { x: xCorrected, y: yCorrected };\r\n};\r\n\r\nconst getDirMap = (directions: Direction[]) => {\r\n const top = directions.includes('top');\r\n const right = directions.includes('right');\r\n const bottom = directions.includes('bottom');\r\n const left = directions.includes('left');\r\n\r\n return {\r\n top,\r\n right,\r\n bottom,\r\n left,\r\n vertical: top || bottom,\r\n horizontal: right || left,\r\n };\r\n};\r\n","/**\r\n * Вычисляет доступное вертикальное пространство под заданным элементом в области просмотра.\r\n *\r\n * @param {Element} el - DOM элемент, для которого необходимо вычислить доступную высоту снизу.\r\n * @param {number} [margin=20] - Опциональное поле, вычитаемое из вычисленной доступной высоты.\r\n * @return {number} Доступная высота в пикселях под элементом с учетом поля.\r\n * Возвращает 0, если нет доступного пространства.\r\n */\r\nexport function getAvailableHeight(el: Element, margin: number = 20): number {\r\n const rect = el.getBoundingClientRect();\r\n const bottom = rect.bottom;\r\n const windowHeight = window.innerHeight;\r\n const available = windowHeight - bottom - margin;\r\n\r\n return available > 0 ? available : 0;\r\n}\r\n","/**\r\n * Извлекает значение по вложенному пути внутри объекта или массива.\r\n * Путь указывается в виде строки с разделителями-точками.\r\n *\r\n * @param obj Объект или массив для обхода.\r\n * @param path Строка с разделителями-точками, указывающая путь для извлечения значения.\r\n * @return Значение, найденное по указанному пути, или undefined, если путь не существует или недействителен.\r\n */\r\nexport function getChainedValue<T = unknown>(obj: unknown, path: string): T | undefined {\r\n if (!obj) {\r\n return undefined;\r\n }\r\n\r\n return path.split('.').reduce((acc, key) => {\r\n if (acc == null) {\r\n return undefined;\r\n }\r\n\r\n if (Array.isArray(acc)) {\r\n const index = Number(key);\r\n\r\n return isNaN(index) ? undefined : acc[index];\r\n }\r\n\r\n if (typeof acc === 'object') {\r\n return (acc as Record<string, unknown>)[key];\r\n }\r\n\r\n return undefined;\r\n }, obj as unknown) as T | undefined;\r\n}\r\n","import { AnyDict } from '../models';\r\n\r\n/**\r\n * Нормализует заданный URL, удаляя избыточные слеши, разрешая сегменты с точками\r\n * и обеспечивая отсутствие завершающих слешей в конце URL.\r\n *\r\n * @param {string} url - Строка URL для нормализации.\r\n * @return {string} - Нормализованная строка URL.\r\n */\r\nexport function normalizeUrl(url: string): string {\r\n const [protocol, rest] = url.split('://');\r\n const cleaned = (rest ?? protocol)\r\n .replace(/\\/{2,}/g, '/')\r\n .replace(/\\/\\.\\//g, '/')\r\n .replace(/\\/$/, '');\r\n\r\n return rest ? `${protocol}://${cleaned}` : cleaned;\r\n}\r\n\r\n/**\r\n * Заменяет заполнители в предоставленном URL-шаблоне соответствующими значениями из объекта params.\r\n * Заполнители определяются как `:key` в строке шаблона.\r\n *\r\n * @param {string} template URL-шаблон, содержащий заполнители для замены.\r\n * @param {AnyDict} [params] Опциональный словарь, содержащий пары ключ-значение.\r\n * Ключи соответствуют заполнителям в шаблоне, а значения заменят их.\r\n * @return {string} URL с заполнителями, замененными соответствующими значениями из объекта params.\r\n * По умолчанию возвращает исходный шаблон, если params не предоставлен.\r\n */\r\nexport function fillUrlWithParams(template: string, params?: AnyDict): string {\r\n if (!params) {\r\n return template;\r\n }\r\n\r\n return template.replace(/:([a-zA-Z0-9_]+)/g, (_, k) => encodeURIComponent(params[k] ?? ''));\r\n}\r\n\r\n/**\r\n * Добавляет параметры запроса к указанному URL.\r\n *\r\n * @param {string} url Базовый URL, к которому будут добавлены параметры запроса.\r\n * @param {Record<string, unknown>} [params] Опциональный объект, содержащий пары ключ-значение параметров запроса.\r\n * Ключи со значениями null или undefined будут проигнорированы.\r\n * @return {string} URL с добавленными параметрами запроса.\r\n */\r\nexport function appendQueryParams(url: string, params?: Record<string, unknown>): string {\r\n if (!params || !Object.keys(params).length) return url;\r\n\r\n const [base, query] = url.split('?', 2);\r\n const searchParams = new URLSearchParams(query || '');\r\n\r\n for (const [key, value] of Object.entries(params)) {\r\n if (value == null) continue;\r\n searchParams.set(key, String(value));\r\n }\r\n\r\n return `${base}?${searchParams.toString()}`;\r\n}\r\n\r\n/**\r\n * Разбирает строку запроса в объект, содержащий пары ключ-значение.\r\n *\r\n * @param {string} query - Строка запроса для разбора. Может начинаться с '?'.\r\n * @return {Record<string, string>} Объект, где каждый ключ - это имя параметра запроса,\r\n * а значение - соответствующее значение.\r\n */\r\nexport function parseQueryParams(query: string): Record<string, string> {\r\n const search = query.startsWith('?') ? query.slice(1) : query;\r\n const params = new URLSearchParams(search);\r\n const result: Record<string, string> = {};\r\n\r\n params.forEach((v, k) => {\r\n result[k] = v;\r\n });\r\n\r\n return result;\r\n}\r\n","import { AnyDict } from '../models';\r\nimport { concatArray, isNullable } from './types.utils';\r\n\r\n/**\r\n * Constructs a query string from a given object and concatenation type.\r\n *\r\n * @param {Record<string, any>} object - Объект с парами ключ-значение для преобразования в строку запроса.\r\n * Ключи представляют имена параметров, а значения - значения параметров.\r\n * @param {'comma' | 'json' | 'multi'} concatType - Метод обработки значений массива:\r\n * - 'comma': Объединяет элементы массива через запятую.\r\n * - 'json': Сериализует массив как JSON строку.\r\n * - 'multi': Создает несколько записей для элементов массива, где каждый связан с одним и тем же ключом.\r\n * @returns {string} - Сформированная строка запроса с закодированными как URI компоненты ключами и значениями.\r\n */\r\nexport const makeQuery = (object: AnyDict, concatType: 'comma' | 'json' | 'multi'): string => {\r\n return Object.entries(object)\r\n .filter(([, value]) => !isNullable(value))\r\n .map(([key, value]) => {\r\n if (Array.isArray(value)) {\r\n const val = concatArray(value, concatType, key);\r\n\r\n return `${encodeURIComponent(key)}=${encodeURIComponent(val!)}`;\r\n }\r\n\r\n return `${encodeURIComponent(key)}=${encodeURIComponent(value!)}`;\r\n })\r\n .join('&');\r\n};\r\n\r\n/**\r\n * Сравнивает два маршрута, чтобы определить, совпадает ли фактический маршрут с шаблоном маршрута.\r\n * Поддерживает статическое и динамическое сопоставление маршрутов с опциональным учетом подмаршрутов.\r\n *\r\n * @param {string} actualRoute - Фактический путь маршрута для сравнения.\r\n * @param {string} pureRoute - Шаблонный путь маршрута для сопоставления, который может включать заполнители\r\n * (например, `:id`).\r\n * @param {boolean} [withSubroute=false] - Определяет, разрешать ли сопоставление подмаршрутов. Если true,\r\n * actualRoute должен начинаться с заполненного pureRoute.\r\n * @return {boolean} Возвращает true, если фактический маршрут соответствует шаблонному\r\n * маршруту (и опциональному условию подмаршрута, если включено), в противном случае false.\r\n */\r\nexport const compareRoutes = (actualRoute: string, pureRoute: string, withSubroute: boolean = false): boolean => {\r\n if (!pureRoute.includes(':')) {\r\n return withSubroute ? actualRoute.startsWith(pureRoute) : pureRoute === actualRoute;\r\n } else {\r\n const filled = fillRouteTemplate(actualRoute, pureRoute);\r\n\r\n return withSubroute ? actualRoute.startsWith(filled) : filled === actualRoute;\r\n }\r\n};\r\n\r\n/**\r\n * Обрабатывает и материализует путь маршрута путем декодирования и при необходимости замены параметров маршрута.\r\n *\r\n * @param {string} actualRoute - Фактический путь маршрута, обычно предоставляемый\r\n * в качестве источника значений динамических параметров.\r\n * @param {string} pureRoute - Шаблон пути маршрута, может включать динамические сегменты, обозначенные `:`.\r\n * @returns {string} Полностью материализованный и декодированный путь маршрута.\r\n */\r\nexport const materializeRoutePath = (actualRoute: string, pureRoute: string): string => {\r\n if (!pureRoute.includes(':')) {\r\n return decodeURIComponent(pureRoute);\r\n } else {\r\n return decodeURIComponent(fillRouteTemplate(actualRoute, pureRoute));\r\n }\r\n};\r\n\r\nconst fillRouteTemplate = (actualRoute: string, pureRoute: string) => {\r\n const actualSegments = actualRoute.split('/').filter(Boolean);\r\n const templateSegments = pureRoute.split('/').filter(Boolean);\r\n const prefix = actualRoute.startsWith('/') ? '/' : '';\r\n\r\n const segments: string[] = [];\r\n\r\n for (let i = 0; i < templateSegments.length; i++) {\r\n const tempSegment = templateSegments[i];\r\n const actSegment = actualSegments[i];\r\n\r\n segments.push(tempSegment.startsWith(':') ? actSegment : tempSegment);\r\n }\r\n\r\n return prefix + segments.join('/');\r\n};\r\n","// noinspection ES6PreferShortImport\r\nimport { AnyType } from '../models/util';\r\n\r\n/**\r\n * Рекурсивно проверяет равенство двух объектов, включая вложенные структуры и особые случаи,\r\n * такие как массивы, наборы, карты, даты и NaN.\r\n *\r\n * @param {AnyType} a - Первый объект для сравнения.\r\n * @param {AnyType} b - Второй объект для сравнения.\r\n * @param {Map} [seen=new Map()] - Карта, используемая для обнаружения циклических ссылок\r\n * при глубокой проверке равенства.\r\n * @return {boolean} - Возвращает true, если объекты полностью равны, иначе возвращает false.\r\n */\r\nexport function deepEqual(a: AnyType, b: AnyType, seen = new Map()): boolean {\r\n if (a === b) {\r\n return true;\r\n }\r\n\r\n if (Number.isNaN(a) && Number.isNaN(b)) {\r\n return true;\r\n }\r\n\r\n if (a && b && typeof a === 'object' && typeof b === 'object') {\r\n if (seen.get(a) === b) {\r\n return true;\r\n }\r\n\r\n seen.set(a, b);\r\n\r\n if (Array.isArray(a)) {\r\n if (!Array.isArray(b) || a.length !== b.length) {\r\n return false;\r\n }\r\n\r\n for (let i = 0; i < a.length; i++) {\r\n if (!deepEqual(a[i], b[i], seen)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n }\r\n\r\n if (a instanceof Date || a instanceof RegExp) {\r\n return String(a) === String(b);\r\n }\r\n\r\n if (a instanceof Map) {\r\n return deepEqual(Array.from(a.entries()), Array.from(b.entries()), seen);\r\n }\r\n\r\n if (a instanceof Set) {\r\n return deepEqual(Array.from(a.values()), Array.from(b.values()), seen);\r\n }\r\n\r\n const keysA = Object.keys(a);\r\n\r\n if (keysA.length !== Object.keys(b).length) return false;\r\n for (const k of keysA)\r\n if (!Object.prototype.hasOwnProperty.call(b, k) || !deepEqual(a[k], b[k], seen)) return false;\r\n\r\n return true;\r\n }\r\n\r\n return false;\r\n}\r\n","export const generateId = (limit: number = 15, radix: number = 36) =>\r\n Math.random()\r\n .toString(radix)\r\n .substring(2, limit + 2);\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -394,6 +394,18 @@ type TranslationProvider = {
|
|
|
394
394
|
*/
|
|
395
395
|
loadNamespace: (ns: string) => Promise<void>;
|
|
396
396
|
};
|
|
397
|
+
/**
|
|
398
|
+
* Provider for changing the application lang.
|
|
399
|
+
*
|
|
400
|
+
* Supplies a method to programmatically switch between supported languages.
|
|
401
|
+
*
|
|
402
|
+
* @example
|
|
403
|
+
* ```ts
|
|
404
|
+
* const changeLang = inject(CHANGE_LANGE);
|
|
405
|
+
* changeLang('ru');
|
|
406
|
+
* ```
|
|
407
|
+
*/
|
|
408
|
+
type ChangeLangProvider = (lang: Langs) => void;
|
|
397
409
|
/**
|
|
398
410
|
* Injection token for the current application language as a Signal.
|
|
399
411
|
* Provides reactive access to the currently selected language.
|
|
@@ -402,6 +414,14 @@ type TranslationProvider = {
|
|
|
402
414
|
* @type {InjectionToken<Signal<Langs>>}
|
|
403
415
|
*/
|
|
404
416
|
declare const SELECTED_LANG: InjectionToken<Signal<Langs>>;
|
|
417
|
+
/**
|
|
418
|
+
* Injection token for language change provider.
|
|
419
|
+
* Provides access to method for changing the current application language.
|
|
420
|
+
* Can be overridden in app.config with a custom provider.
|
|
421
|
+
*
|
|
422
|
+
* @type {InjectionToken<ChangeLangProvider>}
|
|
423
|
+
*/
|
|
424
|
+
declare const CHANGE_LANG: InjectionToken<ChangeLangProvider>;
|
|
405
425
|
/**
|
|
406
426
|
* Injection token for translation provider.
|
|
407
427
|
* Provides access to translation methods for message retrieval and namespace loading.
|
|
@@ -417,11 +437,24 @@ declare const TRANSLATION: InjectionToken<TranslationProvider>;
|
|
|
417
437
|
* `'dark'` — dark theme
|
|
418
438
|
*/
|
|
419
439
|
type Themes = 'light' | 'dark';
|
|
440
|
+
/**
|
|
441
|
+
* Provider for changing the application theme.
|
|
442
|
+
*
|
|
443
|
+
* Supplies a method to programmatically switch between supported themes.
|
|
444
|
+
*
|
|
445
|
+
* @example
|
|
446
|
+
* ```ts
|
|
447
|
+
* const changeTheme = inject(CHANGE_THEME);
|
|
448
|
+
* changeTheme('dark');
|
|
449
|
+
* ```
|
|
450
|
+
*/
|
|
451
|
+
type ChangeThemeProvider = (lang: Themes) => void;
|
|
420
452
|
/**
|
|
421
453
|
* Current application theme as Signal.
|
|
422
454
|
* Can be overridden in app.config with a custom provider.
|
|
423
455
|
*/
|
|
424
456
|
declare const SELECTED_THEME: InjectionToken<Signal<Themes>>;
|
|
457
|
+
declare const CHANGE_THEME: InjectionToken<ChangeThemeProvider>;
|
|
425
458
|
|
|
426
459
|
/**
|
|
427
460
|
* Supported device types for responsive design and device-specific logic.
|
|
@@ -816,6 +849,6 @@ declare function deepEqual(a: AnyType, b: AnyType, seen?: Map<any, any>): boolea
|
|
|
816
849
|
|
|
817
850
|
declare const generateId: (limit?: number, radix?: number) => string;
|
|
818
851
|
|
|
819
|
-
export { CURRENT_DEVICE, SELECTED_LANG, SELECTED_THEME, TRANSLATION, VALIDATION_MESSAGES, appendQueryParams, base64ToBlob, compareRoutes, concatArray, copyText, debounceSignal, deepEqual, downloadByBlob, downloadByUrl, fillUrlWithParams, formatDate, formatToLocaledDate, formatToSpacedNumber, generateId, getAvailableHeight, getChainedValue, getCorrectedPosition, isDatePeriod, isNullable, isNumber, isObject, makeQuery, materializeRoutePath, normalizeUrl, parseQueryArray, parseQueryParams, parseToDate, parseToDatePeriod, reformatDateToISO, throttleSignal, toDate, truncate };
|
|
852
|
+
export { CHANGE_LANG, CHANGE_THEME, CURRENT_DEVICE, SELECTED_LANG, SELECTED_THEME, TRANSLATION, VALIDATION_MESSAGES, appendQueryParams, base64ToBlob, compareRoutes, concatArray, copyText, debounceSignal, deepEqual, downloadByBlob, downloadByUrl, fillUrlWithParams, formatDate, formatToLocaledDate, formatToSpacedNumber, generateId, getAvailableHeight, getChainedValue, getCorrectedPosition, isDatePeriod, isNullable, isNumber, isObject, makeQuery, materializeRoutePath, normalizeUrl, parseQueryArray, parseQueryParams, parseToDate, parseToDatePeriod, reformatDateToISO, throttleSignal, toDate, truncate };
|
|
820
853
|
export type { AnyDict, AnyType, Appearance, Devices, Direction, ElementEdges, ElementPosition, ElementRect, ElementSize, ErrorResponse, JsonObject, JsonPrimitive, JsonValue, Langs, LiteralOf, Mutable, Nullable, NullableProps, Nullish, OptionalExcept, PageableRequest, PageableResponse, Query, QueryParams, QueryScalar, RequiredExcept, RestMethods, SelectIconOption, SelectOption, SortToken, Themes, ValidationErrorData, ValidationMessages, ValueOf };
|
|
821
854
|
//# sourceMappingURL=reforgium-internal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reforgium-internal.d.ts","sources":["../../../../libs/internal/src/models/components.ts","../../../../libs/internal/src/models/elements.ts","../../../../libs/internal/src/models/util.ts","../../../../libs/internal/src/models/api.ts","../../../../libs/internal/src/tokens/locale.token.ts","../../../../libs/internal/src/tokens/theme.token.ts","../../../../libs/internal/src/tokens/device.token.ts","../../../../libs/internal/src/tokens/validation-messages.token.ts","../../../../libs/internal/src/utils/web.utils.ts","../../../../libs/internal/src/utils/timers.utils.ts","../../../../libs/internal/src/utils/date.utils.ts","../../../../libs/internal/src/utils/types.utils.ts","../../../../libs/internal/src/utils/format.utils.ts","../../../../libs/internal/src/utils/positions.utils.ts","../../../../libs/internal/src/utils/available-height.utils.ts","../../../../libs/internal/src/utils/get-chained-value.utils.ts","../../../../libs/internal/src/utils/urls.utils.ts","../../../../libs/internal/src/utils/routes.utils.ts","../../../../libs/internal/src/utils/deep-equal.utils.ts","../../../../libs/internal/src/utils/generate.utils.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":[],"mappings":";;AAAA;;;;;;;;;;;;;;;AAeG;;AAGH;;;;;;;;;;;;;;AAcG;AACG;;;;;;AAQN;;;;;;;;;;;;;;;;;;AAkBG;;;AAGD;;;AC9DF;;;;;AAKG;AACG;AAEN;;;;;;AAMG;AACG;;;;AAKN;;;;;;AAMG;AACG;;;;AAKN;;;;;;;;;AASG;AACG;AACJ;AACA;AACA;AACA;;AAGF;;;;;;;;;;;;;;AAcG;AACG;;AChEN;;;;;AAKG;AAEG;AAEN;;;;;AAKG;AACG;AAEN;;;;;;AAMG;AACG;AAEN;;;;;AAKG;AACG;AAEN;;;;;;AAMG;AACG;;;AAEN;;;AAGG;AACG;;;AAEN;;;;;;AAMG;;;;AAKH;;;;AAIG;AACG;AAEN;;;;AAIG;AACG;AAEN;;;AAGG;AACG;;;AAEN;;AAEG;AACG;AAEN;;AAEG;AACG;AAAoC;;AAE1C;;AAEG;AACG;AAAqB;;;AC7F3B;;;AAGG;AACG;AAEN;;;;;;;;;;AAUG;;AAGH;;;AAGG;AACG;AACJ;;;AAGG;;AAGH;;;AAGG;;AAGH;;;;;AAKG;;;AAIL;;;;;AAKG;AACG;AACJ;;;AAGG;AACH;AACE;;AAEG;;AAGH;;AAEG;;AAGH;;AAEG;;;AAIL;;AAEG;;AAGH;;AAEG;;;AAIL;;;AAGG;AACG;AACJ;;;AAGG;AACH;AAEA;;;AAGG;;AAGH;;;;AAIG;;AAGH;;;AAGG;;;AAIL;;;;;AAKG;AACG;AACJ;;AAEG;;AAGH;;AAEG;;AAGH;;;AAGG;;AAGH;;;AAGG;AACH;AACD;AAED;;;AAGG;AACG;AAEN;;;;;;;;;;;;;AAaG;AACG;;ACnKN;;;;;;;AAOG;;AAGH;;;AAGG;AACH;AACE;;;;;;AAMG;AACH;AACA;;;;;AAKG;;;AAIL;;;;;;AAMG;AACH;AAEA;;;;;AAKG;AACH;;
|
|
1
|
+
{"version":3,"file":"reforgium-internal.d.ts","sources":["../../../../libs/internal/src/models/components.ts","../../../../libs/internal/src/models/elements.ts","../../../../libs/internal/src/models/util.ts","../../../../libs/internal/src/models/api.ts","../../../../libs/internal/src/tokens/locale.token.ts","../../../../libs/internal/src/tokens/theme.token.ts","../../../../libs/internal/src/tokens/device.token.ts","../../../../libs/internal/src/tokens/validation-messages.token.ts","../../../../libs/internal/src/utils/web.utils.ts","../../../../libs/internal/src/utils/timers.utils.ts","../../../../libs/internal/src/utils/date.utils.ts","../../../../libs/internal/src/utils/types.utils.ts","../../../../libs/internal/src/utils/format.utils.ts","../../../../libs/internal/src/utils/positions.utils.ts","../../../../libs/internal/src/utils/available-height.utils.ts","../../../../libs/internal/src/utils/get-chained-value.utils.ts","../../../../libs/internal/src/utils/urls.utils.ts","../../../../libs/internal/src/utils/routes.utils.ts","../../../../libs/internal/src/utils/deep-equal.utils.ts","../../../../libs/internal/src/utils/generate.utils.ts"],"sourcesContent":[null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null],"names":[],"mappings":";;AAAA;;;;;;;;;;;;;;;AAeG;;AAGH;;;;;;;;;;;;;;AAcG;AACG;;;;;;AAQN;;;;;;;;;;;;;;;;;;AAkBG;;;AAGD;;;AC9DF;;;;;AAKG;AACG;AAEN;;;;;;AAMG;AACG;;;;AAKN;;;;;;AAMG;AACG;;;;AAKN;;;;;;;;;AASG;AACG;AACJ;AACA;AACA;AACA;;AAGF;;;;;;;;;;;;;;AAcG;AACG;;AChEN;;;;;AAKG;AAEG;AAEN;;;;;AAKG;AACG;AAEN;;;;;;AAMG;AACG;AAEN;;;;;AAKG;AACG;AAEN;;;;;;AAMG;AACG;;;AAEN;;;AAGG;AACG;;;AAEN;;;;;;AAMG;;;;AAKH;;;;AAIG;AACG;AAEN;;;;AAIG;AACG;AAEN;;;AAGG;AACG;;;AAEN;;AAEG;AACG;AAEN;;AAEG;AACG;AAAoC;;AAE1C;;AAEG;AACG;AAAqB;;;AC7F3B;;;AAGG;AACG;AAEN;;;;;;;;;;AAUG;;AAGH;;;AAGG;AACG;AACJ;;;AAGG;;AAGH;;;AAGG;;AAGH;;;;;AAKG;;;AAIL;;;;;AAKG;AACG;AACJ;;;AAGG;AACH;AACE;;AAEG;;AAGH;;AAEG;;AAGH;;AAEG;;;AAIL;;AAEG;;AAGH;;AAEG;;;AAIL;;;AAGG;AACG;AACJ;;;AAGG;AACH;AAEA;;;AAGG;;AAGH;;;;AAIG;;AAGH;;;AAGG;;;AAIL;;;;;AAKG;AACG;AACJ;;AAEG;;AAGH;;AAEG;;AAGH;;;AAGG;;AAGH;;;AAGG;AACH;AACD;AAED;;;AAGG;AACG;AAEN;;;;;;;;;;;;;AAaG;AACG;;ACnKN;;;;;;;AAOG;;AAGH;;;AAGG;AACH;AACE;;;;;;AAMG;AACH;AACA;;;;;AAKG;;;AAIL;;;;;;;;;;AAUG;AACH;AAEA;;;;;;AAMG;AACH;AAEA;;;;;;AAMG;AACH;AAEA;;;;;AAKG;AACH;;ACrEA;;;;;AAKG;;AAGH;;;;;;;;;;AAUG;AACH;AAEA;;;AAGG;AACH;AACA;;AC1BA;;;;;;;;;;AAUG;AACG;AAEN;;;;;;;;;;;;;;;;;;;AAmBG;AACH;;ACjCA;;;;;;;AAOG;AACG;;;AAGJ;;AAGF;;;;;;;;;AASG;AACG;AAEN;;;;;;;;;;;;;;;;AAgBG;AACH;;AC7CA;;;;;;;AAOG;AACH;AAaA;;;;;;;AAOG;AACH;AAcA;;;;;;;AAOG;AACH;AA8BA;;;;;;;;AAQG;AACH;;ACtFA;;AAA0F;AAyB1F;;AAA0F;;AC3B1F;;;;;;;;;;;;;;AAcG;AACH;AAsBA;;;;;;AAMG;AACH;AAQA;;;;;;;;AAQG;AACH;AAuCA;;;;;;;;;;;;;;AAcG;AACH;AAyBA;;;;;;;;AAQG;AACH;AAGA;;;;;;AAMG;AACH;AAQA;;;;;AAKG;AACH;;AC7KA;;;;;;;;;AASG;AACH;AAGA;;;;;;;;;;;AAWG;AACH;AAYA;;;;;;;;;AASG;AACH;AAGA;;;;;;;;;;;;;;AAcG;AACH;AAmCA;;;;;;;;;;;;AAYG;AACH;;ACnHA;;;;;;;AAOG;AACH;AAYA;;;;;;;;AAQG;AACH;;AC3BA;AAEA;;ACJA;;;;;;;AAOG;AACH;;ACRA;;;;;;;AAOG;AACH;;ACNA;;;;;;AAMG;AACH;AAUA;;;;;;;;;AASG;AACH;AAQA;;;;;;;AAOG;AACH;AAcA;;;;;;AAMG;AACH;;AC/DA;;;;;;;;;;AAUG;AACH;AAeA;;;;;;;;;;;AAWG;AACH;AAUA;;;;;;;AAOG;AACH;;ACxDA;;;;;;;;;AASG;AACH;;ACbA;;;"}
|